From 0ffc80f5a9a33e718a91e26b14c5a0d87f8ecbe9 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 6 Apr 2023 13:58:57 +0800 Subject: [PATCH] 1 --- server/gameserver/collision.cc | 2 +- server/gameserver/constant.h | 6 +-- server/gameserver/mapmgr.cc | 11 ++--- server/gameserver/mt/PveGeminiMode.cc | 2 +- server/gameserver/room.cc | 28 ++++++++--- server/gameserver/room.h | 4 +- server/gameserver/roommgr.cc | 67 ++++++++++++++++++++++++--- server/gameserver/roommgr.h | 3 +- server/gameserver/team.cc | 4 +- 9 files changed, 96 insertions(+), 31 deletions(-) diff --git a/server/gameserver/collision.cc b/server/gameserver/collision.cc index 89154058..a734cc3a 100644 --- a/server/gameserver/collision.cc +++ b/server/gameserver/collision.cc @@ -16,7 +16,7 @@ bool Collision::CheckBullet(IBullet* bullet, Creature* c) { return a8::IntersectCylinderCylinder ( - bullet->GetPos().ToGlmVec3(), bullet->GetHitRadius() * 0.6, 10, + bullet->GetPos().ToGlmVec3(), bullet->GetHitRadius() * 1.0, 10, c->GetPos().ToGlmVec3(), c->GetHitRadius(), 10 ); } diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index 1ac7747a..850026e1 100644 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -260,9 +260,9 @@ enum ObjectFlags_e enum RoomMode_e { - kChiJiMode = 0, - kDestoryMode = 2, - kSurvivalMode = 1, + kPvpMode = 0, + kPveMode = 1, + kPvpRankMode = 2, kRoomModeEnd }; diff --git a/server/gameserver/mapmgr.cc b/server/gameserver/mapmgr.cc index 84fdc45a..5351f31c 100644 --- a/server/gameserver/mapmgr.cc +++ b/server/gameserver/mapmgr.cc @@ -35,17 +35,12 @@ void MapMgr::Init() } } }); - #if 0 - if (mode_hash_.find(kZombieMode) == mode_hash_.end()) { + if (mode_hash_.find(kPvpMode) == mode_hash_.end()) { A8_ABORT(); } - #endif - if (mode_hash_.find(kChiJiMode) == mode_hash_.end()) { + if (mode_hash_.find(kPveMode) == mode_hash_.end()) { A8_ABORT(); } -#ifdef DMAP3D - MetaMgr::Instance()->CheckMapSpawnPoint(); -#endif } void MapMgr::UnInit() @@ -59,7 +54,7 @@ void MapMgr::UnInit() void MapMgr::AttachRoom(Room* room, RoomInitInfo& init_info) { if (init_info.pve_instance_id) { - init_info.room_mode = kSurvivalMode; + init_info.room_mode = kPveMode; room->pve_mode_meta = mt::PveGeminiMode::GetById(init_info.room_mode); if (!room->pve_mode_meta) { abort(); diff --git a/server/gameserver/mt/PveGeminiMode.cc b/server/gameserver/mt/PveGeminiMode.cc index 189c4e4a..c66c7bc4 100644 --- a/server/gameserver/mt/PveGeminiMode.cc +++ b/server/gameserver/mt/PveGeminiMode.cc @@ -67,7 +67,7 @@ namespace mt abort(); } } -. } + } int PveGeminiMode::CalcStar(int score) const { diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index a770a257..87e16882 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -926,12 +926,6 @@ bool Room::CanJoin(const std::string& accountid, int init_map_id, const cs::CMJoin& msg) { - if (self_room_mode < kChiJiMode) { - self_room_mode = kChiJiMode; - } - if (self_room_mode > kRoomModeEnd) { - self_room_mode = kChiJiMode; - } if (room_mode_ != self_room_mode) { return false; } @@ -946,7 +940,17 @@ bool Room::CanJoin(const std::string& accountid, return false; } #if 1 - return false; + Team* team = GetAliveTeam(); + if (!team) { + return false; + } + Human* hum = team->GetOneAliveMember(nullptr); + if (!hum) { + return false; + } + if (hum->team_uuid != msg.team_uuid()) { + return false; + } #endif } if (init_map_id != 0) { @@ -3646,3 +3650,13 @@ void Room::UpdateFrameCall() delete pdelnode; }//end while } + +int Room::GetReportRoomMode() +{ + return IsPveRoom() ? 1 : 0; +} + +int Room::GetPvpMatchMode() +{ + return GetRoomMode() == kPvpRankMode ? 1 : 0; +} diff --git a/server/gameserver/room.h b/server/gameserver/room.h index a2df5eca..e6c03eba 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -229,6 +229,8 @@ public: void AddFrameCall(FrameCallCb cb, void* context); void SetVictoryTeam(Team* team) { victory_team_ = team;}; Team* GetVictoryTeam() { return victory_team_;}; + int GetReportRoomMode(); + int GetPvpMatchMode(); private: void ShuaAndroid(); @@ -318,7 +320,7 @@ private: bool destorying_ = false; std::vector poly_ext_datas_; int room_idx_ = 0; - RoomMode_e room_mode_ = kChiJiMode; + RoomMode_e room_mode_ = kPvpMode; long long room_uuid_ = 0; const mt::Map* map_meta_ = nullptr; std::string map_tpl_name_; diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index 87bc35b5..99695fef 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -16,10 +16,15 @@ #include "matchmgr.h" #include "matchteam.h" #include "httpproxy.h" +#include "mapmgr.h" + #include "mt/Param.h" #include "mt/Text.h" #include "mt/Hero.h" - +#include "mt/Map.h" +#include "mt/PveGemini.h" +#include "mt/PveGeminiMode.h" +#include "mt/PveGeminiContent.h" #include #include @@ -142,14 +147,17 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) JoinErrorHandle(msg, 2, hdr.socket_handle); return; } - #if 1 { cs::CMJoin* mutable_msg = (cs::CMJoin*)&msg; - if (mutable_msg->room_mode() != kChiJiMode) { - mutable_msg->set_room_mode(kChiJiMode); - } + AdjustCMJoin(mutable_msg); +#ifdef DEBUG + a8::XPrintf("AdjustCMJoinAfter room_mode:%d pve_instance_id:%d\n", + { + msg.room_mode(), + msg.pve_instance_id() + }); +#endif } - #endif if (MatchMgr::Instance()->NeedMatch(msg)) { MatchMgr::Instance()->_CMJoin(hdr, msg); return; @@ -271,7 +279,7 @@ void RoomMgr::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg) }); return; } - if (room->GetRoomMode() != kChiJiMode) { + if (room->GetRoomMode() != kPvpMode) { send_reconnect_failed(hdr.socket_handle, 1, TEXT("battle_server_reconnect_failreason_only_chiji", "只有吃鸡模式支持重连")); return; @@ -846,3 +854,48 @@ void RoomMgr::SetMatchMode(int mode) { match_mode_ = mode; } + +void RoomMgr::AdjustCMJoin(cs::CMJoin* msg) +{ + if (msg->room_mode() < kPvpMode || + msg->room_mode() >= kRoomModeEnd) { +#ifdef DEBUG + a8::XPrintf("AdjustCMJoin room_mode:%d pve_instance_id:%d\n", + { + msg->room_mode(), + msg->pve_instance_id() + }); +#endif + msg->set_room_mode(kPvpMode); + msg->set_pve_instance_id(0); + return; + } + if (msg->room_mode() != kPveMode) { +#ifdef DEBUG + a8::XPrintf("AdjustCMJoin room_mode:%d pve_instance_id:%d\n", + { + msg->room_mode(), + msg->pve_instance_id() + }); +#endif + msg->set_pve_instance_id(0); + return; + } + if (msg->room_mode() == kPveMode) { + auto mode_meta = mt::PveGeminiMode::GetById(msg->room_mode()); + auto pve_instance = mt::PveGemini::GetById(msg->pve_instance_id()); + auto map_meta = MapMgr::Instance()->GetMapInstance(mode_meta ? mode_meta->map_id() : 0); + if (!mode_meta || !pve_instance || !map_meta) { +#ifdef DEBUG + a8::XPrintf("AdjustCMJoin room_mode:%d pve_instance_id:%d\n", + { + msg->room_mode(), + msg->pve_instance_id() + }); +#endif + msg->set_room_mode(kPvpMode); + msg->set_pve_instance_id(0); + return; + } + } +} diff --git a/server/gameserver/roommgr.h b/server/gameserver/roommgr.h index cb3c5676..2e988041 100644 --- a/server/gameserver/roommgr.h +++ b/server/gameserver/roommgr.h @@ -27,7 +27,7 @@ class Building; struct RoomInitInfo { int room_idx = 0; - RoomMode_e room_mode = kChiJiMode; + RoomMode_e room_mode = kPvpMode; long long room_uuid = 0; RoomType_e room_type = RT_NewBrid; int creator_game_times = 0; @@ -112,6 +112,7 @@ class RoomMgr : public a8::Singleton std::string GenTeamHashData(const std::string& team_uuid, std::map* team_hash); void OnJoinRoomOk(const cs::CMJoin& msg, Player* hum); void TeamRoomTimeOut(const std::string& team_uuid); + void AdjustCMJoin(cs::CMJoin* msg); private: int current_room_idx_ = 0; diff --git a/server/gameserver/team.cc b/server/gameserver/team.cc index 9fe287cb..25a9a813 100644 --- a/server/gameserver/team.cc +++ b/server/gameserver/team.cc @@ -261,7 +261,7 @@ void Team::GenBattleReportData(Human* player, a8::MutableXObject* params) params->SetVal("version", 2023030201); params->SetVal("battle_uuid", a8::XValue(player->battle_uuid)); params->SetVal("room_uuid", a8::XValue(room->GetRoomUuid())); - params->SetVal("room_mode", room->IsPveRoom() ? 1 : 0); + params->SetVal("room_mode", room->GetReportRoomMode()); params->SetVal("team_id", GetTeamId()); params->SetVal("team_mode", 1); params->SetVal("map_id", room->GetMapMeta()->map_id()); @@ -283,7 +283,7 @@ void Team::GenBattleReportData(Human* player, a8::MutableXObject* params) params->SetVal("pvp_total_human_num", room->GetHumanNum()); params->SetVal("pvp_alive_human_num", room->AliveCount()); params->SetVal("pvp_total_team_num", room->GetTeamNum()); - params->SetVal("pvp_match_mode", 0); + params->SetVal("pvp_match_mode", room->GetPvpMatchMode()); params->SetVal("pvp_team_kills", 0); // }