4762 【后端】组队助战类型副本助战修改(混乱妖域);宗门、渡劫、娲皇、混乱妖域结算增加同步获得仙缘币信息;增加每日助战登记修行点;
召唤成功增加同步职业信息;
15个文件已修改
1个文件已添加
315 ■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py 117 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_DuJie.py 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MunekadoTrial.py 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamRelation.py 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -24930,6 +24930,7 @@
                  ("SubCmd", c_ubyte),
                  ("ObjID", c_int),    # 助战实例ID
                  ("PlayerID", c_int),    # 助战镜像ID,大于1小于100代表机器人,如果是机器人前端按顺序自己记录对应实例ID代表已召唤
                  ("Job", c_ubyte),    # ְҵ
                  ]
    def __init__(self):
@@ -24948,6 +24949,7 @@
        self.SubCmd = 0x06
        self.ObjID = 0
        self.PlayerID = 0
        self.Job = 0
        return
    def GetLength(self):
@@ -24961,13 +24963,15 @@
                                Cmd:%s,
                                SubCmd:%s,
                                ObjID:%d,
                                PlayerID:%d
                                PlayerID:%d,
                                Job:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ObjID,
                                self.PlayerID
                                self.PlayerID,
                                self.Job
                                )
        return DumpString
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py
@@ -24,6 +24,7 @@
import ChPyNetSendPack
import DataRecordPack
import PlayerControl
import PlayerFriend
import ShareDefine
import PyGameData
import GameWorld
@@ -2905,6 +2906,23 @@
    askMapID, askMapEx, memStateDict = PyGameData.g_prepareTeamDict[teamID][:3]
    enterInfo = GetTeamFBEnterInfo(leader, curTeam, askMapID, askMapEx)
    
    leaderID = leader.GetPlayerID()
    friendList = []
    memFamilyIDDict = {}
    memNameDict = {}
    #队长与队员的关系
    for index in xrange(curTeam.GetMemberCount()):
        memPlayer = curTeam.GetMemberPlayer(index)
        if not memPlayer or not memPlayer.GetPlayerID():
            continue
        memPlayerID = memPlayer.GetPlayerID()
        if memPlayerID not in memStateDict:
            continue
        memFamilyIDDict[memPlayerID] = memPlayer.GetFamilyID() # 存储各队员的家族ID
        memNameDict[memPlayerID] = memPlayer.GetName()
        if leaderID != memPlayerID and PlayerFriend.IsFriend(leaderID, memPlayerID):
            friendList.append([leaderID, memPlayerID])
    #踢出所有在此类副本,但不同线路的玩家
    for index in xrange(curTeam.GetMemberCount()):
        memPlayer = curTeam.GetMemberPlayer(index)
@@ -2926,8 +2944,17 @@
            resultName = str([askMapID, askMapEx] + enterInfo)
            memPlayer.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamAsk", resultName, len(resultName))
            GameWorld.Log("队长成功进入组队副本, 队员开始进入副本: teamID=%s,memPlayerID=%s" % (teamID, memPlayerID), leader.GetPlayerID())
            for preMemPlayerID in memStateDict.keys():
                if memPlayerID == preMemPlayerID:
                    continue
                if PlayerFriend.IsFriend(memPlayerID, preMemPlayerID) and [memPlayerID, preMemPlayerID] not in friendList:
                    friendList.append([memPlayerID, preMemPlayerID])
            
    PyGameData.g_prepareTeamDict.pop(teamID)
    # 同步进入组队副本的队员关系到目标地图
    relationInfo = str([teamID, friendList, memFamilyIDDict, memNameDict])
    leader.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamRelation", relationInfo, len(relationInfo))
    return
