diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 902658e..4f77824 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1364,7 +1364,7 @@ void Human::FillMFGasData(cs::MFGasData* gas_data) { gas_data->set_mode(room->gas_data.gas_mode); if (room->gas_data.gas_mode == GasInactive) { - long long duration = MetaMgr::Instance()->gas_inactive_time * SERVER_FRAME_RATE - + long long duration = room->GetGasInactiveTime() * SERVER_FRAME_RATE - (room->frame_no - room->gas_data.gas_start_frameno); gas_data->set_duration(std::max(duration * 50, (long long)1000) / 1000); } else if (room->gas_data.gas_mode == GasJump) { diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 895bcab..fd6a684 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -128,6 +128,7 @@ public: #if 1 { MetaMgr::Instance()->gas_inactive_time = MetaMgr::Instance()->GetSysParamAsInt("gas_inactive_time"); + MetaMgr::Instance()->newbie_gas_inactive_time = MetaMgr::Instance()->GetSysParamAsInt("newbie_gas_inactive_time", 10); MetaMgr::Instance()->newbie_wait_time = MetaMgr::Instance()->GetSysParamAsInt("newbie_wait_time", 10); MetaMgr::Instance()->jump_time = MetaMgr::Instance()->GetSysParamAsFloat("jump_time"); MetaMgr::Instance()->K = MetaMgr::Instance()->GetSysParamAsFloat("K"); diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index fbe222a..e829ffc 100755 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -47,6 +47,7 @@ class MetaMgr : public a8::Singleton MetaData::Robot* GetRobot(int robot_id); int gas_inactive_time = 10; + int newbie_gas_inactive_time = 10; int newbie_wait_time = 10; int jump_time = 10; float K = 100.0f; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 97113e5..8f1e3f5 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -598,7 +598,7 @@ bool Room::CanJoin(const std::string& accountid, RoomType_e self_room_type) return false; } if (self_room_type == RT_NewBrid) { - int remain_time_ms = MetaMgr::Instance()->gas_inactive_time * 1000 - + int remain_time_ms = GetGasInactiveTime() * 1000 - (frame_no - gas_data.gas_start_frameno) * FRAME_RATE_MS; remain_time_ms = std::max(remain_time_ms, 0); if (remain_time_ms <= MetaMgr::Instance()->newbie_wait_time * 1000) { @@ -840,8 +840,7 @@ void Room::UpdateGas() void Room::UpdateGasInactive() { - if (frame_no - gas_data.gas_start_frameno >= - MetaMgr::Instance()->gas_inactive_time * SERVER_FRAME_RATE) { + if (frame_no - gas_data.gas_start_frameno >= GetGasInactiveTime() * SERVER_FRAME_RATE) { gas_data.gas_mode = GasWaiting; gas_data.old_area_meta = MetaMgr::Instance()->GetSafeArea(30001); gas_data.new_area_meta = MetaMgr::Instance()->GetSafeArea(30002); @@ -1597,3 +1596,12 @@ ObstacleData* Room::GetPermanentObstacleData(int entity_uniid) return nullptr; } } + +long long Room::GetGasInactiveTime() +{ + if (room_type == RT_NewBrid) { + return MetaMgr::Instance()->newbie_gas_inactive_time; + } else { + return MetaMgr::Instance()->gas_inactive_time; + } +} diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 61bcadd..59b5430 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -113,6 +113,7 @@ public: int CreateAndTakeonCar(int car_id, a8::Vec2 pos); bool HaveMyTeam(const std::string& team_uuid); ObstacleData* GetPermanentObstacleData(int entity_uniid); + long long GetGasInactiveTime(); private: int AllocUniid();