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