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)
|
void Buff::ProcDelayAddBuff(Creature* caster)
|
||||||
{
|
{
|
||||||
if (caster) {
|
InternalTimerAddBuff(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;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Buff::ProcIntervalAddBuff(Creature* caster)
|
void Buff::ProcIntervalAddBuff(Creature* caster)
|
||||||
{
|
{
|
||||||
#if 0
|
InternalTimerAddBuff(caster);
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Buff::ProcBatchAddBuff(Creature* 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 ProcDelayAddBuff(Creature* caster);
|
||||||
void ProcIntervalAddBuff(Creature* caster);
|
void ProcIntervalAddBuff(Creature* caster);
|
||||||
void ProcBatchAddBuff(Creature* caster);
|
void ProcBatchAddBuff(Creature* caster);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void InternalTimerAddBuff(Creature* caster);
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user