hch
2019-04-29 9aec240e848ba4bb6b473707ad8f48aee5180141
6632 子 【开发】增加新的符印属性 / 【后端】增加新的符印属性

6603 【后端】【2.0】增加新版的sp和被动技能 - 法爆 灼烧定义
18个文件已修改
1个文件已删除
7个文件已添加
684 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_4507.py 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_805.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py 61 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_39.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_9.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4507.py 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4531.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4532.py 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4004.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4006.py 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4094.py 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4095.py 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4096.py 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4097.py 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
@@ -1401,6 +1401,8 @@
    superHitRate = eval(ReadChConfig.GetChConfig("CalcSuperHitRate"))
    superHitRate += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, None, 
                                                                       ChConfig.TriggerType_Buff_AddSuperHitRate)
    superHitRate += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, None,
                                                                       ChConfig.TriggerType_Buff_AddSuperHitRate)
    if superHitRate <= 0:
        return
    if GameWorld.CanHappen(superHitRate):
@@ -1672,50 +1674,9 @@
    SetFirstDefender(atkObj, defObj, curSkill)
    
    resultHurtType = HurtType()
    atkObjType = attacker.GetGameObjType()
    defObjType = defObj.GetGameObjType()
    dHP = GameObj.GetHP(defObj)                # 防守方当前血量
    dMaxHP = GameObj.GetMaxHP(defObj)          # 防守方最大血量
    # 当技能表的技能伤害百分比为0,技能伤害增加值定义为直接伤害值,不经过计算
    if atkSkillPer == 0:
        hurtValue, hurtType = int(atkSkillValue), ChConfig.Def_HurtType_Normal
        hurtValue += atkObj.GetDictByKey(ChConfig.Def_PlayerKey_MoreHurtValue)
    elif SkillShell.IsPlayerUseSkill(atkObj, curSkill) and SkillShell.isClientHurtValue(defObj.GetID(), defObjType):
        # 缓存单次攻击中的最大伤害,被动技能概率性增加伤害,此处放大最大伤害
        hurtValue = atkObj.GetDictByKey(ChConfig.Def_PlayerKey_ClientMaxHurtValue)
        if hurtValue == 0:
            #hurtValue, hurtType = CalcHurtHP(atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, tick, None, True)
            # 理论伤害一致, 多加点预算伤害避免计算误差
            #hurtValue = min(ShareDefine.Def_UpperLimit_DWord, hurtValue+10)
            #atkObj.SetDict(ChConfig.Def_PlayerKey_ClientMaxHurtValue, int(hurtValue*1.2))
            hurtValue = atkObj.GetMaxAtk()*atkSkillPer*40   # 加入被动计算不准确改成估算
        clientValue, hurtType = SkillShell.GetClientHurtByObj(defObj.GetID(), defObjType)
        if clientValue <= hurtValue:
            hurtValue = clientValue
        else:
            # 外挂最高伤害基本防范
            GameWorld.DebugLog(atkObj, "%s----客户端伤害 %s 服务端最高伤害 %s"%(atkObj.GetID(), [clientValue, hurtType], hurtValue))
            hurtValue = int(hurtValue*0.8)
        #GameWorld.DebugAnswer(atkObj, "客户端伤害 %s 服务端伤害 %s"%([defObj.GetID(), clientValue, hurtType], hurtValue))
    else:
        hurtValue, hurtType = CalcHurtHP(atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, tick, orgAtkObj=attacker)
    WriteHurtLog(attacker, defObj, curSkill, hurtValue, hurtType, "公式层")
    hurtValue = CalcHurtHPWithBuff(atkObj, defObj, hurtValue, curSkill, tick)
    # buff减少伤害百分比
    reducePer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defObj, atkObj, None, ChConfig.TriggerType_ReduceHurtHPPer)
    # 被攻击被动技能特殊减免 受到单次伤害超过生命上限10%时候,减免50%伤害,CD10秒
    defObj.SetDict(ChConfig.Def_PlayerKey_curHurtValue, hurtValue)
    reducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_ReduceHurtHPPer)
    hurtValue = int(hurtValue*(max(ChConfig.Def_MaxRateValue - reducePer, 0))*1.0/ChConfig.Def_MaxRateValue)
    
    # 终极斩杀新效果,必须和斩杀严格区分,会涉及到CD概率,已经触发其他技能等问题
    if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_ZhongjiZhansha):
@@ -1742,13 +1703,43 @@
        remainHP = 0 # 剩余血量
    else:
        # 当技能表的技能伤害百分比为0,技能伤害增加值定义为直接伤害值,不经过计算
        if atkSkillPer == 0:
            hurtValue, hurtType = int(atkSkillValue), ChConfig.Def_HurtType_Normal
            hurtValue += atkObj.GetDictByKey(ChConfig.Def_PlayerKey_MoreHurtValue)
        elif SkillShell.IsPlayerUseSkill(atkObj, curSkill) and SkillShell.isClientHurtValue(defObj.GetID(), defObjType):
            # 缓存单次攻击中的最大伤害,被动技能概率性增加伤害,此处放大最大伤害
            hurtValue = atkObj.GetDictByKey(ChConfig.Def_PlayerKey_ClientMaxHurtValue)
            if hurtValue == 0:
                #hurtValue, hurtType = CalcHurtHP(atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, tick, None, True)
                # 理论伤害一致, 多加点预算伤害避免计算误差
                #hurtValue = min(ShareDefine.Def_UpperLimit_DWord, hurtValue+10)
                #atkObj.SetDict(ChConfig.Def_PlayerKey_ClientMaxHurtValue, int(hurtValue*1.2))
                hurtValue = atkObj.GetMaxAtk()*atkSkillPer*40   # 加入被动计算不准确改成估算
            clientValue, hurtType = SkillShell.GetClientHurtByObj(defObj.GetID(), defObjType)
            if clientValue <= hurtValue:
                hurtValue = clientValue
            else:
                # 外挂最高伤害基本防范
                GameWorld.DebugLog(atkObj, "%s----客户端伤害 %s 服务端最高伤害 %s"%(atkObj.GetID(), [clientValue, hurtType], hurtValue))
                hurtValue = int(hurtValue*0.8)
            #GameWorld.DebugAnswer(atkObj, "客户端伤害 %s 服务端伤害 %s"%([defObj.GetID(), clientValue, hurtType], hurtValue))
        else:
            hurtValue, hurtType = CalcHurtHP(atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, tick, orgAtkObj=attacker)
        WriteHurtLog(attacker, defObj, curSkill, hurtValue, hurtType, "公式层")
        # 各种减伤 吸收盾处理
        hurtValue = CalcHurtHPWithBuff(atkObj, defObj, hurtValue, curSkill, tick)
        #伤害结构体
        resultHurtType.HurtHP = hurtValue
        resultHurtType.HurtType = hurtType
        resultHurtType.RealHurtHP = hurtValue
        
        # 血盾
        hurtValue = CalcBloodShield(atkObj, defObj, hurtValue)
        remainHP = min(dMaxHP, max(0, dHP - hurtValue)) # 剩余血量
    
    remainHP = int(remainHP)    #防范
