From bc915a9b717eccef3c8d825f9af79a7596394ac7 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 09 五月 2019 11:34:27 +0800
Subject: [PATCH] 6603 【后端】【2.0】增加新版的sp和被动技能

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py                    |   30 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4534.py  |   26 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4101.py |   33 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_801.py            |    5 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py             |   36 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4096.py |   36 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4503.py  |   31 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4098.py |   37 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_903.py            |   55 ++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4522.py  |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1090.py    |   46 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4517.py  |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py                |    2 
 Tool/数据库/ChangeAccount/ChangeAccount.py                                                                    |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4535.py  |   35 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4100.py |   30 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py     |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py    |    9 
 /dev/null                                                                                                  |   21 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py                     |   22 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4099.py |   45 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_30.py     |   91 ++++--
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py                             |   11 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_4012.py           |   34 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py        |   29 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                            |   14 
 26 files changed, 575 insertions(+), 112 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 edc2bf1..e091ed9 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
@@ -1566,6 +1566,8 @@
     
 # Elf灵为替身攻击,要取玩家的属性,NPC为主人则还是取灵
 def ElfChangeAttacker(attacker):
+    if not attacker:
+        return attacker
     if attacker.GetGameObjType() != IPY_GameWorld.gotNPC:
         # --玩家
         return attacker
@@ -2095,6 +2097,7 @@
     #  atkSkillPer 包含普攻,所以不是用技能增强处理
     atkSkillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddSkillPer)
     atkSkillPer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddSkillPer)
+    atkSkillPer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defObj, atkObj, curSkill, ChConfig.TriggerType_BeAttackAddSkillPer)
     
     if isSuperHit and hurtType == ChConfig.Def_HurtType_SuperHit:
         aSuperHit += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitValue)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 4409a43..2af735a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -583,6 +583,7 @@
 Def_Skill_Effect_PowerPart = 1206  # 充能能量分段,触发即算一次充能,拉进度条蓄力
 Def_Skill_Effect_ProcessAttack = 1314  # 间隔性攻击,A值为攻击次数,B值为是否广播客户端
 Def_Skill_Effect_BuffTick = 9999    #BUFF的时间处理间隔
+Def_Skill_Effect_BurnToAddHP = 1091    #buff中灼烧伤害转化吸血给 放灼烧者
 Def_Skill_Effect_ProBloodPer = 4505    #buff中中毒伤害百分比增加(给受害者的buff)
 
 #写死的技能效果ID------------NPC专用
@@ -629,7 +630,8 @@
 
 
 #---------需要记录在buff管理器中的效果ID,主要用于查找用---------------------------
-Def_BuffManager_EffectsID = [Def_Skill_Effect_AbsorbShield, Def_Skill_Effect_AbsorbShieldXMZJ, Def_Skill_Effect_StoreBlood]
+Def_BuffManager_EffectsID = [Def_Skill_Effect_AbsorbShield, Def_Skill_Effect_AbsorbShieldXMZJ, 
+                             Def_Skill_Effect_StoreBlood, Def_Skill_Effect_BurnToAddHP, Def_Skill_Effect_BuffState]
 #-------------------------------------------------------------------------
 
 #基础属性效果ID
@@ -645,9 +647,6 @@
     # 非线性增加
     #1015:("NoLinePlus", [TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax]),  # 提高攻击力百分比                             
     
-    # 非线性减少
-    #1098:("NoLineReduce", [TYPE_Calc_AttrATKMax, TYPE_Calc_AttrATKMin,
-    #                       TYPE_Calc_AttrMATKMax, TYPE_Calc_AttrMATKMin]),     # 降低攻击百分比   
 
     # 根据等级段线性增加,效果B值为等级段配置
     500:("LinePlusByLV", [TYPE_Calc_HPCureEnhance]),   # 提高血瓶恢复效果
@@ -3018,13 +3017,14 @@
     Def_PlayerState_LimitSkill, # 禁魔状态 10
     Def_PlayerState_LimitAddHP, # 禁疗状态 11
     Def_PlayerState_Blind, # 致盲状态 12
-    Def_PlayerState_LoseBlood1, # 灼烧 13
+    Def_PlayerState_Burn, # 灼烧 13
     Def_PlayerState_LoseBlood2, # 职业2持续掉血状态 14
     Def_PlayerState_LoseBlood3, # 职业3持续掉血状态 15
     Def_PlayerState_MissSneerAtk, # 对嘲讽攻击免疫表现为miss 16
     Def_PlayerState_BeInAir, # 浮空(做法同眩晕类) 17
     Def_PlayerState_zqdlj, # 紫气东来金灵根技能状态 18
-) = range(19)
+    Def_PlayerState_Ice, # 寒冰状态(同减速) 19
+) = range(20)
 
 #---SetDict 含NPC字典KEY,不存于数据库---
 Def_GameObjKey_InheritOwner = "InheritOwner"  # 类暴风雪计算时用主人属性
@@ -4421,7 +4421,7 @@
 TriggerType_AttackKill, # 斩杀
 TriggerType_WillDead,   # 进入濒死状态时触发技能 25
 TriggerType_BuffBoom,   # 中毒后爆炸
