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 // 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; _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) // Show crafting animation.
_player.broadcastPacket(new MagicSkillUse(_player, _skillId, _skillLevel, _delay, 0)); _player.broadcastPacket(new MagicSkillUse(_player, _player, _skillId, _skillLevel, _delay, 0));
_player.sendPacket(new SetupGauge(0, _delay)); _player.sendPacket(new SetupGauge(0, _delay));
ThreadPool.schedule(this, 100 + _delay); ThreadPool.schedule(this, 100 + _delay);
} }

View File

@@ -509,7 +509,7 @@ public class AdminMobGroup implements IAdminCommandHandler
private void doAnimation(PlayerInstance activeChar) 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)); activeChar.sendPacket(new SetupGauge(0, 4000));
} }

View File

@@ -98,7 +98,7 @@ public class AdminPolymorph implements IAdminCommandHandler
if (obj instanceof Creature) if (obj instanceof Creature)
{ {
final Creature creature = (Creature) obj; 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)); creature.sendPacket(new SetupGauge(0, 4000));
} }

View File

@@ -17,7 +17,6 @@
package org.l2jmobius.gameserver.handler.itemhandlers; package org.l2jmobius.gameserver.handler.itemhandlers;
import org.l2jmobius.gameserver.handler.IItemHandler; 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.Playable;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.Item;
@@ -92,12 +91,7 @@ public class FishShots implements IItemHandler
weaponInst.setChargedFishshot(true); weaponInst.setChargedFishshot(true);
player.destroyItemWithoutTrace("Consume", item.getObjectId(), 1, null, false); player.destroyItemWithoutTrace("Consume", item.getObjectId(), 1, null, false);
final WorldObject oldTarget = player.getTarget(); Broadcast.toSelfAndKnownPlayers(player, new MagicSkillUse(player, player, SKILL_IDS[grade], 1, 0, 0));
player.setTarget(player);
final MagicSkillUse msu = new MagicSkillUse(player, SKILL_IDS[grade], 1, 0, 0);
Broadcast.toSelfAndKnownPlayers(player, msu);
player.setTarget(oldTarget);
} }
@Override @Override

View File

@@ -27,7 +27,6 @@ import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.ClanHallManager; import org.l2jmobius.gameserver.instancemanager.ClanHallManager;
import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortManager;
import org.l2jmobius.gameserver.model.Skill; 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.Playable;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.entity.event.CTF; import org.l2jmobius.gameserver.model.entity.event.CTF;
@@ -166,8 +165,6 @@ public class ScrollOfEscape implements IItemHandler
return; 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. // Check if this is a blessed scroll, if it is then shorten the cast time.
final int itemId = item.getItemId(); final int itemId = item.getItemId();
final SystemMessage sm3 = new SystemMessage(SystemMessageId.USE_S1); final SystemMessage sm3 = new SystemMessage(SystemMessageId.USE_S1);
@@ -180,26 +177,26 @@ public class ScrollOfEscape implements IItemHandler
return; return;
} }
player.disableAllSkills(); // Send consume message.
// 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);
final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_DISAPPEARED); final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_DISAPPEARED);
sm.addItemName(itemId); sm.addItemName(itemId);
player.sendPacket(sm); player.sendPacket(sm);
final EscapeFinalizer ef = new EscapeFinalizer(player, itemId); // Abort combat.
// continue execution later player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
player.setSkillCast(ThreadPool.schedule(ef, skill.getHitTime())); 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)); player.setSkillCastEndTime(10 + GameTimeController.getGameTicks() + (skill.getHitTime() / GameTimeController.MILLIS_IN_TICK));
} }
@@ -223,7 +220,6 @@ public class ScrollOfEscape implements IItemHandler
} }
_player.enableAllSkills(); _player.enableAllSkills();
_player.setIn7sDungeon(false); _player.setIn7sDungeon(false);
try try

View File

