diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index d2e731fd..d09fce47 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -2060,6 +2060,7 @@ void Team::FillSMGameOver(cs::SMGameOver& msg) bool PBUtils::SupportSandTable(int proto_version) { + return true; return proto_version >= 2023051601; } diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 3395b142..db8d881a 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -1257,44 +1257,65 @@ void Room::UpdateGasInactivePvp() FillTeam(); ClearPostBattleAutoFreeList(); OnBattleStart(); - ShuaPlane(); InitAndroidAI(); - RoomMgr::Instance()->ActiveRoom(GetRoomUuid()); - #if 1 - int auto_jump_interval = mt::Param::GetIntParam("auto_jump_interval"); - auto_jump_timer_ = xtimer.SetIntervalWpEx - (SERVER_FRAME_RATE * auto_jump_interval + SERVER_FRAME_RATE * 3, - [this] (int event, const a8::Args* args) - { - if (a8::TIMER_EXEC_EVENT == event) { - AutoJump(); - } - }, - &xtimer_attacher_); - #else - int auto_jump_interval_delay = mt::Param::GetIntParam("auto_jump_interval_delay"); - xtimer.SetTimeoutEx - ( - SERVER_FRAME_RATE * auto_jump_interval_delay, - [this] (int event, const a8::Args* args) - { - int auto_jump_interval = mt::Param::GetIntParam("auto_jump_interval"); - auto_jump_timer_ = xtimer.SetIntervalWpEx - (SERVER_FRAME_RATE * auto_jump_interval, - [this] (int event, const a8::Args* args) - { - if (a8::TIMER_EXEC_EVENT == event) { - AutoJump(); - } - }, - &xtimer_attacher_); - }, - &xtimer_attacher_); - #endif - #ifdef DEBUG - a8::XPrintf("max_run_delay:%d %d\n", {PerfMonitor::Instance()->max_run_delay_time, - a8::XGetTickCount() - begin_tick}); - #endif + if (IsSandTableRoom()) { + { + auto first_safearea = pve_mode_meta->_area[0]; + gas_data_.SetGasMode(GasWaiting); + gas_data_.gas_start_frameno = GetFrameNo(); + battle_start_frameno_ = GetFrameNo(); + gas_data_.old_area_meta = first_safearea; + gas_data_.new_area_meta = pve_mode_meta->_area[0]; + gas_data_.gas_start_frameno = GetFrameNo(); + gas_data_.pos_new = glm::vec2(gas_data_.new_area_meta->x1(), + gas_data_.new_area_meta->y1()); + gas_data_.pos_old = gas_data_.pos_new; + gas_data_.pos_old_bk = gas_data_.pos_old; + gas_data_.rad_old = gas_data_.old_area_meta->rad(); + gas_data_.rad_new = gas_data_.new_area_meta->rad(); + gas_data_.gas_progress = 0; + } + NotifyUiUpdate(); + NotifyGameStart(); + } else { + ShuaPlane(); + RoomMgr::Instance()->ActiveRoom(GetRoomUuid()); +#if 1 + int auto_jump_interval = mt::Param::GetIntParam("auto_jump_interval"); + auto_jump_timer_ = xtimer.SetIntervalWpEx + (SERVER_FRAME_RATE * auto_jump_interval + SERVER_FRAME_RATE * 3, + [this] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + AutoJump(); + } + }, + &xtimer_attacher_); +#else + int auto_jump_interval_delay = mt::Param::GetIntParam("auto_jump_interval_delay"); + xtimer.SetTimeoutEx + ( + SERVER_FRAME_RATE * auto_jump_interval_delay, + [this] (int event, const a8::Args* args) + { + int auto_jump_interval = mt::Param::GetIntParam("auto_jump_interval"); + auto_jump_timer_ = xtimer.SetIntervalWpEx + (SERVER_FRAME_RATE * auto_jump_interval, + [this] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + AutoJump(); + } + }, + &xtimer_attacher_); + }, + &xtimer_attacher_); +#endif + } +#ifdef DEBUG + a8::XPrintf("max_run_delay:%d %d\n", {PerfMonitor::Instance()->max_run_delay_time, + a8::XGetTickCount() - begin_tick}); +#endif } }