This commit is contained in:
aozhiwei 2021-04-02 11:54:15 +08:00
parent 5f99ee1aa4
commit b5f72b9c29
4 changed files with 40 additions and 19 deletions

View File

@ -734,16 +734,16 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id)
room->CheckPartObjects(); room->CheckPartObjects();
#endif #endif
if (!dead && !room->IsGameOver() && !real_dead) { if (!dead && !room->IsGameOver() && !real_dead) {
cs::SMRollMsg roll_msg;
lethal_weapon = weapon_id; lethal_weapon = weapon_id;
Entity* hum = room->GetEntityByUniId(killer_id); Entity* hum = room->GetEntityByUniId(killer_id);
if (hum && hum->IsEntityType(ET_Player)) { if (hum && hum->IsEntityType(ET_Player)) {
Creature* killer = (Creature*)hum;
if (killer_id == GetEntityUniId()) { if (killer_id == GetEntityUniId()) {
std::string msg = a8::Format(TEXT("battle_server_dead_specate", "%s 自杀").c_str(), std::string msg = a8::Format(TEXT("battle_server_dead_specate", "%s 自杀").c_str(),
{ {
killer_name, killer_name,
}); });
SendRollMsg(roll_msg); SendRollMsg(msg, killer->GetEntityUniId(), killer->team_id);
} else { } else {
((Human*)hum)->stats.kills++; ((Human*)hum)->stats.kills++;
((Human*)hum)->stats.last_kill_frameno = room->GetFrameNo(); ((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, killer_name,
name name
}); });
SendRollMsg(roll_msg); SendRollMsg(msg, killer->GetEntityUniId(), killer->team_id);
} else { } else {
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(weapon_id); MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(weapon_id);
if (equip_meta) { 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(), equip_meta->i->name(),
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 name
}); });
SendRollMsg(roll_msg); SendRollMsg(msg, 0, 0);
} }
break; break;
case VW_Spectate: case VW_Spectate:
@ -786,7 +786,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id)
{ {
name name
}); });
SendRollMsg(roll_msg); SendRollMsg(msg, 0, 0);
} }
break; break;
case VW_SelfDetonate: case VW_SelfDetonate:
@ -795,7 +795,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id)
{ {
name name
}); });
SendRollMsg(roll_msg); SendRollMsg(msg, 0, 0);
} }
break; break;
case VW_Mine: case VW_Mine:
@ -804,7 +804,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id)
{ {
name name
}); });
SendRollMsg(roll_msg); SendRollMsg(msg, 0, 0);
} }
break; break;
} }
@ -1503,35 +1503,46 @@ void Human::SendDebugMsg(const std::string& debug_msg)
SendNotifyMsg(notify_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 room->xtimer.AddDeadLineTimerAndAttach
( (
0, 0,
a8::XParams() a8::XParams()
.SetSender(this) .SetSender(this)
.SetParam1(msg_copy), .SetParam1(killer_id)
.SetParam2(killer_team_id)
.SetParam3(msg),
[] (const a8::XParams& param) [] (const a8::XParams& param)
{ {
Human* target = (Human*)param.sender.GetUserData(); 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 target->room->TouchPlayerList
(a8::XParams(), (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) { cs::SMRollMsg msg;
hum->SendNotifyMsg(*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; return true;
}); });
}, },
&xtimer_attacher.timer_list_, &xtimer_attacher.timer_list_,
[] (const a8::XParams& param) [] (const a8::XParams& param)
{ {
cs::SMRollMsg* msg = (cs::SMRollMsg*)param.param1.GetUserData();
delete msg;
} }
); );
} }

View File

@ -199,7 +199,7 @@ class Human : public Creature
void SendGameOver(); void SendGameOver();
void FollowTarget(Human* target); void FollowTarget(Human* target);
virtual void SendDebugMsg(const std::string& debug_msg) override; 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 UpdateAction();
void SendUIUpdate(); void SendUIUpdate();
void SendWxVoip(); void SendWxVoip();

View File

@ -233,6 +233,10 @@ public:
METAMGR_READ(level0room_robot_autodie_time, 10); METAMGR_READ(level0room_robot_autodie_time, 10);
METAMGR_READ(level0room_robot_autodie_distance, 500); METAMGR_READ(level0room_robot_autodie_distance, 500);
METAMGR_READ(water_move_coefficient, 0.75); 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, ""); METAMGR_READ_STR(level0room_spec_things, "");
std::vector<std::string> tmpstrings; std::vector<std::string> tmpstrings;

View File

@ -146,6 +146,12 @@ class MetaMgr : public a8::Singleton<MetaMgr>
int refresh_robot_max_time = 0; int refresh_robot_max_time = 0;
#endif #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; int other_fill_interval = 0;
float android_attack_range = 0; float android_attack_range = 0;
float android_pursuit_range = 0; float android_pursuit_range = 0;