138 lines
3.4 KiB
C++
138 lines
3.4 KiB
C++
#include "precompile.h"
|
|
|
|
#include "buff/callfunc.h"
|
|
|
|
#include "creature.h"
|
|
#include "ability.h"
|
|
#include "room.h"
|
|
#include "skill.h"
|
|
|
|
#include "mt/Buff.h"
|
|
#include "mt/Skill.h"
|
|
|
|
void CallFuncBuff::Activate()
|
|
{
|
|
switch ((BuffCallFunc_e)meta->_int_buff_param1) {
|
|
case BuffCallFunc_e::kAddMinorMode:
|
|
{
|
|
ProcAddMinorMode();
|
|
}
|
|
break;
|
|
case BuffCallFunc_e::kSpeedReduce:
|
|
{
|
|
hold_param2_ = meta->GetBuffParam2(owner, skill_meta);
|
|
owner->GetAbility()->AddSpeedRuduce(hold_param2_);
|
|
}
|
|
break;
|
|
case BuffCallFunc_e::kInternalRangeAddBuff:
|
|
{
|
|
ProcIntervalRangeAddBuffFunc();
|
|
}
|
|
break;
|
|
case BuffCallFunc_e::kDecHp:
|
|
{
|
|
}
|
|
break;
|
|
case BuffCallFunc_e::kMarkTag:
|
|
{
|
|
ProcMarkTag();
|
|
}
|
|
break;
|
|
default:
|
|
{
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
void CallFuncBuff::Deactivate()
|
|
{
|
|
switch ((BuffCallFunc_e)meta->_int_buff_param1) {
|
|
case BuffCallFunc_e::kAddMinorMode:
|
|
{
|
|
|
|
}
|
|
break;
|
|
case BuffCallFunc_e::kSpeedReduce:
|
|
{
|
|
owner->GetAbility()->DelSpeedRuduce(hold_param2_);
|
|
}
|
|
break;
|
|
default:
|
|
{
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
void CallFuncBuff::ProcIntervalRangeAddBuffFunc()
|
|
{
|
|
owner->room->xtimer.SetIntervalEx
|
|
(
|
|
meta->_buff_param4 / FRAME_RATE_MS,
|
|
[this] (int event, const a8::Args* args)
|
|
{
|
|
if (a8::TIMER_EXEC_EVENT == event) {
|
|
owner->TraverseCreatures
|
|
(
|
|
[this] (Creature* c, bool& stop)
|
|
{
|
|
if (c->dead) {
|
|
return;
|
|
}
|
|
if (owner->GetUniId() == c->GetUniId()) {
|
|
return;
|
|
}
|
|
if (!GetCaster().Get()) {
|
|
return;
|
|
}
|
|
if (GetCaster().Get()->team_id != c->team_id) {
|
|
if (owner->GetPos().Distance2D2(c->GetPos()) < meta->_buff_param2) {
|
|
c->TryAddBuff(GetCaster().Get(), meta->_int_buff_param3, skill_meta);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
},
|
|
&xtimer_attacher
|
|
);
|
|
}
|
|
|
|
void CallFuncBuff::ProcAddMinorMode()
|
|
{
|
|
if (skill_meta) {
|
|
float dur_time = meta->GetBuffParam3(owner, skill_meta);
|
|
Skill* skill = owner->GetSkill(skill_meta->skill_id());
|
|
if (skill) {
|
|
skill->AddMinorMode
|
|
(
|
|
meta->_int_buff_param2,
|
|
dur_time,
|
|
[this] (int action)
|
|
{
|
|
if (action == 0) {
|
|
owner->TryAddBuff(owner, meta->_int_buff_param4, skill_meta);
|
|
} else if (action) {
|
|
owner->TryAddBuff(owner, meta->_int_buff_param5, skill_meta);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
void CallFuncBuff::ProcMarkTag()
|
|
{
|
|
switch (meta->_int_buff_param2) {
|
|
case 1:
|
|
{
|
|
owner->SetBuffTag(meta->_int_buff_param3, meta->_int_buff_param4);
|
|
}
|
|
break;
|
|
case 2:
|
|
{
|
|
owner->IncBuffTag(meta->_int_buff_param3, meta->_int_buff_param4);
|
|
}
|
|
break;
|
|
}
|
|
}
|