添加免疫眩晕

This commit is contained in:
aozhiwei 2022-10-12 12:10:17 +08:00
parent 4fe82c41d5
commit 8f14b1c91b
2 changed files with 46 additions and 13 deletions

View File

@ -921,6 +921,23 @@ void Bullet::TriggerHitBuff(Entity* e)
for (int buff_id : gun_meta->hit_buff_list) {
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id);
if (buff_meta) {
if (c->GetAbility()->GetImmuneVertigoTimes() > 0 &&
buff_meta->i->buff_effect() == kBET_Vertigo) {
#ifdef DEBUG
{
std::string dbg_msg = a8::Format
(
"免疫眩晕 target_uniid:%d ImmuneVertigoTimes:%d",
{
c->GetUniId(),
c->GetAbility()->GetImmuneVertigoTimes()
});
sender.Get()->SendDebugMsg(dbg_msg);
a8::XPrintf("%s\n", {dbg_msg});
}
#endif
continue;
}
int buff_uniid = c->AddBuff(
sender.Get(),
buff_meta,

View File

@ -307,21 +307,28 @@ void Skill::ProcSJXY()
Creature* target = std::any_cast<Creature*>(params.at(1));
int rnd = rand();
bool is_hit = false;
bool is_immune = false;
if (shot_times % meta->number_meta->int_ratio == 0) {
if ((rnd % 100) < meta->number_meta->float_probability * 100) {
auto itr = hited_objs.find(target->GetUniId());
if (itr == hited_objs.end()) {
hited_objs[target->GetUniId()] = owner->room->GetFrameNo();
is_hit = true;
if (target->GetAbility()->GetImmuneVertigoTimes() > 0) {
is_immune = true;
} else {
if ((owner->room->GetFrameNo() - itr->second) >=
meta->number_meta->float_cd * SERVER_FRAME_RATE) {
itr->second = owner->room->GetFrameNo();
auto itr = hited_objs.find(target->GetUniId());
if (itr == hited_objs.end()) {
hited_objs[target->GetUniId()] = owner->room->GetFrameNo();
is_hit = true;
} else {
if ((owner->room->GetFrameNo() - itr->second) >=
meta->number_meta->float_cd * SERVER_FRAME_RATE) {
itr->second = owner->room->GetFrameNo();
is_hit = true;
}
}//endif itr
if (is_hit) {
target->TryAddBuffAndSetTime(owner,
kVertigoBuffId,
meta->number_meta->float_time * 1000);
}
}//endif itr
if (is_hit) {
target->TryAddBuffAndSetTime(owner, kVertigoBuffId, meta->number_meta->float_time * 1000);
}
}
}
@ -329,7 +336,7 @@ void Skill::ProcSJXY()
{
std::string dbg_msg = a8::Format
(
"skill_id:%d 射击 shot_times:%d ratio:%d rand:%d probability:%f time:%f 是否眩晕:%d",
"skill_id:%d 射击 shot_times:%d ratio:%d rand:%d probability:%f time:%f 是否眩晕:%d 是否被免疫:%d",
{
meta->i->skill_id(),
shot_times,
@ -337,7 +344,8 @@ void Skill::ProcSJXY()
rnd % 100,
meta->number_meta->float_probability,
meta->number_meta->float_time,
is_hit ? 1 :0
is_hit ? 1 : 0,
is_immune ? 1 : 0
});
owner->SendDebugMsg(dbg_msg);
a8::XPrintf("%s\n", {dbg_msg});
@ -492,7 +500,12 @@ void Skill::ProcSWZB()
}
int buff_id = SkillHelper::GetSwzbBuffId(skill_meta);
float buff_time = SkillHelper::GetSwzbBuffTime(skill_meta);
c->TryAddBuffAndSetTime(sender.Get(), buff_id, buff_time);
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id);
if (c->GetAbility()->GetImmuneVertigoTimes() > 0 &&
buff_meta->i->buff_effect() == kBET_Vertigo) {
} else {
c->TryAddBuffAndSetTime(sender.Get(), buff_id, buff_time);
}
}
}
}
@ -553,6 +566,9 @@ void Skill::ProcCMXD()
if (c->dead) {
return;
}
if (c->GetAbility()->GetImmuneVertigoTimes() > 0) {
return;
}
float dmg = SkillHelper::GetCmxdDmg(sender.Get(), skill_meta);
c->DecHP(dmg,
VP_Explosion,