From d41a44a9fd316c021c4e85bde9cb0fab4c2e0be1 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 15 三月 2019 17:23:43 +0800
Subject: [PATCH] 2683 子 天赋技能和新增双职业各两个技能 / 【后端】天赋技能

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4508.py  |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4514.py  |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1089.py    |   26 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_1015.py           |   41 ++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_809.py            |   27 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py     |   76 +++++---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_43.py     |   46 +++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4524.py  |   58 ++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4073.py |   23 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py             |    8 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4525.py  |   41 ++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4072.py |   27 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py                     |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4520.py  |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py                   |   28 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4519.py  |   11 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py                             |    8 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4071.py |   21 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4053.py |   28 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                            |   14 +
 20 files changed, 441 insertions(+), 52 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
index f35908b..2be3515 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
@@ -1639,31 +1639,7 @@
     
     WriteHurtLog(attacker, defObj, curSkill, hurtValue, hurtType, "公式层")
     
-    # 优先处理神兵护盾
-    hurtValue = CalcAtkProDef(atkObj, defObj, hurtValue, curSkill, tick)
-
-    # 伤害吸收盾回血型
-    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))
-
-    if defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldValue):
-        # 麒麟护盾吸收伤害,将抵消的伤害存储
-        absortValue = int(defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldValue)/float(ShareDefine.Def_MaxRateValue)*hurtValue)   
-        hurtValue -= absortValue
-        
-        # 吸收至指定血量比例值
-        absorbHurt = defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShield)
-        if absorbHurt <= defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldMax):
-            maxValue = min(absorbHurt + absortValue, defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldMax))
-            defObj.SetDict(ChConfig.Def_PlayerKey_AbsorbShield, maxValue)    # 记录护盾吸收的伤害用于爆炸
+    hurtValue = CalcHurtHPWithBuff(atkObj, defObj, hurtValue, curSkill, tick)
 
     # buff减少伤害百分比
     reducePer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defObj, atkObj, None, ChConfig.TriggerType_ReduceHurtHPPer)
@@ -1767,6 +1743,46 @@
     #===========================================================================
     
     return resultHurtType
+
+# 计算伤害后,因各种buff和状态的影响处理
+def CalcHurtHPWithBuff(atkObj, defObj, hurtValue, curSkill, tick):
+    # 优先处理神兵护盾
+    hurtValue = CalcAtkProDef(atkObj, defObj, hurtValue, curSkill, tick)
+
+    # 伤害吸收盾回血型
+    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))
+
+    if defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldValue):
+        # 麒麟护盾吸收伤害,将抵消的伤害存储
+        absortValue = int(defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldValue)/float(ShareDefine.Def_MaxRateValue)*hurtValue)   
+        hurtValue -= absortValue
+        
+        # 吸收至指定血量比例值
+        absorbHurt = defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShield)
+        if absorbHurt <= defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldMax):
+            maxValue = min(absorbHurt + absortValue, defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldMax))
+            defObj.SetDict(ChConfig.Def_PlayerKey_AbsorbShield, maxValue)    # 记录护盾吸收的伤害用于爆炸
+
+    # 天罡护法,将期间受到的伤害总值用于回血,不改变伤害
+    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))
+    return hurtValue
+
 
 
 # GM 命令  HurtLog 查看战斗伤害日志
@@ -1951,6 +1967,11 @@
 
         # 暴击增加技能伤害
         atkSkillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitSkillPer)
+        atkSkillPer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitSkillPer)
+        
+        # buff中暴击减层,无触发技能
+        PassiveBuffEffMng.OnPassiveBuffTrigger(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitSubLayer, tick)
+
 
     if isLuckyHit:
         # 会心一击时增加会心伤害百分比 
@@ -2195,7 +2216,8 @@
         atkObj.SetDict(ChConfig.Def_PlayerKey_LastHurtValue, resultHurtType.RealHurtHP)
         if defObj.GetGameObjType() == IPY_GameWorld.gotNPC:
             atkObj.SetDict(ChConfig.Def_PlayerKey_LastHurtNPCObjID, defObj.GetID())
