From 6b761b68fc2dcce502e22d0443ff30541bc66116 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 1 Apr 2024 16:54:26 +0800 Subject: [PATCH] 1 --- server/gameserver/ingamevoice.cc | 136 +++++++++++++++++++------------ 1 file changed, 86 insertions(+), 50 deletions(-) diff --git a/server/gameserver/ingamevoice.cc b/server/gameserver/ingamevoice.cc index c55a72a1..f4043c44 100644 --- a/server/gameserver/ingamevoice.cc +++ b/server/gameserver/ingamevoice.cc @@ -170,9 +170,11 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me { room_->TraverseHumanList ( - [p] (Human* hum) -> bool + [p, &filter_cb] (Human* hum) -> bool { - hum->GetFrameData().voices_.push_back(p); + if (filter_cb(hum)) { + hum->GetFrameData().voices_.push_back(p); + } return true; }); } @@ -180,17 +182,21 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me case InGameVoiceNotifyObject_e::kKiller: { - killer->GetFrameData().voices_.push_back(p); + if (filter_cb(killer)) { + killer->GetFrameData().voices_.push_back(p); + } } break; case InGameVoiceNotifyObject_e::kNoKiller: { room_->TraverseHumanList ( - [p, killer, deader] (Human* hum) -> bool + [p, killer, deader, &filter_cb] (Human* hum) -> bool { - if (hum != killer) { - hum->GetFrameData().voices_.push_back(p); + if (filter_cb(hum)) { + if (hum != killer) { + hum->GetFrameData().voices_.push_back(p); + } } return true; }); @@ -200,10 +206,12 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me { room_->TraverseHumanList ( - [p, killer, deader] (Human* hum) -> bool + [p, killer, deader, &filter_cb] (Human* hum) -> bool { - if (hum->GetTeam() == killer->GetTeam()) { - hum->GetFrameData().voices_.push_back(p); + if (filter_cb(hum)) { + if (hum->GetTeam() == killer->GetTeam()) { + hum->GetFrameData().voices_.push_back(p); + } } return true; }); @@ -213,10 +221,12 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me { room_->TraverseHumanList ( - [p, killer, deader] (Human* hum) -> bool + [p, killer, deader, &filter_cb] (Human* hum) -> bool { - if (hum->GetTeam() != killer->GetTeam()) { - hum->GetFrameData().voices_.push_back(p); + if (filter_cb(hum)) { + if (hum->GetTeam() != killer->GetTeam()) { + hum->GetFrameData().voices_.push_back(p); + } } return true; }); @@ -225,17 +235,21 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me case InGameVoiceNotifyObject_e::kDead: { - deader->GetFrameData().voices_.push_back(p); + if (filter_cb(deader)) { + deader->GetFrameData().voices_.push_back(p); + } } break; case InGameVoiceNotifyObject_e::kNoDead: { room_->TraverseHumanList ( - [p, killer, deader] (Human* hum) -> bool + [p, killer, deader, &filter_cb] (Human* hum) -> bool { - if (hum != deader) { - hum->GetFrameData().voices_.push_back(p); + if (filter_cb(hum)) { + if (hum != deader) { + hum->GetFrameData().voices_.push_back(p); + } } return true; }); @@ -245,10 +259,12 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me { room_->TraverseHumanList ( - [p, killer, deader] (Human* hum) -> bool + [p, killer, deader, &filter_cb] (Human* hum) -> bool { - if (hum->GetTeam() == deader->GetTeam()) { - hum->GetFrameData().voices_.push_back(p); + if (filter_cb(hum)) { + if (hum->GetTeam() == deader->GetTeam()) { + hum->GetFrameData().voices_.push_back(p); + } } return true; }); @@ -258,10 +274,12 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me { room_->TraverseHumanList ( - [p, killer, deader] (Human* hum) -> bool + [p, killer, deader, &filter_cb] (Human* hum) -> bool { - if (hum->GetTeam() != deader->GetTeam()) { - hum->GetFrameData().voices_.push_back(p); + if (filter_cb(hum)) { + if (hum->GetTeam() != deader->GetTeam()) { + hum->GetFrameData().voices_.push_back(p); + } } return true; }); @@ -271,11 +289,13 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me { room_->TraverseHumanList ( - [p, killer, deader] (Human* hum) -> bool + [p, killer, deader, &filter_cb] (Human* hum) -> bool { - if (hum->GetTeam() == deader->GetTeam() && - hum != deader) { - hum->GetFrameData().voices_.push_back(p); + if (filter_cb(hum)) { + if (hum->GetTeam() == deader->GetTeam() && + hum != deader) { + hum->GetFrameData().voices_.push_back(p); + } } return true; }); @@ -330,42 +350,54 @@ void InGameVoice::TriggerEvent(Human* killer, Human* deader) if (is_first_boold) { return; } - { - if (!is_first_boold) { - int val = GetIntMap(personal_nodead_series_kills_, killer->GetUniId()); - mt::InGameVoice::Traverse - ( - room_->IsMobaModeRoom(), - InGameVoiceEventType_e::kNoDeadSeriesKills, - [this, killer, deader, val, &sent, &filter_cb] (const mt::InGameVoice* meta) -> bool - { - if (meta->MatchCond(val)) { - Notify(killer, deader, meta, filter_cb); - sent = true; - } - return true; - }); - } - } - if (sent) { - return; - } std::map killer_flags; + filter_cb = + [&killer_flags] (Human* hum) -> bool + { + if (killer_flags.find(hum->GetUniId()) != killer_flags.end()) { + return false; + } + return true; + }; { + bool sent1 = false; { int val = GetIntMap(personal_series_kills_, killer->GetUniId()); mt::InGameVoice::Traverse ( room_->IsMobaModeRoom(), InGameVoiceEventType_e::kSeriesKills, - [this, killer, deader, val, &sent, &filter_cb] (const mt::InGameVoice* meta) -> bool + [this, killer, deader, val, &sent1, &filter_cb, &killer_flags] + (const mt::InGameVoice* meta) -> bool { if (meta->MatchCond(val)) { Notify(killer, deader, meta, filter_cb); + killer_flags[killer->GetUniId()] = 1; + sent1 = true; } return true; }); } + if (!sent1) { + int val = GetIntMap(personal_nodead_series_kills_, killer->GetUniId()); + mt::InGameVoice::Traverse + ( + room_->IsMobaModeRoom(), + InGameVoiceEventType_e::kNoDeadSeriesKills, + [this, killer, deader, val, &sent, &filter_cb, &killer_flags] + (const mt::InGameVoice* meta) -> bool + { + if (meta->MatchCond(val)) { + Notify(killer, deader, meta, filter_cb); + killer_flags[killer->GetUniId()] = 1; + sent = true; + } + return true; + }); + if (sent) { + return; + } + } } { { @@ -374,10 +406,12 @@ void InGameVoice::TriggerEvent(Human* killer, Human* deader) ( room_->IsMobaModeRoom(), InGameVoiceEventType_e::kPersonalExceptFirstBooldKills, - [this, killer, deader, val, &filter_cb] (const mt::InGameVoice* meta) -> bool + [this, killer, deader, val, &filter_cb, &killer_flags] + (const mt::InGameVoice* meta) -> bool { if (meta->MatchCond(val)) { Notify(killer, deader, meta, filter_cb); + killer_flags[killer->GetUniId()] = 1; } return true; }); @@ -389,7 +423,8 @@ void InGameVoice::TriggerEvent(Human* killer, Human* deader) ( room_->IsMobaModeRoom(), InGameVoiceEventType_e::kTeamAllDead, - [this, killer, deader, &filter_cb] (const mt::InGameVoice* meta) -> bool + [this, killer, deader, &filter_cb, &killer_flags] + (const mt::InGameVoice* meta) -> bool { Notify(killer, deader, meta, filter_cb); return true; @@ -399,7 +434,8 @@ void InGameVoice::TriggerEvent(Human* killer, Human* deader) ( room_->IsMobaModeRoom(), InGameVoiceEventType_e::kHeroBeKill, - [this, killer, deader, &filter_cb] (const mt::InGameVoice* meta) -> bool + [this, killer, deader, &filter_cb, &killer_flags] + (const mt::InGameVoice* meta) -> bool { Notify(killer, deader, meta, filter_cb); return true;