From 2a29dc5550dc92459f0a0affd5b9c4ac1fee950c Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 12 十一月 2018 19:55:11 +0800 Subject: [PATCH] 2250 【1.2】队伍分线成员管理异常;(添加队伍变更跟踪流向) --- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py | 43 +++++++++++++++++++++++++++++++------------ 1 files changed, 31 insertions(+), 12 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py index 06b53bd..cfcf366 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py @@ -22,6 +22,7 @@ import IPY_GameServer import ChGameToMapPyPack import ChPyNetSendPack +import DataRecordPack import PlayerControl import ShareDefine import PyGameData @@ -301,13 +302,14 @@ #设置当前玩家为队长 curNewTeamMenber = curNewTeam.GetMemberByID(curPlayerID) if curNewTeamMenber == None: - GameWorld.ErrLog("设置当前创建队伍玩家为队长, 找不到玩家!", curPlayerID) + GameWorld.ErrLog("设置当前创建队伍玩家为队长, 找不到玩家!teamID=%s" % teamID, curPlayerID) + DR_Team("CreateError", teamID, {"Leader":curPlayerID, "tagMapID":tagMapID, "tagMapEx":tagMapEx, "reqMinLV":reqMinLV, "reqMaxLV":reqMaxLV}) return __SetTeamLV(curNewTeamMenber, IPY_GameServer.tmlLeader, False) if isSync: Sync_TeamMemberInfo(curNewTeam) - SyncMapServerTeamInfo(curNewTeam) + SyncMapServerTeamInfo(curNewTeam, "Create", {"Leader":curPlayerID, "tagMapID":tagMapID, "tagMapEx":tagMapEx, "reqMinLV":reqMinLV, "reqMaxLV":reqMaxLV}) DelPlayerIDFromMatchingList(curPlayer) return curNewTeam @@ -828,7 +830,7 @@ #通知MapServerd队伍变更 #teamPlayer.MapServer_Sync_Team(__GetPlayerTeamLV(teamPlayer)) #joinPlayer.MapServer_Sync_Team(__GetPlayerTeamLV(joinPlayer)) - SyncMapServerTeamInfo(tagTeam) + SyncMapServerTeamInfo(tagTeam, "Join", {"teamPlayer":teamPlayer.GetPlayerID(), "joinPlayer":joinPlayer.GetPlayerID()}) #通知 #EnterProcession <%S%>加入了队伍! 改为 GeRen_chenxin_543685 @@ -866,22 +868,29 @@ teamMember = curTeam.GetMemberByID(curPlayer.GetPlayerID()) return teamMember.GetTeamLV() -def SyncMapServerTeamInfo(curTeam): +def SyncMapServerTeamInfo(curTeam, eventName="", drDict={}): '''同步队伍信息到 MapServer 给所有在线队员 @note: 需要全队同步的情况:创建队伍、队员加入、退出、上线、下线、切换地图、VIP等级变更、VIP到期时间更新 ''' if not curTeam: + DR_Team("%s_Error" % eventName, 0, drDict) return teamID = curTeam.GetTeamID() syncPlayerList = [] memInfoList = [] + memList = [] for index in xrange(curTeam.GetMemberCount()): memPlayer = curTeam.GetMemberPlayer(index) memberInfo = curTeam.GetMemberInfo(index) - if not memPlayer or not memberInfo: + if not memberInfo: + memList.append(["not memberInfo"]) + continue + if not memPlayer: + memList.append(["not memPlayer"]) continue memPlayerID = memPlayer.GetPlayerID() if not memPlayerID: + memList.append(["not memPlayerID"]) continue memInfo = ChGameToMapPyPack.tagGMTeamMemInfo() memInfo.PlayerID = memPlayerID @@ -889,6 +898,7 @@ memInfo.VIPLV = PlayerControl.GetValidVIPLV(memPlayer) memInfoList.append(memInfo) syncPlayerList.append([memPlayer, memberInfo.GetTeamLV()]) + memList.append([memPlayerID, memPlayer.GetTeamID(), memberInfo.GetTeamLV(), memPlayer.GetMapID(), memPlayer.GetFBID()]) for player, teamLV in syncPlayerList: teamInfo = ChGameToMapPyPack.tagGMTeamInfo() @@ -899,6 +909,8 @@ teamInfo.MemCnt = len(teamInfo.MemInfoList) NetPackCommon.SendPyPackToMapServer(player.GetLineNO(), player.GetRealMapID(), teamInfo) + drDict.update({"MemList":memList}) + DR_Team(eventName, teamID, drDict) return #--------------------------------------------------------------------- @@ -1197,7 +1209,7 @@ #通知客户端队伍成员属性变更 #curTeam.Sync_TeamState() Sync_TeamMemberInfo(curTeam) - SyncMapServerTeamInfo(curTeam) + SyncMapServerTeamInfo(curTeam, "ChangeMemTeamLV", {"tagPlayerID":tagPlayerID, "memberLV":memberLV}) return #--------------------------------------------------------------------- #=============================================================================== @@ -1337,7 +1349,7 @@ #广播队伍刷新 #curTeam.Sync_TeamState() Sync_TeamMemberInfo(curTeam) - SyncMapServerTeamInfo(curTeam) + SyncMapServerTeamInfo(curTeam, "Leave", {"delPlayerID":delPlayerID, "msg":msg}) #无人在线 if curTeam.GetTeamPlayerCount() <= 0: @@ -1751,7 +1763,7 @@ DelTeamIDFromTagMapTeamDict(curTeamID) DelTeamIDFromMatchingList(curTeam) - SyncMapServerTeamInfo(curTeam) + SyncMapServerTeamInfo(curTeam, "LogOff", {"playerID":playerID}) return def OnPlayerLoginRefreshTeam(curPlayer, tick): @@ -1826,7 +1838,7 @@ #通知队伍成员玩家信息 #curTeam.Sync_TeamState() Sync_TeamMemberInfo(curTeam) - SyncMapServerTeamInfo(curTeam) + SyncMapServerTeamInfo(curTeam, "Login", {"playerID":playerID}) if not PlayerControl.GetIsTJG(curPlayer): #通知自己队伍玩家上线 @@ -1892,7 +1904,7 @@ curTeam = curPlayer.GetTeam() if curTeam != None: - SyncMapServerTeamInfo(curTeam) + SyncMapServerTeamInfo(curTeam, "ChangeMap", {"playerID":playerID, "mapID":mapID}) #通知客户端更新 curPlayer.Sync_TeamMemberChangeMap() # 09 13 队伍成员切换地图#tagTeamMemberChangeMap @@ -1951,7 +1963,7 @@ elif refreshType == IPY_GameServer.CDBPlayerRefresh_OfficialRank: teamMember.SetPlayerRealmLV(value) elif refreshType in [IPY_GameServer.CDBPlayerRefresh_VIPLv, IPY_GameServer.CDBPlayerRefresh_ExAttr9]: - SyncMapServerTeamInfo(curTeam) + SyncMapServerTeamInfo(curTeam, "Refresh", {"refreshType":refreshType, "value":value}) else: return @@ -3061,4 +3073,11 @@ if curInviteCnt >= inviteCnt: break - return \ No newline at end of file + return + +def DR_Team(eventName, teamID, dataDict): + drDict = {"EventName":eventName, "TeamID":teamID} + drDict.update(dataDict) + DataRecordPack.SendEventPack("Team_GameServer", drDict) + return + -- Gitblit v1.8.0