diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 04ef1854..6d8ba0d4 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1466,3 +1466,10 @@ void Creature::SetCurrWeapon(Weapon* weapon) #endif curr_weapon_ = weapon; } + +void Creature::ResetAllSkillCd() +{ + for (auto& pair : skill_hash_) { + pair.second->ResetSkillCd(); + } +} diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 1c4d5c37..f947c9e8 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -139,6 +139,7 @@ class Creature : public MoveableEntity Weapon* ChooseNextWeapon(int curr_weapon_slot_id, int begin_slot_id, int end_slot_id); Weapon* GetCurrWeapon() { return curr_weapon_; }; void SetCurrWeapon(Weapon* weapon); + void ResetAllSkillCd(); private: diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index d872b612..ceb0197b 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -1706,6 +1706,7 @@ void Room::ShuaPlane() for (auto& pair : human_hash_) { pair.second->MustBeAddBuff(pair.second, FLY_BUFFID); + pair.second->ResetAllSkillCd(); pair.second->SetPos(plane.curr_pos); pair.second->attack_dir = plane.dir; pair.second->SetMoveDir(plane.dir); diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index 971770fc..4a59ad89 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -132,3 +132,11 @@ void Skill::NotifySkillState() owner->room->frame_event.AddSkillCurrTimesChg(owner->AllocWeakPtr(), meta->i->skill_id(), GetCurrTimes()); } } + +void Skill::ResetSkillCd() +{ + curr_times_ = 0; + if (inc_times_timer_) { + owner->room->xtimer.ModifyTimer(inc_times_timer_, GetCd() / FRAME_RATE_MS); + } +} diff --git a/server/gameserver/skill.h b/server/gameserver/skill.h index 117f8b7a..56949d96 100644 --- a/server/gameserver/skill.h +++ b/server/gameserver/skill.h @@ -34,6 +34,7 @@ class Skill int GetMaxTimes(); void DecTimes(); void FillMFSkill(cs::MFSkill* skill_pb); + void ResetSkillCd(); void ClearPassiveSkillBuff(); void AddPassiveSkillBuff();