-TriggerType_Success_Buff_SkillPer,   # 提高4501成功概率
+TriggerType_BeAttackAddSkillPer,   # 被攻击提高技能伤害
 TriggerType_HurtObjAddBuff,   # 在算伤害时群攻1对1加buff,可用于一个伤害多次触发
 TriggerType_BeBoomSeed, # 被动引爆视野内对象的buff种子 29
 TriggerType_AttackCnt,  # 增加技能攻击数量(效果ID1200) 30
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
index fcc507e..0439145 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
@@ -86,14 +86,21 @@
 #  @param pyState 状态
 #  @return 是否该状态
 #  @remarks 该状态为buff对应的自定义状态效果
-#  目前当目标身上多个buff都有同一效果时(如定身),在一个buff消失时会解除该状态
-#  故该状态标记仅为一个非精确的标记,应用中请注意!!!(当且仅当多个buff有同一个效果时会提前结束该状态)
+
+#===============================================================================
+# 此问题在4012 消失时处理
+# #  目前当目标身上多个buff都有同一效果时(如定身),在一个buff消失时会解除该状态
+# #  故该状态标记仅为一个非精确的标记,应用中请注意!!!(当且仅当多个buff有同一个效果时会提前结束该状态)
+#===============================================================================
 def GetPyPlayerState(gameObj, pyState):
     curState = gameObj.GetDictByKey(ChConfig.Def_PlayerKey_CurState)
     
     state = curState & pow(2, pyState) 
     return state
 
+def ClearPyPlayerState(gameObj):
+    gameObj.SetDict(ChConfig.Def_PlayerKey_CurState, 0)
+    return
 
 def GetPetDamPer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetDamPer)
 def SetPetDamPer(gameObj, value): 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 294025a..12aa572 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -95,6 +95,7 @@
 import PlayerDogz
 import ChPlayer
 import GMShell
+import GameObj
 
 import random
 import types
@@ -5162,6 +5163,7 @@
         DoPlayerDead(curPlayer)
         
         PlayerTJG.PlayerTJGReborn(curPlayer, tick)
+        GameObj.ClearPyPlayerState(curPlayer)
         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 88f9e7d..6a8df92 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
@@ -25,6 +25,7 @@
 import OperControlManager
 import GameObj
 import CrossPlayerData
+import AttackCommon
 #---------------------------------------------------------------------
 
 #---------------------------------------------------------------------
@@ -51,6 +52,8 @@
     and SkillCommon.GetSkillBattleType(curSkill) == ChConfig.Def_BattleRelationType_CommNoBoss:
         # 释放后 对指定BOSS无效的技能
         return True
+    
+    buffOwner = AttackCommon.ElfChangeAttacker(buffOwner)  # Elf灵为替身攻击,要取玩家的属性
     
     result = AddBuffNoRefreshState(curObj, buffType, curSkill, tick, addBuffValueList, buffOwner, addForce)
     
@@ -378,7 +381,7 @@
         if triggerType == -1:
             continue
         passiveEff = PassiveBuffEffMng.GetPassiveEffManager().InitObjPassiveEff(curObj)
-        passiveEff.AddBuffInfoByEffect(curEffect, skillID)
+        passiveEff.AddBuffInfoByEffect(curEffect, skillID, onwerID, onwerType)
 
         
     #添加BUFF后的特殊处理
@@ -568,6 +571,8 @@
         return curBuff, i
     
     return None, 0
+
+
 #---------------------------------------------------------------------
 ## 刷新BUFF的时间
 #  @param curBuff 当前BUFF
@@ -685,8 +690,10 @@
         SkillShell.ClearBuffEffectBySkillID(curObj, curSkill.GetSkillID(), ownerID, ownerType)
         
         addSkillID = curObj.GetDictByKey(ChConfig.Def_PlayerKey_SkillInDelBuff) 
-        if addSkillID and addSkillID not in skillIDListInDelBuff:
-            skillIDListInDelBuff.append(addSkillID)
+        if addSkillID:
+            skillInfo = [addSkillID, ownerID, ownerType]
+            if skillInfo not in skillIDListInDelBuff:
+                skillIDListInDelBuff.append(skillInfo)
         
     OnSkillAfterBuffDisappear(curObj, skillIDListInDelBuff, tick)
     
@@ -699,12 +706,15 @@
 # DoBuffDisApper不能做Buff添加和删除逻辑!!!!!不然指针会错乱, 故在外层处理
 def OnSkillAfterBuffDisappear(curObj, skillIDListInDelBuff, tick):
     posX, posY = curObj.GetPosX(), curObj.GetPosY()
-    for skillID in skillIDListInDelBuff:
-        skillData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
+    for skillInfo in skillIDListInDelBuff:
+        attacker = GameWorld.GetObj(skillInfo[1], skillInfo[2])
+        if not attacker:
+            attacker = curObj
+        skillData = GameWorld.GetGameData().GetSkillBySkillID(skillInfo[0])
         if not skillData:
             continue
         
-        SkillShell.Trigger_UseSkill(curObj, curObj, skillData, tick, posX, posY)
+        SkillShell.Trigger_UseSkill(attacker, curObj, skillData, tick, posX, posY)
     return
 
 #---------------------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py
index d8576ba..aaafc21 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py
@@ -22,6 +22,7 @@
 import PlayerControl
 import PassiveBuffEffMng
 import GameObj
+import BuffSkill
 #---------------------------------------------------------------------
 #全局变量
 #---------------------------------------------------------------------
@@ -44,6 +45,14 @@
     
     SkillCommon.SkillLostHP(defender, curBuffSkillID, buffOwner, singleDecHP, tick, hurtType=ChConfig.Def_HurtType_Bleed)
     
