From 3a41ec1f5332088cb91a500635f8c4b0a3500a43 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 23 May 2024 15:11:45 +0800 Subject: [PATCH] 1 --- server/gameserver/attrdefine.h | 1 + server/gameserver/bullet.h | 1 + server/gameserver/frameevent.cc | 3 ++- server/gameserver/frameevent.h | 3 ++- server/gameserver/room.cc | 3 ++- server/gameserver/room.h | 3 ++- server/gameserver/shot.cc | 10 ++++++++-- 7 files changed, 18 insertions(+), 6 deletions(-) diff --git a/server/gameserver/attrdefine.h b/server/gameserver/attrdefine.h index c322469c..a427a016 100644 --- a/server/gameserver/attrdefine.h +++ b/server/gameserver/attrdefine.h @@ -74,5 +74,6 @@ A8_DECLARE_ENUM(HumanVirtualAttrType_e, kHVAT_DirectAtk = 1014, kHVAT_Volume = 1015, kHVAT_FireRate = 1016, + kHVAT_BulletScale = 1017, kHVAT_End ); diff --git a/server/gameserver/bullet.h b/server/gameserver/bullet.h index 2fafc127..b8d781ff 100644 --- a/server/gameserver/bullet.h +++ b/server/gameserver/bullet.h @@ -36,6 +36,7 @@ class Bullet : public MoveableEntity, public IBullet bool ignore_original_dmg = false; std::function on_bullet_exit = nullptr; int duration = 0; + std::shared_ptr scale; virtual ~Bullet() override; virtual void Initialize() override; diff --git a/server/gameserver/frameevent.cc b/server/gameserver/frameevent.cc index d1c380d4..8d4133b9 100644 --- a/server/gameserver/frameevent.cc +++ b/server/gameserver/frameevent.cc @@ -95,7 +95,8 @@ void FrameEvent::AddBullet(int bullet_uniid, std::shared_ptr> reporter_list, int shot_uniid, int force_player_id, - int duration) + int duration, + std::shared_ptr scale) { { auto& tuple = a8::FastAppend(room->frame_event_data->bullets_); diff --git a/server/gameserver/frameevent.h b/server/gameserver/frameevent.h index feb1992e..47cecd3a 100644 --- a/server/gameserver/frameevent.h +++ b/server/gameserver/frameevent.h @@ -29,7 +29,8 @@ public: std::shared_ptr> reporter_list, int shot_uniid, int force_player_id = 0, - int duration = 0); + int duration = 0, + std::shared_ptr = nullptr); void RemoveBullet(glm::vec3 pos, int bullet_uniid); void AddExplosion(Bullet* bullet, int item_id, Position bomb_pos); void AddPlaySkill(CreatureWeakPtr& sender, int skill_id); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index e9adc981..8003233c 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -809,7 +809,8 @@ int Room::CreateBullet(Creature* sender, std::shared_ptr> reporter_list, int shot_uniid, std::function on_bullet_exit, - int duration) + int duration, + std::shared_ptr scale) { int bullet_uniid = 0; if (grid_service->CanAdd(pos.x, pos.z)) { diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 6e768826..0980117e 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -192,7 +192,8 @@ public: std::shared_ptr> reporter_list, int shot_uniid, std::function on_bullet_exit, - int duration); + int duration, + std::shared_ptr scale); Car* CreateCar(Human* driver, int car_uniid, const mt::Equip* meta, diff --git a/server/gameserver/shot.cc b/server/gameserver/shot.cc index 74adc592..c2babe42 100644 --- a/server/gameserver/shot.cc +++ b/server/gameserver/shot.cc @@ -59,6 +59,7 @@ struct BulletInfo bool ignore_original_dmg = false; std::function on_bullet_exit; int duration = 0; + std::shared_ptr scale; }; static void CalcGunMuzzlePosition(Creature* c, @@ -286,7 +287,8 @@ static void InternalCreateBullet(BulletInfo& bullet_info) bullet_info.reporter_list, bullet_info.shot_uniid, bullet_info.on_bullet_exit, - bullet_info.duration); + bullet_info.duration, + bullet_info.scale); #ifdef MYDEBUG1 if (bullet_info.c.Get()->IsPlayer()) { bullet_info.c.Get()->SendDebugMsg(a8::Format("CreateBullet id:%d", @@ -330,7 +332,8 @@ static void InternalCreateBullet(BulletInfo& bullet_info) bullet_info.reporter_list, bullet_info.shot_uniid, 0, - bullet_info.duration); + bullet_info.duration, + bullet_info.scale); if (bullet_uniid && (bullet_info.trace_target_uniid || bullet_info.reporter_list)) { c->room->AddReportBullet( bullet_uniid @@ -550,6 +553,9 @@ void InternalShot(Creature* c, bullet_info.ignore_original_dmg = c->GetAbility()->GetSwitchTimes(kIgnoreOriginalDmg) > 0; bullet_info.on_bullet_exit = on_bullet_exit; bullet_info.duration = duration; + if (c->GetAbility()->HasAttr(kHVAT_BulletScale)) { + bullet_info.scale = std::make_shared(1.0f + c->GetAbility()->GetAttr(kHVAT_BulletScale)); + } if (shot_animi && shot_animi->is_other) { bullet_info.hand = shot_animi->GetShotHand(bulletIdx - 1); } else {