129 【战斗】战斗系统-服务端(孙策全部技能; 增加技能类型11-额外攻击;增加效果5505 6026 6027; 优化5504效果支持配置多个状态;)
1 文件已重命名
4个文件已修改
3个文件已添加
155 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5500.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5504.py 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5505.py 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6026.py 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6027.py 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -1458,7 +1458,7 @@
   Def_SkillType_Revive       ,  #复活     8
   Def_SkillType_Increment    ,  #增值技能(不可清除)9  
   Def_SkillType_Halo         ,  #光环技能  10
   Def_SkillType_Equip        ,  #装备技能  11
   Def_SkillType_AtkEx        ,  #额外攻击  (一般用于额外造成的伤害,区分直接攻击)11
   Def_SkillType_Area         ,  #场景技能(buff)  12
   Def_SkillType_Summon       ,  #召唤  13
   Def_SkillType_Action       ,  #影响行为BUFF 14
@@ -1492,7 +1492,7 @@
                       #Def_SkillType_Revive     : IPY_GameWorld.bfIncBuff,  #复活     8
                       Def_SkillType_Increment  : IPY_GameWorld.bfIncBuff,  #增值技能(不可清除)9
                       Def_SkillType_Aura       : IPY_GameWorld.bfAura   ,  #光环技能  10
                       Def_SkillType_Equip      : IPY_GameWorld.bfEquipBuff,#装备技能  11
                       #Def_SkillType_Equip      : IPY_GameWorld.bfEquipBuff,#装备技能  11
                       Def_SkillType_Area       : IPY_GameWorld.bfMapBuff , #场景技能(buff)  12
                       Def_SkillType_Action     : IPY_GameWorld.bfActionBuff , #影响行为BUFF 14
                       
