diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 2e024aa..c32728d 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -934,3 +934,26 @@ void Creature::TouchProperTargets(std::function func) GetGridList(), callback); } + +void Creature::UpdatePoisoning() +{ + if (dead) { + return; + } + bool need_notify = poisoning_time > 1000; + while (poisoning_time > 1000) { + if (room->GetGasData().is_last_gas) { + DecHP(room->GetGasData().new_area_meta->i->hurt(), VP_SafeArea, TEXT("battle_server_killer_gas", "毒圈"), VW_SafeArea); + } else { + DecHP(room->GetGasData().old_area_meta->i->hurt(), VP_SafeArea, TEXT("battle_server_killer_gas", "毒圈"), VW_SafeArea); + } + if (dead) { + poisoning_time = 0; + break; + } + poisoning_time -= 1000; + } + if (need_notify && IsEntitySubType(EST_Player)) { + SyncAroundPlayers(__FILE__, __LINE__, __func__); + } +} diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 7670a73..11f0e63 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -62,6 +62,7 @@ class Creature : public MoveableEntity void ClearSkill(); void AddPassiveSkill(int skill_id); void ClearPassiveSkill(); + void UpdatePoisoning(); bool IsProperTarget(Creature* target); bool IsEnemy(Creature* target); diff --git a/server/gameserver/hero.ai.cc b/server/gameserver/hero.ai.cc index ccbe2f0..efc7852 100644 --- a/server/gameserver/hero.ai.cc +++ b/server/gameserver/hero.ai.cc @@ -38,14 +38,14 @@ HeroAI::~HeroAI() void HeroAI::Update(int delta_time) { Hero* hero = (Hero*)owner; - #if 0 - if (hum->poisoning) { - hum->poisoning_time += delta_time; + if (hero->poisoning) { + hero->poisoning_time += delta_time; } - if (hum->poisoning) { - hum->UpdatePoisoning(); + if (hero->poisoning) { + #if 0 + hero->UpdatePoisoning(); + #endif } - #endif if (hero->dead) { return; } diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 4401350..c0d029e 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -741,29 +741,6 @@ float Human::GetMaxHP() return ability.max_hp; } -void Human::UpdatePoisoning() -{ - if (dead) { - return; - } - bool need_notify = poisoning_time > 1000; - while (poisoning_time > 1000) { - if (room->GetGasData().is_last_gas) { - DecHP(room->GetGasData().new_area_meta->i->hurt(), VP_SafeArea, TEXT("battle_server_killer_gas", "毒圈"), VW_SafeArea); - } else { - DecHP(room->GetGasData().old_area_meta->i->hurt(), VP_SafeArea, TEXT("battle_server_killer_gas", "毒圈"), VW_SafeArea); - } - if (dead) { - poisoning_time = 0; - break; - } - poisoning_time -= 1000; - } - if (need_notify && IsEntitySubType(EST_Player)) { - SyncAroundPlayers(__FILE__, __LINE__, __func__); - } -} - void Human::AutoLoadingBullet(bool manual) { Weapon* p_weapon = curr_weapon; diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 19974fd..579dd0d 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -156,7 +156,6 @@ class Human : public Creature float GetRadius(); float GetHP(); float GetMaxHP(); - void UpdatePoisoning(); void AutoLoadingBullet(bool manual = false); void BeKill(int killer_id, const std::string& killer_name, int weapon_id); virtual void DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id) override;