Перейти к содержанию
Авторизация  
Somon

Награда за PvP - HighFive

Рекомендуемые сообщения

Всем привет. Как решить данную проблему. Включил короче награду за PvP а там, не даёт награду за PvP, иногда даёт а иногда нет.

За PK даёт без проблем но вот с PvP проблемы.

Сборка Grind-Team HighFive. Исходники есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

возможно есть задержка пвп награды(от набива пвп)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем привет. Как решить данную проблему. Включил короче награду за 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;
    } 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В методе 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 и этот метод отвечает за обновление и вручение награды.

Изменено пользователем Somon

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

возможно есть задержка пвп награды(от набива пвп)

Там и так проверка по IP идёт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там и так проверка по IP идёт.

найди строчку, где выдается награда за PvP и посмотри, какие условия нужны, что бы итемы выдавались (искать можно через конфиг). 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

найди строчку, где выдается награда за 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);
		}
	}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

new OnPlayerPvPKill(pk, this), this); 

ого! это он каждый раз новый обьект создает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

new OnPlayerPvPKill(pk, this), this); 

ого! это он каждый раз новый обьект создает?

спроси у того человека) я хз)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там и так проверка по IP идёт.

и что дает проверка по ип?

зашел с другом и набил 1к пвп? профит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спроси у того человека) я хз)

if(Config.SERVICES_PK_PVP_TIE_IF_SAME_IP)

Отключите этот конфиг, и будет Вам счастья) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
if(Config.SERVICES_PK_PVP_TIE_IF_SAME_IP)

Отключите этот конфиг, и будет Вам счастья) 

 

в конфигах поставить False? То тогда не будет проверки по IP.

Изменено пользователем Somon

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и что дает проверка по ип?

зашел с другом и набил 1к пвп? профит?

так то да, но все ровно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в конфигах поставить False? То тогда не будет проверки по IP.

Так из за нее и не выдает. Обход тем более элементарный, поэтому от этой "защиты" толку мало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так из за нее и не выдает. Обход тем более элементарный, поэтому от этой "защиты" толку мало.

а ясно, но иногда же даёт а иногда нет. Хотя, убрать в исходном коде, или в настройках отключить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а ясно, но иногда же даёт а иногда нет. Хотя, убрать в исходном коде, или в настройках отключить?

Напишите так:
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)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Напишите так:
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)

 

тоесть менять нужно в исходниках,а не в конфигах?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тоесть менять нужно в исходниках,а не в конфигах?

В конфигах можете просто False поставить... Просто если это из-за конфига, то придется полностью переписать в этом месте (если Вам нужна проверка по IP). 

Изменено пользователем zGosu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Напишите так:
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);
		}
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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);
		}
}

почему пк не отключить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

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 и всё.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вы сказали, что он работает) 

Лучше сначала протестируйте работу с отключенным конфигом. Если будет работать, то правьте проверку по ip и всё.

Не работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не работает.

Очень странно... Тогда следующий вариант: Логируйте каждую строчку этого кода и смотрите, какой часть кода исполняется, а какой нет:

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);
} 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Очень странно... Тогда следующий вариант: Логируйте каждую строчку этого кода и смотрите, какой часть кода исполняется, а какой нет:

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);
} 

 

 

тут походу ошибка в другом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...