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
{
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<int, long long> 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;