@@ -1872,16 +1863,6 @@
    # 伤害吸收盾回血型
    buffManager = defObj.GetBuffState()
    curEffect, plusValue, skillID = BuffSkill.FindBuffEffectPlusByEffectID(buffManager, ChConfig.Def_Skill_Effect_AbsorbShieldXMZJ)
    if skillID:
        absortValue = hurtValue*curEffect.GetEffectValue(0)/ShareDefine.Def_MaxRateValue
        if absortValue:
            hurtValue -= absortValue
            findBuff = SkillCommon.FindBuffByID(defObj, skillID)[0]
            if findBuff:
                # 用于回血
                findBuff.SetValue(int(findBuff.GetValue() + absortValue))
    
    curEffect, plusValue, skillID = BuffSkill.FindBuffEffectPlusByEffectID(buffManager, ChConfig.Def_Skill_Effect_AbsorbShield)
    if skillID:
@@ -1897,15 +1878,38 @@
                    findBuff.SetRemainTime(1)
    
        
    # 天罡护法,将期间受到的伤害总值用于回血,不改变伤害
    curEffect, plusValue, skillID2 = BuffSkill.FindBuffEffectPlusByEffectID(buffManager, ChConfig.Def_Skill_Effect_StoreBlood)
    if skillID2:
    # 天罡护法,将期间受到的伤害总值用于回血,不改变伤害,暂且不用
    #===========================================================================
    # curEffect, plusValue, skillID2 = BuffSkill.FindBuffEffectPlusByEffectID(buffManager, ChConfig.Def_Skill_Effect_StoreBlood)
    # if skillID2:
    #    absortValue = hurtValue*curEffect.GetEffectValue(0)/ShareDefine.Def_MaxRateValue
    #    if absortValue:
    #        findBuff = SkillCommon.FindBuffByID(defObj, skillID2)[0]
    #        if findBuff:
    #            # 用于回血
    #            findBuff.SetValue(int(findBuff.GetValue() + absortValue))
    #===========================================================================
    curEffect, plusValue, skillID = BuffSkill.FindBuffEffectPlusByEffectID(buffManager, ChConfig.Def_Skill_Effect_AbsorbShieldXMZJ)
    if skillID:
        absortValue = hurtValue*curEffect.GetEffectValue(0)/ShareDefine.Def_MaxRateValue
        if absortValue:
            findBuff = SkillCommon.FindBuffByID(defObj, skillID2)[0]
            hurtValue -= absortValue
            findBuff = SkillCommon.FindBuffByID(defObj, skillID)[0]
            if findBuff:
                # 用于回血
                findBuff.SetValue(int(findBuff.GetValue() + absortValue))
    # buff减少伤害百分比
    reducePer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defObj, atkObj, None, ChConfig.TriggerType_ReduceHurtHPPer)
    # 被攻击被动技能特殊减免 受到单次伤害超过生命上限10%时候,减免50%伤害,CD10秒
    defObj.SetDict(ChConfig.Def_PlayerKey_curHurtValue, hurtValue)
    reducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_ReduceHurtHPPer)
    hurtValue = int(hurtValue*(max(ChConfig.Def_MaxRateValue - reducePer, 0))*1.0/ChConfig.Def_MaxRateValue)
    hurtValue = CalcBloodShield(atkObj, defObj, hurtValue)
    return hurtValue
@@ -1942,7 +1946,7 @@
                        msg, attackerID, attackerName, defenderID, defenderName,
                        skillID, skillName, hurtValue, hurtType))
# 血盾支持多个同时存在
# 血盾支持多个同时存在, 反弹也会被吸收
def CalcBloodShield(atkObj, defObj, hurtValue):
    # 伤害值用于血盾抵消
    defObj.SetDict(ChConfig.Def_PlayerKey_BloodShiledHurt, hurtValue)
@@ -1955,9 +1959,11 @@
# 计算攻击伤害
# maxHurt参数用于模拟计算最大伤害,防范客户端攻击伤害过高
def CalcHurtHP(atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, tick, happenState=None, **atkwargs):
    # 翻滚闪避特殊处理
    if tick - defObj.GetDictByKey(ChConfig.Def_PlayerKey_SomersaultTime) < 500:
        return 0, ChConfig.Def_HurtType_Miss
    #===========================================================================
    # # 翻滚闪避特殊处理
    # if tick - defObj.GetDictByKey(ChConfig.Def_PlayerKey_SomersaultTime) < 500:
    #    return 0, ChConfig.Def_HurtType_Miss
    #===========================================================================
    
    summonAtkPer = 1    # 召唤继承提高基础攻击力,取表
    summonAtkObj = atkwargs.get('orgAtkObj', None) if atkwargs.get('orgAtkObj', None) else atkObj
@@ -2107,8 +2113,10 @@
            
    #  atkSkillPer 包含普攻,所以不是用技能增强处理
    atkSkillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddSkillPer)
    atkSkillPer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddSkillPer)
    if hurtType == ChConfig.Def_HurtType_SuperHit:
        atkSkillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitAddSkillPer)
    
    if isSuperHit:
        addASuperHit = PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitValue)
