From 7c12351394b2f17bcc5b25ca58455f143119ca93 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 10 十一月 2025 11:34:03 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(主线战斗额外功能逻辑提到B425标记外处理并同步;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 54 insertions(+), 3 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
index 1a0144f..408a0bd 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/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
@@ -182,6 +184,7 @@
self.isNeedReport = isNeedReport # 是否需要战报
self.msgDict = {} # 扩展信息字典,一般由MapID绑定的功能决定信息内容 {k:v, ...}
self._kvDict = {} # 自定义信息字典,不会被重置 {k:v, ...}
+ self.awardData = None # 战斗奖励设置的数据,可以是任意数据格式,由功能自行决定,会传递给 OnTurnFightAward 处理
self.factionDict = {} # 战斗阵营 {faction:BatFaction, ...},一般是只有两个阵营,faction为1或2,每个阵营支持多个阵容
self.actionSortList = [] # 阵容行动顺序 [[faction, num], ...]
@@ -211,6 +214,7 @@
self.setPVP()
self.msgDict = {}
self._kvDict = {}
+ self.awardData = None
self.nextTurnFight(msgDict)
return
@@ -512,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):
@@ -1011,7 +1027,9 @@
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
@@ -1050,6 +1068,7 @@
PlayerOnline.GetOnlinePlayer(curPlayer).SetLastBatBuffer(guid, turnFight.batBuffer)
SyncTurnFightReport(curPlayer, guid, turnFight.batBuffer)
+ FBLogic.OnTurnFightAward(curPlayer, turnFight, mapID, funcLineID, turnFight.awardData)
tfMgr.delTurnFight(guid)
return True
@@ -1080,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) # 标记开始
@@ -1094,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):
@@ -1498,6 +1548,8 @@
GameWorld.DebugLog("技能初始CD: curID=%s,skillID=%s,initCD=%s" % (curID, skillID, initCD))
elif curSkill.GetRemainTime():
curSkill.SetRemainTime(0)
+ curSkill.SetEnergy(0)
+
return
def RefreshObjSkillByTurn(batObj):
@@ -1695,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):
--
Gitblit v1.8.0