This commit is contained in:
aozhiwei 2022-11-23 12:40:42 +08:00
parent 5bef1d7f8b
commit 742f2d4087
3 changed files with 41 additions and 22 deletions

View File

@ -2717,7 +2717,7 @@ void Human::OnDie()
return true;
});
}
{
if (real_dead) {
std::set<Human*> over_humans;
if (!leave_) {
if (!HasNoDownedTeammate()) {
@ -4619,33 +4619,41 @@ void Human::InternalBeKill(int killer_id, const std::string& killer_name, int we
((Creature*)killer)->GetTrigger()->Kill(this, weapon_id);
}
}
if (room->IsPveRoom()){
if (room->IsPveRoom()) {
dead = true;
real_dead = false;
downed = false;
SetHP(0.0f);
if (GetBattleContext()->GetReviveCoin() > 0 && real_killer_id != GetUniId()) {
room->frame_event.AddDead(GetWeakPtrRef(), 1000 * MetaMgr::Instance()->revive_time);
dead_timer = room->xtimer.AddDeadLineTimerAndAttach
(MetaMgr::Instance()->revive_time * SERVER_FRAME_RATE,
a8::XParams()
.SetSender(this),
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->real_dead = true;
hum->SendGameOver();
},
&xtimer_attacher.timer_list_,
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->dead_timer = nullptr;
});
if (real_killer_id != GetUniId() && GetTeam() && GetTeam()->HasReviveCoin(this)) {
real_dead = true;
dead_frameno = room->GetFrameNo();
GetTrigger()->Die(killer_id, weapon_id);
OnDie();
KillMgr::Instance()->OnHumanDead(this, &info);
if (real_dead) {
real_dead = false;
OnDie();
KillMgr::Instance()->OnHumanDead(this, &info);
room->frame_event.AddDead(GetWeakPtrRef(), 1000 * MetaMgr::Instance()->revive_time);
dead_timer = room->xtimer.AddDeadLineTimerAndAttach
(MetaMgr::Instance()->revive_time * SERVER_FRAME_RATE,
a8::XParams()
.SetSender(this),
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->real_dead = true;
hum->SendGameOver();
},
&xtimer_attacher.timer_list_,
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->dead_timer = nullptr;
});
} else {
OnDie();
KillMgr::Instance()->OnHumanDead(this, &info);
room->frame_event.AddDead(GetWeakPtrRef(), 0);
}
} else {
real_dead = true;
dead_frameno = room->GetFrameNo();

View File

@ -140,3 +140,13 @@ void Team::AddCombineMemberNum(int member_num)
{
combined_team_member_num_ += member_num;
}
bool Team::HasReviveCoin(Human* member)
{
for (Human* member : members_) {
if (member->GetBattleContext()->GetReviveCoin() > 0) {
return true;
}
}
return false;
}

View File

@ -28,6 +28,7 @@ class Team
void AddCombineMemberNum(int member_num);
Human* GetMemberByUniId(int member_id);
int GetInitTeamMemberNum() { return init_team_member_num_; };
bool HasReviveCoin(Human* member);
private:
int team_id_ = 0;