4762 【后端】混乱妖域社交关系加成取实时,离线玩家不算;增加同步社交总加成信息;
10个文件已修改
292 ■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFriend.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamRelation.py 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -24487,11 +24487,13 @@
    Head = tagHead()
    MapID = 0    #(DWORD MapID)
    FuncLineID = 0    #(BYTE FuncLineID)
    XianyuanCoinAdd = 0    #(WORD XianyuanCoinAdd)// 增加的仙缘币,0代表已达上限
    Relation = 0    #(BYTE Relation)// 当时的关系:0-无,1-好友,2-盟友
    RelationCoinAdd = 0    #(BYTE RelationCoinAdd)// 社交关系总加成
    XianyuanCoinAdd = 0    #(WORD XianyuanCoinAdd)// 实际增加的仙缘币
    Reason = 0    #(BYTE Reason)//仙缘币为0时的原因:1-助战次数上限;2-每日获得上限
    CallPlayerID = 0    #(DWORD CallPlayerID)// 助战的玩家ID,有值时代表真实助战,没有值时为自己打的
    NameLen = 0    #(BYTE NameLen)
    CallPlayerName = ""    #(String CallPlayerName)// 助战的玩家名,size = NameLen
    Reason = 0    #(BYTE Reason)//仙缘币为0时的原因:1-助战次数上限;2-每日获得上限
    data = None
    def __init__(self):
@@ -24505,11 +24507,13 @@
        _pos = self.Head.ReadData(_lpData, _pos)
        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FuncLineID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Relation,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RelationCoinAdd,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.XianyuanCoinAdd,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Reason,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.CallPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.CallPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.Reason,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -24519,11 +24523,13 @@
        self.Head.SubCmd = 0x08
        self.MapID = 0
        self.FuncLineID = 0
        self.Relation = 0
        self.RelationCoinAdd = 0
        self.XianyuanCoinAdd = 0
        self.Reason = 0
        self.CallPlayerID = 0
        self.NameLen = 0
        self.CallPlayerName = ""
        self.Reason = 0
        return
    def GetLength(self):
@@ -24531,11 +24537,13 @@
        length += self.Head.GetLength()
        length += 4
        length += 1
        length += 1
        length += 1
        length += 2
        length += 1
        length += 4
        length += 1
        length += len(self.CallPlayerName)
        length += 1
        return length
@@ -24544,11 +24552,13 @@
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.MapID)
        data = CommFunc.WriteBYTE(data, self.FuncLineID)
        data = CommFunc.WriteBYTE(data, self.Relation)
        data = CommFunc.WriteBYTE(data, self.RelationCoinAdd)
        data = CommFunc.WriteWORD(data, self.XianyuanCoinAdd)
        data = CommFunc.WriteBYTE(data, self.Reason)
        data = CommFunc.WriteDWORD(data, self.CallPlayerID)
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.CallPlayerName)
        data = CommFunc.WriteBYTE(data, self.Reason)
        return data
    def OutputString(self):
@@ -24556,21 +24566,25 @@
                                Head:%s,
                                MapID:%d,
                                FuncLineID:%d,
                                Relation:%d,
                                RelationCoinAdd:%d,
                                XianyuanCoinAdd:%d,
                                Reason:%d,
                                CallPlayerID:%d,
                                NameLen:%d,
                                CallPlayerName:%s,
                                Reason:%d
                                CallPlayerName:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.MapID,
                                self.FuncLineID,
                                self.Relation,
                                self.RelationCoinAdd,
                                self.XianyuanCoinAdd,
                                self.Reason,
                                self.CallPlayerID,
                                self.NameLen,
                                self.CallPlayerName,
                                self.Reason
                                self.CallPlayerName
                                )
        return DumpString
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
@@ -41,6 +41,7 @@
import PlayerViewCache
import GameWorldBoss
import PlayerTalk
import PlayerTeam
import copy
import random
@@ -350,6 +351,7 @@
    __OnFamilyNameChange(jionPlayer.GetPlayerID(), curFamily.GetName())
    #玩家缓存
    PlayerViewCache.OnPlayerFamilyChange(jionPlayer.GetPlayerID(), curFamily.GetID(), curFamily.GetName())
    PlayerTeam.OnTeamMemFamilyRefresh(jionPlayer, curFamily.GetID())
    #加入仙盟联赛成员
    GameWorldFamilyWar.AddFamilyWarMem(jionPlayer.GetPlayerID(), curFamily.GetID())
    GameWorldFamilyWar.CheckPlayerJoinFamilyWarInfo(jionPlayer)
