From d7f44d8d871a90c818bdb3ffe9a60af875b7100a Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 30 九月 2025 10:12:23 +0800
Subject: [PATCH] 135 【挑战】战锤秘境-服务端(白骨盈野;副本基础;副本扫荡;广告奖励支持;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py |  551 +-----------------------------------------------------
 1 files changed, 13 insertions(+), 538 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
index 82e8b65..fce4034 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
@@ -23,32 +23,16 @@
 #------------------------------------------------------------------------------ 
 #"""Version = 2016-12-02 11:00"""
 #------------------------------------------------------------------------------ 
-import ReadChConfig
-import IPY_GameWorld
 import PlayerControl
 import GameWorld
 import FBCommon
-import ChConfig
 import FBLogic
-import ChPyNetSendPack
-import NetPackCommon
-import PlayerSuccess
-import ItemCommon
 import IpyGameDataPY
 import ShareDefine
-import GameFuncComm
-import FBHelpBattle
-import SkillShell
-import PyGameData
-import PetControl
 import NPCCommon
-import GameObj
 
-import time
-import math
 #---------------------------------------------------------------------
 def OnLogin(curPlayer):
-    NotifyBuyFBBuffInfo(curPlayer)
     return
 
 ## 玩家副本行为封包 A5 08
@@ -63,180 +47,6 @@
     FBLogic.DoFBAction(curPlayer, actionType, actionInfo, tick)
     return
 
-## A2 10 清除副本CD#tagCMClearFBCD
-#  @param playerIndex 玩家索引  
-#  @param clientData 客户端封包  
-#  @param tick 时间
-#  @return None
-def OnClearFBCD(playerIndex, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
-    mapID = clientData.MapID # mapID
-    GameWorld.DebugLog("OnClearFBCD mapID=%s" % mapID)
-    if not mapID:
-        return
-    
-    enterCDTick = FBCommon.GetFBEnterCD(curPlayer, mapID)
-    if enterCDTick <= 0:
-        GameWorld.DebugLog("    CD时间已过,不需要清除, cdTick=%s" % enterCDTick)
-        return
-    clearEnterCDDict = IpyGameDataPY.GetFuncEvalCfg('FBEnterCD', 2)
-    if mapID not in clearEnterCDDict:
-        return
-    costMoney = clearEnterCDDict[mapID]
-    costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, costMoney)
-    if not costMoneyList:
-        return
-    second = enterCDTick # 参数秒
-    # 扣除消耗
-    infoDict = {"MapID":mapID, "CDSecond":second}
-    for moneyType, moneyCnt in costMoneyList:
-        if not PlayerControl.PayMoney(curPlayer, moneyType, moneyCnt, ChConfig.Def_Cost_ClearFBCD, infoDict):
-            return
-   
-
-    GameWorld.DebugLog("   mapID=%s 清除副本CD second=%s,costMoneyList=%s" 
-                         % (mapID, second, costMoneyList), curPlayer.GetPlayerID())
-    
-    FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_LastEnterFBTick % mapID, 0)
-    FBCommon.SyncFBEnterTick(curPlayer)
-    return
-
-#---封包开始扫荡-------------------------------------
-
-(
-PCDFB_MapIDList, # 副本地图ID列表
-PCDFB_NeedTime, # 扫荡时间, 秒
-PCDFB_FinishTimeGold, # 立即完成消耗钻石公式
-) = range(3)
-
-
-## 判断是否当前公共CD副本扫荡中
-def IsCurPubCDFBSweeping(curPlayer, mapID):
-    sweepCfg = GetPubCDFBSweepCfg(curPlayer, mapID)
-    if not sweepCfg:
-        return False
-    groupNum = sweepCfg[0]
-    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PubCDFBS_MapID % groupNum) == mapID
-
-## 获取公共CD副本扫荡配置信息
-def GetPubCDFBSweepCfg(curPlayer, mapID):
-    PubCDFBSweepDict = ReadChConfig.GetEvalChConfig("PubCDFBSweep")
-    for groupNum, sweepInfo in PubCDFBSweepDict.items():
-        mapIDGroup = sweepInfo[0]
-        if mapID not in mapIDGroup:
-            continue
-        
-        return groupNum, sweepInfo
-    
-    return
-
-## 开始公共CD副本扫荡
-def __DoStartPubCDFBSweep(curPlayer, mapID, lineID, cnt, isFinish, dataEx, groupNum, sweepInfo):
-    curSweepMapID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PubCDFBS_MapID % groupNum)
-    if curSweepMapID > 0:
-        GameWorld.DebugLog("公共CD副本扫荡中, 无法扫荡!groupNum=%s,curSweepMapID=%s" 
-                           % (groupNum, curSweepMapID), curPlayer.GetPlayerID())
-        return
-    
-    if not FBLogic.OnStartPubCDFBSweep(curPlayer, mapID, lineID, cnt, dataEx):
-        return
-    
-    curTime = int(time.time())
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PubCDFBS_MapID % groupNum, mapID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PubCDFBS_LineID % groupNum, lineID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PubCDFBS_Cnt % groupNum, cnt)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PubCDFBS_DataEx % groupNum, dataEx)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PubCDFBS_Time % groupNum, curTime)
-    GameWorld.DebugLog("公共CD副本开始扫荡 mapID=%s,lineID=%s,cnt=%s,dataEx=%s,groupNum=%s,curTime=%s" 
-                       % (mapID, lineID, cnt, dataEx, groupNum, curTime), curPlayer.GetPlayerID())
-    
-    
-    Sync_PubFBSweepData(curPlayer, groupNum)
-    return
-
-## 完成公共CD副本扫荡
-def __DoFinishPubCDFB(curPlayer, mapID, isFinish, groupNum, sweepInfo):
-    playerID = curPlayer.GetPlayerID()
-    curSweepMapID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PubCDFBS_MapID % groupNum)
-    if curSweepMapID <= 0 or curSweepMapID != mapID:
-        GameWorld.DebugLog("未扫荡 或 不是当前正在扫荡的公共CD副本, 无法完成!curSweepMapID=%s,mapID=%s" 
-                           % (curSweepMapID, mapID), playerID)
-        return
-    
-    sweepTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PubCDFBS_Time % groupNum)
-    lineID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PubCDFBS_LineID % groupNum)
-    sweepCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PubCDFBS_Cnt % groupNum)
-    dataEx = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PubCDFBS_DataEx % groupNum)
-    
-    sweepNeedTime = sweepInfo[PCDFB_NeedTime] # 单次耗时
-    finishCostGoldFormat = sweepInfo[PCDFB_FinishTimeGold]
-    needTotalTime = sweepNeedTime * sweepCnt
-    
-    curTime = int(time.time())
-    passTime = max(0, curTime - sweepTime)
-    second = max(0, needTotalTime - passTime)
-    
-    # 正常完成
-    if isFinish == 2 and second > 0:
-        GameWorld.DebugLog("扫荡时间未到,无法完成,剩余%s秒, mapID=%s" % (second, mapID), playerID)
-        return
-    
-    addDataDict = {"curTime":curTime, "startSweepTime":sweepTime, "sweepCnt":sweepCnt, 
-                   "needTotalTime":needTotalTime, "passTime":passTime, "remainSecond":second, 
-                   "costGold":0, "mapID":mapID, "lineID":lineID, "dataEx":dataEx, ChConfig.Def_Cost_Reason_SonKey:mapID}
-    
-    # 钻石立即完成
-    if isFinish == 1:
-        costGold = eval(finishCostGoldFormat)
-        if costGold > 0:
-            addDataDict["costGold"] = costGold
-            if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, costGold, 
-                                          ChConfig.Def_Cost_FinishFBSweep, addDataDict):
-                return
-    
-    GameWorld.DebugLog("公共CD副本扫荡完成: %s" % str(addDataDict), playerID)
-    # 给奖励
-    FBLogic.OnGivePubCDFBSweepPrize(curPlayer, mapID, lineID, sweepCnt, dataEx)
-    
-    # 重置扫荡数据
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PubCDFBS_MapID % groupNum, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PubCDFBS_LineID % groupNum, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PubCDFBS_Cnt % groupNum, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PubCDFBS_DataEx % groupNum, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PubCDFBS_Time % groupNum, 0)
-    Sync_PubFBSweepData(curPlayer, groupNum)
-    return
-
-## 同步公共CD副本扫荡信息
-def Sync_PubFBSweepData(curPlayer, groupNum=-1):
-    
-    PubCDFBSweepDict = ReadChConfig.GetEvalChConfig("PubCDFBSweep")
-    allGroupNumList = PubCDFBSweepDict.keys()
-    if groupNum == -1:
-        groupNumList = allGroupNumList
-    else:
-        if groupNum not in allGroupNumList:
-            return
-        groupNumList = [groupNum]
-        
-    pubSweepData = ChPyNetSendPack.tagMCPubFBSweepData()
-    pubSweepData.Clear()
-    pubSweepData.SweepDatList = []
-    
-    for gNum in groupNumList:
-        sweepInfo = ChPyNetSendPack.tagMCPubFBSweep()
-        sweepInfo.Clear()
-        sweepInfo.PubNum = gNum
-        sweepInfo.FBMapID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PubCDFBS_MapID % gNum)
-        sweepInfo.LineID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PubCDFBS_LineID % gNum)
-        sweepInfo.SweepTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PubCDFBS_Time % gNum)
-        sweepInfo.SweepCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PubCDFBS_Cnt % gNum)
-        pubSweepData.SweepDatList.append(sweepInfo)
-        
-    pubSweepData.Cnt = len(pubSweepData.SweepDatList)
-    NetPackCommon.SendFakePack(curPlayer, pubSweepData)
-    return
-
 #//A5 05 玩家开始副本扫荡 #tagCMBeginFBWipeOut
 #
 #struct    tagCMBeginFBWipeOut
