1
This commit is contained in:
parent
1dec9d2c26
commit
16068a237e
@ -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:
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user