129 【战斗】战斗系统-服务端(赵云所有技能;增加效果5023 6019 6020;5011效果增加可验证战斗类型;5022效果支持多属性;战斗增减伤改名;增加触发方式28~39)
6个文件已修改
3个文件已添加
250 ■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5011.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5022.py 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6019.py 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6020.py 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py 90 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -383,6 +383,7 @@
    
    def GetSkillData(self): return self._skillData
    def GetSkillID(self): return self._skillData.GetSkillID()
    def GetCurBuffState(self): return self._skillData.GetCurBuffState()
    def GetAddTiming(self): return self._addTiming
    def SetAddTiming(self, addTiming):
        self._addTiming = addTiming
@@ -416,6 +417,7 @@
    def GetEffectValueEx(self, effID): return self._effExDict.get(effID, 0)
    def ResetEffectValueEx(self): self._effExDict = {}
    def AddEffectValueEx(self, effID, valueEx): self._effExDict[effID] = self._effExDict.get(effID, 0) + valueEx
    def GetEffectExDict(self): return self._effExDict
    def GetHaloObjIDList(self): return self._haloObjIDList
    def SetHaloObjIDList(self, haloObjIDList): self._haloObjIDList = haloObjIDList
    def AddHaloObjID(self, objID):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -160,8 +160,8 @@
AttrID_WuFinalDamPerDef,                    # 对吴减伤 62
AttrID_QunFinalDamPer,                      # 对群增伤 63
AttrID_QunFinalDamPerDef,                   # 对群减伤 64
AttrID_SkillPer,                            # 技能增伤 65
AttrID_SkillPerDef,                         # 技能减伤 66
AttrID_BatDamPer,                           # 战斗增伤 65
AttrID_BatDamPerDef,                        # 战斗减伤 66
AttrID_PursueDamPer,                        # 追击增伤 67
AttrID_PursueDamPerDef,                     # 追击减伤 68
AttrID_ComboDamPer,                         # 连击增伤 69
@@ -181,7 +181,7 @@
                        AttrID_ShieldPer, AttrID_ShieldPerDef, AttrID_DOTPer, AttrID_DOTPerDef,
                        AttrID_WeiFinalDamPer, AttrID_WeiFinalDamPerDef, AttrID_ShuFinalDamPer, AttrID_ShuFinalDamPerDef,
                        AttrID_WuFinalDamPer, AttrID_WuFinalDamPerDef, AttrID_QunFinalDamPer, AttrID_QunFinalDamPerDef,
                        AttrID_SkillPer, AttrID_SkillPerDef, AttrID_PursueDamPer, AttrID_PursueDamPerDef,
                        AttrID_BatDamPer, AttrID_BatDamPerDef, AttrID_PursueDamPer, AttrID_PursueDamPerDef,
                        AttrID_ComboDamPer, AttrID_ComboDamPerDef, AttrID_XPRecoverPer, AttrID_PVPDamPer, AttrID_PVPDamPerDef
                        ]
