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)
|
[this, caster_state, skill] (int event, const a8::Args* args)
|
||||||
{
|
{
|
||||||
if (a8::TIMER_EXEC_EVENT == event) {
|
if (a8::TIMER_EXEC_EVENT == event) {
|
||||||
Creature* receiver = owner;
|
if (!caster_state->caster.Get()) {
|
||||||
if (caster_state->caster.Get()) {
|
return;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
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