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