MagicSkillUse cleanup and fixes.

This commit is contained in:
MobiusDevelopment
2020-06-05 14:23:38 +00:00
parent 05adbfc754
commit 2ed402df38
8 changed files with 69 additions and 78 deletions

View File

@@ -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);
}

View File

@@ -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));
}

View File

@@ -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));
}

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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);
}
}