def __CheckTeamFBPlayerExist(curTeam):
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -777,7 +777,7 @@
CDBPlayerRefresh_NPCHurtAddPer,         # 对怪物伤害加成
CDBPlayerRefresh_FinalHurtPer,          # 最终输出伤害百分比
CDBPlayerRefresh_TalentPoint,           # 天赋点数 190
CDBPlayerRefresh_DayFBHelpPoint,        # 今日副本助战点数 191
CDBPlayerRefresh_191,                   # 废弃 191
CDBPlayerRefresh_GodWeaponLV_1,         # 神兵等级 - 类型1 192
CDBPlayerRefresh_GodWeaponLV_2,         # 神兵等级 - 类型2 193
CDBPlayerRefresh_GodWeaponLV_3,         # 神兵等级 - 类型3 194
@@ -1494,7 +1494,8 @@
DailyActionID_FamilyRobBoss, # 仙盟抢boss
DailyActionID_KillNPC, # 野外怪物
DailyActionID_IceLode, # 冰晶矿脉
) = range(1, 19 + 1)
DailyActionID_HelpBattleCheckIn, # 助战登记  20
) = range(1, 20 + 1)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3317,7 +3317,6 @@
Def_Player_Dict_RecoverFbCnt = "RecoverFbCnt_%s"  # 今日找回的副本次数, 参数为副本ID
Def_Player_Dict_ItemAddFbCnt = "ItemAddFbCnt_%s"  # 使用物品增加的副本次数, 参数为副本ID
Def_Player_Dict_EnterFbCntWeek = "EnterFbCntWeek_%s"  # 本周进入副本次数, 参数为副本ID
Def_Player_Dict_FBHelpPointCntDay = "FBHelpPointCntDay" # 今日已增加副本助战积分
Def_Player_Dict_FbCntRegainStartTime = "FbCntRegainStartTime_%s" # 副本次数恢复开始时间, 参数为副本ID
Def_Player_Dict_FbCntRegainTotalTime = "FbCntRegainTotalTime_%s" # 副本次数恢复还需时间, 参数为副本ID
Def_Player_Dict_FBHistoryMaxLine = "FBHistoryMaxLine_%s"  # 副本历史最高通关, 参数为副本ID
@@ -3673,6 +3672,7 @@
#助战
Def_PDict_HelpBattleCheckInCount = "HelpBattleCheckInCount" #助战登记次数, 登记次数*10+今日是否登记过
Def_PDict_HelpBattleTotalCount = "HelpBattleTotalCount" #累计助战次数
Def_PDict_FBRealHelpCount = "FBRealHelpCount_%s" #副本真实助战次数,仅针对真实进去打的副本,参数mapID
#-------------------------------------------------------------------------------
#类型 Def_PDictType_OnlinePrize
Def_PDict1_OnlinePrizeCnt = "OnlinePrizeCnt"  # 新手在线已领取奖励次数
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -24930,6 +24930,7 @@
                  ("SubCmd", c_ubyte),
                  ("ObjID", c_int),    # 助战实例ID
                  ("PlayerID", c_int),    # 助战镜像ID,大于1小于100代表机器人,如果是机器人前端按顺序自己记录对应实例ID代表已召唤
                  ("Job", c_ubyte),    # ְҵ
                  ]
    def __init__(self):
@@ -24948,6 +24949,7 @@
        self.SubCmd = 0x06
        self.ObjID = 0
        self.PlayerID = 0
        self.Job = 0
        return
    def GetLength(self):
@@ -24961,13 +24963,15 @@
                                Cmd:%s,
                                SubCmd:%s,
                                ObjID:%d,
                                PlayerID:%d
                                PlayerID:%d,
                                Job:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ObjID,
                                self.PlayerID
                                self.PlayerID,
                                self.Job
                                )
        return DumpString
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
@@ -86,6 +86,7 @@
Over_extrScore = 'extrScore' #已获得额外积分
Over_enterLV = 'enterLV' #进入时等级
Over_leaderID = 'leaderID' #渡劫玩家ID
Over_xianyuanCoin = 'xianyuanCoin' #获得仙缘币信息 [获得仙缘币数, 没有获得的原因] 原因: 1-达到助战次数上限,2-达到每日获得仙缘币上限
#副本行为
(
@@ -1547,35 +1548,6 @@
    ##获取是否助战
    return GameWorld.GetGameFB().GetPlayerGameFBDictByKey(curPlayer.GetID(), ChConfig.FBPlayerDict_IsHelpFight)
def AddFBHelpPoint(curPlayer, mapID, addFBCnt=1):
    ##增加副本助战积分
    PlayerControl.NotifyCode(curPlayer, 'TodayNoDungeonReward')
    fbIpyData = GetFBIpyData(mapID)
    helpPoint = fbIpyData.GetHelpPoint()
    if not helpPoint:
        return 0
    #任务
    EventShell.EventRespons_FBEvent(curPlayer, 'fbhelp')
    EventShell.EventRespons_FBEvent(curPlayer, 'fbhelp_%s'%mapID)
    # 每日活动
    PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_FBHelp)
    addHelpPoint = helpPoint * addFBCnt
    dayMaxPoint = IpyGameDataPY.GetFuncCfg('DungeonIntegral')
    curDayPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBHelpPointCntDay)
    if curDayPoint >= dayMaxPoint:
        PlayerControl.NotifyCode(curPlayer, 'AssistantIntegralFull')
        return 0
    addHelpPoint = min(addHelpPoint, dayMaxPoint-curDayPoint)
    updHelpPoint = curDayPoint+addHelpPoint
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBHelpPointCntDay, updHelpPoint)
    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DayFBHelpPoint, updHelpPoint, False)
    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_FBHelpPoint, addHelpPoint, isSysHint=False)
    PlayerControl.NotifyCode(curPlayer, 'AssistantIntegral', [addHelpPoint])
    GameWorld.DebugLog("    增加副本助战积分!mapID=%s, addHelpPoint=%s"%(mapID, addHelpPoint), curPlayer.GetID())
    return addHelpPoint
