From 861848b946651713fc1abb2a60ae1d8ab0a016aa Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 2 Jul 2021 17:37:46 +0800 Subject: [PATCH 1/2] 1 --- server/gameserver/bullet.cc | 3 +++ server/gameserver/gridservice.cc | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index da36d76..7efcb05 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -236,6 +236,9 @@ void Bullet::ProcSmokeBomb() bool Bullet::IsBomb() { + if (!meta) { + return false; + } return meta->i->_inventory_slot() == IS_RPG || meta->i->_inventory_slot() == IS_FRAG || diff --git a/server/gameserver/gridservice.cc b/server/gameserver/gridservice.cc index 8c5f2da..86ddf19 100644 --- a/server/gameserver/gridservice.cc +++ b/server/gameserver/gridservice.cc @@ -84,6 +84,18 @@ void GridService::GetAllCellsByXy(Room* room, int x, int y, std::set& bool GridService::CanAdd(float x, float y) { + if (x < 0) { + return false; + } + if (y < 0) { + return false; + } + if (x > map_width_) { + return false; + } + if (y > map_height_) { + return false; + } int new_x = (int)x + cell_width_; int new_y = (int)x + cell_width_; return !BroderOverFlow(new_x, new_y); From d682d27422201996c349b3334a183ed15743654f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 23 Jul 2021 11:12:38 +0800 Subject: [PATCH 2/2] 1 --- server/gameserver/creature.cc | 21 ++++++++++++++++++++- server/tools/protobuild/metatable.proto | 1 + 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index c7f12fd..717c3e6 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1626,7 +1626,26 @@ void Creature::Shot(a8::Vec2& target_dir, bool& shot_ok, float fly_distance) } if (GetCurrWeapon()->weapon_idx != 0 && GetCurrWeapon()->ammo <= 0) { - AutoLoadingBullet(); + if (GetCurrWeapon()->meta->i->reload_delay_time() > 0) { + room->xtimer.AddDeadLineTimerAndAttach + ( + GetCurrWeapon()->meta->i->reload_delay_time() / FRAME_RATE_MS, + a8::XParams() + .SetSender(this) + .SetParam1(GetCurrWeapon()->weapon_id), + [] (const a8::XParams& param) + { + Creature* c = (Creature*)param.sender.GetUserData(); + int weapon_id = param.param1; + if (c->GetCurrWeapon()->weapon_id == weapon_id) { + c->AutoLoadingBullet(); + } + }, + &xtimer_attacher.timer_list_ + ); + } else { + AutoLoadingBullet(); + } } last_shot_frameno_ = room->GetFrameNo(); if ((IsPlayer() || IsCar())) { diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index 2b18247..aee166b 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -139,6 +139,7 @@ message Equip optional int32 use_scene = 60; optional int32 ispenetrate = 61; optional int32 is_penetrate_thing = 62; + optional int32 reload_delay_time = 63; optional string inventory_slot = 31; //库存槽位 optional int32 _inventory_slot = 32; //库存槽位