hxp
2025-12-21 f7a8b9973ec7ca6625b922520a3eef092b7a2d2e
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -59,9 +59,10 @@
    if not skillID:
        return
    
    skillType = useSkill.GetSkillType()
    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:
        if skillType == ChConfig.Def_SkillType_Revive and useSkill.GetTagAim() == ChConfig.SkillTagAim_Self:
            GameWorld.DebugLogEx("死亡时使用复活自己的技能! skillID=%s", skillID)
        else:
            if byTriggerWay in ChConfig.DeadCanTriggerWayList:
@@ -103,10 +104,16 @@
            if not tagObjList and isRemove:
                return
            
    if tagObjList and skillType == ChConfig.Def_SkillType_Revive:
        for tagObj in tagObjList[::-1]:
            if tagObj.CheckInState(ChConfig.BatObjState_RebornLimit):
                GameWorld.DebugLogEx("    目标被禁止复活不处理! tagID=%s", tagObj.GetID())
                tagObjList.remove(tagObj)
    if not tagObjList:
        # 可扩展其他目标选择,如复活技能没有死亡单位时则使用另外的效果
        GameWorld.DebugLogEx("找不到技能目标! skillID=%s,mapID=%s,funcLineID=%s", skillID, turnFight.mapID, turnFight.funcLineID, turnFight.getReqPlayerID())
        if useSkill.GetSkillType() == ChConfig.Def_SkillType_Revive:
        if skillType == ChConfig.Def_SkillType_Revive and not isinstance(useSkill, IpyGameDataPY.IPY_Skill):
            otherEff = useSkill.GetEffectByID(ChConfig.SkillEff_ReviveNoUse)
            if otherEff:
                otherSkillID = otherEff.GetEffectValue(0)
@@ -781,22 +788,24 @@
            addPer = addPerMax
        GameWorld.DebugLogEx("司马懿特殊潜能技能额外增加比例: frozenCnt=%s,addPer=%s" % (frozenCnt, addPer))
        
    addBatDamPer = TurnPassive.GetTriggerEffectValue(turnFight, curBatObj, None, ChConfig.PassiveEff_AddBatDamPerByLayer, useSkill)
    # 计算伤害
    calcHurtResults = []
    for tagBatObj in useSkill.GetTagObjList():
        hurtValue, hurtTypes, immuneHurt = __calcSkillHurt(turnFight, curBatObj, tagBatObj, useSkill, addPer)
        hurtValue, hurtTypes, immuneHurt = __calcSkillHurt(turnFight, curBatObj, tagBatObj, useSkill, addPer, addBatDamPer)
        calcHurtResults.append([tagBatObj, hurtValue, hurtTypes, immuneHurt])
        
    DoSkillHurtHP(turnFight, curBatObj, useSkill, calcHurtResults)        
    return
def __calcSkillHurt(turnFight, atkObj, defObj, curSkill, addPer=0):
def __calcSkillHurt(turnFight, atkObj, defObj, curSkill, addPer=0, addBatDamPer=0):
    ## 计算技能伤害,只计算值,不做实际处理
    # @param addPer: 外部指定增加的比例
    # @return: hurtValue, hurtTypes, immuneHurt
    atkSkillPer = curSkill.GetSkillPer() + addPer
    atkSkillValue = curSkill.GetSkillValue()
    hurtValue, hurtTypes = CalcFormatHurt(turnFight, atkObj, defObj, curSkill, atkSkillValue, atkSkillPer)
    hurtValue, hurtTypes = CalcFormatHurt(turnFight, atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, addBatDamPer)
    hurtValue, hurtTypes, immuneHurt = CalcHurtWithBuff(turnFight, atkObj, defObj, hurtValue, hurtTypes)
    return hurtValue, hurtTypes, immuneHurt
