From 7853aa35ff5ec192bf16f9985cc7145ebe533c96 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 4 Jan 2023 19:24:02 +0800 Subject: [PATCH] 1 --- server/gameserver/bullet.cc | 83 ++++++++++++++++++++++++------------- 1 file changed, 54 insertions(+), 29 deletions(-) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 5d6d8d1e..43ebd94f 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -883,35 +883,60 @@ void Bullet::ProcNormalBullet(BulletCheckResult& result) if (need_remove) { if (IsFlyHook()) { if (!hited) { - result.flyed_distance = raycast_len_; - sender.Get()->IncDisableMoveTimes(); - sender.Get()->IncDisableAttackDirTimes(); - auto sender_p = sender; - sender.Get()->room->xtimer.SetTimeoutEx - ( - std::ceil((result.flyed_distance / gun_meta->bullet_speed() / 2) * SERVER_FRAME_RATE), - [sender_p] (int event, const a8::Args* args) mutable - { - if (a8::TIMER_EXEC_EVENT == event) { - sender_p.Get()->RemoveBuffById(kKeepShotAnimiBuffId); - } - }, - &sender.Get()->xtimer_attacher - ); - sender.Get()->room->xtimer.SetTimeoutEx - ( - (0.75 + result.flyed_distance / gun_meta->bullet_speed() / 2) * SERVER_FRAME_RATE, - [sender_p] (int event, const a8::Args* args) mutable - { - if (a8::TIMER_EXEC_EVENT == event) { - sender_p.Get()->DecDisableMoveTimes(); - sender_p.Get()->DecDisableAttackDirTimes(); - sender_p.Get()->GetTrigger()->FlyHookDestory(); - } - }, - &sender.Get()->xtimer_attacher - ); - sender.Get()->TryAddBuff(sender.Get(), gun_meta->_int_param2); + if (raycast_hited) { + if (result.flyed_distance > 0.001f) { + sender.Get()->AutoNavigation(GetPos(), gun_meta->bullet_speed() * 2, + [] (Creature* c) + { + + }); + sender.Get()->IncDisableMoveTimes(); + auto sender_p = sender; + sender.Get()->room->xtimer.SetTimeoutEx + ( + (raycast_len_ / gun_meta->bullet_speed() / 2 + 0.75) * SERVER_FRAME_RATE, + [sender_p] (int event, const a8::Args* args) mutable + { + if (a8::TIMER_EXEC_EVENT == event) { + sender_p.Get()->DecDisableMoveTimes(); + sender_p.Get()->GetTrigger()->FlyHookDestory(); + } + }, + &sender.Get()->xtimer_attacher + ); + sender.Get()->RemoveBuffById(kKeepShotAnimiBuffId); + sender.Get()->TryAddBuff(sender.Get(), gun_meta->_int_param2); + } + } else { + sender.Get()->IncDisableMoveTimes(); + sender.Get()->IncDisableAttackDirTimes(); + auto sender_p = sender; + sender.Get()->room->xtimer.SetTimeoutEx + ( + std::ceil((result.flyed_distance / gun_meta->bullet_speed() / 2) * SERVER_FRAME_RATE), + [sender_p] (int event, const a8::Args* args) mutable + { + if (a8::TIMER_EXEC_EVENT == event) { + sender_p.Get()->RemoveBuffById(kKeepShotAnimiBuffId); + } + }, + &sender.Get()->xtimer_attacher + ); + sender.Get()->room->xtimer.SetTimeoutEx + ( + (0.75 + result.flyed_distance / gun_meta->bullet_speed() / 2) * SERVER_FRAME_RATE, + [sender_p] (int event, const a8::Args* args) mutable + { + if (a8::TIMER_EXEC_EVENT == event) { + sender_p.Get()->DecDisableMoveTimes(); + sender_p.Get()->DecDisableAttackDirTimes(); + sender_p.Get()->GetTrigger()->FlyHookDestory(); + } + }, + &sender.Get()->xtimer_attacher + ); + sender.Get()->TryAddBuff(sender.Get(), gun_meta->_int_param2); + } } } ForceRemove();