@@ -1803,6 +1805,7 @@
    
    #弹劾信息封包
    SendPackClientImpeachMsg(curPlayer, 0, 0)
    PlayerTeam.OnTeamMemFamilyRefresh(curPlayer, 0)
    return
#---------------------------------------------------------------------
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFriend.py
@@ -27,6 +27,7 @@
import PlayerSocial
import copy
import PlayerViewCache
import PlayerTeam
#---------------------------------------------------------------------
@@ -223,6 +224,7 @@
    tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(friendID)
    if tagPlayer != None:
        PlayerControl.NotifyCode(tagPlayer, 'Friend_DeleteFriend2', [curPlayer.GetName()])
    PlayerTeam.OnTeamMemFriendChange(curPlayer, friendID, False)
    return
@@ -325,6 +327,7 @@
        PlayerControl.NotifyCode(curPlayer, 'Friend_MakeFriend', [cacheDict['Name']])  
        # 记录等对方上线通知地图,任务等会用到触发逻辑,通用记录次数即可, MapServer_SyncFriendInfo为具体的好友数量,根据策划需求制作
        pass
    PlayerTeam.OnTeamMemFriendChange(curPlayer, srcPlayerID, True)
    return
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py
@@ -1877,6 +1877,7 @@
    #如果队伍正在匹配中,则通知状态
    if IsTeamMatchingPlayer(curTeamID):
        Sync_TeamMatchState(curPlayer, True)
    OnTeamMemFamilyRefresh(curPlayer, curPlayer.GetFamilyID())
    return True
#---------------------------------------------------------------------
@@ -2953,10 +2954,59 @@
    PyGameData.g_prepareTeamDict.pop(teamID)
    
    # 同步进入组队副本的队员关系到目标地图
    relationInfo = str([teamID, friendList, memFamilyIDDict, memNameDict])
    relationInfo = str(["InitRelation", teamID, friendList, memFamilyIDDict, memNameDict])
    leader.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamRelation", relationInfo, len(relationInfo))
    return
def OnTeamMemFriendChange(curPlayer, tagPlayerID, isFriend):
    ## 队员好友关系变更,离线也同步
    teamID = curPlayer.GetTeamID()
    if not teamID:
        GameWorld.DebugLog("好友变更,无队伍不管!")
        return
    curMapData = GameWorld.GetMap(curPlayer.GetMapID())
    if not curMapData or curMapData.GetMapFBType() != ChConfig.fbtTeam:
        GameWorld.DebugLog("好友变更,不在组队副本不管!")
        return
    isSameTeam = False
    playerID = curPlayer.GetPlayerID()
    curTeam = curPlayer.GetTeam()
    for index in xrange(curTeam.GetMemberCount()):
        memberInfo = curTeam.GetMemberInfo(index)
        if not memberInfo:
            continue
        memPlayerID = memberInfo.GetPlayerID()
        if tagPlayerID == memPlayerID:
            isSameTeam = True
            break
    if not isSameTeam:
        GameWorld.DebugLog("好友关系变更,不是同队伍不管!")
        return
    relationInfo = str(["FriendChange", teamID, playerID, tagPlayerID, isFriend])
    curPlayer.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamRelation", relationInfo, len(relationInfo))
    return
def OnTeamMemFamilyRefresh(curPlayer, familyID):
    ## 队员仙盟变更,仅在线同步,上线同步
    if not curPlayer:
        return
    teamID = curPlayer.GetTeamID()
    if not teamID:
        GameWorld.DebugLog("家族变更,无队伍不管!")
        return
    curMapData = GameWorld.GetMap(curPlayer.GetMapID())
    if not curMapData or curMapData.GetMapFBType() != ChConfig.fbtTeam:
        GameWorld.DebugLog("家族变更,不在组队副本不管!")
        return
    playerID = curPlayer.GetPlayerID()
    familyID = curPlayer.GetFamilyID()
    relationInfo = str(["FamilyChange", teamID, playerID, familyID])
    curPlayer.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamRelation", relationInfo, len(relationInfo))
    return
