9387 【主干】【越南】【bt7】【后端】支持跨服协助(登录通知今日协助活跃令;优化仙盟协助、跨服协助共存逻辑)

# Conflicts:
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
5个文件已修改
329 ■■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Assist.py 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py 293 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/PyDataManager.py 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAssist.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Assist.py
@@ -36,17 +36,12 @@
    GameWorld.Log("---------- 当前总协助条数: %s" % len(assistMgr.allAssistDict))
    for assist in assistMgr.allAssistDict.values():
        GameWorld.DebugLog("%s" % assist.outputString())
        GameWorld.DebugLog("IsSaveDB=%s,ObjID=%s,AssistType=%s,AssistPlayerIDList=%s" % (assist.IsSaveDB, assist.ObjID, assist.AssistType, assist.AssistPlayerIDList))
        GameWorld.DebugLog("IsSaveDB=%s,FamilyID=%s,ObjID=%s,AssistType=%s,AssistPlayerIDList=%s"
                           % (assist.IsSaveDB, assist.FamilyID, assist.ObjID, assist.AssistType, assist.AssistPlayerIDList))
        GameWorld.DebugLog("--- ")
        
    GameWorld.DebugLog("--- ")
    for familyID, assistList in assistMgr.familyAssistDict.items():
        GameWorld.DebugLog("仙盟协助列表: %s, 条数: %s" % (familyID, len(assistList)))
        for assist in assistList:
            GameWorld.DebugLog("    %s" % assist.GUID)
    GameWorld.DebugLog("--- ")
    for playerID, assistList in assistMgr.playerNoSaveDBAssistDict.items():
    for playerID, assistList in assistMgr.playerAssistDict.items():
        GameWorld.DebugLog("玩家协助列表: %s, 条数: %s" % (playerID, len(assistList)))
        for assist in assistList:
            GameWorld.DebugLog("    %s" % assist.GUID)
ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
@@ -126,6 +126,8 @@
    if GameWorld.IsCrossServer():
        #跨服PK
        CrossRealmPK.OnPlayerLoginCrossServer(curPlayer)
        #协助
        PlayerAssist.OnPlayerLoginCrossServer(curPlayer)
        return
    
    #玩家家族刷新
@@ -197,14 +199,13 @@
        #骑宠boss状态通知
        PlayerHorsePetBoss.OnLogin(curPlayer)
        #协助
        PlayerAssist.OnPlayerLogin(curPlayer, False)
        PlayerAssist.OnPlayerLogin(curPlayer)
        #天星塔
        GameWorldSkyTower.OnPlayerLogin(curPlayer)
        GMT_CTG.OnPlayerLogin(curPlayer)
        
    else:
        #协助
        PlayerAssist.OnPlayerLogin(curPlayer, True)
        pass
        
    return
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py
@@ -31,6 +31,7 @@
import ChConfig
import uuid
import time
# 协助类型
(
@@ -95,91 +96,93 @@
                           % (doCount, maxDoCount, removeCountTotal, delNoThanksCount, delUnGetThanksCount, len(assistThanksMgr.allAssistThanksList)))
    return
def OnPlayerLogin(curPlayer, isTJ=False):
def OnPlayerLoginCrossServer(curPlayer):
    # 跨服登录处理
    playerID = curPlayer.GetPlayerID()
    tagPlayerID = PlayerControl.GetAssistTagPlayerID(curPlayer)
    if tagPlayerID and not GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID):
        serverGroupID = PlayerControl.GetPlayerServerGroupID(curPlayer)
        sendMsg = {"queryType":"ResetPlayerAssist", "queryData":[playerID, tagPlayerID]}
        CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossAssist, sendMsg, [serverGroupID])
    return
