1
This commit is contained in:
parent
bbd187541c
commit
e64246b0c8
@ -136,30 +136,31 @@ void Buff::InternalTimerAddBuff()
|
||||
[this, caster_state, skill] (int event, const a8::Args* args)
|
||||
{
|
||||
if (a8::TIMER_EXEC_EVENT == event) {
|
||||
Creature* receiver = owner;
|
||||
if (caster_state->caster.Get()) {
|
||||
CreatureWeakPtr caster = caster_state->caster;
|
||||
std::shared_ptr<Ability> old_context_ability = receiver->context_ability;
|
||||
glm::vec3 old_context_dir = receiver->context_dir;
|
||||
Position old_context_pos = receiver->context_pos;
|
||||
receiver->context_dir = receiver->GetAttackDir();
|
||||
receiver->context_pos = receiver->GetPos();
|
||||
|
||||
int buff_id = meta->_int_param2;
|
||||
const mt::Buff* buff_meta = mt::Buff::GetById(buff_id);
|
||||
if (buff_meta) {
|
||||
SkillCasterState old_caster_state;
|
||||
caster.Get()->FillSkillCasterState(&old_caster_state);
|
||||
caster.Get()->RecoverSkillCasterState(caster_state.get());
|
||||
//!!!在AddBuff的过程可能删除buff导致caster_state野指针
|
||||
receiver->AddBuff(caster.Get(), buff_meta, skill);
|
||||
caster.Get()->RecoverSkillCasterState(&old_caster_state);
|
||||
}
|
||||
|
||||
receiver->context_dir = old_context_dir;
|
||||
receiver->context_pos = old_context_pos;
|
||||
receiver->context_ability = old_context_ability;
|
||||
if (!caster_state->caster.Get()) {
|
||||
return;
|
||||
}
|
||||
Creature* receiver = owner;
|
||||
CreatureWeakPtr caster = caster_state->caster;
|
||||
std::shared_ptr<Ability> old_context_ability = receiver->context_ability;
|
||||
glm::vec3 old_context_dir = receiver->context_dir;
|
||||
Position old_context_pos = receiver->context_pos;
|
||||
receiver->context_dir = receiver->GetAttackDir();
|
||||
receiver->context_pos = receiver->GetPos();
|
||||
|
||||
int buff_id = meta->_int_param2;
|
||||
const mt::Buff* buff_meta = mt::Buff::GetById(buff_id);
|
||||
if (buff_meta) {
|
||||
SkillCasterState old_caster_state;
|
||||
caster.Get()->FillSkillCasterState(&old_caster_state);
|
||||
caster.Get()->RecoverSkillCasterState(caster_state.get());
|
||||
//!!!在AddBuff的过程可能删除buff导致caster_state野指针
|
||||
receiver->AddBuff(caster.Get(), buff_meta, skill);
|
||||
caster.Get()->RecoverSkillCasterState(&old_caster_state);
|
||||
}
|
||||
|
||||
receiver->context_dir = old_context_dir;
|
||||
receiver->context_pos = old_context_pos;
|
||||
receiver->context_ability = old_context_ability;
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user