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; //库存槽位