diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/ai/others/TeleportWithEffect.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/ai/others/TeleportWithEffect.java new file mode 100644 index 0000000000..a34fafdf3e --- /dev/null +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/ai/others/TeleportWithEffect.java @@ -0,0 +1,66 @@ +/* + * 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 ai.others; + +import org.l2jmobius.gameserver.model.Location; +import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenerRegisterType; +import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent; +import org.l2jmobius.gameserver.model.events.annotations.RegisterType; +import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSkillFinishCast; +import org.l2jmobius.gameserver.model.skills.CommonSkill; + +import ai.AbstractNpcAI; + +/** + * @author Mobius + */ +public class TeleportWithEffect extends AbstractNpcAI +{ + public TeleportWithEffect() + { + } + + @RegisterEvent(EventType.ON_CREATURE_SKILL_FINISH_CAST) + @RegisterType(ListenerRegisterType.GLOBAL_PLAYERS) + public void OnCreatureSkillFinishCast(OnCreatureSkillFinishCast event) + { + if (event.getSkill() != CommonSkill.TELEPORT.getSkill()) + { + return; + } + + final PlayerInstance player = event.getCaster().getActingPlayer(); + if (player == null) + { + return; + } + + final Location location = player.getTeleportLocation(); + if (location != null) + { + player.teleToLocation(location); + player.setTeleportLocation(null); + } + } + + public static void main(String[] args) + { + new TeleportWithEffect(); + } +} diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 6cd368625f..ba42c68d63 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -553,6 +553,8 @@ public class PlayerInstance extends Playable private Location _lastLoc; private boolean _observerMode = false; + private Location _teleportLocation; + /** Stored from last ValidatePosition **/ private final Location _lastServerPosition = new Location(0, 0, 0); @@ -10404,6 +10406,16 @@ public class PlayerInstance extends Playable } } + public void setTeleportLocation(Location location) + { + _teleportLocation = location; + } + + public Location getTeleportLocation() + { + return _teleportLocation; + } + public void setLastServerPosition(int x, int y, int z) { _lastServerPosition.setXYZ(x, y, z); diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/teleports/ExRequestTeleport.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/teleports/ExRequestTeleport.java index 8d89858a95..b6a0842330 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/teleports/ExRequestTeleport.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/teleports/ExRequestTeleport.java @@ -17,16 +17,15 @@ package org.l2jmobius.gameserver.network.clientpackets.teleports; import org.l2jmobius.Config; -import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.data.xml.TeleportListData; import org.l2jmobius.gameserver.instancemanager.CastleManager; +import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.effects.EffectFlag; import org.l2jmobius.gameserver.model.holders.TeleportListHolder; import org.l2jmobius.gameserver.model.siege.Castle; import org.l2jmobius.gameserver.model.skills.CommonSkill; -import org.l2jmobius.gameserver.model.skills.SkillCaster; import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -116,14 +115,8 @@ public class ExRequestTeleport implements IClientIncomingPacket player.abortCast(); player.stopMove(null); - player.setImmobilized(true); - SkillCaster.triggerCast(player, player, CommonSkill.TELEPORT.getSkill()); - - ThreadPool.schedule(() -> - { - player.teleToLocation(teleport.getX(), teleport.getY(), teleport.getZ()); - player.setImmobilized(false); - }, 2500); + player.setTeleportLocation(new Location(teleport.getX(), teleport.getY(), teleport.getZ())); + player.doCast(CommonSkill.TELEPORT.getSkill()); } } \ No newline at end of file