From 68e048256ca3e40cbc6e73cfd0937663cd41d63c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 27 十二月 2019 20:50:44 +0800
Subject: [PATCH] Merge branch 'master' of http://mobile.173on.com:10010/r/SnxxServerCode

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py |  253 ++++++++------------------------------------------
 1 files changed, 40 insertions(+), 213 deletions(-)

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 2dff682..3ed7a04 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
@@ -18,7 +18,6 @@
 import GameWorld
 import ChConfig
 import PlayerControl
-import PlayerBillboard
 import ChPyNetSendPack
 import NetPackCommon
 import PlayerViewCacheTube
@@ -30,11 +29,11 @@
 import GameMap
 import NPCCommon
 import FBLogic
-import PlayerVip
 import IPY_GameWorld
 import PlayerActivity
+import ItemControler
 
-import time
+MaxRobotID = 100 # 最大机器人NPC定义ID
 
 def DoPlayerOnDay(curPlayer):
     checkInInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HelpBattleCheckInCount)
@@ -44,21 +43,6 @@
         checkInInfo = checkInCount * 10 + 0
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HelpBattleCheckInCount, checkInInfo)
         SyncCheckInState(curPlayer, 0, False)
-    
-    # 重置每日已获得仙缘币
-    ondaySetXianyuanCoin = 0
-    ondayLoginSetXianyuanCoin = curPlayer.GetDictByKey(ChConfig.Def_PDict_TodayXianyuanCoinOnLogin)
-    if ondayLoginSetXianyuanCoin:
-        # 这里做时间比较,预防玩家登录后就没有再切换地图,再次在该地图过天会导致设置值错误问题
-        loginAddCoinTime = curPlayer.GetDictByKey(ChConfig.Def_PDict_LoginAddTodayXianyuanCoinTime)
-        if GameWorld.CheckTimeIsSameServerDayEx(loginAddCoinTime):
-            ondaySetXianyuanCoin = ondayLoginSetXianyuanCoin
-            GameWorld.DebugLog("玩家过天时,登录增加仙缘币有值,仍然是同一天,仙缘币重置为登录时增加的仙缘币!ondayLoginSetXianyuanCoin=%s" % ondayLoginSetXianyuanCoin)
-        else:
-            GameWorld.DebugLog("玩家过天时,登录增加仙缘币有值,但是不是同一天了,仙缘币重置为0!")
-    PlayerControl.SetTodayXianyuanCoin(curPlayer, ondaySetXianyuanCoin)
-    GameWorld.DebugLog("玩家过天设置今日已获得仙缘币: ondaySetXianyuanCoin=%s,ondayLoginSetXianyuanCoin=%s" 
-                       % (ondaySetXianyuanCoin, ondayLoginSetXianyuanCoin))
     return
 
 def DoPlayerLogin(curPlayer):
@@ -90,10 +74,6 @@
     # 刷新
     elif cmd == "Refresh":
         __OnHelpBattleRefreshResult(curPlayer, msgList, tick)
-        
-    # 助战记录
-    elif cmd == "HelpRecord":
-        __OnHelpBattleRecord(curPlayer, msgList, tick)
         
     # 扫荡召唤
     elif cmd == "SweepCall":
@@ -422,208 +402,55 @@
     if not fbFuncIpyData:
         return
     
-    reason = 0
-    addCoinRate = 10000 # 基础倍率
-    baseFBPoint = fbFuncIpyData.GetFBPoint() # 过关 - 基础仙缘币
-    
-    xianyuanCoinUpper = IpyGameDataPY.GetFuncCfg("HelpBattlePoint", 1) # 每日仙缘币上限
-    relationCoinAddDict = IpyGameDataPY.GetFuncEvalCfg("HelpBattlePoint", 2, {}) # 社交关系加成 {"社交关系":[过关加成, 助战加成], ...} 
-    todayXianyuanCoin = PlayerControl.GetTodayXianyuanCoin(curPlayer) # 今日已获得仙缘币
-    playerXianyuanCoinUpper = xianyuanCoinUpper
-    if curPlayer.GetVIPLv():
-        playerXianyuanCoinUpper += PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_XianyuanCoinUpperAdd)
-        addCoinRate += PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_XianyuanCoinAddPer)
-        
-    relation, relationAdd = 0, 0
-    for helpPlayerInfoDict in helpBattlePlayerDict.values():
-        relation = helpPlayerInfoDict.get("Relation", 0)
-        if not relation:
+    assistPlayerIDList = []
+    for helpPlayerID in helpBattlePlayerDict.keys():
+        if helpPlayerID <= MaxRobotID:
             continue
