浏览代码

Support for checking if attack was done by skill or normal hit

DrHouse 16 年之前
父节点
当前提交
acad836366
共有 33 个文件被更改,包括 76 次插入64 次删除
  1. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminEventEngine.java
  2. 3 3
      L2_GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminKill.java
  3. 3 3
      L2_GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminMenu.java
  4. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/handler/skillhandlers/BallistaBomb.java
  5. 2 2
      L2_GameServer/java/net/sf/l2j/gameserver/handler/skillhandlers/Blow.java
  6. 2 2
      L2_GameServer/java/net/sf/l2j/gameserver/handler/skillhandlers/Mdam.java
  7. 2 2
      L2_GameServer/java/net/sf/l2j/gameserver/handler/skillhandlers/Pdam.java
  8. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/handler/skillhandlers/StrSiegeAssault.java
  9. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/handler/skillhandlers/Unlock.java
  10. 8 8
      L2_GameServer/java/net/sf/l2j/gameserver/model/L2Attackable.java
  11. 5 5
      L2_GameServer/java/net/sf/l2j/gameserver/model/L2Character.java
  12. 2 2
      L2_GameServer/java/net/sf/l2j/gameserver/model/L2Summon.java
  13. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/model/MobGroup.java
  14. 3 2
      L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2ArtefactInstance.java
  15. 2 1
      L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2ControllableMobInstance.java
  16. 3 2
      L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2FortCommanderInstance.java
  17. 3 2
      L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2GrandBossInstance.java
  18. 2 2
      L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2MonsterInstance.java
  19. 2 1
      L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2NpcWalkerInstance.java
  20. 3 3
      L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
  21. 3 2
      L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2RaidBossInstance.java
  22. 2 2
      L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2SepulcherNpcInstance.java
  23. 3 2
      L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2SiegeFlagInstance.java
  24. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2TrapInstance.java
  25. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/model/actor/status/PcStatus.java
  26. 7 2
      L2_GameServer/java/net/sf/l2j/gameserver/model/quest/Quest.java
  27. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/model/zone/type/L2DamageZone.java
  28. 2 2
      L2_GameServer/java/net/sf/l2j/gameserver/skills/Formulas.java
  29. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectDamOverTime.java
  30. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectSignetMDam.java
  31. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/skills/l2skills/L2SkillChargeDmg.java
  32. 2 2
      L2_GameServer/java/net/sf/l2j/gameserver/skills/l2skills/L2SkillDrain.java
  33. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/skills/l2skills/L2SkillElemental.java

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminEventEngine.java

