From d6849f453619f962db242a36671a1b4b83b080b6 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 22 Jul 2020 20:08:06 +0800 Subject: [PATCH] 1 --- server/gameserver/frameevent.cc | 43 +++++++++++++++++++++++++++++++++ server/gameserver/frameevent.h | 4 +++ server/gameserver/human.cc | 6 +++++ server/gameserver/human.h | 2 ++ 4 files changed, 55 insertions(+) diff --git a/server/gameserver/frameevent.cc b/server/gameserver/frameevent.cc index 5af50b0..8b9290f 100644 --- a/server/gameserver/frameevent.cc +++ b/server/gameserver/frameevent.cc @@ -309,6 +309,43 @@ void FrameEvent::AddZombieIdChg(Human* hum) hum->chged_zombieid_.push_back(idx); } +void FrameEvent::AddDead(Human* sender, int revive_time) +{ + { + dead_objs_.push_back( + std::make_tuple( + sender->GetEntityUniId(), + revive_time + ) + ); + } + { + int dead_idx = dead_objs_.size() - 1; + sender->TouchAllLayerHumanList + ( + [dead_idx] (Human* hum, bool& stop) + { + hum->dead_objs_.push_back(dead_idx); + }); + } +} + +void FrameEvent::AddRevive(Human* sender) +{ + { + revive_objs_.push_back(sender->GetEntityUniId()); + } + { + int revive_idx = revive_objs_.size() - 1; + sender->TouchAllLayerHumanList + ( + [revive_idx] (Human* hum, bool& stop) + { + hum->revive_objs_.push_back(revive_idx); + }); + } +} + void FrameEvent::Clear() { if (!explosions_.empty()) { @@ -368,4 +405,10 @@ void FrameEvent::Clear() if (!chged_zombieids_.empty()) { chged_zombieids_.clear(); } + if (!revive_objs_.empty()) { + revive_objs_.clear(); + } + if (!dead_objs_.empty()) { + dead_objs_.clear(); + } } diff --git a/server/gameserver/frameevent.h b/server/gameserver/frameevent.h index 1dd15e0..fa8ad6f 100644 --- a/server/gameserver/frameevent.h +++ b/server/gameserver/frameevent.h @@ -30,6 +30,8 @@ public: void AddExpChg(Human* hum); void AddRaceChg(Human* hum); void AddZombieIdChg(Human* hum); + void AddDead(Human* sender, int revive_time); + void AddRevive(Human* sender); void Clear(); private: @@ -52,6 +54,8 @@ private: std::vector chged_exps_; std::vector chged_races_; std::vector chged_zombieids_; + std::vector revive_objs_; + std::vector> dead_objs_; friend class FrameMaker; }; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 1a4ce4e..049155c 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1972,6 +1972,12 @@ void Human::ClearFrameData() if (!chged_zombieid_.empty()) { chged_zombieid_.clear(); } + if (!revive_objs_.empty()) { + revive_objs_.clear(); + } + if (!dead_objs_.empty()) { + dead_objs_.clear(); + } } void Human::GenBattleReportData(a8::MutableXObject* params) diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 5771d8a..131db8b 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -358,6 +358,8 @@ protected: std::vector chged_exp_; std::vector chged_race_; std::vector chged_zombieid_; + std::vector revive_objs_; + std::vector dead_objs_; Human* follow_target_ = nullptr; bool follow_synced_active_player = false; HumanCar car_;