-        
+        else:
+            defObj.SetDict(ChConfig.Def_PlayerKey_LastAttackerObjID, atkObj.GetID())
     return
 
 
@@ -2348,7 +2370,7 @@
         atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
         
         atkBackHP += int(hurtValue * atkBackHPPer*1.0 / ChConfig.Def_MaxRateValue)
-
+        
     suckHP += atkBackHP
     
     if suckHP <= 0:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
index 4edf89d..d70b3fb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
@@ -1499,9 +1499,10 @@
         curPlayerSkill = curPlayer.GetSkillManager().FindSkillBySkillTypeID(skillTypeID)
         
         if curPlayerSkill:
-
-            #设置玩家所学技能冷却CD
-            SkillCommon.SetSkillRemainTime(curPlayerSkill, PlayerControl.GetReduceSkillCDPer(curPlayer), tick, curPlayer)
+            
+            if not IsSkipSkillCD:
+                #设置玩家所学技能冷却CD
+                SkillCommon.SetSkillRemainTime(curPlayerSkill, PlayerControl.GetReduceSkillCDPer(curPlayer), tick, curPlayer)
             #调用任务触发器
             #EventShell.EventRespons_UseSkillOK(curPlayer, skillTypeID)
             #执行连环被动技能处理
@@ -1516,6 +1517,27 @@
     # 普攻和对敌技能
     UseSkillOver(curPlayer, target, curSkill, tick)
     return True
+
+# 无冷却状态
+def IsSkipSkillCD(curPlayer, target, curSkill, tick):
+    # 暴击情况下
+    isSuperHit = False
+    for i in xrange(g_skillHurtList.GetHurtCount()):
+        hurtObj = g_skillHurtList.GetHurtAt(i)
+        if not hurtObj:
+            continue
+        
+        if hurtObj.GetAttackType() == ChConfig.Def_HurtType_SuperHit:
+            isSuperHit = True
+            break
+    
+    if isSuperHit:
+        if PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(curPlayer, None, curSkill, ChConfig.TriggerType_SuperHitSkipCD):
+            return True
+        if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(curPlayer, None, curSkill, ChConfig.TriggerType_SuperHitSkipCD):
+            return True
+    return False
+    
     
 # 根据伤血类型触发技能,群攻只触发一次,放在伤血列表被清之前
 def OnHurtTypeTriggerSkill(attacker, target, curSkill, tick):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index f51c7c8..e180657 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -573,6 +573,7 @@
 Def_Skill_Effect_AbsorbShield = 801  # A值记录吸收伤害值,B值记录吸收值上限为xx%血量上限值 C值为释放的爆炸技能ID 如麒麟盾
 Def_Skill_Effect_AbsorbShieldXMZJ = 802    # 须弥真界 神兵技能吸收伤害 百分比
 Def_Skill_Effect_BoomSeedHurt = 804 # BUFF种子单层伤害
+Def_Skill_Effect_StoreBlood = 809 # 将期间受到的伤害总值,用于最后回血,不影响伤害
 Def_Skill_Effect_AttackReplace = 1009  #攻击计算,野外小怪伤害替换1010 (2018-03-07增加精英怪)
 Def_Skill_Effect_Attack = 1010  #攻击计算
 Def_Skill_Effect_LayerCnt = 1011 # BUFF层级数量 A值层数,B值层数处理方式0递增1递减
@@ -632,7 +633,7 @@
 
 
 #---------需要记录在buff管理器中的效果ID,主要用于查找用---------------------------
-Def_BuffManager_EffectsID = [Def_Skill_Effect_ProBloodPer, Def_Skill_Effect_AbsorbShieldXMZJ]
+Def_BuffManager_EffectsID = [Def_Skill_Effect_ProBloodPer, Def_Skill_Effect_AbsorbShieldXMZJ, Def_Skill_Effect_StoreBlood]
 #-------------------------------------------------------------------------
 
 #基础属性效果ID