@@ -2271,7 +2279,14 @@
    if hurtFormulaKey not in hurtDist:
        GameWorld.ErrLog("CalcAttackValue.txt 伤害公式未配置, key=%s" % (hurtFormulaKey))
        return 0, ChConfig.Def_HurtType_Miss
    hurtFormula = hurtDist[hurtFormulaKey]
    if atkwargs.get('hurtFormulaKey', None):
        # 指定公式
        aBurnValue = atkwargs.get('burnValue', 0)
        aBurnPer = atkwargs.get('burnPer', 0)
        hurtFormula = hurtDist[atkwargs.get('hurtFormulaKey', None)]
    else:
        hurtFormula = hurtDist[hurtFormulaKey]
    hurtValue = int(eval(FormulaControl.GetCompileFormula(hurtFormulaKey, hurtFormula)))
    if hurtType == ChConfig.Def_HurtType_Normal and SuppressValueRealmRate > 10000:
@@ -2334,7 +2349,7 @@
    #反弹伤害
    CalcBounceHP(atkObj, defObj, resultHurtType.LostHP, resultHurtType.HurtType, curSkill)
    #吸血
    CalcSuckBlood(atkObj, defObj, curSkill, resultHurtType.RealHurtHP, tick)
    CalcSuckBlood(atkObj, defObj, curSkill, resultHurtType, tick)
        
    if atkObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
        # 记录最后一次伤害值
@@ -2466,10 +2481,12 @@
#  @param atkObj 攻击者
#  @param defObj 防守者
#  @return None
def CalcSuckBlood(atkObj, defObj, curSkill, hurtValue, tick):
def CalcSuckBlood(atkObj, defObj, curSkill, resultHurtType, tick):
    if atkObj.GetGameObjType() != IPY_GameWorld.gotPlayer:
        return
    hurtValue, hurtType = resultHurtType.RealHurtHP, resultHurtType.HurtType,
    if not hurtValue:
        return
    
@@ -2495,6 +2512,9 @@
        atkBackHPPer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
        atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
        
        if hurtType == ChConfig.Def_HurtType_SuperHit:
            atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitSuckBloodPer)
        atkBackHP += int(hurtValue * atkBackHPPer*1.0 / ChConfig.Def_MaxRateValue)
        
    suckHP += atkBackHP
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
@@ -1567,6 +1567,7 @@
        return
    if hurtType == ChConfig.Def_HurtType_SuperHit:
        PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defender, curSkill, ChConfig.TriggerType_SuperHit, tick)
        PassiveBuffEffMng.OnPassiveBuffTrigger(attacker, defender, curSkill, ChConfig.TriggerType_SuperHit, tick)
    elif hurtType == ChConfig.Def_HurtType_ThumpHit:
        PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defender, curSkill, ChConfig.TriggerType_ThumpHit, tick)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -63,12 +63,13 @@
Def_Buff_Replace_Better,    # 相同typeid取最高,如果新的是低级的则不处理
Def_Buff_Replace_New,       # 相同typeid替换最新,即使是低级的
Def_Buff_Coexist,           # 不同的释放者可共存
) = range(3)
Def_Buff_Recharge,        # 若同类型buff存在不管等级高低,只给原buff充能只改变值或时间
) = range(4)
Def_BuffValue_Count = 3     # buff记录的value个数
#游戏对象属性--------------------------------------------
Def_Calc_AllAttrType_MAX = 131
Def_Calc_AllAttrType_MAX = 135
#基本属性BUFF计算,顺序与 ObjProperty_AttrByIndex 对应,同时也为buff效果ID同步通知策划
TYPE_Calc_AttrList = (
TYPE_Calc_Metal,                        # 金 1
@@ -212,7 +213,11 @@
TYPE_Calc_FabaoHurt,                    # 法宝技能增伤 
TYPE_Calc_FabaoHurtPer,                 # 法宝技能加成 
TYPE_Calc_FinalHurtReducePer,           # 最终伤害减少百分比
TYPE_Calc_YinjiTime,                    # 每X秒自动消失一个印记
TYPE_Calc_YinjiTime,                    # 每X秒自动消失一个印记 130
TYPE_Calc_TheFBSkillsCD,                # 减少指定技能组CD XX%
TYPE_Calc_BurnValue,                    # 灼烧固定伤害
TYPE_Calc_BurnTimePer,                     # 延长灼烧时间百分比
TYPE_Calc_SubSpeedPer,                  # 减移动速度百分比
) = range(1, Def_Calc_AllAttrType_MAX)
@@ -564,6 +569,7 @@
Def_Skill_Effect_SummonAttr = 1013 # 召唤兽属性
Def_Skill_Effect_BoomSeedID = 1014 # 引爆BUFF种子
Def_Skill_Effect_ReCD = 1016 # 重置CD
Def_Skill_Effect_Burn = 1034 # 灼烧
Def_Skill_Effect_RandWarn = 1061 # 随机预警
Def_Skill_Effect_AttackReplaceByNPCSeries = 1062 # 对指定系的伤害
Def_Skill_Effect_AvgHurtFMCnt = 1064 # NPC技能按仙盟成员数均摊伤害  
@@ -3006,7 +3012,7 @@
    Def_PlayerState_LimitSkill, # 禁魔状态 10
    Def_PlayerState_LimitAddHP, # 禁疗状态 11
    Def_PlayerState_Blind, # 致盲状态 12
    Def_PlayerState_LoseBlood1, # 职业1持续掉血状态 13
    Def_PlayerState_LoseBlood1, # 灼烧 13
    Def_PlayerState_LoseBlood2, # 职业2持续掉血状态 14
    Def_PlayerState_LoseBlood3, # 职业3持续掉血状态 15
    Def_PlayerState_MissSneerAtk, # 对嘲讽攻击免疫表现为miss 16