@@ -245,383 +55,48 @@
 #    DWORD        MapID;
 #    WORD        LineID;
 #    BYTE        Cnt;    // 扫荡次数
-#    BYTE        IsFinish;    // 是否立即完成; 0-否;1-花钱立即完成;2-客户端自行倒计时间到后发送2代表领取扫荡完成奖励
 #    DWORD        DataEx;    //附带信息
-#    BYTE        IsLittleHelper;    // 是否小助手扫荡
 #};
 def OnPlayerFBWipeOut(playerIndex, clientData, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
     
-    #if not GameWorld.CheckPlayerTick(curPlayer, ChConfig.TYPE_Player_Tick_BeginFBWipeOut, tick):
-    #    GameWorld.DebugLog("玩家副本扫荡请求CD中...", curPlayer.GetPlayerID())
-    #    return
-    
     mapID = clientData.MapID
     lineID = clientData.LineID
     cnt = clientData.Cnt
-    #isFinish = clientData.IsFinish
-    isFinish = 1 # 暂时默认1,之后有需要扫荡等待的再说
     dataEx = clientData.DataEx
-    isLittleHelper = clientData.IsLittleHelper
-    if isLittleHelper:
-        if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_LittleHelper):
-            GameWorld.DebugLog("玩家没有小助手功能权限!", curPlayer.GetPlayerID())
-            return
     
     if cnt <= 0:
         return
     
     fbIpyData = FBCommon.GetFBIpyData(mapID)
