From f2ff2b65afd01903a0f451cb600070abb3c2f2e4 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sun, 2 Apr 2023 11:24:10 +0800 Subject: [PATCH] 1 --- server/gameserver/room.cc | 19 ++++++++++++++++++- server/gameserver/room.h | 3 ++- server/gameserver/shot.cc | 3 ++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 9b1b7335..5610640c 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -608,7 +608,8 @@ int Room::CreateBullet(Creature* sender, int hand, a8::XTimerWp keep_shot_animi_timer_ptr, float shot_animi_time, - int weapon_buff_id) + int weapon_buff_id, + std::shared_ptr> reporter_list) { int bullet_uniid = 0; if (grid_service->CanAdd(pos.x, pos.z)) { @@ -632,6 +633,7 @@ int Room::CreateBullet(Creature* sender, bullet->keep_shot_animi_timer_ptr = keep_shot_animi_timer_ptr; bullet->shot_animi_time = shot_animi_time; bullet->spec_gun_buff_id = weapon_buff_id; + bullet->reporter_list = reporter_list; bullet->Initialize(); #ifdef DEBUG1 a8::XPrintf("xxxxxxx born_pos:%f,%f,%f curr_pos:%f,%f,%f\n", @@ -3575,4 +3577,19 @@ bool Room::FindWalkablePointWithOutHouse(const glm::vec3& center, int try_count, void Room::AddReportBullet(int bullet_uniid) { report_bullet_hash[bullet_uniid] = GetFrameNo(); + xtimer.SetTimeoutEx + ( + SERVER_FRAME_RATE * 10, + [this, bullet_uniid] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + report_bullet_hash.erase(bullet_uniid); + Entity* entity = GetEntityByUniId(bullet_uniid); + if (entity && entity->GetEntityType() == ET_Bullet) { + Bullet* bullet = (Bullet*)entity; + bullet->ForceRemove(); + } + } + }, + &xtimer_attacher_); } diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 8c0323b7..259ff467 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -153,7 +153,8 @@ public: int hand, a8::XTimerWp keep_shot_animi_timer_ptr, float shot_animi_time, - int weapon_buff_id); + int weapon_buff_id, + std::shared_ptr> reporter_list); Car* CreateCar(Human* driver, int car_uniid, const mt::Equip* meta, diff --git a/server/gameserver/shot.cc b/server/gameserver/shot.cc index 9ad76b16..7cfd38cb 100644 --- a/server/gameserver/shot.cc +++ b/server/gameserver/shot.cc @@ -215,7 +215,8 @@ static void InternalCreateBullet(BulletInfo& bullet_info) bullet_info.hand, bullet_info.keep_shot_animi_timer_ptr, bullet_info.shot_animi_time, - bullet_info.weapon_buff_id); + bullet_info.weapon_buff_id, + nullptr); #ifdef DEBUG1 if (bullet_info.c.Get()->IsPlayer()) { bullet_info.c.Get()->SendDebugMsg(a8::Format("CreateBullet id:%d",