def OnPlayerLogin(curPlayer):
    ## 玩家上线
    # @param isTJ: 是否脱机上线
    
    SyncCanGetAssistThanksGiftCount(curPlayer)
    
    familyID = curPlayer.GetFamilyID()
    playerID = curPlayer.GetPlayerID()
    if not familyID:
        return
    
    assistMgr = PyDataManager.GetPlayerAssistPyManager()
    if playerID in assistMgr.playerNoSaveDBAssistDict:
        playerNoSaveList = assistMgr.playerNoSaveDBAssistDict[playerID]
    # 将自己发布的重新激活并通知其他玩家
    if playerID in assistMgr.playerAssistDict:
        playerAssistList = assistMgr.playerAssistDict[playerID]
        
        # 非脱机上线
        if not isTJ:
            GameWorld.DebugLog("玩家上线,恢复协助发布到仙盟列表!", playerID)
            if familyID not in assistMgr.familyAssistDict:
                assistMgr.familyAssistDict[familyID] = []
            recoverList = []
            familyAssistList = assistMgr.familyAssistDict[familyID]
            for assistObj in playerNoSaveList:
        serverAssistList, familyAssistList = [], []
        for assistObj in playerAssistList:
            assistObj.OffLineTime = 0 # 设置为非离线
            if not assistObj.FamilyID:
                serverAssistList.append(assistObj)
            elif familyID and familyID == assistObj.FamilyID:
                familyAssistList.append(assistObj)
                recoverList.append(assistObj)
                GameWorld.DebugLog("    恢复: %s" % assistObj.GUID)
                
            if recoverList:
                # 通知本盟其他玩家
                PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack(recoverList), [playerID])
        # 脱机上线
        else:
            GameWorld.DebugLog("玩家脱机上线,强制取消发布的非存库协助!", playerID)
            for assistObj in playerNoSaveList:
                OnCancelPlayerRequestAssist(assistObj, "TJGLogin", True)
    if not isTJ:
        SyncFamilyAssist(curPlayer)
        if familyAssistList:
            PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack(familyAssistList), [playerID])
        if serverAssistList:
            SyncServerAssist(serverAssistList)
    # 全服服务器协助、仙盟协助 通知自己
    syncAssistList = []
    for assistObj in assistMgr.allAssistDict.values():
        if assistObj.OffLineTime:
            continue
        if assistObj.FamilyID and assistObj.FamilyID != familyID:
            continue
        syncAssistList.append(assistObj)
    if syncAssistList:
        NetPackCommon.SendFakePack(curPlayer, GetAssistInfoListPack(syncAssistList))
        
    # 没有协助中的信息
    if playerID in assistMgr.playerAssistingDict:
        assistObj = assistMgr.playerAssistingDict[playerID]
        if not isTJ:
            tagPlayerID = assistObj.PlayerID
            GameWorld.DebugLog("非脱机上线,继续协助!tagPlayerID=%s" % tagPlayerID, playerID)
            PlayerControl.SetAssistTagPlayerID(curPlayer, tagPlayerID)
            assistPack = ChPyNetSendPack.tagGCAssistingInfo()
            assistPack.AssistGUID = assistObj.GUID
            NetPackCommon.SendFakePack(curPlayer, assistPack)
        # 脱机上线
        else:
            OnCancelPlayerAssist(curPlayer, playerID, assistObj, "TJGLogin", True)
        tagPlayerID = assistObj.PlayerID
        GameWorld.DebugLog("非脱机上线,继续协助!tagPlayerID=%s" % tagPlayerID, playerID)
        PlayerControl.SetAssistTagPlayerID(curPlayer, tagPlayerID)
        assistPack = ChPyNetSendPack.tagGCAssistingInfo()
        assistPack.AssistGUID = assistObj.GUID
        NetPackCommon.SendFakePack(curPlayer, assistPack)
    return
def OnLeaveServer(curPlayer):
    ## 玩家离线
    familyID = curPlayer.GetFamilyID()
    if not familyID:
        return
    
    if PlayerControl.GetAssistTagPlayerID(curPlayer):
        PlayerControl.SetAssistTagPlayerID(curPlayer, 0)
        
    assistMgr = PyDataManager.GetPlayerAssistPyManager()
    if familyID not in assistMgr.familyAssistDict:
        return
    playerID = curPlayer.GetPlayerID()
    if playerID not in assistMgr.playerNoSaveDBAssistDict:
    if playerID not in assistMgr.playerAssistDict:
        #GameWorld.DebugLog("玩家没有发布过协助,离线不处理!", playerID)
        return
    playerNoSaveList = assistMgr.playerNoSaveDBAssistDict[playerID]
    familyAssistList = assistMgr.familyAssistDict[familyID]
    playerAssistList = assistMgr.playerAssistDict[playerID]
    # 暂时移除离线玩家发布的不存库协助信息,不再让其他盟友继续前往协助,已经在协助的不影响
    for assistObj in playerNoSaveList:
        if assistObj not in familyAssistList:
    for assistObj in playerAssistList:
        if assistObj.IsSaveDB:
            continue
        familyAssistList.remove(assistObj)
        SyncFamilyClearAssist(familyID, assistObj.GUID)
        GameWorld.DebugLog("玩家下线,暂时从仙盟协助列表移除玩家发布的协助: %s" % assistObj.GUID)
        assistObj.OffLineTime = int(time.time())
        if not assistObj.FamilyID:
            SyncServerClearAssist(assistObj.GUID)
        elif familyID and familyID == assistObj.FamilyID:
            SyncFamilyClearAssist(familyID, assistObj.GUID)
        GameWorld.DebugLog("玩家下线,暂时从协助列表移除玩家发布的协助: %s" % assistObj.GUID)
        
    return