-    if FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID()) == FBCommon.GetRecordMapID(mapID):
-        if fbIpyData and fbIpyData.GetDayTimes():#没有限制进入次数的不限制在目标地图扫荡
-            GameWorld.DebugLog("玩家在扫荡目标地图中,无法扫荡!mapID=%s" % mapID)
-            return
+    fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, lineID, False)
+    if not fbIpyData or not fbLineIpyData:
+        GameWorld.DebugLog("不存在该副本或线路无法扫荡!mapID=%s, lineID=%s" % (mapID, lineID))
+        return
     
-    
-    fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, lineID)
-    if not fbLineIpyData:
-        GameWorld.DebugLog("找不到该副本线路,无法扫荡!mapID=%s, lineID=%s" % (mapID, lineID))
+    if not FBCommon.IsFBPass(curPlayer, mapID, lineID):
+        GameWorld.DebugLog("未过关无法扫荡!mapID=%s, lineID=%s" % (mapID, lineID))
         return
     
     if FBCommon.CheckCanEnterFBComm(curPlayer, mapID, lineID, fbIpyData, fbLineIpyData, cnt) != ShareDefine.EntFBAskRet_OK:
         return
-    costMoneyList = []
-    sweepCostindexList = []
-    sweepCostCnt = 0
-    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-    
-    if fbLineIpyData:
-        #扫荡等级判断
-        sweepLVLimit = fbLineIpyData.GetSweepLVLimit()
-        if sweepLVLimit and curPlayer.GetLV() < sweepLVLimit:
-            GameWorld.DebugLog('玩家副本扫荡,等级不足!mapID=%s, lineID=%s, playerLV=%s, sweepLVLimit=%s' 
-                               % (mapID, lineID, curPlayer.GetLV(), sweepLVLimit), curPlayer.GetPlayerID())
-            return
-        
-        #扫荡道具判断,小助手不消耗扫荡道具
-        sweepItemID = fbLineIpyData.GetSweepItemID()
-        if sweepItemID and not isLittleHelper:
-            sweepItemCnt = fbLineIpyData.GetSweepCostCnt()
-            sweepCostCnt = sweepItemCnt * cnt
-            #isEnough, sweepCostindexList = ItemCommon.GetItem_FromPack_ByID(sweepItemID, itemPack, sweepCostCnt)
-            isEnough, sweepCostindexList, hasBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(sweepItemID, itemPack, sweepCostCnt)
-            if not isEnough:
-                itemPrice = ItemCommon.GetShopItemPrice(sweepItemID, IPY_GameWorld.TYPE_Price_Gold_Money)
-                if itemPrice:
-                    costMoney = itemPrice * lackCnt
-                    costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, costMoney)
-                if not costMoneyList:
-                    GameWorld.DebugLog("扫荡消耗道具不足, mapID=%s,lineID=%s,sweepItemID=%s,sweepCostCnt=%s" 
-                                   % (mapID, lineID, sweepItemID, sweepCostCnt), curPlayer.GetPlayerID())
-                    return
-
-            
-        
-    #公共CD扫荡模式暂屏蔽,有需要再修改
-    #===============================================================================================
-    # groupNum = -1
-    # sweepInfo = None
-    # PubCDFBSweepDict = ReadChConfig.GetEvalChConfig("PubCDFBSweep")
-    # for gNum, sInfo in PubCDFBSweepDict.items():
-    #    if mapID in sInfo[PCDFB_MapIDList]:
-    #        groupNum = gNum
-    #        sweepInfo = sInfo
-    #        break
-    #        
-    # # 公共CD副本扫荡
-    # if groupNum >= 0:
-    #    if not isFinish:
-    #        __DoStartPubCDFBSweep(curPlayer, mapID, lineID, cnt, isFinish, dataEx, groupNum, sweepInfo)
-    #    else:
-    #        __DoFinishPubCDFB(curPlayer, mapID, isFinish, groupNum, sweepInfo)
-    #    return
-    #===============================================================================================
     
     # 副本是否可扫荡, 这里只判断副本自身的特殊条件, 公共条件上面已经判断
