From 0d2578daffd3b32fb0fa05e7dd92e88aa2d92ffa Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 01 三月 2019 16:23:06 +0800 Subject: [PATCH] 3039 【主干】【1.6】合服定制活动期间资源找回异常 --- ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py | 141 +++++++++++++++++++++++++---------------------- 1 files changed, 75 insertions(+), 66 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py index 4452fb6..adbb5c7 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py @@ -39,16 +39,12 @@ import PlayerFamilyBoss #import PlayerManorWar import PlayerBourse -import GameWorldActionTeHui +import PlayerZhuXianBoss import PlayerXMZZ -import GameWorldMergePK import GameWorldShopItem -import MergeChildMsg import PlayerTruck -import PlayerMergeEvent import HighLadder import EventReport -import MergePlayer import PlayerCompensation import PlayerFamilyRedPacket import PlayerFamilyStore @@ -63,20 +59,41 @@ import IpyGameDataPY import PlayerTalk import PlayerGeTui +import PlayerStore import GameWorldActionControl +import PlayerFBHelpBattle import GMT_CTG import PyGameData import GMShell +import IPY_PlayerDefine +import CrossRealmPK #--------------------------------------------------------------------- #--------------------------------------------------------------------- + +def DoRefreshMainServerRole(curPlayer): + ## 刷新本服角色信息 + + curTeam = curPlayer.GetTeam() + if curTeam: + PlayerTeam.Sync_TeamMemberInfo(curTeam) + return + ## 玩家登录初始化(封包参数) # @param index 玩家索引 # @param tick 当前时间 # @return None # @remarks 登陆顺序, PlayerLogin->PlayerLoadMapState(PlayerLoginLoadMapOK), 此处未设置初始化状态 def PlayerLogin(index, tick): - GameWorld.GetPsycoFunc(__Func_PlayerLogin)(index, tick) + curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + try: + __Func_PlayerLogin(curPlayer, tick) + except: + curPlayer.Kick(IPY_PlayerDefine.disWaitForPlayerLoinError) + import traceback + GameWorld.ErrLog("玩家上线逻辑错误~~~~~\r\n%s" % traceback.format_exc()) + if GameWorld.GetGameWorld().GetDebugLevel(): + raise Exception("玩家上线逻辑错误~~~~\r\n%s" % traceback.format_exc()) return #--------------------------------------------------------------------- @@ -85,16 +102,30 @@ # @param tick 当前时间 # @return None # @remarks 登陆顺序, PlayerLogin->PlayerLoadMapState(PlayerLoginLoadMapOK), 此处未设置初始化状态 -def __Func_PlayerLogin(index, tick): +def __Func_PlayerLogin(curPlayer, tick): - #玩家登录初始化 - curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + GameWorld.Log("__Func_PlayerLogin mapID=%s" % curPlayer.GetMapID(), curPlayer.GetPlayerID()) + curPlayer.SetDict(ChConfig.Def_PDict_LoginMapID, curPlayer.GetMapID()) #玩家在线时间初始化 InitPlayerOnLineTime(curPlayer, tick) #玩家响应信息初始化 InitPlayerOnLineReply(curPlayer, tick) # 统计登入人数 GameDataRecord.PlayerLoginRecord(curPlayer, tick) + __DoPlayerLoginServer(curPlayer, tick) + + #通知地图服务器自己初始化成功 + curPlayer.MapServer_InitOK() + return + +def __DoPlayerLoginServer(curPlayer, tick): + ''' 玩家登录需要处理的内容,本服及跨服服务器分开 + ''' + if GameWorld.IsCrossServer(): + #跨服PK + CrossRealmPK.OnPlayerLoginCrossServer(curPlayer) + return + #玩家家族刷新 #家族任务需要刷新 FamilyLV, 地图服务器需要知道FamilyLV来通知玩家家族任务次数 PlayerFamily.PlayerLoginRefreshFamily(curPlayer, tick) @@ -115,21 +146,12 @@ # 通知广播信息 GMCommon.SendBroadCastToClient(curPlayer) - - # 在非跨服服务器上线时,在跨服PK赛期间如果roomID不为0则重置 - #if not GameWorld.IsMergeServer() and GameWorldMergePK.IsMergePKMatchOpen() \ - # and curPlayer.GetVsRoomId() != 0: - # PlayerControl.SetVsRoomId(curPlayer, 0) - PlayerTruck.SyncPlayerTruckStartTime(curPlayer) #通知玩家交易所挂单情况 PlayerBourse.OnPlayerLogin(curPlayer) #上线广播 __CheckWorldNotifyOnLogin(curPlayer, tick) - #上线奖励处理 - #PlayerMergeEvent.MergeEventOnPlayerLogin(curPlayer) - #MergePlayer.OnPlayerLogin(curPlayer) #仙盟红包 PlayerFamilyRedPacket.OnPlayerLogin(curPlayer) @@ -143,7 +165,8 @@ PlayerXMZZ.OnXMZZOnLogin(curPlayer) #等级奖励 PlayerLVAward.OnPlayerLogin(curPlayer) - + #商店购买次数 + PlayerStore.OnPlayerLogin(curPlayer) #通知世界boss信息 GameWorldBoss.OnPlayerLogin(curPlayer) #家族副本boss状态通知 @@ -158,12 +181,14 @@ GameWorldActionControl.OnPlayerLogin(curPlayer) #玩家等级记录 PyGameData.g_todayPlayerLVDict[curPlayer.GetID()] = curPlayer.GetLV() + #副本助战 + PlayerFBHelpBattle.OnHelpPlayerLogin(curPlayer) + #跨服PK + CrossRealmPK.OnPlayerLogin(curPlayer) + #诛仙BOSS + PlayerZhuXianBoss.OnPlayerLogin(curPlayer) - GMShell.OnPlayerLogin(curPlayer) GMT_CTG.OnPlayerLogin(curPlayer) - - #通知地图服务器自己初始化成功 - curPlayer.MapServer_InitOK() return ## 增加高手玩家上线广播 @@ -171,7 +196,7 @@ # @return None def __CheckWorldNotifyOnLogin(curPlayer, tick): # 跨服服务器不广播 - if GameWorld.IsMergeServer(): + if GameWorld.IsCrossServer(): return limitLV = IpyGameDataPY.GetFuncCfg("BillBoardPlayerLoginNotify", 2) # 最低等级限制 @@ -245,31 +270,6 @@ diff_Time = loginTime - logoffTime #天数 * 24小时 * 60 分钟 + 秒 return diff_Time.days * 24 * 60 * 60 + diff_Time.seconds - -## 统计客户端跨服赛激活时间 -# @param index 玩家索引 -# @return None -def SendMergeWarOpen(curPlayer): - # 发送跨服赛服务器信息 - mapConfig = GameConfig.GetConfig() - mergeServerIP = mapConfig.get("MergeServerIP") - mergeServerPort = mapConfig.get("MergeServerPort") - if not mergeServerIP: - return - mergeServerInfo = ChPyNetSendPack.tagMergeServerInfo() - mergeServerInfo.ServerIPLen = len(mergeServerIP) - mergeServerInfo.ServerIP = mergeServerIP - mergeServerInfo.Port = mergeServerPort - mergeServerInfo.IsMergeServer = GameWorld.IsMergeServer() - NetPackCommon.SendFakePack(curPlayer, mergeServerInfo) - return - -## 跨服赛通知奖励 -# @param curPlayer: 玩家实例 -# @return: None -def MSGetReward(curPlayer): - #PlayerCanGetReward.SynClient_CanGetRewardList(curPlayer) - return ## 运营登陆信息处理 # @param curPlayer @@ -481,7 +481,16 @@ # @return None # @remarks 函数详细说明. def PlayerDisconnect(index, tick): - GameWorld.GetPsycoFunc(__Func_PlayerDisconnect)(index, tick) + curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + try: + __Func_PlayerDisconnect(curPlayer, tick) + except: + import traceback + GameWorld.ErrLog("玩家下线逻辑错误~~~~~\r\n%s" % traceback.format_exc()) + if GameWorld.GetGameWorld().GetDebugLevel(): + raise Exception("玩家下线逻辑错误~~~~\r\n%s" % traceback.format_exc()) + #调用底层下线 + curPlayer.DoDisconnect() return ## 玩家下线(封包参数) @@ -489,11 +498,10 @@ # @param tick 当前时间 # @return None # @remarks 函数详细说明. -def __Func_PlayerDisconnect(index, tick): - curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) +def __Func_PlayerDisconnect(curPlayer, tick): #跨服匹配PK - #GameWorldMergePK.OnLeaveServer(curPlayer) + CrossRealmPK.OnLeaveServer(curPlayer) #组队玩家离线 PlayerTeam.DoPlayerLogOffTeamLogic(curPlayer, tick) @@ -505,11 +513,8 @@ # 设置家族成员离线时间 SetPlayerOfflineTime(curPlayer) - #MergePlayer.OnPlayerLeaveGotoMergeServer(curPlayer, tick) #------------镖车逻辑 #TruckPlayerDisconnectProcess(curPlayer, tick) - #调用底层下线 - curPlayer.DoDisconnect() return ## 设置玩家离线时间 @@ -597,11 +602,6 @@ curPlayer.SetFightPower(packValue) return - if packType == IPY_GameServer.CDBPlayerRefresh_ExAttr10: - #设置玩家跨服预赛排位 - PlayerControl.SetMergeWarRank(curPlayer, packValue) - return - if packType == IPY_GameServer.CDBPlayerRefresh_ExAttr2: #队伍相关相关审核开关状态 PlayerTeam.SetTeamCheckState(curPlayer, packValue) @@ -645,6 +645,12 @@ elif packType == IPY_GameServer.CDBPlayerRefresh_ExAttr9: PlayerControl.SetVIPExpireTime(curPlayer, packValue) + elif packType == IPY_GameServer.CDBPlayerRefresh_ExAttr10: + PlayerControl.SetChatBubbleBox(curPlayer, packValue) + + elif packType == IPY_GameServer.CDBPlayerRefresh_ExAttr11: + PlayerControl.SetTodayXianyuanCoin(curPlayer, packValue) + elif packType == IPY_GameServer.CDBPlayerRefresh_OperateInfo: curPlayer.SetOperateInfo(packValue); @@ -658,7 +664,8 @@ PlayerTeam.PlayerTeamMemberRefresh(curPlayer, packType, packValue, tick) #家族刷新 PlayerFamily.PlayerRefresh(curPlayer, tick) - + #副本助战 + PlayerFBHelpBattle.UpdateCheckInPlayerInfoByRefresh(curPlayer, packType, packValue) return ## 玩家切换地图的响应(参数 -> 当前玩家,当前时间) @@ -754,7 +761,7 @@ #改到mapServer登录成功通知 #Sync_PyServerDataTimeToClient(curPlayer, tick) - #PlayerTeam.OnPlayerReadMapOK(curPlayer, tick) + PlayerTeam.OnPlayerReadMapOK(curPlayer, tick) #刷新人物日期状态 PlayerEventCounter.UpdatePlayerLoginTime(curPlayer) @@ -767,7 +774,7 @@ #=============================================================================== #自己已经初始化成功 curPlayer.SetInitOK(True) - + GMShell.OnPlayerLogin(curPlayer) #发送请求至目标地图(任务需要登陆家族长触发事件) __RefreshFamilyToMapServer(curPlayer) return @@ -893,11 +900,13 @@ fblinePack = ChPyNetSendPack.tagGCFBLinePlayerCnt() fblinePack.MapID = tagMapID fblinePack.FBLineInfoList = [] - for lineID, playerCnt in fbLinePlayerCntDict.items(): + for lineID, infoList in fbLinePlayerCntDict.items(): mapLineState = ChPyNetSendPack.tagGCFBLineInfo() mapLineState.Clear() mapLineState.FBLineID = lineID - mapLineState.PlayerCnt = playerCnt + mapLineState.PlayerCnt = infoList[0] if infoList else 0 + mapLineState.ExtraStr = infoList[1] if len(infoList) > 1 else '' + mapLineState.ExtraStrLen = len(mapLineState.ExtraStr) fblinePack.FBLineInfoList.append(mapLineState) fblinePack.Count = len(fblinePack.FBLineInfoList) -- Gitblit v1.8.0