def FBOnWeek(curPlayer, onWeekType):
    
    mapIDInfo = []
@@ -1614,6 +1586,14 @@
    for i in xrange(ipyDataMgr.GetFBFuncCount()):
        ipyData = ipyDataMgr.GetFBFuncByIndex(i)
        mapID = ipyData.GetDataMapID()
        # 有真实助战次数奖励限制的
        if ipyData.GetDayHelpCountMax():
            helpCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FBRealHelpCount % mapID)
            if helpCount:
                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FBRealHelpCount % mapID, 0)
                GameWorld.DebugLog("重置日助战奖励次数限制!mapID=%s" % mapID)
        dayTimes = ipyData.GetDayTimes()
        # 没有日次数限制的不处理
        if not dayTimes and not ipyData.GetBuyTimesVIPPriID() and not ipyData.GetExtraTimesVIPPriID() and not ipyData.GetExtraTimesMWPriID():
@@ -1662,10 +1642,6 @@
        Sync_FBPlayerFBInfoData(curPlayer, mapIDInfo)
        Sync_FBPlayerFBBuyCount(curPlayer, mapIDInfo)
    
    #重置每日获得的助战积分
    if onDayType ==ShareDefine.Def_OnEventTypeEx:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBHelpPointCntDay, 0)
        curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DayFBHelpPoint, 0, False)
    return
## 玩家通用副本登录处理
@@ -1680,10 +1656,8 @@
    NotifyFBCntRegainInfo(curPlayer)
    #判断副本里离线超过一定时间则退出副本
    CheckFBPlayerOffine(curPlayer)
    #通知助战点数
    curDayPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBHelpPointCntDay)
    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DayFBHelpPoint, curDayPoint, False)
    return
def CheckFBPlayerOffine(curPlayer):
    mapid = curPlayer.GetMapID()
    
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py
@@ -31,6 +31,8 @@
import NPCCommon
import FBLogic
import PlayerVip
import IPY_GameWorld
import PlayerActivity
def DoPlayerOnDay(curPlayer):
    checkInInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HelpBattleCheckInCount)
@@ -40,6 +42,9 @@
        checkInInfo = (checkInCount + 1) * 10 + 0
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HelpBattleCheckInCount, checkInInfo)
        SyncCheckInState(curPlayer, 0, False)
    # 重置每日已获得仙缘币
    PlayerControl.SetTodayXianyuanCoin(curPlayer, 0)
    return
def DoPlayerLogin(curPlayer):
@@ -103,6 +108,7 @@
    if isOK:
        checkInInfo = (checkInCount + 1) * 10 + 1
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HelpBattleCheckInCount, checkInInfo)
        PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_HelpBattleCheckIn)
        
        # 没有数据缓存的话,马上同步一次
        if not haveViewCache:
@@ -227,6 +233,7 @@
        callResultPack = ChPyNetSendPack.tagMCHelpBattleCallResult()
        callResultPack.ObjID = objID
        callResultPack.PlayerID = calledPlayerID
        callResultPack.Job = job
        NetPackCommon.SendFakePack(curPlayer, callResultPack)
        
    # 召唤满后
@@ -419,16 +426,34 @@
        PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FBHelpBattle, totalHelpCount)
    return
def DoSingleFBAddXianyuanCoin(curPlayer, mapID, lineID):
    ## 挑战单人副本增加仙缘币,仅适用于召唤镜像助战挑战的副本
def DoFBAddXianyuanCoin(curPlayer, mapID, lineID, isHelp=False):
    '''真人挑战副本增加仙缘币,包含过关或助战(不含镜像助战)
    @param isHelp: 是否助战的
    @return: 获得的仙缘币, 无法获得仙缘币原因(1-达到助战次数上限,2-达到每日获得仙缘币上限)
    '''
    playerID = curPlayer.GetPlayerID()
    fbFuncIpyData = IpyGameDataPY.GetIpyGameData("FBFunc", mapID)
    fbHelpIpyData = IpyGameDataPY.GetIpyGameData("FBHelpBattle", mapID, lineID)
    if not fbFuncIpyData or not fbHelpIpyData:
        return
    if not fbFuncIpyData:
        return 0, 0
    
    reason = 0
    addCoinRate = 10000 # 基础倍率
    if not isHelp:
    baseFBPoint = fbFuncIpyData.GetFBPoint() # 过关 - 基础仙缘币
    else:
        baseFBPoint = fbFuncIpyData.GetHelpPoint() # 助战
        dayHelpCountMax = fbFuncIpyData.GetDayHelpCountMax() # 真实助战每日可获得仙缘币次数
        if dayHelpCountMax:
            todayHelpCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FBRealHelpCount % mapID)
            if todayHelpCount >= dayHelpCountMax:
                baseFBPoint = 0
                reason = 1
                GameWorld.DebugLog("达到每日助战可获得仙缘币次数上限!无法再获得!mapID=%s" % (mapID), playerID)
            else:
                todayHelpCount += 1
                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FBRealHelpCount % mapID, todayHelpCount)
                GameWorld.DebugLog("增加每日助战可获得仙缘币次数!mapID=%s,todayHelpCount=%s" % (mapID, todayHelpCount), playerID)
    xianyuanCoinUpper = IpyGameDataPY.GetFuncCfg("HelpBattlePoint", 1) # 每日仙缘币上限
    relationCoinAddDict = IpyGameDataPY.GetFuncEvalCfg("HelpBattlePoint", 2, {}) # 社交关系加成 {"社交关系":[过关加成, 助战加成], ...} 
    todayXianyuanCoin = PlayerControl.GetTodayXianyuanCoin(curPlayer) # 今日已获得仙缘币
@@ -437,37 +462,95 @@
        playerXianyuanCoinUpper += PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_XianyuanCoinUpperAdd)
        addCoinRate += PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_XianyuanCoinAddPer)
        
    if todayXianyuanCoin >= playerXianyuanCoinUpper:
        GameWorld.DebugLog("玩家今日仙缘币已达上限!todayXianyuanCoin=%s,playerXianyuanCoinUpper=%s"
                           % (todayXianyuanCoin, playerXianyuanCoinUpper), playerID)
        return
    #达到上限也需要记录,所以这里暂不限制
    #if todayXianyuanCoin >= playerXianyuanCoinUpper:
    #    GameWorld.DebugLog("玩家今日仙缘币已达上限!todayXianyuanCoin=%s,playerXianyuanCoinUpper=%s"
    #                       % (todayXianyuanCoin, playerXianyuanCoinUpper), playerID)
    #    return
    
    relationAdd = 0
    relationAdd, relationPlayerID, relationPlayerName = 0, 0, ""
    fbType = GameWorld.GetMap().GetMapFBType()
    if fbType == IPY_GameWorld.fbtSingle:
    helpBattlePlayerDict = PyGameData.g_fbHelpBattlePlayerDict.get(playerID, {})
    for helpPlayerInfoDict in helpBattlePlayerDict.values():
        relation = helpPlayerInfoDict.get("Relation", 0)
        if not relation:
            continue
        relationAddList = relationCoinAddDict.get(str(relation), [])
        relationAdd += relationAddList[1] if len(relationAddList) == 2 else 0
            relationAdd += relationAddList[0] if len(relationAddList) == 2 else 0
    elif fbType == IPY_GameWorld.fbtTeam:
        relationAdd, relationPlayerID, relationPlayerName = __GetTeamFBMemRelationInfo(curPlayer, relationCoinAddDict, isHelp)
        
    coinAdd = 0
    if baseFBPoint:
    coinAdd = int((baseFBPoint + relationAdd) * addCoinRate / 10000.0)
    canAddMax = max(playerXianyuanCoinUpper - todayXianyuanCoin, 0)
    coinAddReal = min(coinAdd, canAddMax) # 实际加仙缘币
    if canAddMax == 0 and not reason:
        reason = 2
    
    GameWorld.DebugLog("挑战单人副本增加仙缘币: coinAdd=%s,canAddMax=%s,coinAddReal=%s" % (coinAdd, canAddMax, coinAddReal), playerID)
    GameWorld.DebugLog("挑战副本增加仙缘币: baseFBPoint=%s,relationAdd=%s,addCoinRate=%s,coinAdd=%s,canAddMax=%s,coinAddReal=%s,relationPlayerID=%s"
                       % (baseFBPoint, relationAdd, addCoinRate, coinAdd, canAddMax, coinAddReal, relationPlayerID), playerID)
    if coinAddReal:
        addDataDict = {"MapID":mapID, "FuncLineID":lineID}
        PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanCoin, coinAddReal, addDataDict=addDataDict)
        PlayerControl.AddTodayXianyuanCoin(curPlayer, coinAddReal)
        
    # 通知自己获得仙缘币
    Sync_AddXianyuanCoinMsg(curPlayer, mapID, lineID, coinAddReal)
    return
    Sync_AddXianyuanCoinMsg(curPlayer, mapID, lineID, coinAddReal, relationPlayerID, relationPlayerName)
    return coinAddReal, reason
def DoTeamFBAddXianyuanCoin(curPlayer, mapID, lineID, callPlayerID, callPlayerName, relation):
    ## 挑战组队副本增加仙缘币
    return
def __GetTeamFBMemRelationInfo(curPlayer, relationCoinAddDict, isHelp):
    relationAdd = 0 # 社交关系加成
    relationPlayerID = 0
    relationPlayerName = ""
    teamID = curPlayer.GetTeamID()
    if teamID not in PyGameData.g_teamFBMemRelationDict:
        return relationAdd, relationPlayerID, relationPlayerName
    friendList, memFamilyIDDict, memNameDict = PyGameData.g_teamFBMemRelationDict[teamID]
    relationList = IpyGameDataPY.GetFuncEvalCfg("HelpBattlePoint", 3, []) # 社交关系优先级
    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 == 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
    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 == memFamilyID:
                    memRelation = checkRelation
                    break
            if not memRelation:
                continue
            relationAddList = relationCoinAddDict.get(str(memRelation), [])
            relationAdd += relationAddList[0] if len(relationAddList) == 2 else 0
    return relationAdd, relationPlayerID, relationPlayerName
def Sync_AddXianyuanCoinMsg(curPlayer, mapID, funcLineID, addXianyuanCoin, callPlayerID=0, callPlayerName=""):
    '''同步自己主动战斗获得仙缘币信息
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py
@@ -30,6 +30,7 @@
import ShareDefine
import ItemCommon
import PlayerSuccess
import FBHelpBattle
import EventReport
import math
@@ -350,9 +351,9 @@
            FBCommon.Notify_FB_Over(curPlayer, {FBCommon.Over_isPass: 0})
            continue
        overDict = {FBCommon.Over_grade:star,FBCommon.Over_dataMapID:mapID,FBCommon.Over_isPass:int(isPass), FBCommon.Over_costTime:costTime}
        #增加助战积分
        isHelp = False
        if FBCommon.GetIsHelpFight(curPlayer):
            FBCommon.AddFBHelpPoint(curPlayer, mapID, 1)
            isHelp = True
        else:
            #给奖励
            needSpace = len(prizeItemList)
@@ -375,6 +376,9 @@
            overDict[FBCommon.Over_exp] = exp
            overDict[FBCommon.Over_expPoint] = expPoint
        addXianyuanCoin, reason = FBHelpBattle.DoFBAddXianyuanCoin(curPlayer, mapID, 0, isHelp)
        overDict[FBCommon.Over_xianyuanCoin] = [addXianyuanCoin, reason]
        FBCommon.Notify_FB_Over(curPlayer, overDict)
        #成就
        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_ChaosDemon, 1, [playerCount, star])
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_DuJie.py
@@ -411,7 +411,6 @@
        EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, ChConfig.CME_Log_End, 0, isPass)
    
        curPlayer.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, leaveTick, True)
        FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, isPass, overDict)
        if isPass and leaderPlayer:
            if curPlayer.GetPlayerID() == leaderPlayerID:
                #渡劫通过处理
@@ -420,18 +419,15 @@
                FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_LastEnterFBTick % ChConfig.Def_FBMapID_DuJie, 0)
                FBCommon.SyncFBEnterTick(curPlayer)
                if lineID:
                    FBHelpBattle.DoSingleFBAddXianyuanCoin(curPlayer, ChConfig.Def_FBMapID_DuJie, FBPropertyMark)
#            else:
#                #帮忙打的给奖励
#                __GiveTeamAward(curPlayer, leaderPlayer, realmIpyData, curStar)
#                EventShell.EventRespons_DujieFBHelpPass(curPlayer)
#                FBCommon.AddFBHelpPoint(curPlayer, ChConfig.Def_FBMapID_DuJie, 1)
                    addXianyuanCoin, reason = FBHelpBattle.DoFBAddXianyuanCoin(curPlayer, ChConfig.Def_FBMapID_DuJie, FBPropertyMark)
                    overDict[FBCommon.Over_xianyuanCoin] = [addXianyuanCoin, reason]
            
            if realmIpyData and realmIpyData.GetIsBigRealm():
                #成就
                PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_DujieFBHelpPass, 1)
            if playerCnt > 1: #多人组队渡劫
                EventShell.EventRespons_FBEvent(curPlayer, 'teamdujie')
        FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, isPass, overDict)
    
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MunekadoTrial.py
@@ -428,16 +428,11 @@
        EventShell.EventRespons_FBEvent(curPlayer, "zmsl_%s_%s" % (lineID, star))
        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_MunekadoTrial, 1, [playerCount, star, lineID+1])
        EventShell.EventRespons_FBEvent(curPlayer, "passzmsl")
        #增加助战积分
#        if isHelpFight:
#            EventShell.EventRespons_FBEvent(curPlayer, "helpzmsl_%s"%lineID)
#            FBCommon.AddFBHelpPoint(curPlayer, mapID, 1)
#            overDict.pop(FBCommon.Over_itemInfo, 0)
#        else:
        # 如果在副本中过天,则只给物品奖励,不变更过关信息
        if not isInFBOnDay:
            FBCommon.AddEnterFBCount(curPlayer, mapID, 1)
            FBHelpBattle.DoSingleFBAddXianyuanCoin(curPlayer, mapID, lineID)
            addXianyuanCoin, reason = FBHelpBattle.DoFBAddXianyuanCoin(curPlayer, mapID, lineID)
            overDict[FBCommon.Over_xianyuanCoin] = [addXianyuanCoin, reason]
            needSyncFBData = False
        else:
            curPlayer.SetDict(ChConfig.Def_PlayerKey_IsInFBOnDay, 0)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py
@@ -496,7 +496,6 @@
            EventShell.EventRespons_PassQueenRelecs(curPlayer, lineID, grade)
            #任务
            EventShell.EventRespons_FBEvent(curPlayer, "queenrelics_pass")
        FBCommon.NotifyFBOver(curPlayer, dataMapID, lineID, isPass, overDict)
        
        # 记录结算到的线路层,记录值+1
        updRewardLine = lineID + 1
@@ -508,7 +507,8 @@
                GameWorld.DebugLog("首次结算奖励,增加挑战次数!", playerID)
                needSyncFBData = True
                FBCommon.AddEnterFBCount(curPlayer, dataMapID)
                FBHelpBattle.DoSingleFBAddXianyuanCoin(curPlayer, mapID, lineID)
                addXianyuanCoin, reason = FBHelpBattle.DoFBAddXianyuanCoin(curPlayer, mapID, lineID)
                overDict[FBCommon.Over_xianyuanCoin] = [addXianyuanCoin, reason]
            else:
                GameWorld.DebugLog("副本中过天,不增加挑战次数!", playerID)
            PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_QueenRelicsEx, 1)
@@ -521,6 +521,8 @@
            
        if needSyncFBData:
            FBCommon.Sync_FBPlayerFBInfoData(curPlayer, dataMapID) # 同步信息
        FBCommon.NotifyFBOver(curPlayer, dataMapID, lineID, isPass, overDict)
    return
def __GivePlayerQueenRelicsReward(curPlayer, dataMapID, rewardLineID, curLineID, passGrade, maxGrade, rewardRateList):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
@@ -106,6 +106,12 @@
        ownerID = gameFBMgr.GetGameFBDictByKey(ChConfig.Def_FB_SingleFBPlayerID)
        if ownerID in PyGameData.g_fbHelpBattlePlayerDict:
            PyGameData.g_fbHelpBattlePlayerDict.pop(ownerID)
            GameWorld.DebugLog("清除单人副本镜像助战信息: ownerID=%s" % ownerID)
    elif fbType == IPY_GameWorld.fbtTeam:
        teamID = gameWorld.GetPropertyID()
        if teamID in PyGameData.g_teamFBMemRelationDict:
            PyGameData.g_teamFBMemRelationDict.pop(teamID)
            GameWorld.DebugLog("清除组队副本队员关系信息: teamID=%s" % teamID)
            
    #副本关闭时统一清怪
    FBCommon.ClearFBNPC()
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -5705,6 +5705,7 @@
## 玩家今日已获得仙缘币
def GetTodayXianyuanCoin(curPlayer): return curPlayer.GetExAttr11()
def SetTodayXianyuanCoin(curPlayer, value): return curPlayer.SetExAttr11(value)
def AddTodayXianyuanCoin(curPlayer, addValue): return curPlayer.SetExAttr11(curPlayer.GetExAttr11() + addValue, False, True)
##VIP到期时间, 需要同步GameServer
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamRelation.py
New file
@@ -0,0 +1,54 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Player.RemoteQuery.GY_Query_EnterFBTeamRelation
#
# @todo:进入组队副本队员间社交关系信息
# @author hxp
# @date 2018-11-26
# @version 1.0
#
# 详细描述: 进入组队副本队员间社交关系信息
#
#-------------------------------------------------------------------------------
#"""Version = 2018-11-26 下午4:18:04"""
#-------------------------------------------------------------------------------
#导入
import PyGameData
import GameWorld
#---------------------------------------------------------------------
#---------------------------------------------------------------------
#逻辑实现
## 请求逻辑
#  @param query_Type 请求类型
#  @param query_ID 请求的玩家ID
#  @param packCMDList 发包命令 [ ]
#  @param tick 当前时间
#  @return "True" or "False" or ""
#  @remarks 函数详细说明.
def DoLogic(query_Type, query_ID, packCMDList, tick):
    return
#执行结果
## 执行结果
#  @param curPlayer 发出请求的玩家
#  @param callFunName 功能名称
#  @param funResult 查询的结果
#  @param tick 当前时间
#  @return None
#  @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
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -71,3 +71,6 @@
g_fbHelpBattlePlayerDict = {} # 助战玩家信息 {playerID:{助战玩家ID:{助战玩家简要信息字典} ...}, ...}
g_teamFBMemRelationDict = {} # 组队副本队员关系信息 {teamID:[[好友组合列表], {队员ID:家族ID, ...}], }
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -777,7 +777,7 @@
CDBPlayerRefresh_NPCHurtAddPer,         # 对怪物伤害加成
CDBPlayerRefresh_FinalHurtPer,          # 最终输出伤害百分比
CDBPlayerRefresh_TalentPoint,           # 天赋点数 190
CDBPlayerRefresh_DayFBHelpPoint,        # 今日副本助战点数 191
CDBPlayerRefresh_191,                   # 废弃 191
CDBPlayerRefresh_GodWeaponLV_1,         # 神兵等级 - 类型1 192
CDBPlayerRefresh_GodWeaponLV_2,         # 神兵等级 - 类型2 193
CDBPlayerRefresh_GodWeaponLV_3,         # 神兵等级 - 类型3 194
@@ -1494,7 +1494,8 @@
DailyActionID_FamilyRobBoss, # 仙盟抢boss
DailyActionID_KillNPC, # 野外怪物
DailyActionID_IceLode, # 冰晶矿脉
) = range(1, 19 + 1)
DailyActionID_HelpBattleCheckIn, # 助战登记  20
) = range(1, 20 + 1)