@@ -3973,7 +3973,19 @@
TriggerWay_BeDOTHurt, # 受到持续伤害 25
TriggerWay_EnemyDie, # 敌方单位死亡时 26
TriggerWay_FriendDie, # 己方单位死亡时 27
) = range(1, 1 + 27)
TriggerWay_Combo, # 连击时 28
TriggerWay_Pursue, # 追击时 29
TriggerWay_Stun, # 击晕时 30
TriggerWay_SuperHit, # 暴击时 31
TriggerWay_Parry, # 格挡时 32
TriggerWay_Miss, # 闪避时 33
TriggerWay_AtkBack, # 反击时 34
TriggerWay_BeStun, # 被击晕时 35
TriggerWay_BeSuperHit, # 被暴击时 36
TriggerWay_BeParry, # 被格挡时 37
TriggerWay_BeMiss, # 被闪避时 38
TriggerWay_BeAtkBack, # 被反击时 39
) = range(1, 1 + 39)
# 不加载的被动触发方式,一般用于本技能固定触发逻辑用的
TriggerWayNoLoadList = [TriggerWay_CurSkillEff, TriggerWay_CurSkillEffLst]
@@ -4003,6 +4015,8 @@
PassiveEff_AddShieldHurtPer = 6016 # 对护盾造成伤害加成
PassiveEff_SkillInvalid = 6017 # 使技能无效
PassiveEff_AddAngerSkillPerByXP = 6018 # 增加怒气技能伤害(按消耗怒气值)
PassiveEff_AddBatDamPerByTagLostHP = 6019 # 战斗增伤(按目标已损失生命)
PassiveEff_AddSkillPerByBuffState = 6020 # 增加技能系数(验证由buff状态触发的)
# 被动效果ID有触发值时就返回的
PassiveEffHappenValueList = [PassiveEff_ChangeHurtType, PassiveEff_ImmuneControlBuff, PassiveEff_MustSuperHit, PassiveEff_SkillInvalid]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5011.py
@@ -17,10 +17,12 @@
import TurnSkill
import IpyGameDataPY
import GameWorld
def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
    skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
    checkHPInfo = curEffect.GetEffectValue(1) # 可附加验证生命值[计算方式, 百分比]
    checkBatType = curEffect.GetEffectValue(2) # 验证攻击类型 0-不验证;1-连击;2-追击;3-反击
    if checkHPInfo:
        checkType, checkHPPer = checkHPInfo
        nowPer = batObj.GetHP() / float(batObj.GetMaxHP()) * 100
