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
(
[p] (Human* hum) -> bool
[p, &filter_cb] (Human* hum) -> bool
{
if (filter_cb(hum)) {
hum->GetFrameData().voices_.push_back(p);
}
return true;
});
}
@ -180,18 +182,22 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me
case InGameVoiceNotifyObject_e::kKiller:
{
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 (filter_cb(hum)) {
if (hum != killer) {
hum->GetFrameData().voices_.push_back(p);
}
}
return true;
});
}
@ -200,11 +206,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 (filter_cb(hum)) {
if (hum->GetTeam() == killer->GetTeam()) {
hum->GetFrameData().voices_.push_back(p);
}
}
return true;
});
}
@ -213,11 +221,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 (filter_cb(hum)) {
if (hum->GetTeam() != killer->GetTeam()) {
hum->GetFrameData().voices_.push_back(p);
}
}
return true;
});
}
@ -225,18 +235,22 @@ void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* me
case InGameVoiceNotifyObject_e::kDead:
{
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 (filter_cb(hum)) {
if (hum != deader) {
hum->GetFrameData().voices_.push_back(p);
}
}
return true;
});
}
@ -245,11 +259,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 (filter_cb(hum)) {
if (hum->GetTeam() == deader->GetTeam()) {
hum->GetFrameData().voices_.push_back(p);
}
}
return true;
});
}
@ -258,11 +274,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 (filter_cb(hum)) {
if (hum->GetTeam() != deader->GetTeam()) {
hum->GetFrameData().voices_.push_back(p);
}
}
return true;
});
}
@ -271,12 +289,14 @@ 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 (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;
}
std::map<int, long long> killer_flags;
filter_cb =
[&killer_flags] (Human* hum) -> bool
{
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;
if (killer_flags.find(hum->GetUniId()) != killer_flags.end()) {
return false;
}
return true;
});
}
}
if (sent) {
return;
}
std::map<int, long long> killer_flags;
};
{
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;