@@ -634,7 +634,7 @@ public class AdminEventEngine implements IAdminCommandHandler
 			try
 			{
 				L2PcInstance target = L2World.getInstance().getPlayer(it.next());
-				target.reduceCurrentHp(target.getMaxHp() + target.getMaxCp() + 1, activeChar);
+				target.reduceCurrentHp(target.getMaxHp() + target.getMaxCp() + 1, activeChar, null);
 			}
 			catch (Exception e)
 			{

+ 3 - 3
L2_GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminKill.java

@@ -127,14 +127,14 @@ public class AdminKill implements IAdminCommandHandler
 		{
 			if (!((L2PcInstance) target).isGM())
 				target.stopAllEffects(); // e.g. invincibility effect
-			target.reduceCurrentHp(target.getMaxHp() + target.getMaxCp() + 1, activeChar);
+			target.reduceCurrentHp(target.getMaxHp() + target.getMaxCp() + 1, activeChar, null);
 		}
 		else if (Config.L2JMOD_CHAMPION_ENABLE && target.isChampion())
-			target.reduceCurrentHp(target.getMaxHp() * Config.L2JMOD_CHAMPION_HP + 1, activeChar);
+			target.reduceCurrentHp(target.getMaxHp() * Config.L2JMOD_CHAMPION_HP + 1, activeChar, null);
 		else
 		{
 			if(target.isInvul()) target.setIsInvul(false);
-			target.reduceCurrentHp(target.getMaxHp() + 1, activeChar);
+			target.reduceCurrentHp(target.getMaxHp() + 1, activeChar, null);
 		}
 		if (Config.DEBUG)
 			_log.fine("GM: " + activeChar.getName() + "(" + activeChar.getObjectId() + ")" + " killed character " + target.getObjectId());

+ 3 - 3
L2_GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminMenu.java

@@ -232,13 +232,13 @@ public class AdminMenu implements IAdminCommandHandler
 		{
 			if (target instanceof L2PcInstance)
 			{
-				target.reduceCurrentHp(target.getMaxHp() + target.getMaxCp() + 1, activeChar);
+				target.reduceCurrentHp(target.getMaxHp() + target.getMaxCp() + 1, activeChar, null);
 				filename = "charmanage.htm";
 			}
 			else if (Config.L2JMOD_CHAMPION_ENABLE && target.isChampion())
-				target.reduceCurrentHp(target.getMaxHp() * Config.L2JMOD_CHAMPION_HP + 1, activeChar);
+				target.reduceCurrentHp(target.getMaxHp() * Config.L2JMOD_CHAMPION_HP + 1, activeChar, null);
 			else
-				target.reduceCurrentHp(target.getMaxHp() + 1, activeChar);
+				target.reduceCurrentHp(target.getMaxHp() + 1, activeChar, null);
 		}
 		else
 		{

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/handler/skillhandlers/BallistaBomb.java

@@ -46,7 +46,7 @@ public class BallistaBomb implements ISkillHandler
 		{
 			if (Rnd.get(3) == 0)
 			{
-				target.reduceCurrentHp(target.getMaxHp(), activeChar);
+				target.reduceCurrentHp(target.getMaxHp(), activeChar, skill);
 			}
 		}
 	}

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/handler/skillhandlers/Blow.java

@@ -136,7 +136,7 @@ public class Blow implements ISkillHandler
 			                if (summon.getCurrentHp() < tDmg) tDmg = (int)summon.getCurrentHp() - 1;
 			                if (tDmg > 0)
 			                {
-			                    summon.reduceCurrentHp(tDmg, activeChar );
+			                    summon.reduceCurrentHp(tDmg, activeChar ,skill);
 			                    damage -= tDmg;
 			                }
 			            }
@@ -169,7 +169,7 @@ public class Blow implements ISkillHandler
 	        		player.sendPacket(smsg);
 	        	}
 	        	else
-	        		target.reduceCurrentHp(damage, activeChar);
+	        		target.reduceCurrentHp(damage, activeChar, skill);
 				// Manage attack or cast break of the target (calculating rate, sending message...)
                 if (!target.isRaid() && Formulas.getInstance().calcAtkBreak(target, damage))
                 {

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/handler/skillhandlers/Mdam.java

@@ -172,7 +172,7 @@ public class Mdam implements ISkillHandler
 					}
 				}
 				
-				target.reduceCurrentHp(damage, activeChar);
+				target.reduceCurrentHp(damage, activeChar, skill);
 				
 				// Logging damage
 				if (Config.LOG_GAME_DAMAGE && damage > 5000 && activeChar instanceof L2PcInstance)
@@ -256,7 +256,7 @@ public class Mdam implements ISkillHandler
 						skill.getEffects(activeCubic, target);
 				}
 				
-				target.reduceCurrentHp(damage, activeCubic.getOwner());
+				target.reduceCurrentHp(damage, activeCubic.getOwner(), skill);
 			}
 		}
 	}

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/handler/skillhandlers/Pdam.java

@@ -213,11 +213,11 @@ public class Pdam implements ISkillHandler
 						
 						}
 						else
-							target.reduceCurrentHp(damage, activeChar);
+							target.reduceCurrentHp(damage, activeChar, skill);
 					}
 					else
 					{
-						target.reduceCurrentHp(damage, activeChar);
+						target.reduceCurrentHp(damage, activeChar, skill);
 					}
 				
 				}

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/handler/skillhandlers/StrSiegeAssault.java

