| | |
| | | return
|
| | |
|
| | | def S2C_OnlineState(dataMsg, fromServerID, playerID):
|
| | | ## 收到游戏服玩家在线状态同步
|
| | | '''收到游戏服玩家在线状态同步
|
| | | 跨服收到在线状态同步时都视为在跨服上线,需要处理跨服在线/上线的逻辑
|
| | | 不然在跨服维护游戏服不维护的情况下,等跨服重开后,游戏服重新同步在线玩家,此时如果跨服不处理登录逻辑,会少同步封包
|
| | | 如公会,跨服维护之后登录的玩家会取不到公会数据,等跨服重开后,需视为登录重新同步
|
| | | 与跨服重连一样的道理,都是重新同步所有信息
|
| | | '''
|
| | | isOnline = dataMsg["isOnline"]
|
| | | isLoginout = dataMsg["isLoginout"]
|
| | | #isLoginout = dataMsg["isLoginout"] # 如果个别跨服功能有需要对真实上下线做特殊处理的可使用该参数判断
|
| | | baseInfo = dataMsg["baseInfo"]
|
| | |
|
| | | crossPlayer = UpdCrossPlayerFromMainServer(fromServerID, playerID, baseInfo, isOnline)
|
| | |
|
| | | # 其他跨服功能处理,暂时仅上下线时处理
|
| | | curServerID = GameWorld.GetGameWorld().GetServerID()
|
| | | if isLoginout:
|
| | | # 公会
|
| | | if "crossFamilyServerID" in dataMsg:
|
| | | crossFamilyServerID = dataMsg["crossFamilyServerID"]
|
| | | if curServerID == crossFamilyServerID:
|
| | | if isOnline:
|
| | | PlayerFamily.OnCrossPlayerLogin(crossPlayer)
|
| | | else:
|
| | | PlayerFamily.OnCrossPlayerLogout(crossPlayer)
|
| | | |
| | | # 最后处理缓存,先放在更新中处理删除,有问题再放后面
|
| | | #if not isOnline:
|
| | | # PlayerViewCache.OnCrossPlayerLogout(crossPlayer)
|
| | | # CrossPlayer.GetCrossPlayerMgr().DeletePlayer(playerID)
|
| | | #if isLoginout:
|
| | | # 公会
|
| | | if "crossFamilyServerID" in dataMsg:
|
| | | crossFamilyServerID = dataMsg["crossFamilyServerID"]
|
| | | if curServerID == crossFamilyServerID:
|
| | | if isOnline:
|
| | | PlayerFamily.OnCrossPlayerLogin(crossPlayer)
|
| | | else:
|
| | | PlayerFamily.OnCrossPlayerLogout(crossPlayer)
|
| | | |
| | | # 最后处理缓存,先放在更新中处理删除,有问题再放后面
|
| | | #if not isOnline:
|
| | | # PlayerViewCache.OnCrossPlayerLogout(crossPlayer)
|
| | | # CrossPlayer.GetCrossPlayerMgr().DeletePlayer(playerID)
|
| | |
|
| | | # 最后同步处理跨服登录成功
|
| | | #if isLoginout and isOnline:
|