From 615b509c76e4981fc4d7b9fde5b11403b0429ae8 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 7 Aug 2020 10:16:49 +0800 Subject: [PATCH 01/19] 1 --- server/gameserver/loot.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/server/gameserver/loot.cc b/server/gameserver/loot.cc index 50dae5d..0033500 100644 --- a/server/gameserver/loot.cc +++ b/server/gameserver/loot.cc @@ -46,4 +46,5 @@ void Loot::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) p->set_item_id(item_id); p->set_count(count); + p->set_item_level(item_level); } From c85492693e77d2389d896dbdb5bb3bc227136a6e Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 7 Aug 2020 10:25:05 +0800 Subject: [PATCH 02/19] =?UTF-8?q?=E6=96=B0=E6=AD=A6=E5=99=A8=E7=AD=89?= =?UTF-8?q?=E7=BA=A7ok?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/metadata.cc | 8 +++++++- server/tools/protobuild/metatable.proto | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index 6302ab2..f06b786 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -3,6 +3,8 @@ #include "metadata.h" #include "metamgr.h" +#include "framework/cpp/utils.h" + namespace MetaData { void Parameter::Init() @@ -102,7 +104,11 @@ namespace MetaData } { std::vector strings; - a8::Split(i->attr_type(), strings, '|'); + if (f8::IsOnlineEnv()) { + a8::Split(i->attr_type(), strings, '|'); + } else { + a8::Split(i->spera_type(), strings, '|'); + } int level = 1; for (auto& str : strings) { if (str.empty()) { diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index c49b5f5..9ff3ce9 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -104,6 +104,7 @@ message EquipUpgrade { optional int32 id = 1; optional string attr_type = 4; + optional string spera_type = 5; } message Player From a7fc32cd265e4027b471db7a0b8bcc6ffcb0e355 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 7 Aug 2020 10:49:37 +0800 Subject: [PATCH 03/19] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8D=A2=E5=BC=B9?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/constant.h | 1 + server/gameserver/human.cc | 3 ++- server/gameserver/types.cc | 6 ++++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index e2ce0cc..f7b37fd 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -166,6 +166,7 @@ enum HumanAttrType_e kHAT_FireRate = 9, kHAT_Volume = 10, kHAT_MaxHp = 11, + kHAT_ReloadTime = 14, kHAT_BulletAngle = 20, kHAT_End }; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 8457009..1b9349a 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -829,7 +829,7 @@ void Human::AutoLoadingBullet(bool manual) on_loading_bullet(); } StartAction(AT_Reload, - p_weapon->meta->i->reload_time(), + p_weapon->GetAttrValue(kHAT_ReloadTime), p_weapon->weapon_id, p_weapon->weapon_idx); } @@ -848,6 +848,7 @@ void Human::StartAction(ActionType_e action_type, this->action_target_id == target_id) { return; } + action_duration = std::max(0, action_duration); this->action_type = action_type; this->action_frameno = room->GetFrameNo(); this->action_duration = action_duration; diff --git a/server/gameserver/types.cc b/server/gameserver/types.cc index 6065e3a..8e5f606 100644 --- a/server/gameserver/types.cc +++ b/server/gameserver/types.cc @@ -57,6 +57,12 @@ float Weapon::GetAttrValue(HumanAttrType_e attr_type) (upgrade_meta ? upgrade_meta->GetAttrValue(weapon_lv, attr_type) : 0); } break; + case kHAT_ReloadTime: + { + return meta->i->reload_time() - + (upgrade_meta ? upgrade_meta->GetAttrValue(weapon_lv, attr_type) : 0); + } + break; default: return 0; } From 9bb7891efbf9af34e15d5a100664b5d8c8294ddf Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 10 Aug 2020 11:37:26 +0800 Subject: [PATCH 04/19] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=AD=E7=BA=BF?= =?UTF-8?q?=E9=87=8D=E8=BF=9E=E5=8D=8F=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/tools/protobuild/cs_msgid.proto | 2 ++ server/tools/protobuild/cs_proto.proto | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/server/tools/protobuild/cs_msgid.proto b/server/tools/protobuild/cs_msgid.proto index 757acc8..42686a3 100644 --- a/server/tools/protobuild/cs_msgid.proto +++ b/server/tools/protobuild/cs_msgid.proto @@ -6,6 +6,7 @@ enum CMMessageId_e _CMPing = 101; _CMJoin = 103; + _CMReconnect = 104; _CMMove = 201; _CMEmote = 204; _CMVoice = 206; @@ -23,6 +24,7 @@ enum SMMessageId_e { _SMPing = 101; _SMRpcError = 102; + _SMReconnect = 104; _SMWatchWar = 208; _SMLeave = 209; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 3275ea6..d743aad 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -736,6 +736,23 @@ message CMJoin optional int32 room_mode = 52; //0:吃鸡模式 1:僵尸模式 } +//断线重连 +message CMReconnect +{ + optional int32 server_id = 1; //保留 + optional string team_uuid = 2; //保留 + optional string account_id = 3; //账号id + optional string room_uuid = 4; //房间唯一id + optional string server_info = 5; //服务器信息 +} + +//断线重连回复 +message SMReconnect +{ + optional int32 errcode = 1; //错误码 0:成功 1:重连失败 + optional string errmsg = 2; //错误描述 +} + //移动 message CMMove { @@ -860,6 +877,8 @@ message SMJoinedNotify optional int32 error_code = 7; //错误 1:服务器维护中 2:服务器繁忙请稍后再进入 optional int32 room_mode = 8; //0:吃鸡模式 1:僵尸模式 + + optional string server_info = 9; //服务器信息(重连时使用) } //地图信息 From 6e9a683fb543be467d602d485fd6f6f6acc6769e Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 10 Aug 2020 14:42:10 +0800 Subject: [PATCH 05/19] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=96=AD=E7=BA=BF?= =?UTF-8?q?=E9=87=8D=E8=BF=9E=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/handlermgr.cc | 1 + server/gameserver/player.cc | 13 +++++++++++ server/gameserver/player.h | 2 ++ server/gameserver/room.cc | 34 +++++++++++++++++++++-------- server/gameserver/room.h | 1 + server/gameserver/roommgr.cc | 38 +++++++++++++++++++++++++++++++++ server/gameserver/roommgr.h | 2 ++ 7 files changed, 82 insertions(+), 9 deletions(-) diff --git a/server/gameserver/handlermgr.cc b/server/gameserver/handlermgr.cc index f74da1b..fc2f4c0 100644 --- a/server/gameserver/handlermgr.cc +++ b/server/gameserver/handlermgr.cc @@ -84,6 +84,7 @@ void HandlerMgr::RegisterNetMsgHandlers() RegisterNetMsgHandler(&ggmsghandler, &PlayerMgr::_SS_WSP_SocketDisconnect); RegisterNetMsgHandler(&ggmsghandler, &PlayerMgr::_SS_Ping); RegisterNetMsgHandler(&ggmsghandler, &RoomMgr::_CMJoin); + RegisterNetMsgHandler(&ggmsghandler, &RoomMgr::_CMReconnect); RegisterNetMsgHandler(&ggmsghandler, &Player::_CMMove); RegisterNetMsgHandler(&ggmsghandler, &Player::_CMEmote); diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 955bb97..913fa40 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -906,6 +906,19 @@ void Player::ProcPrepareItems2(const ::google::protobuf::RepeatedPtrField< cs::M } } +void Player::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg) +{ + socket_handle = hdr.socket_handle; + TouchAllLayerHumanList + ( + [this] (Human* hum, bool& stop) + { + AddToNewObjects(hum); + } + ); + need_sync_active_player = true; +} + void Player::_CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg) { moving = false; diff --git a/server/gameserver/player.h b/server/gameserver/player.h index 79a204b..a9ecf9d 100644 --- a/server/gameserver/player.h +++ b/server/gameserver/player.h @@ -4,6 +4,7 @@ namespace cs { + class CMReconnect; class CMMove; class CMDropItem; class CMEmote; @@ -88,6 +89,7 @@ class Player : public Human void ProcPreSettlementInfo(const std::string& pre_settlement_info); void PushJoinRoomMsg(); + void _CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg); void _CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg); void _CMEmote(f8::MsgHdr& hdr, const cs::CMEmote& msg); void _CMVoice(f8::MsgHdr& hdr, const cs::CMVoice& msg); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 8554b25..bbcd570 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -768,15 +768,20 @@ bool Room::CanJoin(const std::string& accountid, void Room::OnPlayerOffline(Player* hum) { - bool has_player = false; - for (auto& pair : accountid_hash_) { - if (pair.second->socket_handle != 0) { - has_player = true; - } - } - if (!has_player) { - GameLog::Instance()->ForceOver(this); - RoomMgr::Instance()->AddOverRoom(room_uuid_); + if (GetOnlinePlayerNum() <= 0) { + xtimer.AddDeadLineTimer + ( + SERVER_FRAME_RATE * 40, + a8::XParams() + .SetSender(this), + [] (const a8::XParams& param) + { + Room* room = (Room*)param.sender.GetUserData(); + if (room->GetOnlinePlayerNum() <= 0) { + GameLog::Instance()->ForceOver(room); + RoomMgr::Instance()->AddOverRoom(room->room_uuid_); + } + }); } } @@ -3282,6 +3287,17 @@ int Room::GetAliveCountByRace(RaceType_e race) return count; } +int Room::GetOnlinePlayerNum() +{ + int num = 0; + for (auto& pair : accountid_hash_) { + if (pair.second->socket_handle != 0) { + ++num; + } + } + return num; +} + size_t Room::GetRoomMaxPlayerNum() { if (room_mode_ == kZombieMode) { diff --git a/server/gameserver/room.h b/server/gameserver/room.h index fe73eb2..c7dcbec 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -142,6 +142,7 @@ public: void NotifySysPiao(const std::string& msg, int color, int duration); void OnZombieAppear(Human* hum); int GetAliveCountByRace(RaceType_e race); + int GetOnlinePlayerNum(); private: int AllocUniid(); diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index ba8214e..9d379fa 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -164,6 +164,44 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) PlayerMgr::Instance()->IncAccountNum(msg.account_id()); } +void RoomMgr::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg) +{ + auto send_reconnect_failed = + [] (int socket_handle, int errcode, const std::string& errmsg) + { + cs::SMReconnect respmsg; + respmsg.set_errcode(errcode); + respmsg.set_errmsg(errmsg); + GGListener::Instance()->SendToClient(socket_handle, 0, respmsg); + a8::Timer::Instance()->AddDeadLineTimer + ( + 1000 * 3, + a8::XParams() + .SetSender(socket_handle), + [] (const a8::XParams& param) + { + GGListener::Instance()->ForceCloseClient(param.sender); + } + ); + }; + + Room* room = GetRoomByUuid(a8::XValue(msg.room_uuid())); + if (!room) { + send_reconnect_failed(hdr.socket_handle, 1, "房间已销毁"); + return; + } + if (room->GetRoomMode() == kChiJiMode) { + send_reconnect_failed(hdr.socket_handle, 1, "只有吃鸡模式支持重连"); + return; + } + Player* hum = room->GetPlayerByAccountId(msg.account_id()); + if (!hum) { + send_reconnect_failed(hdr.socket_handle, 1, "accountid未在房间列表"); + return; + } + hum->_CMReconnect(hdr, msg); +} + int RoomMgr::RoomNum() { return room_hash_.size(); diff --git a/server/gameserver/roommgr.h b/server/gameserver/roommgr.h index a579cb3..84b4b47 100644 --- a/server/gameserver/roommgr.h +++ b/server/gameserver/roommgr.h @@ -5,6 +5,7 @@ namespace cs { class CMJoin; + class CMReconnect; } class Room; @@ -23,6 +24,7 @@ class RoomMgr : public a8::Singleton void Update(int delta_time); void _CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg); + void _CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg); void ActiveRoom(long long room_uuid); int RoomNum(); int OverRoomNum(); From 7f45970f81a7bbd63468038d30c86a61ff1a2da1 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 10 Aug 2020 15:13:42 +0800 Subject: [PATCH 06/19] 1 --- server/tools/protobuild/cs_proto.proto | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 5c7e3ef..7208242 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -743,8 +743,9 @@ message CMReconnect optional int32 server_id = 1; //保留 optional string team_uuid = 2; //保留 optional string account_id = 3; //账号id - optional string room_uuid = 4; //房间唯一id - optional string server_info = 5; //服务器信息 + optional string session_id = 4; //session_id + optional string room_uuid = 5; //房间唯一id + optional string server_info = 6; //服务器信息 } //断线重连回复 From ac9ca132c0543654ee0ce28f6eefd08d81ae30da Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 10 Aug 2020 15:25:44 +0800 Subject: [PATCH 07/19] 1 --- server/gameserver/player.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 913fa40..3f61ee4 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -917,6 +917,10 @@ void Player::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg) } ); need_sync_active_player = true; + cs::SMReconnect respmsg; + respmsg.set_errcode(0); + respmsg.set_errmsg("战斗重连成功"); + SendNotifyMsg(respmsg); } void Player::_CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg) From 5c093d150521612074568dcffbabe7f5f1d45f61 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 10 Aug 2020 16:12:11 +0800 Subject: [PATCH 08/19] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=96=AD=E7=BA=BF?= =?UTF-8?q?=E9=87=8D=E8=BF=9E=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/player.cc | 1 + server/gameserver/playermgr.cc | 6 ++++++ server/gameserver/playermgr.h | 1 + server/gameserver/roommgr.cc | 2 +- 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 3f61ee4..6613be8 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -921,6 +921,7 @@ void Player::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg) respmsg.set_errcode(0); respmsg.set_errmsg("战斗重连成功"); SendNotifyMsg(respmsg); + PlayerMgr::Instance()->ReBindSocket(this); } void Player::_CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg) diff --git a/server/gameserver/playermgr.cc b/server/gameserver/playermgr.cc index 12761b4..2db99ad 100644 --- a/server/gameserver/playermgr.cc +++ b/server/gameserver/playermgr.cc @@ -194,3 +194,9 @@ void PlayerMgr::DecAccountNum(const std::string& account_id) ); } } + +void PlayerMgr::ReBindSocket(Player* hum) +{ + socket_hash_[hum->socket_handle] = hum; + IncAccountNum(hum->account_id); +} diff --git a/server/gameserver/playermgr.h b/server/gameserver/playermgr.h index 3da7306..75d2396 100644 --- a/server/gameserver/playermgr.h +++ b/server/gameserver/playermgr.h @@ -36,6 +36,7 @@ class PlayerMgr : public a8::Singleton size_t GetAccountNum() { return account_num_hash_.size(); } void IncAccountNum(const std::string& account_id); void DecAccountNum(const std::string& account_id); + void ReBindSocket(Player* hum); private: std::map socket_hash_; diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index 9d379fa..f6b65df 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -190,7 +190,7 @@ void RoomMgr::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg) send_reconnect_failed(hdr.socket_handle, 1, "房间已销毁"); return; } - if (room->GetRoomMode() == kChiJiMode) { + if (room->GetRoomMode() != kChiJiMode) { send_reconnect_failed(hdr.socket_handle, 1, "只有吃鸡模式支持重连"); return; } From 74bd5e36f578a90e78b52250d9c03ba9c8c25127 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 10 Aug 2020 16:47:56 +0800 Subject: [PATCH 09/19] 1 --- server/gameserver/jsondatamgr.cc | 1 + server/gameserver/jsondatamgr.h | 2 ++ server/gameserver/player.cc | 2 ++ 3 files changed, 5 insertions(+) diff --git a/server/gameserver/jsondatamgr.cc b/server/gameserver/jsondatamgr.cc index 2cc6dba..ff19a58 100644 --- a/server/gameserver/jsondatamgr.cc +++ b/server/gameserver/jsondatamgr.cc @@ -34,6 +34,7 @@ void JsonDataMgr::Init() gameserver_cluster_json_.ReadFromFile(gameserver_cluster_json_file); ip = GetConf()->At("ip")->AsXValue().GetString(); listen_port = GetConf()->At("listen_port")->AsXValue(); + server_info = a8::Format("%s:%d", {ip, listen_port}); Reload(); } diff --git a/server/gameserver/jsondatamgr.h b/server/gameserver/jsondatamgr.h index c430855..37a254e 100644 --- a/server/gameserver/jsondatamgr.h +++ b/server/gameserver/jsondatamgr.h @@ -16,6 +16,8 @@ public: std::string ip; int listen_port = 0; + std::string server_info; + void Reload(); private: diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 6613be8..0bc3f5f 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -16,6 +16,7 @@ #include "typeconvert.h" #include "playermgr.h" #include "perfmonitor.h" +#include "jsondatamgr.h" const int kREVIVE_BUFF_ID = 1005; @@ -1332,6 +1333,7 @@ void Player::PushJoinRoomMsg() cs::SMJoinedNotify notifymsg; notifymsg.set_error_code(0); notifymsg.set_room_mode((int)room->GetRoomMode()); + notifymsg.set_server_info(JsonDataMgr::Instance()->server_info); room->FillSMJoinedNotify(this, notifymsg); GGListener::Instance()->SendToClient(socket_handle, 0, notifymsg); } From 475e739edb4a66c416e1fb434c1d0f47b492e7ef Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 11 Aug 2020 15:56:44 +0800 Subject: [PATCH 10/19] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=96=AD=E7=BA=BF?= =?UTF-8?q?=E9=87=8D=E8=BF=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/player.cc | 11 +++++++++++ server/gameserver/playermgr.cc | 1 - server/gameserver/room.cc | 7 ++++--- server/gameserver/room.h | 1 + server/gameserver/roommgr.cc | 1 + 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 0bc3f5f..579bf99 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -909,6 +909,10 @@ void Player::ProcPrepareItems2(const ::google::protobuf::RepeatedPtrField< cs::M void Player::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg) { + int old_socket_handle = socket_handle; + if (socket_handle != 0) { + PlayerMgr::Instance()->RemovePlayerBySocket(socket_handle); + } socket_handle = hdr.socket_handle; TouchAllLayerHumanList ( @@ -923,6 +927,13 @@ void Player::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg) respmsg.set_errmsg("战斗重连成功"); SendNotifyMsg(respmsg); PlayerMgr::Instance()->ReBindSocket(this); + a8::UdpLog::Instance()->Debug + ("战斗服重连成功 %s %d %d", + { + account_id, + hdr.socket_handle, + old_socket_handle + }); } void Player::_CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg) diff --git a/server/gameserver/playermgr.cc b/server/gameserver/playermgr.cc index 2db99ad..ae8dbd3 100644 --- a/server/gameserver/playermgr.cc +++ b/server/gameserver/playermgr.cc @@ -198,5 +198,4 @@ void PlayerMgr::DecAccountNum(const std::string& account_id) void PlayerMgr::ReBindSocket(Player* hum) { socket_hash_[hum->socket_handle] = hum; - IncAccountNum(hum->account_id); } diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index bbcd570..bbf48ac 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -769,7 +769,7 @@ bool Room::CanJoin(const std::string& accountid, void Room::OnPlayerOffline(Player* hum) { if (GetOnlinePlayerNum() <= 0) { - xtimer.AddDeadLineTimer + xtimer.AddDeadLineTimerAndAttach ( SERVER_FRAME_RATE * 40, a8::XParams() @@ -777,11 +777,12 @@ void Room::OnPlayerOffline(Player* hum) [] (const a8::XParams& param) { Room* room = (Room*)param.sender.GetUserData(); - if (room->GetOnlinePlayerNum() <= 0) { + if (room->GetOnlinePlayerNum() <= 0 && !room->added_to_over_room) { GameLog::Instance()->ForceOver(room); RoomMgr::Instance()->AddOverRoom(room->room_uuid_); } - }); + }, + &timer_attacher.timer_list_); } } diff --git a/server/gameserver/room.h b/server/gameserver/room.h index c7dcbec..db5ab31 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -43,6 +43,7 @@ public: GridService* grid_service = nullptr; MapService* map_service = nullptr; bool debug_trace = false; + bool added_to_over_room = false; ~Room(); void InitData(RoomInitInfo& init_info); diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index f6b65df..3b5a612 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -288,6 +288,7 @@ void RoomMgr::AddOverRoom(long long room_uuid) inactive_room_hash_.erase(room_uuid); Room* room = GetRoomByUuid(room_uuid); if (room) { + room->added_to_over_room = true; a8::Timer::Instance()->AddRepeatTimerAndAttach (1000 * 5, a8::XParams() From fa1d719e7e0c2025ec31aa156fdd4470f343e53d Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 11 Aug 2020 16:03:39 +0800 Subject: [PATCH 11/19] 1 --- server/gameserver/room.cc | 2 +- server/gameserver/roommgr.cc | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index bbf48ac..96d3495 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -771,7 +771,7 @@ void Room::OnPlayerOffline(Player* hum) if (GetOnlinePlayerNum() <= 0) { xtimer.AddDeadLineTimerAndAttach ( - SERVER_FRAME_RATE * 40, + SERVER_FRAME_RATE * 15, a8::XParams() .SetSender(this), [] (const a8::XParams& param) diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index 3b5a612..6939253 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -188,6 +188,11 @@ void RoomMgr::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg) Room* room = GetRoomByUuid(a8::XValue(msg.room_uuid())); if (!room) { send_reconnect_failed(hdr.socket_handle, 1, "房间已销毁"); + a8::UdpLog::Instance()->Debug + ("房间已销毁 %s", + { + msg.room_uuid() + }); return; } if (room->GetRoomMode() != kChiJiMode) { From 3fb4b79df22985d6f452576d0f514e70783a0c74 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 11 Aug 2020 16:09:10 +0800 Subject: [PATCH 12/19] 1 --- server/gameserver/player.cc | 1 + server/gameserver/roommgr.cc | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 579bf99..8cffb8e 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -911,6 +911,7 @@ void Player::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg) { int old_socket_handle = socket_handle; if (socket_handle != 0) { + GGListener::Instance()->ForceCloseChildSocket(socket_handle); PlayerMgr::Instance()->RemovePlayerBySocket(socket_handle); } socket_handle = hdr.socket_handle; diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index 6939253..22d17be 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -180,7 +180,7 @@ void RoomMgr::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg) .SetSender(socket_handle), [] (const a8::XParams& param) { - GGListener::Instance()->ForceCloseClient(param.sender); + GGListener::Instance()->ForceCloseChildSocket(param.sender); } ); }; From a1b4d120822a973e6726f00517b7fa3ff5b4f28b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 11 Aug 2020 16:27:52 +0800 Subject: [PATCH 13/19] 1 --- server/gameserver/room.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 96d3495..a3fe5d3 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -782,7 +782,7 @@ void Room::OnPlayerOffline(Player* hum) RoomMgr::Instance()->AddOverRoom(room->room_uuid_); } }, - &timer_attacher.timer_list_); + &xtimer_attacher_.timer_list_); } } From e4ca1b0abb97a5abbc7e72e6e28081ed8f1e6b44 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 12 Aug 2020 20:58:49 +0800 Subject: [PATCH 14/19] 1 --- server/gameserver/metadata.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index f06b786..9035774 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -104,10 +104,10 @@ namespace MetaData } { std::vector strings; - if (f8::IsOnlineEnv()) { - a8::Split(i->attr_type(), strings, '|'); - } else { + if (!i->spera_type().empty()) { a8::Split(i->spera_type(), strings, '|'); + } else { + a8::Split(i->attr_type(), strings, '|'); } int level = 1; for (auto& str : strings) { From 8f7ce4afee5a2ada55d955f34ef7a083d66cf125 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 12 Aug 2020 21:00:42 +0800 Subject: [PATCH 15/19] 1 --- server/gameserver/mapmgr.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/server/gameserver/mapmgr.cc b/server/gameserver/mapmgr.cc index cb4624e..9ab4411 100644 --- a/server/gameserver/mapmgr.cc +++ b/server/gameserver/mapmgr.cc @@ -19,6 +19,12 @@ void MapMgr::Init() map_instance->Init(); instance_hash_[map_instance->map_id] = map_instance; } + if (MetaMgr::Instance()->GetMap(4001)) { + MapInstance* map_instance = new MapInstance(); + map_instance->map_id = 4001; + map_instance->Init(); + instance_hash_[map_instance->map_id] = map_instance; + } } void MapMgr::UnInit() From 5587ef56b9fff8e7e3384c5e08e15531288c501a Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 14 Aug 2020 14:15:37 +0800 Subject: [PATCH 16/19] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A4=9A=E6=8A=8A?= =?UTF-8?q?=E6=AD=A6=E5=99=A8=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/human.cc | 14 ++++++++++++-- server/gameserver/human.h | 2 +- server/gameserver/player.cc | 14 ++++++++------ server/gameserver/playermgr.cc | 11 ++++++----- 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 1b9349a..f5ae73d 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -135,7 +135,12 @@ void Human::Initialize() RecalcSelfCollider(); volume_ = meta->volume; observers_.insert(this); - ability.hp = meta->i->health() + (spec_weapon.meta ? spec_weapon.GetAttrValue(kHAT_MaxHp) : 0); + ability.hp = meta->i->health(); + for (auto& weapon : spec_weapons) { + if (weapon.meta) { + ability.hp += (weapon.meta ? weapon.GetAttrValue(kHAT_MaxHp) : 0); + } + } } float Human::GetSpeed() @@ -3943,7 +3948,12 @@ void Human::OnMetaChange() curr_weapon = &weapons[0]; } } - ability.hp = meta->i->health() + (spec_weapon.meta ? spec_weapon.GetAttrValue(kHAT_MaxHp) : 0); + ability.hp = meta->i->health(); + for (auto& weapon : spec_weapons) { + if (weapon.meta) { + ability.hp += (weapon.meta ? weapon.GetAttrValue(kHAT_MaxHp) : 0); + } + } room->frame_event.AddHpChg(this); RecalcBaseAttr(); skill_meta_ = MetaMgr::Instance()->GetSkill(meta->i->active_skill()); diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 9b1f085..0d5ae22 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -128,7 +128,7 @@ class Human : public MoveableEntity long long send_msg_times = 0; - Weapon spec_weapon; + std::list spec_weapons; Weapon grow_weapon; std::map weapon_configs; std::map skin_configs; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 8cffb8e..7457e5a 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -873,22 +873,24 @@ void Player::ProcPrepareItems(const ::google::protobuf::RepeatedField< ::google: curr_weapon->ammo = add_num; } } - if (spec_weapon.weapon_id != 0) { + for (auto& spec_weapon : spec_weapons) { MetaData::Equip* item_meta = MetaMgr::Instance()->GetEquip(spec_weapon.weapon_id); if (item_meta && item_meta->i->equip_type() == EQUIP_TYPE_WEAPON) { if (item_meta->i->equip_subtype() != 1) { - Weapon* weapon = &weapons[GUN_SLOT1]; - weapon->weapon_idx = GUN_SLOT1; - if (curr_weapon != &weapons[GUN_SLOT2]) { - curr_weapon = &weapons[GUN_SLOT1]; + int weapon_idx = GUN_SLOT1; + if (weapons[weapon_idx].weapon_id != 0) { + weapon_idx = GUN_SLOT2; } - if (weapon) { + if (weapons[weapon_idx].weapon_id == 0) { + Weapon* weapon = &weapons[weapon_idx]; + weapon->weapon_idx = weapon_idx; weapon->weapon_id = spec_weapon.weapon_id; weapon->weapon_lv = spec_weapon.weapon_lv; weapon->ammo = spec_weapon.ammo; weapon->meta = item_meta; weapon->Recalc(); + curr_weapon = &weapons[GUN_SLOT1]; } } } diff --git a/server/gameserver/playermgr.cc b/server/gameserver/playermgr.cc index ae8dbd3..5e8a40a 100644 --- a/server/gameserver/playermgr.cc +++ b/server/gameserver/playermgr.cc @@ -82,11 +82,12 @@ Player* PlayerMgr::CreatePlayerByCMJoin(Player* hum, MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(weapon.weapon_id()); if (equip_meta) { hum->weapon_configs[weapon.weapon_id()] = weapon.weapon_lv(); - hum->spec_weapon.weapon_id = weapon.weapon_id(); - hum->spec_weapon.weapon_lv = weapon.weapon_lv(); - hum->spec_weapon.ammo = weapon.ammo(); - hum->spec_weapon.meta = equip_meta; - hum->spec_weapon.Recalc(); + Weapon& spec_weapon = a8::FastAppend(hum->spec_weapons); + spec_weapon.weapon_id = weapon.weapon_id(); + spec_weapon.weapon_lv = weapon.weapon_lv(); + spec_weapon.ammo = weapon.ammo(); + spec_weapon.meta = equip_meta; + spec_weapon.Recalc(); } } } From 04253a7d111121884dada1676642efd5b37ea742 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 14 Aug 2020 14:17:56 +0800 Subject: [PATCH 17/19] 1 --- server/gameserver/human.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index f5ae73d..22024c5 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -138,7 +138,7 @@ void Human::Initialize() ability.hp = meta->i->health(); for (auto& weapon : spec_weapons) { if (weapon.meta) { - ability.hp += (weapon.meta ? weapon.GetAttrValue(kHAT_MaxHp) : 0); + ability.hp += weapon.meta ? weapon.GetAttrValue(kHAT_MaxHp) : 0; } } } @@ -3951,7 +3951,7 @@ void Human::OnMetaChange() ability.hp = meta->i->health(); for (auto& weapon : spec_weapons) { if (weapon.meta) { - ability.hp += (weapon.meta ? weapon.GetAttrValue(kHAT_MaxHp) : 0); + ability.hp += weapon.meta ? weapon.GetAttrValue(kHAT_MaxHp) : 0; } } room->frame_event.AddHpChg(this); From e2d0e4e430bf4e97c7c1e59a4fcfea50df1e8443 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 14 Aug 2020 19:21:59 +0800 Subject: [PATCH 18/19] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=B8=A0=E9=81=93=E7=89=B9=E6=AE=8A=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/constant.h | 5 ++++ server/gameserver/mapmgr.cc | 8 +++++- server/gameserver/room.cc | 16 +++++++++++- server/gameserver/room.h | 6 ++++- server/gameserver/roommgr.cc | 34 ++++++++++++++++++++------ server/gameserver/roommgr.h | 8 ++++-- server/gameserver/types.h | 2 ++ server/tools/protobuild/cs_proto.proto | 2 +- 8 files changed, 68 insertions(+), 13 deletions(-) diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index f7b37fd..e407b20 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -322,6 +322,11 @@ enum ColliderTag_e kHalfWallTag = 1 }; +enum GameChannel_e +{ + kWxChannelId = 6001 +}; + const char* const PROJ_NAME_FMT = "game%d_gameserver"; const char* const PROJ_ROOT_FMT = "/data/logs/%s"; diff --git a/server/gameserver/mapmgr.cc b/server/gameserver/mapmgr.cc index 9ab4411..8a30e4e 100644 --- a/server/gameserver/mapmgr.cc +++ b/server/gameserver/mapmgr.cc @@ -4,6 +4,7 @@ #include "room.h" #include "mapinstance.h" #include "metamgr.h" +#include "cs_proto.pb.h" void MapMgr::Init() { @@ -40,7 +41,12 @@ void MapMgr::AttachRoom(Room* room, RoomInitInfo& init_info) { MapInstance* map_instance = GetMapInstance(2001); if (init_info.room_mode == kZombieMode) { - map_instance = GetMapInstance(3001); + if (init_info.creator_channel == kWxChannelId && + init_info.creator_proto_version == cs::ProtoVersion) { + map_instance = GetMapInstance(4001); + } else { + map_instance = GetMapInstance(3001); + } } if (!map_instance) { abort(); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index a3fe5d3..e26e8da 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -52,6 +52,8 @@ void Room::InitData(RoomInitInfo& init_info) room_type_ = init_info.room_type; creator_game_times_ = init_info.creator_game_times; creator_register_time_ = init_info.creator_register_time; + creator_proto_version_ = init_info.creator_proto_version; + creator_channel_ = init_info.creator_channel; force_entry_newbie_room_ = init_info.force_entry_newbie_room; map_tpl_name_ = init_info.map_tpl_name; @@ -736,8 +738,20 @@ int Room::GetAliveTeamNum() bool Room::CanJoin(const std::string& accountid, RoomType_e self_room_type, - RoomMode_e self_room_mode) + RoomMode_e self_room_mode, + int self_proto_version, + int self_channel) { + #if 1 + if (creator_channel_ == kWxChannelId) { + if (self_channel != creator_channel_) { + return false; + } + if (self_proto_version != creator_proto_version_) { + return false; + } + } + #endif if (self_room_mode < kChiJiMode) { self_room_mode = kChiJiMode; } diff --git a/server/gameserver/room.h b/server/gameserver/room.h index db5ab31..b25439d 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -111,7 +111,9 @@ public: std::set* GetAliveTeam(); bool CanJoin(const std::string& accountid, RoomType_e self_roomm_type, - RoomMode_e self_room_mode); + RoomMode_e self_room_mode, + int self_proto_version, + int self_channel); void OnPlayerOffline(Player* hum); Entity* FindFirstCollisonEntity(const a8::Vec2& aabb_pos, AabbCollider& aabb_box); void FindLocationWithAabb(Entity* target, const a8::Vec2& aabb_pos, AabbCollider* aabb_box, @@ -266,6 +268,8 @@ private: bool show_handed_ = false; int creator_game_times_ = 0; int creator_register_time_ = 0; + int creator_proto_version_ = 0; + int creator_channel_ = 0; bool force_entry_newbie_room_ = false; xtimer_list* battle_report_timer_ = nullptr; bool sent_terminator_airdrop = false; diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index 22d17be..07f0a27 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -139,10 +139,14 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) int game_times = 0; RoomType_e self_room_type = GetHumanRoomType(msg, game_times); time_t register_time = f8::ExtractRegisterTimeFromSessionId(msg.session_id()); + int proto_version = msg.proto_version(); + int channel = f8::ExtractChannelIdFromAccountId(msg.account_id()); Room* room = GetJoinableRoom(msg, self_room_type, game_times, - register_time + register_time, + proto_version, + channel ); if (!room) { JoinErrorHandle(msg, 3, hdr.socket_handle); @@ -220,7 +224,9 @@ int RoomMgr::OverRoomNum() Room* RoomMgr::GetJoinableRoom(const cs::CMJoin& msg, const RoomType_e self_room_type, int game_times, - int creator_register_time + int creator_register_time, + int proto_version, + int channel ) { std::vector> group_rooms; @@ -229,7 +235,11 @@ Room* RoomMgr::GetJoinableRoom(const cs::CMJoin& msg, } for (auto& pair : inactive_room_hash_) { Room* room = pair.second; - if (room->CanJoin(msg.account_id(), self_room_type, (RoomMode_e)msg.room_mode())) { + if (room->CanJoin(msg.account_id(), + self_room_type, + (RoomMode_e)msg.room_mode(), + proto_version, + channel)) { if (!msg.team_uuid().empty() && room->HaveMyTeam(msg.team_uuid())) { return room; } @@ -244,13 +254,17 @@ Room* RoomMgr::GetJoinableRoom(const cs::CMJoin& msg, return CreateRoom(msg, self_room_type, game_times, - creator_register_time); + creator_register_time, + proto_version, + channel); } if (self_room_type == RT_MidBrid) { return CreateRoom(msg, self_room_type, game_times, - creator_register_time); + creator_register_time, + proto_version, + channel); } for (int i = 0; i < RT_Max; ++i) { for (Room* room : group_rooms[i]) { @@ -262,7 +276,9 @@ Room* RoomMgr::GetJoinableRoom(const cs::CMJoin& msg, return CreateRoom(msg, self_room_type, game_times, - creator_register_time); + creator_register_time, + proto_version, + channel); } Room* RoomMgr::GetRoomByUuid(long long room_uuid) @@ -439,7 +455,9 @@ int RoomMgr::AllocRoomIdx() Room* RoomMgr::CreateRoom(const cs::CMJoin& msg, RoomType_e room_type, int game_times, - int creator_register_time) + int creator_register_time, + int creator_proto_version, + int creator_channel) { int room_idx = AllocRoomIdx(); if (room_idx < 1) { @@ -453,6 +471,8 @@ Room* RoomMgr::CreateRoom(const cs::CMJoin& msg, init_info.room_mode = (RoomMode_e)msg.room_mode(); init_info.creator_game_times = game_times; init_info.creator_register_time = creator_register_time; + init_info.creator_proto_version = creator_proto_version; + init_info.creator_channel = creator_channel; init_info.force_entry_newbie_room = msg.force_entry_newbie_room(); if (GetRoomByUuid(init_info.room_uuid)) { abort(); diff --git a/server/gameserver/roommgr.h b/server/gameserver/roommgr.h index 84b4b47..f571b6e 100644 --- a/server/gameserver/roommgr.h +++ b/server/gameserver/roommgr.h @@ -38,7 +38,9 @@ class RoomMgr : public a8::Singleton Room* GetJoinableRoom(const cs::CMJoin& msg, const RoomType_e self_room_type, int game_times, - int creator_register_time); + int creator_register_time, + int proto_version, + int channel); void ReportServerState(int instance_id, const std::string& host, int port); void FreeOverRoom(long long room_uuid); bool IsLimitJoin(); @@ -47,7 +49,9 @@ class RoomMgr : public a8::Singleton Room* CreateRoom(const cs::CMJoin& msg, RoomType_e room_type, int game_times, - int creator_register_time); + int creator_register_time, + int creator_proto_version, + int creator_channel); void JoinErrorHandle(const cs::CMJoin& msg, int error_code, int socket_handle); private: diff --git a/server/gameserver/types.h b/server/gameserver/types.h index 5b6f177..f27ac6c 100755 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -160,6 +160,8 @@ struct RoomInitInfo RoomType_e room_type = RT_NewBrid; int creator_game_times = 0; int creator_register_time = 0; + int creator_proto_version = 0; + int creator_channel = 0; bool force_entry_newbie_room = false; const MetaData::Map* map_meta = nullptr; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 7208242..26d3cc9 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -50,7 +50,7 @@ package cs; //常量 enum Constant_e { - ProtoVersion = 2019071501; //系统版本 + ProtoVersion = 2020081401; //系统版本 } //心跳 From 6df7d2d5fbaba2bf9ff66bda22c0ba3911c5b4fa Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 14 Aug 2020 19:24:19 +0800 Subject: [PATCH 19/19] 1 --- server/gameserver/mapmgr.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/server/gameserver/mapmgr.cc b/server/gameserver/mapmgr.cc index 8a30e4e..d3e9c1c 100644 --- a/server/gameserver/mapmgr.cc +++ b/server/gameserver/mapmgr.cc @@ -45,7 +45,11 @@ void MapMgr::AttachRoom(Room* room, RoomInitInfo& init_info) init_info.creator_proto_version == cs::ProtoVersion) { map_instance = GetMapInstance(4001); } else { - map_instance = GetMapInstance(3001); + if (init_info.creator_proto_version == cs::ProtoVersion) { + map_instance = GetMapInstance(4001); + } else { + map_instance = GetMapInstance(3001); + } } } if (!map_instance) {