From ac98391b1102b1c07aa71dbab56f232db74273ec Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 18 九月 2025 11:51:20 +0800
Subject: [PATCH] 121 【武将】武将系统-服务端(计算主公官职属性;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py |   68 +++++++++++++++++++++++----------
 1 files changed, 47 insertions(+), 21 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
index 25b07f3..4470358 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -76,9 +76,16 @@
         # 可扩展其他目标选择,如复活技能没有死亡单位时则使用另外的效果
         return
     
+    objID = curBatObj.GetID()
+    oneActionUseCnt = turnFight.GetOneActionUseSkillCnt(objID)
+    if oneActionUseCnt >= 20:
+        GameWorld.ErrLog("单次行动累计使用技能达到上限! objID=%s,oneActionUseCnt=%s" % (objID, oneActionUseCnt), turnFight.playerID)
+        return
+    oneActionUseCnt = turnFight.SetOneActionUseSkillCnt(objID, oneActionUseCnt + 1)
+    
     bySkillID = bySkill.GetSkillID() if bySkill else 0
-    GameWorld.DebugLog("使用技能: curID=%s,skillID=%s,tagCnt=%s,batType=%s,bySkillID=%s,HP:%s/%s" 
-                       % (curBatObj.GetID(), skillID, len(tagObjList), batType, bySkillID, curBatObj.GetHP(), curBatObj.GetMaxHP()))
+    GameWorld.DebugLog("●使用技能: curID=%s,skillID=%s,tagCnt=%s,batType=%s,bySkillID=%s,HP:%s/%s,oneActionUseCnt=%s" 
+                       % (objID, skillID, len(tagObjList), batType, bySkillID, curBatObj.GetHP(), curBatObj.GetMaxHP(), oneActionUseCnt))
     # 以下为技能可以使用的处理,之后的逻辑默认技能使用成功
     
     poolMgr = ObjPool.GetPoolMgr()
@@ -86,18 +93,28 @@
     if isinstance(useSkill, IpyGameDataPY.IPY_Skill):
         usePoolSkill = True
         # 统一使用 BattleObj.PySkill
-        useSkill = poolMgr.acquire(BattleObj.PySkill, useSkill)
+        useSkill = poolMgr.acquire(BattleObj.PySkill, useSkill, objID)
         
     useSkill.ResetUseRec()
     useSkill.SetTagObjList(tagObjList)
     useSkill.SetBatType(batType)
     useSkill.SetBySkill(bySkill)
     
+    isTurnNormalSkill = SkillCommon.isTurnNormalSkill(useSkill)
+    if isTurnNormalSkill:
+        # 普攻追击时强制重新开始算连击
+        useSkill.ComboCheckStart(batType == ChConfig.TurnBattleType_Pursue)
+        
     curBatObj.ClearSkillTempAttr()
+    tagIDList = []
     for tagObj in tagObjList:
+        tagIDList.append(tagObj.GetID())
         tagObj.ClearSkillTempAttr()
         
-    objID = curBatObj.GetID()
+    # 有功能分类的技能都认为是主技能
+    if useSkill.GetFuncType():
+        curBatObj.SetMainTagIDList(tagIDList)
+        
     useTag = ""
     
     #这个技能是Buff
@@ -126,8 +143,10 @@
         turnFight.addBatPack(clientPack)
         
     # 处理反击 或 连击
-    DoCombo(turnFight, curBatObj, useSkill)
-    
+    if isTurnNormalSkill:
+        if not DoCombo(turnFight, curBatObj, useSkill):
+            useSkill.ComboInterrupt()
+            
     # 最后重置、回收对象
     useSkill.ResetUseRec()
     if usePoolSkill:
@@ -448,7 +467,7 @@
     
     skillID = useSkill.GetSkillID()
     for tagBatObj in useSkill.GetTagObjList():
-        cureHP = CalcCureHP(curBatObj, tagBatObj, useSkill, largeNum=True)
+        cureHP = CalcCureHP(turnFight, curBatObj, tagBatObj, useSkill, largeNum=True)
         if cureHP <= 0:
             continue
         
@@ -580,8 +599,7 @@
                 纵排: 优先前面的单位
     '''
     
-    if not SkillCommon.isTurnNormalSkill(useSkill):
-        #GameWorld.DebugLog("非普攻不处理反击连击")
+    if not useSkill.ComboEnable():
         return
     
     tagFriendly = useSkill.GetTagFriendly()
@@ -602,7 +620,7 @@
     if not tagObj:
         return
     
-    comboNum = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnComboNum)
+    comboNum = useSkill.GetComboNum()
     aComboRate = atkObj.GetBatAttrValue(ChConfig.AttrID_ComboRate)
     aComboRate += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, tagObj, ChConfig.AttrID_ComboRate, useSkill)
     
@@ -614,14 +632,14 @@
         return
     GameWorld.DebugLog("● %s 【连击】 happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s" 
                        % (TurnAttack.GetObjName(atkObj), happenRate, aComboRate, dComboRateDef, comboNum))
-    atkObj.SetDict(ChConfig.Def_Obj_Dict_TurnComboNum, comboNum + 1)
+    useSkill.SetComboNum(comboNum + 1)
     
     # 连击特长
     DoHeroSpecialty(turnFight, atkObj, ChConfig.HeroSpecialty_Combo, useSkill.GetSkillID())
     
     # 连击根据技能目标配置逻辑重新选择目标
     OnUseSkill(turnFight, atkObj, useSkill, batType=ChConfig.TurnBattleType_Combo)
-    return
+    return True
 
 def __getCanAtkBackSkill(useSkill, tagObj):
     ## 获取是否可反击及反击技能
@@ -757,6 +775,12 @@
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirect, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAttackedDirect, curObj, connSkill=useSkill)
             
+    if killObjList:
+        tagObj = killObjList[0]
+        TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_KillOneObj, tagObj, connSkill=useSkill)
+    for tagObj in killObjList:
+        TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_KillTagObj, tagObj, connSkill=useSkill)
+        
     return
 
 def __doCostZhanchui(turnFight, curBatObj, useSkill):
@@ -858,7 +882,7 @@
                 continue
             
         effID = curEffect.GetEffectID()
-        GameWorld.DebugLog("执行额外技能效果: %s, triggerWay=%s,missObjIDList=%s" % (effID, triggerWay, missObjIDList))
+        GameWorld.DebugLog("◆执行额外技能效果: %s, triggerWay=%s,missObjIDList=%s" % (effID, triggerWay, missObjIDList))
         if effID == 5010:
             # 额外技能效果
             __doUseEnhanceSkill(turnFight, curObj, useSkill, curEffect, missObjIDList)
@@ -866,7 +890,6 @@
         
         for tagObj in useSkill.GetTagObjList():
             tagID = tagObj.GetID()
-            GameWorld.DebugLog("    tagID=%s" % (tagID))
             if tagID in missObjIDList:
                 # 闪避了不触发
                 continue
@@ -1046,11 +1069,11 @@
     if isTurnNormalSkill and not mustHit:
         aMissRateDef = atkObj.GetBatAttrValue(ChConfig.AttrID_MissRateDef) #atkObj.GetHit() # 抗闪避率 - 命中
         dMissRate = defObj.GetBatAttrValue(ChConfig.AttrID_MissRate) # 闪避率
-        missNum = defObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnMissNum)
+        missNum = curSkill.GetTagMissNum(defID)
         missRate = eval(IpyGameDataPY.GetFuncCompileCfg("MissCfg", 1))
         if GameWorld.CanHappen(missRate):
             GameWorld.DebugLog("闪避了! missRate=%s,dMissRate=%s,aMissRateDef=%s,missNum=%s" % (missRate, dMissRate, aMissRateDef, missNum))
-            defObj.SetDict(ChConfig.Def_Obj_Dict_TurnMissNum, missRate + 1)
+            curSkill.SetTagMissNum(defID, missRate + 1)
             return 0, pow(2, ChConfig.HurtType_Miss)
         
     hurtTypes = pow(2, ChConfig.HurtType_Normal)
@@ -1087,6 +1110,8 @@
     
     dHP = defObj.GetHP()
     dDef = 0 if ignoreDef else defObj.GetDef() # 防守方防御力
+    
+    atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPer, curSkill)
     
     aFinalDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPer) # 最终加成
     dFinalDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPerDef) # 最终减伤
@@ -1195,6 +1220,7 @@
         #被控制无法格挡
         return False
     
+    defID = defObj.GetID()
     # 格挡印记
     buffMgr = defObj.GetBuffManager()
     parryYJBuff = buffMgr.FindBuffByState(ChConfig.BatObjState_ParryYJ)
@@ -1205,11 +1231,11 @@
     
     aParryRateDef = atkObj.GetBatAttrValue(ChConfig.AttrID_ParryRateDef)
     dParryRate = defObj.GetBatAttrValue(ChConfig.AttrID_ParryRate)
-    parryNum = defObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnParryNum)
+    parryNum = curSkill.GetTagParryNum(defID)
     happenRate = eval(IpyGameDataPY.GetFuncCompileCfg("ParryCfg", 1))
     if GameWorld.CanHappen(happenRate):
         GameWorld.DebugLog("格挡了: happenRate=%s,aParryRateDef=%s,dParryRate=%s,parryNum=%s" % (happenRate, aParryRateDef, dParryRate, parryNum))
-        defObj.SetDict(ChConfig.Def_Obj_Dict_TurnParryNum, parryNum + 1)
+        curSkill.SetTagParryNum(defID, parryNum + 1)
         return True
     return False
 
@@ -1313,7 +1339,7 @@
     TurnAttack.AddTurnObjCureHP(atkObj, atkObj, suckHP, cureHP)
     return
 
-def CalcCureHP(userObj, tagObj, curSkill, largeNum=False):
+def CalcCureHP(turnFight, userObj, tagObj, curSkill, largeNum=False):
     ''' 计算治疗值
     '''
     cureType = curSkill.GetCalcType()
@@ -1322,7 +1348,7 @@
     
     cureBaseValue = GetCalcBaseValue(cureType, userObj, tagObj)
     
-    #skillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(userObj, None, curSkill, ChConfig.TriggerType_AddHP)
+    skillPer += TurnPassive.GetTriggerEffectValue(turnFight, userObj, tagObj, ChConfig.PassiveEff_AddSkillPer, curSkill)
     
     # 回合制
     curePer = 0 # 治疗加成
@@ -1383,7 +1409,7 @@
     tagObjList = [defObj]
     
     poolMgr = ObjPool.GetPoolMgr()
-    useSkill = poolMgr.acquire(BattleObj.PySkill, skillIpyData)
+    useSkill = poolMgr.acquire(BattleObj.PySkill, skillIpyData, atkID)
     useSkill.SetTagObjList(tagObjList)
     useSkill.ClearHurtObj()
     hurtObj = useSkill.AddHurtObj(defID)

--
Gitblit v1.8.0