From 2ed402df386c889f95cf89d465171baa9857e1aa Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Fri, 5 Jun 2020 14:23:38 +0000 Subject: [PATCH] MagicSkillUse cleanup and fixes. --- .../gameserver/RecipeController.java | 4 +- .../admincommandhandlers/AdminMobGroup.java | 2 +- .../admincommandhandlers/AdminPolymorph.java | 2 +- .../handler/itemhandlers/FishShots.java | 8 +-- .../handler/itemhandlers/ScrollOfEscape.java | 36 ++++++------ .../handler/usercommandhandlers/Escape.java | 27 +++++---- .../voicedcommandhandlers/Wedding.java | 11 ++-- .../network/serverpackets/MagicSkillUse.java | 57 +++++++++---------- 8 files changed, 69 insertions(+), 78 deletions(-) diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/RecipeController.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/RecipeController.java index 32a40c437f..25671e3c01 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/RecipeController.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/RecipeController.java @@ -368,8 +368,8 @@ public class RecipeController // divided by RATE_CONSUMABLES_COST to remove craft time increase on higher consumables rates _delay = (int) ((Config.ALT_GAME_CREATION_SPEED * _player.getMReuseRate(_skill) * GameTimeController.TICKS_PER_SECOND) / Config.RATE_CONSUMABLE_COST) * GameTimeController.MILLIS_IN_TICK; - // FIXME: please fix this packet to show crafting animation (somebody) - _player.broadcastPacket(new MagicSkillUse(_player, _skillId, _skillLevel, _delay, 0)); + // Show crafting animation. + _player.broadcastPacket(new MagicSkillUse(_player, _player, _skillId, _skillLevel, _delay, 0)); _player.sendPacket(new SetupGauge(0, _delay)); ThreadPool.schedule(this, 100 + _delay); } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminMobGroup.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminMobGroup.java index 6329fea4d1..6a1e4de564 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminMobGroup.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminMobGroup.java @@ -509,7 +509,7 @@ public class AdminMobGroup implements IAdminCommandHandler private void doAnimation(PlayerInstance activeChar) { - Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, 1008, 1, 4000, 0), 2250000/* 1500 */); + Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, 1008, 1, 4000, 0), 2250000 /* 1500 */); activeChar.sendPacket(new SetupGauge(0, 4000)); } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminPolymorph.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminPolymorph.java index 0e311c8942..563efa61db 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminPolymorph.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminPolymorph.java @@ -98,7 +98,7 @@ public class AdminPolymorph implements IAdminCommandHandler if (obj instanceof Creature) { final Creature creature = (Creature) obj; - creature.broadcastPacket(new MagicSkillUse(creature, 1008, 1, 4000, 0)); + creature.broadcastPacket(new MagicSkillUse(creature, creature, 1008, 1, 4000, 0)); creature.sendPacket(new SetupGauge(0, 4000)); } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/FishShots.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/FishShots.java index 6953346a48..965c2bc85a 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/FishShots.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/FishShots.java @@ -17,7 +17,6 @@ package org.l2jmobius.gameserver.handler.itemhandlers; import org.l2jmobius.gameserver.handler.IItemHandler; -import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.items.Item; @@ -92,12 +91,7 @@ public class FishShots implements IItemHandler weaponInst.setChargedFishshot(true); player.destroyItemWithoutTrace("Consume", item.getObjectId(), 1, null, false); - final WorldObject oldTarget = player.getTarget(); - player.setTarget(player); - - final MagicSkillUse msu = new MagicSkillUse(player, SKILL_IDS[grade], 1, 0, 0); - Broadcast.toSelfAndKnownPlayers(player, msu); - player.setTarget(oldTarget); + Broadcast.toSelfAndKnownPlayers(player, new MagicSkillUse(player, player, SKILL_IDS[grade], 1, 0, 0)); } @Override diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/ScrollOfEscape.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/ScrollOfEscape.java index 8fc9a4abbb..687504b983 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/ScrollOfEscape.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/ScrollOfEscape.java @@ -27,7 +27,6 @@ import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.ClanHallManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.model.Skill; -import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.event.CTF; @@ -166,8 +165,6 @@ public class ScrollOfEscape implements IItemHandler return; } - player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE); - // SoE Animation section // Check if this is a blessed scroll, if it is then shorten the cast time. final int itemId = item.getItemId(); final SystemMessage sm3 = new SystemMessage(SystemMessageId.USE_S1); @@ -180,26 +177,26 @@ public class ScrollOfEscape implements IItemHandler return; } - player.disableAllSkills(); - - // fix soe - final WorldObject oldtarget = player.getTarget(); - player.setTarget(player); - - final Skill skill = SkillTable.getInstance().getInfo(escapeSkill, 1); - player.broadcastPacket(new MagicSkillUse(player, escapeSkill, 1, skill.getHitTime(), 0)); - player.setTarget(oldtarget); - player.sendPacket(new SetupGauge(0, skill.getHitTime())); - // End SoE Animation section - player.setTarget(null); - + // Send consume message. final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_DISAPPEARED); sm.addItemName(itemId); player.sendPacket(sm); - final EscapeFinalizer ef = new EscapeFinalizer(player, itemId); - // continue execution later - player.setSkillCast(ThreadPool.schedule(ef, skill.getHitTime())); + // Abort combat. + player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE); + player.abortAttack(); + player.abortCast(true); + player.disableAllSkills(); + + // Cast escape animation. + final Skill skill = SkillTable.getInstance().getInfo(escapeSkill, 1); + player.broadcastPacket(new MagicSkillUse(player, player, escapeSkill, 1, skill.getHitTime(), 0)); + player.sendPacket(new SetupGauge(0, skill.getHitTime())); + player.setTarget(null); + + // Continue execution later. + final EscapeFinalizer escapeFinalizer = new EscapeFinalizer(player, itemId); + player.setSkillCast(ThreadPool.schedule(escapeFinalizer, skill.getHitTime())); player.setSkillCastEndTime(10 + GameTimeController.getGameTicks() + (skill.getHitTime() / GameTimeController.MILLIS_IN_TICK)); } @@ -223,7 +220,6 @@ public class ScrollOfEscape implements IItemHandler } _player.enableAllSkills(); - _player.setIn7sDungeon(false); try diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/usercommandhandlers/Escape.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/usercommandhandlers/Escape.java index a424f31420..f679d5b996 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/usercommandhandlers/Escape.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/usercommandhandlers/Escape.java @@ -82,7 +82,7 @@ public class Escape implements IUserCommandHandler // Check to see if the current player is in Grandboss zone. if ((GrandBossManager.getInstance().getZone(player) != null) && !player.isGM()) { - player.sendMessage("You may not use an escape command in Grand boss zone."); + player.sendMessage("You may not use an escape command in a grand boss zone."); return false; } @@ -96,14 +96,14 @@ public class Escape implements IUserCommandHandler // Check to see if the current player is in fun event. if (player.isInFunEvent()) { - player.sendMessage("You may not escape from an Event."); + player.sendMessage("You may not escape from an event."); return false; } // Check to see if the current player is in Observer Mode. if (player.inObserverMode()) { - player.sendMessage("You may not escape during Observer mode."); + player.sendMessage("You may not escape during observer mode."); return false; } @@ -129,23 +129,26 @@ public class Escape implements IUserCommandHandler player.sendMessage("You use Escape: " + (unstuckTimer / 60000) + " minutes."); } + // Abort combat. player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE); - // SoE Animation section - player.setTarget(player); + player.abortAttack(); + player.abortCast(true); player.disableAllSkills(); + player.setTarget(null); // Like retail we haven't self target. - player.setTarget(null); // Like retail we haven't self target - Broadcast.toSelfAndKnownPlayersInRadius(player, new MagicSkillUse(player, 1050, 1, unstuckTimer, 0), 810000); + // Cast escape animation. + Broadcast.toSelfAndKnownPlayersInRadius(player, new MagicSkillUse(player, player, 1050, 1, unstuckTimer, 0), 810000); player.sendPacket(new SetupGauge(0, unstuckTimer)); - // End SoE Animation section - final EscapeFinalizer ef = new EscapeFinalizer(player); - // continue execution later - player.setSkillCast(ThreadPool.schedule(ef, unstuckTimer)); + + // Continue execution later. + final EscapeFinalizer escapeFinalizer = new EscapeFinalizer(player); + player.setSkillCast(ThreadPool.schedule(escapeFinalizer, unstuckTimer)); player.setSkillCastEndTime(10 + GameTimeController.getGameTicks() + (unstuckTimer / GameTimeController.MILLIS_IN_TICK)); + return true; } - static class EscapeFinalizer implements Runnable + private static class EscapeFinalizer implements Runnable { private final PlayerInstance _player; diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/voicedcommandhandlers/Wedding.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/voicedcommandhandlers/Wedding.java index e31dc369d5..1fc99335f5 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/voicedcommandhandlers/Wedding.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/voicedcommandhandlers/Wedding.java @@ -377,17 +377,18 @@ public class Wedding implements IVoicedCommandHandler activeChar.sendMessage("After " + (teleportTimer / 60000) + " min. you will be teleported to your fiance."); activeChar.getInventory().reduceAdena("Wedding", Config.WEDDING_TELEPORT_PRICE, activeChar, null); activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE); + // SoE Animation section activeChar.setTarget(activeChar); activeChar.disableAllSkills(); - Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, 1050, 1, teleportTimer, 0), 810000/* 900 */); + // Cast escape animation. + Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, 1050, 1, teleportTimer, 0), 810000 /* 900 */); activeChar.sendPacket(new SetupGauge(0, teleportTimer)); - // End SoE Animation section - final EscapeFinalizer ef = new EscapeFinalizer(activeChar, partner.getX(), partner.getY(), partner.getZ(), partner.isIn7sDungeon()); - // continue execution later - activeChar.setSkillCast(ThreadPool.schedule(ef, teleportTimer)); + // Continue execution later. + final EscapeFinalizer escapeFinalizer = new EscapeFinalizer(activeChar, partner.getX(), partner.getY(), partner.getZ(), partner.isIn7sDungeon()); + activeChar.setSkillCast(ThreadPool.schedule(escapeFinalizer, teleportTimer)); activeChar.setSkillCastEndTime(10 + GameTimeController.getGameTicks() + (teleportTimer / GameTimeController.MILLIS_IN_TICK)); return true; } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/MagicSkillUse.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/MagicSkillUse.java index 1267c9c6d4..ba0dd74421 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/MagicSkillUse.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/MagicSkillUse.java @@ -18,53 +18,45 @@ package org.l2jmobius.gameserver.network.serverpackets; import org.l2jmobius.gameserver.model.actor.Creature; -/** - * sample 0000: 5a d8 a8 10 48 d8 a8 10 48 10 04 00 00 01 00 00 Z...H...H....... 0010: 00 f0 1a 00 00 68 28 00 00 .....h(.. format dddddd dddh (h) - * @version $Revision: 1.4.2.1.2.4 $ $Date: 2005/03/27 15:29:39 $ - */ public class MagicSkillUse extends GameServerPacket { - private int _targetId; - private final int _skillId; - private final int _skillLevel; - private final int _hitTime; - private final int _reuseDelay; private final int _objectId; private final int _x; private final int _y; private final int _z; + private final int _targetId; + private final int _targetx; + private final int _targety; + private final int _targetz; + private final int _skillId; + private final int _skillLevel; + private final int _hitTime; + private final int _reuseDelay; public MagicSkillUse(Creature creature, Creature target, int skillId, int skillLevel, int hitTime, int reuseDelay) { _objectId = creature.getObjectId(); + _x = creature.getX(); + _y = creature.getY(); + _z = creature.getZ(); if (target != null) { _targetId = target.getObjectId(); + _targetx = target.getX(); + _targety = target.getY(); + _targetz = target.getZ(); } else { _targetId = creature.getTargetId(); + _targetx = creature.getX(); + _targety = creature.getY(); + _targetz = creature.getZ(); } _skillId = skillId; _skillLevel = skillLevel; _hitTime = hitTime; _reuseDelay = reuseDelay; - _x = creature.getX(); - _y = creature.getY(); - _z = creature.getZ(); - } - - public MagicSkillUse(Creature creature, int skillId, int skillLevel, int hitTime, int reuseDelay) - { - _objectId = creature.getObjectId(); - _targetId = creature.getTargetId(); - _skillId = skillId; - _skillLevel = skillLevel; - _hitTime = hitTime; - _reuseDelay = reuseDelay; - _x = creature.getX(); - _y = creature.getY(); - _z = creature.getZ(); } @Override @@ -80,12 +72,17 @@ public class MagicSkillUse extends GameServerPacket writeD(_x); writeD(_y); writeD(_z); - writeH(0x00); // unknown loop but not AoE - // for() + // if (_critical) // ? // { - writeH(0x00); - writeH(0x00); - writeH(0x00); + // writeD(0x01); + // writeH(0x00); // } + // else + // { + writeD(0x00); + // } + writeD(_targetx); + writeD(_targety); + writeD(_targetz); } } \ No newline at end of file