@@ -101,7 +101,7 @@ public class StrSiegeAssault implements ISkillHandler
 				
 				if (damage > 0)
 				{
-					target.reduceCurrentHp(damage, activeChar);
+					target.reduceCurrentHp(damage, activeChar, skill);
 					if (soul && weapon != null)
 						weapon.setChargedSoulshot(L2ItemInstance.CHARGED_NONE);
 					

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/handler/skillhandlers/Unlock.java

@@ -173,7 +173,7 @@ public class Unlock implements ISkillHandler
 						chest.setSpecialDrop();
 						chest.setMustRewardExpSp(false);
 						chest.setInteracted();
-						chest.reduceCurrentHp(99999999, activeChar);
+						chest.reduceCurrentHp(99999999, activeChar, skill);
 					}
 					else
 					{

+ 8 - 8
L2_GameServer/java/net/sf/l2j/gameserver/model/L2Attackable.java

@@ -354,9 +354,9 @@ public class L2Attackable extends L2NpcInstance
      *
      */
     @Override
-	public void reduceCurrentHp(double damage, L2Character attacker)
+	public void reduceCurrentHp(double damage, L2Character attacker, L2Skill skill)
     {
-        reduceCurrentHp(damage, attacker, true, false);
+        reduceCurrentHp(damage, attacker, true, false, skill);
     }
 
     /**
@@ -368,7 +368,7 @@ public class L2Attackable extends L2NpcInstance
      *
      */
     @Override
-	public void reduceCurrentHp(double damage, L2Character attacker, boolean awake, boolean isDOT)
+	public void reduceCurrentHp(double damage, L2Character attacker, boolean awake, boolean isDOT, L2Skill skill)
     {
     	/*
         if ((this instanceof L2SiegeGuardInstance) && (attacker instanceof L2SiegeGuardInstance))
@@ -395,7 +395,7 @@ public class L2Attackable extends L2NpcInstance
         if (isEventMob) return;
 
         // Add damage and hate to the attacker AggroInfo of the L2Attackable _aggroList
-        if (attacker != null) addDamage(attacker, (int)damage);
+        if (attacker != null) addDamage(attacker, (int)damage, skill);
 
         // If this L2Attackable is a L2MonsterInstance and it has spawned minions, call its minions to battle
         if (this instanceof L2MonsterInstance)
@@ -404,14 +404,14 @@ public class L2Attackable extends L2NpcInstance
             if (this instanceof L2MinionInstance)
             {
                 master = ((L2MinionInstance)this).getLeader();
-                if (!master.isInCombat()&&!master.isDead()) master.addDamage(attacker, 1);
+                if (!master.isInCombat()&&!master.isDead()) master.addDamage(attacker, 1, null);
             }
             if (master.hasMinions())
                 master.callMinionsToAssist(attacker);
         }
 
         // Reduce the current HP of the L2Attackable and launch the doDie Task if necessary
-        super.reduceCurrentHp(damage, attacker, awake, isDOT);
+        super.reduceCurrentHp(damage, attacker, awake, isDOT, skill);
     }
 
     public synchronized void setMustRewardExpSp(boolean value) {
@@ -805,7 +805,7 @@ public class L2Attackable extends L2NpcInstance
      * @param damage The number of damages given by the attacker L2Character
      *
      */
-    public void addDamage(L2Character attacker, int damage)
+    public void addDamage(L2Character attacker, int damage, L2Skill skill)
     {
         // Notify the L2Attackable AI with EVT_ATTACKED
         if (!this.isDead())
@@ -817,7 +817,7 @@ public class L2Attackable extends L2NpcInstance
 
                     if (getTemplate().getEventQuests(Quest.QuestEventType.ON_ATTACK) !=null)
                     	for (Quest quest: getTemplate().getEventQuests(Quest.QuestEventType.ON_ATTACK))
-                    		quest.notifyAttack(this, player, damage, attacker instanceof L2Summon);
+                    		quest.notifyAttack(this, player, damage, attacker instanceof L2Summon, skill);
                 }
             }
             catch (Exception e) { _log.log(Level.SEVERE, "", e); }

+ 5 - 5
L2_GameServer/java/net/sf/l2j/gameserver/model/L2Character.java

@@ -5051,11 +5051,11 @@ public abstract class L2Character extends L2Object
 				}
 				
 				// reduce targets HP
