This commit is contained in:
aozhiwei 2024-03-29 19:47:14 +08:00
parent 92af08015d
commit 626a9e79bd
2 changed files with 20 additions and 71 deletions

View File

@ -7,6 +7,16 @@
#include "mt/InGameVoice.h" #include "mt/InGameVoice.h"
static void IncIntMap(std::map<int, int>& int_map, int key)
{
auto itr = int_map.find(key);
if (itr == int_map.end()) {
++itr->second;
} else {
int_map[key] = 1;
}
}
InGameVoice::InGameVoice(Room* room) InGameVoice::InGameVoice(Room* room)
{ {
room_ = room; room_ = room;
@ -37,8 +47,14 @@ void InGameVoice::OnHumanBeKill(int killer_id, Human* deader)
return; return;
} }
personal_nodead_series_kills_.erase(deader->GetUniId()); personal_nodead_series_kills_.erase(deader->GetUniId());
IncGlobalKills(); ++global_kills_;
IncPersonalKills(killer_id); IncIntMap(personal_kills_, killer_id);
IncIntMap(personal_nodead_series_kills_, killer_id);
//UpdateTeamBeKillLastTime(GetTeamBeKillLastTime(deader->GetTeam()->GetTeamId()));
IncPersonalSeriesKills(killer_id);
if (!killer->dead) {
IncPersonalNoDeadSeriesKills(killer_id);
}
{ {
mt::InGameVoice::Traverse mt::InGameVoice::Traverse
( (
@ -46,54 +62,12 @@ void InGameVoice::OnHumanBeKill(int killer_id, Human* deader)
InGameVoiceEventType_e::kGlobalKills, InGameVoiceEventType_e::kGlobalKills,
[this, killer, deader] (const mt::InGameVoice* meta) -> bool [this, killer, deader] (const mt::InGameVoice* meta) -> bool
{ {
if (meta->MatchCond(global_times_)) { if (meta->MatchCond(global_kills_)) {
Notify(killer, deader, meta); Notify(killer, deader, meta);
} }
return true; return true;
}); });
} }
if (GetPersonalKills(killer_id) == 1) {
room_->SendSelfInGameVoice(killer_id, 2);
}
if (room_->GetFrameNo() - GetTeamBeKillLastTime(deader->GetTeam()->GetTeamId()) > SERVER_FRAME_RATE) {
room_->SendTeamInGameVoice(killer_id, 3, deader->GetTeam()->GetTeamId());
room_->SendTeamInGameVoice(killer_id, 4, killer->GetTeam()->GetTeamId());
}
UpdateTeamBeKillLastTime(GetTeamBeKillLastTime(deader->GetTeam()->GetTeamId()));
if (deader->GetTeam()->AllIsDead()) {
if (!room_->IsMobaModeRoom()) {
room_->SendTeamInGameVoice(killer_id, 5, deader->GetTeam()->GetTeamId());
}
}
IncPersonalSeriesKills(killer_id);
if (GetPersonalSeriesKills(killer_id) > 1) {
room_->SendTeamInGameVoice(killer_id, GetPersonalSeriesKills(killer_id) - 1 + 6, killer->GetTeam()->GetTeamId());
}
if (!killer->dead) {
IncPersonalNoDeadSeriesKills(killer_id);
}
}
void InGameVoice::IncGlobalKills()
{
++global_times_;
}
void InGameVoice::IncPersonalKills(int obj_uniid)
{
auto itr = personal_kills_.find(obj_uniid);
if (itr == personal_kills_.end()) {
++itr->second;
} else {
personal_kills_[obj_uniid] = 1;
}
}
int InGameVoice::GetPersonalKills(int obj_uniid)
{
auto itr = personal_kills_.find(obj_uniid);
return itr != personal_kills_.end() ? itr->second : 0;
} }
void InGameVoice::UpdateTeamBeKillLastTime(int team_id) void InGameVoice::UpdateTeamBeKillLastTime(int team_id)
@ -101,12 +75,6 @@ void InGameVoice::UpdateTeamBeKillLastTime(int team_id)
team_bekill_last_time_hash_[team_id] = room_->GetFrameNo(); team_bekill_last_time_hash_[team_id] = room_->GetFrameNo();
} }
int InGameVoice::GetTeamBeKillLastTime(int team_id)
{
auto itr = team_bekill_last_time_hash_.find(team_id);
return itr != team_bekill_last_time_hash_.end() ? itr->second : 0;
}
void InGameVoice::IncPersonalSeriesKills(int killer_id) void InGameVoice::IncPersonalSeriesKills(int killer_id)
{ {
auto itr = personal_series_kills_.find(killer_id); auto itr = personal_series_kills_.find(killer_id);
@ -127,12 +95,6 @@ void InGameVoice::IncPersonalSeriesKills(int killer_id)
&room_->xtimer_attacher_); &room_->xtimer_attacher_);
} }
int InGameVoice::GetPersonalSeriesKills(int killer_id)
{
auto itr = personal_series_kills_.find(killer_id);
return itr != personal_series_kills_.end() ? itr->second : 0;
}
void InGameVoice::IncPersonalNoDeadSeriesKills(int killer_id) void InGameVoice::IncPersonalNoDeadSeriesKills(int killer_id)
{ {
auto itr = personal_nodead_series_kills_.find(killer_id); auto itr = personal_nodead_series_kills_.find(killer_id);
@ -153,12 +115,6 @@ void InGameVoice::IncPersonalNoDeadSeriesKills(int killer_id)
&room_->xtimer_attacher_); &room_->xtimer_attacher_);
} }
int InGameVoice::GetPersonalNoDeadSeriesKills(int killer_id)
{
auto itr = personal_nodead_series_kills_.find(killer_id);
return itr != personal_nodead_series_kills_.end() ? itr->second : 0;
}
void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* meta) void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* meta)
{ {

View File

@ -14,22 +14,15 @@ class InGameVoice : public std::enable_shared_from_this<InGameVoice>
void OnHumanBeKill(int killer_id, Human* deader); void OnHumanBeKill(int killer_id, Human* deader);
private: private:
void IncGlobalKills();
void IncPersonalKills(int obj_uniid);
int GetPersonalKills(int obj_uniid);
void UpdateTeamBeKillLastTime(int team_id); void UpdateTeamBeKillLastTime(int team_id);
int GetTeamBeKillLastTime(int team_id);
void IncPersonalSeriesKills(int killer_id); void IncPersonalSeriesKills(int killer_id);
int GetPersonalSeriesKills(int killer_id);
void IncPersonalNoDeadSeriesKills(int killer_id); void IncPersonalNoDeadSeriesKills(int killer_id);
int GetPersonalNoDeadSeriesKills(int killer_id);
void Notify(Human* killer, Human* deader, const mt::InGameVoice* meta); void Notify(Human* killer, Human* deader, const mt::InGameVoice* meta);
private: private:
Room* room_ = nullptr; Room* room_ = nullptr;
int global_times_ = 0; int global_kills_ = 0;
std::map<int, int> personal_kills_; std::map<int, int> personal_kills_;
std::map<int, int> personal_series_kills_; std::map<int, int> personal_series_kills_;
std::map<int, int> personal_nodead_series_kills_; std::map<int, int> personal_nodead_series_kills_;