Преглед изворни кода

Merge pull request #74 from L2J/hotfix/self-attack

Hotfix/self attack
Zoey76 пре 9 година
родитељ
комит
599f3a8b5b

+ 19 - 13
L2J_Server/java/com/l2jserver/gameserver/ai/L2AttackableAI.java

@@ -1380,11 +1380,13 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 				setAttackTarget(caster.getMostHated());
 			}
 		}
-		L2Character attackTarget = getAttackTarget();
+		
+		final L2Character attackTarget = getAttackTarget();
 		if (attackTarget == null)
 		{
 			return false;
 		}
+		
 		double dist = caster.calculateDistance(attackTarget, false, false);
 		double dist2 = dist - attackTarget.getTemplate().getCollisionRadius();
 		double range = caster.getPhysicalAttackRange() + caster.getTemplate().getCollisionRadius() + attackTarget.getTemplate().getCollisionRadius();
@@ -1401,10 +1403,9 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 				if (!caster.isAffectedBySkill(sk.getId()))
 				{
 					clientStopMoving(null);
-					// L2Object target = attackTarget;
 					caster.setTarget(caster);
 					caster.doCast(sk);
-					// _actor.setTarget(target);
+					_actor.setTarget(attackTarget);
 					return true;
 				}
 				// ----------------------------------------
@@ -1419,20 +1420,18 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 					if (target != null)
 					{
 						clientStopMoving(null);
-						L2Object targets = attackTarget;
 						caster.setTarget(target);
 						caster.doCast(sk);
-						caster.setTarget(targets);
+						caster.setTarget(attackTarget);
 						return true;
 					}
 				}
 				if (canParty(sk))
 				{
 					clientStopMoving(null);
-					L2Object targets = attackTarget;
 					caster.setTarget(caster);
 					caster.doCast(sk);
-					caster.setTarget(targets);
+					caster.setTarget(attackTarget);
 					return true;
 				}
 			}
@@ -1489,10 +1488,9 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 				if (target != null)
 				{
 					clientStopMoving(null);
-					L2Object targets = attackTarget;
 					caster.setTarget(target);
 					caster.doCast(sk);
-					caster.setTarget(targets);
+					caster.setTarget(attackTarget);
 					return true;
 				}
 			}
@@ -1531,15 +1529,18 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 						clientStopMoving(null);
 						caster.setTarget(leader);
 						caster.doCast(sk);
+						caster.setTarget(attackTarget);
 						return true;
 					}
 				}
 			}
+			
 			if (Rnd.get(100) < ((100 - percentage) / 3))
 			{
 				clientStopMoving(null);
 				caster.setTarget(caster);
 				caster.doCast(sk);
+				caster.setTarget(attackTarget);
 				return true;
 			}
 			
@@ -1566,6 +1567,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 							clientStopMoving(null);
 							caster.setTarget(obj);
 							caster.doCast(sk);
+							caster.setTarget(attackTarget);
 							return true;
 						}
 					}
@@ -1579,6 +1581,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 					{
 						continue;
 					}
+					
 					L2Npc targets = ((L2Npc) obj);
 					if (targets.isInMyClan(caster))
 					{
@@ -1587,6 +1590,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 							clientStopMoving(null);
 							caster.setTarget(caster);
 							caster.doCast(sk);
+							caster.setTarget(attackTarget);
 							return true;
 						}
 					}
@@ -1609,10 +1613,9 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 				if (target != null)
 				{
 					clientStopMoving(null);
-					L2Object targets = attackTarget;
 					caster.setTarget(target);
 					caster.doCast(sk);
-					caster.setTarget(targets);
+					caster.setTarget(attackTarget);
 					return true;
 				}
 			}
@@ -1763,6 +1766,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 							clientStopMoving(null);
 							caster.setTarget(leader);
 							caster.doCast(sk);
+							caster.setTarget(attackTarget);
 							return true;
 						}
 					}
@@ -1780,6 +1784,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 					{
 						continue;
 					}
+					
 					if (Rnd.get(100) < 10)
 					{
 						if (GeoData.getInstance().canSeeTarget(caster, targets))
@@ -1787,6 +1792,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 							clientStopMoving(null);
 							caster.setTarget(obj);
 							caster.doCast(sk);
+							caster.setTarget(attackTarget);
 							return true;
 						}
 					}
@@ -1808,6 +1814,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 							clientStopMoving(null);
 							caster.setTarget(caster);
 							caster.doCast(sk);
+							caster.setTarget(attackTarget);
 							return true;
 						}
 					}
@@ -1829,10 +1836,9 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 			if (target != null)
 			{
 				clientStopMoving(null);
-				L2Object targets = attackTarget;
 				caster.setTarget(target);
 				caster.doCast(sk);
-				caster.setTarget(targets);
+				caster.setTarget(attackTarget);
 				return true;
 			}
 		}

+ 4 - 3
L2J_Server/java/com/l2jserver/gameserver/model/actor/L2Attackable.java

@@ -663,7 +663,7 @@ public class L2Attackable extends L2Npc
 	}
 	
 	/**
-	 * Add damage and hate to the attacker AggroInfo of the L2Attackable _aggroList.
+	 * Adds damage and hate to the attacker aggression list for this character.
 	 * @param attacker The L2Character that gave damages to this L2Attackable
 	 * @param damage The number of damages given by the attacker L2Character
 	 * @param aggro The hate (=damage) given by the attacker L2Character
@@ -675,13 +675,14 @@ public class L2Attackable extends L2Npc
 			return;
 		}
 		
-		final L2PcInstance targetPlayer = attacker.getActingPlayer();
 		// Get the AggroInfo of the attacker L2Character from the _aggroList of the L2Attackable
 		final AggroInfo ai = getAggroList().computeIfAbsent(attacker, AggroInfo::new);
 		ai.addDamage(damage);
-		// traps does not cause aggro
+		
+		// Traps does not cause aggro
 		// making this hack because not possible to determine if damage made by trap
 		// so just check for triggered trap here
+		final L2PcInstance targetPlayer = attacker.getActingPlayer();
 		if ((targetPlayer == null) || (targetPlayer.getTrap() == null) || !targetPlayer.getTrap().isTriggered())
 		{
 			ai.addHate(aggro);

+ 3 - 2
L2J_Server/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -5960,8 +5960,9 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 					}
 				}
 			}
+			
 			// Notify AI
-			if (skill.isBad() && (skill.getTargetType() != L2TargetType.SELF) && !skill.hasEffectType(L2EffectType.HATE))
+			if (skill.isBad() && !skill.hasEffectType(L2EffectType.HATE))
 			{
 				for (L2Object target : targets)
 				{
@@ -5970,7 +5971,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 						final L2Character creature = (L2Character) target;
 						if (creature.hasAI())
 						{
-							// notify target AI about the attack
+							// Notify target AI about the attack
 							creature.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, this);
 						}
 					}