ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -562,7 +562,7 @@
    DoBeAttackResult(turnFight, curBatObj, useSkill, True)
    return
def DoCombo(turnFight, curBatObj, useSkill):
def DoCombo(turnFight, atkObj, useSkill):
    '''
        格挡、反击、连击规则
        1. 所有武将或怪物均可能产生格挡,群攻时格挡一对一判断,均可能产生格挡
@@ -586,7 +586,7 @@
    
    tagFriendly = useSkill.GetTagFriendly()
    if tagFriendly:
        tagObj = GetRelativeObj(turnFight, curBatObj)
        tagObj = GetRelativeObj(turnFight, atkObj)
    else:
        tagObjList = useSkill.GetTagObjList()
        if not tagObjList:
@@ -596,18 +596,31 @@
        if atkBackSkill:
            # 可以反击,打断连击
            GameWorld.DebugLog("● %s 【反击】" % TurnAttack.GetObjName(tagObj))
            OnUseSkill(turnFight, tagObj, atkBackSkill, [curBatObj], ChConfig.TurnBattleType_AtkBack)
            OnUseSkill(turnFight, tagObj, atkBackSkill, [atkObj], ChConfig.TurnBattleType_AtkBack)
            return
        
    if not tagObj:
        return
    
    if CanCombo(curBatObj, tagObj):
        # 连击根据技能目标配置逻辑重新选择目标
        GameWorld.DebugLog("● %s 【连击】" % TurnAttack.GetObjName(curBatObj))
        DoHeroSpecialty(turnFight, curBatObj, ChConfig.HeroSpecialty_Combo, useSkill.GetSkillID())
        OnUseSkill(turnFight, curBatObj, useSkill, batType=ChConfig.TurnBattleType_Combo)
    comboNum = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnComboNum)
    aComboRate = atkObj.GetBatAttrValue(ChConfig.AttrID_ComboRate)
    aComboRate += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, tagObj, ChConfig.AttrID_ComboRate, useSkill)
    dComboRateDef = tagObj.GetBatAttrValue(ChConfig.AttrID_ComboRateDef)
    happenRate = eval(IpyGameDataPY.GetFuncCompileCfg("ComboCfg", 1))
    if not GameWorld.CanHappen(happenRate):
        GameWorld.DebugLog("无法连击! atkID=%s,happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s"
                           % (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum))
        return
    GameWorld.DebugLog("● %s 【连击】 happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s"
                       % (TurnAttack.GetObjName(atkObj), happenRate, aComboRate, dComboRateDef, comboNum))
    atkObj.SetDict(ChConfig.Def_Obj_Dict_TurnComboNum, comboNum + 1)
    # 连击特长
    DoHeroSpecialty(turnFight, atkObj, ChConfig.HeroSpecialty_Combo, useSkill.GetSkillID())
    # 连击根据技能目标配置逻辑重新选择目标
    OnUseSkill(turnFight, atkObj, useSkill, batType=ChConfig.TurnBattleType_Combo)
    return
def __getCanAtkBackSkill(useSkill, tagObj):
@@ -642,21 +655,6 @@
            GameWorld.DebugLog("可以反击! tagID=%s" % tagID)
            return useSkill
    return
def CanCombo(atkObj, defObj):
    ## 可否连击
    comboNum = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnComboNum)
    aComboRate = atkObj.GetBatAttrValue(ChConfig.AttrID_ComboRate)
    dComboRateDef = defObj.GetBatAttrValue(ChConfig.AttrID_ComboRateDef)
    happenRate = eval(IpyGameDataPY.GetFuncCompileCfg("ComboCfg", 1))
    if GameWorld.CanHappen(happenRate):
        GameWorld.DebugLog("可以连击! atkID=%s,happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s"
                           % (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum))
        atkObj.SetDict(ChConfig.Def_Obj_Dict_TurnComboNum, comboNum + 1)
        return True
    GameWorld.DebugLog("无法连击! atkID=%s,happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s"
                       % (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum))
    return False
def DoBeAttackResult(turnFight, curObj, useSkill, isUseSkill=False):
    '''被攻击结果
