diff --git a/game-server/src/com/aionemu/gameserver/model/gameobjects/player/Player.java b/game-server/src/com/aionemu/gameserver/model/gameobjects/player/Player.java index 56e2721f7..28f2df38d 100644 --- a/game-server/src/com/aionemu/gameserver/model/gameobjects/player/Player.java +++ b/game-server/src/com/aionemu/gameserver/model/gameobjects/player/Player.java @@ -1227,7 +1227,11 @@ public SkillTemplate getLastSkill() { } public boolean isHitTimeBoosted() { - return System.currentTimeMillis() <= hitTimeBoostExpireTimeMillis; + return isHitTimeBoosted(System.currentTimeMillis()); + } + + public boolean isHitTimeBoosted(long timeMillis) { + return timeMillis <= hitTimeBoostExpireTimeMillis; } public float getHitTimeBoostCastSpeed() { diff --git a/game-server/src/com/aionemu/gameserver/skillengine/model/ChargeSkill.java b/game-server/src/com/aionemu/gameserver/skillengine/model/ChargeSkill.java index 149a59f91..ac3705435 100644 --- a/game-server/src/com/aionemu/gameserver/skillengine/model/ChargeSkill.java +++ b/game-server/src/com/aionemu/gameserver/skillengine/model/ChargeSkill.java @@ -31,6 +31,9 @@ public boolean useSkill() { effector.getObserveController().notifyStartSkillCastObservers(this); effector.setCasting(this); effector.getObserveController().attach(moveListener); + // motion boost state from the charge starting time must not get lost + if (effector instanceof Player player && player.isHitTimeBoosted(player.getCastingSkill().getCastStartTime())) + player.setHitTimeBoost(System.currentTimeMillis() + 100, player.getHitTimeBoostCastSpeed()); updateCastDurationAndSpeed(); updateHitTime(SecurityConfig.CHECK_ANIMATIONS); endCast();