修复可能导致的宕机问题
This commit is contained in:
parent
372002bf25
commit
50d6fa1204
@ -131,6 +131,7 @@ void Buff::InternalTimerAddBuff()
|
|||||||
Creature* receiver = (Creature*)param.sender.GetUserData();
|
Creature* receiver = (Creature*)param.sender.GetUserData();
|
||||||
SkillCasterState* caster_state = (SkillCasterState*)param.param1.GetUserData();
|
SkillCasterState* caster_state = (SkillCasterState*)param.param1.GetUserData();
|
||||||
if (caster_state->caster.Get()) {
|
if (caster_state->caster.Get()) {
|
||||||
|
CreatureWeakPtr caster = caster_state->caster;
|
||||||
std::shared_ptr<Ability> old_context_ability = receiver->context_ability;
|
std::shared_ptr<Ability> old_context_ability = receiver->context_ability;
|
||||||
a8::Vec2 old_context_dir = receiver->context_dir;
|
a8::Vec2 old_context_dir = receiver->context_dir;
|
||||||
a8::Vec2 old_context_pos = receiver->context_pos;
|
a8::Vec2 old_context_pos = receiver->context_pos;
|
||||||
@ -142,10 +143,11 @@ void Buff::InternalTimerAddBuff()
|
|||||||
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id);
|
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id);
|
||||||
if (buff_meta) {
|
if (buff_meta) {
|
||||||
SkillCasterState old_caster_state;
|
SkillCasterState old_caster_state;
|
||||||
caster_state->caster.Get()->FillSkillCasterState(&old_caster_state);
|
caster.Get()->FillSkillCasterState(&old_caster_state);
|
||||||
caster_state->caster.Get()->RecoverSkillCasterState(caster_state);
|
caster.Get()->RecoverSkillCasterState(caster_state);
|
||||||
receiver->AddBuff(caster_state->caster.Get(), buff_meta, 1, skill);
|
//!!!在AddBuff的过程可能删除buff导致caster_state野指针
|
||||||
caster_state->caster.Get()->RecoverSkillCasterState(&old_caster_state);
|
receiver->AddBuff(caster.Get(), buff_meta, 1, skill);
|
||||||
|
caster.Get()->RecoverSkillCasterState(&old_caster_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
receiver->context_dir = old_context_dir;
|
receiver->context_dir = old_context_dir;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user