hxp
5 天以前 26958aff1b844a743a805b4f9075bee800b72a46
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -61,6 +61,10 @@
    
    objID = curBatObj.GetID()
    
    if hasattr(useSkill, "GetRemainTime") and useSkill.GetRemainTime() > 0:
        GameWorld.DebugLog("技能CD中! skillID=%s,RemainTime=%s" % (skillID, useSkill.GetRemainTime()))
        return
    buffStateGroups = useSkill.GetBuffStateLimit()
    if buffStateGroups:
        limitState = curBatObj.IsInBuffStateGroup(buffStateGroups)
@@ -189,7 +193,11 @@
def IsNeedSyncSkill(useSkill):
    ## 使用需要同步B427使用技能
    return useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk, ChConfig.Def_SkillType_Cure, ChConfig.Def_SkillType_CleanBuff]
    if useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk, ChConfig.Def_SkillType_Cure, ChConfig.Def_SkillType_CleanBuff]:
        return True
    if useSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_TurnNormaSkill, ChConfig.Def_SkillFuncType_AngerSkill]:
        return True
    return False
def GetSkillTags(turnFight, curBatObj, useSkill):
    ## 获取技能目标
@@ -811,7 +819,7 @@
        else:
            diffType = 1
            tagXP = tagBatObj.GetXP()
            diffValue = calcValue
            diffValue = GetEnhanceXP(tagBatObj, calcValue)
            updValue = tagXP + diffValue
            tagBatObj.SetXP(updValue, False)
            GameWorld.DebugLog("    加怒气: tagID=%s,diffValue=%s,tagXP=%s,updXP=%s" % (tagID, diffValue, tagXP, updValue))
@@ -820,10 +828,10 @@
    if curStealTotal > 0:
        diffType = 1
        curXP = curBatObj.GetXP()
        diffValue = curStealTotal
        diffValue = GetEnhanceXP(tagBatObj, curStealTotal)
        updValue = curXP + diffValue
        curBatObj.SetXP(updValue, False)
        GameWorld.DebugLog("    加总怒气: curID=%s,curStealTotal=%s,curXP=%s,updXP=%s" % (curID, curStealTotal, curXP, updValue))
        GameWorld.DebugLog("    加总怒气: curID=%s,curStealTotal=%s,curXP=%s,diffValue=%s,updXP=%s" % (curID, curStealTotal, curXP, diffValue, updValue))
        Sync_PropertyRefreshView(turnFight, curBatObj, attrID, updValue, diffValue, diffType, skillID, relatedSkillID)
        
    return
@@ -993,13 +1001,17 @@
            
    # 统计击杀
    killObjList = [] # 击杀其他阵营目标列表
    dieObjList = [] # 死亡的单位列表
    for tagObj in useSkill.GetTagObjList():
        tagID = tagObj.GetID()
        if tagObj.IsAlive() and tagObj.GetHP() <= 0 and tagObj.GetFaction() != curObj.GetFaction():
            killObjList.append(tagObj)
            TurnAttack.SetObjKilled(turnFight, tagObj, curObj, useSkill)
        if tagObj.IsAlive() and tagObj.GetHP() <= 0:
            dieObjList.append(tagObj)
            if tagObj.GetFaction() != curObj.GetFaction():
                killObjList.append(tagObj)
                TurnAttack.SetObjKilled(turnFight, tagObj, curObj, useSkill)
    useSkill.SetKillObjList(killObjList)
    if curObj.IsAlive() and curObj.GetHP() <= 0:
        dieObjList.append(curObj)
        TurnAttack.SetObjKilled(turnFight, curObj)
        
    # 统计伤血,可能单个技能对同一目标造成多次伤害
@@ -1079,6 +1091,23 @@
            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_KillOneObj, tagObj, connSkill=useSkill)
        TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_KillTagObj, tagObj, connSkill=useSkill)
        
    if dieObjList:
        for faction in [ChConfig.Def_FactionA, ChConfig.Def_FactionB]:
            batFaction = turnFight.getBatFaction(faction)
            for lineupNum in batFaction.lineupDict.keys():
                batLineup = batFaction.getBatlineup(lineupNum)
                for lineupObjID in batLineup.posObjIDDict.values():
                    lineupObj = batObjMgr.getBatObj(lineupObjID)
                    if not lineupObj.IsAlive():
                        continue
                    for dieObj in dieObjList:
                        # 敌方单位死亡时
                        if lineupObj.GetFaction() != dieObj.GetFaction():
                            TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_EnemyDie, dieObj, connSkill=useSkill)
                        # 己方单位死亡时
                        else:
                            TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendDie, dieObj, connSkill=useSkill)
    triggerOne = False
    batType = useSkill.GetBatType()
    isAttackDirect = (isUseSkill and not SkillCommon.IsBuff(useSkill) and useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk])
@@ -1099,7 +1128,10 @@
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAttackedDirect, curObj, connSkill=useSkill)
        else:
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAnyEffect, curObj, connSkill=useSkill)
            # 受到持续伤害
            if tagID in beHurtObjIDList:
                TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeDOTHurt, curObj, connSkill=useSkill)
        # 使用技能后
        if isUseSkill:
            if not triggerOne:
@@ -1186,6 +1218,7 @@
    if posNum <= 0:
        #非主战单位不加
        return
    addXP = GetEnhanceXP(gameObj, addXP)
    curXP = gameObj.GetXP()
    updXP = curXP + addXP
    gameObj.SetXP(updXP)