@@ -33,6 +35,13 @@
            if nowPer < checkHPPer:
                return
            
    if checkBatType:
        if not connSkill:
            return
        if connSkill.GetBatType() != checkBatType:
            GameWorld.DebugLog("5011效果非该战斗类型不触发: checkBatType=%s,skillBatType=%s" % (checkBatType, connSkill.GetBatType()))
            return
    if not skillID:
        passiveSkill = effSkill
    else:
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5022.py
@@ -18,8 +18,10 @@
import GameWorld
def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
    attrID = curEffect.GetEffectValue(0)
    attrValue = curEffect.GetEffectValue(1)
    GameWorld.DebugLog("额外增加buff效果ID/属性ID值: attrID=%s,attrValue=%s" % (attrID, attrValue))
    connBuff.AddEffectValueEx(attrID, attrValue)
    effValues = curEffect.GetEffectValues()
    for index in range(0, len(effValues), 2):
        attrID = effValues[index]
        attrValue = effValues[index + 1] if len(effValues) > index + 1 else 0
        GameWorld.DebugLog("额外增加buff效果ID/属性ID值: attrID=%s,attrValue=%s" % (attrID, attrValue))
        connBuff.AddEffectValueEx(attrID, attrValue)
    return True
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py
New file
@@ -0,0 +1,45 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.PassiveTrigger.PassiveEff_5023
#
# @todo:消耗某个buff状态层级
# @author hxp
# @date 2025-11-20
# @version 1.0
#
# 详细描述: 消耗某个buff状态层级
#
#-------------------------------------------------------------------------------
#"""Version = 2025-11-20 19:00"""
#-------------------------------------------------------------------------------
import TurnBuff
import GameWorld
import TurnSkill
def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
    buffState = curEffect.GetEffectValue(0)
    needLayers = curEffect.GetEffectValue(1) # 达到多少层时才消耗
    delLayers = curEffect.GetEffectValue(2) # 扣除层数
    exSkillID = curEffect.GetEffectValue(3) # 释放技能ID
    if not buffState or not needLayers:
        return
    curBuff = batObj.GetBuffManager().FindBuffByState(buffState)
    if not curBuff:
        return
    buffLayers = curBuff.GetLayer()
    if buffLayers < needLayers:
        GameWorld.DebugLog("buff状态层数不足不触发! buffState=%s,buffLayers=%s < %s" % (buffState, buffLayers, needLayers))
        return
    updLayer = buffLayers - delLayers
    GameWorld.DebugLog("扣除buff层释放技能: buffState=%s,buffLayers=%s,delLayers=%s" % (buffState, buffLayers, delLayers))
    if delLayers:
        TurnBuff.DoBuffLayerChange(turnFight, batObj, curBuff, updLayer, connSkill)
    if exSkillID:
        TurnSkill.OnUsePassiveSkill(turnFight, batObj, tagObj, exSkillID, connBuff=connBuff)
    return True
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6019.py
New file
@@ -0,0 +1,29 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.PassiveTrigger.PassiveEff_6019
#
# @todo:战斗增伤(按目标已损失生命)
# @author hxp
# @date 2025-11-20
# @version 1.0
#
# 详细描述: 战斗增伤(按目标已损失生命)
#
#-------------------------------------------------------------------------------
#"""Version = 2025-11-20 19:00"""
#-------------------------------------------------------------------------------
import GameWorld
def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
    perLostPer = curEffect.GetEffectValue(0) #每损失百分比
    perAddPer = curEffect.GetEffectValue(1) #增伤万分比
    curHP = defender.GetHP()
    maxHP = defender.GetMaxHP()
    lostHP = max(0, maxHP - curHP)
    lostPer = lostHP / float(maxHP) * 100
    addDamPer = lostPer / perLostPer * perAddPer
    GameWorld.DebugLog("按目标已损失生命: defID=%s,lostHP=%s,lostPer=%s,addDamPer=%s,HP:%s/%s" % (defender.GetID(), lostHP, lostPer, addDamPer, curHP, maxHP))
    return addDamPer
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6020.py
New file
@@ -0,0 +1,32 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.PassiveTrigger.PassiveEff_6020
#
# @todo:增加技能系数(验证由buff状态触发的)
# @author hxp
# @date 2025-11-20
# @version 1.0
#
# 详细描述: 增加技能系数(验证由buff状态触发的)
#
#-------------------------------------------------------------------------------
#"""Version = 2025-11-20 19:00"""
#-------------------------------------------------------------------------------
import GameWorld
def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
    addPer = curEffect.GetEffectValue(0) # 增加的万分比
    byBuffState = curEffect.GetEffectValue(1) # 验证由什么buff状态触发的
    if byBuffState and connSkill:
        byBuff = connSkill.GetByBuff()
        if not byBuff:
            #GameWorld.DebugLog("非由buff触发的")
            return
        if byBuff.GetCurBuffState() != byBuffState:
            GameWorld.DebugLog("非由该buff状态触发的! buffState=%s != %s" % (byBuff.GetCurBuffState(), byBuffState))
            return
    GameWorld.DebugLog("增加技能系数(验证由buff状态触发的): addPer=%s,byBuffState=%s" % (addPer, byBuffState))
    return addPer
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -475,6 +475,15 @@
        layer = max(1, buff.GetLayer())
        skillData = buff.GetSkillData()
        
        effExDict = buff.GetEffectExDict()
        for effID, effValueEx in effExDict.items():
            if effID not in ChConfig.AttrIDList:
                continue
            attrID = effID
            attrValue = effValueEx * layer
            buffsAttrDict[attrID] = buffsAttrDict.get(attrID, 0) + attrValue
            skbufAttrDict[attrID] = skbufAttrDict.get(attrID, 0) + attrValue
        for eIndex in range(skillData.GetEffectCount()):
            effect = skillData.GetEffect(eIndex)
            effID = effect.GetEffectID()
@@ -484,7 +493,7 @@
                # buff时,不配默认有效,或仅buff有效
                continue
            attrID = effID
            attrValue = (effect.GetEffectValue(0) + buff.GetEffectValueEx(attrID)) * layer
            attrValue = effect.GetEffectValue(0) * layer
            calcType = effect.GetEffectValue(1)
            if calcType == 2: # 减少,其他默认增加
                attrValue = -attrValue
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -1207,8 +1207,9 @@
        
    # 统计伤血,可能单个技能对同一目标造成多次伤害
    totalHurtValue = 0
    isSuperHit, isStun, isSuckHP = False, False, False
    isSuckHP = False
    missObjIDList, immuneObjIDList = [], [] # 闪避、免疫对象ID列表
    stunObjIDList, superHitObjIDList, parryObjIDList = [], [], []
    beHurtObjIDList = [] # 受伤的对象ID列表
    for hurtObj in useSkill.GetHurtObjListAll():
        hurtObjID = hurtObj.GetObjID()
