1
This commit is contained in:
parent
0ae31ebc0d
commit
df5d8402f6
@ -610,27 +610,29 @@ void Skill::Proc30501TZ()
|
|||||||
|
|
||||||
void Skill::Proc30601DJS()
|
void Skill::Proc30601DJS()
|
||||||
{
|
{
|
||||||
a8::XTimerWp passive_skill_timer;
|
struct InnerObject
|
||||||
{
|
{
|
||||||
struct InnerObject
|
CreatureWeakPtr c;
|
||||||
|
|
||||||
|
void OnEnter()
|
||||||
{
|
{
|
||||||
CreatureWeakPtr c;
|
|
||||||
|
|
||||||
void OnEnter()
|
}
|
||||||
{
|
|
||||||
|
|
||||||
}
|
void OnLeave()
|
||||||
|
{
|
||||||
|
|
||||||
void OnLeave()
|
}
|
||||||
{
|
|
||||||
|
|
||||||
}
|
};
|
||||||
|
auto context = A8_MAKE_ANON_STRUCT_SHARED
|
||||||
};
|
(
|
||||||
auto context = A8_MAKE_ANON_STRUCT_SHARED
|
a8::XTimerWp passive_skill_timer;
|
||||||
(
|
a8::XTimerWp active_skill_timer;
|
||||||
std::map<int, InnerObject> in_human_infos;
|
std::vector<std::weak_ptr<Effect>> curr_effect_list;
|
||||||
);
|
std::map<int, InnerObject> in_human_infos;
|
||||||
|
);
|
||||||
|
{
|
||||||
auto on_enter =
|
auto on_enter =
|
||||||
[this, context] (Human* hum, const mt::Skill* active_skill_meta)
|
[this, context] (Human* hum, const mt::Skill* active_skill_meta)
|
||||||
{
|
{
|
||||||
@ -727,7 +729,7 @@ void Skill::Proc30601DJS()
|
|||||||
};
|
};
|
||||||
const mt::Skill* active_skill_meta = nullptr;
|
const mt::Skill* active_skill_meta = nullptr;
|
||||||
std::set<Human*> in_range_humans;
|
std::set<Human*> in_range_humans;
|
||||||
passive_skill_timer = owner->room->xtimer.SetIntervalWpEx
|
context->passive_skill_timer = owner->room->xtimer.SetIntervalWpEx
|
||||||
(
|
(
|
||||||
SERVER_FRAME_RATE,
|
SERVER_FRAME_RATE,
|
||||||
[this, in_range_humans, active_skill_meta, on_enter, on_stay, on_leave, check_cb]
|
[this, in_range_humans, active_skill_meta, on_enter, on_stay, on_leave, check_cb]
|
||||||
@ -752,40 +754,53 @@ void Skill::Proc30601DJS()
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
&xtimer_attacher);
|
&xtimer_attacher);
|
||||||
|
for (int effect_id : meta->_number_meta->_effect_list) {
|
||||||
|
context->curr_effect_list.push_back(owner->AddEffect(effect_id));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
a8::XTimerWp active_skill_timer;
|
|
||||||
owner->GetTrigger()->AddListener
|
owner->GetTrigger()->AddListener
|
||||||
(
|
(
|
||||||
kUseSkillEvent,
|
kUseSkillEvent,
|
||||||
[this, passive_skill_timer, active_skill_timer] (const a8::Args& args) mutable
|
[this, context] (const a8::Args& args) mutable
|
||||||
{
|
{
|
||||||
if (passive_skill_timer.expired()) {
|
if (context->passive_skill_timer.expired()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Skill* skill = args.Get<Skill*>(0);
|
Skill* skill = args.Get<Skill*>(0);
|
||||||
if (skill->meta->GetMagicId() == MAGIC_20601_DJS) {
|
if (skill->meta->GetMagicId() == MAGIC_20601_DJS) {
|
||||||
if (!active_skill_timer.expired()) {
|
if (!context->active_skill_timer.expired()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
a8::Args event_args({skill->meta});
|
a8::Args event_args({skill->meta});
|
||||||
owner->room->xtimer.FireEvent(passive_skill_timer,
|
owner->room->xtimer.FireEvent(context->passive_skill_timer,
|
||||||
kActiveDjsSkillTimerEvent,
|
kActiveDjsSkillTimerEvent,
|
||||||
&event_args);
|
&event_args);
|
||||||
active_skill_timer = owner->room->xtimer.SetTimeoutWpEx
|
context->active_skill_timer = owner->room->xtimer.SetTimeoutWpEx
|
||||||
(
|
(
|
||||||
skill->meta->_number_meta->_float_time / FRAME_RATE_MS,
|
skill->meta->_number_meta->_float_time / FRAME_RATE_MS,
|
||||||
[this, passive_skill_timer] (int event, const a8::Args* args) mutable
|
[this, context] (int event, const a8::Args* args) mutable
|
||||||
{
|
{
|
||||||
if (a8::TIMER_DELETE_EVENT == event) {
|
if (a8::TIMER_DELETE_EVENT == event) {
|
||||||
a8::Args event_args({});
|
a8::Args event_args({});
|
||||||
owner->room->xtimer.FireEvent(passive_skill_timer,
|
owner->room->xtimer.FireEvent(context->passive_skill_timer,
|
||||||
kDeactiveDjsSkillTimerEvent,
|
kDeactiveDjsSkillTimerEvent,
|
||||||
&event_args);
|
&event_args);
|
||||||
|
for (int effect_id : meta->_number_meta->_effect_list) {
|
||||||
|
context->curr_effect_list.push_back(owner->AddEffect(effect_id));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
&xtimer_attacher);
|
&xtimer_attacher);
|
||||||
|
for (auto effect : context->curr_effect_list) {
|
||||||
|
owner->RemoveEffect(effect);
|
||||||
|
}
|
||||||
|
context->curr_effect_list.clear();
|
||||||
|
for (int effect_id : skill->meta->_number_meta->_effect_list) {
|
||||||
|
context->curr_effect_list.push_back(owner->AddEffect(effect_id));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user