@@ -190,8 +193,8 @@
    assistMgr = PyDataManager.GetPlayerAssistPyManager()
    
    # 玩家发布的
    if leavePlayerID in assistMgr.playerNoSaveDBAssistDict:
        playerAssistList = assistMgr.playerNoSaveDBAssistDict[leavePlayerID]
    if leavePlayerID in assistMgr.playerAssistDict:
        playerAssistList = assistMgr.playerAssistDict[leavePlayerID]
        for assistObj in playerAssistList[::-1]:
            if assistObj.FamilyID:
                OnCancelPlayerRequestAssist(assistObj, "LeaveFamily", True)
@@ -212,9 +215,9 @@
    playerID = curPlayer.GetPlayerID()
    
    assistMgr = PyDataManager.GetPlayerAssistPyManager()
    if playerID not in assistMgr.playerNoSaveDBAssistDict:
    if playerID not in assistMgr.playerAssistDict:
        return
    playerAssistList = assistMgr.playerNoSaveDBAssistDict[playerID]
    playerAssistList = assistMgr.playerAssistDict[playerID]
    
    for assistObj in playerAssistList[::-1]:
        gameMap = GameWorld.GetMap(assistObj.MapID)
@@ -228,6 +231,7 @@
    setattr(dbData, "IsSaveDB", isSaveDB) # 是否保存数据库,离线可协助的需要存库,如挖矿类
    setattr(dbData, "ObjID", 0) # NPC实例ID
    setattr(dbData, "ServerGroupID", serverGroupID)
    setattr(dbData, "OffLineTime", 0) # 发布玩家离线时间戳
    
    assistType = AssistType_Unknown
    if dbData.NPCID:
@@ -524,9 +528,24 @@
    if not assistPlayer:
        return
    
    assistMgr = PyDataManager.GetPlayerAssistPyManager()
    if assistGUID not in assistMgr.allAssistDict:
        GameWorld.DebugLog("不存在该协助!assistGUID=%s" % assistGUID)
        return
    assistObj = assistMgr.allAssistDict[assistGUID]
    # 设置协助
    PlayerControl.SetAssistTagPlayerID(assistPlayer, tagPlayerID)
    
    if assistPlayerID in assistMgr.playerAssistingDict:
        assistingObj = assistMgr.playerAssistingDict[assistPlayerID]
        if assistGUID != assistingObj.GUID:
            OnCancelPlayerAssist(assistPlayer, assistPlayerID, assistingObj, "StartNewAssistBoss", True)
    assistMgr.playerAssistingDict[assistPlayerID] = assistObj
    if assistPlayerID not in assistObj.AssistPlayerIDList:
        assistObj.AssistPlayerIDList.append(assistPlayerID)
    assistPack = ChPyNetSendPack.tagGCAssistingInfo()
    assistPack.AssistGUID = assistGUID
    NetPackCommon.SendFakePack(assistPlayer, assistPack)
@@ -556,8 +575,8 @@
    elif queryType == "OnCancelBossRequestAssist":
        mapID, lineID, npcID, objID, reason = queryData
        assistMgr = PyDataManager.GetPlayerAssistPyManager()
        if playerID in assistMgr.playerNoSaveDBAssistDict:
            playerAssistList = assistMgr.playerNoSaveDBAssistDict[playerID]
        if playerID in assistMgr.playerAssistDict:
            playerAssistList = assistMgr.playerAssistDict[playerID]
            for assistObj in playerAssistList:
                if assistObj.MapID == mapID and assistObj.LineID == lineID and assistObj.NPCID == npcID and assistObj.ObjID == objID:
                    OnCancelPlayerRequestAssist(assistObj, reason, False)
