Pārlūkot izejas kodu

fix(target): Fixed affectObject NOT_FRIEND targeting dead characters

Noe Caratini 2 gadi atpakaļ
vecāks
revīzija
1e4615316e

+ 4 - 0
src/main/java/com/l2jserver/gameserver/model/skills/targets/AffectObjectStaticImpl.java

@@ -83,6 +83,10 @@ public enum AffectObjectStaticImpl implements AffectObject {
 	NOT_FRIEND {
 		@Override
 		public boolean affectObject(L2Character caster, L2Object object) {
+			if (object instanceof L2Character target && target.isDead()) {
+				return false;
+			}
+			
 			return object.isAutoAttackable(caster);
 		}
 	},

+ 17 - 0
src/test/java/com/l2jserver/gameserver/model/skills/targets/AffectObjectTest.java

@@ -167,6 +167,23 @@ class AffectObjectTest {
 		assertTrue(NOT_FRIEND.affectObject(caster, object));
 	}
 	
+	@Test
+	@DisplayName("Test affect object NOT_FRIEND, when target is not dead.")
+	void testAffectObjectNotFriendTargetIsNotDead() {
+		when(creature.isDead()).thenReturn(false);
+		when(creature.isAutoAttackable(caster)).thenReturn(true);
+		
+		assertTrue(NOT_FRIEND.affectObject(caster, creature));
+	}
+	
+	@Test
+	@DisplayName("Test affect object NOT_FRIEND, when target is dead.")
+	void testAffectObjectNotFriendTargetIsDead() {
+		when(creature.isDead()).thenReturn(true);
+		
+		assertFalse(NOT_FRIEND.affectObject(caster, creature));
+	}
+	
 	@Test
 	@DisplayName("Test affect object OBJECT_DEAD_NPC_BODY, when target is not NPC.")
 	void testAffectObjectObjectDeadNpcBodyNotNpc() {