-    if not FBLogic.OnPlayerFBSweepAsk(curPlayer, mapID, lineID, cnt, isFinish, dataEx):
+    if not FBLogic.OnPlayerFBSweepAsk(curPlayer, mapID, lineID, cnt, dataEx):
+        GameWorld.DebugLog("该副本当前无法扫荡!mapID=%s, lineID=%s" % (mapID, lineID))
         return
     
-    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_FBSweep, 1, [mapID])
-    
-    #扣除扫荡道具
-    if sweepCostindexList and sweepCostCnt:
-        ItemCommon.ReduceItem(curPlayer, itemPack, sweepCostindexList, sweepCostCnt, False, 'FBSweepCostItem')
-    if costMoneyList:
-        infoDict = {"MapID":mapID, "LineID":lineID, 'SweepCount':cnt}
-        for moneyType, moneyNum in costMoneyList:
-            if not PlayerControl.PayMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_Cost_FBSweep, infoDict):
-                return False, hasBind
+    #PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_FBSweep, 1, [mapID])
     
     #需先扣除门票, 再增加次数, 否则可能导致扣除的数量错误
-    FBCommon.DelFBEnterTicket(curPlayer, mapID, lineID, cnt)
-        
+    #FBCommon.DelFBEnterTicket(curPlayer, mapID, lineID, cnt)
+    
     #增加副本进入次数
     if fbIpyData and fbIpyData.GetDayTimes():
         FBCommon.AddEnterFBCount(curPlayer, mapID, cnt)