@@ -3017,13 +3018,16 @@
     Def_PlayerState_LoseBlood2, # 职业2持续掉血状态 14
     Def_PlayerState_LoseBlood3, # 职业3持续掉血状态 15
     Def_PlayerState_MissSneerAtk, # 对嘲讽攻击免疫表现为miss 16
-) = range(17)
+    Def_PlayerState_BeInAir, # 浮空(做法同眩晕类) 17
+) = range(18)
 
 #---SetDict 含NPC字典KEY,不存于数据库---
 Def_GameObjKey_InheritOwner = "InheritOwner"  # 类暴风雪计算时用主人属性
 
 #---SetDict 玩家字典KEY,不存于数据库---
 # key的长度不能超过29个字节
+Def_PlayerKey_AddBuffLayer = "addBuffLayer" # buff当前层数
+Def_PlayerKey_BuffHurtCnt = "BuffHurtCnt" # 持续buff掉血次数
 Def_PlayerKey_Zhansha = "zhansha"   # 斩杀标志
 Def_PlayerKey_ZhuxianRate = "ZXRate"   # 诛仙一击的概率
 Def_PlayerKey_ZhuxianHurtPer = "ZXHurtPer"   # 诛仙一击的伤害%
@@ -3175,6 +3179,7 @@
 Def_PlayerKey_IgnoreDefRateReduce = "IgnoreDefRateReduce"  # 抗无视防御概率
 Def_PlayerKey_LastHurtValue = "LastHurtValue" # 最后一次伤害值
 Def_PlayerKey_LastHurtNPCObjID = "LastHurtNPCObjID" # 最后攻击的NPCObjID
+Def_PlayerKey_LastAttackerObjID = "LastAttackerObjID" # 被攻击者记录的最近攻击玩家ID
 Def_PlayerKey_ReduceSkillCDPer = "ReduceSkillCDPer" # 减技能CD万分率
 Def_PlayerKey_CommMapExpRate = "CommMapExpRate" # 常规地图经验倍率加成
 Def_PlayerKey_FinalHurtPer = "FinalHurtPer" # 最终伤害百分比
@@ -4537,7 +4542,10 @@
 TriggerType_BeLuckyHit, # 被会心一击触发技能 64
 TriggerType_BeLuckyHitSubPer, # 减少受到的会心伤害 65
 TriggerType_ZhongjiZhansha, # 终极斩杀 66
-) = range(1, 67)
+TriggerType_SuperHitSubLayer, # 暴击减层 67
+TriggerType_SuperHitSkipCD, # 暴击无冷却 68
+TriggerType_BuffHurtCnt, # 当持续buff伤害第X次时触发技能 69
+) = range(1, 70)
 
 
 # NPC功能类型定义
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
index a212d18..eb752ad 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
@@ -55,14 +55,16 @@
 #  @param pyState 状态
 #  @param isTrue 是否设置该状态
 #  @return None
-def SetPyPlayerState(gameObj, pyState, isTrue):
+def SetPyPlayerState(gameObj, pyState, isAdd):
     if pyState not in ChConfig.Def_PlayerStateList:
         return
     
     curState = gameObj.GetDictByKey(ChConfig.Def_PlayerKey_CurState)
-    if isTrue:
+    if isAdd:
+        # 增加
         updState = curState | pow(2, pyState)
     else:
+        # 删除
         if curState & pow(2, pyState) == 0:
             return
         else:
@@ -70,7 +72,7 @@
 
     
     #GameWorld.DebugLog("SetPyPlayerState (%s - %s), curState=%s,updState=%s" 
-    #                   % (pyState, isTrue, curState, updState))
+    #                   % (pyState, isAdd, curState, updState))
     gameObj.SetDict(ChConfig.Def_PlayerKey_CurState, updState)
     return
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
index ca17209..3c3f3ae 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
@@ -220,10 +220,10 @@
                         curBuff.SetLayer(curLayerCnt + 1)
                         #BUFF层级变化触发被动
                         if buffOwner:
