diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index e28d5bc6..1966f613 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -974,6 +974,7 @@ void Creature::DoSkill(int skill_id, } DoSkillPreProc(skill_id, target_id); ResetSkill(); + ClearSkillLocalVars(skill_id); skill_target_id_ = target_id; skill_dir_ = skill_dir; skill_distance_ = skill_distance; @@ -3676,15 +3677,35 @@ void Creature::InitMobaRoad() void Creature::ClearSkillLocalVars(int skill_id) { - + auto itr = skill_local_vars_.find(skill_id); + if (itr != skill_local_vars_.end()) { + skill_local_vars_.erase(itr); + } } float Creature::GetSkillLocalVar(int skill_id, int idx) { - + auto itr = skill_local_vars_.find(skill_id); + if (itr != skill_local_vars_.end()) { + auto itr2 = itr->second.find(idx); + if (itr2 != itr->second.end()) { + return itr2->second; + } + } + return 0.0f; } void Creature::SetSkillLocalVar(int skill_id, int idx, float val) { - + auto itr = skill_local_vars_.find(skill_id); + if (itr == skill_local_vars_.end()) { + skill_local_vars_[skill_id] = std::map(); + itr = skill_local_vars_.find(skill_id); + } + auto itr2 = itr->second.find(idx); + if (itr2 != itr->second.end()) { + itr2->second = val; + } else { + itr->second[idx] = val; + } }