-    
-    helpIpyData = IpyGameDataPY.GetIpyGameDataNotLog("FBHelpBattle", mapID, lineID)
-    if helpIpyData:
-        FBHelpBattle.SendGameServer_SweepCallHelpBattlePlayer(curPlayer, mapID, lineID)
-        return
-    
+        
     #扫荡结果给奖励等
-    FBLogic.OnPlayerFBSweepResult(curPlayer, mapID, lineID, cnt, isFinish, dataEx)
-    return
-
-
-#// A5 1B 购买挑战副本精力 #tagCMBuyFBEnergy
-#
-#struct    tagCMBuyFBEnergy
-#{
-#    tagHead         Head;
-#};
-def OnPlayerBuyFBEnergy(playerIndex, clientData, tick):
-    #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
-    return
-
-
-## 玩家副本功能时间处理
-def DoPlayerFBTimeProcess(curPlayer, tick):
-    
-    checkInterval = ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_FBTimeProcess]
-    if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_FBTimeProcess) < checkInterval:
-        return 
-    
-    curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_FBTimeProcess, tick)
-    
-    # 领主霸业玩家功能时间处理
-    FBCommon.RegainFBCntProcess(curPlayer)
-    return
-
-
-#// B1 02 领取多倍副本奖励 #tagCMGetMultiFBPrize
-#
-#struct    tagCMGetMultiFBPrize
-#{
-#    tagHead         Head;
-#    DWORD        MapID;
-#    WORD        LineID;
-#    WORD        Percent;    // 额外奖励百分比奖励等级
-#};
-def OnPlayerGetMultiFBPrize(playerIndex, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
-    mapID = clientData.MapID
-    lineID = clientData.LineID
-    prizeExLV = clientData.Percent
-    FBLogic.OnGetMultiFBPrize(curPlayer, mapID, lineID, prizeExLV)
-    return
-
-
-#//A5 60 重置副本挑战次数 #tagCMResetFBJoinCnt
-#
-#struct tagCMResetFBJoinCnt
-#{
-#    tagHead        Head;
-#};
-def OnPlayerResetFBJoinCnt(playerIndex, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
-    return
-
-
-#// B1 01 客户端副本发送结束 #tagCMClientEndFB
-#
-#struct    tagCMClientEndFB
-#{
-#    tagHead         Head;
-#    DWORD        MapID;
-#    WORD        LineID;
-#    DWORD        Data;    //副本数据
-#};
-def OnClientEndFB(playerIndex, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
-    mapID = clientData.MapID
-    lineID = clientData.LineID
-    data1 = clientData.Data1
-    data2 = clientData.Data2
-    dataList = [data1, data2]
-    FBLogic.OnClientEndFB(curPlayer, mapID, lineID, dataList)
-    GameWorld.DebugLog('    客户端副本发送结束mapID=%s,lineID=%s,dataList=%s'%(mapID,lineID,dataList))
-    return
-
-
-#// B1 04 客户端发送开始副本 #tagCMClientStartFB
-#
-#struct    tagCMClientStartFB
-#{
-#    tagHead         Head;
-#};
-def OnClientStartFB(playerIndex, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
-    FBLogic.OnClientStartFB(curPlayer, tick)
-    return
-
-#// A2 31 前端开始自定义场景 #tagCMClientStartCustomScene
-#
-#struct    tagCMClientStartCustomScene
-#{
-#    tagHead        Head;
-#    DWORD        MapID;
-#    WORD        FuncLineID;
-#};
-def OnClientStartCustomScene(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    mapID = clientData.MapID
-    funcLineID = clientData.FuncLineID
-    DoEnterCustomScene(curPlayer, mapID, funcLineID, tick)
-    return
-
-#// A2 33 前端退出自定义场景 #tagCMClientExitCustomScene
-#
-#struct    tagCMClientExitCustomScene
-#{
-#    tagHead        Head;
-#};
-def OnClientExitCustomScene(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    DoExitCustomScene(curPlayer)
-    return
-
-def DoEnterCustomScene(curPlayer, mapID, lineID, tick):
-    ## 进入自定义场景状态
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.Log("玩家请求进入自定义场景!mapID=%s,lineID=%s" % (mapID, lineID), playerID)
-    if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene):
-        curMapID = PlayerControl.GetCustomMapID(curPlayer)
-        curLineID = PlayerControl.GetCustomLineID(curPlayer)
-        if mapID == curMapID and lineID == curLineID:
-            GameWorld.Log("    玩家当前已经在自定义场景中!无需重新请求!", playerID)
-            result = 1
-        else:
-            GameWorld.Log("    玩家当前在不同的自定义场景中!不允许进入!curMapID=%s,curLineID=%s" 
-                          % (curMapID, curLineID), playerID)
-            result = 0
-        StartCustomSceneResult(curPlayer, mapID, lineID, result)
-        return result
-    
-    #进入副本通用检查
-    if mapID:
-        fbIpyData = FBCommon.GetFBIpyData(mapID)
-        fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, lineID)
-        if PlayerControl.CheckMoveToFB(curPlayer, mapID, lineID, fbIpyData, fbLineIpyData, tick) != ShareDefine.EntFBAskRet_OK:
-            StartCustomSceneResult(curPlayer, mapID, lineID, 0)
-            return 0
-    
-    PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
-        
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomScene, 1) # 由于前端不一定有发mapID,所以这里额外记录这个状态,不能直接用mapID判断
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomSceneStepTick, tick)
-    PlayerControl.SetCustomMap(curPlayer, mapID, lineID)
-    NPCCommon.ClearPriWoodPile(curPlayer)
-    GameWorld.Log("玩家开始自定义场景!mapID=%s,lineID=%s" % (mapID, lineID), playerID)
-    if mapID:
-        PetControl.DoLogic_PetLoadMapOK(curPlayer)
-        FBLogic.OnEnterCustomScene(curPlayer, mapID, lineID)
-        
-    #默认回满血
-    if GameObj.GetHP(curPlayer) < GameObj.GetMaxHP(curPlayer):
-        GameObj.SetHPFull(curPlayer)
-        
-    #通知进入状态
-    StartCustomSceneResult(curPlayer, mapID, lineID, 1)
-    return 1
-
-def StartCustomSceneResult(curPlayer, mapID, lineID, result):
-    if result != 1:
-        DoExitCustomScene(curPlayer)
-    resultPack = ChPyNetSendPack.tagMCStartCustomSceneResult()
-    resultPack.MapID = mapID
-    resultPack.FuncLineID = lineID
-    resultPack.Result = result
-    NetPackCommon.SendFakePack(curPlayer, resultPack)
-    return
-
-def DoExitCustomScene(curPlayer):
-    ## 退出自定义场景状态
-    PlayerControl.SetPlayerSightLevel(curPlayer, 0)
-    mapID = PlayerControl.GetCustomMapID(curPlayer)
-    lineID = PlayerControl.GetCustomLineID(curPlayer)
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomScene, 0)
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomSceneStepTick, 0)
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomSceneGrade, 0)
-    PlayerControl.SetCustomMap(curPlayer, 0, 0)
-    if mapID and FBCommon.GetCustomMapStep(curPlayer, mapID, lineID) != ChConfig.CustomMapStep_Over:
-        FBCommon.SetCustomMapStep(curPlayer, mapID, lineID, ChConfig.CustomMapStep_Over)
-    NPCCommon.ClearPriWoodPile(curPlayer)
-    
-    #默认回满血
-    if GameObj.GetHP(curPlayer) > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie and GameObj.GetHP(curPlayer) < GameObj.GetMaxHP(curPlayer):
-        GameObj.SetHPFull(curPlayer)
-        
-    GameWorld.Log("玩家退出自定义场景!", curPlayer.GetPlayerID())
-    return
-
-#// B1 0A 副本购买buff #tagCMFBBuyBuff
-#struct    tagCMFBBuyBuff
-#{
-#    tagHead         Head;
-#    DWORD        MapID;
-#    WORD        MoneyCnt;
-#};
-def OnFBBuyBuff(playerIndex, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
-    playerID = curPlayer.GetPlayerID()
-    mapID = clientData.MapID
-    moneyCnt = clientData.MoneyCnt
-    ipyData = IpyGameDataPY.GetIpyGameData('FBBuyBuff', mapID, moneyCnt)
-    if not ipyData:
-        return
-    addBuffID = ipyData.GetBuffID()
-    curSkill = GameWorld.GetGameData().GetSkillBySkillID(addBuffID)
-    if not curSkill:
-        return
-    crossMapID = PlayerControl.GetCrossMapID(curPlayer)
-    if crossMapID and mapID !=crossMapID:
-        return
-    if not crossMapID and mapID != GameWorld.GetMap().GetMapID():
-        return
-    
-    curTime = int(time.time())
-    #判断CD 
-    timeKey = (mapID, moneyCnt)
-    lastTime = PyGameData.g_fbBuyBuffTimeDict.get(playerID, {}).get(timeKey, 0)
-    if lastTime and curTime - lastTime < ipyData.GetBuffCD():
-        GameWorld.DebugLog('副本购买buff CD未到 ')
-        return
-
-    #扣钱
-    infoDict =  {"MapID":mapID, "addBuffID":addBuffID}
-    if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, moneyCnt, ChConfig.Def_Cost_FBBuyBuff, infoDict):
-        return
-    if playerID not in PyGameData.g_fbBuyBuffTimeDict:
-        PyGameData.g_fbBuyBuffTimeDict[playerID] = {}
-    PyGameData.g_fbBuyBuffTimeDict[playerID][timeKey] = curTime
-    NotifyBuyFBBuffInfo(curPlayer)
-    if crossMapID:
-        msgDict = {"PlayerID":curPlayer.GetPlayerID(), "buffID":addBuffID}
-        GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_AddBuff, msgDict)
-        GameWorld.DebugLog("跨服中请求复活, crossMapID=%s,msgDict=%s" % (crossMapID, msgDict), playerID)
-        return
-
-    SkillShell.__DoLogic_AddBuff(curPlayer, curPlayer, curSkill, False, tick, 0, 0)
-    #SkillCommon.AddBuffBySkillType(curPlayer, addBuffID, tick)
-    return
-
-def NotifyBuyFBBuffInfo(curPlayer):
-    playerID = curPlayer.GetPlayerID()
-    buffTimeDict = PyGameData.g_fbBuyBuffTimeDict.get(playerID, {})
-    if not buffTimeDict:
-        return
-    packData = ChPyNetSendPack.tagMCFBBuyBuffInfo()
-    packData.InfoList = []
-    for timeKey, buyTime in buffTimeDict.items():
-        mapID, moneyCnt = timeKey
-        timeInfo = ChPyNetSendPack.tagMCFBBuyBuffTime()
-        timeInfo.MapID = mapID
-        timeInfo.MoneyCnt = moneyCnt
-        timeInfo.BuyTime = buyTime
-        packData.InfoList.append(timeInfo)
-    packData.Cnt = len(packData.InfoList)
-    NetPackCommon.SendFakePack(curPlayer, packData)
+    FBLogic.OnPlayerFBSweepResult(curPlayer, mapID, lineID, cnt, dataEx)
     return
 
 #// B1 08 快速一键过关副本 #tagCMFBQuickPass

--
Gitblit v1.8.0