-                            curObj.SetDict("addBuffLayer", curBuff.GetLayer())
+                            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("addBuffLayer", 0)
+                            curObj.SetDict(ChConfig.Def_PlayerKey_AddBuffLayer, 0)
                     else:
                         curBuff.SetLayer(layerMaxCnt)
                     changeLayer = True
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1089.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1089.py
index 8f90924..2e5560a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1089.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1089.py
@@ -16,6 +16,8 @@
 import GameWorld
 import ChConfig
 import GameObj
+import IPY_GameWorld
+import PassiveBuffEffMng
 #---------------------------------------------------------------------
 #全局变量
 #---------------------------------------------------------------------
@@ -40,7 +42,28 @@
     curBuffSkillID = curBuff.GetSkill().GetSkillTypeID()
     
     SkillCommon.SkillLostHP(defender, curBuffSkillID, buffOwner, singleDecHP, tick, hurtType=ChConfig.Def_HurtType_Bleed)
+    if curEffect.GetEffectValue(2) and buffOwner:
+        SkillCommon.SkillAddHP(buffOwner, curBuffSkillID, singleDecHP)
+
+    OnPassiveSkillByHurtCount(defender, curBuff, curEffect, buffOwner)
     return
+
+
+def OnPassiveSkillByHurtCount(defender, curBuff, curEffect, buffOwner):
+    if not buffOwner:
+        return
+    if buffOwner.GetGameObjType() != IPY_GameWorld.gotPlayer:
+        return
+    # 执行次数。 当汲灵对目标造成3次伤害时,可降低目标20%的防御
+    curBuff.SetValue1(curBuff.GetValue1() + 1)
+    tick = GameWorld.GetGameWorld().GetTick()
+    
+    defender.SetDict(ChConfig.Def_PlayerKey_BuffHurtCnt, curBuff.GetValue1())
+    PassiveBuffEffMng.OnPassiveSkillTrigger(buffOwner, defender, curBuff.GetSkill(), ChConfig.TriggerType_BuffHurtCnt, tick)
+    defender.SetDict(ChConfig.Def_PlayerKey_BuffHurtCnt, 0)
+    
+    return
+
 
 ## 持续性Buff消失
 #  @param defender 承受者
@@ -63,6 +86,9 @@
     buffOwner = SkillCommon.GetBuffOwner(curBuff)
     
     SkillCommon.SkillLostHP(defender, curSkill.GetSkillTypeID(), buffOwner, buffValue, tick, hurtType=ChConfig.Def_HurtType_Bleed)