def __CheckTeamFBPlayerExist(curTeam):
    ##玩家离开副本
    # @param curTeam 队伍实例
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -24487,11 +24487,13 @@
    Head = tagHead()
    MapID = 0    #(DWORD MapID)
    FuncLineID = 0    #(BYTE FuncLineID)
    XianyuanCoinAdd = 0    #(WORD XianyuanCoinAdd)// 增加的仙缘币,0代表已达上限
    Relation = 0    #(BYTE Relation)// 当时的关系:0-无,1-好友,2-盟友
    RelationCoinAdd = 0    #(BYTE RelationCoinAdd)// 社交关系总加成
    XianyuanCoinAdd = 0    #(WORD XianyuanCoinAdd)// 实际增加的仙缘币
    Reason = 0    #(BYTE Reason)//仙缘币为0时的原因:1-助战次数上限;2-每日获得上限
    CallPlayerID = 0    #(DWORD CallPlayerID)// 助战的玩家ID,有值时代表真实助战,没有值时为自己打的
    NameLen = 0    #(BYTE NameLen)
    CallPlayerName = ""    #(String CallPlayerName)// 助战的玩家名,size = NameLen
    Reason = 0    #(BYTE Reason)//仙缘币为0时的原因:1-助战次数上限;2-每日获得上限
    data = None
    def __init__(self):
@@ -24505,11 +24507,13 @@
        _pos = self.Head.ReadData(_lpData, _pos)
        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FuncLineID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Relation,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RelationCoinAdd,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.XianyuanCoinAdd,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Reason,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.CallPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.CallPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.Reason,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -24519,11 +24523,13 @@
        self.Head.SubCmd = 0x08
        self.MapID = 0
        self.FuncLineID = 0
        self.Relation = 0
        self.RelationCoinAdd = 0
        self.XianyuanCoinAdd = 0
        self.Reason = 0
        self.CallPlayerID = 0
        self.NameLen = 0
        self.CallPlayerName = ""
        self.Reason = 0
        return
    def GetLength(self):
@@ -24531,11 +24537,13 @@
        length += self.Head.GetLength()
        length += 4
        length += 1
        length += 1
        length += 1
        length += 2
        length += 1
        length += 4
        length += 1
        length += len(self.CallPlayerName)
        length += 1
        return length
@@ -24544,11 +24552,13 @@
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.MapID)
        data = CommFunc.WriteBYTE(data, self.FuncLineID)
        data = CommFunc.WriteBYTE(data, self.Relation)
        data = CommFunc.WriteBYTE(data, self.RelationCoinAdd)
        data = CommFunc.WriteWORD(data, self.XianyuanCoinAdd)
        data = CommFunc.WriteBYTE(data, self.Reason)
        data = CommFunc.WriteDWORD(data, self.CallPlayerID)
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.CallPlayerName)
        data = CommFunc.WriteBYTE(data, self.Reason)
        return data
    def OutputString(self):
@@ -24556,21 +24566,25 @@
                                Head:%s,
                                MapID:%d,
                                FuncLineID:%d,
                                Relation:%d,
                                RelationCoinAdd:%d,
                                XianyuanCoinAdd:%d,
                                Reason:%d,
                                CallPlayerID:%d,
                                NameLen:%d,
                                CallPlayerName:%s,
                                Reason:%d
                                CallPlayerName:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.MapID,
                                self.FuncLineID,
                                self.Relation,
                                self.RelationCoinAdd,
                                self.XianyuanCoinAdd,
                                self.Reason,
                                self.CallPlayerID,
                                self.NameLen,
                                self.CallPlayerName,
                                self.Reason
                                self.CallPlayerName
                                )
        return DumpString
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
@@ -65,6 +65,7 @@
Help_leaderID = 'leaderID' #渡劫玩家ID
Help_isHelp = 'isHelp' #本次是否是助战
Help_helpCount = 'helpCount' #该副本今日已助战次数
Help_relation = 'relation' #该副本关系加成信息 [优先关系, 总加成]
#副本结算信息通用key
Over_dataMapID = 'dataMapID' #数据地图ID
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py
@@ -474,7 +474,7 @@
    #                       % (todayXianyuanCoin, playerXianyuanCoinUpper), playerID)
    #    return
    
    relationAdd, relationPlayerID, relationPlayerName = 0, 0, ""
    relation, relationAdd, relationPlayerID, relationPlayerName = 0, 0, 0, ""
    
    fbType = GameWorld.GetMap().GetMapFBType()
    if fbType == IPY_GameWorld.fbtSingle:
