From b5f72b9c2965480849ab17f2780a95ebb4510481 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 2 Apr 2021 11:54:15 +0800 Subject: [PATCH] 1 --- server/gameserver/human.cc | 47 ++++++++++++++++++++++-------------- server/gameserver/human.h | 2 +- server/gameserver/metamgr.cc | 4 +++ server/gameserver/metamgr.h | 6 +++++ 4 files changed, 40 insertions(+), 19 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 4f6eecb..ebd2ba5 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -734,16 +734,16 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id) room->CheckPartObjects(); #endif if (!dead && !room->IsGameOver() && !real_dead) { - cs::SMRollMsg roll_msg; lethal_weapon = weapon_id; Entity* hum = room->GetEntityByUniId(killer_id); if (hum && hum->IsEntityType(ET_Player)) { + Creature* killer = (Creature*)hum; if (killer_id == GetEntityUniId()) { std::string msg = a8::Format(TEXT("battle_server_dead_specate", "%s 自杀").c_str(), { killer_name, }); - SendRollMsg(roll_msg); + SendRollMsg(msg, killer->GetEntityUniId(), killer->team_id); } else { ((Human*)hum)->stats.kills++; ((Human*)hum)->stats.last_kill_frameno = room->GetFrameNo(); @@ -755,7 +755,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id) killer_name, name }); - SendRollMsg(roll_msg); + SendRollMsg(msg, killer->GetEntityUniId(), killer->team_id); } else { MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(weapon_id); if (equip_meta) { @@ -765,7 +765,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id) equip_meta->i->name(), name }); - SendRollMsg(roll_msg); + SendRollMsg(msg, killer->GetEntityUniId(), killer->team_id); } } } @@ -777,7 +777,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id) { name }); - SendRollMsg(roll_msg); + SendRollMsg(msg, 0, 0); } break; case VW_Spectate: @@ -786,7 +786,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id) { name }); - SendRollMsg(roll_msg); + SendRollMsg(msg, 0, 0); } break; case VW_SelfDetonate: @@ -795,7 +795,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id) { name }); - SendRollMsg(roll_msg); + SendRollMsg(msg, 0, 0); } break; case VW_Mine: @@ -804,7 +804,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id) { name }); - SendRollMsg(roll_msg); + SendRollMsg(msg, 0, 0); } break; } @@ -1503,35 +1503,46 @@ void Human::SendDebugMsg(const std::string& debug_msg) SendNotifyMsg(notify_msg); } -void Human::SendRollMsg(const cs::SMRollMsg& msg) +void Human::SendRollMsg(const std::string& msg, int killer_id, bool killer_team_id) { - cs::SMRollMsg* msg_copy = new cs::SMRollMsg; - *msg_copy = msg; room->xtimer.AddDeadLineTimerAndAttach ( 0, a8::XParams() .SetSender(this) - .SetParam1(msg_copy), + .SetParam1(killer_id) + .SetParam2(killer_team_id) + .SetParam3(msg), [] (const a8::XParams& param) { Human* target = (Human*)param.sender.GetUserData(); - cs::SMRollMsg* msg = (cs::SMRollMsg*)param.param1.GetUserData(); + int killer_id = param.param1; + int killer_team_id = param.param2; + std::string text = param.param3.GetString(); target->room->TouchPlayerList (a8::XParams(), - [target, msg] (Human* hum, a8::XParams& param) -> bool + [target, killer_id, killer_team_id, text] (Human* hum, a8::XParams& param) -> bool { - if (target != hum) { - hum->SendNotifyMsg(*msg); + cs::SMRollMsg msg; + auto element = msg.add_elements(); + element->set_element_type(1); + element->mutable_union_obj_1()->set_text(text); + if (killer_id == hum->GetEntityUniId()){ + element->mutable_union_obj_1()->set_color(MetaMgr::Instance()->self_kill_color); + } else if (killer_team_id == hum->team_id) { + element->mutable_union_obj_1()->set_color(MetaMgr::Instance()->teammate_kill_color); + } else if (target == hum) { + element->mutable_union_obj_1()->set_color(MetaMgr::Instance()->self_bekill_color); + } else if (target->team_id == hum->team_id) { + element->mutable_union_obj_1()->set_color(MetaMgr::Instance()->teammate_bekill_color); } + hum->SendNotifyMsg(msg); return true; }); }, &xtimer_attacher.timer_list_, [] (const a8::XParams& param) { - cs::SMRollMsg* msg = (cs::SMRollMsg*)param.param1.GetUserData(); - delete msg; } ); } diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 0364645..6b6c758 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -199,7 +199,7 @@ class Human : public Creature void SendGameOver(); void FollowTarget(Human* target); virtual void SendDebugMsg(const std::string& debug_msg) override; - void SendRollMsg(const cs::SMRollMsg& msg); + void SendRollMsg(const std::string& msg, int killer_id, bool killer_team_id); void UpdateAction(); void SendUIUpdate(); void SendWxVoip(); diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 640b1ef..4816e07 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -233,6 +233,10 @@ public: METAMGR_READ(level0room_robot_autodie_time, 10); METAMGR_READ(level0room_robot_autodie_distance, 500); METAMGR_READ(water_move_coefficient, 0.75); + METAMGR_READ(teammate_kill_color, 0xFFFF00); + METAMGR_READ(teammate_bekill_color, 0x00FF00); + METAMGR_READ(self_kill_color, 0xFFFF00); + METAMGR_READ(self_bekill_color, 0x00FF00); { METAMGR_READ_STR(level0room_spec_things, ""); std::vector tmpstrings; diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index 6496744..ecef472 100755 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -146,6 +146,12 @@ class MetaMgr : public a8::Singleton int refresh_robot_max_time = 0; #endif + int teammate_kill_color = 0xFFFF00; + int teammate_bekill_color = 0xFF0000; + + int self_kill_color = 0xFFFF00; + int self_bekill_color = 0xFF0000; + int other_fill_interval = 0; float android_attack_range = 0; float android_pursuit_range = 0;