From 9e69d549ca7f3a1c8597469e322fb3ee92bb6ab2 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 20 Dec 2023 13:56:15 +0800 Subject: [PATCH] 1 --- server/gameserver/buff/callfunc.cc | 49 ++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/server/gameserver/buff/callfunc.cc b/server/gameserver/buff/callfunc.cc index a9da5c52..8cf7c7d5 100644 --- a/server/gameserver/buff/callfunc.cc +++ b/server/gameserver/buff/callfunc.cc @@ -19,6 +19,8 @@ #include "obstacle.h" #include "car.h" #include "app.h" +#include "bullet.h" +#include "virtualbullet.h" #include "mt/Buff.h" #include "mt/Equip.h" @@ -1308,5 +1310,52 @@ void CallFuncBuff::InternalRangeHoldBuff(std::function get_cen void CallFuncBuff::ThrowKnife() { + const mt::Equip* weapon_meta = mt::Equip::GetById(meta->_int_buff_param2); + if (!weapon_meta) { + return; + } + for (int i = 0; i < meta->_buff_param4_int_list.size(); ++i) { + glm::vec3 bullet_dir = GlmHelper::UP; + GlmHelper::RotateY(bullet_dir, meta->_buff_param4_int_list[i] / 180.f); + Position bullet_born_pos = owner->GetPos(); + bullet_born_pos.AddGlmVec3(bullet_dir * meta->_buff_param3); + int bullet_uniid = owner->room->AllocUniid(); + int shot_uniid = 0; + owner->room->frame_event.AddBullet + (bullet_uniid, + owner->GetWeakPtrRef(), + weapon_meta, + 1, + bullet_born_pos.ToGlmVec3(), + bullet_dir, + 0, + 0, + 0, + nullptr, + shot_uniid); + auto p = std::make_shared(); + p->bullet_uniid = bullet_uniid; + //p->weapon_uniid = bullet->weapon_uniid; + //p->skill_meta = bullet->skill_meta; + //p->gun_meta = bullet->gun_meta; + //p->bullet_meta = bullet->meta; + p->sender = owner->GetWeakPtrRef(); + //p->passenger = bullet->passenger; + p->room = owner->room; + //p->is_pre_battle_bullet = bullet->IsPreBattleBullet(); + p->dir = bullet_dir; + p->born_pos = bullet_born_pos; + p->born_dir = bullet_dir; + p->shot_uniid = shot_uniid; + p->Init(); + owner->room->AddTask(bullet_uniid, std::make_shared + ( + [p] (const a8::Args* args) + { + if (!p->IsDone()) { + p->Update(50); + } + })); + } }