+    if buffOwner and GameObj.GetHP(buffOwner) > 0:
+        # 此处暂无法用被动效果实现
+        buffManager = defender.GetProcessDeBuffState()
+        burnToHPEffect, plusValue, skillID = BuffSkill.FindBuffEffectByOwnertID(buffManager, ChConfig.Def_Skill_Effect_BurnToAddHP, 
+                                                                           buffOwner.GetID(), buffOwner.GetGameObjType())
+        if burnToHPEffect:
+            addHP = singleDecHP*burnToHPEffect.GetEffectValue(0)/ChConfig.Def_MaxRateValue
+            SkillCommon.SkillAddHP(buffOwner, curBuffSkillID, buffOwner, addHP, tick, hurtType=ChConfig.Def_HurtTYpe_Recovery)
     return
 
 # 灼烧的特征为延长buff时间,重算伤害
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1090.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1090.py
new file mode 100644
index 0000000..952ed5a
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1090.py
@@ -0,0 +1,46 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 两个人之间有一条特效连接,配合9999用于判断距离
+#
+# @author: Alee
+# @date 2019-5-6 下午04:30:33
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+#导入
+import SkillCommon
+import GameWorld
+import ChConfig
+
+def ProcessBuff(defender, curBuff, curEffect, processBuffTick, tick):
+    buffOwner = SkillCommon.GetBuffOwner(curBuff)
+    
+    if not buffOwner:
+        curBuff.SetRemainTime(0)
+        return
+    
+    if GameWorld.GetDistEx(defender.GetPosX(), defender.GetPosY(), buffOwner.GetPosX(), buffOwner.GetPosY()) > curEffect.GetEffectValue(0):
+        curBuff.SetRemainTime(0)
+        return    
+    return
+
+
+def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
+    
+    attrType = curEffect.GetEffectValue(1)
+    value = curEffect.GetEffectValue(2)
+    calcDict[attrType] = calcDict.get(attrType, 0) - value
+        
+    return 
+
+## 返回buff类型,线性与否
+#  @param 
+#  @return None
+#  @remarks 函数详细说明.  
+def GetCalcType():
+    return ChConfig.TYPE_NoLinear
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_4012.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_4012.py
index c98bdaa..d837829 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_4012.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_4012.py
@@ -47,14 +47,42 @@
 def OnBuffDisappear(curObj, curSkill, curBuff, curEffect, tick):
 
     stateType = curEffect.GetEffectValue(0)
-    GameObj.SetPyPlayerState(curObj, stateType, 0)
+    if CanDelStateEffect(curObj, ChConfig.Def_Skill_Effect_BuffState, stateType):
+        GameObj.SetPyPlayerState(curObj, stateType, 0)
+        GameWorld.DebugLog("取消影响玩家状态效果---%s - %s"%(curObj.GetID(), stateType))
     return
     
     
 def OnBuffDisappearEx(curObj, curSkill, curBuff, curEffect, tick):
 
     stateType = curEffect.GetEffectValue(0)
-    GameObj.SetPyPlayerState(curObj, stateType, 0)
+    if CanDelStateEffect(curObj, ChConfig.Def_Skill_Effect_BuffState, stateType):
+        GameObj.SetPyPlayerState(curObj, stateType, 0)
+        GameWorld.DebugLog("取消影响玩家状态效果---%s - %s"%(curObj.GetID(), stateType))
     return
     
-    
\ No newline at end of file
+
+# 大于等于2个状态 则不清理状态
+def CanDelStateEffect(curObj, effectID, stateType):
+    cnt = 0
+    for buffType in xrange(IPY_GameWorld.bfBuff, IPY_GameWorld.btBufMax):
+        buffTuple = SkillCommon.GetBuffManagerByBuffType(curObj, buffType)
+        #通过类型获取目标的buff管理器为空,则跳出
+        if buffTuple == ():
+            continue
+    
+        buffManager = buffTuple[0]
+        
+        for i in range(buffManager.GetEffectCount()):
+            effect = buffManager.GetEffect(i)
+            if not effect:
+                continue
+            if effect.GetEffectID() != effectID:
+                continue
+            
+            if effect.GetEffectValue(0) == stateType:
+                cnt += 1
+            if cnt >= 2:
+                return False
+        
+    return True
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_801.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_801.py
index 48e2308..bc55b14 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_801.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_801.py
@@ -31,12 +31,15 @@
 
 
 def OnBuffDisappear(curObj, curSkill, curBuff, curEffect, tick):
+    skillID = curEffect.GetEffectValue(2)
+    if not skillID:
+        return
     boomValue = curBuff.GetValue1()
     # 剩余护盾值用于爆炸
     if boomValue == 0:
         return
     
