修复可能导致的宕机问题
This commit is contained in:
parent
372002bf25
commit
50d6fa1204
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user