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();
#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;
}
);
}

View File

@ -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();

View File

@ -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<std::string> tmpstrings;

View File

@ -146,6 +146,12 @@ class MetaMgr : public a8::Singleton<MetaMgr>
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;