hxp
2026-01-08 de44f98f2a8a2b0c12d3482162f1e30e796d7b94
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -2126,7 +2126,6 @@
        aSuperDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_SuperDamPer, curSkill)
        
        dSuperDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_SuperDamPerDef)
        GameWorld.DebugLogEx("aSuperDamPer=%s,dSuperDamPerDef=%s", aSuperDamPer, dSuperDamPerDef)
        
    if isParry:
        hurtTypes |= pow(2, ChConfig.HurtAtkType_Parry)
@@ -2154,6 +2153,32 @@
    aFinalDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddFinalDamPer, curSkill)
    aFinalDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_FinalDamPer, curSkill)
    
    #招架  - 无视攻击方最终增伤百分比
    dZhaojia = defObj.GetBatAttrValue(ChConfig.AttrID_Zhaojia)
    aZhaojiaDef = atkObj.GetBatAttrValue(ChConfig.AttrID_ZhaojiaDef)
    if dZhaojia > aZhaojiaDef:
        perMoreValue, perReduce = IpyGameDataPY.GetFuncEvalCfg("ZhaojiaCfg", 1) # 每高与对方抗贯穿x值无视y%最终减伤
        reducePer = (dZhaojia - aZhaojiaDef) / float(perMoreValue) * perReduce
        reduceMin, reduceMax = IpyGameDataPY.GetFuncEvalCfg("ZhaojiaCfg", 2) # 最小无视百分比|最大无视百分比
        if reducePer >= reduceMin and GameWorld.CanHappen(IpyGameDataPY.GetFuncCfg("ZhaojiaCfg", 3)):
            reducePer = min(reducePer, reduceMax)
            hurtTypes |= pow(2, ChConfig.HurtAtkType_Zhaojia)
            aFinalDamPer = int(aFinalDamPer * (100 - reducePer) / 100.0) # 按百分比减少
            GameWorld.DebugLogEx("dZhaojia=%s,aZhaojiaDef=%s,reducePer=%s,aFinalDamPer=%s", dZhaojia, aZhaojiaDef, reducePer, aFinalDamPer)
    #贯穿  - 无视防守方最终减伤百分比
    aGuanchuan = atkObj.GetBatAttrValue(ChConfig.AttrID_Guanchuan)
    dGuanchuanDef = defObj.GetBatAttrValue(ChConfig.AttrID_GuanchuanDef)
    if aGuanchuan > dGuanchuanDef:
        perMoreValue, perReduce = IpyGameDataPY.GetFuncEvalCfg("GuanchuanCfg", 1) # 每高与对方抗贯穿x值无视y%最终减伤
        reducePer = (aGuanchuan - dGuanchuanDef) / float(perMoreValue) * perReduce
        reduceMin, reduceMax = IpyGameDataPY.GetFuncEvalCfg("GuanchuanCfg", 2) # 最小无视百分比|最大无视百分比
        if reducePer >= reduceMin and GameWorld.CanHappen(IpyGameDataPY.GetFuncCfg("GuanchuanCfg", 3)):
            reducePer = min(reducePer, reduceMax)
            hurtTypes |= pow(2, ChConfig.HurtAtkType_Guanchuan)
            dFinalDamPerDef = int(dFinalDamPerDef * (100 - reducePer) / 100.0) # 按百分比减少
            GameWorld.DebugLogEx("aGuanchuan=%s,dGuanchuanDef=%s,reducePer=%s,dFinalDamPerDef=%s", aGuanchuan, dGuanchuanDef, reducePer, dFinalDamPerDef)
    aNormalSkillPer, dNormalSkillPerDef = 0, 0
    if isTurnNormalSkill:
        aNormalSkillPer = atkObj.GetBatAttrValue(ChConfig.AttrID_NormalSkillPer) # 普技增伤
@@ -2216,7 +2241,6 @@
    if turnFight.isPVP() > 0:
        aPVPDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_PVPDamPer)
        dPVPDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_PVPDamPerDef)
        GameWorld.DebugLogEx("PVP aPVPDamPer=%s,dPVPDamPerDef=%s", aPVPDamPer, dPVPDamPerDef)
        
    # 所有万分率参数统一除10000.0
    atkSkillPer /= 10000.0