-    skillData = GameWorld.GetGameData().GetSkillBySkillID(curEffect.GetEffectValue(2))
+    skillData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
     if not skillData:
         return
     # 存储起来用于伤害
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_903.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_903.py
new file mode 100644
index 0000000..6ded1ef
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_903.py
@@ -0,0 +1,55 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 减速专用,受属性影响如符文
+#
+# @author: Alee
+# @date 2019-5-8 下午02:55:40
+# @version 1.0
+#
+# @note: 
+#
+
+#------------------------------------------------------------------------------ 
+#导入
+import ChConfig
+import PlayerControl
+import IPY_GameWorld
+#---------------------------------------------------------------------
+
+## buff非线性减少属性
+#  @param defender Buff承受者
+#  @param curEffect 技能效果
+#  @param calcDict 技能效果累加总表
+#  @return None
+def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
+    
+    effect = curEffect.GetEffectValue(0)
+    if curBuff and curBuff.GetLayer():
+        # 层级叠加效果
+        effect = effect*curBuff.GetLayer()
+
+    effect += curBuff.GetValue()
+    calcDict[ChConfig.TYPE_Calc_AttrSpeed] = calcDict.get(ChConfig.TYPE_Calc_AttrSpeed, 0) - effect
+        
+    return 
+
+
+## 返回buff类型,线性与否
+#  @param 
+#  @return None
+#  @remarks 函数详细说明.  
+def GetCalcType():
+    return ChConfig.TYPE_NoLinear
+
+
+##计算增强值
+# @param attacker 攻击者实例
+# @param curSkill 技能实例
+# @param curEffect 当前技能效果1
+# @return 总值
+def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):
+    
+    return [PlayerControl.GetSubSpeedPer(attacker)]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
index bc90b1e..2fb69b6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
@@ -1747,6 +1747,35 @@
     
     return returnInfo
 
+
+def FindBuffByOwner(gameObj, skillTypeID, ownerID, ownerType):
+    findSkill = GameWorld.GetGameData().GetSkillBySkillID(skillTypeID)
+    buffType = GetBuffType(findSkill)
+    buffTuple = GetBuffManagerByBuffType(gameObj, buffType)
+    if buffTuple == ():
+        return None
+    
+    buffManager = buffTuple[0]
+    for i in range(0, buffManager.GetBuffCount()):
+        curBuff = buffManager.GetBuff(i)
+        if not curBuff:
+            continue
+        
+        #判断是否拥有同一类型的技能
+        if curBuff.GetSkill().GetSkillTypeID() != skillTypeID:
+            continue
+        
+        #判断是否拥有同一类型的技能
+        if curBuff.GetOwnerID() != ownerID:
+            continue
+        
+        if curBuff.GetOwnerType() != ownerType:
+            continue
+    
+        return curBuff
+    
+    return None
+    
 #---------------------------------------------------------------------
 ## 执行清空命令 参数:玩家, 保留技能类型列表
 #  @param curPlayer 玩家
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_30.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_30.py
index 165c6f0..18b1bbb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_30.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_30.py
@@ -35,43 +35,24 @@
         #清除失败也触发CD
         return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
     
-    skillType = curSkill.GetEffect(0).GetEffectValue(0)
-    if skillType == 0:
-        # 无配置代表清除负面buff任意1个
-        skillTypeList = [
-                           ChConfig.Def_SkillType_LstDepBuff   ,  #持续减益BUFF  4
-                           ChConfig.Def_SkillType_DepBuff      ,  #减益BUFF 6
-                           ChConfig.Def_SkillType_Action       ,  #影响行为BUFF 14
-                         ]
-    else:
-        skillTypeList = [skillType]
-    
     delSuccess = False
+    buffSkill = None
+    buffType = 0
     
-    for skillType in skillTypeList:
-        
-        buffType = ChConfig.Def_SkillBuffList.get(skillType)
-        buffTuple = SkillCommon.GetBuffManagerByBuffType(defender, buffType)
-        if buffTuple == ():
-            continue
-        
-        buffManager = buffTuple[0]
-        if buffManager.GetBuffCount() == 0:
-            continue
-        
-        curBuff = buffManager.GetBuff(0)
-        ownerID, ownerType = curBuff.GetOwnerID(), curBuff.GetOwnerType()
-        
-        #删除Buff
-        BuffSkill.DoBuffDisApperEx(defender, curBuff, tick)
-        buffSkill = curBuff.GetSkill()
-        if not buffSkill:
-            continue
-        skillID = buffSkill.GetSkillID()
-        buffManager.DeleteBuffByTypeID(buffSkill.GetSkillTypeID())
-        SkillShell.ClearBuffEffectBySkillID(defender, skillID, ownerID, ownerType)
-        delSuccess = True
-        break
+    # 优先清理指定技能
+    theSkillID = curSkill.GetEffect(0).GetEffectValue(1)
+    if theSkillID:
+        if curSkill.GetEffect(0).GetEffectValue(1):
+            findBuff = SkillCommon.FindBuffByID(defender, theSkillID)
+        else:
+            findBuff = SkillCommon.FindBuffByOwner(defender, theSkillID, attacker.GetID(), attacker.GetGameObjType())
+        if findBuff:
+            delSuccess = True
+            buffSkill = findBuff.GetSkill()
+            buffType = ChConfig.Def_SkillBuffList.get(buffSkill.GetSkillType())
+    else:
+        # 某类技能中的一个
+        delSuccess, buffSkill, buffType = ClearBySkillType(curSkill, defender, tick)
     
     if not delSuccess:
         # 没有可清除BUFF也进入CD
@@ -103,4 +84,44 @@
         
     return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
 
