diff --git a/server/gameserver/custom_battle.cc b/server/gameserver/custom_battle.cc index 3dce9f4f..22950766 100644 --- a/server/gameserver/custom_battle.cc +++ b/server/gameserver/custom_battle.cc @@ -86,6 +86,7 @@ void CustomBattle::ParseResult(a8::XObject& obj) member->session_id_ = member_obj->Get("session_id").GetString(); member->name_ = member_obj->Get("name").GetString(); member->sex_ = member_obj->Get("sex"); + member->avatar_url_ = member_obj->Get("head_id").GetString(); member->battle_context_ = std::make_shared(); member->battle_context_->ParseResult(*member_obj); if (!member->battle_context_->parse_ok) { diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 1b1be6e6..5518aa4b 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -2462,7 +2462,7 @@ long long Room::GetGasInactiveTime() } #endif if (IsMobaModeRoom()) { - inactive_time = 16; + inactive_time = 7; } inactive_time = std::max((long long)0, inactive_time - acc_inactive_time_); if (IsNewerMap()) { diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index 4b08bfdb..3f2e98e1 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -29,9 +29,6 @@ #include "mt/Hero.h" #include "mt/Equip.h" #include "mt/Map.h" -#include "mt/PveGemini.h" -#include "mt/PveGeminiMode.h" -#include "mt/PveGeminiContent.h" #include #include @@ -41,42 +38,6 @@ static const int ROOM_NUM_UP_LIMIT = 1000; static const int HUM_NUM_DOWN_LIMIT = 2500; -static RoomType_e GetHumanRoomType(const std::shared_ptr netdata) -{ - long long hero_uniid = 0; - int hero_lv = 0; - int quality = 0; - netdata->GetHeroLvQuality(hero_uniid, hero_lv, quality); - if (netdata->join_msg->room_mode() == kPvpRankMode) { - #if 1 - auto rank_mode_conf = mt::Param::GetRankModeConfByHeroLv(hero_lv); - if (!rank_mode_conf) { - abort(); - } - #else - auto rank_mode_conf = mt::Param::GetRankModeConfByElo(netdata->GetElo()); - if (!rank_mode_conf) { - abort(); - } - #endif - return rank_mode_conf->room_type; - } else { - if (hero_lv < mt::Param::s().new_room_max_level) { - return RoomType_OldBrid1; - } -#if 1 - if (hero_lv < mt::Param::s().mid_room_max_level) { - return RoomType_OldBrid2; - } -#else - if (netdata->GetRank() < mt::Param::s().mid_room_max_rank) { - return RoomType_OldBrid2; - } -#endif - return RoomType_OldBrid3; - } -} - void RoomMgr::Init() { InstallReportStateTimer(); @@ -129,85 +90,6 @@ void RoomMgr::_CMJoin(f8::MsgHdr* hdr, const cs::CMJoin& msg) DispatchSpecRoom(hdr, msg); return; } - const mt::Map* map_meta = mt::Map::GetById(msg.mapid()); - if (!map_meta || !map_meta->IsOpen()) { - JoinErrorHandle(msg, 3, hdr->socket_handle); - return; - } - std::shared_ptr join_msg = std::make_shared(); - *join_msg = msg; - std::vector> join_msgs{join_msg}; - auto ip_saddr = hdr->ip_saddr; - auto socket_handle = hdr->socket_handle; - auto cb = - [ip_saddr, socket_handle, join_msg] - (std::vector>& results) - { - cs::CMJoin& msg = *join_msg; - if (RoomMgr::Instance()->IsLimitJoin()) { - RoomMgr::Instance()->JoinErrorHandle(msg, 2, socket_handle); - return; - } - if (!results.at(0)->parse_ok) { - return; - } - int game_times = 0; - RoomType_e self_room_type = GetHumanRoomType(results.at(0)); - time_t register_time = f8::ExtractRegisterTimeFromSessionId(msg.session_id()); - int proto_version = msg.proto_version(); - int channel = f8::ExtractChannelIdFromAccountId(msg.account_id()); - std::shared_ptr room = RoomMgr::Instance()->GetJoinableRoom - ( - msg, - self_room_type, - game_times, - register_time, - proto_version, - channel - ); - if (!room) { -#ifdef MYDEBUG - a8::XPrintf("GetJoinableRoom error %s\n", {msg.account_id()}); -#endif - RoomMgr::Instance()->JoinErrorHandle(msg, 3, socket_handle); - return; - } - Player* hum = room->NewPlayer(); - hum->proto_version = msg.proto_version(); - #if 0 - hum->hero_uniid = a8::XValue(msg.hero_uniid()); - #endif - hum->battle_uuid = results.at(0)->battle_uuid; - hum->is_valid_battle = results.at(0)->is_valid_battle; - hum->payload = results.at(0)->payload; - PlayerMgr::Instance()-> - CreatePlayerByCMJoin(hum, - ip_saddr, - socket_handle, - msg - ); - hum->meta = mt::Hero::GetById(msg.hero_id()); - if (!hum->meta) { - hum->meta = mt::Param::s().human_meta; - } - hum->room = room.get(); - hum->SetNetData(results.at(0)); - hum->GetNetData()->Init(hum); - { - long long hero_uniid = 0; - int hero_lv = 1; - int quality = 1; - hum->GetNetData()->GetHeroLvQuality(hero_uniid, hero_lv, quality); - hum->hero_uniid = hero_uniid; - } - room->AddPlayer(hum); - hum->ProcSkillList(); - hum->SetHP(hum->GetNetData()->GetMaxHP()); - hum->SetMaxHP(hum->GetHP()); - PlayerMgr::Instance()->IncAccountNum(msg.account_id()); - RoomMgr::Instance()->OnJoinRoomOk(msg, hum); - }; - SendGetBattleData(0, join_msgs, cb); } void RoomMgr::_CMReconnect(f8::MsgHdr* hdr, const cs::CMReconnect& msg) @@ -274,66 +156,6 @@ int RoomMgr::OverRoomNum() return over_room_hash_.size(); } -std::shared_ptr RoomMgr::GetJoinableRoom(const cs::CMJoin& msg, - const RoomType_e self_room_type, - int game_times, - int creator_register_time, - int proto_version, - int channel - ) -{ - std::vector>> group_rooms; - for (int i = 0; i < RoomType_Max; ++i) { - group_rooms.push_back(std::vector>()); - } - for (auto& pair : inactive_room_hash_) { - auto& room = pair.second; - if (!room->GetCustomBattle() && - room->CanJoin(msg.account_id(), - self_room_type, - (RoomMode_e)msg.room_mode(), - proto_version, - channel, - msg.mapid(), - msg)) { - if (!msg.team_uuid().empty() && room->HaveMyTeam(msg.team_uuid())) { - return room; - } - group_rooms[room->GetRoomType()].push_back(room); - } - } - - if (!group_rooms[self_room_type].empty()) { - return group_rooms[self_room_type][rand() % group_rooms[self_room_type].size()]; - } - if (msg.room_mode() == kPvpRankMode) { - } else { - if (self_room_type == RoomType_OldBrid2) { - for (auto& room : group_rooms[RoomType_OldBrid3]) { - if (room->GetGasInactiveReaminTime() > 8 && - room->GetPlayerNum() + 8 < room->GetRoomMaxPlayerNum()) { - return room; - } - } - } else if (self_room_type == RoomType_OldBrid3) { - for (auto& room : group_rooms[RoomType_OldBrid2]) { - if (room->GetGasInactiveReaminTime() > 8 && - room->GetPlayerNum() + 8 < room->GetRoomMaxPlayerNum()) { - return room; - } - } - } - } - return CreateRoom(self_room_type, - game_times, - creator_register_time, - proto_version, - channel, - msg.mapid(), - (RoomMode_e)msg.room_mode(), - nullptr); -} - std::shared_ptr RoomMgr::GetJoinableRoom(std::shared_ptr p) { if (p->IsMoba()) { @@ -634,196 +456,8 @@ bool RoomMgr::IsGM(const std::string& account_id) return gm_hash_.find(account_id) != gm_hash_.end(); } -std::string RoomMgr::GenTeamHashData(const std::string& team_uuid, std::map* team_hash) -{ - std::string data; - data += a8::Format("team_uuid:%s ", {team_uuid}); - for (auto pair : *team_hash) { - data += a8::Format("%s->%d ", {pair.first, pair.second}); - } - return data; -} - void RoomMgr::OnJoinRoomOk(const cs::CMJoin& msg, Player* hum) { - if (msg.team_uuid().empty()) { - return; - } - std::map* team_hash = nullptr; - { - auto itr = team_room_hash_.find(msg.team_uuid()); - if (itr == team_room_hash_.end()) { - team_room_hash_[msg.team_uuid()] = std::map(); - itr = team_room_hash_.find(msg.team_uuid()); - team_hash = &itr->second; - for (auto& team_member : msg.team_members()) { - team_hash->insert(std::make_pair(team_member.account_id(), "")); - } - std::string team_uuid = msg.team_uuid(); - f8::Timer::Instance()->SetTimeout - (1000 * 60, - [team_uuid] (int event, const a8::Args* args) - { - if (a8::TIMER_EXEC_EVENT == event) { - RoomMgr::Instance()->TeamRoomTimeOut(team_uuid); - } - } - ); - } else { - team_hash = &itr->second; - } - } - if (!team_hash) { - A8_ABORT(); - } - hum->init_team_member_num = team_hash->size(); - { - auto itr = team_hash->find(hum->account_id); - if (itr != team_hash->end()) { - itr->second = hum->room->GetRoomUuid(); - } else { - f8::UdpLog::Instance()->Warning - ("team_data:%s account_id:%s not exists", - { - GenTeamHashData(msg.team_uuid(), team_hash), - hum->account_id - }); - } - } -} - -void RoomMgr::TeamRoomTimeOut(const std::string& team_uuid) -{ - std::map* team_hash = nullptr; - { - auto itr = team_room_hash_.find(team_uuid); - if (itr != team_room_hash_.end()) { - team_hash = &itr->second; - } - } - if (team_hash) { - bool ok = true; - for (auto pair : *team_hash) { - if (pair.second.empty()) { - ok = false; - break; - } - } - if (!ok) { - f8::UdpLog::Instance()->Warning - ("team match failed team_data:%s ", - { - GenTeamHashData(team_uuid, team_hash), - }); - } - team_room_hash_.erase(team_uuid); - } else { - f8::UdpLog::Instance()->Warning - ("team not found team_uuid:s", - { - team_uuid - }); - } -} - -void RoomMgr::SendGetBattleData(int mode, - std::vector>& join_msgs, - std::function< - void(std::vector>&)> cb) -{ - if (join_msgs.empty()) { - abort(); - } - std::shared_ptr>> result = - std::make_shared>>(); - bool is_old_version = false; - for (auto& msg : join_msgs) { - std::shared_ptr context = std::make_shared(); - context->join_msg = msg; - context->battle_uuid = f8::App::Instance()->NewGlobalUuid(); - context->errcode = 100; - context->errmsg = ""; - result->push_back(context); - if (msg->proto_version() < 2022032201) { - is_old_version = true; - } - } - { - std::string url; - JsonDataMgr::Instance()->GetApiUrl(url); - if (url.find('?') != std::string::npos) { - url += "&c=Battle&a=getBattleData"; - } else { - url += "?&c=Battle&a=getBattleData"; - } - auto url_params = a8::MutableXObject::CreateObject(); - { - auto members = a8::MutableXObject::CreateArray(); - int i = 0; - for (auto msg : join_msgs) { - auto member = a8::MutableXObject::CreateObject(); - member->SetVal("account_id", msg->account_id()); - member->SetVal("session_id", msg->session_id()); - member->SetVal("hero_uniid", msg->hero_uniid()); - member->SetVal("battle_uuid", result->at(i)->battle_uuid); - member->SetVal("weapon_uuid1", - msg->weapons().size() > 0 ? msg->weapons(0).weapon_uniid() : ""); - member->SetVal("weapon_uuid2", - msg->weapons().size() > 1 ? msg->weapons(1).weapon_uniid() : ""); - #if 0 - member->SetVal("cmjoin", f8::PbToJson(msg.get())); - #endif - ++i; - members->Push(*member.get()); - } - url_params->SetVal("account_id", join_msgs[0]->account_id()); - url_params->SetVal("session_id", join_msgs[0]->session_id()); - url_params->SetVal("team_uuid", join_msgs[0]->team_uuid()); - url_params->SetVal("mode", mode); - url_params->SetVal("members", members->ToJsonStr()); - } - HttpProxy::Instance()->HttpGet - ( - [result, cb] - (bool ok, a8::XObject* rsp_obj, f8::HttpContext* ctx) - { - if (ok) { - f8::UdpLog::Instance()->Info - ("GetBattleData ok %s", - { - rsp_obj->ToJsonStr() - }); - - if (rsp_obj->GetType() == a8::XOT_OBJECT) { - int match_mode = rsp_obj->Get("match_mode"); - RoomMgr::Instance()->SetMatchMode(match_mode ? 1 : 0); - if (rsp_obj->HasKey("members")) { - auto members = rsp_obj->At("members"); - if (members->GetType() == a8::XOT_ARRAY && members->Size() == result->size()) { - for (int i = 0; i < members->Size(); ++i) { - auto& ctx = result->at(i); - auto member = members->At(i); - if (member->GetType() == a8::XOT_OBJECT) { - ctx->ParseResult(*member); - } - } - } - } - } - cb(*result); - } else { - f8::UdpLog::Instance()->Warning - ("GetBattleData error %s", - { - "" - }); - cb(*result); - } - }, - url.c_str(), - *url_params - ); - } } void RoomMgr::SetMatchMode(int mode) @@ -834,172 +468,6 @@ void RoomMgr::SetMatchMode(int mode) void RoomMgr::AdjustCMJoin(cs::CMJoin* msg) { msg->set_pve_instance_id(0); -#if 1 - const mt::Map* map_meta = mt::Map::GetById(msg->mapid()); - if (map_meta && map_meta->is_moba()) { - msg->set_room_mode(kMobaMode); -#if 0 - { - auto data = a8::MutableXObject::CreateObject(); - data->SetVal("zone_id", 1); - data->SetVal("node_id", 1); - data->SetVal("room_uuid", f8::App::Instance()->NewGlobalUuid()); - data->SetVal("start_time", f8::App::Instance()->GetNowTime()); - auto team_list = a8::MutableXObject::CreateArray(); - { - std::map test_members; - test_members[msg->account_id()] = msg->session_id(); - auto team = a8::MutableXObject::CreateObject(); - auto members = a8::MutableXObject::CreateArray(); - team->SetVal("team_uuid", f8::App::Instance()->NewGlobalUuid()); - for (auto& pair : test_members) { - auto member = a8::MutableXObject::CreateObject(); - member->SetVal("account_id", pair.first); - //member->SetVal("session_id", pair.second); - members->Push(*member.get()); - } - team->SetVal("members", *members.get()); - team_list->Push(*team.get()); - } - { - std::string test_account_id = "6513_2006_2"; - std::map test_members; - test_members[test_account_id] = test_account_id; - auto team = a8::MutableXObject::CreateObject(); - auto members = a8::MutableXObject::CreateArray(); - team->SetVal("team_uuid", f8::App::Instance()->NewGlobalUuid()); - for (auto& pair : test_members) { - auto member = a8::MutableXObject::CreateObject(); - member->SetVal("account_id", pair.first); - //member->SetVal("session_id", pair.second); - members->Push(*member.get()); - } - team->SetVal("members", *members.get()); - team_list->Push(*team.get()); - } - #if 0 - { - std::string test_account_id = "6513_2006_3"; - std::map test_members; - test_members[test_account_id] = test_account_id; - auto team = a8::MutableXObject::CreateObject(); - auto members = a8::MutableXObject::CreateArray(); - team->SetVal("team_uuid", f8::App::Instance()->NewGlobalUuid()); - for (auto& pair : test_members) { - auto member = a8::MutableXObject::CreateObject(); - member->SetVal("account_id", pair.first); - //member->SetVal("session_id", pair.second); - members->Push(*member.get()); - } - team->SetVal("members", *members.get()); - team_list->Push(*team.get()); - } - #endif - data->SetVal("team_list", *team_list.get()); - { - std::string custom_data = a8::openssl::md5 - (data->ToJsonStr() + "520d8eAbB(8cf1^#$^&!@d833a42c820432PDAFE^^)") + ":moba_room|" + - data->ToJsonStr(); - msg->set_payload_data(custom_data); - } - } -#endif - return; - } -#endif -#ifdef MYDEBUG1 - { - auto data = a8::MutableXObject::CreateObject(); - data->SetVal("zone_id", 1); - data->SetVal("node_id", 1); - data->SetVal("room_uuid", f8::App::Instance()->NewGlobalUuid()); - data->SetVal("start_time", f8::App::Instance()->GetNowTime()); - auto team_list = a8::MutableXObject::CreateArray(); - { - std::map test_members; - test_members[msg->account_id()] = msg->session_id(); - auto team = a8::MutableXObject::CreateObject(); - auto members = a8::MutableXObject::CreateArray(); - team->SetVal("team_uuid", f8::App::Instance()->NewGlobalUuid()); - for (auto& pair : test_members) { - auto member = a8::MutableXObject::CreateObject(); - member->SetVal("account_id", pair.first); - //member->SetVal("session_id", pair.second); - members->Push(*member.get()); - } - team->SetVal("members", *members.get()); - team_list->Push(*team.get()); - } - { - std::string test_account_id = "6513_2006_2"; - std::map test_members; - test_members[test_account_id] = test_account_id; - auto team = a8::MutableXObject::CreateObject(); - auto members = a8::MutableXObject::CreateArray(); - team->SetVal("team_uuid", f8::App::Instance()->NewGlobalUuid()); - for (auto& pair : test_members) { - auto member = a8::MutableXObject::CreateObject(); - member->SetVal("account_id", pair.first); - //member->SetVal("session_id", pair.second); - members->Push(*member.get()); - } - team->SetVal("members", *members.get()); - team_list->Push(*team.get()); - } - { - std::string test_account_id = "6513_2006_3"; - std::map test_members; - test_members[test_account_id] = test_account_id; - auto team = a8::MutableXObject::CreateObject(); - auto members = a8::MutableXObject::CreateArray(); - team->SetVal("team_uuid", f8::App::Instance()->NewGlobalUuid()); - for (auto& pair : test_members) { - auto member = a8::MutableXObject::CreateObject(); - member->SetVal("account_id", pair.first); - //member->SetVal("session_id", pair.second); - members->Push(*member.get()); - } - team->SetVal("members", *members.get()); - team_list->Push(*team.get()); - } - data->SetVal("team_list", *team_list.get()); - { - std::string custom_data = a8::openssl::md5 - (data->ToJsonStr() + "520d8eAbB(8cf1^#$^&!@d833a42c820432PDAFE^^)") + "|" + - data->ToJsonStr(); - msg->set_custom_room_payload(custom_data); - } - } -#endif -#ifdef MYDEBUG - a8::XPrintf("custom_room_payload %s\n", - { - msg->payload_data() - }); -#endif -#if 0 - if (msg->proto_version() < cs::ProtoVersion) { - msg->set_mapid(2001); - } -#endif -#ifdef MYDEBUG1 - if (DebugCmd::Enable()) { - msg->set_room_mode(kPvpRankMode); - } -#endif - if (msg->room_mode() < kPvpMode || - msg->room_mode() >= kRoomModeEnd) { -#ifdef MYDEBUG - 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; - } } std::shared_ptr RoomMgr::GetCustomRoom(const std::string& room_uuid) diff --git a/server/gameserver/roommgr.h b/server/gameserver/roommgr.h index 97ba59dc..5e8a1cbd 100644 --- a/server/gameserver/roommgr.h +++ b/server/gameserver/roommgr.h @@ -7,6 +7,7 @@ #include #include "netdata.h" + namespace cs { class CMJoin; @@ -23,7 +24,6 @@ namespace MetaData class GridService; class MapService; class MapInstance; -class Building; class CustomBattle; struct RoomInitInfo { @@ -78,10 +78,6 @@ class RoomMgr : public a8::Singleton std::shared_ptr GetRoomByUuid(const std::string& uuid); void AddOverRoom(const std::string& room_uuid); bool IsGM(const std::string& account_id); - void SendGetBattleData(int mode, - std::vector>& join_msgs, - std::function< - void(std::vector>&)> cb); int GetMatchMode() { return match_mode_; }; void SetMatchMode(int mode); bool HasTask(); @@ -90,12 +86,6 @@ class RoomMgr : public a8::Singleton private: void InstallReportStateTimer(); std::shared_ptr GetRoomByIdx(int room_idx); - std::shared_ptr GetJoinableRoom(const cs::CMJoin& msg, - const RoomType_e self_room_type, - int game_times, - int creator_register_time, - int proto_version, - int channel); std::shared_ptr GetJoinableRoom(std::shared_ptr p); void ReportServerState(int instance_id, const std::string& host, int port); void FreeOverRoom(const std::string& room_uuid); @@ -111,8 +101,6 @@ class RoomMgr : public a8::Singleton RoomMode_e room_mode, std::shared_ptr custom_battle); void JoinErrorHandle(const cs::CMJoin& msg, int error_code, int socket_handle); - std::string GenTeamHashData(const std::string& team_uuid, std::map* team_hash); - void TeamRoomTimeOut(const std::string& team_uuid); void AdjustCMJoin(cs::CMJoin* msg); std::shared_ptr GetCustomRoom(const std::string& room_uuid); std::shared_ptr GetHisCustomRoom(const std::string& room_uuid); @@ -132,7 +120,6 @@ class RoomMgr : public a8::Singleton std::map> over_room_hash_; f8::Attacher reportstate_timer_attacher_; std::map gm_hash_; - std::map> team_room_hash_; std::map> custom_room_hash_; std::map> his_custom_room_hash_; }; diff --git a/server/gameserver/team.h b/server/gameserver/team.h index 1968341d..99a6eda0 100644 --- a/server/gameserver/team.h +++ b/server/gameserver/team.h @@ -46,7 +46,6 @@ class Team : public std::enable_shared_from_this bool CanCombine(Human* member); void AddCombineMemberNum(int member_num); Human* GetMemberByUniId(int member_id); - int GetInitTeamMemberNum() { return init_team_member_num_; }; bool HasReviveCoin(Human* member); bool IsFreeTeam(); bool HasPlayer();