@@ -486,8 +486,9 @@
            relationAddList = relationCoinAddDict.get(str(relation), [])
            relationAdd += relationAddList[0] if len(relationAddList) == 2 else 0
    elif fbType == IPY_GameWorld.fbtTeam:
        relationAdd, relationPlayerID, relationPlayerName = __GetTeamFBMemRelationInfo(curPlayer, relationCoinAddDict, isHelp)
        if playerID in PyGameData.g_teamFBMemRelationAddDict:
            relation, relationAdd, relationPlayerID, relationPlayerName = PyGameData.g_teamFBMemRelationAddDict.pop(playerID)
    coinAdd = 0
    if baseFBPoint:
        coinAdd = int((baseFBPoint + relationAdd) * addCoinRate / 10000.0)
@@ -507,62 +508,100 @@
    msgPack = ChPyNetSendPack.tagMCAddXianyuanCoinMsg()
    msgPack.MapID = mapID
    msgPack.FuncLineID = lineID
    msgPack.Relation = relation
    msgPack.RelationCoinAdd = relationAdd
    msgPack.XianyuanCoinAdd = coinAddReal
    msgPack.Reason = reason
    msgPack.CallPlayerID = relationPlayerID
    msgPack.CallPlayerName = relationPlayerName
    msgPack.NameLen = len(msgPack.CallPlayerName)
    msgPack.Reason = reason
    NetPackCommon.SendFakePack(curPlayer, msgPack)
    return coinAddReal, reason
def __GetTeamFBMemRelationInfo(curPlayer, relationCoinAddDict, isHelp):
def __GetTeamFBMemRelationInfo(curPlayer, isHelp, leavePlayerID):
    ## 计算队员间相互加成信息,离线玩家不算
    relation = 0
    relationAdd = 0 # 社交关系加成
    relationPlayerID = 0
    relationPlayerName = ""
    teamID = curPlayer.GetTeamID()
    if teamID not in PyGameData.g_teamFBMemRelationDict:
        return relationAdd, relationPlayerID, relationPlayerName
        return relation, relationAdd, relationPlayerID, relationPlayerName
    
    playerManager = GameWorld.GetMapCopyPlayerManager()
    friendList, memFamilyIDDict, memNameDict = PyGameData.g_teamFBMemRelationDict[teamID]
    relationList = IpyGameDataPY.GetFuncEvalCfg("HelpBattlePoint", 3, []) # 社交关系优先级
    relationCoinAddDict = IpyGameDataPY.GetFuncEvalCfg("HelpBattlePoint", 2, {}) # 社交关系加成 {"社交关系":[过关加成, 助战加成], ...}
    playerID = curPlayer.GetPlayerID()
    familyID = curPlayer.GetFamilyID()
    if isHelp:
        # 助战的随便取一位优先级最高的即可
        for checkRelation in relationList:
            memRelation, relationPlayerID = 0, 0
            if checkRelation == 1:
                for memPlayerID in memFamilyIDDict.keys():
                    if [playerID, memPlayerID] in friendList:
                        memRelation = checkRelation
                        relationPlayerID = memPlayerID
                        break
            if checkRelation == 2:
                for memPlayerID, memFamilyID in memFamilyIDDict.items():
                    if playerID != memPlayerID and familyID and familyID == memFamilyID:
                        memRelation = checkRelation
                        relationPlayerID = memPlayerID
                        break
            if memRelation and relationPlayerID:
                relationAddList = relationCoinAddDict.get(str(memRelation), [])
                relationAdd += relationAddList[1] if len(relationAddList) == 2 else 0
                relationPlayerName = memNameDict[relationPlayerID]
                return relationAdd, relationPlayerID, relationPlayerName
        for memPlayerID, memFamilyID in memFamilyIDDict.items():
            memRelation, relationPlayerID = __GetTemMemRelation(playerManager, playerID, familyID, memPlayerID, memFamilyID, relationList, friendList, leavePlayerID)
            if not memRelation:
                continue
            relation = memRelation
            relationAddList = relationCoinAddDict.get(str(memRelation), [])
            relationAdd += relationAddList[1] if len(relationAddList) == 2 else 0
            relationPlayerName = memNameDict[relationPlayerID]
            return relation, relationAdd, relationPlayerID, relationPlayerName
    else:
        # 非助战享受所有队员加成
        for memPlayerID, memFamilyID in memFamilyIDDict.items():
            memRelation = 0
            for checkRelation in relationList:
                if [playerID, memPlayerID] in friendList:
                    memRelation = checkRelation
                    break
                if playerID != memPlayerID and familyID and familyID == memFamilyID:
                    memRelation = checkRelation
                    break
            memRelation = __GetTemMemRelation(playerManager, playerID, familyID, memPlayerID, memFamilyID, relationList, friendList, leavePlayerID)[0]
            if not memRelation:
                continue
            if memRelation == relationList[0]:
                relation = memRelation
            elif relation:
                relation = memRelation
            relationAddList = relationCoinAddDict.get(str(memRelation), [])
            relationAdd += relationAddList[0] if len(relationAddList) == 2 else 0
            
    return relationAdd, relationPlayerID, relationPlayerName
    return relation, relationAdd, relationPlayerID, relationPlayerName