+def ClearBySkillType(curSkill, defender, tick):
+    skillType = curSkill.GetEffect(0).GetEffectValue(0)
+    if skillType == 0:
+        # 无配置代表清除负面buff任意1个
+        skillTypeList = [
+                           ChConfig.Def_SkillType_LstDepBuff   ,  #持续减益BUFF  4
+                           ChConfig.Def_SkillType_DepBuff      ,  #减益BUFF 6
+                           ChConfig.Def_SkillType_Action       ,  #影响行为BUFF 14
+                         ]
+    else:
+        skillTypeList = [skillType]
+    
+    delSuccess = False
+    buffSkill = None
+    buffType = 0
+    for skillType in skillTypeList:
+        
+        buffType = ChConfig.Def_SkillBuffList.get(skillType)
+        buffTuple = SkillCommon.GetBuffManagerByBuffType(defender, buffType)
+        if buffTuple == ():
+            continue
+        
+        buffManager = buffTuple[0]
+        if buffManager.GetBuffCount() == 0:
+            continue
+        
+        curBuff = buffManager.GetBuff(0)
+        ownerID, ownerType = curBuff.GetOwnerID(), curBuff.GetOwnerType()
+        
+        #删除Buff
+        BuffSkill.DoBuffDisApperEx(defender, curBuff, tick)
+        buffSkill = curBuff.GetSkill()
+        if not buffSkill:
+            continue
+        skillID = buffSkill.GetSkillID()
+        buffManager.DeleteBuffByTypeID(buffSkill.GetSkillTypeID())
+        SkillShell.ClearBuffEffectBySkillID(defender, skillID, ownerID, ownerType)
+        delSuccess = True
+        break
+    return delSuccess, buffSkill, buffType
     
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4503.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4503.py
index 60eddc4..7a5f7b6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4503.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4503.py
@@ -1,33 +1,32 @@
 #!/usr/bin/python
 # -*- coding: GBK -*-
 #
-# @todo: buff中攻击目标处于XX状态提高增加伤害
+##@package
+#
+# @todo: buff中攻击处于xx状态目标触发技能
 #
 # @author: Alee
-# @date 2018-1-30 下午05:11:45
+# @date 2019-5-7 下午09:17:25
 # @version 1.0
 #
 # @note: 
 #
 #---------------------------------------------------------------------
 
-import ChConfig
 import GameWorld
 import GameObj
 
 def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
-    if not defender:
-        return False
-    
-    if not passiveEffect.GetEffectValue(1):
-        # 不配置状态的情况
-        return True
-    
-    if GameObj.GetPyPlayerState(defender, passiveEffect.GetEffectValue(1)):
-        #GameWorld.DebugLog("状态触发----%s"%effect.GetEffectValue(1))
-        return True
-    return False
+    if passiveEffect.GetEffectValue(0):
+        if not GameObj.GetPyPlayerState(defender, passiveEffect.GetEffectValue(0)):
+            #GameWorld.DebugLog("状态触发----%s"%effect.GetEffectValue(1))
+            return False
+    return True
 
 
-def GetValue(attacker, defender, passiveEffect):
-    return passiveEffect.GetEffectValue(0)
+def GetSkillData(passiveEffect):
+    skillID = passiveEffect.GetEffectValue(1)
+    return GameWorld.GetGameData().GetSkillBySkillID(skillID)
+
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4517.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4517.py
index 40b0865..304ed07 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4517.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4517.py
@@ -17,7 +17,7 @@
 import BuffSkill
 import IPY_GameWorld
 
-def CheckCanHappen(attacker, defender, effect, tagSkill):
+def CheckCanHappen(attacker, defender, effect, tagSkill, **skillkwargs):
     debuffState = effect.GetEffectValue(1)
     if debuffState and debuffState != SkillCommon.GetBuffStateType(tagSkill):
         return False
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4522.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4522.py
index 03887ce..0031ada 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4522.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4522.py
@@ -17,7 +17,7 @@
 import BuffSkill
 import IPY_GameWorld
 
