hxp
2026-01-19 382970c301ea90a70a0cb585e3648b6fa6e063d6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -38,6 +38,11 @@
    ght = useSkill.GetHurtType() % 10
    if ght == IPY_GameWorld.ghtMag: # 做配置兼容用,优先验证法伤,否则默认物伤
        return IPY_GameWorld.ghtMag
    if ght == 3: # 由触发的技能决定
        bySkill = useSkill.GetBySkill()
        if bySkill:
            #GameWorld.DebugLogEx("物法类型取触发的技能: useSkillID=%s,bySkillID=%s", useSkill.GetSkillID(), bySkill.GetSkillID())
            return GetPMType(batObj, bySkill)
    return IPY_GameWorld.ghtPhy
def IsIgnoreDef(useSkill):
@@ -158,6 +163,8 @@
    useSkill.SetBatType(batType)
    useSkill.SetBySkill(bySkill)
    useSkill.SetByBuff(byBuff)
    # 注:理论上原先的 byFriendObj 都可以直接用这个,但是旧的代码先不修改了,后续的累计敌军、友军之类的触发可以统一使用 byBatObj
    useSkill.SetByBatObj(kwargs.pop("byBatObj", None))
    useSkill.SetByTriggerWay(byTriggerWay)
    
    isTurnNormalSkill = SkillCommon.isTurnNormalSkill(useSkill)
@@ -1596,7 +1603,8 @@
    triggerOne = False
    batType = useSkill.GetBatType()
    isAttackDirect = (isUseSkill and SkillCommon.isAttackDirectSkill(useSkill)) # 是否直接攻击
    curBatLineup = None
    curBatLineup = curObj.GetBatLineup()
    curMGObj = curBatLineup.getMinggeObj()
    for tagObj in tagObjListAll:
        tagID = tagObj.GetID()
        
@@ -1676,6 +1684,9 @@
        # 追击
        elif batType == ChConfig.TurnBattleType_Pursue:
            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Pursue, tagObj, connSkill=useSkill)
            if isAttackDirect:
                if curMGObj:
                    TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_PursueAtk, tagObj, connSkill=useSkill, byBatObj=curObj)
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BePursue, curObj, connSkill=useSkill)
        # 反击
        elif batType == ChConfig.TurnBattleType_AtkBack:
@@ -1685,8 +1696,6 @@
            
        # 敌友方
        if isAttackDirect or batType in [ChConfig.TurnBattleType_Combo, ChConfig.TurnBattleType_Pursue] or isDotHurt:
            if not curBatLineup:
                curBatLineup = curObj.GetBatLineup()
            for lineupObjID in curBatLineup.posObjIDDict.values():
                lineupObj = batObjMgr.getBatObj(lineupObjID)
                if not lineupObj.IsAlive():
@@ -2065,8 +2074,15 @@
    '''按公式计算伤害,默认按攻击计算
    '''
    
    #mapID = turnFight.mapID
    skillID = curSkill.GetSkillID()
    # 命格攻击类技能,取触发者为施法方,因为部分战斗属性需要取施法方的,如最终增伤等
    if curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_MinggeSkill:
        byBatObj = curSkill.GetByBatObj()
        if byBatObj:
            GameWorld.DebugLogEx("命格攻击类技能计算伤害属性取触发者! mgObjID=%s,byObjID=%s,skillID=%s", atkObj.GetID(), byBatObj.GetID(), skillID)
            atkObj = byBatObj
    #mapID = turnFight.mapID
    pmType = GetPMType(atkObj, curSkill)
    ignoreDef = IsIgnoreDef(curSkill)
    batType = curSkill.GetBatType()
@@ -2091,10 +2107,7 @@
        mustHit = True
        
    angerOverflow = atkObj.GetAngerOverflow() # 怒气溢出值
    if isAngerSkill:
        curXP = atkObj.GetXP()
        GameWorld.DebugLogEx("怒技攻击! curXP=%s,angerOverflow=%s", curXP, angerOverflow)
    #命中公式 攻击方类型不同,公式不同
    if not mustHit and not curSkill.GetEffectByID(ChConfig.SkillEff_MustHit) and not defObj.IsInControlledHard():
        aMissRateDef = atkObj.GetBatAttrValue(ChConfig.AttrID_MissRateDef) #atkObj.GetHit() # 抗闪避率 - 命中
@@ -2289,7 +2302,7 @@
        GameWorld.DebugLogEx("    普攻技能伤害=%s,aNormalSkillPer=%s,dNormalSkillPerDef=%s", hurtValue, aNormalSkillPer, dNormalSkillPerDef)
    elif isAngerSkill:
        hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 2))
        GameWorld.DebugLogEx("    怒气技能伤害=%s,aAngerSkillPer=%s,dAngerSkillPerDef=%s", hurtValue, aAngerSkillPer, dAngerSkillPerDef)
        GameWorld.DebugLogEx("    怒气技能伤害=%s,aAngerSkillPer=%s,dAngerSkillPerDef=%s,angerOverflow=%s,curXP=%s", hurtValue, aAngerSkillPer, dAngerSkillPerDef, angerOverflow, atkObj.GetXP())
    elif isDot:
        hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("DOTFormula", 1))
        GameWorld.DebugLogEx("    持续技能伤害=%s,aDOTPer=%s,dDOTPerDef=%s", hurtValue, aDOTPer, dDOTPerDef)