@@ -880,9 +878,6 @@
    #    return
    enhanceSkillID = curEffect.GetEffectValue(0)
    checkInStateList = curEffect.GetEffectValue(1)
    if checkInStateList:
        if isinstance(checkInStateList, int):
            checkInStateList = [checkInStateList]
    GameWorld.DebugLog("额外触发的技能: enhanceSkillID=%s,checkInStateList=%s" % (enhanceSkillID, checkInStateList))
    tagObjList = useSkill.GetTagObjList()
    
@@ -905,12 +900,7 @@
                GameWorld.DebugLog("    闪避的不触发: tagID=%s" % (tagID))
                continue
            if checkInStateList:
                inState = False
                for state in checkInStateList:
                    if tagObj.IsInState(state):
                        inState = True
                        break
                if not inState:
                if not tagObj.CheckInState(checkInStateList):
                    GameWorld.DebugLog("    不在状态下不触发: tagID=%s not in state:%s" % (tagID, checkInStateList))
                    continue
            if enhanceRate and enhanceRate != ChConfig.Def_MaxRateValue and not GameWorld.CanHappen(enhanceRate, ChConfig.Def_MaxRateValue):
@@ -929,11 +919,8 @@
    if checkInStateList:
        inState = False
        for tagObj in tagObjList:
            for state in checkInStateList:
                if not state or tagObj.IsInState(state):
                    inState = True
                    break
            if inState:
            if tagObj.CheckInState(checkInStateList):
                inState = True
                break
        if not inState:
            GameWorld.DebugLog("    没有目标在状态下不触发: tagObj not in state:%s" % str(checkInStateList))
@@ -1102,7 +1089,10 @@
    if isAngerSkill:
        aAngerSkillPer = atkObj.GetBatAttrValue(ChConfig.AttrID_AngerSkillPer) # 普技增伤
        dAngerSkillPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_AngerSkillPerDef) # 普技减伤
    aAddSkillPer = 0 # 技能增伤
    aAddSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_SkillPer, curSkill)
    # 物法增减伤
    if pmType == IPY_GameWorld.ghtMag: # 法伤
        aPMDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_MagDamPer)
@@ -1117,6 +1107,7 @@
    dNormalSkillPerDef /= 10000.0
    aAngerSkillPer /= 10000.0
    dAngerSkillPerDef /= 10000.0
    aAddSkillPer /= 10000.0
    aPMDamPer /= 10000.0
    dPMDamPerDef /= 10000.0
    aSuperDamPer /= 10000.0
@@ -1124,8 +1115,8 @@
    aFinalDamPer /= 10000.0
    dFinalDamPerDef /= 10000.0
    
    GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,aAtk=%s,dDef=%s,dHP=%s,hurtTypes=%s"
                       % (atkID, defID, skillID, atkSkillPer, aAtk, dDef, dHP, hurtTypes))
    GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,aAtk=%s,dDef=%s,dHP=%s,hurtTypes=%s,aAddSkillPer=%s"
                       % (atkID, defID, skillID, atkSkillPer, aAtk, dDef, dHP, hurtTypes, aAddSkillPer))
    
    # 持续性伤害
    if isDot:
@@ -1160,6 +1151,7 @@
def CanStun(turnFight, atkObj, defObj, curSkill):
    aStunRate = atkObj.GetBatAttrValue(ChConfig.AttrID_StunRate)
    aStunRate += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_StunRate, curSkill)
    dStunRateDef = defObj.GetBatAttrValue(ChConfig.AttrID_StunRateDef)
    happenRate = eval(IpyGameDataPY.GetFuncCompileCfg("StunCfg", 1))
    if not GameWorld.CanHappen(happenRate):