From 278fa30bb771deab0cc22c3390c2581c004de178 Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期三, 21 五月 2025 14:38:45 +0800 Subject: [PATCH] 15 卡牌服务端搭建 1. 增加地图关闭接口 CloseMap,必须调用处理保存后,地图才能关闭 2. 玩家登录流程在PlayerLogin统一处理,不再需要等待客户端回报 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 72 +++++++++++++----------------------- 1 files changed, 26 insertions(+), 46 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py index 09f53f7..f41b51b 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py @@ -487,52 +487,29 @@ #--------------------------------------------------------------------- ''' -旧登录流程 -- 留着对比 +登录流程 +UserCrtlDB + onAuthentication 玩家登录 :验证账号-若没有角色则创角-返回角色信息-通知Map C++ + Map C++调用 PlayerLogin MapServer ChPlayer:def PlayerLogin(index, tick) - DoPlayerLogin - curPlayer.Sync_ClientPlayerLogin() - curPlayer.Sync_GameServer_MapID() #同步GameServer自己的地图ID - curPlayer.BalanceServer_PlayerLoginInitOK() - -GameServer - ChPlayer:def PlayerLoadMapState(index, tick) pack.GetLoadState()=0 此时的 LoadState 为0 - curPlayer.SetIsLoadMap(True) 设置在加载地图 - - ChPlayer:def PlayerLogin(index, tick) - curPlayer.MapServer_InitOK() 通知地图自己OK了 - -MapServer - PlayerEventCounter:def GameServer_InitOK(index, tick) - curPlayer.SendToBServerServerInitOK() #通知BServer自己OK了 - ChPlayer:def OnAllServerInitOK(curPlayer, tick) + DoPlayerLogin + curPlayer.Sync_ClientPlayerLogin() #01 02 玩家初始化#tagCDBPlayer + curPlayer.BalanceServer_PlayerLoginInitOK() #向route设置玩家在map中的索引 + + curPlayer.SendToBServerServerInitOK() #通知route登录成功 ,route向客户端发送//01 09 服务器准备就绪#tagServerPrepareOK + ChPlayer:def OnAllServerInitOK(curPlayer, tick) - ChPlayer:def LoadMapOK(curPlayer, tick) - curPlayer.GameServer_SetLoadMapState(1) #通知GameServer切换地图停止 - curPlayer.SetMapLoadOK(True) - curPlayer.SetInitOK(True) - curPlayer.EndLoadMap() - -GameServer - ChPlayer:def PlayerLoadMapState(index, tick) pack.GetLoadState()=1 此时的 LoadState 为1 - PlayerLoginLoadMapOK + ChPlayer:def __Func_LoadMapOK(curPlayer, tick) #!!!直接调用不等待客户端封包 //01 07 地图读取OK#tagCInitMapOK + curPlayer.SetMapLoadOK(True) curPlayer.SetInitOK(True) - curPlayer.MapServer_GameServerRefreshOK() #通知地图服务器玩家初始化成功 - curPlayer.SetIsLoadMap(False) - -MapServer - GameServerRefresh:GameSever_PlayerInitOK curPlayer.GetGameServerInitOK()=0 - curPlayer.SetGameServerInitOK(True) - -后续补充流程 -MapServer - ChPlayer:def DoPlayerRealLoginOK(curPlayer, tick) - 玩家真正登录成功处理,用于替换 __DoPlayerLoginServer 中的功能登录逻辑 - 通知GameServer地图最终登录成功了 - -GameServer - ChPlayer:def DoPlayerRealLoginOK(curPlayer, tick) - 玩家真正登录成功处理,用于替换 __DoPlayerLoginServer 中的功能登录逻辑 + curPlayer.EndLoadMap() #通知客户端 04 03 玩家登录数据发送完毕OK#tagPlayerLoginLoadOK + + GameServerRefresh:GameSever_PlayerInitOK + curPlayer.SetGameServerInitOK(True) + + ChPlayer:def DoPlayerRealLoginOK(curPlayer, tick) 玩家真正登录成功处理,用于替换 __DoPlayerLoginServer 中的功能登录逻辑 + ''' ##玩家登陆游戏逻辑处理 @@ -1477,7 +1454,9 @@ curPlayer.SendToBServerServerInitOK() #通知route登录成功 ,route向客户端发送0109包 OnAllServerInitOK(curPlayer, tick) #到此处已经可以保存数据,即使客户端不回包断线 - #后续登录流程等客户端回复 //01 07 地图读取OK#tagCInitMapOK 调用 LoadMapOK + #原 //01 07 地图读取OK#tagCInitMapOK 逻辑 直接调用 + __Func_LoadMapOK(index, tick) + GameServerRefresh.GameSever_PlayerInitOK(index, tick) except: curPlayer.Kick(IPY_GameWorld.disWaitForPlayerLoinError) import traceback @@ -1565,7 +1544,7 @@ PetControl.Sync_PetInfo_ChangeMap(curPlayer, tick) #通知GameServer自己现在的地图 - curPlayer.Sync_GameServer_MapID() + #curPlayer.Sync_GameServer_MapID() #如果本地图是副本的话, 则通知GameServer玩家进入副本 if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtTeam: @@ -1680,8 +1659,9 @@ #@return 返回值无意义 #@remarks C++封包触发, 切换地图成功( 目标地图 ) def LoadMapOK(index, tick): - GameWorld.GetPsycoFunc(__Func_LoadMapOK)(index, tick) - GameServerRefresh.GameSever_PlayerInitOK(index, tick) + #不需要等待客户端,以前有视野客户端未加载成功会被偷袭的问题,可以通过加x秒无敌BUFF解决,不应该增加流程 + # GameWorld.GetPsycoFunc(__Func_LoadMapOK)(index, tick) + # GameServerRefresh.GameSever_PlayerInitOK(index, tick) return #--------------------------------------------------------------------- -- Gitblit v1.8.0