def __GetTemMemRelation(playerManager, playerID, familyID, memPlayerID, memFamilyID, relationList, friendList, leavePlayerID):
    ## 离线玩家不算社交关系
    if leavePlayerID and memPlayerID == leavePlayerID:
        return 0, 0
    memPlayer = playerManager.FindPlayerByID(memPlayerID)
    if memPlayer == None or memPlayer.IsEmpty():
        return 0, 0
    for checkRelation in relationList:
        if checkRelation == 1:
            if [playerID, memPlayerID] in friendList:
                return checkRelation, memPlayerID
        if checkRelation == 2:
            if playerID != memPlayerID and familyID and familyID == memFamilyID:
                return checkRelation, memPlayerID
    return 0, 0
def RefershTeamFBMemRelation(tick, leavePlayerID=0):
    ## 刷新组队副本队员关系
    playerManager = GameWorld.GetMapCopyPlayerManager()
    for i in xrange(playerManager.GetPlayerCount()):
        player = playerManager.GetPlayerByIndex(i)
        if player == None or player.IsEmpty():
            continue
        if leavePlayerID and player.GetPlayerID() == leavePlayerID:
            PyGameData.g_teamFBMemRelationAddDict.pop(leavePlayerID, 0)
            continue
        relation, relationAdd, relationPlayerID, relationPlayerName = __GetTeamFBMemRelationInfo(player, FBCommon.GetIsHelpFight(player), leavePlayerID)
        PyGameData.g_teamFBMemRelationAddDict[player.GetPlayerID()] = [relation, relationAdd, relationPlayerID, relationPlayerName]
    for index in xrange(playerManager.GetPlayerCount()):
        player = playerManager.GetPlayerByIndex(index)
        if player == None or player.IsEmpty():
            continue
        if leavePlayerID and player.GetPlayerID() == leavePlayerID:
            continue
        FBLogic.DoFBHelp(player, tick)
    return
def GetTeamFBMemRelationInfo(playerID):
    if playerID not in PyGameData.g_teamFBMemRelationAddDict:
        return 0, 0
    return PyGameData.g_teamFBMemRelationAddDict[playerID][:2]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py
@@ -175,7 +175,8 @@
        curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, max(notify_tick, 0), True)
        __UpdChaosDemonFBStar(tick, True, curPlayer)
        
    DoFBHelp(curPlayer, tick)
    FBHelpBattle.RefershTeamFBMemRelation(tick)
    #DoFBHelp(curPlayer, tick)
    return
## 诅咒城堡刷怪
@@ -220,6 +221,9 @@
# @return 返回值无意义
def DoExitFB(curPlayer, tick):
    GameWorld.DebugLog("ChaosDemon DoExitFB...", curPlayer.GetPlayerID())
    fbStep = GameWorld.GetGameFB().GetFBStep()
    if fbStep <= FB_Step_Fight:
        FBHelpBattle.RefershTeamFBMemRelation(tick, curPlayer.GetPlayerID())
    return
##玩家主动离开副本.
@@ -511,6 +515,7 @@
# @return 无意义
# @remarks 用于通知阵营比分条
def DoFBHelp(curPlayer, tick):
    playerID = curPlayer.GetPlayerID()
    gameFB = GameWorld.GetGameFB()
    star = gameFB.GetGameFBDictByKey(ChaosDemon_FBStar)
    wheelNum = gameFB.GetGameFBDictByKey(ChaosDemon_FBNextRefreshStep)