-				target.reduceCurrentHp(damage, this);
+				target.reduceCurrentHp(damage, this, null);
 				
 				if (reflectedDamage > 0)
 				{
-					reduceCurrentHp(reflectedDamage, target, true, false);
+					reduceCurrentHp(reflectedDamage, target, true, false, null);
 	
 					// Custom messages - nice but also more network load
 					/*
@@ -6530,9 +6530,9 @@ public abstract class L2Character extends L2Object
 	// Status - NEED TO REMOVE ONCE L2CHARTATUS IS COMPLETE
 	// Method - Public
 	public void addStatusListener(L2Character object) { getStatus().addStatusListener(object); }
-	public void reduceCurrentHp(double i, L2Character attacker) { reduceCurrentHp(i, attacker, true, false); }
-	public void reduceCurrentHpByDOT(double i, L2Character attacker) { reduceCurrentHp(i, attacker, true, true); }
-	public void reduceCurrentHp(double i, L2Character attacker, boolean awake, boolean isDOT)
+	public void reduceCurrentHp(double i, L2Character attacker, L2Skill skill) { reduceCurrentHp(i, attacker, true, false, skill); }
+	public void reduceCurrentHpByDOT(double i, L2Character attacker, L2Skill skill) { reduceCurrentHp(i, attacker, true, true, skill); }
+	public void reduceCurrentHp(double i, L2Character attacker, boolean awake, boolean isDOT, L2Skill skill)
 	{
 		if (Config.L2JMOD_CHAMPION_ENABLE && isChampion() && Config.L2JMOD_CHAMPION_HP != 0)
 			getStatus().reduceHp(i/Config.L2JMOD_CHAMPION_HP, attacker, awake, isDOT);

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/model/L2Summon.java

@@ -839,9 +839,9 @@ public abstract class L2Summon extends L2PlayableInstance
 		}
 	}
 
-	public void reduceCurrentHp(int damage, L2Character attacker)
+	public void reduceCurrentHp(int damage, L2Character attacker, L2Skill skill)
 	{
-		super.reduceCurrentHp(damage, attacker);
+		super.reduceCurrentHp(damage, attacker, skill);
 		SystemMessage sm;
 		if (this instanceof L2SummonInstance)
 			sm = new SystemMessage(SystemMessageId.SUMMON_RECEIVED_DAMAGE_S2_BY_S1);

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/model/MobGroup.java

@@ -205,7 +205,7 @@ public final class MobGroup
         	if (mobInst == null) continue;
 
             if (!mobInst.isDead())
-                mobInst.reduceCurrentHp(mobInst.getMaxHp() + 1, activeChar);
+                mobInst.reduceCurrentHp(mobInst.getMaxHp() + 1, activeChar, null);
 
             SpawnTable.getInstance().deleteSpawn(mobInst.getSpawn(), false);
         }

+ 3 - 2
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2ArtefactInstance.java

@@ -16,6 +16,7 @@ package net.sf.l2j.gameserver.model.actor.instance;
 
 import net.sf.l2j.gameserver.ai.CtrlIntention;
 import net.sf.l2j.gameserver.model.L2Character;
+import net.sf.l2j.gameserver.model.L2Skill;
 import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
 import net.sf.l2j.gameserver.network.serverpackets.MyTargetSelected;
 import net.sf.l2j.gameserver.network.serverpackets.ValidateLocation;
@@ -105,7 +106,7 @@ public final class L2ArtefactInstance extends L2NpcInstance
 	}
 
 	@Override
-	public void reduceCurrentHp(double damage, L2Character attacker){}
+	public void reduceCurrentHp(double damage, L2Character attacker, L2Skill skill){}
 	@Override
-	public void reduceCurrentHp(double damage, L2Character attacker, boolean awake, boolean isDOT){}
+	public void reduceCurrentHp(double damage, L2Character attacker, boolean awake, boolean isDOT, L2Skill skill){}
 }

+ 2 - 1
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2ControllableMobInstance.java

@@ -19,6 +19,7 @@ import net.sf.l2j.gameserver.ai.CtrlIntention;
 import net.sf.l2j.gameserver.ai.L2CharacterAI;
 import net.sf.l2j.gameserver.ai.L2ControllableMobAI;
 import net.sf.l2j.gameserver.model.L2Character;
+import net.sf.l2j.gameserver.model.L2Skill;
 import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate;
 
 /**
@@ -93,7 +94,7 @@ public class L2ControllableMobInstance extends L2MonsterInstance
 	}
 
 	@Override
-	public void reduceCurrentHp(double i, L2Character attacker, boolean awake, boolean isDOT)
+	public void reduceCurrentHp(double i, L2Character attacker, boolean awake, boolean isDOT, L2Skill skill)
     {
 		if (isInvul() || isDead())
 			return;

+ 3 - 2
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2FortCommanderInstance.java

@@ -22,6 +22,7 @@ import net.sf.l2j.gameserver.instancemanager.FortSiegeManager;
 import net.sf.l2j.gameserver.instancemanager.FortSiegeManager.SiegeSpawn;
 import net.sf.l2j.gameserver.model.L2CharPosition;
 import net.sf.l2j.gameserver.model.L2Character;
+import net.sf.l2j.gameserver.model.L2Skill;
 import net.sf.l2j.gameserver.model.L2Spawn;
 import net.sf.l2j.gameserver.model.L2Summon;
 import net.sf.l2j.gameserver.network.serverpackets.NpcSay;
@@ -101,7 +102,7 @@ public class L2FortCommanderInstance extends L2FortSiegeGuardInstance
         }
     }
     @Override
-    public final void addDamage(L2Character attacker, int damage)
+    public final void addDamage(L2Character attacker, int damage, L2Skill skill)
     {
     	L2Spawn spawn = getSpawn();
     	if (spawn != null && canTalk())
@@ -135,7 +136,7 @@ public class L2FortCommanderInstance extends L2FortSiegeGuardInstance
 				}
 			}
 		}
-    	super.addDamage(attacker, damage);
+    	super.addDamage(attacker, damage, skill);
     }
     
 	private class ScheduleTalkTask implements Runnable

+ 3 - 2
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2GrandBossInstance.java

@@ -16,6 +16,7 @@ package net.sf.l2j.gameserver.model.actor.instance;
 
 import net.sf.l2j.gameserver.instancemanager.RaidBossPointsManager;
 import net.sf.l2j.gameserver.model.L2Character;
+import net.sf.l2j.gameserver.model.L2Skill;
 import net.sf.l2j.gameserver.model.L2Summon;
 import net.sf.l2j.gameserver.network.SystemMessageId;
 import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
@@ -59,9 +60,9 @@ public final class L2GrandBossInstance extends L2MonsterInstance
      *
      */
     @Override
-	public void reduceCurrentHp(double damage, L2Character attacker, boolean awake, boolean isDOT)
+	public void reduceCurrentHp(double damage, L2Character attacker, boolean awake, boolean isDOT, L2Skill skill)
     {
-        super.reduceCurrentHp(damage, attacker, awake, isDOT);
+        super.reduceCurrentHp(damage, attacker, awake, isDOT, skill);
     }
 
     /**

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2MonsterInstance.java

@@ -184,8 +184,8 @@ public class L2MonsterInstance extends L2Attackable
                     if (minion != null && !minion.isDead())
                     {
                         if(isRaid()&&!isRaidMinion())
-                        	minion.addDamage(attacker, 100);
-                        else minion.addDamage(attacker, 1);
+                        	minion.addDamage(attacker, 100, null);
+                        else minion.addDamage(attacker, 1, null);
                     }
                 }
             }

+ 2 - 1
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2NpcWalkerInstance.java

@@ -20,6 +20,7 @@ import net.sf.l2j.Config;
 import net.sf.l2j.gameserver.ai.L2CharacterAI;
 import net.sf.l2j.gameserver.ai.L2NpcWalkerAI;
 import net.sf.l2j.gameserver.model.L2Character;
+import net.sf.l2j.gameserver.model.L2Skill;
 import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
 import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate;
 import net.sf.l2j.gameserver.util.Broadcast;
@@ -93,7 +94,7 @@ public class L2NpcWalkerInstance extends L2NpcInstance
 	 * @param awake  ignore it
 	 */
 	@Override
-    public void reduceCurrentHp(double i, L2Character attacker, boolean awake, boolean isDOT)
+    public void reduceCurrentHp(double i, L2Character attacker, boolean awake, boolean isDOT, L2Skill skill)
 	{}
 
 	/**

+ 3 - 3
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java

@@ -8899,7 +8899,7 @@ public final class L2PcInstance extends L2PlayableInstance
 			if (reduceHp < 1)
 				reduceHp = 1;
 
-			reduceCurrentHp(reduceHp,L2PcInstance.this,false, false);
+			reduceCurrentHp(reduceHp,L2PcInstance.this,false, false, null);
 			//reduced hp, becouse not rest
 			SystemMessage sm = new SystemMessage(SystemMessageId.DROWN_DAMAGE_S1);
 			sm.addNumber((int)reduceHp);
@@ -10190,7 +10190,7 @@ public final class L2PcInstance extends L2PlayableInstance
 	public void addExpAndSp(long addToExp, int addToSp) { getStat().addExpAndSp(addToExp, addToSp); }
     public void removeExpAndSp(long removeExp, int removeSp) { getStat().removeExpAndSp(removeExp, removeSp); }
     @Override
-	public void reduceCurrentHp(double i, L2Character attacker)
+	public void reduceCurrentHp(double i, L2Character attacker, L2Skill skill)
     {
     	getStatus().reduceHp(i, attacker);
 
@@ -10199,7 +10199,7 @@ public final class L2PcInstance extends L2PlayableInstance
     		getTrainedBeast().onOwnerGotAttacked(attacker);
     }
 	@Override
-	public void reduceCurrentHp(double value, L2Character attacker, boolean awake, boolean isDOT)
+	public void reduceCurrentHp(double value, L2Character attacker, boolean awake, boolean isDOT, L2Skill skill)
 	{
 		getStatus().reduceHp(value, attacker, awake, isDOT);
 

+ 3 - 2
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2RaidBossInstance.java

@@ -18,6 +18,7 @@ import net.sf.l2j.gameserver.ThreadPoolManager;
 import net.sf.l2j.gameserver.instancemanager.RaidBossPointsManager;
 import net.sf.l2j.gameserver.instancemanager.RaidBossSpawnManager;
 import net.sf.l2j.gameserver.model.L2Character;
+import net.sf.l2j.gameserver.model.L2Skill;
 import net.sf.l2j.gameserver.model.L2Spawn;
 import net.sf.l2j.gameserver.model.L2Summon;
 import net.sf.l2j.gameserver.network.SystemMessageId;
@@ -131,9 +132,9 @@ public final class L2RaidBossInstance extends L2MonsterInstance
      *
      */
     @Override
-    public void reduceCurrentHp(double damage, L2Character attacker, boolean awake, boolean isDOT)
+    public void reduceCurrentHp(double damage, L2Character attacker, boolean awake, boolean isDOT, L2Skill skill)
     {
-        super.reduceCurrentHp(damage, attacker, awake, isDOT);
+        super.reduceCurrentHp(damage, attacker, awake, isDOT, skill);
     }
 
     public void healFull()

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2SepulcherNpcInstance.java

@@ -222,7 +222,7 @@ public class L2SepulcherNpcInstance extends L2NpcInstance
 			case 31486:
 			case 31487:
 				setIsInvul(false);
-				reduceCurrentHp(getMaxHp() + 1, player);
+				reduceCurrentHp(getMaxHp() + 1, player, null);
 				if (_spawnMonsterTask != null)
 					_spawnMonsterTask.cancel(true);
 				_spawnMonsterTask = ThreadPoolManager.getInstance().scheduleEffect(new SpawnMonster(getNpcId()), 3500);
@@ -242,7 +242,7 @@ public class L2SepulcherNpcInstance extends L2NpcInstance
 			case 31466:
 			case 31467:
 				setIsInvul(false);
-				reduceCurrentHp(getMaxHp() + 1, player);
+				reduceCurrentHp(getMaxHp() + 1, player, null);
 				if (player.getParty() != null && !player.getParty().isLeader(player))
 					player = player.getParty().getLeader();
 				player.addItem("Quest", HALLS_KEY, 1, player, true);

+ 3 - 2
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2SiegeFlagInstance.java

@@ -20,6 +20,7 @@ import net.sf.l2j.gameserver.instancemanager.SiegeManager;
 import net.sf.l2j.gameserver.model.L2Character;
 import net.sf.l2j.gameserver.model.L2Clan;
 import net.sf.l2j.gameserver.model.L2SiegeClan;
+import net.sf.l2j.gameserver.model.L2Skill;
 import net.sf.l2j.gameserver.model.actor.status.SiegeFlagStatus;
 import net.sf.l2j.gameserver.model.entity.Siege;
 import net.sf.l2j.gameserver.network.SystemMessageId;
@@ -152,9 +153,9 @@ public class L2SiegeFlagInstance extends L2NpcInstance
 	}
 	
     @Override