@@ -3019,6 +3025,10 @@
#---SetDict 玩家字典KEY,不存于数据库---
# key的长度不能超过29个字节
Def_PlayerKey_TheFBSkillsCD = "TheFBSkillsCD"    # 减少指定技能组CD XX%
Def_PlayerKey_BurnValue = "BurnValue"    # 灼烧固定伤害
Def_PlayerKey_BurnTimePer = "BurnTimePer"    # 延长灼烧时间百分比
Def_PlayerKey_SubSpeedPer = "SubSpeedPer"    # 减移动速度百分比
Def_PlayerKey_YinjiCnt = "YinjiCnt"   # 当前印记数
Def_PlayerKey_LostYinjiTime = "LostYinjiTime"   # 每X秒自动消失一个印记
Def_PlayerKey_1314HurtCount = "1314cnt"   # 类剑刃风暴技能的1314效果,伤害次数处理
@@ -3038,7 +3048,6 @@
Def_PlayerKey_LockHPSkillID = "LockHPSkillID"   # 锁血功能的技能
Def_PlayerKey_GodWeaponBeforeProDef = "GWBPD"   # 神兵护盾被攻击前的值
Def_PlayerKey_curHurtValue = "curHurtValue"     # 计算中的临时伤害值,技能特殊用
Def_PlayerKey_DefenderObjID = "DefenderObjID"     # 后续触发技能需要用到的对象ID,暂用于玩家
Def_PlayerKey_SomersaultTime = "Somersault"     # 翻滚一定时间内无敌,表现为MISS
Def_PlayerKey_CopyFuncAttr = "CopyFuncAttr%s"     # 玩家属性刷新中的计算属性缓存,便于buff刷新计算
Def_Player_RefreshAttrByBuff = "PlayerAttrByBuff"   # 玩家属性刷新功能属性缓存,便于buff刷新计算, 间隔刷新
@@ -4189,6 +4198,10 @@
    ShareDefine.Def_Effect_FinalHurtPer:[[TYPE_Calc_FinalHurtPer], False, TYPE_Linear],   # 最终伤害万分率
    ShareDefine.Def_Effect_FinalHurtReducePer:[[TYPE_Calc_FinalHurtReducePer], False, TYPE_Linear],   # 最终伤害减少万分
    ShareDefine.Def_Effect_YinjiTime:[[TYPE_Calc_YinjiTime], False, TYPE_Linear],   # 每X秒自动消失一个印记
    ShareDefine.Def_Effect_TheFBSkillsCD:[[TYPE_Calc_TheFBSkillsCD], False, TYPE_Linear],   # 减少指定技能组CD XX%
    ShareDefine.Def_Effect_BurnValue:[[TYPE_Calc_BurnValue], False, TYPE_Linear],   # 灼烧固定伤害
    ShareDefine.Def_Effect_BurnTimePer:[[TYPE_Calc_BurnTimePer], False, TYPE_Linear],   # 延长灼烧时间百分比
    ShareDefine.Def_Effect_SubSpeedPer:[[TYPE_Calc_SubSpeedPer], False, TYPE_Linear],   # 减移动速度百分比
    #战斗非线性
    ShareDefine.Def_Effect_SuperHitPer:[[TYPE_Calc_SuperHit], False, TYPE_NoLinear],
@@ -4450,7 +4463,10 @@
TriggerType_SkillSuccess, # 任何技能释放成功都可触发 76
TriggerType_BounceHPPerByAttacker,   # 反弹伤害百分比值, 由攻击方决定 77
TriggerType_NoControl,   # 使关联技能不受控制 78
) = range(1, 79)
TriggerType_SuperHitSuckBloodPer,   # 暴击百分比吸血, 79
TriggerType_SuperHitAddSkillPer,    # 暴击增加技能伤害 80
TriggerType_BurnPer,    # 灼烧伤害百分比 81
) = range(1, 82)
#不可以佩戴翅膀的地图
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py
@@ -1271,7 +1271,7 @@
    skillTypeID, buffOwner = 0, None
    lostValue = int(GameObj.GetMaxHP(curPlayer) * lostHPPer / 100.0) * lostTime
    #GameWorld.DebugLog("OnCollecting lostHPPer=%s,lostTime=%s,lostValue=%s" % (lostHPPer, lostTime, lostValue), playerID)
    SkillCommon.SkillLostHP(curPlayer, skillTypeID, buffOwner, lostValue, tick)
    SkillCommon.SkillLostHP(curPlayer, skillTypeID, buffOwner, lostValue, tick, skillAffect=False)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -6692,7 +6692,20 @@
def SetYinjiCnt(curPlayer, value): 
    curPlayer.SetDict(ChConfig.Def_PlayerKey_YinjiCnt, value)
    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_YinjiCnt, value, False)
# 减少指定技能组CD XX%
def GetTheFBSkillsCD(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TheFBSkillsCD)
def SetTheFBSkillsCD(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_TheFBSkillsCD, value)
# 灼烧固定伤害
def GetBurnValue(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BurnValue)
def SetBurnValue(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BurnValue, value)
# 延长灼烧时间百分比
def GetBurnTimePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BurnTimePer)
def SetBurnTimePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BurnTimePer, value)
# 减移动速度百分比
def GetSubSpeedPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SubSpeedPer)
def SetSubSpeedPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SubSpeedPer, value)
## 计算功能背包物品属性 
#  @param curPlayer 当前玩家
#  @param packType 背包类型
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -614,7 +614,7 @@
    curPlayer.SetDict(ChConfig.Def_PlayerKey_CollectLostHPTick, tick)
    lostValue = int(GameObj.GetMaxHP(curPlayer) * lostHPPer / 100.0) * lostTime
    skillTypeID, buffOwner = 0, None
    SkillCommon.SkillLostHP(curPlayer, skillTypeID, buffOwner, lostValue, tick)
    SkillCommon.SkillLostHP(curPlayer, skillTypeID, buffOwner, lostValue, tick, skillAffect=False)
    GameWorld.DebugLog("采集掉血: npcID=%s,lostHPPer=%s,lostTime=%s,lostValue=%s" % (collectNPCIpyData.GetNPCID(), lostHPPer, lostTime, lostValue))
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -545,6 +545,10 @@
Def_Effect_FinalHurtPer = 142   # 最终伤害万分率
Def_Effect_FinalHurtReducePer = 143    # 最终伤害减少万分
Def_Effect_YinjiTime = 144    # 每X毫秒自动消失一个印记
Def_Effect_TheFBSkillsCD = 145    # 减少指定技能组CD XX%
Def_Effect_BurnValue = 146    # 灼烧固定伤害
Def_Effect_BurnTimePer = 147    # 延长灼烧时间百分比
Def_Effect_SubSpeedPer = 148    # 减移动速度百分比
#增加%d物理伤害值,其中a值为伤害值
Def_Effect_AddAtk = 1005
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
@@ -79,23 +79,7 @@
    return result
