129 【战斗】战斗系统-服务端(主线战斗额外功能逻辑提到B425标记外处理并同步;)
3个文件已修改
60 ■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -27,6 +27,8 @@
import NetPackCommon
import PlayerControl
import GameWorld
import PlayerLLMJ
import PlayerPrestigeSys
import IpyGameDataPY
import PlayerOnline
import NPCCommon
@@ -514,6 +516,18 @@
        self.waveMax = 6 # 本关最大波数,每波有多个小队,每个小队即为一张战斗 TurnFight
        self.wave = 0 # 当前刷怪波,注意不是玩家当前进度波,比如被击杀会回退一波
        self.turnFight = GetTurnFightMgr().addTurnFight(ChConfig.Def_FBMapID_Main, 0, playerID)
        # 主线小怪战斗额外数据,一般用于分割与主线战斗表现无关的附加功能内容
        self.useZhanchui = 0
        self.mjExp = 0 # 历练秘笈额外经验
        self.killNPCCnt = 0
        return
    def resetMainFightExDataRec(self):
        ## 重置主线战斗相关的额外数据记录,每次前端请求主线小怪战斗处理后需要重置
        self.useZhanchui = 0
        self.mjExp = 0
        self.killNPCCnt = 0
        return
    
    def isLevelBoss(self):
@@ -1013,7 +1027,8 @@
            break
        
    PlayerOnline.GetOnlinePlayer(curPlayer).SetLastBatBuffer(guid, turnFight.batBuffer)
    SyncTurnFightReport(curPlayer, guid, turnFight.batBuffer)
    SyncTurnFightReport(curPlayer, guid, turnFight.batBuffer) # 同步战报
    #在同步战报后再处理结算奖励,与战斗表现分离
    FBLogic.OnTurnFightAward(curPlayer, turnFight, mapID, funcLineID, turnFight.awardData)
    tfMgr.delTurnFight(guid)
    return True
@@ -1084,6 +1099,9 @@
        return
    
    GameWorld.DebugLog("------------------- 主线战斗请求: reqType=%s" % reqType, curPlayer.GetPlayerID())
    mainFightMgr = GetMainFightMgr(curPlayer)
    mainFightMgr.resetMainFightExDataRec() # 请求时补重置,防止异常时重复结算逻辑
    clientPack = ChPyNetSendPack.tagSCTurnFightReportSign()
    clientPack.Sign = 0
    NetPackCommon.SendFakePack(curPlayer, clientPack) # 标记开始
@@ -1098,6 +1116,34 @@
    # 标记结束
    clientPack.Sign = 1
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    __doMainFightExDataFunc(curPlayer)
    return
def __doMainFightExDataFunc(curPlayer):
    mainFightMgr = GetMainFightMgr(curPlayer)
    # 本次消耗战锤数
    useZhanchui = mainFightMgr.useZhanchui
    if useZhanchui > 0:
        PlayerLLMJ.AddUseZhanchui(curPlayer, useZhanchui)
        PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_UseXiantao, useZhanchui)
        PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_CutTree, useZhanchui)
        PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_CutTree, useZhanchui)
    # 历练秘境额外经验
    mjExp = mainFightMgr.mjExp
    if mjExp > 0:
        PlayerLLMJ.AddExpEx(curPlayer, mjExp)
    # 击杀怪物
    killNPCCnt = mainFightMgr.killNPCCnt
    if killNPCCnt > 0:
        PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_KillNPC, killNPCCnt)
        PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_KillNPC, killNPCCnt)
    # 结算逻辑最后重置数据
    mainFightMgr.resetMainFightExDataRec()
    return
def __doExitMainFight(curPlayer):
@@ -1701,8 +1747,7 @@
    
    # 暂时只算主线小怪
    if curPlayer and turnFight.mapID == ChConfig.Def_FBMapID_Main and gameObj.GetFaction() != ChConfig.Def_FactionA:
        PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_KillNPC, 1)
        PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_KillNPC, 1)
        GetMainFightMgr(curPlayer).killNPCCnt += 1
    return True
def OnTurnAllOver(guid):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py
@@ -96,7 +96,7 @@
                           % (totalExp, unXiantaoCntExp, baseExp, mjEx, mjExPer, exRemain))
        finalAddExp = PlayerControl.PlayerControl(curPlayer).AddExp(totalExp, ShareDefine.Def_ViewExpType_KillNPC)
        if mjEx and finalAddExp:
            PlayerLLMJ.AddExpEx(curPlayer, mjEx)
            TurnAttack.GetMainFightMgr(curPlayer).mjExp += mjEx
            
    __doMainDrop(curPlayer, killObjList)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -58,7 +58,7 @@
import PlayerOnline
import PlayerTask
import PlayerMail
import PlayerLLMJ
import TurnAttack
import ChPlayer
import GameObj
@@ -2765,10 +2765,7 @@
                unXiantaoCntBooty = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_UnXiantaoCntBooty % itemID)
                NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_UnXiantaoCntBooty % itemID, unXiantaoCntBooty + price)
                
        PlayerLLMJ.AddUseZhanchui(curPlayer, price)
        PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_UseXiantao, price)
        PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_CutTree, price)
        PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_CutTree, price)
        TurnAttack.GetMainFightMgr(curPlayer).useZhanchui += price
        
    unitPrice = price if quantity == 1 else int(math.ceil(price * 1.0 / quantity)) # 单价
    #reason_name = "Unknown" if not costType else costType