-	public void reduceCurrentHp(double damage, L2Character attacker)
+	public void reduceCurrentHp(double damage, L2Character attacker, L2Skill skill)
     {
-    	super.reduceCurrentHp(damage, attacker);
+    	super.reduceCurrentHp(damage, attacker, skill);
     	if(canTalk())
     	{
     		if (getCastle() != null && getCastle().getSiege().getIsInProgress())

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2TrapInstance.java

@@ -198,7 +198,7 @@ public class L2TrapInstance extends L2Trap
 				continue;
 			
 			if (atked instanceof L2Attackable)
-				((L2Attackable)atked).addDamage(getOwner(), 1);
+				((L2Attackable)atked).addDamage(getOwner(), 1, null);
 		}
 	}
 	

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/status/PcStatus.java

@@ -89,7 +89,7 @@ public class PcStatus extends PlayableStatus
                 if (summon.getCurrentHp() < tDmg) tDmg = (int)summon.getCurrentHp() - 1;
                 if (tDmg > 0)
                 {
-                    summon.reduceCurrentHp(tDmg, attacker);
+                    summon.reduceCurrentHp(tDmg, attacker, null);
                     value -= tDmg;
                     fullValue = (int) value; // reduce the annouced value here as player will get a message about summon dammage
                 }

+ 7 - 2
L2_GameServer/java/net/sf/l2j/gameserver/model/quest/Quest.java