#===============================================================================
# # CanRepeatTime字段个位数
# (
# Def_BuffTime_Reset,     # 0    重置时间
# Def_BuffTime_Add,   # 1    增加时间
# Def_BuffTime_Keep,    # 2    时间不变
# Def_BuffTime_Keep_AddValue, # 3    时间不变只增加值,默认为替换更强值
# ) = range(4)
#
# # CanRepeatTime字段十位数
# (
# Def_Buff_Replace_Better,    # 相同typeid取最高,如果新的是低级的则不处理
# Def_Buff_Replace_New,       # 相同typeid替换最新,即使是低级的
# Def_Buff_Coexist,           # 不同的释放者可共存
# ) = range(3)
#===============================================================================
# 快捷搜索 CanRepeatTime字段
# buff时间处理类型,个位数
def GetBuffRepeatTimeType(curSkill):
    return curSkill.GetCanRepeatTime()%10
@@ -111,6 +95,19 @@
        layerMaxCnt = hasEffect.GetEffectValue(0)   # 能叠加的最大上限
    return layerMaxCnt
# 改变BUFF持续时间
def ChangeLastTime(attacker, curSkill):
    buffTime = curSkill.GetLastTime()
    if not attacker:
        return buffTime
    if curSkill.GetEffect(0).GetEffectID() == ChConfig.Def_Skill_Effect_Burn:
        # 灼烧的时间特殊处理
        buffTime = buffTime*(ChConfig.Def_MaxRateValue + PlayerControl.GetBurnTimePer(attacker))/ChConfig.Def_MaxRateValue
    buffTime += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(attacker, None, curSkill, ChConfig.TriggerType_BuffTime)
    return buffTime
#---------------------------------------------------------------------
## 增加BUFF 减少BUFF(参数 -> 当前对象,buff类型,当前技能,当前时间,Buff总值->用于持续类技能 , Buff拥有者)
@@ -146,7 +143,7 @@
    #技能类型ID
    curSkillTypeID = curSkill.GetSkillTypeID()
    #当前技能持续时间
    curSkillLastTime = curSkill.GetLastTime()
    curSkillLastTime = ChangeLastTime(buffOwner, curSkill)
    #当前技能等级
    curSkillLV = curSkill.GetSkillLV()
    #替换模式
@@ -212,31 +209,36 @@
                
        if buffSkillLV == curSkillLV:
            changeLayer = False
            if layerMaxCnt:
                curLayerCnt = curBuff.GetLayer()
                if curLayerCnt < layerMaxCnt:
                    if layerCalc == ChConfig.Def_BuffLayer_Add:
                        curBuff.SetLayer(curLayerCnt + 1)
                        #BUFF层级变化触发被动
                        if buffOwner:
                            curObj.SetDict(ChConfig.Def_PlayerKey_AddBuffLayer, curBuff.GetLayer())
                            PassiveBuffEffMng.OnPassiveSkillTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddLayer, tick)
                            PassiveBuffEffMng.OnPassiveBuffTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddLayer, tick)
                            curObj.SetDict(ChConfig.Def_PlayerKey_AddBuffLayer, 0)
                    else:
                        curBuff.SetLayer(layerMaxCnt)
                    changeLayer = True
            if layerMaxCnt and curBuff.GetLayer() < layerMaxCnt:
                if layerCalc == ChConfig.Def_BuffLayer_Add:
                    curBuff.SetLayer(curBuff.GetLayer() + 1)
                    #BUFF层级变化触发被动
                    if buffOwner:
                        curObj.SetDict(ChConfig.Def_PlayerKey_AddBuffLayer, curBuff.GetLayer())
                        PassiveBuffEffMng.OnPassiveSkillTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddLayer, tick)
                        PassiveBuffEffMng.OnPassiveBuffTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddLayer, tick)
                        curObj.SetDict(ChConfig.Def_PlayerKey_AddBuffLayer, 0)
                else:
                    curBuff.SetLayer(layerMaxCnt)
                changeLayer = True
            # Def_Buff_Replace_New和Def_Buff_Recharge 均可走到此逻辑
            __BuffCanRemain(buffState, curBuff, i, resultTime, plusValueList, buffOwner)
            # 此处考虑下plusValue变强是否刷属性
            #DoAddBuffOver(curObj, curSkill, addBuff, tick)
            return changeLayer
        else:
            if buffReplaceType == ChConfig.Def_Buff_Recharge:
                # 充能型
                __BuffCanRemain(buffState, curBuff, i, resultTime, plusValueList, buffOwner)
                return
            processInterval = curBuff.GetProcessInterval()
            ownerID, ownerType = curBuff.GetOwnerID(), curBuff.GetOwnerType()
            buffState.DeleteBuffByIndex(i)
            SkillShell.ClearBuffEffectBySkillID(curObj, buffSkillID, ownerID, ownerType)
            return __AddBuff(curObj, buffState, curSkill, plusValueList, buffOwner, isDelRefresh, 
                             tick, processInterval, layerMaxCnt, layerCalc)
                             tick, curSkillLastTime, processInterval, layerMaxCnt, layerCalc)
        
        #已经找到同一类型的技能,立即退出不然会导致错乱
        return False
@@ -254,7 +256,7 @@
        isDelRefresh = True
    
    return __AddBuff(curObj, buffState, curSkill, plusValueList, buffOwner, isDelRefresh, 
                     tick, 0, layerMaxCnt, layerCalc)
                     tick, curSkillLastTime, 0, layerMaxCnt, layerCalc)
## 是否血包/蓝包buff
@@ -314,15 +316,15 @@
# @param isDelRefresh 外界删除BUFF是否刷新
# @param tick 时间戳
# @return 是否刷新玩家属性
def __AddBuff(curObj, buffState, curSkill, plusValueList, buffOwner, isDelRefresh, tick,
              updProcessInterval, layerMaxCnt, layerCalc):
