This commit is contained in:
aozhiwei 2021-09-01 19:19:41 +08:00
parent c900e1537b
commit 4a2a16d449
2 changed files with 50 additions and 52 deletions

View File

@ -18,56 +18,52 @@ void KillMgr::UnInit()
} }
/*
master.name
killer.name
dead.name
weapon.name
weapon.text_icon
*/
void KillMgr::OnHumanDead(Human* dead_hum, KillInfo* info) void KillMgr::OnHumanDead(Human* dead_hum, KillInfo* info)
{ {
{ std::shared_ptr<cs::SMRollMsg> pb_msg = std::make_shared<cs::SMRollMsg>();
Entity* hum = dead_hum->room->GetEntityByUniId(info->killer_id); Entity* killer = dead_hum->room->GetEntityByUniId(info->killer_id);
if (hum && hum->IsEntityType(ET_Player)) { if (killer && killer->IsEntityType(ET_Player)) {
Creature* killer = (Creature*)hum; if (info->killer_id == dead_hum->GetUniId()) {
if (info->killer_id == dead_hum->GetUniId()) { PreprocessRollMsg(pb_msg,
#if 0
SendRollMsgEx(info,
TEXT("battle_server_dead_specate", "%s 自杀").c_str(), TEXT("battle_server_dead_specate", "%s 自杀").c_str(),
{ {
killer_name info->killer_name
}); });
#endif
} else {
#if 0
SendRollMsgEx
(info,
TEXT("battle_server_dead_weapon", "%s 使用 ${weapon_text_icon} 干掉了 %s").c_str(),
{
killer_name,
name
}
);
#endif
}
} else { } else {
#if 0 PreprocessRollMsg(pb_msg,
switch (weapon_id) { TEXT("battle_server_dead_weapon", "%s 使用 ${weapon_text_icon} 干掉了 %s").c_str(),
case VW_SafeArea: {
{ info->killer_name,
SendRollMsgEx dead_hum->name
(info, });
TEXT("battle_server_dead_gas", "%s 被${weapon_text_icon}干掉").c_str(), }
{ } else {
name Entity* root_master = dead_hum->room->GetEntityByUniId(info->root_master_id);
}); if (root_master && root_master->IsEntityType(ET_Player)) {
}
break;
default:
{
}
break;
}
#endif
} }
} }
#if 0
{
#if 0
SendRollMsgEx
(info,
TEXT("battle_server_dead_gas", "%s 被${weapon_text_icon}干掉").c_str(),
{
name
});
#endif
}
#endif
} }
void KillMgr::PreprocessRollMsg(cs::SMRollMsg* pb_msg, void KillMgr::PreprocessRollMsg(std::shared_ptr<cs::SMRollMsg> pb_msg,
const char* fmt, const char* fmt,
std::initializer_list<a8::XValue> args) std::initializer_list<a8::XValue> args)
{ {
@ -150,35 +146,36 @@ void KillMgr::PreprocessRollMsg(cs::SMRollMsg* pb_msg,
void KillMgr::BoradcastRollMsg(Human* dead_hum, void KillMgr::BoradcastRollMsg(Human* dead_hum,
KillInfo* info, KillInfo* info,
int killer_team_id, int killer_team_id,
cs::SMRollMsg* pb_msg) std::shared_ptr<cs::SMRollMsg> pb_msg)
{ {
KillInfo* info_copy = new KillInfo; std::shared_ptr<cs::SMRollMsg>* pb_msg_copy = new std::shared_ptr<cs::SMRollMsg>;
*info_copy = *info; *pb_msg_copy = pb_msg;
dead_hum->room->xtimer.AddDeadLineTimerAndAttach dead_hum->room->xtimer.AddDeadLineTimerAndAttach
( (
0, 0,
a8::XParams() a8::XParams()
.SetSender(dead_hum) .SetSender(dead_hum)
.SetParam1(info_copy) .SetParam1(pb_msg_copy)
.SetParam2(pb_msg)
.SetParam3(killer_team_id), .SetParam3(killer_team_id),
[] (const a8::XParams& param) [] (const a8::XParams& param)
{ {
Human* dead_hum = (Human*)param.sender.GetUserData(); Human* dead_hum = (Human*)param.sender.GetUserData();
KillInfo* info = (KillInfo*)param.param1.GetUserData(); KillInfo* info = (KillInfo*)param.param1.GetUserData();
cs::SMRollMsg* pb_msg = (cs::SMRollMsg*)param.param2.GetUserData(); std::shared_ptr<cs::SMRollMsg>* pb_msg = (std::shared_ptr<cs::SMRollMsg>*)
param.param2.GetUserData();
int killer_team_id = param.param3; int killer_team_id = param.param3;
KillMgr::Instance()->BoradcastRollMsgCb KillMgr::Instance()->BoradcastRollMsgCb
(dead_hum, (dead_hum,
info, info,
killer_team_id, killer_team_id,
pb_msg); *pb_msg);
}, },
&dead_hum->xtimer_attacher.timer_list_, &dead_hum->xtimer_attacher.timer_list_,
[] (const a8::XParams& param) [] (const a8::XParams& param)
{ {
KillInfo* info = (KillInfo*)param.param1.GetUserData(); KillInfo* info = (KillInfo*)param.param1.GetUserData();
cs::SMRollMsg* pb_msg = (cs::SMRollMsg*)param.param2.GetUserData(); std::shared_ptr<cs::SMRollMsg>* pb_msg = (std::shared_ptr<cs::SMRollMsg>*)
param.param2.GetUserData();
delete pb_msg; delete pb_msg;
delete info; delete info;
} }
@ -188,7 +185,7 @@ void KillMgr::BoradcastRollMsg(Human* dead_hum,
void KillMgr::BoradcastRollMsgCb(Human* dead_hum, void KillMgr::BoradcastRollMsgCb(Human* dead_hum,
KillInfo* info, KillInfo* info,
int killer_team_id, int killer_team_id,
cs::SMRollMsg* pb_msg) std::shared_ptr<cs::SMRollMsg> pb_msg)
{ {
dead_hum->room->TraversePlayerList dead_hum->room->TraversePlayerList
(a8::XParams(), (a8::XParams(),

View File

@ -7,6 +7,7 @@ namespace cs
struct KillInfo struct KillInfo
{ {
int root_master_id = 0;
int killer_id = 0; int killer_id = 0;
std::string killer_name; std::string killer_name;
int weapon_id = 0; int weapon_id = 0;
@ -27,15 +28,15 @@ class KillMgr : public a8::Singleton<KillMgr>
void OnHumanDead(Human* dead_hum, KillInfo* info); void OnHumanDead(Human* dead_hum, KillInfo* info);
private: private:
void PreprocessRollMsg(cs::SMRollMsg* pb_msg, void PreprocessRollMsg(std::shared_ptr<cs::SMRollMsg> pb_msg,
const char* fmt, const char* fmt,
std::initializer_list<a8::XValue> args); std::initializer_list<a8::XValue> args);
void BoradcastRollMsg(Human* dead_hum, void BoradcastRollMsg(Human* dead_hum,
KillInfo* info, KillInfo* info,
int killer_team_id, int killer_team_id,
cs::SMRollMsg* pb_msg); std::shared_ptr<cs::SMRollMsg> pb_msg);
void BoradcastRollMsgCb(Human* dead_hum, void BoradcastRollMsgCb(Human* dead_hum,
KillInfo* info, KillInfo* info,
int killer_team_id, int killer_team_id,
cs::SMRollMsg* pb_msg); std::shared_ptr<cs::SMRollMsg> pb_msg);
}; };