в этой сборке 3.0 с остальными проблемами была оснавная причина всех проблем это вот эта строка if (GSConfig.SERVER_VERSION.startsWith("3.1")) { её просто надо было стереть о то всюду но в данной проблеме я хз.
смотри PvpService.getInstance().doReward(victim); там как раз сообщение посылается // Announce that player has died. PacketSendUtility.broadcastPacketAndReceive(victim, SM_SYSTEM_MESSAGE.STR_MSG_COMBAT_FRIENDLY_DEATH_TO_B(victim.getName(), winner.getName()));
охх разобрался)) отсутствовала строка в этой сборке 3.0 PacketSendUtility.broadcastPacketAndReceive(victim, SM_SYSTEM_MESSAGE.STR_MSG_COMBAT_FRIENDLY_DEATH_TO_B(victim.getName(), winner.getName())); проверил в в других сборках 2.7 и 3.9 там есть эти строки а в 3.0 вообще не было!
компил прошёл успешно + GS был запущен успешно преблема решилась на 50 % килл убиваем персонажа килл теперь анонсируется. остальные 50 % не решились Проблема заключается в том что при убийстве не пришли Очки бездны + не был зачислен килл за убийство!
там же смотри Код: // Distribute AP to groups and players that had damage. for (AggroInfo aggro : victim.getAggroList().getFinalDamageList(true)) { if (aggro.getAttacker() instanceof Player) { success = rewardPlayer(victim, totalDamage, aggro); } else if (aggro.getAttacker() instanceof PlayerGroup) { success = rewardPlayerGroup(victim, totalDamage, aggro); } else if (aggro.getAttacker() instanceof PlayerAlliance) { success = rewardPlayerAlliance(victim, totalDamage, aggro); } // Add damage last, so we don't include damage from same race. (Duels, Arena) if (success) playerDamage += aggro.getDamage(); }
это есть всё! сравнивал со сборкой 3.9 и 2.7 тоже самое у 2.7 написано всё но у 3.9 написано вот так вот // Distribute AP to groups and players that had damage. for (AggroInfo aggro : victim.getAggroList().getFinalDamageList(true)) { success = false; if (aggro.getAttacker() instanceof Player) { success = rewardPlayer(victim, totalDamage, aggro); } else if (aggro.getAttacker() instanceof PlayerGroup) { success = rewardPlayerGroup(victim, totalDamage, aggro); } else if (aggro.getAttacker() instanceof PlayerAlliance) { success = rewardPlayerAlliance(victim, totalDamage, aggro); } // Add damage last, so we don't include damage from same race. (Duels, Arena) if (success) playerDamage += aggro.getDamage(); }
Код: // Distribute AP to groups and players that had damage. for (AggroInfo aggro : victim.getAggroList().getFinalDamageList(true)) { success = false; if (aggro.getAttacker() instanceof Player) { success = rewardPlayer(victim, totalDamage, aggro); } else if (aggro.getAttacker() instanceof PlayerGroup) { success = rewardPlayerGroup(victim, totalDamage, aggro); } else if (aggro.getAttacker() instanceof PlayerAlliance) { success = rewardPlayerAlliance(victim, totalDamage, aggro); } // Add damage last, so we don't include damage from same race. (Duels, Arena) if (success) playerDamage += aggro.getDamage(); }
тут ещё есть такой нюанс. в данной сборке 3.0 файла PvPRewardService ---- PvpService ---- PvPSpreeService а вот в других я смотрел 3.9 + в 2.7 дак там только 1 файл PvpService
Ну так что, ещё идеи или помощь будет? Как исправить а то уже и не знаю куда смотреть где это норм работает и по похожим скриптам!
Код: private boolean rewardPlayer(Player victim, int totalDamage, AggroInfo aggro) { // Reward Player Player winner = ((Player) aggro.getAttacker()); // Don't Reward Player out of range/dead/same faction if (winner.getRace() == victim.getRace() || !MathUtil.isIn3dRange(winner, victim, GroupConfig.GROUP_MAX_DISTANCE) || winner.getLifeStats().isAlreadyDead()) { return false; } int baseApReward = 1; int baseGpReward = 1; int baseXpReward = 1; int baseDpReward = 1; if (this.getKillsFor(winner.getObjectId(), victim.getObjectId()) < CustomConfig.MAX_DAILY_PVP_KILLS) { baseApReward = StatFunctions.calculatePvpApGained(victim, winner.getAbyssRank().getRank().getId(), winner.getLevel()); baseGpReward = StatFunctions.calculatePvpGpGained(victim, winner.getAbyssRank().getRank().getId(), winner.getLevel()); baseXpReward = StatFunctions.calculatePvpXpGained(victim, winner.getAbyssRank().getRank().getId(), winner.getLevel()); baseDpReward = StatFunctions.calculatePvpDpGained(victim, winner.getAbyssRank().getRank().getId(), winner.getLevel()); if (EventSystem.ENABLE_CRAZY) { if (winner.getRace() != victim.getRace()) { CrazyDaevaService.getInstance().increaseRawKillCount(winner); } } } int apPlayerReward = Math.round(baseApReward * aggro.getDamage() / totalDamage); apPlayerReward = (int) RewardType.AP_PLAYER.calcReward(winner, apPlayerReward); int gpPlayerReward = Math.round(baseGpReward * aggro.getDamage() / totalDamage); gpPlayerReward = (int) RewardType.GP_PLAYER.calcReward(winner, gpPlayerReward); int xpPlayerReward = Math.round(baseXpReward * winner.getRates().getXpPlayerGainRate() * aggro.getDamage() / totalDamage); int dpPlayerReward = Math.round(baseDpReward * winner.getRates().getDpPlayerRate() * aggro.getDamage() / totalDamage); AbyssPointsService.addAp(winner, victim, apPlayerReward); AbyssPointsService.addGp(winner, victim, gpPlayerReward); winner.getCommonData().addExp(xpPlayerReward, RewardType.PVP_KILL, victim.getName()); winner.getCommonData().addEventExp(xpPlayerReward); winner.getCommonData().addDp(dpPlayerReward); this.addKillFor(winner.getObjectId(), victim.getObjectId()); return true; } это выше версия части не должно быть по идее но работает