-def CheckCanHappen(attacker, defender, effect, tagSkill):
+def CheckCanHappen(attacker, defender, effect, tagSkill, **skillkwargs):
     debuffState = effect.GetEffectValue(1)
     if debuffState and debuffState != SkillCommon.GetBuffStateType(tagSkill):
         return False
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4534.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4534.py
new file mode 100644
index 0000000..4be5ba2
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4534.py
@@ -0,0 +1,26 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: buff中抵消指定技能buff
+#
+# @author: Alee
+# @date 2019-5-7 下午09:27:34
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import SkillCommon
+import BuffSkill
+import IPY_GameWorld
+
+def CheckCanHappen(attacker, defender, effect, tagSkill, **skillkwargs):
+    if  effect.GetEffectValue(0) != tagSkill.GetSkillTypeID():
+        return False
+    return True
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4535.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4535.py
new file mode 100644
index 0000000..9d59848
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4535.py
@@ -0,0 +1,35 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: buff中被攻击提高技能伤害
+#
+# @author: Alee
+# @date 2019-5-7 下午09:32:34
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import GameObj
+import SkillCommon
+
+def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
+    
+    if passiveEffect.GetEffectValue(1):
+        if not defender:
+            return False
+        
+        if skillkwargs.get("ownerID", 0) != defender.GetID():
+            return False
+        if skillkwargs.get("ownerType", 0) != defender.GetGameObjType():
+            return False
+    return True
+
+
+def GetValue(attacker, defender, passiveEffect):
+    return passiveEffect.GetEffectValue(0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4030.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4030.py
deleted file mode 100644
index 9a4d4ae..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4030.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-# @todo:  提高4501成功概率
-#
-# @author: Alee
-# @date 2018-1-9 下午09:39:37
-# @version 1.0
-#
-#
-#---------------------------------------------------------------------
-
-import ItemControler
-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_4096.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4096.py
new file mode 100644
index 0000000..b633857
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4096.py
@@ -0,0 +1,36 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 目标指定skillTypeID的buff下,按层级算提高技能伤害, 属于自己的buff才有效
+#
+# @author: Alee
+# @date 2019-5-6 下午05:10:52
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import SkillCommon
+import GameObj
+
+# 目标某个状态时触发
+def CheckCanHappen(attacker, defender, effect, curSkill):
+    if not defender:
+        return False
+    if not GameObj.GetPyPlayerState(defender, effect.GetEffectValue(1)):
+        #GameWorld.DebugLog("状态触发----%s"%effect.GetEffectValue(1))
+        return False
+    return True
+    
+
+def GetValue(attacker, defender, effect):
+    buff = SkillCommon.FindBuffByOwner(defender, effect.GetEffectValue(2), attacker.GetID(), attacker.GetGameObjType())
+    if not buff:
+        return 0
+    return effect.GetEffectValue(0)*buff.GetLayer()
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4098.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4098.py
new file mode 100644
index 0000000..5ad2a9e
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4098.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 目标指定buff下,大于等于层级提高技能伤害
+#
+# @author: Alee
+# @date 2019-5-6 下午05:10:52
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import SkillCommon
+import GameObj
+
+# 目标某个状态时触发
+def CheckCanHappen(attacker, defender, effect, curSkill):
+    if not defender:
+        return False
+    
+    buff = SkillCommon.FindBuffByOwner(defender, effect.GetEffectValue(1), attacker.GetID(), attacker.GetGameObjType())
+    if not buff:
+        return False
+    
+    if buff.GetLayer() < effect.GetEffectValue(2):
+        return False
+    return True
+    
+
+def GetValue(attacker, defender, effect):
+    return effect.GetEffectValue(0)
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4099.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4099.py
new file mode 100644
index 0000000..c16cf5e
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4099.py
@@ -0,0 +1,45 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 被指定buff下的玩家攻击进入濒死状态触发技能
+#
+# @author: Alee
+# @date 2019-5-7 下午05:56:05
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import GameObj
+import SkillCommon
+import IPY_GameWorld
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+    if not defender:
+        return False
+    if attacker.GetPlayerAction() == IPY_GameWorld.paDie:
+        # 当前已经被处理为死亡,那么就不触发
+        return False
+
+    zhanshaState = attacker.GetDictByKey(ChConfig.Def_PlayerKey_Zhansha)
+    
+    if zhanshaState:
+        # 按位判断,1为斩杀情况下,此技能不可被触发,2为终极斩杀不触发,3为任何斩杀都不触发
+        if (effect.GetEffectValue(2) & pow(2, zhanshaState-1)) != 0:
+            return False
+    
+    buff = SkillCommon.FindBuffByOwner(defender, effect.GetEffectValue(0), attacker.GetID(), attacker.GetGameObjType())
+    if not buff:
+        return False
+    
+    if buff.GetLayer() < effect.GetEffectValue(1):
+        return False
+    
+    GameObj.SetHP(attacker, 1) # 为了避免生命为0时,屏蔽过多逻辑
+
+    return True
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4100.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4100.py
new file mode 100644
index 0000000..91b0d17
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4100.py
@@ -0,0 +1,30 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 攻击指定buff下的玩家后触发被动技能
+#
+# @author: Alee
+# @date 2019-5-7 下午08:06:30
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import GameObj
+import SkillCommon
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+    buff = SkillCommon.FindBuffByOwner(defender, effect.GetEffectValue(0), attacker.GetID(), attacker.GetGameObjType())
+    if not buff:
+        return False
+    
+    if buff.GetLayer() < effect.GetEffectValue(1):
+        return False
+    
+    return True
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4101.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4101.py
new file mode 100644
index 0000000..e11c5d0
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4101.py
@@ -0,0 +1,33 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 清除指定buff成功后提高技能伤害
+#
+# @author: Alee
+# @date 2019-5-8 下午02:31:07
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import GameObj
+import SkillCommon
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+    findBuff = SkillCommon.FindBuffByOwner(defender, effect.GetEffectValue(0), attacker.GetID(), attacker.GetGameObjType())
+    if not findBuff:
+        return False
+    return True
+
+
+def GetValue(attacker, defender, effect):
+    findBuff = SkillCommon.FindBuffByOwner(defender, effect.GetEffectValue(1), attacker.GetID(), attacker.GetGameObjType())
+    if not findBuff:
+        return 0
+    return effect.GetEffectValue(0)*findBuff.GetLayer()
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 b5369d5..9944a6e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
@@ -309,7 +309,6 @@
              4027:ChConfig.TriggerType_AttackKill,   # 斩杀 24
              4028:ChConfig.TriggerType_WillDead,   # 进入濒死状态时触发技能 25
              4029:ChConfig.TriggerType_BuffBoom,   # 中毒后爆炸 26
-             #4030:ChConfig.TriggerType_Success_Buff_SkillPer, # 提高4501成功概率 27
              4031:ChConfig.TriggerType_HurtObjAddBuff,   # 在算伤害时群攻1对1加buff,可用于一个伤害多次触发 28
              4032:ChConfig.TriggerType_BeBoomSeed,   # 被动引爆视野内对象的buff种子 29
              4033:ChConfig.TriggerType_AttackOver,  # 攻击(对敌技能)后被动技能被触发 4
@@ -373,7 +372,12 @@
              4093:ChConfig.TriggerType_NoControl,   # 使关联技能不受控制 78
              4094:ChConfig.TriggerType_Buff_AddSuperHitRate, # BUFF类:增加暴击率
              4095:ChConfig.TriggerType_SuperHitSuckBloodPer, # BUFF类: 暴击百分比吸血, 79
+             4096:ChConfig.TriggerType_AttackAddSkillPer,  # 所有攻击伤害(SkillPer)增加,含普攻,计算时 5
              4097:ChConfig.TriggerType_BurnPer, # 灼烧伤害百分比 80
+             4098:ChConfig.TriggerType_AttackAddSkillPer,  # 所有攻击伤害(SkillPer)增加,含普攻,计算时 5
+             4099:ChConfig.TriggerType_WillDead,   # 进入濒死状态时触发技能 25
+             4100:ChConfig.TriggerType_AttackOver,  # 攻击(对敌技能)后被动技能被触发 4
+             4101:ChConfig.TriggerType_AttackAddSkillPer,  # 所有攻击伤害(SkillPer)增加,含普攻,计算时 5
              }
     return tdict.get(effectID, -1) 
     #===========================================================================