-        relationAddList = relationCoinAddDict.get(str(relation), [])
-        relationAdd += relationAddList[0] if len(relationAddList) == 2 else 0
-        
-    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("扫荡副本增加仙缘币: baseFBPoint=%s,relationAdd=%s,addCoinRate=%s,coinAdd=%s,canAddMax=%s,coinAddReal=%s" 
-                       % (baseFBPoint, relationAdd, addCoinRate, coinAdd, canAddMax, coinAddReal), playerID)
-    if coinAddReal:
-        addDataDict = {"MapID":mapID, "FuncLineID":funcLineID, "IsSweep":1}
-        PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanCoin, coinAddReal, addDataDict=addDataDict)
-        PlayerControl.AddTodayXianyuanCoin(curPlayer, coinAddReal)
-        
+        assistPlayerIDList.append(helpPlayerID)
+    __DoGivePlayerAssistLihe(curPlayer, mapID, funcLineID, assistPlayerIDList)
+    
     #扫荡结果给奖励等
-    FBLogic.OnPlayerFBHelpBattleSweepResult(curPlayer, mapID, funcLineID, helpBattlePlayerDict, coinAddReal, reason)
-    
-    # 通知自己获得仙缘币
-    msgPack = ChPyNetSendPack.tagMCAddXianyuanCoinMsg()
-    msgPack.MapID = mapID
-    msgPack.FuncLineID = funcLineID
-    msgPack.Relation = relation
-    msgPack.RelationCoinAdd = relationAdd
-    msgPack.XianyuanCoinAdd = coinAddReal
-    msgPack.Reason = reason
-    #msgPack.CallPlayerID = relationPlayerID
-    #msgPack.CallPlayerName = relationPlayerName
-    msgPack.NameLen = len(msgPack.CallPlayerName)
-    msgPack.IsSweep = 1
-    NetPackCommon.SendFakePack(curPlayer, msgPack)
+    FBLogic.OnPlayerFBHelpBattleSweepResult(curPlayer, mapID, funcLineID, helpBattlePlayerDict)
     return
 
-def __OnHelpBattleRecord(curPlayer, msgList, tick):
-    ## 助战记录同步
-    cmd, helpRecordList, isLogin = msgList
+def DoFBHelpBattleFinish(curPlayer, mapID, lineID):
+    ## 副本助战完成
+    
+    assistPlayerIDList = []
+    gameFB = GameWorld.GetGameFB()
     playerID = curPlayer.GetPlayerID()
-    GameWorld.DebugLog("__OnHelpBattleRecord %s,helpRecordList=%s" % (cmd, helpRecordList), playerID)
+    helpBattlePlayerDict = PyGameData.g_fbHelpBattlePlayerDict.get(playerID, {})
+    for helpPlayerID in helpBattlePlayerDict.keys():
+        objID = gameFB.GetGameFBDictByKey(ChConfig.Def_FB_HelpBattleFBObjID % helpPlayerID)
+        if not objID:
+            continue
+        if helpPlayerID <= MaxRobotID:
+            continue
+        assistPlayerIDList.append(helpPlayerID)
+    __DoGivePlayerAssistLihe(curPlayer, mapID, lineID, assistPlayerIDList)
     
-    addXianyuanCoinTotal = 0 # 累计需要增加的仙缘币
-    addXianyuanCoinTotalTotay = 0 # 累计需要增加的今日仙缘币
-    drList = []
-    
-    totalHelpCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HelpBattleTotalCount)
-    recordPack = ChPyNetSendPack.tagMCHelpBattleRecordList()
-    recordPack.RecordList = []
-    for recordInfo in helpRecordList:
-        callPlayerID, callPlayerName, mapID, funcLineID, xianyuanCoinAdd, relation, vipLV, recordTime = recordInfo
-        timeStr = GameWorld.ChangeTimeNumToStr(recordTime)
-        isSameDay = GameWorld.CheckTimeIsSameServerDayEx(recordTime)
-        
-        record = ChPyNetSendPack.tagMCHelpBattleRecord()
-        record.CallPlayerID = callPlayerID
-        record.CallPlayerName = callPlayerName
-        record.NameLen = len(record.CallPlayerName)
-        record.MapID = mapID
-        record.FuncLineID = funcLineID
-        record.XianyuanCoinAdd = xianyuanCoinAdd
-        record.Relation = relation
-        record.VIPLV = vipLV
-        record.HelpTime = timeStr
-        recordPack.RecordList.append(record)
-        drList.append({"CallPlayerID":callPlayerID, "MapID":mapID, "FuncLineID":funcLineID, "XianyuanCoinAdd":xianyuanCoinAdd, 
-                       "Relation":relation, "VIPLV":vipLV, "HelpTime":timeStr, "IsSameDay":isSameDay})
-        addXianyuanCoinTotal += xianyuanCoinAdd
-        if isSameDay:
-            addXianyuanCoinTotalTotay += xianyuanCoinAdd
-        totalHelpCount += 1
-        
-    recordPack.RecordCount = len(recordPack.RecordList)
-    NetPackCommon.SendFakePack(curPlayer, recordPack)
-    
-    addDataDict = {"HelpList":drList}
-    GameWorld.DebugLog("    addXianyuanCoinTotal=%s,addXianyuanCoinTotalTotay=%s,totalHelpCount=%s,isLogin=%s" 
-                       % (addXianyuanCoinTotal, addXianyuanCoinTotalTotay, totalHelpCount, isLogin), playerID)
-    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanCoin, addXianyuanCoinTotal, addDataDict=addDataDict, isSysHint=False)
-    if addXianyuanCoinTotalTotay:
-        PlayerControl.AddTodayXianyuanCoin(curPlayer, addXianyuanCoinTotalTotay)
-        if isLogin:
-            curPlayer.SetDict(ChConfig.Def_PDict_TodayXianyuanCoinOnLogin, addXianyuanCoinTotalTotay)
-            curPlayer.SetDict(ChConfig.Def_PDict_LoginAddTodayXianyuanCoinTime, int(time.time()))
-            GameWorld.Log("    登录时今日助战信息: addXianyuanCoinTotalTotay=%s" % (addXianyuanCoinTotalTotay), playerID)
-            
-    # 更新总助战次数,更新排行榜
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HelpBattleTotalCount, totalHelpCount)
-    if totalHelpCount >= IpyGameDataPY.GetFuncCfg("HelpBattleRefresh", 4):
-        PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FBHelpBattle, totalHelpCount)
     return
 
