From d8aabb88ad30ab1ae999f23e7b3ffd4ae5b1e8f8 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 07 十一月 2025 11:32:58 +0800
Subject: [PATCH] 237 【福利内容】每日任务/每周任务/章节奖励-服务端(修复主线过关ID判断bug,成就过关进度及主线榜单值;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py | 69 +++++++++++++++++++++++-----------
1 files changed, 47 insertions(+), 22 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 487394d..398e8b0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -75,6 +75,10 @@
self.beautyObjIDDict = {} # 红颜战斗单位 {位置编号:batObjID, ...}
self.actionNum = ActionNumStart # 行动位置,从1开始
self.totalHurt = 0 # 阵容总输出
+
+ #特殊
+ self.bossID = 0
+ self.bossPosView = 0
return
def getPlayerID(self): return self.turnFight.playerID # 发起的玩家ID
@@ -88,6 +92,8 @@
self.ownerID = lineupInfo.get("PlayerID", 0) # 阵容所属的玩家ID
self.shapeType = lineupInfo.get("ShapeType", 0)
self.fightPower = lineupInfo.get("FightPower", 0)
+ self.bossID = lineupInfo.get("BossID", 0)
+ self.bossPosView = lineupInfo.get("BossPosView", 0)
SummonLineupObjs(self, self.faction, self.num, lineupInfo, self.getPlayerID())
return
@@ -176,6 +182,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], ...]
@@ -205,6 +212,7 @@
self.setPVP()
self.msgDict = {}
self._kvDict = {}
+ self.awardData = None
self.nextTurnFight(msgDict)
return
@@ -384,7 +392,10 @@
tfObj.MaxHP = batObj.GetMaxHP() % ChConfig.Def_PerPointValue
tfObj.MaxHPEx = batObj.GetMaxHP() / ChConfig.Def_PerPointValue
tfObj.LV = batObj.GetLV()
- tfObj.PosNum = posNum
+ if batLineup.bossPosView and batLineup.bossID == batObj.GetNPCID():
+ tfObj.PosNum = batLineup.bossPosView
+ else:
+ tfObj.PosNum = posNum
tfObj.AngreXP = batObj.GetXP()
tfLineup.ObjList.append(tfObj)
tfLineup.ObjCnt = len(tfLineup.ObjList)
@@ -600,9 +611,11 @@
ipyData = IpyGameDataPY.GetIpyGameData("NPCLineup", lineupID)
if not ipyData:
return {}
+ bossID = ipyData.GetBossID()
+ bossPosView = ipyData.GetBossPosView()
heroDict = {}
- for posNum in range(1, 1 + 10):
+ for posNum in range(1, 1 + 6):
if not hasattr(ipyData, "GetPosNPCID%s" % posNum):
break
npcID = getattr(ipyData, "GetPosNPCID%s" % posNum)()
@@ -613,7 +626,7 @@
continue
heroDict[str(posNum)] = battleDict
- lineupInfo = {"NPCLineupID":lineupID, "Hero":heroDict}
+ lineupInfo = {"NPCLineupID":lineupID, "Hero":heroDict, "BossID":bossID, "BossPosView":bossPosView}
return lineupInfo
def GetNPCBattleDict(lineupIpyData, npcID, strongerLV=0, difficulty=0):
@@ -819,6 +832,8 @@
batLineup.posObjIDDict[posNum] = objID
GameWorld.DebugLog("AddBatObj %s,skill=%s" % (GetObjName(batObj), skillManager.GetSkillIDList()))
+ ResetObjSkill(batObj)
+
if npcID:
#副本指定NPC属性
fbNPCInitAttrDict = FBLogic.GetFBNPCInitAttr(curPlayer, turnFight, batObj)
@@ -853,8 +868,7 @@
buffMgr.ClearBuff()
# 重置技能
- batObj.ResetSkillUseCnt()
- ResetObjSkillCD(batObj)
+ ResetObjSkill(batObj)
# 重刷属性、被动
TurnBuff.RefreshBuffAttr(batObj)
@@ -935,7 +949,8 @@
# 玩家
if tagType == 1:
- OnTurnFightVSPlayer(curPlayer, mapID, funcLineID, atkLineupID, defLineupID, tagID)
+ if not OnTurnFightVSPlayer(curPlayer, mapID, funcLineID, atkLineupID, defLineupID, tagID):
+ return
# NPC
else:
@@ -950,9 +965,10 @@
if not ret:
return
npcLineupIDList, strongerLV, difficulty = ret
- OnTurnFightVSNPC(curPlayer, mapID, funcLineID, atkLineupID, npcLineupIDList, strongerLV, difficulty)
+ if not OnTurnFightVSNPC(curPlayer, mapID, funcLineID, atkLineupID, npcLineupIDList, strongerLV, difficulty):
+ return
- return
+ return True
def OnTurnFightVSNPC(curPlayer, mapID, funcLineID, atkLineupID, npcLineupIDList, strongerLV, difficulty):
playerID = curPlayer.GetPlayerID()
@@ -998,8 +1014,9 @@
PlayerOnline.GetOnlinePlayer(curPlayer).SetLastBatBuffer(guid, turnFight.batBuffer)
SyncTurnFightReport(curPlayer, guid, turnFight.batBuffer)
+ FBLogic.OnTurnFightAward(curPlayer, turnFight, mapID, funcLineID, turnFight.awardData)
tfMgr.delTurnFight(guid)
- return
+ return True
def OnTurnFightVSPlayer(curPlayer, mapID, funcLineID, atkLineupID, defLineupID, tagPlayerID):
playerID = curPlayer.GetPlayerID()
@@ -1036,8 +1053,9 @@
PlayerOnline.GetOnlinePlayer(curPlayer).SetLastBatBuffer(guid, turnFight.batBuffer)
SyncTurnFightReport(curPlayer, guid, turnFight.batBuffer)
+ FBLogic.OnTurnFightAward(curPlayer, turnFight, mapID, funcLineID, turnFight.awardData)
tfMgr.delTurnFight(guid)
- return
+ return True
def GetTurnMax(mapID):
if mapID == ChConfig.Def_FBMapID_Main:
@@ -1396,7 +1414,6 @@
def TurnFightPerTurnBigStart(turnFight, turnNum):
## 大回合开始时
-
batObjMgr = BattleObj.GetBatObjMgr()
for faction, num in turnFight.actionSortList:
GameWorld.DebugLog("大回合开始逻辑: turnNum=%s,faction=%s, num=%s" % (turnNum, faction, num))
@@ -1412,8 +1429,9 @@
turnFight.ResetOneActionUseSkillCnt()
batObj.SetTiming(ChConfig.TurnTiming_Before) # 重置时机到回合前
- RefreshObjSkillByTurn(batObj) # 优先刷技能CD
-
+ if turnNum > 1: # 第1回合不用刷新技能
+ RefreshObjSkillByTurn(batObj)
+
TurnPassive.OnTriggerPassiveEffect(turnFight, batObj, ChConfig.TriggerWay_BigTurnStart)
return
@@ -1468,21 +1486,28 @@
RefreshObjBuffTime(turnFight, batObj)
return
-def ResetObjSkillCD(batObj):
- ## 重置所有技能CD
+def ResetObjSkill(batObj):
+ ## 重置所有技能,一般是每场战斗开始的重置
+ curID = batObj.GetID()
+ batObj.ResetSkillUseCnt() # 使用次数
skillManager = batObj.GetSkillManager()
for index in range(0, skillManager.GetSkillCount()):
curSkill = skillManager.GetSkillByIndex(index)
if not curSkill:
continue
- remainTime = curSkill.GetRemainTime()
- if remainTime <= 0:
- continue
- curSkill.SetRemainTime(0)
+ skillID = curSkill.GetSkillID()
+ initCD = curSkill.GetCoolDownInit()
+ if initCD:
+ curSkill.SetRemainTime(initCD)
+ 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):
- '''按回合刷新技能:默认以大回合统一减1回合,使用技能后设置剩余CD统一默认加1回合,即配置1回合,设置的CD是2
+ '''按回合刷新技能:默认以大回合统一减1回合
'''
curID = batObj.GetID()
skillManager = batObj.GetSkillManager()
@@ -1492,7 +1517,6 @@
continue
skillID = curSkill.GetSkillID()
preTurnUseCnt = batObj.GetSkillTurnUseCnt(skillID)
- batObj.ResetSkillTurnUseCnt() # 重置回合使用次数
remainTime = curSkill.GetRemainTime()
if remainTime <= 0:
continue
@@ -1503,6 +1527,7 @@
curSkill.SetRemainTime(remainTime)
GameWorld.DebugLog(" 更新技能CD: curID=%s,skillID=%s,remainTime=%s" % (curID, skillID, remainTime))
+ batObj.ResetSkillTurnUseCnt() # 重置回合使用次数,放刷新CD后重置
return
def RefreshObjBuffTime(turnFight, batObj):
@@ -1659,7 +1684,7 @@
# 非主线的PVE目标怪物
if npcID and curPlayer and turnFight.isFBMap() and gameObj.GetFaction() != ChConfig.Def_FactionA:
- if not FBLogic.OnFBNPCKilledBefore(curPlayer, turnFight, gameObj, killer):
+ if not FBLogic.OnFBNPCKilledBefore(curPlayer, turnFight, gameObj, killer, useSkill):
return
objID = gameObj.GetID()
--
Gitblit v1.8.0