添加免疫眩晕

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) { for (int buff_id : gun_meta->hit_buff_list) {
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id); MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id);
if (buff_meta) { 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( int buff_uniid = c->AddBuff(
sender.Get(), sender.Get(),
buff_meta, buff_meta,

View File

@ -307,21 +307,28 @@ void Skill::ProcSJXY()
Creature* target = std::any_cast<Creature*>(params.at(1)); Creature* target = std::any_cast<Creature*>(params.at(1));
int rnd = rand(); int rnd = rand();
bool is_hit = false; bool is_hit = false;
bool is_immune = false;
if (shot_times % meta->number_meta->int_ratio == 0) { if (shot_times % meta->number_meta->int_ratio == 0) {
if ((rnd % 100) < meta->number_meta->float_probability * 100) { if ((rnd % 100) < meta->number_meta->float_probability * 100) {
auto itr = hited_objs.find(target->GetUniId()); if (target->GetAbility()->GetImmuneVertigoTimes() > 0) {
if (itr == hited_objs.end()) { is_immune = true;
hited_objs[target->GetUniId()] = owner->room->GetFrameNo();
is_hit = true;
} else { } else {
if ((owner->room->GetFrameNo() - itr->second) >= auto itr = hited_objs.find(target->GetUniId());
meta->number_meta->float_cd * SERVER_FRAME_RATE) { if (itr == hited_objs.end()) {
itr->second = owner->room->GetFrameNo(); hited_objs[target->GetUniId()] = owner->room->GetFrameNo();
is_hit = true; 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 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(), meta->i->skill_id(),
shot_times, shot_times,
@ -337,7 +344,8 @@ void Skill::ProcSJXY()
rnd % 100, rnd % 100,
meta->number_meta->float_probability, meta->number_meta->float_probability,
meta->number_meta->float_time, meta->number_meta->float_time,
is_hit ? 1 :0 is_hit ? 1 : 0,
is_immune ? 1 : 0
}); });
owner->SendDebugMsg(dbg_msg); owner->SendDebugMsg(dbg_msg);
a8::XPrintf("%s\n", {dbg_msg}); a8::XPrintf("%s\n", {dbg_msg});
@ -492,7 +500,12 @@ void Skill::ProcSWZB()
} }
int buff_id = SkillHelper::GetSwzbBuffId(skill_meta); int buff_id = SkillHelper::GetSwzbBuffId(skill_meta);
float buff_time = SkillHelper::GetSwzbBuffTime(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) { if (c->dead) {
return; return;
} }
if (c->GetAbility()->GetImmuneVertigoTimes() > 0) {
return;
}
float dmg = SkillHelper::GetCmxdDmg(sender.Get(), skill_meta); float dmg = SkillHelper::GetCmxdDmg(sender.Get(), skill_meta);
c->DecHP(dmg, c->DecHP(dmg,
VP_Explosion, VP_Explosion,