1
This commit is contained in:
parent
1ac680544b
commit
952c949d88
@ -91,4 +91,7 @@ void FrameData::ClearFrameData(Human* hum)
|
||||
if (!del_bullets_.empty()) {
|
||||
del_bullets_.clear();
|
||||
}
|
||||
if (!voices_.empty()) {
|
||||
voices_.clear();
|
||||
}
|
||||
}
|
||||
|
@ -11,7 +11,15 @@ struct PartObject
|
||||
EntityWeakPtr object;
|
||||
};
|
||||
|
||||
struct FightVoice
|
||||
{
|
||||
int voice_id = 0;
|
||||
int killer_id = 0;
|
||||
int dead_id = 0;
|
||||
};
|
||||
|
||||
class Human;
|
||||
struct FightVoice;
|
||||
class FrameData
|
||||
{
|
||||
private:
|
||||
@ -41,8 +49,10 @@ class FrameData
|
||||
std::vector<int> chged_cars_;
|
||||
std::vector<int> chged_props_;
|
||||
std::vector<int> del_bullets_;
|
||||
std::vector<std::shared_ptr<FightVoice>> voices_;
|
||||
|
||||
friend class Human;
|
||||
friend class FrameMaker;
|
||||
friend class FrameEvent;
|
||||
friend class InGameVoice;
|
||||
};
|
||||
|
@ -547,6 +547,11 @@ void FrameEvent::AddExitGame(CreatureWeakPtr& sender)
|
||||
}
|
||||
}
|
||||
|
||||
void FrameEvent::AddVoice(int voice_id, Human* killer, Human* dead)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void FrameEvent::Clear()
|
||||
{
|
||||
if (!room->frame_event_data->explosions_.empty()) {
|
||||
|
@ -51,6 +51,7 @@ public:
|
||||
float value, float value2, float value3, bool only_self = false);
|
||||
void AddEnterGame(CreatureWeakPtr& sender);
|
||||
void AddExitGame(CreatureWeakPtr& sender);
|
||||
void AddVoice(int voice_id, Human* killer, Human* dead);
|
||||
|
||||
void Clear();
|
||||
};
|
||||
|
@ -94,61 +94,149 @@ void InGameVoice::OnHumanBeKill(int killer_id, Human* deader)
|
||||
|
||||
void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* meta)
|
||||
{
|
||||
auto p = std::make_shared<FightVoice>();
|
||||
{
|
||||
p->voice_id = meta->sound_id();
|
||||
switch (meta->notify_fields()) {
|
||||
case 1:
|
||||
{
|
||||
p->killer_id = killer->GetUniId();
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
p->dead_id = deader->GetUniId();
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
{
|
||||
p->killer_id = killer->GetUniId();
|
||||
p->dead_id = deader->GetUniId();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
switch (meta->GetNotifyObject()) {
|
||||
case InGameVoiceNotifyObject_e::kGlobal:
|
||||
{
|
||||
|
||||
room_->TraverseHumanList
|
||||
(
|
||||
[p] (Human* hum) -> bool
|
||||
{
|
||||
hum->GetFrameData().voices_.push_back(p);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
break;
|
||||
|
||||
case InGameVoiceNotifyObject_e::kKiller:
|
||||
{
|
||||
|
||||
killer->GetFrameData().voices_.push_back(p);
|
||||
}
|
||||
break;
|
||||
case InGameVoiceNotifyObject_e::kNoKiller:
|
||||
{
|
||||
|
||||
room_->TraverseHumanList
|
||||
(
|
||||
[p, killer, deader] (Human* hum) -> bool
|
||||
{
|
||||
if (hum != killer) {
|
||||
hum->GetFrameData().voices_.push_back(p);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
break;
|
||||
case InGameVoiceNotifyObject_e::kKillerTeam:
|
||||
{
|
||||
|
||||
room_->TraverseHumanList
|
||||
(
|
||||
[p, killer, deader] (Human* hum) -> bool
|
||||
{
|
||||
if (hum->GetTeam() == killer->GetTeam()) {
|
||||
hum->GetFrameData().voices_.push_back(p);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
break;
|
||||
case InGameVoiceNotifyObject_e::kNoKillerTeam:
|
||||
{
|
||||
|
||||
room_->TraverseHumanList
|
||||
(
|
||||
[p, killer, deader] (Human* hum) -> bool
|
||||
{
|
||||
if (hum->GetTeam() != killer->GetTeam()) {
|
||||
hum->GetFrameData().voices_.push_back(p);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
break;
|
||||
|
||||
case InGameVoiceNotifyObject_e::kDead:
|
||||
{
|
||||
|
||||
deader->GetFrameData().voices_.push_back(p);
|
||||
}
|
||||
break;
|
||||
case InGameVoiceNotifyObject_e::kNoDead:
|
||||
{
|
||||
|
||||
room_->TraverseHumanList
|
||||
(
|
||||
[p, killer, deader] (Human* hum) -> bool
|
||||
{
|
||||
if (hum != deader) {
|
||||
hum->GetFrameData().voices_.push_back(p);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
break;
|
||||
case InGameVoiceNotifyObject_e::kDeadTeam:
|
||||
{
|
||||
|
||||
room_->TraverseHumanList
|
||||
(
|
||||
[p, killer, deader] (Human* hum) -> bool
|
||||
{
|
||||
if (hum->GetTeam() == deader->GetTeam()) {
|
||||
hum->GetFrameData().voices_.push_back(p);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
break;
|
||||
case InGameVoiceNotifyObject_e::kNoDeadTeam:
|
||||
{
|
||||
|
||||
room_->TraverseHumanList
|
||||
(
|
||||
[p, killer, deader] (Human* hum) -> bool
|
||||
{
|
||||
if (hum->GetTeam() != deader->GetTeam()) {
|
||||
hum->GetFrameData().voices_.push_back(p);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
break;
|
||||
case InGameVoiceNotifyObject_e::kTeammateExcludeDead:
|
||||
{
|
||||
|
||||
room_->TraverseHumanList
|
||||
(
|
||||
[p, killer, deader] (Human* hum) -> bool
|
||||
{
|
||||
if (hum->GetTeam() == deader->GetTeam() &&
|
||||
hum != deader) {
|
||||
hum->GetFrameData().voices_.push_back(p);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
{
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user