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
    
@@ -2781,6 +2793,12 @@
            
            if memPlayerID in causePlayerDict:
                PlayerControl.NotifyCode(memPlayer, notifyList[0], [askMapID])
                if notifyRet in [ShareDefine.EntFBAskRet_NoEnterCnt, ShareDefine.EntFBAskRet_EnterCD, ShareDefine.EntFBAskRet_NoTicket]:
                    failPack = ChPyNetSendPack.tagGCEnterTeamFBFailReason()
                    failPack.MapID = askMapID
                    failPack.AskType = retAskType
                    failPack.Reason = notifyRet
                    NetPackCommon.SendFakePack(memPlayer, failPack)
            else:
                PlayerControl.NotifyCode(memPlayer, notifyList[1], [askMapID, causePlayerName])
    return
@@ -3055,4 +3073,11 @@
        if curInviteCnt >= inviteCnt:
            break
        
    return
    return
def DR_Team(eventName, teamID, dataDict):
    drDict = {"EventName":eventName, "TeamID":teamID}
    drDict.update(dataDict)
    DataRecordPack.SendEventPack("Team_GameServer", drDict)
    return