From ab9d37ffe0c0a7ed16c96c2200e250ac6a9ed6ad Mon Sep 17 00:00:00 2001
From: Rumen Nikiforov <unafraid89@gmail.com>
Date: Wed, 26 Feb 2014 21:02:37 +0000
Subject: [PATCH] BETA: Reworking Trap Detect and Remove skills from skill
 handlers to effects. 	* Reviewed by: Nos, Adry_85

---
 .../scripts/handlers/EffectMasterHandler.java |   2 +
 .../data/scripts/handlers/MasterHandler.java  |   2 -
 .../handlers/effecthandlers/TrapDetect.java   |  73 +++++++++++
 .../handlers/effecthandlers/TrapRemove.java   | 100 ++++++++++++++
 .../scripts/handlers/skillhandlers/Trap.java  | 124 ------------------
 .../game/data/stats/skills/00400-00499.xml    |  14 +-
 .../game/data/stats/skills/00600-00699.xml    |  12 +-
 7 files changed, 192 insertions(+), 135 deletions(-)
 create mode 100644 L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/TrapDetect.java
 create mode 100644 L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/TrapRemove.java
 delete mode 100644 L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Trap.java

diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java
index e8e27a0dfe..780e0bc8d3 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java
@@ -179,6 +179,8 @@ public final class EffectMasterHandler
 		TransferDamage.class,
 		TransferHate.class,
 		Transformation.class,
+		TrapDetect.class,
+		TrapRemove.class,
 		TriggerSkillByDamage.class,
 		UnsummonAgathion.class,
 		VitalityPointUp.class,
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/MasterHandler.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/MasterHandler.java
index b42ecb7184..f4425eab0b 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/MasterHandler.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/MasterHandler.java
@@ -209,7 +209,6 @@ import handlers.skillhandlers.Detection;
 import handlers.skillhandlers.Dummy;
 import handlers.skillhandlers.NornilsPower;
 import handlers.skillhandlers.Sow;
-import handlers.skillhandlers.Trap;
 import handlers.skillhandlers.Unlock;
 import handlers.targethandlers.Area;
 import handlers.targethandlers.AreaCorpseMob;
@@ -498,7 +497,6 @@ public class MasterHandler
 			Dummy.class,
 			NornilsPower.class,
 			Sow.class,