@@ -334,12 +334,12 @@ public class Quest extends ManagedScript
 	}
 	
 	// these are methods to call from java
-	public final boolean notifyAttack(L2NpcInstance npc, L2PcInstance attacker, int damage, boolean isPet)
+	public final boolean notifyAttack(L2NpcInstance npc, L2PcInstance attacker, int damage, boolean isPet, L2Skill skill)
 	{
 		String res = null;
 		try
 		{
-			res = onAttack(npc, attacker, damage, isPet);
+			res = onAttack(npc, attacker, damage, isPet, skill);
 		}
 		catch (Exception e)
 		{
@@ -548,6 +548,11 @@ public class Quest extends ManagedScript
 		return null;
 	}
 	
+	public String onAttack(L2NpcInstance npc, L2PcInstance attacker, int damage, boolean isPet, L2Skill skill)
+	{
+		return onAttack(npc, attacker, damage, isPet);
+	}
+	
 	public String onDeath(L2Character killer, L2Character victim, QuestState qs)
 	{
 		if (killer instanceof L2NpcInstance)

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/model/zone/type/L2DamageZone.java

@@ -106,7 +106,7 @@ public class L2DamageZone extends L2ZoneType
 				if (temp != null && !temp.isDead())
 				{
 					if (getHPDamagePerSecond() != 0)
-						temp.reduceCurrentHp(_dmgZone.getHPDamagePerSecond(), null);
+						temp.reduceCurrentHp(_dmgZone.getHPDamagePerSecond(), null, null);
 					if (getMPDamagePerSecond() != 0)
 						temp.reduceCurrentMp(_dmgZone.getMPDamagePerSecond());
 				}

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/skills/Formulas.java

@@ -1667,7 +1667,7 @@ public final class Formulas
             if (skill.getLethalChance2() > 0 && chance < calcLethal(activeChar, target, skill.getLethalChance2(),skill.getMagicLevel()))
             {
                 if (target instanceof L2NpcInstance)
-                    target.reduceCurrentHp(target.getCurrentHp() - 1, activeChar);
+                    target.reduceCurrentHp(target.getCurrentHp() - 1, activeChar, skill);
                 else if (target instanceof L2PcInstance) // If is a active player set his HP and CP to 1
                 {
                     L2PcInstance player = (L2PcInstance) target;
@@ -1700,7 +1700,7 @@ public final class Formulas
                     }
                 }
                 else if (target instanceof L2NpcInstance) // If is a monster remove first damage and after 50% of current hp
-                    target.reduceCurrentHp(target.getCurrentHp() / 2, activeChar);
+                    target.reduceCurrentHp(target.getCurrentHp() / 2, activeChar, skill);
                 activeChar.sendPacket(new SystemMessage(SystemMessageId.HALF_KILL));
                 
             }

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectDamOverTime.java

@@ -68,7 +68,7 @@ class EffectDamOverTime extends L2Effect
 				damage = getEffected().getCurrentHp() - 1;
 			}
 		}	
-		getEffected().reduceCurrentHpByDOT(damage, getEffector());
+		getEffected().reduceCurrentHpByDOT(damage, getEffector(), null);
 		
 		return true;
 	}

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectSignetMDam.java

@@ -192,7 +192,7 @@ final class EffectSignetMDam extends L2Effect
 						target.breakCast();
 					}
 					caster.sendDamageMessage(target, mdam, mcrit, false, false);
-					target.reduceCurrentHp(mdam, caster);
+					target.reduceCurrentHp(mdam, caster, getSkill());
 				}
 				target.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, caster);
 			}

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/skills/l2skills/L2SkillChargeDmg.java

@@ -132,7 +132,7 @@ public class L2SkillChargeDmg extends L2Skill
             {
                 double finalDamage = damage;
                 finalDamage = finalDamage*modifier;
-				target.reduceCurrentHp(finalDamage, caster);
+				target.reduceCurrentHp(finalDamage, caster, this);
 
 				caster.sendDamageMessage(target, (int)finalDamage, false, crit, false);
 

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/skills/l2skills/L2SkillDrain.java

@@ -166,7 +166,7 @@ public class L2SkillDrain extends L2Skill {
                 	}
                 }
                 
-                target.reduceCurrentHp(damage, activeChar);
+                target.reduceCurrentHp(damage, activeChar, this);
             }
 
             // Check to see if we should do the decay right after the cast
@@ -214,7 +214,7 @@ public class L2SkillDrain extends L2Skill {
             // Check to see if we should damage the target
             if (damage > 0 && (!target.isDead() || getTargetType() != SkillTargetType.TARGET_CORPSE_MOB))
             {
-    			target.reduceCurrentHp(damage, activeCubic.getOwner());
+    			target.reduceCurrentHp(damage, activeCubic.getOwner(), this);
                 
                 // Manage attack or cast break of the target (calculating rate, sending message...)
                 if (!target.isRaid() && Formulas.getInstance().calcAtkBreak(target, damage)){

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/skills/l2skills/L2SkillElemental.java

@@ -141,7 +141,7 @@ public class L2SkillElemental extends L2Skill {
 
 			if (damage > 0)
 			{
-				target.reduceCurrentHp(damage, activeChar);
+				target.reduceCurrentHp(damage, activeChar, this);
 
 	            // Manage attack or cast break of the target (calculating rate, sending message...)
 	            if (!target.isRaid() && Formulas.getInstance().calcAtkBreak(target, damage))