From a568a9f6a84f9bc7b7fc410ce231e6b739354535 Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Wed, 21 Feb 2018 08:55:45 +0000 Subject: [PATCH] Retail like skill Sublime Self-Sacrifice (1505). --- .../data/scripts/handlers/MasterHandler.java | 2 + .../handlers/targethandlers/AuraFriendly.java | 117 ++++++++++++++++++ .../game/data/stats/skills/01500-01599.xml | 4 +- .../gameserver/model/actor/L2Character.java | 2 + .../model/actor/instance/L2PcInstance.java | 3 + .../model/skills/targets/L2TargetType.java | 1 + 6 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/targethandlers/AuraFriendly.java diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/MasterHandler.java b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/MasterHandler.java index 07c40357ad..b251247331 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/MasterHandler.java +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/MasterHandler.java @@ -221,6 +221,7 @@ import handlers.targethandlers.AreaFriendly; import handlers.targethandlers.AreaSummon; import handlers.targethandlers.Aura; import handlers.targethandlers.AuraCorpseMob; +import handlers.targethandlers.AuraFriendly; import handlers.targethandlers.BehindArea; import handlers.targethandlers.BehindAura; import handlers.targethandlers.Clan; @@ -547,6 +548,7 @@ public class MasterHandler AreaSummon.class, Aura.class, AuraCorpseMob.class, + AuraFriendly.class, BehindArea.class, BehindAura.class, Clan.class, diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/targethandlers/AuraFriendly.java b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/targethandlers/AuraFriendly.java new file mode 100644 index 0000000000..092aa7fc1d --- /dev/null +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/targethandlers/AuraFriendly.java @@ -0,0 +1,117 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program 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. + * + * This program 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 . + */ +package handlers.targethandlers; + +import java.util.ArrayList; +import java.util.List; + +import com.l2jmobius.gameserver.geoengine.GeoEngine; +import com.l2jmobius.gameserver.handler.ITargetTypeHandler; +import com.l2jmobius.gameserver.model.L2Object; +import com.l2jmobius.gameserver.model.actor.L2Character; +import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.actor.instance.L2SiegeFlagInstance; +import com.l2jmobius.gameserver.model.skills.Skill; +import com.l2jmobius.gameserver.model.skills.targets.L2TargetType; +import com.l2jmobius.gameserver.model.zone.ZoneId; + +/** + * Aura Friendly target handler implementation. + * @author Sahar + */ +public class AuraFriendly implements ITargetTypeHandler +{ + @Override + public L2Object[] getTargetList(Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target) + { + List targetList = new ArrayList<>(); + L2PcInstance player = activeChar.getActingPlayer(); + int maxTargets = skill.getAffectLimit(); + for (L2Character obj : player.getKnownList().getKnownCharactersInRadius(skill.getAffectRange())) + { + if ((obj == activeChar) || !checkTarget(player, obj)) + { + continue; + } + + if ((maxTargets > 0) && (targetList.size() >= maxTargets)) + { + break; + } + + targetList.add(obj); + } + + if (targetList.isEmpty()) + { + return EMPTY_TARGET_LIST; + } + + return targetList.toArray(new L2Character[targetList.size()]); + } + + private boolean checkTarget(L2PcInstance activeChar, L2Character target) + { + if ((target == null) || !GeoEngine.getInstance().canSeeTarget(activeChar, target)) + { + return false; + } + + if (target.isAlikeDead() || target.isDoor() || (target instanceof L2SiegeFlagInstance) || target.isMonster()) + { + return false; + } + + if (target.isPlayable()) + { + L2PcInstance targetPlayer = target.getActingPlayer(); + + if (activeChar.isInDuelWith(target)) + { + return false; + } + + if (activeChar.isInPartyWith(target)) + { + return true; + } + + if (target.isInsideZone(ZoneId.PVP)) + { + return false; + } + + if (activeChar.isInClanWith(target) || activeChar.isInAllyWith(target) || activeChar.isInCommandChannelWith(target)) + { + return true; + } + + if ((targetPlayer.getPvpFlag() > 0) || (targetPlayer.getKarma() > 0)) + { + return false; + } + } + + return true; + } + + @Override + public Enum getTargetType() + { + return L2TargetType.AURA_FRIENDLY; + } +} \ No newline at end of file diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/stats/skills/01500-01599.xml b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/stats/skills/01500-01599.xml index cb15c4a4bd..3850489b93 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/stats/skills/01500-01599.xml +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/stats/skills/01500-01599.xml @@ -156,7 +156,7 @@ - + @@ -174,7 +174,7 @@ - + diff --git a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/actor/L2Character.java b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/actor/L2Character.java index f4fcd0521e..a9508039cd 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/actor/L2Character.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/actor/L2Character.java @@ -1585,6 +1585,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe case FRONT_AURA: case BEHIND_AURA: case GROUND: + case AURA_FRIENDLY: { target = this; break; @@ -5312,6 +5313,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe case FRONT_AURA: case BEHIND_AURA: case AURA_CORPSE_MOB: + case AURA_FRIENDLY: { break; } diff --git a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java index 4774ac92d7..cf460eb510 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java @@ -8355,6 +8355,7 @@ public final class L2PcInstance extends L2Playable case SELF: case AURA_CORPSE_MOB: case COMMAND_CHANNEL: + case AURA_FRIENDLY: { target = this; break; @@ -8461,6 +8462,7 @@ public final class L2PcInstance extends L2Playable case AREA_SUMMON: case AURA_CORPSE_MOB: case COMMAND_CHANNEL: + case AURA_FRIENDLY: { target = this; break; @@ -8639,6 +8641,7 @@ public final class L2PcInstance extends L2Playable case GROUND: case AREA_SUMMON: case UNLOCKABLE: + case AURA_FRIENDLY: { break; } diff --git a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/skills/targets/L2TargetType.java b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/skills/targets/L2TargetType.java index 3912229722..88965f6961 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/skills/targets/L2TargetType.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/skills/targets/L2TargetType.java @@ -28,6 +28,7 @@ public enum L2TargetType AREA_UNDEAD, AURA, AURA_CORPSE_MOB, + AURA_FRIENDLY, BEHIND_AREA, BEHIND_AURA, CLAN,