Somon 3 Опубликовано 8 мая, 2017 Всем привет. Как решить данную проблему. Включил короче награду за PvP а там, не даёт награду за PvP, иногда даёт а иногда нет. За PK даёт без проблем но вот с PvP проблемы. Сборка Grind-Team HighFive. Исходники есть. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Demoncool 1110 Опубликовано 8 мая, 2017 возможно есть задержка пвп награды(от набива пвп) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zGosu 396 Опубликовано 8 мая, 2017 Всем привет. Как решить данную проблему. Включил короче награду за PvP а там, не даёт награду за PvP, иногда даёт а иногда нет. За PK даёт без проблем но вот с PvP проблемы. Сборка Grind-Team HighFive. Исходники есть. В методе doDie добавить конфиг надо. Там обычно пополняется счетчик PvP @[member='override'] public boolean doDie(final L2Character killer) { if (killer != null) { final L2PcInstance pk = killer.getActingPlayer(); if (pk != null) { EventDispatcher.getInstance().notifyEventAsync( new OnPlayerPvPKill(pk, this), this); TvTEvent.onKill(killer, this); if (L2Event.isParticipant(pk)) { pk.getEventStatus().getKills().add(this); } if (Config.PVP_PK_REWARD) { pk.addItem( "PVP/PK", Config.PVP_PK_REWARD_ID, Config.PVP_PK_REWARD_COUNT * (pk.isPremium() ? Config.PREMIUM_PVP_PK_REWARD_COUNT : 1), pk, true); } // announce pvp/pk if (Config.ANNOUNCE_PK_PVP && !pk.isGM()) { String msg = ""; if (getPvpFlag() == 0) { msg = Config.ANNOUNCE_PK_MSG.replace("$killer", pk.getName()).replace("$target", getName()); if (Config.ANNOUNCE_PK_PVP_NORMAL_MESSAGE) { final SystemMessage sm = SystemMessage .getSystemMessage(SystemMessageId.S1); sm.addString(msg); Broadcast.toAllOnlinePlayers(sm); } else { Broadcast.toAllOnlinePlayers(msg, false); } } else if (getPvpFlag() != 0) { msg = Config.ANNOUNCE_PVP_MSG.replace("$killer", pk.getName()).replace("$target", getName()); if (Config.ANNOUNCE_PK_PVP_NORMAL_MESSAGE) { final SystemMessage sm = SystemMessage .getSystemMessage(SystemMessageId.S1); sm.addString(msg); Broadcast.toAllOnlinePlayers(sm); } else { Broadcast.toAllOnlinePlayers(msg, false); } } } } broadcastStatusUpdate(); // Clear resurrect xp calculation setExpBeforeDeath(0); // Issues drop of Cursed Weapon. if (isCursedWeaponEquipped()) { CursedWeaponsManager.getInstance().drop( _cursedWeaponEquippedId, killer); } else if (isCombatFlagEquipped()) { // TODO: Fort siege during TW?? if (TerritoryWarManager.getInstance().isTWInProgress()) { TerritoryWarManager.getInstance().dropCombatFlag(this, true, false); } else { final Fort fort = FortManager.getInstance().getFort(this); if (fort != null) { FortSiegeManager.getInstance().dropCombatFlag(this, fort.getResidenceId()); } else { final int slot = getInventory().getSlotFromItem( getInventory().getItemByItemId(9819)); getInventory().unEquipItemInBodySlot(slot); destroyItem("CombatFlag", getInventory() .getItemByItemId(9819), null, true); } } } else { final boolean insidePvpZone = isInsideZone(ZoneId.PVP) || isInsideZone(ZoneId.SIEGE); if ((pk == null) || !pk.isCursedWeaponEquipped()) { onDieDropItem(killer); // Check if any item should be // dropped if (!insidePvpZone) { if ((pk != null) && (pk.getClan() != null) && (getClan() != null) && !isAcademyMember() && !(pk.isAcademyMember())) { if ((_clan.isAtWarWith(pk.getClanId()) && pk .getClan().isAtWarWith(_clan.getId())) || (isInSiege() && pk.isInSiege())) { if (AntiFeedManager.getInstance().check(killer, this)) { // when your reputation score is 0 or below, // the other clan cannot acquire any // reputation points if (getClan().getReputationScore() > 0) { pk.getClan() .addReputationScore( Config.REPUTATION_SCORE_PER_KILL, false); } // when the opposing sides reputation score // is 0 or below, your clans reputation // score does not decrease if (pk.getClan().getReputationScore() > 0) { _clan.takeReputationScore( Config.REPUTATION_SCORE_PER_KILL, false); } } } } } // If player is Lucky shouldn't get penalized. if (!isLucky() && !insidePvpZone) { calculateDeathExpPenalty(killer, isAtWarWith(pk)); } } } } // Kill the L2PcInstance if (!super.doDie(killer)) { return false; } if (isMounted()) { stopFeed(); } synchronized (this) { if (isFakeDeath()) { stopFakeDeath(true); } } // Unsummon Cubics if (!_cubics.isEmpty()) { for (final L2CubicInstance cubic : _cubics.values()) { cubic.stopAction(); cubic.cancelDisappear(); } _cubics.clear(); } if (isChannelized()) { getSkillChannelized().abortChannelization(); } if (isInParty() && getParty().isInDimensionalRift()) { getParty().getDimensionalRift().getDeadMemberList().add(this); } if (getAgathionId() != 0) { setAgathionId(0); } // calculate death penalty buff calculateDeathPenaltyBuffLevel(killer); stopRentPet(); stopWaterTask(); AntiFeedManager.getInstance().setLastDeathTime(getObjectId()); return true; } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Somon 3 Опубликовано 8 мая, 2017 (изменено) В методе doDie добавить конфиг надо. Там обычно пополняется счетчик PvP @[member='override'] public boolean doDie(final L2Character killer) { if (killer != null) { final L2PcInstance pk = killer.getActingPlayer(); if (pk != null) { EventDispatcher.getInstance().notifyEventAsync( new OnPlayerPvPKill(pk, this), this); TvTEvent.onKill(killer, this); if (L2Event.isParticipant(pk)) { pk.getEventStatus().getKills().add(this); } if (Config.PVP_PK_REWARD) { pk.addItem( "PVP/PK", Config.PVP_PK_REWARD_ID, Config.PVP_PK_REWARD_COUNT * (pk.isPremium() ? Config.PREMIUM_PVP_PK_REWARD_COUNT : 1), pk, true); } // announce pvp/pk if (Config.ANNOUNCE_PK_PVP && !pk.isGM()) { String msg = ""; if (getPvpFlag() == 0) { msg = Config.ANNOUNCE_PK_MSG.replace("$killer", pk.getName()).replace("$target", getName()); if (Config.ANNOUNCE_PK_PVP_NORMAL_MESSAGE) { final SystemMessage sm = SystemMessage .getSystemMessage(SystemMessageId.S1); sm.addString(msg); Broadcast.toAllOnlinePlayers(sm); } else { Broadcast.toAllOnlinePlayers(msg, false); } } else if (getPvpFlag() != 0) { msg = Config.ANNOUNCE_PVP_MSG.replace("$killer", pk.getName()).replace("$target", getName()); if (Config.ANNOUNCE_PK_PVP_NORMAL_MESSAGE) { final SystemMessage sm = SystemMessage .getSystemMessage(SystemMessageId.S1); sm.addString(msg); Broadcast.toAllOnlinePlayers(sm); } else { Broadcast.toAllOnlinePlayers(msg, false); } } } } broadcastStatusUpdate(); // Clear resurrect xp calculation setExpBeforeDeath(0); // Issues drop of Cursed Weapon. if (isCursedWeaponEquipped()) { CursedWeaponsManager.getInstance().drop( _cursedWeaponEquippedId, killer); } else if (isCombatFlagEquipped()) { // TODO: Fort siege during TW?? if (TerritoryWarManager.getInstance().isTWInProgress()) { TerritoryWarManager.getInstance().dropCombatFlag(this, true, false); } else { final Fort fort = FortManager.getInstance().getFort(this); if (fort != null) { FortSiegeManager.getInstance().dropCombatFlag(this, fort.getResidenceId()); } else { final int slot = getInventory().getSlotFromItem( getInventory().getItemByItemId(9819)); getInventory().unEquipItemInBodySlot(slot); destroyItem("CombatFlag", getInventory() .getItemByItemId(9819), null, true); } } } else { final boolean insidePvpZone = isInsideZone(ZoneId.PVP) || isInsideZone(ZoneId.SIEGE); if ((pk == null) || !pk.isCursedWeaponEquipped()) { onDieDropItem(killer); // Check if any item should be // dropped if (!insidePvpZone) { if ((pk != null) && (pk.getClan() != null) && (getClan() != null) && !isAcademyMember() && !(pk.isAcademyMember())) { if ((_clan.isAtWarWith(pk.getClanId()) && pk .getClan().isAtWarWith(_clan.getId())) || (isInSiege() && pk.isInSiege())) { if (AntiFeedManager.getInstance().check(killer, this)) { // when your reputation score is 0 or below, // the other clan cannot acquire any // reputation points if (getClan().getReputationScore() > 0) { pk.getClan() .addReputationScore( Config.REPUTATION_SCORE_PER_KILL, false); } // when the opposing sides reputation score // is 0 or below, your clans reputation // score does not decrease if (pk.getClan().getReputationScore() > 0) { _clan.takeReputationScore( Config.REPUTATION_SCORE_PER_KILL, false); } } } } } // If player is Lucky shouldn't get penalized. if (!isLucky() && !insidePvpZone) { calculateDeathExpPenalty(killer, isAtWarWith(pk)); } } } } // Kill the L2PcInstance if (!super.doDie(killer)) { return false; } if (isMounted()) { stopFeed(); } synchronized (this) { if (isFakeDeath()) { stopFakeDeath(true); } } // Unsummon Cubics if (!_cubics.isEmpty()) { for (final L2CubicInstance cubic : _cubics.values()) { cubic.stopAction(); cubic.cancelDisappear(); } _cubics.clear(); } if (isChannelized()) { getSkillChannelized().abortChannelization(); } if (isInParty() && getParty().isInDimensionalRift()) { getParty().getDimensionalRift().getDeadMemberList().add(this); } if (getAgathionId() != 0) { setAgathionId(0); } // calculate death penalty buff calculateDeathPenaltyBuffLevel(killer); stopRentPet(); stopWaterTask(); AntiFeedManager.getInstance().setLastDeathTime(getObjectId()); return true; } На сколько я понимаю нужно искать в Player.java так? Но, тут я уже нашёл doKillInPeace и этот метод отвечает за обновление и вручение награды. Изменено 8 мая, 2017 пользователем Somon Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Somon 3 Опубликовано 8 мая, 2017 возможно есть задержка пвп награды(от набива пвп) Там и так проверка по IP идёт. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zGosu 396 Опубликовано 11 мая, 2017 Там и так проверка по IP идёт. найди строчку, где выдается награда за PvP и посмотри, какие условия нужны, что бы итемы выдавались (искать можно через конфиг). Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Somon 3 Опубликовано 12 мая, 2017 найди строчку, где выдается награда за PvP и посмотри, какие условия нужны, что бы итемы выдавались (искать можно через конфиг). вот нашёл: public final void doKillInPeace(final Player killer) // Check if the L2Player killed haven't Karma { if(_karma <= 0 && (_event == null || _event.checkPvP(killer, this))) { if(Config.SERVICES_PK_PVP_KILL_ENABLE) { if(Config.SERVICES_PK_PVP_TIE_IF_SAME_IP) { if(this.getIP() == null ? killer.getIP() != null : !this.getIP().equals(killer.getIP())) ItemFunctions.addItem(killer, Config.SERVICES_PK_KILL_REWARD_ITEM, Config.SERVICES_PK_KILL_REWARD_COUNT, true); } else ItemFunctions.addItem(killer, Config.SERVICES_PK_KILL_REWARD_ITEM, Config.SERVICES_PK_KILL_REWARD_COUNT, true); } doPurePk(killer); } else { if(Config.SERVICES_PK_PVP_KILL_ENABLE) { if(Config.SERVICES_PK_PVP_TIE_IF_SAME_IP) { if(this.getIP() == null ? killer.getIP() != null : !this.getIP().equals(killer.getIP())) ItemFunctions.addItem(killer, Config.SERVICES_PVP_KILL_REWARD_ITEM, Config.SERVICES_PVP_KILL_REWARD_COUNT, true); } else ItemFunctions.addItem(killer, Config.SERVICES_PVP_KILL_REWARD_ITEM, Config.SERVICES_PVP_KILL_REWARD_COUNT, true); } killer.setPvpKills(killer.getPvpKills() + 1); } } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
gawric 49 Опубликовано 12 мая, 2017 new OnPlayerPvPKill(pk, this), this); ого! это он каждый раз новый обьект создает? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Somon 3 Опубликовано 12 мая, 2017 new OnPlayerPvPKill(pk, this), this); ого! это он каждый раз новый обьект создает? спроси у того человека) я хз) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Demoncool 1110 Опубликовано 12 мая, 2017 Там и так проверка по IP идёт. и что дает проверка по ип? зашел с другом и набил 1к пвп? профит? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zGosu 396 Опубликовано 12 мая, 2017 спроси у того человека) я хз) if(Config.SERVICES_PK_PVP_TIE_IF_SAME_IP) Отключите этот конфиг, и будет Вам счастья) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Somon 3 Опубликовано 12 мая, 2017 (изменено) if(Config.SERVICES_PK_PVP_TIE_IF_SAME_IP) Отключите этот конфиг, и будет Вам счастья) в конфигах поставить False? То тогда не будет проверки по IP. Изменено 12 мая, 2017 пользователем Somon Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Somon 3 Опубликовано 12 мая, 2017 и что дает проверка по ип? зашел с другом и набил 1к пвп? профит? так то да, но все ровно. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zGosu 396 Опубликовано 12 мая, 2017 в конфигах поставить False? То тогда не будет проверки по IP. Так из за нее и не выдает. Обход тем более элементарный, поэтому от этой "защиты" толку мало. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Somon 3 Опубликовано 12 мая, 2017 Так из за нее и не выдает. Обход тем более элементарный, поэтому от этой "защиты" толку мало. а ясно, но иногда же даёт а иногда нет. Хотя, убрать в исходном коде, или в настройках отключить? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zGosu 396 Опубликовано 12 мая, 2017 а ясно, но иногда же даёт а иногда нет. Хотя, убрать в исходном коде, или в настройках отключить? Напишите так: if (Config.SERVICES_PK_PVP_KILL_ENABLE) { ItemFunctions.addItem(killer, Config.SERVICES_PVP_KILL_REWARD_ITEM, Config.SERVICES_PVP_KILL_REWARD_COUNT, true); } killer.setPvpKills(killer.getPvpKills() + 1); А защиту я бы переписал (хотя бы из лыжи взять проверку по ip) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Somon 3 Опубликовано 12 мая, 2017 Напишите так: if (Config.SERVICES_PK_PVP_KILL_ENABLE) { ItemFunctions.addItem(killer, Config.SERVICES_PVP_KILL_REWARD_ITEM, Config.SERVICES_PVP_KILL_REWARD_COUNT, true); } killer.setPvpKills(killer.getPvpKills() + 1); А защиту я бы переписал (хотя бы из лыжи взять проверку по ip) тоесть менять нужно в исходниках,а не в конфигах? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zGosu 396 Опубликовано 12 мая, 2017 (изменено) тоесть менять нужно в исходниках,а не в конфигах? В конфигах можете просто False поставить... Просто если это из-за конфига, то придется полностью переписать в этом месте (если Вам нужна проверка по IP). Изменено 12 мая, 2017 пользователем zGosu Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Somon 3 Опубликовано 12 мая, 2017 Напишите так: if (Config.SERVICES_PK_PVP_KILL_ENABLE) { ItemFunctions.addItem(killer, Config.SERVICES_PVP_KILL_REWARD_ITEM, Config.SERVICES_PVP_KILL_REWARD_COUNT, true); } killer.setPvpKills(killer.getPvpKills() + 1); А защиту я бы переписал (хотя бы из лыжи взять проверку по ip) public final void doKillInPeace(final Player killer) // Check if the L2Player killed haven't Karma { if(_karma <= 0 && (_event == null || _event.checkPvP(killer, this))) { if(Config.SERVICES_PK_PVP_KILL_ENABLE){ ItemFunctions.addItem(killer, Config.SERVICES_PK_KILL_REWARD_ITEM, Config.SERVICES_PK_KILL_REWARD_COUNT, true); } doPurePk(killer); } else { if (Config.SERVICES_PK_PVP_KILL_ENABLE) { ItemFunctions.addItem(killer, Config.SERVICES_PVP_KILL_REWARD_ITEM, Config.SERVICES_PVP_KILL_REWARD_COUNT, true); } killer.setPvpKills(killer.getPvpKills() + 1); } } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Somon 3 Опубликовано 12 мая, 2017 public final void doKillInPeace(final Player killer) // Check if the L2Player killed haven't Karma { if(_karma <= 0 && (_event == null || _event.checkPvP(killer, this))) { if(Config.SERVICES_PK_PVP_KILL_ENABLE){ ItemFunctions.addItem(killer, Config.SERVICES_PK_KILL_REWARD_ITEM, Config.SERVICES_PK_KILL_REWARD_COUNT, true); } doPurePk(killer); } else { if (Config.SERVICES_PK_PVP_KILL_ENABLE) { ItemFunctions.addItem(killer, Config.SERVICES_PVP_KILL_REWARD_ITEM, Config.SERVICES_PVP_KILL_REWARD_COUNT, true); } killer.setPvpKills(killer.getPvpKills() + 1); } } почему пк не отключить? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Somon 3 Опубликовано 12 мая, 2017 а уже понял) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zGosu 396 Опубликовано 12 мая, 2017 public final void doKillInPeace(final Player killer) // Check if the L2Player killed haven't Karma { if(_karma <= 0 && (_event == null || _event.checkPvP(killer, this))) { if(Config.SERVICES_PK_PVP_KILL_ENABLE){ ItemFunctions.addItem(killer, Config.SERVICES_PK_KILL_REWARD_ITEM, Config.SERVICES_PK_KILL_REWARD_COUNT, true); } doPurePk(killer); } else { if (Config.SERVICES_PK_PVP_KILL_ENABLE) { ItemFunctions.addItem(killer, Config.SERVICES_PVP_KILL_REWARD_ITEM, Config.SERVICES_PVP_KILL_REWARD_COUNT, true); } killer.setPvpKills(killer.getPvpKills() + 1); } } почему пк не отключить? Ну вы сказали, что он работает) Лучше сначала протестируйте работу с отключенным конфигом. Если будет работать, то правьте проверку по ip и всё. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Somon 3 Опубликовано 13 мая, 2017 Ну вы сказали, что он работает) Лучше сначала протестируйте работу с отключенным конфигом. Если будет работать, то правьте проверку по ip и всё. Не работает. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zGosu 396 Опубликовано 13 мая, 2017 Не работает. Очень странно... Тогда следующий вариант: Логируйте каждую строчку этого кода и смотрите, какой часть кода исполняется, а какой нет: else { _log.warning("Ошбика в строке 1 <>"); if(Config.SERVICES_PK_PVP_KILL_ENABLE) { _log.warning("Ошбика в строке 2 <>"); if(Config.SERVICES_PK_PVP_TIE_IF_SAME_IP) { _log.warning("Ошбика в строке 3 <>"); if(this.getIP() == null ? killer.getIP() != null : !this.getIP().equals(killer.getIP())){ _log.warning("Ошбика в строке 4 <>"); ItemFunctions.addItem(killer, Config.SERVICES_PVP_KILL_REWARD_ITEM, Config.SERVICES_PVP_KILL_REWARD_COUNT, true); } } else{ _log.warning("Ошбика в строке 5 <>"); ItemFunctions.addItem(killer, Config.SERVICES_PVP_KILL_REWARD_ITEM, Config.SERVICES_PVP_KILL_REWARD_COUNT, true); } } killer.setPvpKills(killer.getPvpKills() + 1); } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Somon 3 Опубликовано 13 мая, 2017 Очень странно... Тогда следующий вариант: Логируйте каждую строчку этого кода и смотрите, какой часть кода исполняется, а какой нет: else { _log.warning("Ошбика в строке 1 <>"); if(Config.SERVICES_PK_PVP_KILL_ENABLE) { _log.warning("Ошбика в строке 2 <>"); if(Config.SERVICES_PK_PVP_TIE_IF_SAME_IP) { _log.warning("Ошбика в строке 3 <>"); if(this.getIP() == null ? killer.getIP() != null : !this.getIP().equals(killer.getIP())){ _log.warning("Ошбика в строке 4 <>"); ItemFunctions.addItem(killer, Config.SERVICES_PVP_KILL_REWARD_ITEM, Config.SERVICES_PVP_KILL_REWARD_COUNT, true); } } else{ _log.warning("Ошбика в строке 5 <>"); ItemFunctions.addItem(killer, Config.SERVICES_PVP_KILL_REWARD_ITEM, Config.SERVICES_PVP_KILL_REWARD_COUNT, true); } } killer.setPvpKills(killer.getPvpKills() + 1); } тут походу ошибка в другом. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты