From 37a0a0bba170701ee91b15c668b97b5b47a53289 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 26 十一月 2018 21:21:02 +0800
Subject: [PATCH] 4762 【后端】组队助战类型副本助战修改(混乱妖域);宗门、渡劫、娲皇、混乱妖域结算增加同步获得仙缘币信息;增加每日助战登记修行点; 召唤成功增加同步职业信息;

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py   |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                                      |    5 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                                  |    8 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py                                       |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py            |  135 ++++++++++++++++++----
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                                                       |    8 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py    |   10 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py                |   46 +------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MunekadoTrial.py |    9 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_DuJie.py         |   10 -
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py                                                     |   29 ++++
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                                           |    5 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py                  |    6 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py                             |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamRelation.py  |   54 +++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                                         |    2 
 16 files changed, 246 insertions(+), 91 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 767623a..0985258 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/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
 
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py
index 2ce78a2..3f00186 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py
+++ b/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):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index e4da953..84cdb72 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/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)
 
 
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 6c1d7ed..45deeff 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/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"  # 新手在线已领取奖励次数
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 767623a..0985258 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/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
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
index afaf44b..c3f52d5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
+++ b/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()
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py
index 61b4e32..6a2a3ec 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py
+++ b/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 # 基础倍率
-    baseFBPoint = fbFuncIpyData.GetFBPoint() # 过关 - 基础仙缘币
+    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
-    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, 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[0] if len(relationAddList) == 2 else 0
+    elif fbType == IPY_GameWorld.fbtTeam:
+        relationAdd, relationPlayerID, relationPlayerName = __GetTeamFBMemRelationInfo(curPlayer, relationCoinAddDict, isHelp)
         
-    coinAdd = int((baseFBPoint + relationAdd) * addCoinRate / 10000.0)
+    coinAdd = 0
+    if baseFBPoint:
+        coinAdd = int((baseFBPoint + relationAdd) * addCoinRate / 10000.0)
     canAddMax = max(playerXianyuanCoinUpper - todayXianyuanCoin, 0)
     coinAddReal = min(coinAdd, canAddMax) # 实际加仙缘币
-    
-    GameWorld.DebugLog("挑战单人副本增加仙缘币: coinAdd=%s,canAddMax=%s,coinAddReal=%s" % (coinAdd, canAddMax, coinAddReal), playerID)
+    if canAddMax == 0 and not reason:
+        reason = 2
+        
+    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=""):
     '''同步自己主动战斗获得仙缘币信息
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py
index fd1ba49..c84da43 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py
+++ b/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)
@@ -374,7 +375,10 @@
             expPoint = addExp / ChConfig.Def_PerPointValue
             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])
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_DuJie.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_DuJie.py
index 6cbe254..6e5be03 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_DuJie.py
+++ b/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
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MunekadoTrial.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MunekadoTrial.py
index 6e97ffa..c2b2b34 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MunekadoTrial.py
+++ b/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)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py
index 48022cf..2eb05d4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py
+++ b/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):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
index 11eb234..6c1429b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
+++ b/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()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index e8e6578..68a3307 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamRelation.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamRelation.py
new file mode 100644
index 0000000..49de67a
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamRelation.py
@@ -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
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
index ef5989f..3869e0f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -71,3 +71,6 @@
 
 g_fbHelpBattlePlayerDict = {} # 助战玩家信息 {playerID:{助战玩家ID:{助战玩家简要信息字典} ...}, ...}
 
+g_teamFBMemRelationDict = {} # 组队副本队员关系信息 {teamID:[[好友组合列表], {队员ID:家族ID, ...}], }
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index e4da953..84cdb72 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/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)
 
 
 

--
Gitblit v1.8.0