This commit is contained in:
aozhiwei 2024-04-01 16:54:26 +08:00
parent 4cf121426d
commit 6b761b68fc

View File

@ -170,9 +170,11 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me
{ {
room_->TraverseHumanList room_->TraverseHumanList
( (
[p] (Human* hum) -> bool [p, &filter_cb] (Human* hum) -> bool
{ {
if (filter_cb(hum)) {
hum->GetFrameData().voices_.push_back(p); hum->GetFrameData().voices_.push_back(p);
}
return true; return true;
}); });
} }
@ -180,18 +182,22 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me
case InGameVoiceNotifyObject_e::kKiller: case InGameVoiceNotifyObject_e::kKiller:
{ {
if (filter_cb(killer)) {
killer->GetFrameData().voices_.push_back(p); killer->GetFrameData().voices_.push_back(p);
} }
}
break; break;
case InGameVoiceNotifyObject_e::kNoKiller: case InGameVoiceNotifyObject_e::kNoKiller:
{ {
room_->TraverseHumanList room_->TraverseHumanList
( (
[p, killer, deader] (Human* hum) -> bool [p, killer, deader, &filter_cb] (Human* hum) -> bool
{ {
if (filter_cb(hum)) {
if (hum != killer) { if (hum != killer) {
hum->GetFrameData().voices_.push_back(p); hum->GetFrameData().voices_.push_back(p);
} }
}
return true; return true;
}); });
} }
@ -200,11 +206,13 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me
{ {
room_->TraverseHumanList room_->TraverseHumanList
( (
[p, killer, deader] (Human* hum) -> bool [p, killer, deader, &filter_cb] (Human* hum) -> bool
{ {
if (filter_cb(hum)) {
if (hum->GetTeam() == killer->GetTeam()) { if (hum->GetTeam() == killer->GetTeam()) {
hum->GetFrameData().voices_.push_back(p); hum->GetFrameData().voices_.push_back(p);
} }
}
return true; return true;
}); });
} }
@ -213,11 +221,13 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me
{ {
room_->TraverseHumanList room_->TraverseHumanList
( (
[p, killer, deader] (Human* hum) -> bool [p, killer, deader, &filter_cb] (Human* hum) -> bool
{ {
if (filter_cb(hum)) {
if (hum->GetTeam() != killer->GetTeam()) { if (hum->GetTeam() != killer->GetTeam()) {
hum->GetFrameData().voices_.push_back(p); hum->GetFrameData().voices_.push_back(p);
} }
}
return true; return true;
}); });
} }
@ -225,18 +235,22 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me
case InGameVoiceNotifyObject_e::kDead: case InGameVoiceNotifyObject_e::kDead:
{ {
if (filter_cb(deader)) {
deader->GetFrameData().voices_.push_back(p); deader->GetFrameData().voices_.push_back(p);
} }
}
break; break;
case InGameVoiceNotifyObject_e::kNoDead: case InGameVoiceNotifyObject_e::kNoDead:
{ {
room_->TraverseHumanList room_->TraverseHumanList
( (
[p, killer, deader] (Human* hum) -> bool [p, killer, deader, &filter_cb] (Human* hum) -> bool
{ {
if (filter_cb(hum)) {
if (hum != deader) { if (hum != deader) {
hum->GetFrameData().voices_.push_back(p); hum->GetFrameData().voices_.push_back(p);
} }
}
return true; return true;
}); });
} }
@ -245,11 +259,13 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me
{ {
room_->TraverseHumanList room_->TraverseHumanList
( (
[p, killer, deader] (Human* hum) -> bool [p, killer, deader, &filter_cb] (Human* hum) -> bool
{ {
if (filter_cb(hum)) {
if (hum->GetTeam() == deader->GetTeam()) { if (hum->GetTeam() == deader->GetTeam()) {
hum->GetFrameData().voices_.push_back(p); hum->GetFrameData().voices_.push_back(p);
} }
}
return true; return true;
}); });
} }
@ -258,11 +274,13 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me
{ {
room_->TraverseHumanList room_->TraverseHumanList
( (
[p, killer, deader] (Human* hum) -> bool [p, killer, deader, &filter_cb] (Human* hum) -> bool
{ {
if (filter_cb(hum)) {
if (hum->GetTeam() != deader->GetTeam()) { if (hum->GetTeam() != deader->GetTeam()) {
hum->GetFrameData().voices_.push_back(p); hum->GetFrameData().voices_.push_back(p);
} }
}
return true; return true;
}); });
} }
@ -271,12 +289,14 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me
{ {
room_->TraverseHumanList room_->TraverseHumanList
( (
[p, killer, deader] (Human* hum) -> bool [p, killer, deader, &filter_cb] (Human* hum) -> bool
{ {
if (filter_cb(hum)) {
if (hum->GetTeam() == deader->GetTeam() && if (hum->GetTeam() == deader->GetTeam() &&
hum != deader) { hum != deader) {
hum->GetFrameData().voices_.push_back(p); hum->GetFrameData().voices_.push_back(p);
} }
}
return true; return true;
}); });
} }
@ -330,42 +350,54 @@ void InGameVoice::TriggerEvent(Human* killer, Human* deader)
if (is_first_boold) { if (is_first_boold) {
return; return;
} }
std::map<int, long long> killer_flags;
filter_cb =
[&killer_flags] (Human* hum) -> bool
{ {
if (!is_first_boold) { if (killer_flags.find(hum->GetUniId()) != killer_flags.end()) {
int val = GetIntMap(personal_nodead_series_kills_, killer->GetUniId()); return false;
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; return true;
}); };
}
}
if (sent) {
return;
}
std::map<int, long long> killer_flags;
{ {
bool sent1 = false;
{ {
int val = GetIntMap(personal_series_kills_, killer->GetUniId()); int val = GetIntMap(personal_series_kills_, killer->GetUniId());
mt::InGameVoice::Traverse mt::InGameVoice::Traverse
( (
room_->IsMobaModeRoom(), room_->IsMobaModeRoom(),
InGameVoiceEventType_e::kSeriesKills, 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)) { if (meta->MatchCond(val)) {
Notify(killer, deader, meta, filter_cb); Notify(killer, deader, meta, filter_cb);
killer_flags[killer->GetUniId()] = 1;
sent1 = true;
} }
return 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(), room_->IsMobaModeRoom(),
InGameVoiceEventType_e::kPersonalExceptFirstBooldKills, 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)) { if (meta->MatchCond(val)) {
Notify(killer, deader, meta, filter_cb); Notify(killer, deader, meta, filter_cb);
killer_flags[killer->GetUniId()] = 1;
} }
return true; return true;
}); });
@ -389,7 +423,8 @@ void InGameVoice::TriggerEvent(Human* killer, Human* deader)
( (
room_->IsMobaModeRoom(), room_->IsMobaModeRoom(),
InGameVoiceEventType_e::kTeamAllDead, 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); Notify(killer, deader, meta, filter_cb);
return true; return true;
@ -399,7 +434,8 @@ void InGameVoice::TriggerEvent(Human* killer, Human* deader)
( (
room_->IsMobaModeRoom(), room_->IsMobaModeRoom(),
InGameVoiceEventType_e::kHeroBeKill, 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); Notify(killer, deader, meta, filter_cb);
return true; return true;