@@ -394,7 +398,7 @@
              4500:ChConfig.TriggerType_AttackOver, # BUFF类:攻击触发新技能
              4501:ChConfig.TriggerType_AttackAddSkillPer, # BUFF类:提高主动技能的技能伤害
              4502:ChConfig.TriggerType_BeAttackOver, # BUFF类:被攻击触发技能
-             #4503:ChConfig.TriggerType_AttackAddSkillPer,  # BUFF类: 攻击时提高增加伤害
+             4503:ChConfig.TriggerType_AttackOver, # BUFF类:攻击触发新技能
              4504:ChConfig.TriggerType_BounceHP,  # BUFF类: 反弹伤害固定值
              4506:ChConfig.TriggerType_BeAttackOver, # BUFF类:被攻击触发技能  只刷新属性 不触发技能
              4507:ChConfig.TriggerType_Buff_AddSuperHitRate, # BUFF类:增加暴击率
@@ -424,6 +428,8 @@
              4531:ChConfig.TriggerType_BounceHPPerByAttacker,  # 反弹伤害百分比值, 由攻击方决定 77
              4532:ChConfig.TriggerType_SuperHit,    # buff中对第一目标暴击触发技能
              4533:ChConfig.TriggerType_BurnDisappear, # 灼烧消失触发 81
+             4534:ChConfig.TriggerType_DebuffOff,   # BUFF类: 抵消debuff
+             4535:ChConfig.TriggerType_BeAttackAddSkillPer, # buff中, 被攻击提高技能伤害
              
              803:ChConfig.TriggerType_BloodShield,  # 血盾
              806:ChConfig.TriggerType_BloodShield,  # 血盾
@@ -449,7 +455,7 @@
         self.AffectSuperEquipEffectCntDict = {}  # 特殊装备技能效果对应的已计算后的数值,直接调用
     
     #记录会影响其他技能或者被动触发释放技能的BUFF
-    def AddBuffInfoByEffect(self, effect, skillID):
+    def AddBuffInfoByEffect(self, effect, skillID, onwerID, onwerType):
         effectID = effect.GetEffectID()
         
         #{(触发方式/点, 关联技能):{BUFFID:【效果】}}
@@ -464,7 +470,7 @@
             
         if skillID not in self.AffectBuffDict[keyTuple]:
             self.AffectBuffDict[keyTuple][skillID] = []
-        self.AffectBuffDict[keyTuple][skillID].append(effect)  # 存储受影响的信息
+        self.AffectBuffDict[keyTuple][skillID].append([effect, onwerID, onwerType])  # 存储受影响的信息
         return
         
 
@@ -817,6 +823,8 @@
                 buffSkill = curBuff.GetSkill()
                 if not buffSkill:
                     continue
+                
+                onwerID, onwerType = curBuff.GetOwnerID(), curBuff.GetOwnerType()
                 for effectIndex in range(0, buffSkill.GetEffectCount()):
                     curEffect = buffSkill.GetEffect(effectIndex)
                     effectID = curEffect.GetEffectID()
@@ -827,7 +835,7 @@
                     if triggerType == -1:
                         continue
                     passiveEff = self.InitObjPassiveEff(gameObj)
-                    passiveEff.AddBuffInfoByEffect(curEffect, buffSkill.GetSkillID())
+                    passiveEff.AddBuffInfoByEffect(curEffect, buffSkill.GetSkillID(), onwerID, onwerType)
         
         return
     
@@ -1327,7 +1335,8 @@
         
         if not IsValidPassiveSkill(curSkill):
             continue
-        for passiveEffect in effectList:
+        for effectInfo in effectList:
+            passiveEffect = effectInfo[0]
             # 被动触发的技能
             pyName = "PassiveBuff_%s"%passiveEffect.GetEffectID()
             
@@ -1335,7 +1344,7 @@
             if not callFunc:
                 continue
             
-            if not callFunc(attacker, defender, passiveEffect, tagSkill):
+            if not callFunc(attacker, defender, passiveEffect, tagSkill, ownerID=effectInfo[1], ownerType=effectInfo[2]):
                 continue
             
             callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "DoLogic"))
@@ -1396,14 +1405,15 @@
         
         if not IsValidPassiveSkill(curSkill):
             continue