@@ -1200,12 +1233,24 @@
    if str(specialty) not in specialtyAddXPDict:
        return
    addXP = specialtyAddXPDict[str(specialty)]
    addXP = GetEnhanceXP(gameObj, addXP)
    curXP = gameObj.GetXP()
    updXP = curXP + addXP
    gameObj.SetXP(updXP, False)
    GameWorld.DebugLog("        特长加XP: curID=%s,curXP=%s,addXP=%s,updXP=%s,特性=%s" % (gameObj.GetID(), curXP, addXP, updXP, specialty))
    Sync_PropertyRefreshView(turnFight, gameObj, ChConfig.AttrID_XP, updXP, addXP, diffType=1, relatedSkillID=relatedSkillID)
    return
def GetEnhanceXP(gameObj, addXP):
    ## 获取提升后的xp值
    addPer = gameObj.GetBatAttrValue(ChConfig.AttrID_XPRecoverPer)
    # 其他强化、弱化
    if addPer == 0:
        return addXP
    objID = gameObj.GetID()
    updAddXP = int(addXP * max(10000 + addPer, 0) / 10000.0)
    GameWorld.DebugLog("怒气恢复提升: objID=%s,addXP=%s,addPer=%s,updAddXP=%s" % (objID, addXP, addPer, updAddXP))
    return updAddXP
def __DoCurSkillEff(turnFight, curObj, useSkill, effIgnoreObjIDList, isUseSkill):
    ## 执行本技能/buff释放后额外效果
@@ -1253,7 +1298,7 @@
    
    killObjList = useSkill.GetKillObjList()
    if killObjList:
        invalidSkillID = TurnPassive.GetTriggerEffectValue(turnFight, curBatObj, None, ChConfig.PassiveEff_SkillInvalid, useSkill,
        invalidSkillID = TurnPassive.GetTriggerEffectValue(turnFight, curBatObj, None, ChConfig.PassiveEff_SkillInvalid, useSkill,
                                                           triggerWay=ChConfig.TriggerWay_KillOneObj)
        if invalidSkillID and invalidSkillID == enhanceSkillID:
            GameWorld.DebugLog("有击杀目标时该技能无效! enhanceSkillID=%s" % enhanceSkillID)
@@ -1333,6 +1378,10 @@
        #GameWorld.DebugLog("###被动触发技能不触发自身,防止死循环! effSkillID=%s,effectID=%s,passiveSkillID=%s" % (effSkillID, effectID, passiveSkillID))
        return
    
    if hasattr(passiveSkill, "GetRemainTime") and passiveSkill.GetRemainTime() > 0:
        #GameWorld.DebugLog("被动触发技能CD中! skillID=%s,RemainTime=%s" % (passiveSkillID, passiveSkill.GetRemainTime()))
        return
    isOK = False
    # 继承主技能目标
    if passiveSkill.GetTagAim() == ChConfig.SkillTagAim_MainSkill:
@@ -1407,6 +1456,7 @@
    '''计算伤害,默认按攻击计算
    '''
    
    mapID = turnFight.mapID
    skillID = curSkill.GetSkillID()
    pmType = GetPMType(atkObj, curSkill)
    ignoreDef = IsIgnoreDef(curSkill)
@@ -1522,6 +1572,11 @@
    if batType == ChConfig.TurnBattleType_Pursue:
        aPursueDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_PursueDamPer)
        
    aArenaDamPer, dArenaDamPerDef = 0, 0 # 竞技增伤、竞技减伤
    if mapID == ChConfig.Def_FBMapID_ArenaBattle:
        aArenaDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_ArenaDamPer)
        dArenaDamPerDef = atkObj.GetBatAttrValue(ChConfig.AttrID_ArenaDamPerDef)
    # 所有万分率参数统一除10000.0
    atkSkillPer /= 10000.0
    aNormalSkillPer /= 10000.0
@@ -1537,6 +1592,8 @@
    dFinalDamPerDef /= 10000.0
    aComboDamPer /= 10000.0
    aPursueDamPer /= 10000.0
    aArenaDamPer /= 10000.0
    dArenaDamPerDef /= 10000.0
    
    if calcType != ChConfig.Def_Calc_Attack:
        aAtk = GetCalcBaseValue(calcType, atkObj, defObj, curSkill)
@@ -1896,6 +1953,16 @@
    elif calcType == ChConfig.Def_Calc_HarmSelfHP:
        baseValue = curObj.GetHarmSelfHP()
        GameWorld.DebugLog("根据自残值: %s" % baseValue)
    elif calcType == ChConfig.Def_Calc_AtkedSkillHurtHP:
        bySkill = curSkill.GetBySkill()
        bySkillID = 0
        if bySkill:
            bySkillID = bySkill.GetSkillID()
            curID = curObj.GetID()
            for hurtObj in bySkill.GetHurtObjList():
                if curID == hurtObj.GetObjID():
                    baseValue += hurtObj.GetHurtHP()
        GameWorld.DebugLog("根据最后受击技能伤害: %s,bySkillID=%s" % (baseValue, bySkillID))
        
    return baseValue
@@ -2028,3 +2095,15 @@
    clientPack.RelatedSkillID = relatedSkillID
    turnFight.addBatPack(clientPack)
    return
def Sync_HPRefresh(turnFight, curBatObj):
    hp, maxHP = curBatObj.GetHP(), curBatObj.GetMaxHP()
    clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCObjHPRefresh)
    clientPack.ObjID = curBatObj.GetID()
    clientPack.HP = hp % ShareDefine.Def_PerPointValue
    clientPack.HPEx = hp / ShareDefine.Def_PerPointValue
    clientPack.MaxHP = maxHP % ShareDefine.Def_PerPointValue
    clientPack.MaxHPEx = maxHP / ShareDefine.Def_PerPointValue
    turnFight.addBatPack(clientPack)
    return