修复可能导致的宕机问题

This commit is contained in:
aozhiwei 2021-11-12 19:38:23 +08:00
parent 372002bf25
commit 50d6fa1204

View File

@ -131,6 +131,7 @@ void Buff::InternalTimerAddBuff()
Creature* receiver = (Creature*)param.sender.GetUserData();
SkillCasterState* caster_state = (SkillCasterState*)param.param1.GetUserData();
if (caster_state->caster.Get()) {
CreatureWeakPtr caster = caster_state->caster;
std::shared_ptr<Ability> old_context_ability = receiver->context_ability;
a8::Vec2 old_context_dir = receiver->context_dir;
a8::Vec2 old_context_pos = receiver->context_pos;
@ -142,10 +143,11 @@ void Buff::InternalTimerAddBuff()
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id);
if (buff_meta) {
SkillCasterState old_caster_state;
caster_state->caster.Get()->FillSkillCasterState(&old_caster_state);
caster_state->caster.Get()->RecoverSkillCasterState(caster_state);
receiver->AddBuff(caster_state->caster.Get(), buff_meta, 1, skill);
caster_state->caster.Get()->RecoverSkillCasterState(&old_caster_state);
caster.Get()->FillSkillCasterState(&old_caster_state);
caster.Get()->RecoverSkillCasterState(caster_state);
//!!!在AddBuff的过程可能删除buff导致caster_state野指针
receiver->AddBuff(caster.Get(), buff_meta, 1, skill);
caster.Get()->RecoverSkillCasterState(&old_caster_state);
}
receiver->context_dir = old_context_dir;