This commit is contained in:
aozhiwei 2023-02-14 15:55:27 +08:00
parent ff12a25ee0
commit 24b3fc65ff
2 changed files with 17 additions and 53 deletions

View File

@ -309,63 +309,27 @@ void Skill::InitPassiveSkill()
void Skill::Proc30101XL() void Skill::Proc30101XL()
{ {
int shot_times = 0; a8::XTimerWp recover_timer = owner->room->xtimer.SetIntervalWpEx
std::map<int, long long> hited_objs;
owner->GetTrigger()->AddListener
( (
kBulletHitEvent, GetCd() / FRAME_RATE_MS,
[this, shot_times, hited_objs] (const a8::Args& args) mutable [this] (int event, const a8::Args* args)
{ {
++shot_times; if (a8::TIMER_EXEC_EVENT == event) {
IBullet* bullet = args.Get<IBullet*>(0); if (!owner->dead) {
Creature* target = args.Get<Creature*>(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) {
const mt::Buff* buff_meta = mt::Buff::GetById(kVertigoEffectBuffId);
if (buff_meta && target->GetAbility()->CanImmune(buff_meta->_tags)) {
is_immune = true;
} else {
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,
kVertigoEffectBuffId,
meta->_number_meta->_float_time * 1000);
}
}
} }
} }
#ifdef DEBUG },
{ &xtimer_attacher);
std::string dbg_msg = a8::Format
( owner->GetTrigger()->AddListener
"skill_id:%d 射击 shot_times:%d ratio:%d rand:%d probability:%f time:%f 是否眩晕:%d 是否被免疫:%d", (
{ kReceiveDmgEvent,
meta->skill_id(), [this, recover_timer] (const a8::Args& args) mutable
shot_times, {
meta->_number_meta->_int_ratio, if (!recover_timer.expired()) {
rnd % 100, owner->room->xtimer.ResetTimer(recover_timer);
meta->_number_meta->_float_probability,
meta->_number_meta->_float_time,
is_hit ? 1 : 0,
is_immune ? 1 : 0
});
owner->SendDebugMsg(dbg_msg);
a8::XPrintf("%s\n", {dbg_msg});
} }
#endif
} }
); );
} }

2
third_party/a8 vendored

@ -1 +1 @@
Subproject commit 58dd5bb850143cd6d0b55a99c1d7197e6153fea7 Subproject commit 0ea88842f5acfefd6c5b966cd941f6b017945234