1
This commit is contained in:
parent
0dae85dd30
commit
838d9eca3f
@ -27,93 +27,69 @@ void Buff::FillMFBuff(cs::MFBuff* buff_pb)
|
||||
|
||||
void Buff::ProcDelayAddBuff(Creature* caster)
|
||||
{
|
||||
if (caster) {
|
||||
SkillCasterState* caster_state = new SkillCasterState;
|
||||
caster->FillSkillCasterState(caster_state);
|
||||
owner->room->xtimer.AddDeadLineTimerAndAttach
|
||||
(
|
||||
SERVER_FRAME_RATE * meta->param1,
|
||||
a8::XParams()
|
||||
.SetSender(owner)
|
||||
.SetParam1(caster_state)
|
||||
.SetParam2(meta->param2)
|
||||
.SetParam3(((Creature*)caster)->CurrentSkill()->meta),
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
Creature* receiver = (Creature*)param.sender.GetUserData();
|
||||
SkillCasterState* caster_state = (SkillCasterState*)param.param1.GetUserData();
|
||||
if (caster_state->caster.Get()) {
|
||||
int buff_id = param.param2;
|
||||
MetaData::Skill* skill = (MetaData::Skill*)param.param3.GetUserData();
|
||||
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id);
|
||||
if (buff_meta &&
|
||||
caster_state->caster.Get()->CurrentSkill() &&
|
||||
skill == caster_state->caster.Get()->CurrentSkill()->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);
|
||||
}
|
||||
}
|
||||
},
|
||||
&xtimer_attacher.timer_list_,
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
SkillCasterState* caster_state = (SkillCasterState*)param.param1.GetUserData();
|
||||
delete caster_state;
|
||||
});
|
||||
}
|
||||
InternalTimerAddBuff(caster);
|
||||
}
|
||||
|
||||
void Buff::ProcIntervalAddBuff(Creature* caster)
|
||||
{
|
||||
#if 0
|
||||
if (caster) {
|
||||
SkillCasterState* caster_state = new SkillCasterState;
|
||||
caster->FillSkillCasterState(caster_state);
|
||||
room->xtimer.AddRepeatTimerAndAttach
|
||||
(
|
||||
buff->meta->param1 / FRAME_RATE_MS,
|
||||
a8::XParams()
|
||||
.SetSender(this)
|
||||
.SetParam1(caster_state)
|
||||
.SetParam2(buff->meta)
|
||||
.SetParam3(caster->CurrentSkill() ? caster->CurrentSkill()->meta : nullptr),
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
Creature* receiver = (Creature*)param.sender.GetUserData();
|
||||
SkillCasterState* caster_state = (SkillCasterState*)param.param1.GetUserData();
|
||||
if (caster_state->caster.Get()) {
|
||||
int buff_id = param.param2;
|
||||
MetaData::Skill* skill = (MetaData::Skill*)param.param3.GetUserData();
|
||||
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id);
|
||||
if (buff_meta &&
|
||||
(!skill ||
|
||||
(
|
||||
caster_state->caster.Get()->CurrentSkill() &&
|
||||
skill == caster_state->caster.Get()->CurrentSkill()->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);
|
||||
}
|
||||
}
|
||||
},
|
||||
&buff->xtimer_attacher.timer_list_,
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
SkillCasterState* caster_state = (SkillCasterState*)param.param1.GetUserData();
|
||||
delete caster_state;
|
||||
});
|
||||
}
|
||||
#endif
|
||||
InternalTimerAddBuff(caster);
|
||||
}
|
||||
|
||||
void Buff::ProcBatchAddBuff(Creature* caster)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Buff::InternalTimerAddBuff(Creature* caster)
|
||||
{
|
||||
if (!caster) {
|
||||
return;
|
||||
}
|
||||
auto timer_func =
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
Creature* receiver = (Creature*)param.sender.GetUserData();
|
||||
SkillCasterState* caster_state = (SkillCasterState*)param.param1.GetUserData();
|
||||
if (caster_state->caster.Get()) {
|
||||
int buff_id = param.param2;
|
||||
MetaData::Skill* skill = (MetaData::Skill*)param.param3.GetUserData();
|
||||
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id);
|
||||
if (buff_meta &&
|
||||
(!skill ||
|
||||
(
|
||||
caster_state->caster.Get()->CurrentSkill() &&
|
||||
skill == caster_state->caster.Get()->CurrentSkill()->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);
|
||||
}
|
||||
}
|
||||
};
|
||||
auto timer_after_func =
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
SkillCasterState* caster_state = (SkillCasterState*)param.param1.GetUserData();
|
||||
delete caster_state;
|
||||
};
|
||||
|
||||
SkillCasterState* caster_state = new SkillCasterState;
|
||||
caster->FillSkillCasterState(caster_state);
|
||||
|
||||
a8::XParams param;
|
||||
param.SetSender(this);
|
||||
param.SetParam1(caster_state);
|
||||
param.SetParam2(meta);
|
||||
param.SetParam3(caster->CurrentSkill() ? caster->CurrentSkill()->meta : nullptr);
|
||||
|
||||
owner->room->xtimer.AddRepeatTimerAndAttach
|
||||
(
|
||||
meta->param1 / FRAME_RATE_MS,
|
||||
param,
|
||||
timer_func,
|
||||
&xtimer_attacher.timer_list_,
|
||||
timer_after_func);
|
||||
}
|
||||
|
@ -33,4 +33,7 @@ class Buff
|
||||
void ProcDelayAddBuff(Creature* caster);
|
||||
void ProcIntervalAddBuff(Creature* caster);
|
||||
void ProcBatchAddBuff(Creature* caster);
|
||||
|
||||
private:
|
||||
void InternalTimerAddBuff(Creature* caster);
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user