@@ -632,8 +651,8 @@
    reqAssistObj = None
    addNewAssist = False
    assistMgr = PyDataManager.GetPlayerAssistPyManager()
    if playerID in assistMgr.playerNoSaveDBAssistDict:
        playerAssistList = assistMgr.playerNoSaveDBAssistDict[playerID]
    if playerID in assistMgr.playerAssistDict:
        playerAssistList = assistMgr.playerAssistDict[playerID]
        for assistObj in playerAssistList:
            if assistObj.AssistType != AssistType_Boss:
                continue
@@ -682,8 +701,8 @@
    reqAssistObj = None
    addNewAssist = False
    assistMgr = PyDataManager.GetPlayerAssistPyManager()
    if playerID in assistMgr.playerNoSaveDBAssistDict:
        playerAssistList = assistMgr.playerNoSaveDBAssistDict[playerID]
    if playerID in assistMgr.playerAssistDict:
        playerAssistList = assistMgr.playerAssistDict[playerID]
        for assistObj in playerAssistList:
            if assistObj.AssistType != AssistType_Boss:
                continue
@@ -703,19 +722,8 @@
        return
    
    # 通知本服玩家
    funcLimitLV = PlayerControl.GetFuncLimitLV(ShareDefine.GameFuncID_PenglaiBoss)
    clientPack = GetAssistInfoListPack([reqAssistObj])
    playerManager = GameWorld.GetPlayerManager()
    for i in xrange(playerManager.GetActivePlayerCount()):
        player = playerManager.GetActivePlayerAt(i)
        if player == None:
            continue
        if player.GetLV() < funcLimitLV:
            continue
        if PlayerControl.GetIsTJG(player):
            continue
        NetPackCommon.SendFakePack(player, clientPack)
    SyncServerAssist([reqAssistObj])
    # 广播请求
    PlayerControl.WorldNotify(0, "AssistBossRequest%s" % notifyNum, [curPlayer.GetName(), mapID, npcLV, npcID])
    return
@@ -751,6 +759,11 @@
        CrossServerMsg_BossAssistOver(queryType, queryData)
        return
    
    # 重置玩家协助
    if queryType == "ResetPlayerAssist":
        CrossServerMsg_ResetPlayerAssist(queryType, queryData)
        return
    return
def ClientServerMsg_CrossAssist(serverGroupID, msgData, tick):
@@ -779,8 +792,8 @@
    reqAssistObj = None
    addNewAssist = False
    assistMgr = PyDataManager.GetPlayerAssistPyManager()
    if playerID in assistMgr.playerNoSaveDBAssistDict:
        playerAssistList = assistMgr.playerNoSaveDBAssistDict[playerID]
    if playerID in assistMgr.playerAssistDict:
        playerAssistList = assistMgr.playerAssistDict[playerID]
        for assistObj in playerAssistList:
            if assistObj.AssistType != AssistType_TeamFB:
                continue
@@ -837,18 +850,12 @@
    
    #assistMgr = PyDataManager.GetPlayerAssistPyManager()
    assistMgr.allAssistDict[assistGUID] = assistObj
    if familyID:
        if familyID not in assistMgr.familyAssistDict:
            assistMgr.familyAssistDict[familyID] = []
        familyAssistList = assistMgr.familyAssistDict[familyID]
        familyAssistList.append(assistObj)
    
    if not isSaveDB:
        if playerID not in assistMgr.playerNoSaveDBAssistDict:
            assistMgr.playerNoSaveDBAssistDict[playerID] = []
        playerAssistList = assistMgr.playerNoSaveDBAssistDict[playerID]
        playerAssistList.append(assistObj)
    if playerID not in assistMgr.playerAssistDict:
        assistMgr.playerAssistDict[playerID] = []
    playerAssistList = assistMgr.playerAssistDict[playerID]
    playerAssistList.append(assistObj)
    GameWorld.DebugLog("    增加新协助请求: familyID=%s,mapID=%s,lineID=%s,npcID=%s,objID=%s,exData=%s,assistGUID=%s" 
                       % (familyID, mapID, lineID, npcID, objID, exData, assistGUID), playerID)
    return assistObj
@@ -906,13 +913,8 @@
        return
    assistMgr.allAssistDict.pop(assistGUID)
    
    if familyID in assistMgr.familyAssistDict:
        familyAssistList = assistMgr.familyAssistDict[familyID]
        if assistObj in familyAssistList:
            familyAssistList.remove(assistObj)
    if playerID in assistMgr.playerNoSaveDBAssistDict:
        playerAssistList = assistMgr.playerNoSaveDBAssistDict[playerID]
    if playerID in assistMgr.playerAssistDict:
        playerAssistList = assistMgr.playerAssistDict[playerID]
        if assistObj in playerAssistList:
            playerAssistList.remove(assistObj)
            