@@ -1236,13 +1237,17 @@
                
        if hurtObj.HaveHurtType(ChConfig.HurtType_Parry):
            DoHeroSpecialty(turnFight, tagObj, ChConfig.HeroSpecialty_Parry, relatedSkillID)
            if hurtObjID not in parryObjIDList:
                parryObjIDList.append(hurtObjID)
        if hurtObj.HaveHurtType(ChConfig.HurtType_SuperHit):
            isSuperHit = True
            if hurtObjID not in superHitObjIDList:
                superHitObjIDList.append(hurtObjID)
        if hurtObj.HaveHurtType(ChConfig.HurtType_Stun):
            isStun = True
            if hurtObjID not in stunObjIDList:
                stunObjIDList.append(hurtObjID)
        if hurtObj.GetSuckHP() > 0:
            isSuckHP = True
            
@@ -1251,9 +1256,9 @@
        curObj.SetLastHurtValue(totalHurtValue)
        
    # 群攻只触发一次特长
    if isSuperHit:
    if superHitObjIDList:
        DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuperHit, relatedSkillID)
    if isStun:
    if stunObjIDList:
        DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_Stun, relatedSkillID)
    if isSuckHP:
        DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuckHP, relatedSkillID)
@@ -1314,31 +1319,64 @@
        if tagID in beHurtObjIDList:
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeHurt, curObj, connSkill=useSkill)
            
        #  受到任意效果时(除直接攻击外的任意效果,如buff、dot、治疗、额外怒技)
        if not isAttackDirect:
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAnyEffect, curObj, connSkill=useSkill)
        # 额外目标不再触发以下内容
        if isExObj:
            continue
        # 直接攻击
        if isAttackDirect and not isExObj:
        if isAttackDirect:
            if not triggerOne:
                TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirectOne, tagObj, connSkill=useSkill)
            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirect, tagObj, connSkill=useSkill)
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAttackedDirect, curObj, connSkill=useSkill)
        # 持续伤害
        elif not isAttackDirect:
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAnyEffect, curObj, connSkill=useSkill)
            # 受到持续伤害
            if tagID in beHurtObjIDList and not isExObj:
            if tagID in beHurtObjIDList:
                TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeDOTHurt, curObj, connSkill=useSkill)
                
        # 使用技能后
        if isUseSkill and not isExObj:
        if isUseSkill:
            if not triggerOne:
                TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_UseSkillOverOne, tagObj, connSkill=useSkill)
            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_UseSkillOver, tagObj, connSkill=useSkill)
            
        # 击晕
        if tagID in stunObjIDList:
            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Stun, tagObj, connSkill=useSkill)
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeStun, curObj, connSkill=useSkill)
        # 暴击
        if tagID in superHitObjIDList:
            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_SuperHit, tagObj, connSkill=useSkill)
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeSuperHit, curObj, connSkill=useSkill)
        # 格挡
        if tagID in missObjIDList:
            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeParry, tagObj, connSkill=useSkill)
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Parry, curObj, connSkill=useSkill)
        # 闪避
        if tagID in missObjIDList:
            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeMiss, tagObj, connSkill=useSkill)
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Miss, curObj, connSkill=useSkill)
        # 连击
        if batType == ChConfig.TurnBattleType_Combo and not isExObj:
        if batType == ChConfig.TurnBattleType_Combo:
            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Combo, tagObj, connSkill=useSkill)
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeCombo, curObj, connSkill=useSkill)
        # 追击
        elif batType == ChConfig.TurnBattleType_Pursue and not isExObj:
        elif batType == ChConfig.TurnBattleType_Pursue:
            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Pursue, tagObj, connSkill=useSkill)
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BePursue, curObj, connSkill=useSkill)
        # 反击
        elif batType == ChConfig.TurnBattleType_AtkBack:
            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AtkBack, tagObj, connSkill=useSkill)
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAtkBack, curObj, connSkill=useSkill)
            
        triggerOne = True # 设置已经触发过一次
        
