diff --git a/server/gameserver/ingamevoice.cc b/server/gameserver/ingamevoice.cc index 62aff61c..40011ebd 100644 --- a/server/gameserver/ingamevoice.cc +++ b/server/gameserver/ingamevoice.cc @@ -28,6 +28,16 @@ static int GetIntMap(std::map& int_map, int key) } } +static int GetInt64Map(std::map& int_map, int key) +{ + auto itr = int_map.find(key); + if (itr != int_map.end()) { + return itr->second; + } else { + return 0; + } +} + InGameVoice::InGameVoice(Room* room) { room_ = room; @@ -60,10 +70,11 @@ void InGameVoice::OnHumanBeKill(int killer_id, Human* deader) } ++global_kills_; if (global_kills_ > 0) { - if (room_->GetFrameNo() - killer->stats->last_kill_frameno > + if (room_->GetFrameNo() - GetInt64Map(personal_last_kill_frameno_, killer_id) > SERVER_FRAME_RATE * mt::InGameVoice::s_series_kill_interval) { personal_series_kills_.erase(killer_id); } + personal_last_kill_frameno_[killer_id] = room_->GetFrameNo(); IncIntMap(personal_kills_, killer_id); IncIntMap(personal_series_kills_, killer_id); if (!killer->dead) { diff --git a/server/gameserver/ingamevoice.h b/server/gameserver/ingamevoice.h index 59ffe84c..3f1c8a4a 100644 --- a/server/gameserver/ingamevoice.h +++ b/server/gameserver/ingamevoice.h @@ -34,5 +34,6 @@ private: std::map personal_kills_; std::map personal_series_kills_; std::map personal_nodead_series_kills_; + std::map personal_last_kill_frameno_; };