-			Trap.class,
 			Unlock.class,
 		},
 		{
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/TrapDetect.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/TrapDetect.java
new file mode 100644
index 0000000000..1474f8a77c
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/TrapDetect.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2004-2014 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J DataPack is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package handlers.effecthandlers;
+
+import com.l2jserver.gameserver.model.StatsSet;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2TrapInstance;
+import com.l2jserver.gameserver.model.conditions.Condition;
+import com.l2jserver.gameserver.model.effects.AbstractEffect;
+import com.l2jserver.gameserver.model.skills.BuffInfo;
+
+/**
+ * @author UnAfraid
+ */
+public class TrapDetect extends AbstractEffect
+{
+	private final int _power;
+	
+	public TrapDetect(Condition attachCond, Condition applyCond, StatsSet set, StatsSet params)
+	{
+		super(attachCond, applyCond, set, params);
+		if (params == null)
+		{
+			throw new IllegalArgumentException(getClass().getSimpleName() + ": effect without power!");
+		}
+		_power = params.getInt("power");
+	}
+	
+	@Override
+	public boolean isInstant()
+	{
+		return true;
+	}
+	
+	@Override
+	public void onStart(BuffInfo info)
+	{
+		super.onStart(info);
+		
+		final L2Character target = info.getEffected();
+		if (!target.isTrap())
+		{
+			return;
+		}
+		
+		if (target.isAlikeDead())
+		{
+			return;
+		}
+		
+		final L2TrapInstance trap = (L2TrapInstance) target;
+		if (trap.getLevel() <= _power)
+		{
+			trap.setDetected(info.getEffector());
+		}
+	}
+}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/TrapRemove.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/TrapRemove.java
new file mode 100644
index 0000000000..4c48da758c
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/TrapRemove.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2004-2014 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J DataPack is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package handlers.effecthandlers;
+
+import com.l2jserver.gameserver.enums.QuestEventType;
+import com.l2jserver.gameserver.enums.TrapAction;
+import com.l2jserver.gameserver.model.StatsSet;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2TrapInstance;
+import com.l2jserver.gameserver.model.conditions.Condition;
+import com.l2jserver.gameserver.model.effects.AbstractEffect;
+import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.model.skills.BuffInfo;
+import com.l2jserver.gameserver.network.SystemMessageId;
+
+/**
+ * @author UnAfraid
+ */
+public class TrapRemove extends AbstractEffect
+{
+	private final int _power;
+	
+	public TrapRemove(Condition attachCond, Condition applyCond, StatsSet set, StatsSet params)
+	{
+		super(attachCond, applyCond, set, params);
+		if (params == null)
+		{
+			throw new IllegalArgumentException(getClass().getSimpleName() + ": effect without power!");
+		}
+		_power = params.getInt("power");
+	}
+	
+	@Override
+	public boolean isInstant()
+	{
+		return true;
+	}
+	
+	@Override
+	public void onStart(BuffInfo info)
+	{
+		super.onStart(info);
+		
+		final L2Character target = info.getEffected();
+		if (!target.isTrap())
+		{
+			return;
+		}
+		
+		if (target.isAlikeDead())
+		{
+			return;
+		}
+		
+		final L2TrapInstance trap = (L2TrapInstance) target;
+		if (!trap.canBeSeen(info.getEffector()))
+		{
+			if (info.getEffector().isPlayer())
+			{
+				info.getEffector().sendPacket(SystemMessageId.INCORRECT_TARGET);
+			}
+			return;
+		}
+		
+		if (trap.getLevel() > _power)
+		{
+			return;
+		}
+		
+		if (trap.getTemplate().getEventQuests(QuestEventType.ON_TRAP_ACTION) != null)
+		{
+			for (Quest quest : trap.getTemplate().getEventQuests(QuestEventType.ON_TRAP_ACTION))
+			{
+				quest.notifyTrapAction(trap, info.getEffector(), TrapAction.TRAP_DISARMED);
+			}
+		}
+		
+		trap.unSummon();
+		if (info.getEffector().isPlayer())
+		{
+			info.getEffector().sendPacket(SystemMessageId.A_TRAP_DEVICE_HAS_BEEN_STOPPED);
+		}
+	}
+}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Trap.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Trap.java
deleted file mode 100644
index 60040a90e1..0000000000
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Trap.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2004-2014 L2J DataPack
- * 
- * This file is part of L2J DataPack.
- * 
- * L2J DataPack is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- * 
- * L2J DataPack is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-package handlers.skillhandlers;
-
-import com.l2jserver.gameserver.enums.QuestEventType;
-import com.l2jserver.gameserver.enums.TrapAction;
-import com.l2jserver.gameserver.handler.ISkillHandler;
-import com.l2jserver.gameserver.model.L2Object;
-import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.instance.L2TrapInstance;
-import com.l2jserver.gameserver.model.quest.Quest;
-import com.l2jserver.gameserver.model.skills.L2Skill;
-import com.l2jserver.gameserver.model.skills.L2SkillType;
-import com.l2jserver.gameserver.network.SystemMessageId;
-
-public class Trap implements ISkillHandler
-{
-	private static final L2SkillType[] SKILL_IDS =
-	{
-		L2SkillType.DETECT_TRAP,
-		L2SkillType.REMOVE_TRAP
-	};
-	
-	@Override
-	public void useSkill(L2Character activeChar, L2Skill skill, L2Object[] targets)
-	{
-		if ((activeChar == null) || (skill == null))
-		{
-			return;
-		}
-		
-		switch (skill.getSkillType())
-		{
-			case DETECT_TRAP:
-			{
-				for (L2Character target : activeChar.getKnownList().getKnownCharactersInRadius(skill.getAffectRange()))
-				{
-					if (!target.isTrap())
-					{
-						continue;
-					}
-					
-					if (target.isAlikeDead())
-					{
-						continue;
-					}
-					
-					final L2TrapInstance trap = (L2TrapInstance) target;
-					if (trap.getLevel() <= skill.getPower())
-					{
-						trap.setDetected(activeChar);
-					}
-				}
-				break;
-			}
-			case REMOVE_TRAP:
-			{
-				for (L2Character target : (L2Character[]) targets)
-				{
-					if (!target.isTrap())
-					{
-						continue;
-					}
-					
-					if (target.isAlikeDead())
-					{
-						continue;
-					}
-					
-					final L2TrapInstance trap = (L2TrapInstance) target;
-					if (!trap.canBeSeen(activeChar))
-					{
-						if (activeChar.isPlayer())
-						{
-							activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
-						}
-						continue;
-					}
-					
-					if (trap.getLevel() > skill.getPower())
-					{
-						continue;
-					}
-					
-					if (trap.getTemplate().getEventQuests(QuestEventType.ON_TRAP_ACTION) != null)
-					{
-						for (Quest quest : trap.getTemplate().getEventQuests(QuestEventType.ON_TRAP_ACTION))
-						{
-							quest.notifyTrapAction(trap, activeChar, TrapAction.TRAP_DISARMED);
-						}
-					}
-					
-					trap.unSummon();
-					if (activeChar.isPlayer())
-					{
-						activeChar.sendPacket(SystemMessageId.A_TRAP_DEVICE_HAS_BEEN_STOPPED);
-					}
-				}
-			}
-		}
-	}
-	
-	@Override
-	public L2SkillType[] getSkillIds()
-	{
-		return SKILL_IDS;
-	}
-}
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/00400-00499.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/00400-00499.xml
index 3c0dfca5ff..cadec6b0ea 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/00400-00499.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/00400-00499.xml
@@ -2280,10 +2280,13 @@
 		<set name="magicLvl" val="#magicLvl" />
 		<set name="mpConsume" val="#mpConsume" />
 		<set name="operateType" val="A1" />
-		<set name="power" val="#power" />
 		<set name="reuseDelay" val="3000" />
-		<set name="skillType" val="DETECT_TRAP" />
-		<set name="targetType" val="SELF" />
+		<set name="targetType" val="AURA" />
+		<for>
+			<effect name="TrapDetect">
+				<param power="#power" />
+			</effect>
+		</for>
 	</skill>
 	<skill id="471" levels="7" name="Defuse Trap">
 		<!-- Confirmed CT2.5 -->
@@ -2297,13 +2300,14 @@
 		<set name="magicLvl" val="#magicLvl" />
 		<set name="mpConsume" val="#mpConsume" />
 		<set name="operateType" val="A1" />
-		<set name="power" val="#power" />
 		<set name="reuseDelay" val="8000" />
-		<set name="skillType" val="REMOVE_TRAP" />
 		<set name="targetType" val="ONE" />
 		<cond msgId="109">
 			<target npcType="L2TrapInstance" />
 		</cond>
+		<effect name="TrapRemove">
+			<param power="#power" />
+		</effect>
 	</skill>
 	<skill id="472" levels="45" name="Ancient Sword Mastery" enchantGroup1="1" enchantGroup2="1">
 		<!-- Confirmed CT2.5 -->
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/00600-00699.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/00600-00699.xml
index 90bfd93fff..a49eba7104 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/00600-00699.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/00600-00699.xml
@@ -373,10 +373,13 @@
 		<set name="magicLvl" val="74" />
 		<set name="mpConsume" val="67" />
 		<set name="operateType" val="A1" />
-		<set name="power" val="78" />
 		<set name="reuseDelay" val="3000" />
-		<set name="skillType" val="DETECT_TRAP" />
 		<set name="targetType" val="AURA" />
+		<for>
+			<effect name="TrapDetect">
+				<param power="78" />
+			</effect>
+		</for>
 	</skill>
 	<skill id="624" levels="1" name="Remove Trap">
 		<!-- Confirmed CT2.5 -->
@@ -387,13 +390,14 @@
 		<set name="magicLvl" val="74" />
 		<set name="mpConsume" val="17" />
 		<set name="operateType" val="A1" />
-		<set name="power" val="78" />
 		<set name="reuseDelay" val="8000" />
-		<set name="skillType" val="REMOVE_TRAP" />
 		<set name="targetType" val="ONE" />
 		<cond msgId="109">
 			<target npcType="L2TrapInstance" />
 		</cond>
+		<effect name="TrapRemove">
+			<param power="78" />
+		</effect>
 	</skill>
 	<skill id="625" levels="1" name="Soul Gathering" enchantGroup1="1" enchantGroup2="1">
 		<!-- Confirmed CT2.5 -->
-- 
GitLab