@@ -4008,7 +4008,8 @@
TriggerWay_WhenDie, # 死亡时(自己) 43
TriggerWay_EnemyAction, # 敌方行动后 44
TriggerWay_FriendAction, # 友方行动后(包含自己) 45
) = range(1, 1 + 45)
TriggerWay_HurtTag, # 对目标造成伤害时 46
) = range(1, 1 + 46)
# 不加载的被动触发方式,一般用于本技能固定触发逻辑用的
TriggerWayNoLoadList = [TriggerWay_CurSkillEff, TriggerWay_CurSkillEffLst]
@@ -4047,6 +4048,8 @@
PassiveEff_ChangeHurtTypeByBuff = 6023 # 变更本次伤害类型(可验证由xx状态buff触发的)
PassiveEff_ReduceLayer5023 = 6024 # 减少5023效果所需的buff状态层数
PassiveEff_AddCureMulti = 6025 # 提升治疗技能最终治疗效果(根据身上buff状态层数)
PassiveEff_AddCheckPer5505 = 6026 # 增减5505效果验证生命百分比(根据目标身上buff状态层数)
PassiveEff_AddHurtAtkPerMax = 6027 # 增加技能最大攻击万分比限制
# 被动效果ID有触发值时就返回的
PassiveEffHappenValueList = [PassiveEff_ChangeHurtType, PassiveEff_ImmuneControlBuff, PassiveEff_MustSuperHit, PassiveEff_SkillInvalid, 
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5500.py
File was renamed from ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5050.py
@@ -2,7 +2,7 @@
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.PassiveTrigger.PassiveEff_5050
##@package Skill.PassiveTrigger.PassiveEff_5500
#
# @todo:触发释放技能(按累计能量达到时释放)
# @author hxp
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5504.py
@@ -17,17 +17,22 @@
import TurnSkill
import IpyGameDataPY
import GameWorld
def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
    skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
    checkState = curEffect.GetEffectValue(1) # 可附加验证目标处于xx状态
    checkStateList = curEffect.GetEffectValue(1) # 可附加验证目标处于xx状态
    checkOwner = curEffect.GetEffectValue(2) # 是否只限归属自己的状态buff
    
    if checkState:
    if checkStateList:
        ownerID = batObj.GetID() if checkOwner else 0
        if not tagObj.GetBuffManager().FindBuffByState(checkState, ownerID):
            GameWorld.DebugLogEx("目标不在状态下不触发: tagID=%s,checkState=%s,ownerID=%s", tagObj.GetID(), checkState, ownerID)
        inState = False
        tagBuffMgr = tagObj.GetBuffManager()
        for checkState in checkStateList:
            if tagBuffMgr.FindBuffByState(checkState, ownerID):
                inState = True
                break
        if not inState:
            #GameWorld.DebugLogEx("目标不在状态下不触发: tagID=%s,checkStateList=%s,ownerID=%s", tagObj.GetID(), checkStateList, ownerID)
            return
        
    if not skillID:
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5505.py
New file
@@ -0,0 +1,60 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.PassiveTrigger.PassiveEff_5505
#
# @todo:触发释放技能(验证目标生命)
# @author hxp
# @date 2025-12-16
# @version 1.0
#
# 详细描述: 触发释放技能(验证目标生命)
#
#-------------------------------------------------------------------------------
#"""Version = 2025-12-16 19:30"""
#-------------------------------------------------------------------------------
import TurnSkill
import TurnPassive
import IpyGameDataPY
import GameWorld
import ChConfig
def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
    skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
    checkTagHPInfo = curEffect.GetEffectValue(1) # 可附加验证目标生命值[计算方式, 百分比]
    if checkTagHPInfo:
        checkType, checkHPPer = checkTagHPInfo
        tagHP = tagObj.GetHP()
        tagHPMax = tagObj.GetMaxHP()
        nowPer = tagHP / float(tagHPMax) * 100
        effSkillTypeID = effSkill.GetSkillTypeID()
        checkHPPer += TurnPassive.GetTriggerEffectValue(turnFight, batObj, tagObj, ChConfig.PassiveEff_AddCheckPer5505, connSkillTypeID=effSkillTypeID, **kwargs)
        GameWorld.DebugLogEx("5505验证目标生命! tagHP=%s/%s,nowPer=%s,checkHPPer=%s,checkType=%s,effSkillTypeID=%s",
                             tagHP, tagHPMax, nowPer, checkHPPer, checkType, effSkillTypeID)
        # 小于等于
        if checkType == 0:
            if nowPer > checkHPPer:
                return
        # 大于等于
        else:
            if nowPer < checkHPPer:
                return
    if not skillID:
        passiveSkill = effSkill
    else:
        passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", skillID)
    if not passiveSkill:
        return
    effectID = curEffect.GetEffectID()
    effSkillID = effSkill.GetSkillID()
    return TurnSkill.OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill, effSkillID, effectID, connBuff, **kwargs)
def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill, connBuff, **kwargs):
    effSkill = effBuff.GetSkillData().GetIpyData()
    return DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6026.py
New file
@@ -0,0 +1,36 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.PassiveTrigger.PassiveEff_6026
#
# @todo:增减5505效果验证生命百分比(根据目标身上buff状态层数)
# @author hxp
# @date 2025-12-16
# @version 1.0
#
# 详细描述: 增减5505效果验证生命百分比(根据目标身上buff状态层数)
#
#-------------------------------------------------------------------------------
#"""Version = 2025-12-16 19:30"""
#-------------------------------------------------------------------------------
def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
    buffStateList = curEffect.GetEffectValue(0) # 目标buff [状态1, 状态2, ...]
    addPer = curEffect.GetEffectValue(1) # 每层变化百分比(不需要验证状态则为固定值)
    calcType = curEffect.GetEffectValue(2) # 变化是增还是减: 1-增;2-减
    if buffStateList:
        layerTotal = 0
        buffMgr = defender.GetBuffManager()
        for buffState in buffStateList:
            for buff in buffMgr.FindBuffListByState(buffState):
                layerTotal += buff.GetLayer()
        addTotal = layerTotal * addPer
    else:
        addTotal = addPer
    if calcType == 2:
        addTotal = -addTotal
    return addTotal
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6027.py
New file
@@ -0,0 +1,19 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.PassiveTrigger.PassiveEff_6027
#
# @todo:增加技能最大攻击万分比限制
# @author hxp
# @date 2025-12-16
# @version 1.0
#
# 详细描述: 增加技能最大攻击万分比限制
#
#-------------------------------------------------------------------------------
#"""Version = 2025-12-16 19:30"""
#-------------------------------------------------------------------------------
def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
    return curEffect.GetEffectValue(0)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -82,7 +82,7 @@
    if not effSkill:
        return
    
    kwargs["triggerWay"] = triggerWay
    kwargs["byTriggerWay"] = triggerWay
    for effID in effIDList:
        curEffect = effSkill.GetEffectByID(effID, triggerWay)
        if not curEffect:
