This commit is contained in:
aozhiwei 2021-04-06 14:56:51 +08:00
parent 1dec9d2c26
commit 16068a237e
2 changed files with 45 additions and 26 deletions

View File

@ -260,7 +260,8 @@ void Creature::RecalcBuffAttr()
buff_attr_rate_ = {}; buff_attr_rate_ = {};
for (auto& buff : buff_list_) { for (auto& buff : buff_list_) {
if (buff.meta->i->buff_effect() == kBET_ChgAttr || if (buff.meta->i->buff_effect() == kBET_ChgAttr ||
buff.meta->i->buff_effect() == kBET_Car) { buff.meta->i->buff_effect() == kBET_Car ||
buff.meta->i->buff_effect() == kBET_CrazyMode) {
int attr_type = (int)buff.meta->param1; int attr_type = (int)buff.meta->param1;
int calc_type = (int)buff.meta->param2; int calc_type = (int)buff.meta->param2;
if (IsValidHumanAttr(attr_type)) { if (IsValidHumanAttr(attr_type)) {
@ -635,6 +636,7 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff)
switch (buff->meta->i->buff_effect()) { switch (buff->meta->i->buff_effect()) {
case kBET_ChgAttr: case kBET_ChgAttr:
case kBET_Car: case kBET_Car:
case kBET_CrazyMode:
{ {
RecalcBuffAttr(); RecalcBuffAttr();
if (buff->meta->i->buff_effect() == kBET_Car) { if (buff->meta->i->buff_effect() == kBET_Car) {
@ -781,31 +783,52 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff)
{ {
if (caster->GetEntityType() == ET_Player) { if (caster->GetEntityType() == ET_Player) {
room->xtimer.AddDeadLineTimerAndAttach room->xtimer.AddDeadLineTimerAndAttach
( (
SERVER_FRAME_RATE * buff->meta->param1, SERVER_FRAME_RATE * buff->meta->param1,
a8::XParams() a8::XParams()
.SetSender(this) .SetSender(this)
.SetParam1(caster) .SetParam1(caster)
.SetParam2(buff->meta->param2) .SetParam2(buff->meta->param2)
.SetParam3(((Human*)caster)->CurrentSkill()->meta), .SetParam3(((Creature*)caster)->CurrentSkill()->meta),
[] (const a8::XParams& param) [] (const a8::XParams& param)
{ {
Human* hum = (Human*)param.sender.GetUserData(); Human* hum = (Human*)param.sender.GetUserData();
Human* caster = (Human*)param.param1.GetUserData(); Human* caster = (Human*)param.param1.GetUserData();
int buff_id = param.param2; int buff_id = param.param2;
MetaData::Skill* skill = (MetaData::Skill*)param.param3.GetUserData(); MetaData::Skill* skill = (MetaData::Skill*)param.param3.GetUserData();
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id); MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id);
if (buff_meta && skill == caster->CurrentSkill()->meta && caster) { if (buff_meta && skill == caster->CurrentSkill()->meta && caster) {
hum->AddBuff(caster, buff_meta, 1, skill); hum->AddBuff(caster, buff_meta, 1, skill);
} }
}, },
&buff->xtimer_attacher.timer_list_); &buff->xtimer_attacher.timer_list_);
} }
} }
break; break;
case kBET_IntervalAddBuff: case kBET_IntervalAddBuff:
{ {
room->xtimer.AddRepeatTimerAndAttach
(
FRAME_RATE_MS / buff->meta->param1,
a8::XParams()
.SetSender(this)
.SetParam1(caster)
.SetParam2(buff->meta)
.SetParam3(((Creature*)caster)->CurrentSkill()->meta),
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
Human* caster = (Human*)param.param1.GetUserData();
MetaData::Buff* mother_buff_meta = (MetaData::Buff*)param.param2.GetUserData();
MetaData::Skill* skill = (MetaData::Skill*)param.param3.GetUserData();
for (int buff_id : mother_buff_meta->param2_int_list) {
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id);
if (buff_meta && skill == caster->CurrentSkill()->meta && caster) {
hum->AddBuff(caster, buff_meta, 1, skill);
}
}
},
&buff->xtimer_attacher.timer_list_);
} }
break; break;
case kBET_SummonHero: case kBET_SummonHero:
@ -821,11 +844,6 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff)
case kBET_Hide: case kBET_Hide:
{ {
}
break;
case kBET_CrazyMode:
{
} }
break; break;
case kBET_ShockWave: case kBET_ShockWave:

View File

@ -169,6 +169,7 @@ namespace MetaData
float param2 = 0.0f; float param2 = 0.0f;
float param3 = 0.0f; float param3 = 0.0f;
float param4 = 0.0f; float param4 = 0.0f;
std::vector<int> param2_int_list;
std::set<int> immune_buffeffect; std::set<int> immune_buffeffect;
}; };