@@ -2245,10 +2269,21 @@
    
    if calcType != ChConfig.Def_Calc_Attack:
        aAtk = GetCalcBaseValue(calcType, atkObj, defObj, curSkill)
    GameWorld.DebugLogEx("伤血计算: 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.DebugLogEx("aCountry=%s,dCountry=%s,aCountryDamPer=%s,dCountryDamPerDef=%s", aCountry, dCountry, aCountryDamPer, dCountryDamPerDef)
    GameWorld.DebugLogEx("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,calcType=%s,aAtk=%s,dDef=%s,dHP=%s/%s,hurtTypes=%s,aBatDamPer=%s,dBatDamPerDef=%s,aFinalDamPer=%s,dFinalDamPerDef=%s",
                         atkID, defID, skillID, atkSkillPer, calcType, aAtk, dDef, dHP, dMaxHP, hurtTypes, aBatDamPer, dBatDamPerDef, aFinalDamPer, dFinalDamPerDef)
    if isSuperHit:
        GameWorld.DebugLogEx("    暴击 aSuperDamPer=%s,dSuperDamPerDef=%s", aSuperDamPer, dSuperDamPerDef)
    if aPMDamPer or dPMDamPerDef:
        GameWorld.DebugLogEx("    物法 aPMDamPer=%s,dPMDamPerDef=%s,pmType=%s", aPMDamPer, dPMDamPerDef, pmType)
    if aComboDamPer or dComboDamPerDef:
        GameWorld.DebugLogEx("    连击 aComboDamPer=%s,dComboDamPerDef=%s", aComboDamPer, dComboDamPerDef)
    if aPursueDamPer or dPursueDamPerDef:
        GameWorld.DebugLogEx("    追击 aPursueDamPer=%s,dPursueDamPerDef=%s", aPursueDamPer, dPursueDamPerDef)
    if aPVPDamPer or dPVPDamPerDef:
        GameWorld.DebugLogEx("    PVP aPVPDamPer=%s,dPVPDamPerDef=%s", aPVPDamPer, dPVPDamPerDef)
    if aCountryDamPer or dCountryDamPerDef:
        GameWorld.DebugLogEx("    国家 aCountry=%s,dCountry=%s,aCountryDamPer=%s,dCountryDamPerDef=%s", aCountry, dCountry, aCountryDamPer, dCountryDamPerDef)
    if isTurnNormalSkill:
        hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 1))
        GameWorld.DebugLogEx("    普攻技能伤害=%s,aNormalSkillPer=%s,dNormalSkillPerDef=%s", hurtValue, aNormalSkillPer, dNormalSkillPerDef)
@@ -2257,7 +2292,7 @@
        GameWorld.DebugLogEx("    怒气技能伤害=%s,aAngerSkillPer=%s,dAngerSkillPerDef=%s", hurtValue, aAngerSkillPer, dAngerSkillPerDef)
    elif isDot:
        hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("DOTFormula", 1))
        GameWorld.DebugLogEx("    持续技能伤害=%s" % (hurtValue))
        GameWorld.DebugLogEx("    持续技能伤害=%s,aDOTPer=%s,dDOTPerDef=%s", hurtValue, aDOTPer, dDOTPerDef)
    elif calcType == ChConfig.Def_Calc_ByBuffValue:
        hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("CalcTypeFormula", 2))
        GameWorld.DebugLogEx("    按最后一次buff值计算伤害=%s,calcType=%s,LastHurt=%s", hurtValue, calcType, aAtk)
@@ -2805,7 +2840,7 @@
    for buff in buffMgr.FindBuffListByState(ChConfig.BatObjState_DamBackShield):
        damBackPer += buff.GetValue1()
        connSkillTypeID = buff.GetSkillTypeID()
        damBackPer += TurnPassive.GetTriggerEffectValue(turnFight, defObj, atkObj, ChConfig.PassiveEff_AddSkillPerByBuffLayer, connSkillTypeID=connSkillTypeID)
        damBackPer += TurnPassive.GetTriggerEffectValue(turnFight, defObj, atkObj, ChConfig.PassiveEff_AddDamBackPerByBuffLayer, connSkillTypeID=connSkillTypeID)
        
    if damBackPer <= 0:
        return