-def DoFBAddXianyuanCoin(curPlayer, mapID, lineID, isHelp=False):
-    '''真人挑战副本增加仙缘币,包含过关或助战(不含镜像助战)
-    @param isHelp: 是否助战的
-    @return: 获得的仙缘币, 无法获得仙缘币原因(1-达到助战次数上限,2-达到每日获得仙缘币上限)
-    '''
-    playerID = curPlayer.GetPlayerID()
-    fbFuncIpyData = IpyGameDataPY.GetIpyGameData("FBFunc", mapID)
-    if not fbFuncIpyData:
-        return 0, 0
+def __DoGivePlayerAssistLihe(curPlayer, mapID, lineID, assistPlayerIDList):
+    ## 给玩家协助礼盒奖励
     
-    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) # 今日已获得仙缘币
-    playerXianyuanCoinUpper = xianyuanCoinUpper
-    if curPlayer.GetVIPLv():
-        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 not assistPlayerIDList:
+        return
     
-    relation, relationAdd, relationPlayerID, relationPlayerName = 0, 0, 0, ""
+    liheItemID = 0
+    mapAssistGiftDict = IpyGameDataPY.GetFuncEvalCfg("AssistAward", 2, {})
+    mapID = FBCommon.GetRecordMapID(mapID)
+    if str(mapID) in mapAssistGiftDict:
+        liheItemID = mapAssistGiftDict[str(mapID)][0]
+    if not liheItemID:
+        return
     
-    fbType = GameWorld.GetMap().GetMapFBType()
-    if fbType == IPY_GameWorld.fbtSingle:
-        gameFB = GameWorld.GetGameFB()
-        helpBattlePlayerDict = PyGameData.g_fbHelpBattlePlayerDict.get(playerID, {})
-        for helpPlayerID, helpPlayerInfoDict in helpBattlePlayerDict.items():
-            objID = gameFB.GetGameFBDictByKey(ChConfig.Def_FB_HelpBattleFBObjID % helpPlayerID)
-            if not objID:
-                continue
-            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:
-        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)
-    canAddMax = max(playerXianyuanCoinUpper - todayXianyuanCoin, 0)
-    coinAddReal = min(coinAdd, canAddMax) # 实际加仙缘币
-    if canAddMax == 0 and not reason:
-        reason = 2
-        
-    if isHelp and not relationPlayerID:
-        relationPlayerID = 1
-        #GameWorld.DebugLog("没有助战目标则设置relationPlayerID为1,标记是助战的!")
-        
-    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)
-        
-    # 通知自己获得仙缘币
-    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)
-    NetPackCommon.SendFakePack(curPlayer, msgPack)
-    return coinAddReal, reason
+    ItemControler.GivePlayerItemOrMail(curPlayer, [[liheItemID, 1, 0]])
+    
+    msgInfo = str(["AssistFinish", liheItemID, mapID, lineID, assistPlayerIDList])
+    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "FBHelpBattle", msgInfo, len(msgInfo))
+    return
+
 
 def __GetTeamFBMemRelationInfo(curPlayer, isHelp, leavePlayerID):
     ## 计算队员间相互加成信息,离线玩家不算

--
Gitblit v1.8.0