Addition of CreatureState enum and cast fix.

This commit is contained in:
MobiusDevelopment
2019-11-22 15:35:37 +00:00
parent 9df81f0aa6
commit 85ff555dcf
17 changed files with 157 additions and 138 deletions

View File

@@ -0,0 +1,33 @@
/*
* 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 2 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, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.l2jmobius.gameserver.enums;
/**
* @author Mobius
*/
public enum CreatureState
{
IDLE,
PICKUP_ITEM,
CASTING,
RESTING,
ATTACKING,
RANDOM_WALK,
INTERACT,
FOLLOW,
}

View File

@@ -26,21 +26,14 @@ import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
public class DamageSkill implements ISkillHandler public class DamageSkill implements ISkillHandler
{ {
public static final int POWER_STRIKE = 3;
public static final int WIND_STRIKE = 1177;
public static final int FLAME_STRIKE = 1181;
public static final int MORTAL_BLOW = 16;
public static final int POWER_SHOT = 56;
public static final int IRON_PUNCH = 29;
private static int[] _skillIds = new int[] private static int[] _skillIds = new int[]
{ {
3, 3, // Power Strike
1177, 16, // Mortal Blow
1181, 29, // Iron Punch
16, 56, // Power Shot
56, 1177, // Wind Strike
29 1181, // Flame Strike
}; };
@Override @Override
@@ -48,8 +41,8 @@ public class DamageSkill implements ISkillHandler
{ {
if (target instanceof Creature) if (target instanceof Creature)
{ {
Creature targetChar = (Creature) target; Creature creature = (Creature) target;
int mdef = targetChar.getMagicalDefense(); int mdef = creature.getMagicalDefense();
if (mdef == 0) if (mdef == 0)
{ {
mdef = 350; mdef = 350;
@@ -58,11 +51,11 @@ public class DamageSkill implements ISkillHandler
SystemMessage sm = new SystemMessage(35); SystemMessage sm = new SystemMessage(35);
sm.addNumber(dmg); sm.addNumber(dmg);
activeChar.sendPacket(sm); activeChar.sendPacket(sm);
targetChar.reduceCurrentHp(dmg, activeChar); if (creature.getCurrentHp() > creature.getMaxHp())
if (targetChar.getCurrentHp() > targetChar.getMaxHp())
{ {
targetChar.setCurrentHp(targetChar.getMaxHp()); creature.setCurrentHp(creature.getMaxHp());
} }
creature.reduceCurrentHp(dmg, activeChar);
} }
} }

View File

@@ -29,24 +29,16 @@ import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
public class HealSkill implements ISkillHandler public class HealSkill implements ISkillHandler
{ {
private static final int SELF_HEAL = 1216;
private static final int DEVINE_HEAL = 45;
private static final int ELEMENTAL_HEAL = 58;
private static final int HEAL = 1011;
private static final int BATTLE_HEAL = 1015;
private static final int GROUP_HEAL = 1027;
private static final int SERVITOR_HEAL = 1127;
private static final int GREATER_GROUP_HEAL = 1219;
private static int[] _skillIds = new int[] private static int[] _skillIds = new int[]
{ {
SELF_HEAL, 45, // Divine Heal
DEVINE_HEAL, 58, // Elemental Heal
ELEMENTAL_HEAL, 1011, // Heal
HEAL, 1015, // Battle Heal
BATTLE_HEAL, 1027, // Group Heal
GROUP_HEAL, 1127, // Servitor Heal
SERVITOR_HEAL, 1216, // Self Heal
GREATER_GROUP_HEAL 1219, // Greater Group Heal
}; };
@Override @Override

View File

@@ -29,6 +29,7 @@ import java.util.logging.Logger;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.enums.CreatureState;
import org.l2jmobius.gameserver.model.DropData; import org.l2jmobius.gameserver.model.DropData;
import org.l2jmobius.gameserver.model.Party; import org.l2jmobius.gameserver.model.Party;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -48,7 +49,7 @@ public class Attackable extends NpcInstance
// private int _moveRadius; // private int _moveRadius;
private boolean _active; private boolean _active;
private AITask _currentAiTask; private AITask _currentAiTask;
private AIAttackeTask _currentAIAttackeTask; private AIAttackeTask _currentAIAttackTask;
private static Timer _aiTimer = new Timer(true); private static Timer _aiTimer = new Timer(true);
private static Timer _attackTimer = new Timer(true); private static Timer _attackTimer = new Timer(true);
private final Map<WorldObject, Integer> _aggroList = new HashMap<>(); private final Map<WorldObject, Integer> _aggroList = new HashMap<>();
@@ -72,16 +73,12 @@ public class Attackable extends NpcInstance
super.onTargetReached(); super.onTargetReached();
switch (getCurrentState()) switch (getCurrentState())
{ {
case 1: case ATTACKING:
{
break;
}
case 5:
{ {
startCombat(); startCombat();
break; break;
} }
case 6: case RANDOM_WALK:
{ {
randomWalk(); randomWalk();
break; break;
@@ -104,15 +101,15 @@ public class Attackable extends NpcInstance
_currentAiTask = new AITask(this); _currentAiTask = new AITask(this);
int wait = (10 + Rnd.get(120)) * 1000; int wait = (10 + Rnd.get(120)) * 1000;
_aiTimer.schedule(_currentAiTask, wait); _aiTimer.schedule(_currentAiTask, wait);
setCurrentState((byte) 6); setCurrentState(CreatureState.RANDOM_WALK);
} }
protected synchronized void startTargetScan() protected synchronized void startTargetScan()
{ {
if ((_currentAIAttackeTask == null) && (getTarget() == null)) if ((_currentAIAttackTask == null) && (getTarget() == null))
{ {
_currentAIAttackeTask = new AIAttackeTask(this); _currentAIAttackTask = new AIAttackeTask(this);
_attackTimer.scheduleAtFixedRate(_currentAIAttackeTask, 100L, 1000L); _attackTimer.scheduleAtFixedRate(_currentAIAttackTask, 100L, 1000L);
} }
} }
@@ -326,15 +323,15 @@ public class Attackable extends NpcInstance
protected boolean isTargetScanActive() protected boolean isTargetScanActive()
{ {
return _currentAIAttackeTask != null; return _currentAIAttackTask != null;
} }
protected synchronized void stopTargetScan() protected synchronized void stopTargetScan()
{ {
if (_currentAIAttackeTask != null) if (_currentAIAttackTask != null)
{ {
_currentAIAttackeTask.cancel(); _currentAIAttackTask.cancel();
_currentAIAttackeTask = null; _currentAIAttackTask = null;
} }
} }
@@ -430,9 +427,9 @@ public class Attackable extends NpcInstance
startAttack(player); startAttack(player);
} }
} }
else if (_currentAIAttackeTask != null) else if (_currentAIAttackTask != null)
{ {
_currentAIAttackeTask.cancel(); _currentAIAttackTask.cancel();
} }
} }
catch (Throwable e) catch (Throwable e)

View File

@@ -27,6 +27,7 @@ import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.l2jmobius.gameserver.enums.CreatureState;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
@@ -119,15 +120,7 @@ public abstract class Creature extends WorldObject
private double _collisionHeight; private double _collisionHeight;
private WorldObject _target; private WorldObject _target;
private int _activeSoulShotGrade; private int _activeSoulShotGrade;
private byte _currentState = 0; private CreatureState _currentState = CreatureState.IDLE;
public static final byte STATE_IDLE = 0;
public static final byte STATE_PICKUP_ITEM = 1;
public static final byte STATE_CASTING = 2;
public static final byte STATE_RESTING = 3;
public static final byte STATE_ATTACKING = 5;
public static final byte STATE_RANDOM_WALK = 6;
public static final byte STATE_INTERACT = 7;
public static final byte STATE_FOLLOW = 8;
private boolean _inCombat; private boolean _inCombat;
private boolean _moving; private boolean _moving;
private boolean _movingToPawn; private boolean _movingToPawn;
@@ -663,12 +656,12 @@ public abstract class Creature extends WorldObject
return _target; return _target;
} }
public byte getCurrentState() public CreatureState getCurrentState()
{ {
return _currentState; return _currentState;
} }
public void setCurrentState(byte currentState) public void setCurrentState(CreatureState currentState)
{ {
_currentState = currentState; _currentState = currentState;
} }
@@ -800,12 +793,16 @@ public abstract class Creature extends WorldObject
broadcastStatusUpdate(); broadcastStatusUpdate();
} }
public void reduceCurrentHp(int i, Creature attacker) public void reduceCurrentHp(int amount, Creature attacker)
{ {
Object object = _hpLock; synchronized (_hpLock)
synchronized (object)
{ {
_currentHp -= i; if (!_hpRegenActive)
{
startHpRegeneration();
}
_currentHp -= amount;
if (_currentHp <= 0.0) if (_currentHp <= 0.0)
{ {
_currentHp = 0.0; _currentHp = 0.0;
@@ -823,7 +820,6 @@ public abstract class Creature extends WorldObject
{ {
_currentMoveTask.cancel(); _currentMoveTask.cancel();
} }
broadcastStatusUpdate();
StopMove stop = new StopMove(this); StopMove stop = new StopMove(this);
Die die = new Die(this); Die die = new Die(this);
broadcastPacket(stop); broadcastPacket(stop);
@@ -834,11 +830,6 @@ public abstract class Creature extends WorldObject
{ {
attacker.setTarget(null); attacker.setTarget(null);
} }
return;
}
if (!_hpRegenActive)
{
startHpRegeneration();
} }
} }
broadcastStatusUpdate(); broadcastStatusUpdate();
@@ -859,9 +850,9 @@ public abstract class Creature extends WorldObject
} }
calculateMovement(x, y, z, distance); calculateMovement(x, y, z, distance);
CharMoveToLocation mov = new CharMoveToLocation(this); CharMoveToLocation mov = new CharMoveToLocation(this);
if (getCurrentState() == 2) if (getCurrentState() == CreatureState.CASTING)
{ {
setCurrentState((byte) 0); setCurrentState(CreatureState.IDLE);
} }
enableAllSkills(); enableAllSkills();
broadcastPacket(mov); broadcastPacket(mov);
@@ -902,7 +893,7 @@ public abstract class Creature extends WorldObject
{ {
stopMove(); stopMove();
} }
if ((getPawnTarget() != null) && (distance <= getAttackRange()) && (getCurrentState() == 8)) if ((getPawnTarget() != null) && (distance <= getAttackRange()) && (getCurrentState() == CreatureState.FOLLOW))
{ {
ArriveTask newMoveTask = new ArriveTask(this); ArriveTask newMoveTask = new ArriveTask(this);
_moveTimer.schedule(newMoveTask, 3000L); _moveTimer.schedule(newMoveTask, 3000L);
@@ -951,7 +942,7 @@ public abstract class Creature extends WorldObject
ArriveTask newMoveTask = new ArriveTask(this); ArriveTask newMoveTask = new ArriveTask(this);
if (getPawnTarget() != null) if (getPawnTarget() != null)
{ {
if (getCurrentState() == 7) if (getCurrentState() == CreatureState.INTERACT)
{ {
_moveTimer.schedule(newMoveTask, _timeToTarget); _moveTimer.schedule(newMoveTask, _timeToTarget);
_currentMoveTask = newMoveTask; _currentMoveTask = newMoveTask;
@@ -1033,12 +1024,12 @@ public abstract class Creature extends WorldObject
int y = getPawnTarget().getY(); int y = getPawnTarget().getY();
int z = getPawnTarget().getZ(); int z = getPawnTarget().getZ();
double distance = getDistance(x, y); double distance = getDistance(x, y);
if (getCurrentState() == 8) if (getCurrentState() == CreatureState.FOLLOW)
{ {
calculateMovement(x, y, z, distance); calculateMovement(x, y, z, distance);
return; return;
} }
if (((distance > getAttackRange()) && (getCurrentState() == 5)) || (getPawnTarget().isMoving() && (getCurrentState() != 5))) if (((distance > getAttackRange()) && (getCurrentState() == CreatureState.ATTACKING)) || (getPawnTarget().isMoving() && (getCurrentState() != CreatureState.ATTACKING)))
{ {
calculateMovement(x, y, z, distance); calculateMovement(x, y, z, distance);
return; return;
@@ -1061,7 +1052,7 @@ public abstract class Creature extends WorldObject
setHeading(heading); setHeading(heading);
if (isMoving()) if (isMoving())
{ {
setCurrentState((byte) 0); setCurrentState(CreatureState.IDLE);
setto = new StopMove(this); setto = new StopMove(this);
broadcastPacket(setto); broadcastPacket(setto);
} }
@@ -1096,10 +1087,10 @@ public abstract class Creature extends WorldObject
{ {
_currentAttackTask = null; _currentAttackTask = null;
Creature target = (Creature) _attackTarget; Creature target = (Creature) _attackTarget;
if (isDead() || (target == null) || target.isDead() || ((getCurrentState() != 5) && (getCurrentState() != 2)) || !target.knownsObject(this) || !knownsObject(target)) if (isDead() || (target == null) || target.isDead() || ((getCurrentState() != CreatureState.ATTACKING) && (getCurrentState() != CreatureState.CASTING)) || !target.knownsObject(this) || !knownsObject(target))
{ {
setInCombat(false); setInCombat(false);
setCurrentState((byte) 0); setCurrentState(CreatureState.IDLE);
ActionFailed af = new ActionFailed(); ActionFailed af = new ActionFailed();
sendPacket(af); sendPacket(af);
return; return;
@@ -1107,7 +1098,7 @@ public abstract class Creature extends WorldObject
if ((getActiveWeapon().getWeaponType() == 5) && !checkAndEquipArrows()) if ((getActiveWeapon().getWeaponType() == 5) && !checkAndEquipArrows())
{ {
setInCombat(false); setInCombat(false);
setCurrentState((byte) 0); setCurrentState(CreatureState.IDLE);
ActionFailed af = new ActionFailed(); ActionFailed af = new ActionFailed();
sendPacket(af); sendPacket(af);
sendPacket(new SystemMessage(112)); sendPacket(new SystemMessage(112));
@@ -1119,13 +1110,13 @@ public abstract class Creature extends WorldObject
moveTo(_attackTarget.getX(), _attackTarget.getY(), _attackTarget.getZ(), getAttackRange()); moveTo(_attackTarget.getX(), _attackTarget.getY(), _attackTarget.getZ(), getAttackRange());
return; return;
} }
if ((getCurrentState() == 5) && !_currentlyAttacking) if ((getCurrentState() == CreatureState.ATTACKING) && !_currentlyAttacking)
{ {
Weapon weaponItem = getActiveWeapon(); Weapon weaponItem = getActiveWeapon();
if (weaponItem == null) if (weaponItem == null)
{ {
setInCombat(false); setInCombat(false);
setCurrentState((byte) 0); setCurrentState(CreatureState.IDLE);
ActionFailed af = new ActionFailed(); ActionFailed af = new ActionFailed();
sendPacket(af); sendPacket(af);
return; return;
@@ -1183,7 +1174,7 @@ public abstract class Creature extends WorldObject
{ {
sendPacket(new SystemMessage(24)); sendPacket(new SystemMessage(24));
setInCombat(false); setInCombat(false);
setCurrentState((byte) 0); setCurrentState(CreatureState.IDLE);
ActionFailed af = new ActionFailed(); ActionFailed af = new ActionFailed();
sendPacket(af); sendPacket(af);
return; return;
@@ -1223,7 +1214,7 @@ public abstract class Creature extends WorldObject
{ {
setInCombat(false); setInCombat(false);
setTarget(null); setTarget(null);
setCurrentState((byte) 0); setCurrentState(CreatureState.IDLE);
ActionFailed af = new ActionFailed(); ActionFailed af = new ActionFailed();
sendPacket(af); sendPacket(af);
return; return;
@@ -1302,14 +1293,14 @@ public abstract class Creature extends WorldObject
if (target == null) if (target == null)
{ {
setInCombat(false); setInCombat(false);
setCurrentState((byte) 0); setCurrentState(CreatureState.IDLE);
ActionFailed af = new ActionFailed(); ActionFailed af = new ActionFailed();
sendPacket(af); sendPacket(af);
return; return;
} }
setTarget(target); setTarget(target);
_attackTarget = target; _attackTarget = target;
setCurrentState((byte) 5); setCurrentState(CreatureState.ATTACKING);
moveTo(target.getX(), target.getY(), target.getZ(), getAttackRange()); moveTo(target.getX(), target.getY(), target.getZ(), getAttackRange());
} }
@@ -1466,8 +1457,7 @@ public abstract class Creature extends WorldObject
{ {
try try
{ {
Object object = _hpLock; synchronized (_hpLock)
synchronized (object)
{ {
double nowHp = _instance.getCurrentHp(); double nowHp = _instance.getCurrentHp();
if (_instance.getCurrentHp() < _instance.getMaxHp()) if (_instance.getCurrentHp() < _instance.getMaxHp())

View File

@@ -17,6 +17,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.instance; package org.l2jmobius.gameserver.model.actor.instance;
import org.l2jmobius.gameserver.enums.CreatureState;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
import org.l2jmobius.gameserver.network.serverpackets.CharInfo; import org.l2jmobius.gameserver.network.serverpackets.CharInfo;
import org.l2jmobius.gameserver.network.serverpackets.MyTargetSelected; import org.l2jmobius.gameserver.network.serverpackets.MyTargetSelected;
@@ -37,7 +38,7 @@ public class ClassMasterInstance extends NpcInstance
{ {
if (getObjectId() != player.getTargetId()) if (getObjectId() != player.getTargetId())
{ {
player.setCurrentState((byte) 0); player.setCurrentState(CreatureState.IDLE);
player.setTarget(this); player.setTarget(this);
MyTargetSelected my = new MyTargetSelected(getObjectId(), player.getLevel() - getLevel()); MyTargetSelected my = new MyTargetSelected(getObjectId(), player.getLevel() - getLevel());
player.sendPacket(my); player.sendPacket(my);

View File

@@ -17,6 +17,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.instance; package org.l2jmobius.gameserver.model.actor.instance;
import org.l2jmobius.gameserver.enums.CreatureState;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Attackable; import org.l2jmobius.gameserver.model.actor.Attackable;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -35,7 +36,7 @@ public class GuardInstance extends Attackable
public GuardInstance(Npc template) public GuardInstance(Npc template)
{ {
super(template); super(template);
setCurrentState((byte) 0); setCurrentState(CreatureState.IDLE);
} }
@Override @Override
@@ -102,7 +103,7 @@ public class GuardInstance extends Attackable
{ {
if (getObjectId() != player.getTargetId()) if (getObjectId() != player.getTargetId())
{ {
player.setCurrentState((byte) 0); player.setCurrentState(CreatureState.IDLE);
player.setTarget(this); player.setTarget(this);
MyTargetSelected my = new MyTargetSelected(getObjectId(), 0); MyTargetSelected my = new MyTargetSelected(getObjectId(), 0);
player.sendPacket(my); player.sendPacket(my);
@@ -117,14 +118,14 @@ public class GuardInstance extends Attackable
double distance = getDistance(player.getX(), player.getY()); double distance = getDistance(player.getX(), player.getY());
if (distance > INTERACTION_DISTANCE) if (distance > INTERACTION_DISTANCE)
{ {
player.setCurrentState((byte) 7); player.setCurrentState(CreatureState.INTERACT);
player.moveTo(getX(), getY(), getZ(), 150); player.moveTo(getX(), getY(), getZ(), 150);
} }
else else
{ {
showChatWindow(player, 0); showChatWindow(player, 0);
player.sendPacket(new ActionFailed()); player.sendPacket(new ActionFailed());
player.setCurrentState((byte) 0); player.setCurrentState(CreatureState.IDLE);
} }
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.instance; package org.l2jmobius.gameserver.model.actor.instance;
import org.l2jmobius.gameserver.enums.CreatureState;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.templates.EtcItem; import org.l2jmobius.gameserver.templates.EtcItem;
import org.l2jmobius.gameserver.templates.Item; import org.l2jmobius.gameserver.templates.Item;
@@ -109,7 +110,7 @@ public class ItemInstance extends WorldObject
@Override @Override
public void onAction(PlayerInstance player) public void onAction(PlayerInstance player)
{ {
player.setCurrentState((byte) 1); player.setCurrentState(CreatureState.PICKUP_ITEM);
player.setTarget(this); player.setTarget(this);
player.moveTo(getX(), getY(), getZ(), 0); player.moveTo(getX(), getY(), getZ(), 0);
} }

View File

@@ -17,6 +17,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.instance; package org.l2jmobius.gameserver.model.actor.instance;
import org.l2jmobius.gameserver.enums.CreatureState;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Attackable; import org.l2jmobius.gameserver.model.actor.Attackable;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@@ -28,7 +29,7 @@ public class MonsterInstance extends Attackable
{ {
super(template); super(template);
// this.setMoveRadius(2000); // this.setMoveRadius(2000);
setCurrentState((byte) 6); setCurrentState(CreatureState.RANDOM_WALK);
} }
@Override @Override
@@ -70,7 +71,7 @@ public class MonsterInstance extends Attackable
} }
return; return;
} }
if ((getCurrentState() != 6) && !isDead() && (getTarget() == null)) if ((getCurrentState() != CreatureState.RANDOM_WALK) && !isDead() && (getTarget() == null))
{ {
startRandomWalking(); startRandomWalking();
if (isAggressive()) if (isAggressive())

View File

@@ -23,6 +23,7 @@ import java.util.Timer;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.CreatureState;
import org.l2jmobius.gameserver.model.Spawn; import org.l2jmobius.gameserver.model.Spawn;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@@ -121,11 +122,11 @@ public class NpcInstance extends Creature
{ {
if (this != player.getTarget()) if (this != player.getTarget())
{ {
if (player.getCurrentState() == 2) if (player.getCurrentState() == CreatureState.CASTING)
{ {
player.cancelCastMagic(); player.cancelCastMagic();
} }
player.setCurrentState((byte) 0); player.setCurrentState(CreatureState.IDLE);
player.setTarget(this); player.setTarget(this);
MyTargetSelected my = new MyTargetSelected(getObjectId(), player.getLevel() - getLevel()); MyTargetSelected my = new MyTargetSelected(getObjectId(), player.getLevel() - getLevel());
player.sendPacket(my); player.sendPacket(my);
@@ -149,7 +150,7 @@ public class NpcInstance extends Creature
double distance = getDistance(player.getX(), player.getY()); double distance = getDistance(player.getX(), player.getY());
if (distance > INTERACTION_DISTANCE) if (distance > INTERACTION_DISTANCE)
{ {
player.setCurrentState((byte) 7); player.setCurrentState(CreatureState.INTERACT);
player.setInteractTarget(this); player.setInteractTarget(this);
player.moveTo(getX(), getY(), getZ(), 150); player.moveTo(getX(), getY(), getZ(), 150);
} }
@@ -157,7 +158,7 @@ public class NpcInstance extends Creature
{ {
showChatWindow(player, 0); showChatWindow(player, 0);
player.sendPacket(new ActionFailed()); player.sendPacket(new ActionFailed());
player.setCurrentState((byte) 0); player.setCurrentState(CreatureState.IDLE);
} }
} }
} }

View File

@@ -21,6 +21,7 @@ import java.util.Timer;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.l2jmobius.gameserver.data.ExperienceTable; import org.l2jmobius.gameserver.data.ExperienceTable;
import org.l2jmobius.gameserver.enums.CreatureState;
import org.l2jmobius.gameserver.model.Inventory; import org.l2jmobius.gameserver.model.Inventory;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
@@ -74,7 +75,7 @@ public class PetInstance extends Creature
{ {
setCollisionHeight(template.getHeight()); setCollisionHeight(template.getHeight());
setCollisionRadius(template.getRadius()); setCollisionRadius(template.getRadius());
setCurrentState((byte) 0); setCurrentState(CreatureState.IDLE);
setPhysicalAttack(9999); setPhysicalAttack(9999);
_template = template; _template = template;
} }
@@ -88,7 +89,7 @@ public class PetInstance extends Creature
player.sendPacket(new PetStatusUpdate(this)); player.sendPacket(new PetStatusUpdate(this));
player.sendPacket(new ActionFailed()); player.sendPacket(new ActionFailed());
} }
player.setCurrentState((byte) 0); player.setCurrentState(CreatureState.IDLE);
player.setTarget(this); player.setTarget(this);
MyTargetSelected my = new MyTargetSelected(getObjectId(), player.getLevel() - getLevel()); MyTargetSelected my = new MyTargetSelected(getObjectId(), player.getLevel() - getLevel());
player.sendPacket(my); player.sendPacket(my);
@@ -283,7 +284,7 @@ public class PetInstance extends Creature
public void followOwner(PlayerInstance owner) public void followOwner(PlayerInstance owner)
{ {
setCurrentState((byte) 8); setCurrentState(CreatureState.FOLLOW);
setTarget(owner); setTarget(owner);
moveTo(owner.getX(), owner.getY(), owner.getZ(), 30); moveTo(owner.getX(), owner.getY(), owner.getZ(), 30);
broadcastPacket(new PetStatusUpdate(this)); broadcastPacket(new PetStatusUpdate(this));
@@ -298,12 +299,12 @@ public class PetInstance extends Creature
{ {
switch (getCurrentState()) switch (getCurrentState())
{ {
case 1: case PICKUP_ITEM:
{ {
doPickupItem(); doPickupItem();
break; break;
} }
case 5: case ATTACKING:
{ {
startCombat(); startCombat();
break; break;
@@ -364,7 +365,7 @@ public class PetInstance extends Creature
if (!pickupOk) if (!pickupOk)
{ {
_owner.sendPacket(new ActionFailed()); _owner.sendPacket(new ActionFailed());
setCurrentState((byte) 0); setCurrentState(CreatureState.IDLE);
return; return;
} }
GetItem gi = new GetItem(target, getObjectId()); GetItem gi = new GetItem(target, getObjectId());
@@ -375,7 +376,7 @@ public class PetInstance extends Creature
getInventory().addItem(target); getInventory().addItem(target);
PetItemList iu = new PetItemList(this); PetItemList iu = new PetItemList(this);
_owner.sendPacket(iu); _owner.sendPacket(iu);
setCurrentState((byte) 0); setCurrentState(CreatureState.IDLE);
if (getFollowStatus()) if (getFollowStatus())
{ {
followOwner(_owner); followOwner(_owner);

View File

@@ -32,6 +32,7 @@ import org.l2jmobius.gameserver.data.ExperienceTable;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.data.LevelUpData; import org.l2jmobius.gameserver.data.LevelUpData;
import org.l2jmobius.gameserver.data.SkillTable; import org.l2jmobius.gameserver.data.SkillTable;
import org.l2jmobius.gameserver.enums.CreatureState;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.handler.SkillHandler; import org.l2jmobius.gameserver.handler.SkillHandler;
import org.l2jmobius.gameserver.managers.GmListManager; import org.l2jmobius.gameserver.managers.GmListManager;
@@ -511,10 +512,10 @@ public class PlayerInstance extends Creature
} }
else else
{ {
player.setCurrentState((byte) 8); player.setCurrentState(CreatureState.FOLLOW);
if (getPrivateStoreType() != 0) if (getPrivateStoreType() != 0)
{ {
player.setCurrentState((byte) 7); player.setCurrentState(CreatureState.INTERACT);
} }
player.moveTo(getX(), getY(), getZ(), 36); player.moveTo(getX(), getY(), getZ(), 36);
} }
@@ -613,21 +614,21 @@ public class PlayerInstance extends Creature
{ {
switch (getCurrentState()) switch (getCurrentState())
{ {
case 1: case PICKUP_ITEM:
{ {
doPickupItem(); doPickupItem();
break; break;
} }
case 5: case ATTACKING:
{ {
startCombat(); startCombat();
break; break;
} }
case 2: case CASTING:
{ {
useMagic(_skill); useMagic(_skill);
} }
case 7: case INTERACT:
{ {
if (getTarget() instanceof PlayerInstance) if (getTarget() instanceof PlayerInstance)
{ {
@@ -641,7 +642,7 @@ public class PlayerInstance extends Creature
{ {
sendPacket(new PrivateBuyListBuy(temp, this)); sendPacket(new PrivateBuyListBuy(temp, this));
} }
setCurrentState((byte) 0); setCurrentState(CreatureState.IDLE);
break; break;
} }
if (_interactTarget == null) if (_interactTarget == null)
@@ -660,7 +661,7 @@ public class PlayerInstance extends Creature
private void doPickupItem() private void doPickupItem()
{ {
setCurrentState((byte) 0); setCurrentState(CreatureState.IDLE);
if (!(getTarget() instanceof ItemInstance)) if (!(getTarget() instanceof ItemInstance))
{ {
_log.warning("trying to pickup wrong target." + getTarget()); _log.warning("trying to pickup wrong target." + getTarget());
@@ -735,7 +736,7 @@ public class PlayerInstance extends Creature
public void setTarget(WorldObject newTarget) public void setTarget(WorldObject newTarget)
{ {
WorldObject oldTarget; WorldObject oldTarget;
if (getCurrentState() == 2) if (getCurrentState() == CreatureState.CASTING)
{ {
cancelCastMagic(); cancelCastMagic();
} }
@@ -1244,6 +1245,7 @@ public class PlayerInstance extends Creature
{ {
Creature target = null; Creature target = null;
target = getTarget() instanceof Creature ? (Creature) getTarget() : this; target = getTarget() instanceof Creature ? (Creature) getTarget() : this;
if ((skill.getTargetType() == Skill.TARGET_SELF) || (skill.getTargetType() == Skill.TARGET_PARTY)) if ((skill.getTargetType() == Skill.TARGET_SELF) || (skill.getTargetType() == Skill.TARGET_PARTY))
{ {
target = this; target = this;
@@ -1256,6 +1258,7 @@ public class PlayerInstance extends Creature
{ {
return; return;
} }
int weaponType = getActiveWeapon().getWeaponType(); int weaponType = getActiveWeapon().getWeaponType();
int skillId = skill.getId(); int skillId = skill.getId();
if ((skillId == 56) && (weaponType != 5)) if ((skillId == 56) && (weaponType != 5))
@@ -1274,10 +1277,11 @@ public class PlayerInstance extends Creature
{ {
return; return;
} }
if (SkillHandler.getInstance().getSkillHandler(skill.getId()) == null) if (SkillHandler.getInstance().getSkillHandler(skill.getId()) == null)
{ {
SystemMessage sm = new SystemMessage(614); SystemMessage sm = new SystemMessage(614);
sm.addString("This skill is not implemented yet"); sm.addString("This skill is not implemented yet.");
sendPacket(sm); sendPacket(sm);
return; return;
} }
@@ -1291,7 +1295,7 @@ public class PlayerInstance extends Creature
sendPacket(new SystemMessage(23)); sendPacket(new SystemMessage(23));
return; return;
} }
setCurrentState((byte) 2); setCurrentState(CreatureState.CASTING);
setSkill(skill); setSkill(skill);
double distance = getDistance(target.getX(), target.getY()); double distance = getDistance(target.getX(), target.getY());
if ((skill.getCastRange() > 0) && (distance > skill.getCastRange())) if ((skill.getCastRange() > 0) && (distance > skill.getCastRange()))
@@ -1313,10 +1317,10 @@ public class PlayerInstance extends Creature
if (skill.getSkillTime() > 300) if (skill.getSkillTime() > 300)
{ {
disableSkill(skill.getId(), true); disableSkill(skill.getId(), true);
_enableSkillTimer.schedule(new EnableSkill(skill.getId()), skill.getReuseDelay());
disableAllSkills(); disableAllSkills();
_enableAllSkillsTimer.schedule(new EnableAllSkills(skill), skill.getSkillTime());
_magicUseTimer.schedule(new MagicUseTask(target, skill), skill.getHitTime()); _magicUseTimer.schedule(new MagicUseTask(target, skill), skill.getHitTime());
_enableSkillTimer.schedule(new EnableSkill(skill.getId()), skill.getReuseDelay());
_enableAllSkillsTimer.schedule(new EnableAllSkills(skill), skill.getSkillTime());
} }
} }
@@ -1391,7 +1395,7 @@ public class PlayerInstance extends Creature
public void onMagicUseTimer(Creature target, Skill skill) public void onMagicUseTimer(Creature target, Skill skill)
{ {
if ((getCurrentState() == 2) && _allSkillsDisabled && isSkillDisabled(skill.getId()) && (getSkill() == skill)) if ((getCurrentState() == CreatureState.CASTING) && (getSkill() == skill))
{ {
int magicId = skill.getId(); int magicId = skill.getId();
int level = getSkillLevel(magicId); int level = getSkillLevel(magicId);
@@ -1417,13 +1421,13 @@ public class PlayerInstance extends Creature
ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(skill.getId()); ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(skill.getId());
if (handler == null) if (handler == null)
{ {
_log.warning("no skillhandler registered for skillId:" + skill.getId()); _log.warning("No skillhandler registered for skillId: " + skill.getId());
} }
else else
{ {
handler.useSkill(this, skill, target); handler.useSkill(this, skill, target);
} }
setCurrentState((byte) 0); setCurrentState(CreatureState.IDLE);
} }
} }
@@ -1512,7 +1516,7 @@ public class PlayerInstance extends Creature
public void cancelCastMagic() public void cancelCastMagic()
{ {
setCurrentState((byte) 0); setCurrentState(CreatureState.IDLE);
enableAllSkills(); enableAllSkills();
MagicSkillCanceld msc = new MagicSkillCanceld(getObjectId()); MagicSkillCanceld msc = new MagicSkillCanceld(getObjectId());
sendPacket(msc); sendPacket(msc);
@@ -1578,5 +1582,4 @@ public class PlayerInstance extends Creature
} }
} }
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package org.l2jmobius.gameserver.network.clientpackets; package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.gameserver.enums.CreatureState;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.network.ClientThread; import org.l2jmobius.gameserver.network.ClientThread;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@@ -36,20 +37,20 @@ public class MoveBackwardToLocation extends ClientBasePacket
int originY = readD(); int originY = readD();
int originZ = readD(); int originZ = readD();
PlayerInstance activeChar = client.getActiveChar(); PlayerInstance activeChar = client.getActiveChar();
if (activeChar.getCurrentState() == 2) if (activeChar.getCurrentState() == CreatureState.CASTING)
{ {
activeChar.sendPacket(new ActionFailed()); activeChar.sendPacket(new ActionFailed());
} }
else else
{ {
if (activeChar.getCurrentState() == 5) if (activeChar.getCurrentState() == CreatureState.ATTACKING)
{ {
AttackCanceld ac = new AttackCanceld(activeChar.getObjectId()); AttackCanceld ac = new AttackCanceld(activeChar.getObjectId());
activeChar.sendPacket(ac); activeChar.sendPacket(ac);
activeChar.broadcastPacket(ac); activeChar.broadcastPacket(ac);
} }
activeChar.setInCombat(false); activeChar.setInCombat(false);
activeChar.setCurrentState((byte) 0); activeChar.setCurrentState(CreatureState.IDLE);
activeChar.setX(originX); activeChar.setX(originX);
activeChar.setY(originY); activeChar.setY(originY);
activeChar.setZ(originZ); activeChar.setZ(originZ);

View File

@@ -17,6 +17,7 @@
*/ */
package org.l2jmobius.gameserver.network.clientpackets; package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.gameserver.enums.CreatureState;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.network.ClientThread; import org.l2jmobius.gameserver.network.ClientThread;
@@ -70,14 +71,14 @@ public class RequestActionUse extends ClientBasePacket
{ {
break; break;
} }
if (activeChar.getPet().getCurrentState() != 8) if (activeChar.getPet().getCurrentState() != CreatureState.FOLLOW)
{ {
activeChar.getPet().setCurrentState((byte) 8); activeChar.getPet().setCurrentState(CreatureState.FOLLOW);
activeChar.getPet().setFollowStatus(true); activeChar.getPet().setFollowStatus(true);
activeChar.getPet().followOwner(activeChar); activeChar.getPet().followOwner(activeChar);
break; break;
} }
activeChar.getPet().setCurrentState((byte) 0); activeChar.getPet().setCurrentState(CreatureState.IDLE);
activeChar.getPet().setFollowStatus(false); activeChar.getPet().setFollowStatus(false);
activeChar.getPet().setMovingToPawn(false); activeChar.getPet().setMovingToPawn(false);
activeChar.getPet().setPawnTarget(null); activeChar.getPet().setPawnTarget(null);
@@ -100,13 +101,13 @@ public class RequestActionUse extends ClientBasePacket
{ {
break; break;
} }
if (activeChar.getPet().getCurrentState() == 8) if (activeChar.getPet().getCurrentState() == CreatureState.FOLLOW)
{ {
activeChar.getPet().setFollowStatus(false); activeChar.getPet().setFollowStatus(false);
activeChar.getPet().setMovingToPawn(false); activeChar.getPet().setMovingToPawn(false);
activeChar.getPet().setPawnTarget(null); activeChar.getPet().setPawnTarget(null);
} }
activeChar.getPet().setCurrentState((byte) 0); activeChar.getPet().setCurrentState(CreatureState.IDLE);
activeChar.getPet().stopMove(); activeChar.getPet().stopMove();
activeChar.getPet().broadcastPacket(new StopMove(activeChar.getPet())); activeChar.getPet().broadcastPacket(new StopMove(activeChar.getPet()));
break; break;

View File

@@ -34,6 +34,7 @@ public class RequestMagicSkillUse extends ClientBasePacket
int data2 = readD(); int data2 = readD();
@SuppressWarnings("unused") @SuppressWarnings("unused")
int data3 = readC(); int data3 = readC();
PlayerInstance activeChar = client.getActiveChar(); PlayerInstance activeChar = client.getActiveChar();
int level = activeChar.getSkillLevel(magicId); int level = activeChar.getSkillLevel(magicId);
Skill skill = SkillTable.getInstance().getInfo(magicId, level); Skill skill = SkillTable.getInstance().getInfo(magicId, level);
@@ -44,7 +45,7 @@ public class RequestMagicSkillUse extends ClientBasePacket
} }
else else
{ {
_log.warning("No skill found!!"); _log.warning(activeChar + " tried to cast skill " + magicId);
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package org.l2jmobius.gameserver.network.clientpackets; package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.gameserver.enums.CreatureState;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.instance.ItemInstance; import org.l2jmobius.gameserver.model.actor.instance.ItemInstance;
import org.l2jmobius.gameserver.network.ClientThread; import org.l2jmobius.gameserver.network.ClientThread;
@@ -32,7 +33,7 @@ public class RequestPetGetItem extends ClientBasePacket
World world = World.getInstance(); World world = World.getInstance();
ItemInstance item = (ItemInstance) world.findObject(objectId); ItemInstance item = (ItemInstance) world.findObject(objectId);
client.getActiveChar().getPet().setTarget(item); client.getActiveChar().getPet().setTarget(item);
client.getActiveChar().getPet().setCurrentState((byte) 1); client.getActiveChar().getPet().setCurrentState(CreatureState.PICKUP_ITEM);
client.getActiveChar().getPet().moveTo(item.getX(), item.getY(), item.getZ(), 0); client.getActiveChar().getPet().moveTo(item.getX(), item.getY(), item.getZ(), 0);
} }

View File

@@ -17,6 +17,7 @@
*/ */
package org.l2jmobius.gameserver.network.clientpackets; package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.gameserver.enums.CreatureState;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.network.ClientThread; import org.l2jmobius.gameserver.network.ClientThread;
import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.SocialAction;
@@ -30,7 +31,7 @@ public class RequestSocialAction extends ClientBasePacket
super(decrypt); super(decrypt);
int actionId = readD(); int actionId = readD();
PlayerInstance activeChar = client.getActiveChar(); PlayerInstance activeChar = client.getActiveChar();
if ((activeChar.getPrivateStoreType() == 0) && (activeChar.getTransactionRequester() == null) && (activeChar.getCurrentState() == 0)) if ((activeChar.getPrivateStoreType() == 0) && (activeChar.getTransactionRequester() == null) && (activeChar.getCurrentState() == CreatureState.IDLE))
{ {
SocialAction atk = new SocialAction(client.getActiveChar().getObjectId(), actionId); SocialAction atk = new SocialAction(client.getActiveChar().getObjectId(), actionId);
activeChar.sendPacket(atk); activeChar.sendPacket(atk);