1
This commit is contained in:
parent
92af08015d
commit
626a9e79bd
@ -7,6 +7,16 @@
|
||||
|
||||
#include "mt/InGameVoice.h"
|
||||
|
||||
static void IncIntMap(std::map<int, int>& int_map, int key)
|
||||
{
|
||||
auto itr = int_map.find(key);
|
||||
if (itr == int_map.end()) {
|
||||
++itr->second;
|
||||
} else {
|
||||
int_map[key] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
InGameVoice::InGameVoice(Room* room)
|
||||
{
|
||||
room_ = room;
|
||||
@ -37,8 +47,14 @@ void InGameVoice::OnHumanBeKill(int killer_id, Human* deader)
|
||||
return;
|
||||
}
|
||||
personal_nodead_series_kills_.erase(deader->GetUniId());
|
||||
IncGlobalKills();
|
||||
IncPersonalKills(killer_id);
|
||||
++global_kills_;
|
||||
IncIntMap(personal_kills_, killer_id);
|
||||
IncIntMap(personal_nodead_series_kills_, killer_id);
|
||||
//UpdateTeamBeKillLastTime(GetTeamBeKillLastTime(deader->GetTeam()->GetTeamId()));
|
||||
IncPersonalSeriesKills(killer_id);
|
||||
if (!killer->dead) {
|
||||
IncPersonalNoDeadSeriesKills(killer_id);
|
||||
}
|
||||
{
|
||||
mt::InGameVoice::Traverse
|
||||
(
|
||||
@ -46,54 +62,12 @@ void InGameVoice::OnHumanBeKill(int killer_id, Human* deader)
|
||||
InGameVoiceEventType_e::kGlobalKills,
|
||||
[this, killer, deader] (const mt::InGameVoice* meta) -> bool
|
||||
{
|
||||
if (meta->MatchCond(global_times_)) {
|
||||
if (meta->MatchCond(global_kills_)) {
|
||||
Notify(killer, deader, meta);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
if (GetPersonalKills(killer_id) == 1) {
|
||||
room_->SendSelfInGameVoice(killer_id, 2);
|
||||
}
|
||||
if (room_->GetFrameNo() - GetTeamBeKillLastTime(deader->GetTeam()->GetTeamId()) > SERVER_FRAME_RATE) {
|
||||
room_->SendTeamInGameVoice(killer_id, 3, deader->GetTeam()->GetTeamId());
|
||||
room_->SendTeamInGameVoice(killer_id, 4, killer->GetTeam()->GetTeamId());
|
||||
}
|
||||
UpdateTeamBeKillLastTime(GetTeamBeKillLastTime(deader->GetTeam()->GetTeamId()));
|
||||
if (deader->GetTeam()->AllIsDead()) {
|
||||
if (!room_->IsMobaModeRoom()) {
|
||||
room_->SendTeamInGameVoice(killer_id, 5, deader->GetTeam()->GetTeamId());
|
||||
}
|
||||
}
|
||||
IncPersonalSeriesKills(killer_id);
|
||||
if (GetPersonalSeriesKills(killer_id) > 1) {
|
||||
room_->SendTeamInGameVoice(killer_id, GetPersonalSeriesKills(killer_id) - 1 + 6, killer->GetTeam()->GetTeamId());
|
||||
}
|
||||
if (!killer->dead) {
|
||||
IncPersonalNoDeadSeriesKills(killer_id);
|
||||
}
|
||||
}
|
||||
|
||||
void InGameVoice::IncGlobalKills()
|
||||
{
|
||||
++global_times_;
|
||||
}
|
||||
|
||||
void InGameVoice::IncPersonalKills(int obj_uniid)
|
||||
{
|
||||
auto itr = personal_kills_.find(obj_uniid);
|
||||
if (itr == personal_kills_.end()) {
|
||||
++itr->second;
|
||||
} else {
|
||||
personal_kills_[obj_uniid] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
int InGameVoice::GetPersonalKills(int obj_uniid)
|
||||
{
|
||||
auto itr = personal_kills_.find(obj_uniid);
|
||||
return itr != personal_kills_.end() ? itr->second : 0;
|
||||
}
|
||||
|
||||
void InGameVoice::UpdateTeamBeKillLastTime(int team_id)
|
||||
@ -101,12 +75,6 @@ void InGameVoice::UpdateTeamBeKillLastTime(int team_id)
|
||||
team_bekill_last_time_hash_[team_id] = room_->GetFrameNo();
|
||||
}
|
||||
|
||||
int InGameVoice::GetTeamBeKillLastTime(int team_id)
|
||||
{
|
||||
auto itr = team_bekill_last_time_hash_.find(team_id);
|
||||
return itr != team_bekill_last_time_hash_.end() ? itr->second : 0;
|
||||
}
|
||||
|
||||
void InGameVoice::IncPersonalSeriesKills(int killer_id)
|
||||
{
|
||||
auto itr = personal_series_kills_.find(killer_id);
|
||||
@ -127,12 +95,6 @@ void InGameVoice::IncPersonalSeriesKills(int killer_id)
|
||||
&room_->xtimer_attacher_);
|
||||
}
|
||||
|
||||
int InGameVoice::GetPersonalSeriesKills(int killer_id)
|
||||
{
|
||||
auto itr = personal_series_kills_.find(killer_id);
|
||||
return itr != personal_series_kills_.end() ? itr->second : 0;
|
||||
}
|
||||
|
||||
void InGameVoice::IncPersonalNoDeadSeriesKills(int killer_id)
|
||||
{
|
||||
auto itr = personal_nodead_series_kills_.find(killer_id);
|
||||
@ -153,12 +115,6 @@ void InGameVoice::IncPersonalNoDeadSeriesKills(int killer_id)
|
||||
&room_->xtimer_attacher_);
|
||||
}
|
||||
|
||||
int InGameVoice::GetPersonalNoDeadSeriesKills(int killer_id)
|
||||
{
|
||||
auto itr = personal_nodead_series_kills_.find(killer_id);
|
||||
return itr != personal_nodead_series_kills_.end() ? itr->second : 0;
|
||||
}
|
||||
|
||||
void InGameVoice::Notify(Human* killer, Human* deader, const mt::InGameVoice* meta)
|
||||
{
|
||||
|
||||
|
@ -14,22 +14,15 @@ class InGameVoice : public std::enable_shared_from_this<InGameVoice>
|
||||
void OnHumanBeKill(int killer_id, Human* deader);
|
||||
|
||||
private:
|
||||
|
||||
void IncGlobalKills();
|
||||
void IncPersonalKills(int obj_uniid);
|
||||
int GetPersonalKills(int obj_uniid);
|
||||
void UpdateTeamBeKillLastTime(int team_id);
|
||||
int GetTeamBeKillLastTime(int team_id);
|
||||
void IncPersonalSeriesKills(int killer_id);
|
||||
int GetPersonalSeriesKills(int killer_id);
|
||||
void IncPersonalNoDeadSeriesKills(int killer_id);
|
||||
int GetPersonalNoDeadSeriesKills(int killer_id);
|
||||
|
||||
void Notify(Human* killer, Human* deader, const mt::InGameVoice* meta);
|
||||
|
||||
private:
|
||||
Room* room_ = nullptr;
|
||||
int global_times_ = 0;
|
||||
int global_kills_ = 0;
|
||||
std::map<int, int> personal_kills_;
|
||||
std::map<int, int> personal_series_kills_;
|
||||
std::map<int, int> personal_nodead_series_kills_;
|
||||
|
Loading…
x
Reference in New Issue
Block a user