From 5ca218ac01201f10c196a07b61ef3b1fe59040e5 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 18 九月 2025 18:30:07 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(B427使用技能无伤血时默认发目标;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py | 39 ++++++++++++++++++++++++---------------
1 files changed, 24 insertions(+), 15 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 ee92f50..0f0b02b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -162,6 +162,7 @@
self.timeline = 0 # 时间轴节点 turnNum*1000+actionIndex*100++actionNum
self.startTime = 0 # 开始时间戳,支持毫秒小数
self.costTime = 0 # 单场战斗总耗时,支持毫秒小数
+ self._oneActionUseSkillCntDict = {} # 某对象行动开始后所有对象累计使用技能次数,用于单对象单次行动中限制每个对象的最高触发技能次数 {objID:useCnt, ...}
# pve 多小队 - 一般只有PVE用到
self.lineupIndex = 0 # 当前小队索引
@@ -265,7 +266,7 @@
@param turnNum: 第x回合
'''
self.timeline = timeline
- GameWorld.DebugLog("时间节点更新: %s" % self.timeline)
+ GameWorld.DebugLog("[时间节点更新]: %s" % self.timeline)
if isEmpty:
# 空位置的节点可直接跳过
return timeline
@@ -427,6 +428,12 @@
else:
ObjPool.GetPoolMgr().release(clientPack)
return
+
+ def ResetOneActionUseSkillCnt(self): self._oneActionUseSkillCntDict = {}
+ def GetOneActionUseSkillCnt(self, objID): return self._oneActionUseSkillCntDict.get(objID, 0)
+ def SetOneActionUseSkillCnt(self, objID, useCnt):
+ self._oneActionUseSkillCntDict[objID] = useCnt
+ return useCnt
class TurnFightMgr():
## 回合战斗管理器
@@ -618,7 +625,7 @@
else:
heroID = 0
skinID = 0
- skillIDList = [] + npcData.GetSkillIDList()
+ skillIDList = []# + npcData.GetSkillIDList()
# boss额外随机技能
bossID = lineupIpyData.GetBossID()
@@ -645,7 +652,10 @@
ChConfig.AttrID_ParryRate:npcData.GetParryRate(), ChConfig.AttrID_ParryRateDef:npcData.GetParryRateDef(),
ChConfig.AttrID_SuckHPPer:npcData.GetSuckHPPer(), ChConfig.AttrID_SuckHPPerDef:npcData.GetSuckHPPerDef(),
}
- batAttrDict.update(npcData.GetSpecAttrInfo())
+ exAttrDict = npcData.GetSpecAttrInfo()
+ for attrIDStr, attrValue in exAttrDict.items():
+ attrID = int(attrIDStr)
+ batAttrDict[attrID] = batAttrDict.get(attrID, 0) + attrValue
battleDict = {"NPCID":npcID,
"HeroID":heroID,
@@ -664,7 +674,7 @@
angerSkillID = heroIpyData.GetAngerSkillID()
skillIDList = [normalSkillID, angerSkillID]
- breakIpyDataList = IpyGameDataPY.GetIpyGameDataList("HeroBreak", heroID)
+ breakIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("HeroBreak", heroID)
if breakIpyDataList:
for breakIpyData in breakIpyDataList:
if breakIpyData.GetBreakLV() > breakLV:
@@ -740,11 +750,12 @@
heroID = heroInfo.get("HeroID", 0)
skinID = heroInfo.get("SkinID", 0)
lv = heroInfo.get("LV", 1)
+ specialty, atkDistType, country, sex = 0, 1, 0, 1
heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID) if heroID else None
if heroIpyData:
+ objName = heroIpyData.GetName()
specialty = heroIpyData.GetSpecialty()
atkDistType = heroIpyData.GetAtkDistType()
- objName = heroIpyData.GetName()
country = heroIpyData.GetCountry()
sex = heroIpyData.GetSex()
@@ -758,11 +769,7 @@
if not npcDataEx:
continue
if not heroIpyData:
- specialty = 0
- atkDistType = npcDataEx.GetAtkDistType()
objName = npcDataEx.GetNPCName()
- country = npcDataEx.GetCountry()
- sex = npcDataEx.GetSex()
batObj = batObjMgr.addBatObj()
if not batObj:
@@ -813,6 +820,8 @@
GameWorld.DebugLog(" 已被击杀不处理! %s" % (objName))
continue
GameWorld.DebugLog(" 重置武将: %s, HP:%s/%s, XP:%s" % (objName, batObj.GetHP(), batObj.GetMaxHP(), batObj.GetXP()))
+
+ batObj.TurnReset()
# 清除buff
buffMgr = batObj.GetBuffManager()
@@ -1165,7 +1174,7 @@
turnFight.syncState(FightState_Fighting)
for faction, num in turnFight.actionSortList:
- GameWorld.DebugLog("回合开始逻辑: turnNum=%s,faction=%s, num=%s" % (turnNum, faction, num))
+ GameWorld.DebugLog("大回合开始逻辑: turnNum=%s,faction=%s, num=%s" % (turnNum, faction, num))
batFaction = turnFight.getBatFaction(faction)
batLineup = batFaction.getBatlineup(num)
batLineup.actionNum = 1
@@ -1256,7 +1265,7 @@
# 回合开始
for faction, num in turnFight.actionSortList:
- GameWorld.DebugLog("回合开始逻辑: turnNum=%s,faction=%s, num=%s" % (turnNum, faction, num))
+ GameWorld.DebugLog("大回合开始逻辑: turnNum=%s,faction=%s, num=%s" % (turnNum, faction, num))
batFaction = turnFight.getBatFaction(faction)
batLineup = batFaction.getBatlineup(num)
batLineup.actionNum = 1
@@ -1341,6 +1350,7 @@
batLineup.actionNum = ActionNumStart
for objID in batLineup.posObjIDDict.values():
batObj = batObjMgr.getBatObj(objID)
+ turnFight.ResetOneActionUseSkillCnt()
TurnPassive.OnTriggerPassiveEffect(turnFight, batObj, ChConfig.TriggerWay_FightStart)
turnFight.enterLogic = True
@@ -1359,10 +1369,6 @@
#GameWorld.DebugLog("OnTimelineChange! objID=%s" % (objID))
if not batObj or not batObj.IsAlive():
continue
-
- batObj.SetDict(ChConfig.Def_Obj_Dict_TurnComboNum, 0)
- batObj.SetDict(ChConfig.Def_Obj_Dict_TurnMissNum, 0)
- batObj.SetDict(ChConfig.Def_Obj_Dict_TurnParryNum, 0)
curID = batObj.GetID()
skillManager = batObj.GetSkillManager()
@@ -1441,6 +1447,7 @@
if batObj.GetHP() <= 0:
return
+ turnFight.ResetOneActionUseSkillCnt()
TurnPassive.OnTriggerPassiveEffect(turnFight, batObj, ChConfig.TriggerWay_BigTurnStart)
return
@@ -1463,6 +1470,8 @@
if batObj.GetHP() <= 0:
return
+ GameWorld.DebugLog("---[武将回合开始时] : curID=%s,curHP=%s/%s" % (batObj.GetID(), batObj.GetHP(), batObj.GetMaxHP()))
+ turnFight.ResetOneActionUseSkillCnt()
TurnPassive.OnTriggerPassiveEffect(turnFight, batObj, ChConfig.TriggerWay_HeroTurnStart)
return
--
Gitblit v1.8.0