-        for passiveEffect in effectList:
+        for effectInfo in effectList:
+            passiveEffect = effectInfo[0]
             # 被动触发的技能
             pyName = "PassiveBuff_%s"%passiveEffect.GetEffectID()
             callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "CheckCanHappen"))
             if not callFunc:
                 continue
             
-            if not callFunc(attacker, defender, passiveEffect, skillID, useSkill=useSkill):
+            if not callFunc(attacker, defender, passiveEffect, skillID, useSkill=useSkill, ownerID=effectInfo[1], ownerType=effectInfo[2]):
                 continue
             
             callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "GetSkillData"))
@@ -1473,11 +1483,11 @@
         if not IsValidPassiveSkill(curSkill):
             continue
         
-        for passiveEffect in effectList:
+        for effectInfo in effectList:
             if stopPassiveSkill and curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_GiftSkill:
                 # 只有天赋才可以再次被触发
                 continue 
-            
+            passiveEffect = effectInfo[0]
             # 被动触发的技能
             pyName = "PassiveBuff_%s"%passiveEffect.GetEffectID()
             
@@ -1486,7 +1496,7 @@
                 continue
             
             # 条件不满足
-            if not callFunc(attacker, defender, passiveEffect, skillID, useSkill=useSkill):
+            if not callFunc(attacker, defender, passiveEffect, skillID, useSkill=useSkill, ownerID=effectInfo[1], ownerType=effectInfo[2]):
                 continue
             
             callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "GetValue"))
@@ -1494,7 +1504,7 @@
                 continue
             
             # 如被动技能:千幻冥炎真实伤害从2变4倍
-            curValue += GetPassiveSkillValueByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_PassiveBuffValue)
+            #curValue += GetPassiveSkillValueByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_PassiveBuffValue)
             curValue += callFunc(attacker, defender, passiveEffect)
             
     return curValue
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
index 2d2ee46..5478a20 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -717,9 +717,27 @@
             continue
         npcObj.StopMove()
         npcObj.ChangePos(npcPos.PosX, npcPos.PosY)
-
+        BeatBackMove(curPlayer, npcObj)
     return
 
+# 针对NPC被推出远距离一直卡墙角问题,法宝挑战副本特殊处理为超过4米 NPC自动回退一些
+def BeatBackMove(curPlayer, npcObj):
+    if GameWorld.GetMap().GetMapID() != ChConfig.Def_FBMapID_MagicWeapon:
+        return
+    if npcObj.GetCurAction() == IPY_GameWorld.laNPCSkillWarning:
+        return
+    
+    posMap = npcObj.GetRefreshPosAt(npcObj.GetCurRefreshPointIndex())
+    #范围校验
+    posMapX = posMap.GetPosX()
+    posMapY = posMap.GetPosY()
+    if GameWorld.GetDist(npcObj.GetPosX(), npcObj.GetPosY(), posMapX, posMapY) < 8:
+        # 单次位移不超过5米
+        return
+    npcControl = NPCCommon.NPCControl(npcObj)
+    moveDestX, moveDestY = npcControl.GetMoveNearPosEx(posMapX, posMapY, 5)
+    npcObj.Move(moveDestX, moveDestY)
+    return
 
 #===============================================================================
 # //B4 03 吸引NPC仇恨 #tagNPCAttention
@@ -2719,10 +2737,12 @@
         if callFunc:
             callFunc(objDetel, curEffect, allAttrList[index], curBuff)
     
-    # 持续性属性变化的buff,目前只有持续减益
-    callFunc = GameWorld.GetExecFunc(GameBuffs, "BuffProcess_%s.%s"%(moduleSuffix, "OnCalcBuffEx"))
-    if callFunc:
-        callFunc(objDetel, curEffect, allAttrList[index], curBuff)
+    #是否持续性技能
+    if curBuff and curBuff.GetSkill().GetSkillType() in ChConfig.Def_LstBuff_List:
+        # 持续性属性变化的buff,目前只有持续减益
+        callFunc = GameWorld.GetExecFunc(GameBuffs, "BuffProcess_%s.%s"%(moduleSuffix, "OnCalcBuffEx"))
+        if callFunc:
+            callFunc(objDetel, curEffect, allAttrList[index], curBuff)
     return
 
 ## 获得buff效果的计算模块文件后缀
diff --git "a/Tool/\346\225\260\346\215\256\345\272\223/ChangeAccount/ChangeAccount.py" "b/Tool/\346\225\260\346\215\256\345\272\223/ChangeAccount/ChangeAccount.py"
index bcd004c..cde7cf8 100644
--- "a/Tool/\346\225\260\346\215\256\345\272\223/ChangeAccount/ChangeAccount.py"
+++ "b/Tool/\346\225\260\346\215\256\345\272\223/ChangeAccount/ChangeAccount.py"
@@ -69,7 +69,7 @@
     print 'table:tagDSAccount update  successfully! cnt=%s changeto %s-%s'%(cnt, DBConfig.Spid, DBConfig.Serverid)
     
     
-    for table in ['tagDBPlayer', 'tagAccIDSendPrize', 'tagDBGMIP', 'tagGameWorldEvent']:
+    for table in ['tagDBPlayer', 'tagAccIDSendPrize', 'tagDBGMIP', 'tagGameWorldEvent', 'tagPayInfo']:
         # 修改玩家表和账号表中的玩家账号
         colPlayer = db[table]
         cnt = 0

--
Gitblit v1.8.0