From 672acb53767fdb124e776dc80c89ffaa6600a263 Mon Sep 17 00:00:00 2001 From: St3eT <St3eT@users.noreply.github.com> Date: Fri, 11 Jul 2014 12:52:24 +0000 Subject: [PATCH] BETA: Fixed skills with !TargetType '''GROUND'''. * Patch by: St3eT, Janiko * Tested by: St3eT, Janiko * Reviewed by: UnAfraid, Zoey76 * Reported by: Gries, u3games, Zephyr --- .../ai/npc/NpcBuffers/NpcBufferAI.java | 54 ++++++++----------- .../handlers/targethandlers/Ground.java | 34 +++++++++--- .../game/data/stats/skills/01400-01499.xml | 12 +++-- .../game/data/stats/skills/05100-05199.xml | 28 ++++++++++ 4 files changed, 87 insertions(+), 41 deletions(-) diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferAI.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferAI.java index 867554a98d..953141a8fb 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferAI.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/NpcBuffers/NpcBufferAI.java @@ -18,9 +18,7 @@ */ package ai.npc.NpcBuffers; -import com.l2jserver.Config; import com.l2jserver.gameserver.ThreadPoolManager; -import com.l2jserver.gameserver.model.L2Party; import com.l2jserver.gameserver.model.actor.L2Character; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; @@ -49,31 +47,33 @@ public class NpcBufferAI implements Runnable return; } - final Skill skill = _skillData.getSkill(); if ((_npc.getSummoner() == null) || !_npc.getSummoner().isPlayer()) { return; } + + final Skill skill = _skillData.getSkill(); final L2PcInstance player = _npc.getSummoner().getActingPlayer(); + switch (_skillData.getAffectScope()) { case PARTY: { - if (!player.isInParty()) + if (player.isInParty()) { - if (Util.checkIfInRange(Config.ALT_PARTY_RANGE, _npc, player, true)) + for (L2PcInstance member : player.getParty().getMembers()) { - skill.applyEffects(player, player); + if (Util.checkIfInRange(skill.getAffectRange(), _npc, member, true)) + { + skill.applyEffects(player, member); + } } } else { - for (L2PcInstance member : player.getParty().getMembers()) + if (Util.checkIfInRange(skill.getAffectRange(), _npc, player, true)) { - if (Util.checkIfInRange(Config.ALT_PARTY_RANGE, _npc, member, true)) - { - skill.applyEffects(player, member); - } + skill.applyEffects(player, player); } } break; @@ -113,36 +113,28 @@ public class NpcBufferAI implements Runnable if (target.isPlayable()) { final L2PcInstance targetPlayer = target.getActingPlayer(); - if (targetPlayer == null) + + if (player == targetPlayer) { - return false; + return true; } - if (player.isInParty()) + if (player.isInParty() && targetPlayer.isInParty() && (player.getParty() == targetPlayer.getParty())) { - final L2Party party = player.getParty(); - - // Same party. - if (party.containsPlayer(targetPlayer)) - { - return true; - } - - // Same command channel. - if (party.isInCommandChannel() && party.getCommandChannel().containsPlayer(targetPlayer)) - { - return true; - } + return true; + } + + if (player.getParty().isInCommandChannel() && (player.getParty().getCommandChannel() == target.getParty().getCommandChannel())) + { + return true; } - // Same clan. - if ((player.getClanId() > 0) && (player.getClanId() == target.getClanId())) + if ((player.getClanId() > 0) && (player.getClanId() == targetPlayer.getClanId())) { return true; } - // Same ally. - if ((player.getAllyId() > 0) && (player.getAllyId() == target.getAllyId())) + if ((player.getAllyId() > 0) && (player.getAllyId() == targetPlayer.getAllyId())) { return true; } diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Ground.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Ground.java index ef4e421216..ff463d736d 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Ground.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/targethandlers/Ground.java @@ -18,25 +18,47 @@ */ package handlers.targethandlers; +import java.util.ArrayList; +import java.util.List; + import com.l2jserver.gameserver.handler.ITargetTypeHandler; import com.l2jserver.gameserver.model.L2Object; import com.l2jserver.gameserver.model.actor.L2Character; +import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.skills.Skill; import com.l2jserver.gameserver.model.skills.targets.L2TargetType; +import com.l2jserver.gameserver.model.zone.ZoneId; /** - * @author UnAfraid + * @author St3eT */ public class Ground implements ITargetTypeHandler { - @Override public L2Object[] getTargetList(Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target) { - return new L2Character[] + final List<L2Character> targetList = new ArrayList<>(); + final L2PcInstance player = (L2PcInstance) activeChar; + final int maxTargets = skill.getAffectLimit(); + final boolean srcInArena = (activeChar.isInsideZone(ZoneId.PVP) && !activeChar.isInsideZone(ZoneId.SIEGE)); + + for (L2Character character : activeChar.getKnownList().getKnownCharacters()) { - activeChar - }; + if ((character != null) && character.isInsideRadius(player.getCurrentSkillWorldPosition(), skill.getAffectRange(), false, false)) + { + if (!Skill.checkForAreaOffensiveSkills(activeChar, character, skill, srcInArena)) + { + continue; + } + + if ((maxTargets > 0) && (targetList.size() >= maxTargets)) + { + break; + } + targetList.add(character); + } + } + return targetList.isEmpty() ? EMPTY_TARGET_LIST : targetList.toArray(new L2Character[targetList.size()]); } @Override @@ -44,4 +66,4 @@ public class Ground implements ITargetTypeHandler { return L2TargetType.GROUND; } -} +} \ No newline at end of file diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml index 37642c0c47..306d9fdc5f 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml @@ -681,9 +681,10 @@ </skill> <skill id="1419" levels="1" name="Volcano"> <set name="affectLimit" val="15-25" /> - <set name="affectRange" val="180" /> + <set name="affectRange" val="200" /> <set name="blockedInOlympiad" val="true" /> <set name="castRange" val="900" /> + <set name="channelingSkillId" val="5130" /> <set name="channelingTickInterval" val="2" /> <set name="effectPoint" val="-676" /> <set name="element" val="0" /> <!-- Fire --> @@ -708,9 +709,10 @@ </skill> <skill id="1420" levels="1" name="Cyclone"> <set name="affectLimit" val="15-25" /> - <set name="affectRange" val="180" /> + <set name="affectRange" val="200" /> <set name="blockedInOlympiad" val="true" /> <set name="castRange" val="900" /> + <set name="channelingSkillId" val="5132" /> <set name="channelingTickInterval" val="2" /> <set name="effectPoint" val="-676" /> <set name="element" val="2" /> <!-- Wind --> @@ -735,9 +737,10 @@ </skill> <skill id="1421" levels="1" name="Raging Waves"> <set name="affectLimit" val="15-25" /> - <set name="affectRange" val="180" /> + <set name="affectRange" val="200" /> <set name="blockedInOlympiad" val="true" /> <set name="castRange" val="900" /> + <set name="channelingSkillId" val="5131" /> <set name="channelingTickInterval" val="2" /> <set name="effectPoint" val="-676" /> <set name="element" val="1" /> <!-- Water --> @@ -783,9 +786,10 @@ </skill> <skill id="1423" levels="1" name="Gehenna"> <set name="affectLimit" val="15-25" /> - <set name="affectRange" val="180" /> + <set name="affectRange" val="200" /> <set name="blockedInOlympiad" val="true" /> <set name="castRange" val="900" /> + <set name="channelingSkillId" val="5133" /> <set name="channelingTickInterval" val="2" /> <set name="effectPoint" val="-676" /> <set name="element" val="5" /> <!-- Dark --> diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/05100-05199.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/05100-05199.xml index 52b4bf1b91..3eef567475 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/05100-05199.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/05100-05199.xml @@ -541,27 +541,55 @@ </skill> <skill id="5130" levels="1" name="Volcano"> <set name="isMagic" val="2" /> <!-- Static Skill --> + <set name="affectRange" val="300" /> <set name="magicLvl" val="80" /> <set name="operateType" val="A1" /> + <set name="power" val="300" /> <set name="targetType" val="ONE" /> + <set name="element" val="0" /> <!-- Fire --> + <set name="elementPower" val="20" /> + <for> + <effect name="MagicalAttack" /> + </for> </skill> <skill id="5131" levels="1" name="Tsunami"> <set name="isMagic" val="2" /> <!-- Static Skill --> + <set name="affectRange" val="300" /> <set name="magicLvl" val="80" /> <set name="operateType" val="A1" /> + <set name="power" val="300" /> <set name="targetType" val="ONE" /> + <set name="element" val="1" /> <!-- Water --> + <set name="elementPower" val="20" /> + <for> + <effect name="MagicalAttack" /> + </for> </skill> <skill id="5132" levels="1" name="Cyclone"> <set name="isMagic" val="2" /> <!-- Static Skill --> + <set name="affectRange" val="300" /> <set name="magicLvl" val="80" /> <set name="operateType" val="A1" /> + <set name="power" val="300" /> <set name="targetType" val="ONE" /> + <set name="element" val="2" /> <!-- Wind --> + <set name="elementPower" val="20" /> + <for> + <effect name="MagicalAttack" /> + </for> </skill> <skill id="5133" levels="1" name="Gehenna"> <set name="isMagic" val="2" /> <!-- Static Skill --> + <set name="affectRange" val="300" /> <set name="magicLvl" val="80" /> <set name="operateType" val="A1" /> + <set name="power" val="300" /> <set name="targetType" val="ONE" /> + <set name="element" val="5" /> <!-- Dark --> + <set name="elementPower" val="20" /> + <for> + <effect name="MagicalAttack" /> + </for> </skill> <skill id="5134" levels="1" name="Anti-Summoning Field"> <!-- TODO: Update to H5! --> -- GitLab