diff --git a/server/gameserver/framemaker.cc b/server/gameserver/framemaker.cc index a3514b6d..d31c72cb 100644 --- a/server/gameserver/framemaker.cc +++ b/server/gameserver/framemaker.cc @@ -175,7 +175,9 @@ void FrameMaker::PostProcess(cs::SMUpdate* msg, Room* room, Human* hum, FrameDat int left_time = room->GetMobaLeftTime(); msg->set_game_left_time(left_time); } - room->GetSandTable()->FillMFSandTable(msg, hum, framedata); + if (room->SupportSandTable()) { + room->GetSandTable()->FillMFSandTable(msg, hum, framedata); + } } void FrameMaker::SerializeLootObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 2bcbb29f..d8c907a3 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -1565,39 +1565,95 @@ void Room::UpdateGasInactivePvp() } } else { - ShuaPlane(); - RoomMgr::Instance()->ActiveRoom(GetRoomUuid()); + if (IsNoPlane()) { + RoomMgr::Instance()->ActiveRoom(GetRoomUuid()); + { + const mt::SafeArea* first_safearea = mt::SafeArea::GetByType + (map_meta_->RandSafeArea()); + gas_data_.SetGasMode(GasWaiting); + gas_data_.old_area_meta = first_safearea; + gas_data_.new_area_meta = mt::SafeArea::GetById(first_safearea->id() + 1); + gas_data_.pos_list = mt::SafeAreaPos::RandSafeAreaPos(first_safearea->id()); + gas_data_.gas_progress = gas_data_.old_area_meta->rad(); + gas_data_.gas_start_frameno = GetFrameNo(); #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_); + gas_data_.pos_old = glm::vec2(first_safearea->x1(), + first_safearea->y1()); #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_); + gas_data_.pos_old = map_meta_->first_safearea_center; #endif + gas_data_.pos_old_bk = gas_data_.pos_old; + { + if (gas_data_.pos_list && !gas_data_.pos_list->_poses.empty()) { + gas_data_.pos_old = glm::vec2( + gas_data_.pos_list->_poses[0].x, + gas_data_.pos_list->_poses[0].z + ); + gas_data_.pos_old_bk = gas_data_.pos_old; + } + bool gen_ok = GenSmallCircle(); + if (!gen_ok) { + A8_ABORT(); + } + } + gas_data_.rad_old = gas_data_.old_area_meta->rad(); + gas_data_.rad_new = gas_data_.new_area_meta->rad(); + if (map_meta_->init_gas_ring() > 0) { + ForwardGasRing(map_meta_->init_gas_ring()); + } + } + TraverseHumanList + ( + [] (Human* hum) -> bool + { + hum->RemoveBuffByEffectId(kBET_ThroughWall); + hum->OnLand(); + if (hum->GetEntitySubType() == EST_Player) { + GameLog::Instance()->GameStart((Player*)hum); + } + return true; + }); + NotifyUiUpdate(); + NotifyGameStart(); + sand_table_->OnGameStart(); + if (custom_battle_) { + + } + } 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 MYDEBUG a8::XPrintf("max_run_delay:%d %d\n", {PerfMonitor::Instance()->max_run_delay_time, @@ -3527,7 +3583,7 @@ void Room::ForceOver() bool Room::SupportSandTable() { - return true; + return map_meta_->support_sandtable(); } void Room::OnAddHuman(Human* hum) @@ -4016,3 +4072,8 @@ void Room::SendRecentBattle() { } + +bool Room::IsNoPlane() +{ + return true; +} diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 6baf5308..17569637 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -306,6 +306,7 @@ public: bool IsAlreadyRoomReportBattle() { return already_room_report_battle_; } int GetReportMapMode(); void StartOverTimer(); + bool IsNoPlane(); std::shared_ptr GetInGameVoice() { return ingame_voice_; } diff --git a/server/gameserver/selfchecker.cc b/server/gameserver/selfchecker.cc index 3b5f3dfc..8910e815 100644 --- a/server/gameserver/selfchecker.cc +++ b/server/gameserver/selfchecker.cc @@ -253,8 +253,10 @@ void SelfChecker::Check() void SelfChecker::AddBuff(int buff_id) { + #if 0 if (!mt::Buff::GetById(buff_id)) { abort(); } + #endif used_buffs.insert(buff_id); }