+    
+    # 执行次数
+    OnPassiveSkillByHurtCount(defender, curBuff, curEffect, buffOwner)
     return
 
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_1015.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_1015.py
new file mode 100644
index 0000000..3d62c4c
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_1015.py
@@ -0,0 +1,41 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 吸收对方属性,有目标技能(41),最多3种属性, 增益buff
+#
+# @author: Alee
+# @date 2019-3-15 下午04:48:41
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import BuffSkill
+import IPY_GameWorld
+#---------------------------------------------------------------------
+
+## buff线性增加属性
+#  @param defender Buff承受者
+#  @param curEffect 技能效果
+#  @param calcDict 技能效果累加总表
+#  @return None
+def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
+    attrType = curEffect.GetEffectValue(0)
+    
+    vauleFunc = [curBuff.GetValue, curBuff.GetValue1, curBuff.GetValue2]
+    calcDict[attrType] = calcDict.get(attrType, 0) + vauleFunc[min(2, curEffect.GetEffectValue(2))]()
+    return
+
+
+## 返回buff类型,线性与否
+#  @param 
+#  @return None
+#  @remarks 函数详细说明.  
+def GetCalcType():
+    return ChConfig.TYPE_Linear
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_809.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_809.py
new file mode 100644
index 0000000..d5470fe
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_809.py
@@ -0,0 +1,27 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 将期间受到的伤害总值,用于最后回血,不影响伤害
+#
+# @author: Alee
+# @date 2019-3-14 下午08:34:57
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import SkillCommon
+
+def OnBuffDisappear(curObj, curSkill, curBuff, curEffect, tick):
+    if curObj.GetHP() <= 0:
+        return
+    
+    value = curBuff.GetValue()
+    if value <= 0:
+        return
+    
+    SkillCommon.SkillAddHP(curObj, 0, value)
+    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_43.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_43.py
new file mode 100644
index 0000000..9460df8
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_43.py
@@ -0,0 +1,46 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 吸收对方属性,有目标技能(41), 增益buff
+#
+# @author: Alee
+# @date 2019-3-15 下午04:05:05
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import BaseAttack
+import BuffSkill
+import IPY_GameWorld
+import SkillCommon
+import EffGetSet
+
+
+def UseSkill(attacker, defender, curSkill, tagRoundPosX, tagRoundPosY, isEnhanceSkill, tick):
+    if not defender:
+        return
+    if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
+        return
+    
+    addBuffValueList = []
+    # 效果ID | 属性项,万分率
+    # 最多吸收目标3种属性 存入buffvalue
+    for i in range(3):
+        attrIndex = curSkill.GetEffect(i).GetEffectValue(0)
+        if not attrIndex:
+            break
+        curValue = EffGetSet.GetValueByEffIndex(defender, attrIndex)
+        curValue = int(curValue * curSkill.GetEffect(i).GetEffectValue(1) / ChConfig.Def_MaxRateValue)
+        
+        addBuffValueList.append(curValue)
+        
+    buffType = SkillCommon.GetBuffType(curSkill)
+    BuffSkill.DoAddBuff(attacker, buffType, curSkill, tick, addBuffValueList, attacker)
+    
+    #处理技能触发和攻击成功逻辑
+    return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4508.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4508.py
index ab1c352..07c913c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4508.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4508.py
@@ -68,5 +68,3 @@
     return True
 
 
-def GetValue(attacker, defender, passiveEffect):
-    return 0
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4514.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4514.py
index fdf8ad8..0bc1404 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4514.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4514.py
@@ -39,5 +39,3 @@
     return True
 
 
-def GetValue(attacker, defender, passiveEffect):
-    return 0
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4519.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4519.py
index ca05704..f0e8fc5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4519.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4519.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 # -*- coding: GBK -*-
 #
-# @todo: 进入濒死状态 血量为1, 不触发技能
+# @todo: 进入濒死状态 血量为1
 #
 # @author: Alee
 # @date 2017-12-9 下午09:41:44
@@ -30,12 +30,15 @@
             return False
     
     attacker.SetHP(1)
-
-    return False
+    
+    # False 可用于多次触发不死的作用
+    return True if passiveEffect.GetEffectValue(1) else False
 
 
 def GetSkillData(passiveEffect):
-    return
+    skillID = passiveEffect.GetEffectValue(1)
+
+    return GameWorld.GetGameData().GetSkillBySkillID(skillID)
 
 def AfterUsePassiveSkill(attacker, defender, passiveEffect, tick):
     return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4520.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4520.py
index 0754760..18d19b5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4520.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4520.py
@@ -25,7 +25,7 @@
     if passiveEffect.GetEffectValue(2) and passiveEffect.GetEffectValue(2) != skillTypeID:
         # 验证关联技能
         return False
-    return defender.GetDictByKey("addBuffLayer") == passiveEffect.GetEffectValue(0)
+    return defender.GetDictByKey(ChConfig.Def_PlayerKey_AddBuffLayer) == passiveEffect.GetEffectValue(0)
 
 
 def GetSkillData(passiveEffect):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4524.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4524.py
