From c63ffd10aecb12b2e09dae603cf9a0f824f6482c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 10 十二月 2025 15:46:15 +0800
Subject: [PATCH] 16 卡牌服务端(合成目标物品与材料物品不在同一背包时支持合成;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py |   21 ++++++++++++++++++++-
 1 files changed, 20 insertions(+), 1 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
index 3bc1cff..1a3d1bb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -365,6 +365,7 @@
     def GetLayerMax(self): return self._ipyData.GetLayerMax()
     def GetBuffRepeat(self): return self._ipyData.GetBuffRepeat() # Buff叠加规则
     def GetDispersedLimit(self): return self._ipyData.GetDispersedLimit() or self._ipyData.GetSkillType() == ChConfig.Def_SkillType_Halo # 驱散限制
+    def GetBuffRetain(self): return self._ipyData.GetBuffRetain()
     def GetFightPower(self): return self._ipyData.GetFightPower()
     
 class PyBuff():
@@ -392,6 +393,8 @@
     def GetSkillData(self): return self._skillData
     def GetSkillID(self): return self._skillData.GetSkillID()
     def GetCurBuffState(self): return self._skillData.GetCurBuffState()
+    def GetDispersedLimit(self): return self._skillData.GetDispersedLimit()
+    def GetBuffRetain(self): return self._skillData.GetBuffRetain()
     def GetAddTiming(self): return self._addTiming
     def SetAddTiming(self, addTiming):
         self._addTiming = addTiming
@@ -661,6 +664,7 @@
     def GetLayerMax(self): return self._skillData.GetLayerMax()
     def GetBuffRepeat(self): return self._skillData.GetBuffRepeat() # Buff叠加规则
     def GetDispersedLimit(self): return self._skillData.GetDispersedLimit() # 驱散限制
+    def GetBuffRetain(self): return self._ipyData.GetBuffRetain()
     def GetFightPower(self): return self._skillData.GetFightPower()
     
     ## ---------------------------------- 非技能表内容 ----------------------------------
@@ -831,6 +835,7 @@
         self.sex = 0
         self.job = 0
         self.lv = 1
+        self._star = 0
         self.fightPower = 0
         self.faction = 0 # 所属阵营,一般只有双方阵营, 1 或 2,发起方默认1
         self.lineupNum = 1 # 阵容位置编号,一般多V多时有用,通常默认1
@@ -844,6 +849,7 @@
         self._kvDict = {} # 自定义kv字典
         self._bigTurnAtkbackCnt = 0 # 大回合累计反击次数
         self._incrementValue = 0 # 自增值,每场战斗重置,用于确保唯一的场景,如 Skill tag 标签
+        self._skillHappenFailCntDict = {} # 技能累计概率触发次数,使用成功后重置 {skillID:failCnt, ...}
         self._skillUseCntDict = {} # 技能累计使用次数 {skillID:useCnt, ...}
         self._skillTurnUseCntDict = {} # 技能单回合累计使用次数 {skillID:useCnt, ...}
         self._skillMgr = ObjPool.GetPoolMgr().acquire(SkillManager, self)
@@ -909,6 +915,7 @@
         return
     
     def ResetBattleEffect(self):
+        ## 重置战斗属性,一般刷属性前调用
         self._batAttrDict = {}
         self._batAttrDict.update(self._initAttrDict)
         self.__onUpdBatAttr()
@@ -957,6 +964,8 @@
     def SetFightPower(self, fightPower): self.fightPower = fightPower
     def GetLV(self): return self.lv
     def SetLV(self, lv): self.lv = lv
+    def GetStar(self): return self._star
+    def SetStar(self, star): self._star = star
     def GetDictByKey(self, key): return self._kvDict.get(key, 0)
     def SetDict(self, key, value): self._kvDict[key] = value
     
@@ -1077,9 +1086,19 @@
         self._skillTempAttrDict[attrID] = self._skillTempAttrDict.get(attrID, 0) + value
     def ClearSkillTempAttr(self): self._skillTempAttrDict = {}
     
+    def GetSkillHappenFailCnt(self, skillID): return self._skillHappenFailCntDict.get(skillID, 0) # 技能概率触发失败累计次数
+    def IsSkillCanHappen(self, skillID, happenRate):
+        if happenRate and not GameWorld.CanHappen(happenRate, ChConfig.Def_MaxRateValue):
+            self._skillHappenFailCntDict[skillID] = self._skillHappenFailCntDict.get(skillID, 0) + 1
+            return False
+        self._skillHappenFailCntDict.pop(skillID, 0)
+        return True
+    
     def GetSkillUseCnt(self, skillID): return self._skillUseCntDict.get(skillID, 0) # 单场战斗累计使用次数
     def GetSkillTurnUseCnt(self, skillID): return self._skillTurnUseCntDict.get(skillID, 0) # 单回合累计使用次数
     def ResetSkillUseCnt(self):
+        ## 每场战斗开始时重置
+        self._skillHappenFailCntDict = {}
         self._skillUseCntDict = {}
         self._skillTurnUseCntDict = {}
         self._incrementValue = 0
@@ -1208,7 +1227,7 @@
     return batObjMgr
 
 def OnMinute():
-    GameWorld.Log("战斗单位数量: %s" % len(GetBatObjMgr().batObjDict))
+    #GameWorld.Log("战斗单位数量: %s" % len(GetBatObjMgr().batObjDict))
     return
 
 def NotifyObjInfoRefresh(batObj, attrID, value):

--
Gitblit v1.8.0