@@ -111,7 +111,7 @@
        return
    skillData = effBuff.GetSkillData()
    
    kwargs["triggerWay"] = triggerWay
    kwargs["byTriggerWay"] = triggerWay
    for effID in effIDList:
        curEffect = skillData.GetEffectByID(effID, triggerWay)
        if not curEffect:
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -59,13 +59,13 @@
    if not skillID:
        return
    
    triggerWay = kwargs["triggerWay"] if "triggerWay" in kwargs else 0
    byTriggerWay = kwargs["byTriggerWay"] if "byTriggerWay" in kwargs else 0 # 不使用参数名 triggerWay, 防止传递过程中参数混乱
    if not curBatObj.IsAlive():
        if useSkill.GetSkillType() == ChConfig.Def_SkillType_Revive and useSkill.GetTagAim() == ChConfig.SkillTagAim_Self:
            GameWorld.DebugLogEx("死亡时使用复活自己的技能! skillID=%s", skillID)
        else:
            if triggerWay in ChConfig.DeadCanTriggerWayList:
                GameWorld.DebugLogEx("死亡可触发的方式触发技能可释放! skillID=%s,triggerWay=%s", skillID, triggerWay)
            if byTriggerWay in ChConfig.DeadCanTriggerWayList:
                GameWorld.DebugLogEx("死亡可触发的方式触发技能可释放! skillID=%s,byTriggerWay=%s", skillID, byTriggerWay)
            elif batType == ChConfig.TurnBattleType_Enhance:
                GameWorld.DebugLogEx("死亡状态额外技能不限制,主技能能放的话也就能放! skillID=%s", skillID)                
            else:
@@ -150,7 +150,7 @@
    useSkill.SetBatType(batType)
    useSkill.SetBySkill(bySkill)
    useSkill.SetByBuff(byBuff)
    useSkill.SetByTriggerWay(triggerWay)
    useSkill.SetByTriggerWay(byTriggerWay)
    
    isTurnNormalSkill = SkillCommon.isTurnNormalSkill(useSkill)
    if isTurnNormalSkill:
@@ -1463,6 +1463,7 @@
        # 掉血时
        if tagID in beHurtObjIDList:
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeHurt, curObj, connSkill=useSkill)
            #TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_HurtTag, tagObj, connSkill=useSkill) 暂时用不到先屏蔽
            
        #  受到任意效果时(除直接攻击外的任意效果,如buff、dot、治疗、额外怒技)
        if not isAttackDirect:
@@ -2045,6 +2046,7 @@
        
    hurtAtkPerMax = curSkill.GetHurtAtkPerMax() # 最大万分比,限制最终伤害不超过攻击力万分率
    if hurtAtkPerMax:
        hurtAtkPerMax += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddHurtAtkPerMax, curSkill)
        aAtk = atkObj.GetAtk()
        hurtValueMax = aAtk * hurtAtkPerMax / 10000.0
        hurtValue = min(hurtValue, hurtValueMax)