new file mode 100644
index 0000000..53d4bc9
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4524.py
@@ -0,0 +1,58 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+# @todo: buff暴击攻击减自身buff层
+#
+# @author: Alee
+# @date 2018-1-30 下午05:11:45
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import SkillCommon
+import BuffSkill
+import SkillShell
+import IPY_GameWorld
+
+def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
+    # 先判断概率
+    rate = passiveEffect.GetEffectValue(0)
+    if rate and not GameWorld.CanHappen(rate):
+        return False
+    
+    FBSkillValid = passiveEffect.GetEffectValue(1)
+    if FBSkillValid == 0:
+        # 0 为 只有主动法宝技能暴击可触发
+        useSkill = skillkwargs.get("useSkill", None)
+        if not useSkill:
+            return False
+        if useSkill.GetFuncType() != ChConfig.Def_SkillFuncType_FbSkill:
+            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
+
+    if buff.GetLayer() <= 0:
+        return False
+    
+    BuffSkill.SetBuffLayer(attacker, buff, buff.GetLayer()-1, skillTypeID=curSkill.GetSkillTypeID())
+    
+    return True
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4525.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4525.py
new file mode 100644
index 0000000..8a4d567
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4525.py
@@ -0,0 +1,41 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+# @todo: buff中技能暴击无冷却
+#
+# @author: Alee
+# @date 2018-1-30 下午05:11:45
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import SkillCommon
+import BuffSkill
+import SkillShell
+import IPY_GameWorld
+
+def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
+    # 先判断概率
+    rate = passiveEffect.GetEffectValue(0)
+    if rate and not GameWorld.CanHappen(rate):
+        return False
+    
+    FBSkillValid = passiveEffect.GetEffectValue(1)
+    if FBSkillValid == 0:
+        # 0 为 只有主动法宝技能暴击可触发
+        useSkill = skillkwargs.get("useSkill", None)
+        if not useSkill:
+            return False
+        if useSkill.GetFuncType() != ChConfig.Def_SkillFuncType_FbSkill:
+            return False
+    
+    
+    return True
+
+
+def GetValue(attacker, defender, passiveEffect):
+    return 1
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4053.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4053.py
index fcee521..909b4eb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4053.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4053.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 # -*- coding: GBK -*-
 #
-# 对目标的buff层级达到第几层触发技能
+# 对目标的buff层级达到第几层触发技能, 附加效果指定目标为最近一次攻击的玩家
 #
 # @author: Alee
 # @date 2018-1-9 下午09:39:37
@@ -10,10 +10,30 @@
 # @note: 
 #
 #---------------------------------------------------------------------
-
+import SkillShell
+import GameWorld
+import ChConfig
+import IPY_GameWorld
 
 def CheckCanHappen(attacker, defender, effect, curSkill):   
+    if defender.GetDictByKey(ChConfig.Def_PlayerKey_AddBuffLayer) != effect.GetEffectValue(0):
+        return False
     
-    return defender.GetDictByKey("addBuffLayer") == effect.GetEffectValue(0)
+    if effect.GetEffectValue(1):
+        # 走到此逻辑 中buff和释放buff是同一个人
+        #附加效果指定目标为最近一次攻击的玩家
+        playerID = attacker.GetDictByKey(ChConfig.Def_PlayerKey_LastAttackerObjID)
+        if not playerID:
+            return False
+        curObj = GameWorld.GetObj(playerID, IPY_GameWorld.gotPlayer)
+        
+        #人物需要判断是否为空
+        if not curObj:
+            return False
+        if curObj.IsEmpty():
+            return False
     
