From 863e1fbae28f5ec7d225fd4f457c5d516f580ab5 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 28 Nov 2023 10:59:41 +0800 Subject: [PATCH] 1 --- server/gameserver/creature.cc | 12 +++++++++++- server/gameserver/player.cc | 9 +++++++++ server/gameserver/player.h | 2 ++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index c763d2be..b0fd0e27 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -3823,12 +3823,22 @@ void Creature::InternalUseSkill() void Creature::AddSkillHoldState(int skill_id) { - + skill_hold_skill_id = skill_id; + skill_hold_start_frameno = room->GetFrameNo(); + Skill* skill = GetSkill(skill_hold_skill_id); + if (skill && skill->meta->skill_hold_buff()) { + TryAddBuff(owner_, + skill->meta->skill_hold_buff()); + } } void Creature::ClearSkillHoldState() { if (skill_hold_skill_id != 0) { + Skill* skill = GetSkill(skill_hold_skill_id); + if (skill && skill->meta->skill_hold_buff()) { + RemoveBuffById(skill->meta->skill_hold_buff()); + } skill_hold_skill_id = 0; skill_hold_start_frameno = 0; } diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index cd5d848a..09c8836f 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -263,6 +263,14 @@ void Player::InternalUpdate(int delta_time) if (throw_bomb) { UpdateThrowBomb(); } + if (skill_hold) { + if (skill_hold_skill_id && skill_hold_skill_id != skill_hold) { + ClearSkillHoldState(); + } + AddSkillHoldState(skill_hold); + } else { + ClearSkillHoldState(); + } #if 0 if (moving) { UpdateMoving(); @@ -1186,6 +1194,7 @@ void Player::_CMMove(f8::MsgHdr* hdr, const cs::CMMove& msg) } last_cmmove_frameno = room->GetFrameNo(); trace_target_uniid = msg.trace_target_uniid(); + skill_hold = msg.skill_hold(); #ifdef MYDEBUG1 a8::XPrintf("move_dir:%f %f frameno:%d %d moving:%d\n", { diff --git a/server/gameserver/player.h b/server/gameserver/player.h index 3ba4f907..26450769 100644 --- a/server/gameserver/player.h +++ b/server/gameserver/player.h @@ -91,6 +91,8 @@ class Player : public Human std::vector interaction_objids; + int skill_hold = 0; + virtual ~Player() override; virtual void Initialize() override; virtual void Update(int delta_time) override;