def __AddBuff(curObj, buffState, curSkill, plusValueList, buffOwner, isDelRefresh, tick,
              curSkillLastTime, updProcessInterval, layerMaxCnt, layerCalc):
    skillID = curSkill.GetSkillID()
    #是否需要通知客户端
    isNotify = True if curSkill.GetClientEffectType() != 0 else False
    # 增加第四个参数是否立即广播
    addBuff = buffState.AddBuff(skillID, tick, isNotify, False)
    buffIndex = buffState.GetBuffCount()    # buff在管理器中的索引
    if updProcessInterval > 0:
        # 继承上一个buff的循环记录
        addBuff.SetProcessInterval(updProcessInterval)
@@ -337,11 +339,7 @@
        else:
            addBuff.SetLayer(layerMaxCnt)
    if buffOwner:
        addTime = PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(buffOwner, None, curSkill, ChConfig.TriggerType_BuffTime)
        if addTime:
            #有改变持续时间的技能
            addBuff.SetRemainTime(curSkill.GetLastTime() + addTime)
    addBuff.SetRemainTime(curSkillLastTime)
    
    # 同步主从技能时间
    SyncMasterBuffTime(curObj, addBuff, curSkill)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
@@ -170,6 +170,10 @@
   [lambda curObj:PlayerControl.GetFabaoHurtPer(curObj), lambda curObj, value:PlayerControl.SetFabaoHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_FabaoHurtPer, 1, 0],  # 属性法宝技能加成
   [lambda curObj:PlayerControl.GetFinalHurtReducePer(curObj), lambda curObj, value:PlayerControl.SetFinalHurtReducePer(curObj, value), ShareDefine.CDBPlayerRefresh_FinalHurtReducePer, 1, 0],      # 最终伤害减少百分比
   [lambda curObj:PlayerControl.GetLostYinjiTime(curObj), lambda curObj, value:PlayerControl.SetLostYinjiTime(curObj, value), ShareDefine.CDBPlayerRefresh_YinjiTime, 1, 0],    # 每X秒自动消失一个印记 毫秒
   [lambda curObj:PlayerControl.GetTheFBSkillsCD(curObj), lambda curObj, value:PlayerControl.SetTheFBSkillsCD(curObj, value), 0, 0, 0],    # 减少指定技能组CD XX%
   [lambda curObj:PlayerControl.GetBurnValue(curObj), lambda curObj, value:PlayerControl.SetBurnValue(curObj, value), ShareDefine.CDBPlayerRefresh_YinjiTime, 0, 0],    # 灼烧固定伤害
   [lambda curObj:PlayerControl.GetBurnTimePer(curObj), lambda curObj, value:PlayerControl.SetBurnTimePer(curObj, value), 0, 0, 0],    # 延长灼烧时间百分比
   [lambda curObj:PlayerControl.GetSubSpeedPer(curObj), lambda curObj, value:PlayerControl.SetSubSpeedPer(curObj, value), 0, 0, 0],    # 减移动速度百分比
]
## 通过索引获得属性值
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py
New file
@@ -0,0 +1,60 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#
##@package
#
# @todo: 灼烧(流派专用,额外公式), 持续过程中可能会被改变伤害或者持续时长,无法用次数控制,无层级概念
#        若同类型buff存在不管等级高低,只给原buff充能只改变值或时间
# @author: Alee
# @date 2019-4-28 下午04:12:17
# @version 1.0
#
# @note:
#
#---------------------------------------------------------------------
#导入
import SkillCommon
import GameWorld
import ChConfig
import AttackCommon
import PlayerControl
import PassiveBuffEffMng
#---------------------------------------------------------------------
#全局变量
#---------------------------------------------------------------------
#---------------------------------------------------------------------
#逻辑实现
## 持续性Buff处理
#  @param defender 承受者
#  @param curBuff 当前Buff
#  @param curEffect Buff效果
#  @param tick 当前时间
#  @return None
#  @remarks 函数详细说明.
def ProcessBuff(defender, curBuff, curEffect, processBuffTick, tick):
    #单次伤害
    singleDecHP = curBuff.GetValue()
    buffOwner = SkillCommon.GetBuffOwner(curBuff)
    curBuffSkillID = curBuff.GetSkill().GetSkillTypeID()
    SkillCommon.SkillLostHP(defender, curBuffSkillID, buffOwner, singleDecHP, tick, hurtType=ChConfig.Def_HurtType_Bleed)
    return
# 灼烧的特征为延长buff时间,重算伤害
def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):
    curEffect = curSkill.GetEffect(0)
    skillPer = curEffect.GetEffectValue(0)
    skillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_BurnPer)
    skillEnhance = curEffect.GetEffectValue(1) + PlayerControl.GetBurnValue(attacker)
    skillPer = skillPer*1.0/ChConfig.Def_MaxRateValue
    # 灼烧特殊公式
    hurtValue, hurtType = AttackCommon.CalcHurtHP(attacker, defender, curSkill,
                            0, 0, GameWorld.GetGameWorld().GetTick(), ChConfig.Def_Skill_HappenState_HitOn,
                            hurtFormulaKey="Burn", burnValue=skillEnhance, burnPer=skillPer)
    return [hurtValue]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_4507.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_805.py
@@ -27,7 +27,7 @@
    if GameObj.GetHP(curObj) <= 0:
        return
    SkillCommon.SkillLostHP(curObj, curBuff.GetBuffID(), SkillCommon.GetBuffOwner(curBuff), 
                            curBuff.GetValue(), tick, curBuff.GetValue1())
                            curBuff.GetValue(), tick, hurtType=curBuff.GetValue1())
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
@@ -1222,18 +1222,15 @@
            
    return
## 技能伤血
#  @param curObj 当前对象
#  @param skillTypeID 技能类型ID
#  @param buffOwner buff拥有者
#  @param lostValue 丢失值
#  @param tick 当前时间
#  @param view 是否广播
#  @param reduce 是否扣血
#  @return None
#  @remarks 函数详细说明.
def SkillLostHP(curObj, skillTypeID, buffOwner, lostValue, tick, view=True, reduceHP=True,
                isDoAttackResult=True, hurtType=ChConfig.Def_HurtType_Normal):
