From 5b34b20562dab2b5e82b90be18285345057c12ce Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 19 八月 2025 15:52:15 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(优化技能表字段,增加技能及buff常用配置字段;优化被动触发及效果配置方式;技能冷却、buff持续时长计算支持;持续性buff效果结算支持;pve默认玩家先手;战锤消耗仅普攻怒技消耗;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py |  138 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 136 insertions(+), 2 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
index 24321a0..c1e7a9b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -17,9 +17,143 @@
 
 import GameWorld
 import PassiveTrigger
+import ChConfig
 
 GameWorld.ImportAll("Script\\Skill\\", "PassiveTrigger")
 
-
 def RefreshPassive(batObj):
-    return
\ No newline at end of file
+    ''' 刷新被动效果,一般可能存在于技能或buff中
+    '''
+    passiveEffMgr = batObj.GetPassiveEffManager()
+    skillEffInfo = passiveEffMgr.RefreshSkillPassiveEffect()
+    buffEffInfo = passiveEffMgr.RefreshBuffPassiveEffect()
+    skillEffInfo and GameWorld.DebugLog("    被动技能效果: %s" % skillEffInfo)
+    buffEffInfo and GameWorld.DebugLog("    被动Buff效果: %s" % buffEffInfo)
+    return
+
+def OnTriggerPassiveEffect(turnFight, batObj, triggerType, connSkill=None):
+    ''' 触发被动效果,可能触发技能、buff,需根据优先级触发
+    '''
+    passiveEffMgr = batObj.GetPassiveEffManager()
+    effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerType, connSkill=connSkill)
+    if not effInfoList:
+        return
+    # [["skill/buff", skillID/buffID, effIDList], ...]
+    GameWorld.DebugLog("触发被动: triggerType=%s,objID=%s,%s" % (triggerType, batObj.GetID(), effInfoList))
+    for effInfo in effInfoList:
+        sign = effInfo[0]
+        if sign == "skill":
+            skillID, effIDList = effInfo[1:]
+            __doTriggerPassiveEffectBySkill(turnFight, batObj, skillID, effIDList, connSkill)
+            
+        elif sign == "buff":
+            buffID, effIDList = effInfo[1:]
+            __doTriggerPassiveEffectByBuff(turnFight, batObj, buffID, effIDList, connSkill)
+            
+    return
+
+def __doTriggerPassiveEffectBySkill(turnFight, batObj, skillID, effIDList, connSkill=None):
+    return
+
+def __doTriggerPassiveEffectByBuff(turnFight, batObj, buffID, effIDList, connSkill=None):
+    buffMgr = batObj.GetBuffManager()
+    curBuff = buffMgr.GetBuff(buffID)
+    if not curBuff:
+        return
+    skillData = curBuff.GetSkillData()
+    
+    for effID in effIDList:
+        curEffect = skillData.GetEffectByID(effID)
+        if not curEffect:
+            continue
+        pyName = "PassiveEff_%s" % effID
+        callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoBuffEffectLogic"))
+        if not callFunc:
+            continue
+        callFunc(turnFight, batObj, curBuff, curEffect, connSkill)
+        
+    return
+
+def GetTriggerPassiveValue(batObj, triggerType, tagObj=None, useSkill=None):
+    ''' 获取触发被动的值,一般用于某种条件下才会产生的值,如xx情况下属性变化 或 xx情况下是否发生什么
+    @return: 触发的值,0-没有触发或本身触发的值为0;大于0-触发的具体值
+    '''
+    return 0
+#    attacker = FindRealAttacker(attacker)
+#    if not attacker:
+#        return 0
+#    
+#    stopPassiveSkill = False   # 被动技能不能再触发被动技能,但可以触发天赋技能
+#    if useSkill and SkillCommon.isPassiveSkill(useSkill) and isStopPassiveSkill:
+#        #GameWorld.DebugLog("被动技能不能再次触发被动技能")
+#        #return 0
+#        if not PassPassiveLimit(useSkill):
+#            stopPassiveSkill = True
+#
+#
+#    passiveEff = GetPassiveEffManager().GetPassiveEff(attacker)
+#    if not passiveEff:
+#        return 0
+#    buffDict = passiveEff.GetBuffsByTriggerType(triggerType)
+#    if not buffDict:
+#        return 0
+#    
+#    # 当前战斗关系 pvp pve
+#    battleRelationType = AttackCommon.GetBattleRelationType(attacker, defender)
+#    if not AttackCommon.CheckBattleRelationType(attacker, defender, useSkill, battleRelationType):
+#        return 0
+#    
+#    useSkillID = useSkill.GetSkillID() if useSkill else 0
+#    #tick = GameWorld.GetGameWorld().GetTick()
+#    curValue = 0
+#    
+#    for skillID, effectList in buffDict.items():
+#        if skillID == useSkillID:
+#            continue
+#        curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
+#        if not curSkill:
+#            continue
+#        
+#        if not IsValidPassiveSkill(curSkill):
+#            continue
+#        
+#        triggerCount = 0 # 成功触发次数
+#        for effectInfo in effectList:
+#            if stopPassiveSkill and curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_GiftSkill:
+#                # 只有天赋才可以再次被触发
+#                continue 
+#            passiveEffect = effectInfo[0]
+#            # 被动触发的技能
+#            pyName = "PassiveBuff_%s"%passiveEffect.GetEffectID()
+#            
+#            callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "CheckCanHappen"))
+#            if not callFunc:
+#                continue
+#            
+#            # 条件不满足
+#            if not callFunc(attacker, defender, passiveEffect, skillID, useSkill=useSkill, ownerID=effectInfo[1], ownerType=effectInfo[2]):
+#                continue
+#            
+#            callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "GetValue"))
+#            if callFunc is None:
+#                continue
+#            
+#            # 如被动技能:千幻冥炎真实伤害从2变4倍
+#            #curValue += GetPassiveSkillValueByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_PassiveBuffValue)
+#            value = callFunc(attacker, defender, passiveEffect)
+#            if triggerType in TriggerValueMaxList:
+#                curValue = max(curValue, value) # 取最大值
+#            elif triggerType in TriggerValueMinList:
+#                if not curValue:
+#                    curValue = value
+#                elif value > 0:
+#                    curValue = min(curValue, value) # 取最小值
+#            else:
+#                curValue += value
+#                
+#            triggerCount += 1
+#            
+#        if triggerCount:
+#            OnTriggerBuffDel(attacker, curSkill, triggerCount)
+#            
+#    return curValue

--
Gitblit v1.8.0