From e4f4b2ff0eec1de60a9cc53c556e789e89d94d2d Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 30 Dec 2022 09:23:08 +0800 Subject: [PATCH] 1 --- server/gameserver/buff/machine_gun.cc | 170 +++++++++++++------------- server/gameserver/buff/machine_gun.h | 1 + 2 files changed, 89 insertions(+), 82 deletions(-) diff --git a/server/gameserver/buff/machine_gun.cc b/server/gameserver/buff/machine_gun.cc index 723c8630..15f4df9b 100644 --- a/server/gameserver/buff/machine_gun.cc +++ b/server/gameserver/buff/machine_gun.cc @@ -75,88 +75,7 @@ void MachineGunBuff::ProcSkill() break; case MAGIC_FG: { - bool shot_ok = false; - a8::Vec2 target_dir; - float fly_distance = 0; - int trace_target_uniid = 0; - owner->Shot(owner->context_dir, shot_ok, fly_distance, trace_target_uniid); - - owner->room->xtimer.ModifyTime - (remover_timer, - skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS); - event_handlers_.push_back - ( - owner->GetTrigger()->AddListener - ( - kSkillBulletPreCreateEvent, - [this] (const a8::Args& args) - { - int delay_time = args.Get(0); - const mt::Skill* bullet_skill_meta = args.Get(1); - int passed_frames = (owner->room->GetFrameNo() - add_frameno); - int raw_frames = skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS; - if (skill_meta == bullet_skill_meta && - delay_time >= (passed_frames - raw_frames - 2) * FRAME_RATE_MS) { - int remain_time = owner->room->xtimer.GetRemainTime(remover_timer); - owner->room->xtimer.ModifyTime - (remover_timer, delay_time / FRAME_RATE_MS + 2); - } -#ifdef DEBUG - a8::XPrintf("event1 %d %d %d\n", {passed_frames, raw_frames, delay_time}); -#endif - } - ) - ); - event_handlers_.push_back - ( - owner->GetTrigger()->AddListener - ( - kFlyHookCreateEvent, - [this] (const a8::Args& args) - { - Bullet* bullet = args.Get(0); - int passed_frames = (owner->room->GetFrameNo() - add_frameno); - int raw_frames = skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS; - owner->room->xtimer.ModifyTime - (remover_timer, - skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS); -#ifdef DEBUG - a8::XPrintf("event2 %d %d\n", {passed_frames, raw_frames}); -#endif - }) - ); - event_handlers_.push_back - ( - owner->GetTrigger()->AddListener - ( - kFlyHookDestoryEvent, - [this] (const a8::Args& args) - { - int passed_frames = (owner->room->GetFrameNo() - add_frameno); - int raw_frames = skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS; - if (passed_frames >= raw_frames) { - owner->RemoveBuffByUniId(buff_uniid); - } -#ifdef DEBUG - a8::XPrintf("event3 %d %d\n", {passed_frames, raw_frames}); -#endif - } - ) - ); -#ifdef DEBUG - { - std::string dbg_msg = a8::Format - ( - "skill_id:%d 飞钩 距离:%f 钩子持续时间:%f", - { - skill_meta->skill_id(), - skill_meta->_number_meta->_float_range, - skill_meta->_number_meta->_float_time, - }); - owner->SendDebugMsg(dbg_msg); - a8::XPrintf("%s\n", {dbg_msg}); - } -#endif + FgSkill(); } break; default: @@ -166,3 +85,90 @@ void MachineGunBuff::ProcSkill() } } } + +void MachineGunBuff::FgSkill() +{ + bool shot_ok = false; + a8::Vec2 target_dir; + float fly_distance = 0; + int trace_target_uniid = 0; + owner->Shot(owner->context_dir, shot_ok, fly_distance, trace_target_uniid); + + owner->room->xtimer.ModifyTime + (remover_timer, + skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS); + event_handlers_.push_back + ( + owner->GetTrigger()->AddListener + ( + kSkillBulletPreCreateEvent, + [this] (const a8::Args& args) + { + int delay_time = args.Get(0); + const mt::Skill* bullet_skill_meta = args.Get(1); + int passed_frames = (owner->room->GetFrameNo() - add_frameno); + int raw_frames = skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS; + if (skill_meta == bullet_skill_meta && + delay_time >= (passed_frames - raw_frames - 2) * FRAME_RATE_MS) { + int remain_time = owner->room->xtimer.GetRemainTime(remover_timer); + owner->room->xtimer.ModifyTime + (remover_timer, delay_time / FRAME_RATE_MS + 2); + } +#ifdef DEBUG + a8::XPrintf("event1 %d %d %d\n", {passed_frames, raw_frames, delay_time}); +#endif + } + ) + ); + event_handlers_.push_back + ( + owner->GetTrigger()->AddListener + ( + kFlyHookCreateEvent, + [this] (const a8::Args& args) + { + Bullet* bullet = args.Get(0); + int passed_frames = (owner->room->GetFrameNo() - add_frameno); + int raw_frames = skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS; + owner->room->xtimer.ModifyTime + (remover_timer, + skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS); +#ifdef DEBUG + a8::XPrintf("event2 %d %d\n", {passed_frames, raw_frames}); +#endif + }) + ); + event_handlers_.push_back + ( + owner->GetTrigger()->AddListener + ( + kFlyHookDestoryEvent, + [this] (const a8::Args& args) + { + int passed_frames = (owner->room->GetFrameNo() - add_frameno); + int raw_frames = skill_meta->_number_meta->_float_time * 1000 / FRAME_RATE_MS; + if (passed_frames >= raw_frames) { + owner->RemoveBuffByUniId(buff_uniid); + } +#ifdef DEBUG + a8::XPrintf("event3 %d %d\n", {passed_frames, raw_frames}); +#endif + } + ) + ); +#ifdef DEBUG + { + std::string dbg_msg = a8::Format + ( + "skill_id:%d 飞钩 距离:%f 钩子持续时间:%f", + { + skill_meta->skill_id(), + skill_meta->_number_meta->_float_range, + skill_meta->_number_meta->_float_time, + }); + owner->SendDebugMsg(dbg_msg); + a8::XPrintf("%s\n", {dbg_msg}); + } +#endif + +} diff --git a/server/gameserver/buff/machine_gun.h b/server/gameserver/buff/machine_gun.h index ec850a27..93366ebc 100644 --- a/server/gameserver/buff/machine_gun.h +++ b/server/gameserver/buff/machine_gun.h @@ -13,4 +13,5 @@ class MachineGunBuff : public Buff void SwitchWeapons(); void ProcSkill(); + void FgSkill(); };