## 直接扣血不走公式
# view 是否广播客户端飘血
# isDoAttackResult 是否立即处理结果,为False必须外层有处理
# hurtType 飘血类型
# skillAffect 默认True 会被各种技能BUFF盾等影响伤血数值
#             False代表一些特殊处理纯固定伤害飘字(如采集固定掉1点血)
def SkillLostHP(curObj, skillTypeID, buffOwner, lostValue, tick, view=True,
                isDoAttackResult=True, hurtType=ChConfig.Def_HurtType_Normal,
                skillAffect=True):
    if lostValue <= 0:
        GameWorld.Log('###技能伤害血量异常,数值错误 = %s,技能类型ID = %s' % (lostValue, skillTypeID))
        return
@@ -1257,28 +1254,26 @@
        # 没有血量不能再触发
        return
    
    if reduceHP :
        lostValue = AttackCommon.CalcAtkProDef(buffOwner, curObj, lostValue, curSkill, tick)
        # 血盾
        lostValue = AttackCommon.CalcBloodShield(buffOwner, curObj, lostValue)
        #剩余血量
        remainHP = max(curObjHP_BeforeAttack - lostValue , 0)
        #NPC处理
        if curObjType == IPY_GameWorld.gotNPC:
            #宠物特殊处理
            if curObj.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
                PetControl.SetPetHP(curObj, remainHP)
            else:
                GameObj.SetHP(curObj, remainHP)
                if not view :   # 已广播的不重复
                    curObj.Notify_HPEx()
        #其他对象逻辑处理
    if skillAffect:
        lostValue = AttackCommon.CalcHurtHPWithBuff(buffOwner, curObj, lostValue, curSkill, tick)
    #剩余血量
    remainHP = max(curObjHP_BeforeAttack - lostValue , 0)
    #NPC处理
    if curObjType == IPY_GameWorld.gotNPC:
        #宠物特殊处理
        if curObj.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
            PetControl.SetPetHP(curObj, remainHP)
        else:
            # 已广播的不重复
            GameObj.SetHP(curObj, remainHP, not view)
            GameObj.SetHP(curObj, remainHP)
            if not view :   # 已广播的不重复
                curObj.Notify_HPEx()
    #其他对象逻辑处理
    else:
        # 已广播的不重复
        GameObj.SetHP(curObj, remainHP, not view)
    
    AttackCommon.WriteHurtLog(buffOwner, curObj, curSkill, lostValue, hurtType, "持续掉血")
    
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_39.py
@@ -12,12 +12,8 @@
#------------------------------------------------------------------------------ 
import ChConfig
import BaseAttack
import GameObj
import SkillCommon
import IPY_GameWorld
import GameWorld
import SkillShell
import AttackCommon
import NPCCommon
#------------------------------------------------------------------------------ 
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_9.py
@@ -65,7 +65,9 @@
    #GameWorld.DebugLog("-----技能冲锋模板9 %s %s"%([attacker.GetPosX(), attacker.GetPosY()], [destX, destY]))
    attacker.ChangePos(destX, destY)
    if curSkill.GetSkillID() == ChConfig.Def_SkillID_Somersault:
        attacker.SetDict(ChConfig.Def_PlayerKey_SomersaultTime, tick)
    #===========================================================================
    # if curSkill.GetSkillID() == ChConfig.Def_SkillID_Somersault:
    #    attacker.SetDict(ChConfig.Def_PlayerKey_SomersaultTime, tick)
    #===========================================================================
    return result
    
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4507.py
@@ -14,7 +14,7 @@
import ChConfig
import GameWorld
import IPY_GameWorld
import SkillCommon
import AttackCommon
def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
    if not defender:
@@ -22,21 +22,19 @@
    if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
        return False
    curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
    if not curSkill:
        return
    buffType = SkillCommon.GetBuffType(curSkill)
    buffTuple = SkillCommon.GetBuffManagerByBuffType(attacker, buffType)
    #通过类型获取目标的buff管理器为空,则跳出
    if buffTuple == ():
        return
    buffManager = buffTuple[0]
    buff = buffManager.FindBuff(skillID)
    if not buff:
        return
    return buff.GetValue() == defender.GetID()
    if passiveEffect.GetEffectValue(1):
        # 第一目标
        if AttackCommon.GetFirstDefenderID(attacker) != defender.GetID():
            return False
    if passiveEffect.GetEffectValue(2):
        useSkill = skillkwargs.get("useSkill", None)
        if not useSkill:
            return False
        # 普通攻击有效
        if useSkill.GetFuncType() != ChConfig.Def_SkillFuncType_NormalAttack:
            return False
    return True
def GetValue(attacker, defender, passiveEffect):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4531.py
@@ -1,10 +1,12 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#
# @todo: buff中被攻击反弹自身最大攻击力XX%伤害
##@package
#
# @todo: buff中被标记的攻击者攻击标记方,层级最后一次反弹伤害
#
# @author: Alee
# @date 2018-1-30 下午05:11:45
# @date 2019-4-27 下午10:25:12
# @version 1.0
#
# @note: 
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4532.py
New file
@@ -0,0 +1,57 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#
##@package
#
# @todo: buff中对第一目标暴击触发技能  附加第X倍数次普攻暴击触发
#
# @author: Alee
# @date 2019-4-27 下午10:19:51
# @version 1.0
#
# @note:
#
#---------------------------------------------------------------------
import ChConfig
import GameWorld
import SkillCommon
import BuffSkill
def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
    if passiveEffect.GetEffectValue(0):
        useSkill = skillkwargs.get("useSkill", None)
        if not useSkill:
            return False
        # 普通攻击有效
        if useSkill.GetFuncType() != ChConfig.Def_SkillFuncType_NormalAttack:
            return False
        curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
        if not curSkill:
            return False
        buffType = SkillCommon.GetBuffType(curSkill)
        buffTuple = SkillCommon.GetBuffManagerByBuffType(attacker, buffType)
        #通过类型获取目标的buff管理器为空,则跳出
        if buffTuple == ():
            return False
        buffManager = buffTuple[0]
        buff = buffManager.FindBuff(curSkill.GetSkillTypeID())
        if not buff:
            return False
        buff.SetValue2(buff.GetValue2() + 1)
        if buff.GetValue2()%passiveEffect.GetEffectValue(0) != 0:
            return False
    return True
