Переглянути джерело

Fix a few checks.

* Fixed a bug where skills with target type ENEMY could attack dead
targets.
* Fixed a bug where in a pvp zone you needed to press CTRL to attack a
target.
HorridoJoho 3 роки тому
батько
коміт
14b9dc4af3

+ 8 - 2
src/main/java/com/l2jserver/gameserver/model/actor/L2Playable.java

@@ -35,6 +35,7 @@ import com.l2jserver.gameserver.model.events.impl.character.OnCreatureKill;
 import com.l2jserver.gameserver.model.events.returns.TerminateReturn;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.skills.Skill;
+import com.l2jserver.gameserver.model.zone.ZoneId;
 import com.l2jserver.gameserver.network.serverpackets.EtcStatusUpdate;
 
 /**
@@ -216,14 +217,19 @@ public abstract class L2Playable extends L2Character {
 		if (targetPlayer == this) {
 			return false; // Target player is self
 		}
-		if (targetPlayer.getKarma() != 0) {
-			return false; // Target player has karma
+
+		if (player.isInsideZone(ZoneId.PVP) && player.isInsideZone(ZoneId.PVP)) {
+			return true;
 		}
 		
 		if ((player.getClan() != null) && (targetPlayer.getClan() != null) && targetPlayer.getClan().isAtWarWith(player.getClanId()) && player.getClan().isAtWarWith(targetPlayer.getClanId()) && (player.getWantsPeace() == 0) && (targetPlayer.getWantsPeace() == 0) && !player.isAcademyMember()
 			&& !targetPlayer.isAcademyMember()) {
 			return true; // Target player and player has war
 		}
+
+		if (targetPlayer.getKarma() != 0) {
+			return false; // Target player has karma
+		}
 		
 		return targetPlayer.getPvpFlag() != 0;
 	}

+ 1 - 1
src/main/java/com/l2jserver/gameserver/model/skills/targets/TargetType.java

@@ -90,7 +90,7 @@ public enum TargetType {
 	ENEMY {
 		@Override
 		public L2Object getTarget(Skill skill, L2Character caster, L2Object target) {
-			if ((target == null) || (caster.getObjectId() == target.getObjectId()) || !target.isCharacter()) {
+			if ((target == null) || ((L2Character) target).isDead() || (caster.getObjectId() == target.getObjectId()) || !target.isCharacter()) {
 				return null;
 			}