This commit is contained in:
aozhiwei 2022-11-10 20:55:34 +08:00
parent cdc397100a
commit ee7df3aa62
3 changed files with 34 additions and 25 deletions

View File

@ -17,6 +17,7 @@ enum CreatureStatus
CS_DisableAttack,
CS_ForceTeam,
CS_PreDieSuspended,
CS_DeadNoDrop,
CS_End
};

View File

@ -2295,6 +2295,9 @@ void Human::DeadDrop()
#endif
};
if (a8::HasBitFlag(status, CS_DeadNoDrop)) {
return;
}
if (GetRace() == kHumanRace &&
!HasBuffEffect(kBET_Terminator) &&
!(HasBuffEffect(kBET_Become) && GetBuffByEffectId(kBET_Become)->FreezeOperate())) {

View File

@ -846,33 +846,38 @@ void Skill::ProcFH()
kDieEvent,
[this, relive_times] (const std::vector<std::any>& params) mutable
{
int killer_id = std::any_cast<int>(params.at(0));
if (relive_times <= 0) {
++relive_times;
owner->real_dead = false;
owner->room->xtimer.AddDeadLineTimerAndAttach
(
meta->number_meta->float_time * 1000 / FRAME_RATE_MS,
a8::XParams()
.SetSender(this),
[] (const a8::XParams& param)
{
Skill* skill = (Skill*)param.sender.GetUserData();
Creature* owner = skill->owner;
owner->dead = false;
owner->real_dead = false;
owner->downed = false;
owner->SetHP(owner->GetMaxHP() * skill->meta->number_meta->float_ratio2);
owner->SyncAroundPlayers(__FILE__, __LINE__, __func__);
owner->room->frame_event.AddRevive(owner->GetWeakPtrRef());
owner->TryAddBuff(owner,
skill->meta->number_meta->pb->buff_id(),
skill->meta);
},
&xtimer_attacher.timer_list_,
[] (const a8::XParams& param)
{
}
);
if (killer_id != owner->GetUniId()) {
owner->real_dead = false;
a8::SetBitFlag(owner->status, CS_DeadNoDrop);
owner->room->xtimer.AddDeadLineTimerAndAttach
(
meta->number_meta->float_time * 1000 / FRAME_RATE_MS,
a8::XParams()
.SetSender(this),
[] (const a8::XParams& param)
{
Skill* skill = (Skill*)param.sender.GetUserData();
Creature* owner = skill->owner;
owner->dead = false;
owner->real_dead = false;
owner->downed = false;
a8::UnSetBitFlag(owner->status, CS_DeadNoDrop);
owner->SetHP(owner->GetMaxHP() * skill->meta->number_meta->float_ratio2);
owner->SyncAroundPlayers(__FILE__, __LINE__, __func__);
owner->room->frame_event.AddRevive(owner->GetWeakPtrRef());
owner->TryAddBuff(owner,
skill->meta->number_meta->pb->buff_id(),
skill->meta);
},
&xtimer_attacher.timer_list_,
[] (const a8::XParams& param)
{
}
);
}
}
}
);