@@ -1163,7 +1172,7 @@
    if IsNeedSyncSkill(useSkill):
        Sync_UseSkill(turnFight, curBatObj, useSkill)
        
    __doSkillUserAnger(turnFight, curBatObj, useSkill)
    __doSkillUserAnger(turnFight, curBatObj, useSkill, **kwargs)
    
    DoBeAttackResult(turnFight, curBatObj, useSkill)
    return
@@ -1502,7 +1511,8 @@
        elif not isAttackDirect:
            # 受到持续伤害
            if tagID in beHurtObjIDList:
                TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeDOTHurt, curObj, connSkill=useSkill)
                TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_DOTHurt, tagObj, connSkill=useSkill, connBuff=timeBuff)
                TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeDOTHurt, curObj, connSkill=useSkill, connBuff=timeBuff)
                
        # 使用技能后
        if isUseSkill:
@@ -1635,10 +1645,14 @@
        
    return
def __doSkillUserAnger(turnFight, curBatObj, useSkill):
def __doSkillUserAnger(turnFight, curBatObj, useSkill, **kwargs):
    ## 技能释放者怒气相关
    if SkillCommon.isAngerSkill(useSkill):
        curBatObj.SetXP(0)
        if "noUseXP" in kwargs:
            kwargs.pop("noUseXP")
            GameWorld.DebugLogEx("本次不消耗怒气")
        else:
            curBatObj.SetXP(0)
    elif SkillCommon.isTurnNormalSkill(useSkill) and useSkill.GetBatType() == ChConfig.TurnBattleType_Normal:
        addXP = IpyGameDataPY.GetFuncCfg("AngerXP", 3)
        AddFightXP(curBatObj, addXP, "skillID:%s" % useSkill.GetSkillID())
@@ -1763,8 +1777,11 @@
        for tagObj in tagObjList:
            tagID = tagObj.GetID()
            if not tagObj.IsAlive():
                GameWorld.DebugLogEx("    已被击杀不触发: tagID=%s", tagID)
                continue
                if enhanceSkillData.GetCurBuffState() == ChConfig.BatObjState_RebornLimit:
                    GameWorld.DebugLogEx("    禁止复活buff允许对死亡对象释放: tagID=%s", tagID)
                else:
                    GameWorld.DebugLogEx("    已被击杀不触发: tagID=%s", tagID)
                    continue
            if tagID in effIgnoreObjIDList:
                GameWorld.DebugLogEx("    闪避或免疫的不触发: tagID=%s", tagID)
                continue
@@ -1885,7 +1902,7 @@
        
    return isOK
def CalcFormatHurt(turnFight, atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, **kwargs):
def CalcFormatHurt(turnFight, atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, addBatDamPer=0, **kwargs):
    '''按公式计算伤害,默认按攻击计算
    '''
    
@@ -1995,12 +2012,17 @@
        aDOTPer = atkObj.GetBatAttrValue(ChConfig.AttrID_DOTPer)
        dDOTPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_DOTPerDef)
        GameWorld.DebugLogEx("aDOTPer=%s,dDOTPerDef=%s", aDOTPer, dDOTPerDef)
        if curSkill.GetCurBuffState() in ChConfig.BurnStateList:
            aDOTPer += atkObj.GetBatAttrValue(ChConfig.AttrID_DOTBurnPer)
            dDOTPerDef += defObj.GetBatAttrValue(ChConfig.AttrID_DOTBurnPerDef)
            GameWorld.DebugLogEx("是灼烧: aDOTPer=%s,dDOTPerDef=%s", aDOTPer, dDOTPerDef)
    #aAddSkillPer = 0 # 技能增伤
    aBatDamPer, dBatDamPerDef = 0, 0 # 战斗增减伤
    dBatDamPerDef = 0 # 战斗增减伤
    aBatDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_BatDamPer)
    aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_BatDamPer, curSkill)
    aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddBatDamPerByTagLostHP, curSkill)
    aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddBatDamPerByLayer, curSkill)
    aBatDamPer += addBatDamPer
    
    # 物法增减伤
    if pmType == IPY_GameWorld.ghtMag: # 法伤