@@ -956,29 +958,28 @@
        return
    assistObj = assistMgr.allAssistDict.pop(assistGUID)
    playerID = assistObj.PlayerID
    assistType = assistObj.AssistType
    
    GameWorld.Log("收到跨服取消协助boss请求: %s assistGUID=%s,reason=%s,isGameServer=%s" % (queryType, assistGUID, reason, isGameServer), playerID)
    
    if playerID in assistMgr.playerNoSaveDBAssistDict:
        playerAssistList = assistMgr.playerNoSaveDBAssistDict[playerID]
    if playerID in assistMgr.playerAssistDict:
        playerAssistList = assistMgr.playerAssistDict[playerID]
        if assistObj in playerAssistList:
            playerAssistList.remove(assistObj)
            
    # 通知本服玩家
    clearPack = ChPyNetSendPack.tagGCClearAssist()
    clearPack.AssistGUID = assistGUID
    funcLimitLV = PlayerControl.GetFuncLimitLV(ShareDefine.GameFuncID_PenglaiBoss)
    playerManager = GameWorld.GetPlayerManager()
    for i in xrange(playerManager.GetActivePlayerCount()):
        player = playerManager.GetActivePlayerAt(i)
        if player == None:
            continue
        if player.GetLV() < funcLimitLV:
            continue
        if PlayerControl.GetIsTJG(player):
            continue
        NetPackCommon.SendFakePack(player, clearPack)
    # 取消boss协助
    if assistType == AssistType_Boss:
        # 强制取消正在协助中的玩家
        playerMgr = GameWorld.GetPlayerManager()
        for assPlayerID in assistObj.AssistPlayerIDList[::-1]:
            assistObj.AssistPlayerIDList.remove(assPlayerID)
            if assPlayerID in assistMgr.playerAssistingDict:
                assistingObj = assistMgr.playerAssistingDict[assPlayerID]
                if assistingObj.GUID == assistGUID:
                    assPlayer = playerMgr.FindPlayerByID(assPlayerID)
                    OnCancelPlayerAssist(assPlayer, assPlayerID, assistObj, reason, isGameServer, isNotify=False)
    SyncServerClearAssist(assistGUID)
    return
def OnCancelPlayerAssist(cancelPlayer, cancelPlayerID, assistObj, reason, isGameServer, isNotify=True):
@@ -1066,15 +1067,29 @@
    PlayerControl.SetAssistTagPlayerID(cancelPlayer, 0)
    return
def CrossServerMsg_ResetPlayerAssist(queryType, queryData):
    ## 收到跨服服务器 - 重置玩家协助
    ##
    playerID, tagPlayerID = queryData
    GameWorld.Log("收到跨服重置玩家协助: playerID=%s,tagPlayerID=%s" % (playerID, tagPlayerID), playerID)
    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
    if not curPlayer:
        return
    PlayerControl.SetAssistTagPlayerID(curPlayer, 0)
    return
def __DoBossAssistOver(queryData):
    ## boss协助结束,一般是boss被击杀 或 被系统
    mapID, lineID, npcID, objID, noAssistPlayerIDList, assistAwardItemID, assistAwardResult = queryData
    isCrossServer = GameWorld.IsCrossServer()
    assistMgr = PyDataManager.GetPlayerAssistPyManager()
    for noAssistPlayerID in noAssistPlayerIDList:
        if noAssistPlayerID not in assistMgr.playerNoSaveDBAssistDict:
        if noAssistPlayerID not in assistMgr.playerAssistDict:
            continue
        playerAssistList = assistMgr.playerNoSaveDBAssistDict[noAssistPlayerID]
        playerAssistList = assistMgr.playerAssistDict[noAssistPlayerID]
        for assistObj in playerAssistList:
            if assistObj.MapID == mapID and assistObj.LineID == lineID and assistObj.NPCID == npcID and assistObj.ObjID == objID:
                OnCancelPlayerRequestAssist(assistObj, "BossAssistOver", False)