@@ -1557,7 +1595,7 @@
def OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill=None, effSkillID=0, effectID=0, connBuff=None):
    '''被动触发使用技能
    @param passiveSkill: 释放的被动技能
    @param passiveSkill: 释放的被动技能 或 技能ID
    @param connSkill: 由什么技能引起的
    @param effSkillID: 被动效果所属的技能ID
    @param effectID: 被动效果ID
@@ -1565,6 +1603,14 @@
    '''
    if not passiveSkill:
        return
    if isinstance(passiveSkill, int):
        passiveSkillID = passiveSkill
        passiveSkill = batObj.GetSkillManager().FindSkillByID(passiveSkillID)
        if not passiveSkill:
            passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", passiveSkillID)
        if not passiveSkill:
            return
    bySkillID = 0
    if connSkill:
        bySkillID = connSkill.GetSkillID()
@@ -1710,8 +1756,10 @@
        dDOTPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_DOTPerDef)
        GameWorld.DebugLog("aDOTPer=%s,dDOTPerDef=%s" % (aDOTPer, dDOTPerDef))
        
    aAddSkillPer = 0 # 技能增伤
    aAddSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_SkillPer, curSkill)
    #aAddSkillPer = 0 # 技能增伤
    aBatDamPer, dBatDamPerDef = 0, 0 # 战斗增减伤
    aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_BatDamPer, curSkill)
    aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddBatDamPerByTagLostHP, curSkill)
    
    # 物法增减伤
    if pmType == IPY_GameWorld.ghtMag: # 法伤
@@ -1756,7 +1804,8 @@
    dAngerSkillPerDef /= 10000.0
    aDOTPer /= 10000.0
    dDOTPerDef /= 10000.0
    aAddSkillPer /= 10000.0
    aBatDamPer /= 10000.0
    dBatDamPerDef /= 10000.0
    aPMDamPer /= 10000.0
    dPMDamPerDef /= 10000.0
    aSuperDamPer /= 10000.0
@@ -1774,8 +1823,8 @@
    
    if calcType != ChConfig.Def_Calc_Attack:
        aAtk = GetCalcBaseValue(calcType, atkObj, defObj, curSkill)
    GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,calcType=%s,aAtk=%s,dDef=%s,dHP=%s/%s,hurtTypes=%s,aAddSkillPer=%s,aFinalDamPer=%s"
                       % (atkID, defID, skillID, atkSkillPer, calcType, aAtk, dDef, dHP, dMaxHP, hurtTypes, aAddSkillPer, aFinalDamPer))
    GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,calcType=%s,aAtk=%s,dDef=%s,dHP=%s/%s,hurtTypes=%s,aBatDamPer=%s,aFinalDamPer=%s"
                       % (atkID, defID, skillID, atkSkillPer, calcType, aAtk, dDef, dHP, dMaxHP, hurtTypes, aBatDamPer, aFinalDamPer))
    GameWorld.DebugLog("aCountry=%s,dCountry=%s,aCountryDamPer=%s,dCountryDamPerDef=%s" % (aCountry, dCountry, aCountryDamPer, dCountryDamPerDef))
    
    if isTurnNormalSkill:
@@ -1832,6 +1881,7 @@
    atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByJob, curSkill)
    atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByBuffLayer, curSkill)
    atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByDeadTeammate, curSkill)
    atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByBuffState, curSkill)
    return atkSkillPer
def CanSuperHit(turnFight, atkObj, defObj, curSkill):