diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 01ec4580..a4167cd1 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -3830,6 +3830,9 @@ void Creature::AddSkillHoldState(int skill_id) TryAddBuff(this, skill->meta->skill_hold_buff()); } +#ifdef MYDEBUG1 + a8::XPrintf("AddSkillHoldState %d\n", {skill_id}); +#endif } void Creature::ClearSkillHoldState() @@ -3842,4 +3845,7 @@ void Creature::ClearSkillHoldState() skill_hold_skill_id = 0; skill_hold_start_frameno = 0; } + if (IsPlayer()) { + AsPlayer()->skill_hold = 0; + } } diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 6eb97c81..6e82f51c 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -265,8 +265,10 @@ void Player::InternalUpdate(int delta_time) } if (skill_hold) { if (skill_hold_skill_id != skill_hold) { + int old_skill_hold = skill_hold; ClearSkillHoldState(); - AddSkillHoldState(skill_hold); + AddSkillHoldState(old_skill_hold); + skill_hold = old_skill_hold; } } else { ClearSkillHoldState(); @@ -931,10 +933,11 @@ void Player::_CMMove(f8::MsgHdr* hdr, const cs::CMMove& msg) } #endif #ifdef MYDEBUG1 - a8::XPrintf("CMMove.Shot shot_sart%d shot_hold:%d\n", + a8::XPrintf("CMMove.Shot shot_sart:%d shot_hold:%d skill_hold:%d\n", { msg.shot_start(), - msg.shot_hold() + msg.shot_hold(), + msg.skill_hold() }); #endif long long pre_frameno = last_cmmove_frameno_;