-
+        #强行释放技能
+        SkillShell.UsePassiveTriggerSkill(attacker, curSkill, curObj, GameWorld.GetGameWorld().GetTick(), True)
+        return False
+    return True
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4071.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4071.py
new file mode 100644
index 0000000..066ae9e
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4071.py
@@ -0,0 +1,21 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+# @todo: 攻击将造成伤害的XX%转化为自身生命
+#
+# @author: Alee
+# @date 2018-1-9 下午09:39:37
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+import GameObj
+import ChConfig
+
+def CheckCanHappen(attacker, defender, effect, curSkill):   
+    return True
+    
+
+def GetValue(attacker, defender, effect):
+    return effect.GetEffectValue(0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4072.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4072.py
new file mode 100644
index 0000000..153d45c
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4072.py
@@ -0,0 +1,27 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 暴击有概率触发无技能冷却
+#
+# @author: Alee
+# @date 2019-3-14 下午06:01:20
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+import GameWorld
+import ChConfig
+
+def CheckCanHappen(attacker, defender, effect, curSkill):   
+    # 先判断概率
+    rate = effect.GetEffectValue(0)
+    if rate and not GameWorld.CanHappen(rate):
+        return False
+    
+    return True
+
+def GetValue(attacker, defender, effect):
+    return 1
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4073.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4073.py
new file mode 100644
index 0000000..29791ed
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4073.py
@@ -0,0 +1,23 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 当持续buff伤害第X次时触发技能
+#        当汲灵对目标造成3次伤害时,可降低目标20%的防御
+# @author: Alee
+# @date 2019-3-15 下午03:26:32
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+
+import ChConfig
+
+def CheckCanHappen(attacker, defender, effect, curSkill):   
+    if defender.GetDictByKey(ChConfig.Def_PlayerKey_BuffHurtCnt) != effect.GetEffectValue(0):
+        return False
+    
+    return True
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
index e262780..8c38c83 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
@@ -351,6 +351,9 @@
              4068:ChConfig.TriggerType_LockHP, # 锁血触发技能 63
              4069:ChConfig.TriggerType_ZhongjiZhansha, # 终极斩杀 64
              4070:ChConfig.TriggerType_DebuffOff,    # 抵消一次debuff 23
+             4071:ChConfig.TriggerType_Buff_SuckBloodPer,   # 攻击 百分比吸血
+             4072:ChConfig.TriggerType_SuperHitSkipCD, # 暴击无冷却 68
+             4073:ChConfig.TriggerType_BuffHurtCnt, # 当持续buff伤害第X次时触发技能 69
              }
     return tdict.get(effectID, -1) 
     #===========================================================================
@@ -375,12 +378,12 @@
              4506:ChConfig.TriggerType_BeAttackOver, # BUFF类:被攻击触发技能  只刷新属性 不触发技能
              4507:ChConfig.TriggerType_Buff_AddSuperHitRate, # BUFF类:增加暴击率
              4508:ChConfig.TriggerType_Buff_AttackSubLayer,  # BUFF类:攻击减buff层,0消失
-             4514:ChConfig.TriggerType_Buff_BeAttackSubLayer,  # BUFF类:被攻击减buff层,0消失
              4509:ChConfig.TriggerType_Buff_SuckBloodPer,   # BUFF类: 百分比吸血, 此处非属性类
              4510:ChConfig.TriggerType_Buff_MustBeHit,   # BUFF类: 无视闪避必中
              4511:ChConfig.TriggerType_AttackAddFinalValue,   #攻击增加输出伤害11
              4512:ChConfig.TriggerType_ReduceHurtHPPer, # 百分比减少攻击计算后伤害 
              4513:ChConfig.TriggerType_AttackAddFinalValue,   #攻击增加输出伤害11
+             4514:ChConfig.TriggerType_Buff_BeAttackSubLayer,  # BUFF类:被攻击减buff层,0消失
              4515:ChConfig.TriggerType_AddIceAtkPer,    # BUFF类:攻击附加真实伤害百分比
              4516:ChConfig.TriggerType_ChangeHurtToHP,    # BUFF类:buff中把受到伤害的xx%转化为生命值
              4517:ChConfig.TriggerType_DebuffOff,   # BUFF类: 抵消debuff
@@ -389,6 +392,9 @@
              4520:ChConfig.TriggerType_AddLayer, # BUFF类: 目标BUFF层级增加时 52
              4521:ChConfig.TriggerType_BeLuckyHitSubPer, # 减少受到的会心伤害 65
              4522:ChConfig.TriggerType_DebuffOff,   # BUFF类: 抵消debuff
+             4523:ChConfig.TriggerType_SuperHitSkillPer, # 暴击时,增加技能伤害 10
+             4524:ChConfig.TriggerType_SuperHitSubLayer, # 暴击减层 67
+             4525:ChConfig.TriggerType_SuperHitSkipCD, # 暴击无冷却 68
              
              803:ChConfig.TriggerType_BloodShield,  # 血盾
              806:ChConfig.TriggerType_BloodShield,  # 血盾

--
Gitblit v1.8.0