@@ -522,8 +527,9 @@
    isHelp = FBCommon.GetIsHelpFight(curPlayer)
    helpCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FBRealHelpCount % ChConfig.Def_FBMapID_ChaosDemon)
    fbHelpDict = {FBCommon.Help_step:wheelNum, FBCommon.Help_grade:star, FBCommon.Help_npcTotal:KillNPCCnt, FBCommon.Help_lineID:lineID, 
                  FBCommon.Help_isHelp:isHelp, FBCommon.Help_helpCount:helpCount}
                  FBCommon.Help_isHelp:isHelp, FBCommon.Help_helpCount:helpCount, FBCommon.Help_relation:FBHelpBattle.GetTeamFBMemRelationInfo(playerID)}
    FBCommon.Notify_FBHelp(curPlayer, fbHelpDict)
    GameWorld.DebugLog("DoFBHelp %s" % str(fbHelpDict), playerID)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamRelation.py
@@ -17,6 +17,8 @@
#导入
import PyGameData
import GameWorld
import FBHelpBattle
import traceback
#---------------------------------------------------------------------
@@ -44,11 +46,46 @@
#  @remarks 函数详细说明.
def DoResult(curPlayer, callFunName, funResult, tick):
    try:
        teamID, friendList, memFamilyIDDict, memNameDict = eval(funResult)
        PyGameData.g_teamFBMemRelationDict[teamID] = [friendList, memFamilyIDDict, memNameDict]
        GameWorld.Log("队员关系信息: teamID=%s,friendList=%s,memFamilyIDDict=%s" % (teamID, friendList, memFamilyIDDict))
    except:
        pass
        msgList = eval(funResult)
        msgType = msgList[0]
        if msgType == "InitRelation":
            teamID, friendList, memFamilyIDDict, memNameDict = msgList[1:]
            PyGameData.g_teamFBMemRelationDict[teamID] = [friendList, memFamilyIDDict, memNameDict]
            GameWorld.Log("队员初始关系信息: teamID=%s,friendList=%s,memFamilyIDDict=%s" % (teamID, friendList, memFamilyIDDict))
            return
        if msgType == "FriendChange":
            teamID, playerID, tagPlayerID, isFriend = msgList[1:]
            GameWorld.Log("队员好友变更: teamID=%s,playerID=%s,tagPlayerID=%s,isFriend=%s" % (teamID, playerID, tagPlayerID, isFriend))
            if teamID not in PyGameData.g_teamFBMemRelationDict:
                return
            friendList = PyGameData.g_teamFBMemRelationDict[teamID][0]
            if isFriend:
                friendList.append([playerID, tagPlayerID])
                friendList.append([tagPlayerID, playerID])
            else:
                if [playerID, tagPlayerID] in friendList:
                    friendList.remove([playerID, tagPlayerID])
                if [tagPlayerID, playerID] in friendList:
                    friendList.remove([tagPlayerID, playerID])
        elif msgType == "FamilyChange":
            teamID, playerID, familyID = msgList[1:]
            GameWorld.Log("队员家族变更: teamID=%s,playerID=%s,familyID=%s" % (teamID, playerID, familyID))
            if teamID not in PyGameData.g_teamFBMemRelationDict:
                GameWorld.Log("teamID=%s, not in PyGameData.g_teamFBMemRelationDict %s" % (teamID, PyGameData.g_teamFBMemRelationDict))
                return
            memFamilyIDDict = PyGameData.g_teamFBMemRelationDict[teamID][1]
            memFamilyIDDict[playerID] = familyID
        else:
            return
        # 关系变更刷新
        FBHelpBattle.RefershTeamFBMemRelation(tick)
    except BaseException:
        errorMsg = str(traceback.format_exc())
        GameWorld.ErrLog("%s" % errorMsg)
    
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -72,5 +72,6 @@
g_fbHelpBattlePlayerDict = {} # 助战玩家信息 {playerID:{助战玩家ID:{助战玩家简要信息字典} ...}, ...}
g_teamFBMemRelationDict = {} # 组队副本队员关系信息 {teamID:[[好友组合列表], {队员ID:家族ID, ...}], }
g_teamFBMemRelationAddDict = {} # 组队副本队员关系加成信息 {playerID:[relation, relationAdd, relationPlayerID, relationPlayerName], ...}