def GetSkillData(passiveEffect):
    skillID = passiveEffect.GetEffectValue(1)
    return GameWorld.GetGameData().GetSkillBySkillID(skillID)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4004.py
@@ -29,7 +29,5 @@
        if GameObj.GetHP(defender)*ChConfig.Def_MaxRateValue/GameObj.GetMaxHP(defender) >= hpPer:
            return False
        
        # 记录此目标,不使用其他接口是因为有可能被改变,如一段时间只对触发的目标玩家提高暴击率
        attacker.SetDict(ChConfig.Def_PlayerKey_DefenderObjID, defender.GetID())
        
    return GameWorld.CanHappen(effect.GetEffectValue(0))
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4006.py
New file
@@ -0,0 +1,29 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#
##@package
#
# @todo: 对第一目标暴击时触发技能 --特殊效果转为附加效果触发,且需主效果不使被动技能进入CD才可触发
#
# @author: Alee
# @date 2019-4-25 下午01:57:16
# @version 1.0
#
# @note:
#
#---------------------------------------------------------------------
import GameWorld
import SkillShell
import GameObj
def CheckCanHappen(attacker, defender, effect, curSkill):
    skillID = effect.GetEffectValue(0)
    if skillID:
        # 转为附加效果触发,且需主效果不使被动技能进入CD才可触发
        useSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
        if not useSkill:
            return False
        SkillShell.UsePassiveTriggerSkill(attacker, useSkill, defender, GameWorld.GetGameWorld().GetTick(), True)
        return False
    return True
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4094.py
New file
@@ -0,0 +1,25 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#
##@package
#
# @todo: 提高暴击概率
#
# @author: Alee
# @date 2019-4-27 下午10:43:37
# @version 1.0
#
# @note:
#
#---------------------------------------------------------------------
import GameObj
def CheckCanHappen(attacker, defender, effect, curSkill):
    if not GameObj.GetPyPlayerState(defender, effect.GetEffectValue(1)):
        #GameWorld.DebugLog("状态触发----%s"%effect.GetEffectValue(1))
        return False
    return True
def GetValue(attacker, defender, effect):
    return effect.GetEffectValue(0)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4095.py
New file
@@ -0,0 +1,21 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#
##@package
#
# @todo: 提高暴击概率
#
# @author: Alee
# @date 2019-4-27 下午10:43:37
# @version 1.0
#
# @note:
#
#---------------------------------------------------------------------
def CheckCanHappen(attacker, defender, effect, curSkill):
    return True
def GetValue(attacker, defender, effect):
    return effect.GetEffectValue(0)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4096.py
New file
@@ -0,0 +1,25 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#
##@package
#
# @todo: 暴击增加技能伤害
#
# @author: Alee
# @date 2019-4-27 下午11:31:01
# @version 1.0
#
# @note:
#
#---------------------------------------------------------------------
import ChConfig
def CheckCanHappen(attacker, defender, effect, curSkill):
    return True
def GetValue(attacker, defender, effect):
    return float(effect.GetEffectValue(0))/ChConfig.Def_MaxRateValue
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4097.py
New file
@@ -0,0 +1,28 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#
##@package
#
# @todo: 暴击增加技能伤害
#
# @author: Alee
# @date 2019-4-27 下午11:31:01
# @version 1.0
#
# @note:
#
#---------------------------------------------------------------------
import ChConfig
import GameWorld
import GameObj
import PlayerControl
def CheckCanHappen(attacker, defender, effect, curSkill):
    return True
def GetValue(attacker, defender, effect):
    return effect.GetEffectValue(0)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
@@ -373,6 +373,10 @@
             4091:ChConfig.TriggerType_SkillOverNoAttack,   # 技能释放后 与TriggerType_AttackOver相反19,
             4092:ChConfig.TriggerType_SkillSuccess,  # 任何技能释放成功都可触发 76  减印记
             4093:ChConfig.TriggerType_NoControl,   # 使关联技能不受控制 78
             4094:ChConfig.TriggerType_Buff_AddSuperHitRate, # BUFF类:增加暴击率
             4095:ChConfig.TriggerType_SuperHitSuckBloodPer, # BUFF类: 暴击百分比吸血, 79
             4096:ChConfig.TriggerType_SuperHitAddSkillPer, # 暴击增加技能伤害
             4097:ChConfig.TriggerType_BurnPer, # 灼烧伤害百分比 81
             }
    return tdict.get(effectID, -1) 
    #===========================================================================
@@ -420,6 +424,7 @@
             4529:ChConfig.TriggerType_Buff_SuckBloodPer,   # BUFF类: 百分比吸血, 此处非属性类
             4530:ChConfig.TriggerType_Buff_AttackSubLayer,  # BUFF类:攻击减buff层,0消失
             4531:ChConfig.TriggerType_BounceHPPerByAttacker,  # 反弹伤害百分比值, 由攻击方决定 77
             4532:ChConfig.TriggerType_SuperHit,    # buff中对第一目标暴击触发技能
             
             803:ChConfig.TriggerType_BloodShield,  # 血盾
             806:ChConfig.TriggerType_BloodShield,  # 血盾
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -3436,16 +3436,6 @@
    return True
#===============================================================================
# Def_Effect_GoddessAddHP = 1300    # 加血 (压总值血量百分比)
# Def_Effect_AddHPValue_All = 1027    # 持续加血(压总值攻击)
# Def_Effect_LostHPValue_All = 1033    # 持续减血(压总值攻击)
# Def_Effect_LostAndAddHPValue_All = 1050    # 持续吸血(压总值攻击)
# Def_Effect_LostHPValue_Single = 1201    # 持续单次减血计算 攻击
# Def_Effect_AddHPValue_Single = 1202    # 持续单次加血计算 攻击
# Def_Effect_LostHP_MaxHP = 1089    # 持续减血(压总值, 血量百分比)
#===============================================================================
#waring: 此值影响了BUFF的替换规则,值大替换小的
##添加BUFF前压入BUFF的值,这边只计算和攻击者相关,仅支持放在效果1的buff
# @param attacker 攻击方