From f5dd02c3410bae2e6c98569e7bbedf79db254ebc Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 10 Oct 2022 14:22:39 +0800 Subject: [PATCH] 1 --- server/gameserver/bullet.cc | 8 +++++--- server/gameserver/bullet.h | 1 + server/gameserver/creature.cc | 8 +++++++- server/gameserver/room.cc | 4 +++- server/gameserver/room.h | 3 ++- 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 9d49aa1d..9e8d0e4e 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -50,9 +50,11 @@ void Bullet::Initialize() void Bullet::Update(int delta_time) { - if (!trace_target_id) { - MapServiceUpdate(); - ++updated_times_; + if (shot_animi_time <= (room->GetFrameNo() - create_frameno_) * FRAME_RATE_MS) { + if (!trace_target_id) { + MapServiceUpdate(); + ++updated_times_; + } } } diff --git a/server/gameserver/bullet.h b/server/gameserver/bullet.h index 6ad10db8..0500106e 100644 --- a/server/gameserver/bullet.h +++ b/server/gameserver/bullet.h @@ -36,6 +36,7 @@ class Bullet : public MoveableEntity int strengthen_wall = 0; int hand = 0; std::weak_ptr keep_shot_animi_timer_ptr; + float shot_animi_time = 0.0f; virtual ~Bullet() override; virtual void Initialize() override; diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index cb4b3422..7600ac58 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -43,6 +43,7 @@ struct BulletInfo float track_change_time = 0; int is_through = 0; int hand = 0; + float shot_animi_time = 0; std::weak_ptr keep_shot_animi_timer_ptr; }; @@ -94,7 +95,8 @@ static void InternalCreateBullet(BulletInfo& bullet_info) bullet_info.weapon_uniid, bullet_info.trace_target_uniid, bullet_info.hand, - bullet_info.keep_shot_animi_timer_ptr); + bullet_info.keep_shot_animi_timer_ptr, + bullet_info.shot_animi_time); #ifdef DEBUG1 if (bullet_info.c.Get()->IsPlayer()) { bullet_info.c.Get()->SendDebugMsg(a8::Format("CreateBullet id:%d", @@ -325,6 +327,9 @@ void InternalShot(Creature* c, } bullet_dir.Rotate(bullet_angle / 180.0f); int shot_animi_time = (shot_animi ? shot_animi->t : 0); + if (shot_animi_time > 0) { + shot_animi_time = std::max(100, shot_animi_time); + } { bool is_player = c->IsPlayer(); bool is_car = c->IsCar(); @@ -382,6 +387,7 @@ void InternalShot(Creature* c, bullet_info->invincible_buff_uniid = invincible_buff_uniid; bullet_info->trace_target_uniid = trace_target_uniid; bullet_info->keep_shot_animi_timer_ptr = keep_shot_animi_timer_ptr; + bullet_info->shot_animi_time = shot_animi_time; if (skill_meta && (skill_meta->GetMagicId() == MAGIC_AXXF || skill_meta->GetMagicId() == MAGIC_HJHX)) { diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 43eab4d5..7b927be1 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -599,7 +599,8 @@ int Room::CreateBullet(Creature* sender, long long weapon_uniid, int trace_target_id, int hand, - std::weak_ptr keep_shot_animi_timer_ptr) + std::weak_ptr keep_shot_animi_timer_ptr, + float shot_animi_time) { int bullet_uniid = 0; if (grid_service->CanAdd(pos.x, pos.y)) { @@ -621,6 +622,7 @@ int Room::CreateBullet(Creature* sender, bullet->trace_target_id = trace_target_id; bullet->hand = hand; bullet->keep_shot_animi_timer_ptr = keep_shot_animi_timer_ptr; + bullet->shot_animi_time = shot_animi_time; bullet->Initialize(); AddObjectLater(bullet); bullet_uniid = bullet->GetUniId(); diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 8bd6b923..e8cab542 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -173,7 +173,8 @@ public: long long weapon_uniid, int trace_target_id, int hand, - std::weak_ptr keep_shot_animi_timer_ptr); + std::weak_ptr keep_shot_animi_timer_ptr, + float shot_animi_time); Car* CreateCar(Human* driver, int car_uniid, MetaData::Equip* meta,