@@ -82,7 +82,7 @@ public class Escape implements IUserCommandHandler
// Check to see if the current player is in Grandboss zone. // Check to see if the current player is in Grandboss zone.
if ((GrandBossManager.getInstance().getZone(player) != null) && !player.isGM()) 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; return false;
} }
@@ -96,14 +96,14 @@ public class Escape implements IUserCommandHandler
// Check to see if the current player is in fun event. // Check to see if the current player is in fun event.
if (player.isInFunEvent()) if (player.isInFunEvent())
{ {
player.sendMessage("You may not escape from an Event."); player.sendMessage("You may not escape from an event.");
return false; return false;
} }
// Check to see if the current player is in Observer Mode. // Check to see if the current player is in Observer Mode.
if (player.inObserverMode()) if (player.inObserverMode())
{ {
player.sendMessage("You may not escape during Observer mode."); player.sendMessage("You may not escape during observer mode.");
return false; return false;
} }
@@ -129,23 +129,26 @@ public class Escape implements IUserCommandHandler
player.sendMessage("You use Escape: " + (unstuckTimer / 60000) + " minutes."); player.sendMessage("You use Escape: " + (unstuckTimer / 60000) + " minutes.");
} }
// Abort combat.
player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE); player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
// SoE Animation section player.abortAttack();
player.setTarget(player); player.abortCast(true);
player.disableAllSkills(); player.disableAllSkills();
player.setTarget(null); // Like retail we haven't self target.
player.setTarget(null); // Like retail we haven't self target // Cast escape animation.
Broadcast.toSelfAndKnownPlayersInRadius(player, new MagicSkillUse(player, 1050, 1, unstuckTimer, 0), 810000); Broadcast.toSelfAndKnownPlayersInRadius(player, new MagicSkillUse(player, player, 1050, 1, unstuckTimer, 0), 810000);
player.sendPacket(new SetupGauge(0, unstuckTimer)); player.sendPacket(new SetupGauge(0, unstuckTimer));
// End SoE Animation section
final EscapeFinalizer ef = new EscapeFinalizer(player); // Continue execution later.
// continue execution later final EscapeFinalizer escapeFinalizer = new EscapeFinalizer(player);
player.setSkillCast(ThreadPool.schedule(ef, unstuckTimer)); player.setSkillCast(ThreadPool.schedule(escapeFinalizer, unstuckTimer));
player.setSkillCastEndTime(10 + GameTimeController.getGameTicks() + (unstuckTimer / GameTimeController.MILLIS_IN_TICK)); player.setSkillCastEndTime(10 + GameTimeController.getGameTicks() + (unstuckTimer / GameTimeController.MILLIS_IN_TICK));
return true; return true;
} }
static class EscapeFinalizer implements Runnable private static class EscapeFinalizer implements Runnable
{ {
private final PlayerInstance _player; 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.sendMessage("After " + (teleportTimer / 60000) + " min. you will be teleported to your fiance.");
activeChar.getInventory().reduceAdena("Wedding", Config.WEDDING_TELEPORT_PRICE, activeChar, null); activeChar.getInventory().reduceAdena("Wedding", Config.WEDDING_TELEPORT_PRICE, activeChar, null);
activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE); activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
// SoE Animation section // SoE Animation section
activeChar.setTarget(activeChar); activeChar.setTarget(activeChar);
activeChar.disableAllSkills(); 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)); 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.
// continue execution later final EscapeFinalizer escapeFinalizer = new EscapeFinalizer(activeChar, partner.getX(), partner.getY(), partner.getZ(), partner.isIn7sDungeon());
activeChar.setSkillCast(ThreadPool.schedule(ef, teleportTimer)); activeChar.setSkillCast(ThreadPool.schedule(escapeFinalizer, teleportTimer));
activeChar.setSkillCastEndTime(10 + GameTimeController.getGameTicks() + (teleportTimer / GameTimeController.MILLIS_IN_TICK)); activeChar.setSkillCastEndTime(10 + GameTimeController.getGameTicks() + (teleportTimer / GameTimeController.MILLIS_IN_TICK));
return true; return true;
} }

View File

@@ -18,53 +18,45 @@ package org.l2jmobius.gameserver.network.serverpackets;
import org.l2jmobius.gameserver.model.actor.Creature; 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 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 _objectId;
private final int _x; private final int _x;
private final int _y; private final int _y;
private final int _z; 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) public MagicSkillUse(Creature creature, Creature target, int skillId, int skillLevel, int hitTime, int reuseDelay)
{ {
_objectId = creature.getObjectId(); _objectId = creature.getObjectId();
_x = creature.getX();
_y = creature.getY();
_z = creature.getZ();
if (target != null) if (target != null)
{ {
_targetId = target.getObjectId(); _targetId = target.getObjectId();
_targetx = target.getX();
_targety = target.getY();
_targetz = target.getZ();
} }
else else
{ {
_targetId = creature.getTargetId(); _targetId = creature.getTargetId();
_targetx = creature.getX();
_targety = creature.getY();
_targetz = creature.getZ();
} }
_skillId = skillId; _skillId = skillId;
_skillLevel = skillLevel; _skillLevel = skillLevel;
_hitTime = hitTime; _hitTime = hitTime;
_reuseDelay = reuseDelay; _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 @Override
@@ -80,12 +72,17 @@ public class MagicSkillUse extends GameServerPacket
writeD(_x); writeD(_x);
writeD(_y); writeD(_y);
writeD(_z); writeD(_z);
writeH(0x00); // unknown loop but not AoE // if (_critical) // ?
// for()
// { // {
writeH(0x00); // writeD(0x01);
writeH(0x00); // writeH(0x00);
writeH(0x00);
// } // }
// else
// {
writeD(0x00);
// }
writeD(_targetx);
writeD(_targety);
writeD(_targetz);
} }
} }