@@ -1142,9 +1157,9 @@
    ## 副本协助结束
    mapID, lineID, noAssistPlayerID, assistAwardItemID, assistPlayerDict = queryData
    assistMgr = PyDataManager.GetPlayerAssistPyManager()
    if noAssistPlayerID not in assistMgr.playerNoSaveDBAssistDict:
    if noAssistPlayerID not in assistMgr.playerAssistDict:
        return
    playerAssistList = assistMgr.playerNoSaveDBAssistDict[noAssistPlayerID]
    playerAssistList = assistMgr.playerAssistDict[noAssistPlayerID]
    for assistObj in playerAssistList:
        if assistObj.MapID == mapID and assistObj.LineID == lineID:
            OnCancelPlayerRequestAssist(assistObj, "FBAssistOver", False)
@@ -1393,7 +1408,11 @@
    if not familyID:
        return
    assistMgr = PyDataManager.GetPlayerAssistPyManager()
    familyAssistList = assistMgr.familyAssistDict.get(familyID, [])
    familyAssistList = []
    for assistObj in assistMgr.allAssistDict.values():
        if not assistObj.FamilyID or familyID != assistObj.FamilyID or assistObj.OffLineTime:
            continue
        familyAssistList.append(assistObj)
    if not familyAssistList:
        return
    NetPackCommon.SendFakePack(curPlayer, GetAssistInfoListPack(familyAssistList))
@@ -1406,3 +1425,37 @@
    PlayerFamily.SendFamilyFakePack(familyID, clearPack)
    return
def SyncServerAssist(assistList):
    # 通知本服玩家协助请求信息
    funcLimitLV = PlayerControl.GetFuncLimitLV(ShareDefine.GameFuncID_PenglaiBoss)
    clientPack = GetAssistInfoListPack(assistList)
    playerManager = GameWorld.GetPlayerManager()
    for i in xrange(playerManager.GetActivePlayerCount()):
        player = playerManager.GetActivePlayerAt(i)
        if player == None:
            continue
        if player.GetLV() < funcLimitLV:
            continue
        if PlayerControl.GetIsTJG(player):
            continue
        NetPackCommon.SendFakePack(player, clientPack)
    return
def SyncServerClearAssist(assistGUID):
    # 通知本服玩家清除协助
    clearPack = ChPyNetSendPack.tagGCClearAssist()
    clearPack.AssistGUID = assistGUID
    funcLimitLV = PlayerControl.GetFuncLimitLV(ShareDefine.GameFuncID_PenglaiBoss)
    playerManager = GameWorld.GetPlayerManager()
    for i in xrange(playerManager.GetActivePlayerCount()):
        player = playerManager.GetActivePlayerAt(i)
        if player == None:
            continue
        if player.GetLV() < funcLimitLV:
            continue
        if PlayerControl.GetIsTJG(player):
            continue
        NetPackCommon.SendFakePack(player, clearPack)
    return
ServerPython/CoreServerGroup/GameServer/Script/PyDataManager.py
@@ -91,9 +91,8 @@
    
    def __init__(self):
        self.allAssistDict = {} # 所有协助 {GUID:tagDBAssist, ...}
        self.familyAssistDict = {} # 仙盟协助缓存 {familyID:[tagDBAssist, ...], ...}
        
        self.playerNoSaveDBAssistDict = {} # 玩家发布的不存库协助 {playerID:[tagDBAssist, ...], ...}
        self.playerAssistDict = {} # 玩家发布的协助 {playerID:[tagDBAssist, ...], ...}
        self.playerAssistingDict = {} # 玩家正在协助中的协助,只能存在一条 {playerID:tagDBAssist, ...}
        return
    
@@ -125,11 +124,11 @@
            PlayerAssist.OnInitAssistData(dbData, 1)
            
            self.allAssistDict[dbData.GUID] = dbData
            familyID = dbData.FamilyID
            if familyID not in self.familyAssistDict:
                self.familyAssistDict[familyID] = []
            familyAssistList = self.familyAssistDict[familyID]
            familyAssistList.append(dbData)
            PlayerID = dbData.PlayerID
            if PlayerID not in self.playerAssistDict:
                self.playerAssistDict[PlayerID] = []
            playerAssistList = self.playerAssistDict[PlayerID]
            playerAssistList.append(dbData)
            
        return pos
    
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAssist.py
@@ -42,6 +42,11 @@
    Sync_TodayAssistMoneyInfo(curPlayer)
    return
def OnPlayerLogin(curPlayer):
    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayAssistMoney):
        Sync_TodayAssistMoneyInfo(curPlayer)
    return
def OnPlayerLeaveMap(curPlayer):
    ## 玩家离开地图处理