From cd1c6abe4db4c87fbd7dcd827d2af58a36496cb0 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 26 四月 2019 22:58:25 +0800
Subject: [PATCH] 6613 子 【开发】【2.0】增加重击字体战斗飘字 / 【后端】【2.0】增加重击属性

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4086.py |   32 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4084.py |   19 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py                    |   21 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_900.py            |   50 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4088.py |   28 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                     |  126 ++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4528.py  |   36 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4082.py |   33 +
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                                          |  126 ++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py             |   73 ++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py          |   20 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4526.py  |   35 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py                   |   76 ++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1314.py    |   13 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4090.py |   23 +
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                              |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py                |   10 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4085.py |   22 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4083.py |   29 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                         |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4087.py |   25 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4089.py |   28 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerYinji.py                  |   61 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4529.py  |   37 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4081.py |   27 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py     |  106 +++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py                  |   56 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py                     |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4527.py  |   32 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4091.py |   28 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                            |   24 
 31 files changed, 1,067 insertions(+), 138 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index af4daca..c85c0c1 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -20334,6 +20334,84 @@
 
 
 #------------------------------------------------------
+# A7 19 查询玩家境界阶装备信息结果 #tagSCPlayerEquipCacheResult
+
+class  tagSCPlayerEquipCacheResult(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)//玩家ID
+    EquipClassLV = 0    #(BYTE EquipClassLV)
+    ItemDataSize = 0    #(WORD ItemDataSize)
+    ItemData = ""    #(String ItemData)//物品记录    
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x19
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.EquipClassLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ItemDataSize,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x19
+        self.PlayerID = 0
+        self.EquipClassLV = 0
+        self.ItemDataSize = 0
+        self.ItemData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += 2
+        length += len(self.ItemData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.EquipClassLV)
+        data = CommFunc.WriteWORD(data, self.ItemDataSize)
+        data = CommFunc.WriteString(data, self.ItemDataSize, self.ItemData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                EquipClassLV:%d,
+                                ItemDataSize:%d,
+                                ItemData:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.EquipClassLV,
+                                self.ItemDataSize,
+                                self.ItemData
+                                )
+        return DumpString
+
+
+m_NAtagSCPlayerEquipCacheResult=tagSCPlayerEquipCacheResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCPlayerEquipCacheResult.Head.Cmd,m_NAtagSCPlayerEquipCacheResult.Head.SubCmd))] = m_NAtagSCPlayerEquipCacheResult
+
+
+#------------------------------------------------------
 # A7 07 通知玩家自定义聊天 #tagMCPyTalk
 
 class  tagMCPyTalk(Structure):
@@ -28040,6 +28118,54 @@
 
 
 #------------------------------------------------------
+#B1 08 开始印记流失时间 #tagMCYinjiStartTime
+
+class  tagMCYinjiStartTime(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB1
+        self.SubCmd = 0x08
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB1
+        self.SubCmd = 0x08
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCYinjiStartTime)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''//B1 08 开始印记流失时间 //tagMCYinjiStartTime:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagMCYinjiStartTime=tagMCYinjiStartTime()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCYinjiStartTime.Cmd,m_NAtagMCYinjiStartTime.SubCmd))] = m_NAtagMCYinjiStartTime
+
+
+#------------------------------------------------------
 # B2 08 获得仙缘币信息 #tagMCAddXianyuanCoinMsg
 
 class  tagMCAddXianyuanCoinMsg(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index e5e748e..7d0604f 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -544,6 +544,7 @@
 Def_Effect_DamagePVE = 141  # PVE固定伤害
 Def_Effect_FinalHurtPer = 142   # 最终伤害万分率
 Def_Effect_FinalHurtReducePer = 143    # 最终伤害减少万分
+Def_Effect_YinjiTime = 144    # 每X毫秒自动消失一个印记
 
 #增加%d物理伤害值,其中a值为伤害值
 Def_Effect_AddAtk = 1005
@@ -854,7 +855,8 @@
 CDBPlayerRefresh_SuperHitRateReduce,   # 暴击概率抗性 210
 CDBPlayerRefresh_LuckyHitReduce,        # 会心伤害减免固定值 
 CDBPlayerRefresh_FinalHurtReducePer,   # 最终伤害减少百分比 
-) = range(146, 213)
+CDBPlayerRefresh_YinjiTime,   # 每X秒减少印记时间,毫秒
+) = range(146, 214)
 
 TYPE_Price_Gold_Paper_Money = 5    # 金钱类型,(先用礼券,再用金子)
 TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
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 37e2c0f..b6c4339 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
@@ -1293,7 +1293,10 @@
 def IsHappenStateByType(happenState, cmpType):
     return happenState & cmpType
 
-def CalcHurtTypeResult(atkObj, defObj, atkObjType, defObjType, happenState):
+
+# 表现形式 致命一击>(重击>暴击)>会心>格挡>境界压制
+# 重击定义:当触发重击时,则增加双倍暴击固定值伤害(重击与暴击互斥,优先判断重击,当重击触发时,暴击不触发)
+def CalcHurtTypeResult(atkObj, defObj, atkObjType, defObjType, happenState, curSkill):
     ''' 获取伤害类型结果 
     支持多种伤害类型同时触发, 飘字表现以最终表现伤害类型为主
     @return: 最终表现伤害类型, {伤害类型:[是否触发, 伤害计算值, 触发时防守方的伤害减免值], ...}
@@ -1306,12 +1309,14 @@
                           ChConfig.Def_HurtType_Parry:[False, 0, 0],
                           ChConfig.Def_HurtType_Zhuxian:[False, 0, 0],
                           ChConfig.Def_HurtType_DeadlyHit:[False, 0, 0],
+                          ChConfig.Def_HurtType_ThumpHit:[False, 0, 0],
                           }
     
     calcTypeList =  []
     if atkObjType == IPY_GameWorld.gotPlayer:
         calcTypeList += [ChConfig.Def_HurtType_LuckyHit, ChConfig.Def_HurtType_SuperHit, 
-                         ChConfig.Def_HurtType_Zhuxian, ChConfig.Def_HurtType_DeadlyHit]
+                         ChConfig.Def_HurtType_Zhuxian, ChConfig.Def_HurtType_DeadlyHit,
+                         ChConfig.Def_HurtType_ThumpHit]
     if defObjType == IPY_GameWorld.gotPlayer:
         calcTypeList += [ChConfig.Def_HurtType_Parry]
     # 暂时只计算玩家
@@ -1321,11 +1326,12 @@
     # 优先级列表, 互斥列表
     priorityList, mutexList = ReadChConfig.GetEvalChConfig("CalcHurtTypeInfo")
     happenFunc = {
-                  ChConfig.Def_HurtType_LuckyHit:lambda aObj, dObj, hState:__HurtTypeHappen_LuckyHit(aObj, dObj, hState),
-                  ChConfig.Def_HurtType_SuperHit:lambda aObj, dObj, hState:__HurtTypeHappen_SuperHit(aObj, dObj, hState),
-                  ChConfig.Def_HurtType_Parry:lambda aObj, dObj, hState:__HurtTypeHappen_Parry(aObj, dObj, hState),
-                  #ChConfig.Def_HurtType_Zhuxian:lambda aObj, dObj, hState:__HurtTypeHappen_Zhuxian(aObj, dObj, hState),
-                  ChConfig.Def_HurtType_DeadlyHit:lambda aObj, dObj, hState:__HurtTypeHappen_Deadly(aObj, dObj, hState),
+                  ChConfig.Def_HurtType_LuckyHit:__HurtTypeHappen_LuckyHit,
+                  ChConfig.Def_HurtType_SuperHit:__HurtTypeHappen_SuperHit,
+                  ChConfig.Def_HurtType_Parry:__HurtTypeHappen_Parry,
+                  #ChConfig.Def_HurtType_Zhuxian:__HurtTypeHappen_Zhuxian,
+                  ChConfig.Def_HurtType_DeadlyHit:__HurtTypeHappen_Deadly,
+                  ChConfig.Def_HurtType_ThumpHit:__HurtTypeHappen_ThumpHit,
                   }
     
     hadCheckList = [] # 已经处理过的伤害类型列表
@@ -1342,7 +1348,7 @@
             if curMHHappen:
                 # 只要其中一个已触发的则后面的均为默认不触发
                 continue
-            result = happenFunc[hType](atkObj, defObj, happenState)
+            result = happenFunc[hType](atkObj, defObj, happenState, curSkill)
             if result: # 如果触发,更新相关数值
                 hurtTypeResultDict[hType] = result
                 curMHHappen = True
@@ -1353,7 +1359,7 @@
             continue
         if hType not in hadCheckList:
             hadCheckList.append(hType)
-            result = happenFunc[hType](atkObj, defObj, happenState)
+            result = happenFunc[hType](atkObj, defObj, happenState, curSkill)
             if result: # 如果触发,更新相关数值
                 hurtTypeResultDict[hType] = result
                 
@@ -1364,7 +1370,7 @@
     return hurtType, hurtTypeResultDict
 
 
-def __HurtTypeHappen_LuckyHit(atkObj, defObj, happenState):
+def __HurtTypeHappen_LuckyHit(atkObj, defObj, happenState, curSkill):
     ''' 判断伤害类型是否发生 - 会心一击
     @return: 是否触发, 触发时伤害计算固定值, 触发时防守方的伤害减免固定值
     '''
@@ -1382,7 +1388,7 @@
         return True, atkObj.GetLuckyHitVal(), PlayerControl.GetLuckyHitReduce(defObj)
     return
 
-def __HurtTypeHappen_SuperHit(atkObj, defObj, happenState):
+def __HurtTypeHappen_SuperHit(atkObj, defObj, happenState, curSkill):
     ''' 判断伤害类型是否发生 - 暴击
     @return: 是否触发, 触发时伤害计算固定值, 触发时防守方的伤害减免固定值
     '''
@@ -1401,7 +1407,7 @@
         return True, atkObj.GetSuperHit(), PlayerControl.GetSuperHitReduce(defObj)
     return
 
-def __HurtTypeHappen_Parry(atkObj, defObj, happenState):
+def __HurtTypeHappen_Parry(atkObj, defObj, happenState, curSkill):
     ''' 判断伤害类型是否发生 - 防守方抵御
     @return: 是否触发, 触发时伤害计算值, 触发时防守方的伤害减免值
     '''
@@ -1412,7 +1418,7 @@
         return True, 0, chanceDefPer
     return
 
-#def __HurtTypeHappen_Zhuxian(atkObj, defObj, happenState):
+#def __HurtTypeHappen_Zhuxian(atkObj, defObj, happenState, curSkill):
 #    """诛仙一击"""
 #    rate = PlayerControl.GetZhuXianRate(atkObj)
 #    if not rate:
@@ -1423,11 +1429,27 @@
 #    return
 
 # 致命一击
-def __HurtTypeHappen_Deadly(atkObj, defObj, happenState):
+def __HurtTypeHappen_Deadly(atkObj, defObj, happenState, curSkill):
     if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, None, ChConfig.TriggerType_IsDealy):
         return True, 0, 0
     return
 
+#重击定义:当触发重击时,则增加双倍暴击固定值伤害(重击与暴击互斥,优先判断重击,当重击触发时,暴击不触发)
+def __HurtTypeHappen_ThumpHit(atkObj, defObj, happenState, curSkill):
+    
+    if IsHappenStateByType(happenState, ChConfig.Def_Skill_HappenState_ThumpHit):
+        return True, atkObj.GetSuperHit()*2, PlayerControl.GetSuperHitReduce(defObj)
+    
+    thumpHitRate = 0  
+    thumpHitRate += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, 
+                                                                       ChConfig.TriggerType_AddThumpHitRate)
+    thumpHitRate += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, 
+                                                                       ChConfig.TriggerType_AddThumpHitRate)
+    if thumpHitRate <= 0:
+        return
+    if GameWorld.CanHappen(thumpHitRate):
+        return True, atkObj.GetSuperHit()*2, PlayerControl.GetSuperHitReduce(defObj)
+    return
 
 
 def ChangeSkillHurtPer(atkObj, defObj, curSkill, skillPer):
@@ -1602,6 +1624,36 @@
     PassiveBuffEffMng.OnPassiveSkillTrigger(defObj, atkObj, None, ChConfig.TriggerType_ProDefValue, tick)
     return hurtValue - absortValue
 
+
+# 设置玩家一次主动型攻击中的第一个防御者
+def SetFirstDefender(attacker, defObj, curSkill):
+    if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer:
+        return
+    
+    if curSkill and curSkill.GetFuncType() not in [ChConfig.Def_SkillFuncType_FbSkill,
+                                          ChConfig.Def_SkillFuncType_NormalAttack]:
+        return
+    
+    if attacker.GetDictByKey(ChConfig.Def_PlayerKey_FirstDefender):
+        return 
+    
+    attacker.SetDict(ChConfig.Def_PlayerKey_FirstDefender, defObj.GetID())
+    
+    return
+
+# 清除第一目标
+def ClearFirstDefender(attacker):
+    if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer:
+        return
+    attacker.SetDict(ChConfig.Def_PlayerKey_FirstDefender, 0)
+    
+    return
+
+def GetFirstDefenderID(attacker):
+    return attacker.GetDictByKey(ChConfig.Def_PlayerKey_FirstDefender)
+
+
+
 ## 计算伤血值
 #  @param atkObj 攻击者
 #  @param defObj 防御者
@@ -1615,6 +1667,9 @@
 #  @remarks 函数详细说明.
 def GetHurtHP(attacker, defObj, curSkill, atkSkillValue, atkSkillPer, tick):
     atkObj = ElfChangeAttacker(attacker)  # Elf灵为替身攻击,要取玩家的属性
+    
+    #设置第一个防御者
+    SetFirstDefender(atkObj, defObj, curSkill)
     
     resultHurtType = HurtType()
     atkObjType = attacker.GetGameObjType()
@@ -1749,13 +1804,7 @@
     
     WriteHurtLog(attacker, defObj, curSkill, resultHurtType.LostHP, resultHurtType.HurtType, "最终扣血")
     
-    #攻击触发事件, 该代码应该放在DoAttack函数中处理逻辑比较清晰,也不会破坏GetHurtHP函数
-    #因为DoAttack修改点比较多,暂不迁移,相关攻击事件逻辑,就往此函数中添加
     AttackEventTrigger(atkObj, defObj, curSkill, resultHurtType, tick)
-    #===========================================================================
-    # if atkObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
-    #    GameWorld.DebugAnswer(atkObj, "--%s剩余血量 %s"%(defObj.GetID(), defObj.GetHP()))
-    #===========================================================================
     
     return resultHurtType
 
@@ -2008,10 +2057,21 @@
             return 0, ChConfig.Def_HurtType_Miss
     
 
-    hurtType, hurtTypeResultDict = CalcHurtTypeResult(atkObj, defObj, atkObjType, defObjType, happenState)
+    hurtType, hurtTypeResultDict = CalcHurtTypeResult(atkObj, defObj, atkObjType, defObjType, happenState, curSkill)
     #GameWorld.DebugLog("GetHurtHP hurtType=%s, hurtTypeResultDict=%s" % (hurtType, hurtTypeResultDict))
     isLuckyHit, aLuckyHit, dLuckyHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_LuckyHit] # 幸运一击
-    isSuperHit, aSuperHit, dSuperHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_SuperHit] # 暴击
+    
+    # 重击和暴击互斥,并且使用同一个参数
+    isSuperHit, aSuperHit, dSuperHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_ThumpHit] 
+    if not isSuperHit:
+        isSuperHit, aSuperHit, dSuperHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_SuperHit] 
+    else:
+        # 重击加成
+        thumpPer = 0
+        thumpPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddThumpHitPer)
+        thumpPer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddThumpHitPer)
+        aSuperHit = aSuperHit*(thumpPer + 10000)/10000
+        
     dDamChanceDef = hurtTypeResultDict[ChConfig.Def_HurtType_Parry][2] # 抵御, 大于0代表触发抵御效果
     isZhuxianHit, aZhuxianHurtPer, dZhuxianReducePer = hurtTypeResultDict[ChConfig.Def_HurtType_Zhuxian] # 诛仙一击
     isDeadlyHit = hurtTypeResultDict[ChConfig.Def_HurtType_DeadlyHit][0] # 致命一击
@@ -2424,7 +2484,7 @@
         #PVP 攻击回血
         atkBackHP += PlayerControl.GetPVPAtkBackHP(atkObj)
         # 百分比吸血
-        atkBackHPPer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, None, ChConfig.TriggerType_Buff_SuckBloodPer)
+        atkBackHPPer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
         atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
         
         atkBackHP += int(hurtValue * atkBackHPPer*1.0 / ChConfig.Def_MaxRateValue)
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 fc48a11..907b37a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
@@ -217,6 +217,7 @@
 # 触发型技能根据伤血类型触发被动技能,群攻只触发一次,放在伤血列表被清之前
 # 只处理 isEnhanceSkill的情况,对应 OnHurtTypeTriggerSkill
 def OnHurtTypeTriggerPassiveSkill(attacker, target, curSkill, tick):
+    AttackCommon.ClearFirstDefender(attacker)
     
     skillHurtLists = [] # 内部触发清除g_skillHurtList
     for i in xrange(g_skillHurtList.GetHurtCount()):
@@ -225,6 +226,10 @@
             continue
         
         skillHurtLists.append([hurtObj.GetObjID(), hurtObj.GetObjType(), hurtObj.GetAttackType()])
+    
+    #只对第一目标造成某伤害类型时触发技能, 需先存储 skillHurtLists
+    OnHurtTypeTriggerSkillFirstObj(attacker, curSkill, tick)
+    
     
     for hurtList in skillHurtLists:
         defender = GameWorld.GetObj(hurtList[0], hurtList[1])
@@ -1471,6 +1476,8 @@
             OnHurtTypeTriggerPassiveSkill(curPlayer, target, curSkill, tick)
         return True
     
+    AttackCommon.ClearFirstDefender(curPlayer)
+    
     #玩家进入战斗状态
     #技能是光环, 不进入战斗状态 ,无对象,不进入战斗状态
     if (curSkill == None \
@@ -1543,10 +1550,29 @@
             return True
     return False
     
+
+#只对第一目标造成某伤害类型时触发技能
+def OnHurtTypeTriggerSkillFirstObj(attacker, curSkill, tick):
+    if g_skillHurtList.GetHurtCount() == 0:
+        return
+    
+    hurtObj = g_skillHurtList.GetHurtAt(0)
+    if not hurtObj:
+        return
+    
+    objID, objType, hurtType = hurtObj.GetObjID(), hurtObj.GetObjType(), hurtObj.GetAttackType()   
+    
+    defender = GameWorld.GetObj(objID, objType)
+    if not defender:
+        return
+    if hurtType == ChConfig.Def_HurtType_SuperHit:
+        PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defender, curSkill, ChConfig.TriggerType_SuperHit, tick)
+    elif hurtType == ChConfig.Def_HurtType_ThumpHit:
+        PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defender, curSkill, ChConfig.TriggerType_ThumpHit, tick)
+    return
     
 # 根据伤血类型触发技能,群攻只触发一次,放在伤血列表被清之前
 def OnHurtTypeTriggerSkill(attacker, target, curSkill, tick):
-    isSuperHit = False
     usePassiveSkillResult = True    # 第一次判断不能调用,即代表都不可用无需循环
     usePassiveSkillResultOnSuperHit = True    # 暴击对象1V1触发,第一次判断不能调用,即代表都不可用无需循环
     
@@ -1558,27 +1584,26 @@
         
         skillHurtLists.append([hurtObj.GetObjID(), hurtObj.GetObjType(), hurtObj.GetAttackType()])
     
+    #只对第一目标造成某伤害类型时触发技能, 需先存储 skillHurtLists
+    OnHurtTypeTriggerSkillFirstObj(attacker, curSkill, tick)
+    
     skillIDSet = set()
     for hurtList in skillHurtLists:
-        if not isSuperHit and hurtList[2] == ChConfig.Def_HurtType_SuperHit:
-            # 暴击只对主目标做处理
-            PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, target, curSkill, ChConfig.TriggerType_SuperHit, tick)
-            isSuperHit = True
-        
-        defender = GameWorld.GetObj(hurtList[0], hurtList[1])
+        objID, objType, hurtType = hurtList
+        defender = GameWorld.GetObj(objID, objType)
         if not defender:
             continue
         
         if GameObj.GetHP(defender) <= 0:
-            if hurtList[1] == IPY_GameWorld.gotPlayer:
-                if hurtList[2] == ChConfig.Def_HurtType_Zhansha:
+            if objType == IPY_GameWorld.gotPlayer:
+                if hurtType == ChConfig.Def_HurtType_Zhansha:
                     defender.SetDict(ChConfig.Def_PlayerKey_Zhansha, 1)
-                elif hurtList[2] == ChConfig.Def_HurtType_ZhognjiZhansha:
+                elif hurtType == ChConfig.Def_HurtType_ZhognjiZhansha:
                     defender.SetDict(ChConfig.Def_PlayerKey_Zhansha, 2)
                 # 濒死状态触发技能, 不能在GetHurtHP内部触发技能,否则会导致原技能的伤血列表异常
                 PassiveBuffEffMng.OnPassiveSkillTrigger(defender, attacker, None, ChConfig.TriggerType_WillDead, tick)
                 PassiveBuffEffMng.OnPassiveBuffTrigger(defender, attacker, None, ChConfig.TriggerType_WillDead, tick)
-                if hurtList[2] in [ChConfig.Def_HurtType_Zhansha, ChConfig.Def_HurtType_ZhognjiZhansha]:
+                if hurtType in [ChConfig.Def_HurtType_Zhansha, ChConfig.Def_HurtType_ZhognjiZhansha]:
                     defender.SetDict(ChConfig.Def_PlayerKey_Zhansha, 0)
             continue
         
@@ -1586,20 +1611,20 @@
             usePassiveSkillResult = PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defender, curSkill, 
                                                 ChConfig.TriggerType_HurtObjAddBuff, tick, skillIDSet=skillIDSet)
         
-        if usePassiveSkillResultOnSuperHit and hurtList[2] == ChConfig.Def_HurtType_SuperHit:
+        if usePassiveSkillResultOnSuperHit and hurtType == ChConfig.Def_HurtType_SuperHit:
             # 暴击对目标一一触发被动
             usePassiveSkillResultOnSuperHit = PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defender, curSkill, 
                                                         ChConfig.TriggerType_SuperHitOneByOne, tick, skillIDSet=skillIDSet)
-        if hurtList[2] == ChConfig.Def_HurtType_SuperHit:
+        if hurtType == ChConfig.Def_HurtType_SuperHit:
             #被暴击触发技能
             PassiveBuffEffMng.OnPassiveSkillTrigger(defender, attacker, None, ChConfig.TriggerType_BeSuperHit, tick)
             PassiveBuffEffMng.OnPetPassiveSkillTrigger(defender, attacker, None, ChConfig.TriggerType_BeSuperHit, tick)
-        elif hurtList[2] == ChConfig.Def_HurtType_Miss:
+        elif hurtType == ChConfig.Def_HurtType_Miss:
             PassiveBuffEffMng.OnPassiveSkillTrigger(defender, attacker, None, ChConfig.TriggerType_MissSkill, tick)
-        elif hurtList[2] == ChConfig.Def_HurtType_LuckyHit:
+        elif hurtType == ChConfig.Def_HurtType_LuckyHit:
             PassiveBuffEffMng.OnPetPassiveSkillTrigger(defender, attacker, None, ChConfig.TriggerType_BeLuckyHit, tick)
             
-        if hurtList[2] in ChConfig.Def_RealAttack_Type:
+        if hurtType in ChConfig.Def_RealAttack_Type:
             # 被攻击处理层级
             PassiveBuffEffMng.OnPassiveBuffTrigger(defender, attacker, None, ChConfig.TriggerType_Buff_BeAttackSubLayer, tick)
         
@@ -2389,14 +2414,17 @@
                                                 isEnhanceSkill=False, skillIDSet=skillIDSet)
         
         DoLogic_AttackResult(attacker, defObj, curSkill, tick)
-        skillEffect = SkillCommon.GetSkillEffectByEffectID(curSkill, ChConfig.Def_Skill_Effect_ProcessAttack)
-        if skillEffect:
-            skillID = skillEffect.GetEffectValue(2)
-            if skillID != 0:
-                triggerSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
-                if not triggerSkill:
-                    continue
-                SkillShell.UsePassiveTriggerSkill(attacker, triggerSkill, defObj, tick)
+        #=======================================================================
+        # #受攻击对象1V1触发技能,本技能效果自身附带,非被动,非触发技能
+        # skillEffect = SkillCommon.GetSkillEffectByEffectID(curSkill, ChConfig.Def_Skill_Effect_ProcessAttack)
+        # if skillEffect:
+        #    skillID = skillEffect.GetEffectValue(2)
+        #    if skillID != 0:
+        #        triggerSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
+        #        if not triggerSkill:
+        #            continue
+        #        SkillShell.UsePassiveTriggerSkill(attacker, triggerSkill, defObj, tick)
+        #=======================================================================
 
     # 一一触发技能需要在最后设置CD
     for skillTypeID in skillIDSet:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index f1b5855..de283ea 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -68,7 +68,7 @@
 Def_BuffValue_Count = 3     # buff记录的value个数
 
 #游戏对象属性--------------------------------------------
-Def_Calc_AllAttrType_MAX = 130
+Def_Calc_AllAttrType_MAX = 131
 #基本属性BUFF计算,顺序与 ObjProperty_AttrByIndex 对应,同时也为buff效果ID同步通知策划
 TYPE_Calc_AttrList = (
 TYPE_Calc_Metal,                        # 金 1
@@ -212,6 +212,7 @@
 TYPE_Calc_FabaoHurt,                    # 法宝技能增伤 
 TYPE_Calc_FabaoHurtPer,                 # 法宝技能加成 
 TYPE_Calc_FinalHurtReducePer,           # 最终伤害减少百分比
+TYPE_Calc_YinjiTime,                    # 每X秒自动消失一个印记
 ) = range(1, Def_Calc_AllAttrType_MAX)
 
 
@@ -751,7 +752,8 @@
 Def_HurtType_Zhuxian,     # 诛仙一击 13
 Def_HurtType_ZhognjiZhansha,     # 终极斩杀 14
 Def_HurtType_DeadlyHit,     # 致命一击 15
-) = range(1, 16)
+Def_HurtType_ThumpHit,     # 重击 16
+) = range(1, 17)
 #Def_HurtType_SuckBlood,      # 吸血 
 
 (
@@ -778,6 +780,10 @@
                        Def_HurtType_SuperHit,       # 暴击 7
                        Def_HurtType_LuckyHit,       # 会心一击伤害 8
                        Def_HurtType_RealmSupress,     # 境界压制 11
+                       
+                        Def_HurtType_Zhuxian,     # 诛仙一击 13
+                        Def_HurtType_DeadlyHit,     # 致命一击 15
+                        Def_HurtType_ThumpHit,     # 重击 16
                        ]
 
 #---------------------------------------------------------------------
@@ -1147,6 +1153,7 @@
 Def_Skill_HappenState_HitOn = 0x0001  # 必命中
 Def_Skill_HappenState_SuperHit = 0x0002  # 必暴击
 Def_Skill_HappenState_LuckyHit = 0x0004  # 必会心一击
+Def_Skill_HappenState_ThumpHit = 0x0008  # 必重击
 
 
 #技能施法目标
@@ -3004,13 +3011,18 @@
     Def_PlayerState_LoseBlood3, # 职业3持续掉血状态 15
     Def_PlayerState_MissSneerAtk, # 对嘲讽攻击免疫表现为miss 16
     Def_PlayerState_BeInAir, # 浮空(做法同眩晕类) 17
-) = range(18)
+    Def_PlayerState_zqdlj, # 紫气东来金灵根技能状态 18
+) = range(19)
 
 #---SetDict 含NPC字典KEY,不存于数据库---
 Def_GameObjKey_InheritOwner = "InheritOwner"  # 类暴风雪计算时用主人属性
 
 #---SetDict 玩家字典KEY,不存于数据库---
 # key的长度不能超过29个字节
+Def_PlayerKey_LostYinjiTime = "LostYinjiTime"   # 每X秒自动消失一个印记
+Def_PlayerKey_1314HurtCount = "1314cnt"   # 类剑刃风暴技能的1314效果,伤害次数处理
+Def_PlayerKey_FirstDefender = "FDID"   # 第一个防守者,只用于比较
+Def_PlayerKey_SelectObjID = "selectID"   # 锁定模式选中,不用SetActionObj
 Def_PlayerKey_SelectObjID = "selectID"   # 锁定模式选中,不用SetActionObj
 Def_PlayerKey_SelectObjType = "selectType"   # 锁定模式选中
 Def_PlayerKey_NormalHurt = "NormalHurt"   # 属性普通攻击增伤:普通攻击附加的固定值伤害
@@ -4177,6 +4189,7 @@
     ShareDefine.Def_Effect_DamagePVE:[[TYPE_Calc_DamagePVE], False, TYPE_Linear],  # PVE固定伤害
     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_SuperHitPer:[[TYPE_Calc_SuperHit], False, TYPE_NoLinear],
@@ -4432,7 +4445,10 @@
 TriggerType_4074PerValue, # 特殊效果的加成 70
 TriggerType_dFinalHurtReducePer,    # 防守方的最终伤害减少百分比 71
 TriggerType_IsDealy,    # 是否触发致命一击 72 暂且理解为和概率是独立,有新概念产生则重定义  
-) = range(1, 73)
+TriggerType_AddThumpHitRate, # 提高重击概率 73
+TriggerType_ThumpHit, # 重击时 触发技能74
+TriggerType_AddThumpHitPer, # 重击时 增加重击百分比 75
+) = range(1, 76)
 
 
 #不可以佩戴翅膀的地图
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index af4daca..c85c0c1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -20334,6 +20334,84 @@
 
 
 #------------------------------------------------------
+# A7 19 查询玩家境界阶装备信息结果 #tagSCPlayerEquipCacheResult
+
+class  tagSCPlayerEquipCacheResult(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)//玩家ID
+    EquipClassLV = 0    #(BYTE EquipClassLV)
+    ItemDataSize = 0    #(WORD ItemDataSize)
+    ItemData = ""    #(String ItemData)//物品记录    
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x19
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.EquipClassLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ItemDataSize,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x19
+        self.PlayerID = 0
+        self.EquipClassLV = 0
+        self.ItemDataSize = 0
+        self.ItemData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += 2
+        length += len(self.ItemData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.EquipClassLV)
+        data = CommFunc.WriteWORD(data, self.ItemDataSize)
+        data = CommFunc.WriteString(data, self.ItemDataSize, self.ItemData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                EquipClassLV:%d,
+                                ItemDataSize:%d,
+                                ItemData:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.EquipClassLV,
+                                self.ItemDataSize,
+                                self.ItemData
+                                )
+        return DumpString
+
+
+m_NAtagSCPlayerEquipCacheResult=tagSCPlayerEquipCacheResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCPlayerEquipCacheResult.Head.Cmd,m_NAtagSCPlayerEquipCacheResult.Head.SubCmd))] = m_NAtagSCPlayerEquipCacheResult
+
+
+#------------------------------------------------------
 # A7 07 通知玩家自定义聊天 #tagMCPyTalk
 
 class  tagMCPyTalk(Structure):
@@ -28040,6 +28118,54 @@
 
 
 #------------------------------------------------------
+#B1 08 开始印记流失时间 #tagMCYinjiStartTime
+
+class  tagMCYinjiStartTime(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB1
+        self.SubCmd = 0x08
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB1
+        self.SubCmd = 0x08
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCYinjiStartTime)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''//B1 08 开始印记流失时间 //tagMCYinjiStartTime:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagMCYinjiStartTime=tagMCYinjiStartTime()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCYinjiStartTime.Cmd,m_NAtagMCYinjiStartTime.SubCmd))] = m_NAtagMCYinjiStartTime
+
+
+#------------------------------------------------------
 # B2 08 获得仙缘币信息 #tagMCAddXianyuanCoinMsg
 
 class  tagMCAddXianyuanCoinMsg(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py
index 6638a45..52791c5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py
@@ -1414,15 +1414,17 @@
 def DoType_Add_Player_Xp(curPlayer, curMission, curActionNode):
     #增加玩家相关值<Add_Player_XP value="玩家xp值"/>
     
-    xpValue = curActionNode.GetAttribute("value")
-    
-    if xpValue != "":
-        #设置玩家xp值
-        openLV, addXPValue, maxXPValue = ReadChConfig.GetEvalChConfig('PlayerXP')
-        curXp = min(int(xpValue), maxXPValue)
-        curPlayer.SetDict(ChConfig.Def_PlayerKey_RecordXPValue, curXp)
-        curPlayer.SetXP(curXp)
-        
+    #===========================================================================
+    # xpValue = curActionNode.GetAttribute("value")
+    # 
+    # if xpValue != "":
+    #    #设置玩家xp值
+    #    openLV, addXPValue, maxXPValue = ReadChConfig.GetEvalChConfig('PlayerXP')
+    #    curXp = min(int(xpValue), maxXPValue)
+    #    curPlayer.SetDict(ChConfig.Def_PlayerKey_RecordXPValue, curXp)
+    #    curPlayer.SetXP(curXp)
+    #    
+    #===========================================================================
     return
 
 #---------------------------------------------------------------------
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 edf4546..5f798dc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -3936,7 +3936,7 @@
         maxLV = IpyGameDataPY.GetFuncCfg("PlayerMaxLV", 1)
         
         curPlayer.BeginRefreshState()
-        befXP = curPlayer.GetXP()
+        #befXP = curPlayer.GetXP()
         befLV = curPlayer.GetLV()
         befFreePoint = curPlayer.GetFreePoint()
         befBaseSTR = curPlayer.GetBaseSTR()
@@ -5010,7 +5010,7 @@
                         ChConfig.TYPE_Calc_AttrPetExpRate:GameWorld.GetGameWorld().GetExpRate(),
                         ChConfig.TYPE_Calc_HitSucessRate:ChConfig.Def_MaxRateValue,
                         ChConfig.TYPE_Calc_CurePer:ChConfig.Def_MaxRateValue,
-                        
+                        ChConfig.TYPE_Calc_YinjiTime:IpyGameDataPY.GetFuncCfg('Yinji', 1),  # 每X秒自动消失一个印记
                         }
         
         for i in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
@@ -6668,6 +6668,12 @@
 def GetFabaoHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FabaoHurtPer)
 def SetFabaoHurtPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FabaoHurtPer, value)
 
+# 每X秒自动消失一个印记, 毫秒记录
+def GetLostYinjiTime(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LostYinjiTime)
+def SetLostYinjiTime(curPlayer, value): 
+    curPlayer.SetDict(ChConfig.Def_PlayerKey_LostYinjiTime, value)
+    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_YinjiTime, value, False)
+
 ## 计算功能背包物品属性 
 #  @param curPlayer 当前玩家
 #  @param packType 背包类型
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
index 81a9ade..eab101b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -56,6 +56,7 @@
 import PlayerFlashSale
 import PlayerWing
 import ChEquip
+import PlayerYinji
 
 #---------------------------------------------------------------------
 #---------------------------------------------------------------------
@@ -840,31 +841,34 @@
 # @return None
 # @remarks 玩家自动回复XP值
 def ProcessAddXP(curPlayer, tick):
-    #开放等级增加多少XP值, 最大XP值
-    openLV, addXPValue, maxXPValue = ReadChConfig.GetEvalChConfig('PlayerXP')
-    #还没到开放等级
-    if openLV > curPlayer.GetLV():
-        return
-    lastTick = curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_AddXPTick)
-    if not CommonCheckTick(curPlayer, tick, ChConfig.TYPE_Player_Tick_AddXPTick):
-        #首次登陆,将当前的XP值记录到字典中
-        if lastTick <= 0:
-            curPlayer.SetDict(ChConfig.Def_PlayerKey_RecordXPValue, curPlayer.GetXP())
-        return
-    
-    #从字典中获取当前的XP值
-    curXPValue = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_RecordXPValue)
-    #当前XP值已经是最大值了,不做处理
-    if curXPValue == maxXPValue:
-        return
-    xpRestorePer = PlayerControl.GetXPRestorePer(curPlayer)
-    addXPValue = int(addXPValue * xpRestorePer/float(ChConfig.Def_MaxRateValue))
-    nextXPValue = min(curXPValue + addXPValue, maxXPValue)
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_RecordXPValue, nextXPValue)
-    #已经达到最大的XP值了,通知客户端
-    if nextXPValue == maxXPValue:
-        #这里进行设置的时候,将会通知客户端
-        curPlayer.SetXP(nextXPValue)
+    return
+    #===========================================================================
+    # #开放等级增加多少XP值, 最大XP值
+    # openLV, addXPValue, maxXPValue = ReadChConfig.GetEvalChConfig('PlayerXP')
+    # #还没到开放等级
+    # if openLV > curPlayer.GetLV():
+    #    return
+    # lastTick = curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_AddXPTick)
+    # if not CommonCheckTick(curPlayer, tick, ChConfig.TYPE_Player_Tick_AddXPTick):
+    #    #首次登陆,将当前的XP值记录到字典中
+    #    if lastTick <= 0:
+    #        curPlayer.SetDict(ChConfig.Def_PlayerKey_RecordXPValue, curPlayer.GetXP())
+    #    return
+    # 
+    # #从字典中获取当前的XP值
+    # curXPValue = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_RecordXPValue)
+    # #当前XP值已经是最大值了,不做处理
+    # if curXPValue == maxXPValue:
+    #    return
+    # xpRestorePer = PlayerControl.GetXPRestorePer(curPlayer)
+    # addXPValue = int(addXPValue * xpRestorePer/float(ChConfig.Def_MaxRateValue))
+    # nextXPValue = min(curXPValue + addXPValue, maxXPValue)
+    # curPlayer.SetDict(ChConfig.Def_PlayerKey_RecordXPValue, nextXPValue)
+    # #已经达到最大的XP值了,通知客户端
+    # if nextXPValue == maxXPValue:
+    #    #这里进行设置的时候,将会通知客户端
+    #    curPlayer.SetXP(nextXPValue)
+    #===========================================================================
 
 
 #---------------------------------------------------------------------
@@ -1235,6 +1239,8 @@
     #回血回魔状态处理
     ProcessHPMPState(curPlayer, tick)
     
+    PlayerYinji.ProcessPlayerYinji(curPlayer, tick)
+    
     #刷新组队状态
     #ProcessTeamState(curPlayer, tick)
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerYinji.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerYinji.py
new file mode 100644
index 0000000..a6cc28f
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerYinji.py
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 印记为玩家选择战士木灵根后会获得的能量点,SP技能会附带加成或者消耗印记点
+#        
+# @author: Alee
+# @date 2019-4-26 下午03:05:54
+# @version 1.0
+#
+# @note: 用XP接口记录
+#
+#---------------------------------------------------------------------
+
+import IpyGameDataPY
+import PlayerControl
+import GameWorld
+import ChPyNetSendPack
+import NetPackCommon
+
+Def_LastYinji_Tick = "lastyjtick"   # 上一次印记消失时间
+
+#CDBPlayerRefresh_XP
+def AddYinji(curPlayer, cnt):
+    beforeCnt = GetYinjiCnt(curPlayer)
+    #上限    X个
+    curPlayer.SetXP(min(beforeCnt + cnt, IpyGameDataPY.GetFuncCfg('Yinji', 2)))
+    
+    if beforeCnt == 0:
+        # 第一次加印记需重计时
+        StartYinjiTick(curPlayer)
+    
+    return
+
+def SubYinji(curPlayer, cnt):
+    curPlayer.SetXP(max(curPlayer.GetXP() - cnt, 0))
+    return
+
+def GetYinjiCnt(curPlayer):
+    return curPlayer.GetXP()
+
+
+# 每X秒自动减少1个印记
+def ProcessPlayerYinji(curPlayer, tick):
+    if GetYinjiCnt(curPlayer) == 0:
+        return
+    
+    if tick - curPlayer.GetDictByKey(Def_LastYinji_Tick) < PlayerControl.GetLostYinjiTime(curPlayer):
+        return
+    
+    StartYinjiTick(curPlayer)
+    
+    SubYinji(curPlayer, 1)
+    
+    
+def StartYinjiTick(curPlayer):
+    curPlayer.SetDict(Def_LastYinji_Tick, GameWorld.GetGameWorld().GetTick())
+    pack = ChPyNetSendPack.tagMCYinjiStartTime()
+
+    NetPackCommon.SendFakePack(curPlayer, pack)
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index e5e748e..7d0604f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -544,6 +544,7 @@
 Def_Effect_DamagePVE = 141  # PVE固定伤害
 Def_Effect_FinalHurtPer = 142   # 最终伤害万分率
 Def_Effect_FinalHurtReducePer = 143    # 最终伤害减少万分
+Def_Effect_YinjiTime = 144    # 每X毫秒自动消失一个印记
 
 #增加%d物理伤害值,其中a值为伤害值
 Def_Effect_AddAtk = 1005
@@ -854,7 +855,8 @@
 CDBPlayerRefresh_SuperHitRateReduce,   # 暴击概率抗性 210
 CDBPlayerRefresh_LuckyHitReduce,        # 会心伤害减免固定值 
 CDBPlayerRefresh_FinalHurtReducePer,   # 最终伤害减少百分比 
-) = range(146, 213)
+CDBPlayerRefresh_YinjiTime,   # 每X秒减少印记时间,毫秒
+) = range(146, 214)
 
 TYPE_Price_Gold_Paper_Money = 5    # 金钱类型,(先用礼券,再用金子)
 TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
index 79e2178..e814874 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
@@ -169,6 +169,7 @@
    [lambda curObj:PlayerControl.GetFabaoHurt(curObj), lambda curObj, value:PlayerControl.SetFabaoHurt(curObj, value), ShareDefine.CDBPlayerRefresh_FabaoHurt, 1, 0],  # 属性法宝技能增伤
    [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秒自动消失一个印记 毫秒
 ]
 
 ## 通过索引获得属性值
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1314.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1314.py
index 33d1369..414b0c1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1314.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1314.py
@@ -72,13 +72,20 @@
     #攻击次数处理,配置为0的说明是以持续时间为主
     # SwordStormAttack 可能因被动导致自己死亡,所以不能在攻击后处理
     curBuff.SetValue(max(curBuff.GetValue() - 1, 0))
-         
             
     BaseAttack.SwordStormAttack(tagObj, srcPosX, srcPosY, curSkill, skillPer, 
                                 skillEnhance, skillMatrix, tick)
-
-
     
+    if GameObj.GetHP(tagObj) > 0:
+        if tagObj.GetDictByKey(ChConfig.Def_PlayerKey_1314HurtCount):
+            # 需要时间配合,不然会导致伤害还没计算完毕 buff提前消失了
+            curBuff.SetValue(curBuff.GetValue() + 1)
+            tagObj.SetDict(ChConfig.Def_PlayerKey_1314HurtCount, 0)
+            
+        if curBuff.GetValue() == 0:
+            # 让下一次循环取消buff,客户端退出旋转
+            curBuff.SetRemainTime(1)
+
 
 #buffvalue第一个值为攻击次数, 第二个值为被动增强
 def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_900.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_900.py
new file mode 100644
index 0000000..6ab1447
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_900.py
@@ -0,0 +1,50 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 根据印记增加属性值-线性
+#
+# @author: Alee
+# @date 2019-4-26 下午07:29:19
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+#导入
+import PlayerYinji
+import ChConfig
+#---------------------------------------------------------------------
+
+## buff线性增加属性
+#  @param defender Buff承受者
+#  @param curEffect 技能效果
+#  @param calcDict 技能效果累加总表
+#  @return None
+def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
+    attrType = curEffect.GetEffectValue(0)
+
+    calcDict[attrType] = calcDict.get(attrType, 0) + curEffect.GetEffectValue(1)*min(curBuff.GetValue(), curEffect.GetEffectValue(2))
+    return
+
+
+## 返回buff类型,线性与否
+#  @param 
+#  @return None
+#  @remarks 函数详细说明.  
+def GetCalcType():
+    return ChConfig.TYPE_Linear
+
+
+##计算增强值
+# @param attacker 攻击者实例
+# @param curSkill 技能实例
+# @param curEffect 当前技能效果1
+# @return 总值
+def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):
+    
+    return [PlayerYinji.GetYinjiCnt(defender)]
+
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4526.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4526.py
new file mode 100644
index 0000000..5f9aff7
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4526.py
@@ -0,0 +1,35 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: buff中提高重击概率 ,可附加条件是否针对第一目标
+#
+# @author: Alee
+# @date 2019-4-25 下午02:49:27
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import AttackCommon
+
+def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
+    useSkill = skillkwargs.get("useSkill", None)
+    # 主动型技能才有效
+    if passiveEffect.GetEffectValue(2) and useSkill:
+        if useSkill.GetFuncType() not in [ChConfig.Def_SkillFuncType_FbSkill,
+                                          ChConfig.Def_SkillFuncType_NormalAttack]:
+            return False
+        
+    if passiveEffect.GetEffectValue(1):
+        if AttackCommon.GetFirstDefenderID(attacker) != defender.GetID():
+            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/PassiveBuff_4527.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4527.py
new file mode 100644
index 0000000..baeedc5
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4527.py
@@ -0,0 +1,32 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: buff中提高普通攻击的重击概率
+#
+# @author: Alee
+# @date 2019-4-25 下午03:52:01
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import SkillCommon
+import BuffSkill
+
+def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
+    useSkill = skillkwargs.get("useSkill", None)
+    if not useSkill:
+        # 普攻:无技能,技能型普攻
+        return True
+    if useSkill.GetFuncType() != ChConfig.Def_SkillFuncType_NormalAttack:
+        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/PassiveBuff_4528.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4528.py
new file mode 100644
index 0000000..1f7a3ec
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4528.py
@@ -0,0 +1,36 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: buff中增加重击伤害加成(重击下) ,可附加条件是否针对第一目标
+#
+# @author: Alee
+# @date 2019-4-25 下午02:49:27
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import AttackCommon
+
+def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
+    useSkill = skillkwargs.get("useSkill", None)
+    # 主动型技能才有效
+    if passiveEffect.GetEffectValue(2) and useSkill:
+        if useSkill.GetFuncType() not in [ChConfig.Def_SkillFuncType_FbSkill,
+                                          ChConfig.Def_SkillFuncType_NormalAttack]:
+            return False
+        
+    if passiveEffect.GetEffectValue(1):
+        # 只针对第一目标
+        if AttackCommon.GetFirstDefenderID(attacker) != defender.GetID():
+            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/PassiveBuff_4529.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4529.py
new file mode 100644
index 0000000..4dd58f4
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4529.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: buff中普通攻击回血百分比  是否针对第一目标
+#
+# @author: Alee
+# @date 2019-4-26 下午02:25:50
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import AttackCommon
+
+def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
+    useSkill = skillkwargs.get("useSkill", None)
+    if not useSkill:
+        return
+    
+    
+    if useSkill.GetFuncType() != ChConfig.Def_SkillFuncType_NormalAttack:
+        return
+        
+    if passiveEffect.GetEffectValue(1):
+        # 只针对第一目标
+        if AttackCommon.GetFirstDefenderID(attacker) != defender.GetID():
+            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_4081.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4081.py
new file mode 100644
index 0000000..d32845b
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4081.py
@@ -0,0 +1,27 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 提高重击概率
+#
+# @author: Alee
+# @date 2019-4-24 下午03:46:50
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+import AttackCommon
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+    if effect.GetEffectValue(1):
+        # 只针对第一目标
+        if AttackCommon.GetFirstDefenderID(attacker) != defender.GetID():
+            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_4082.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4082.py
new file mode 100644
index 0000000..c88d538
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4082.py
@@ -0,0 +1,33 @@
+#!/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):
+    if effect.GetEffectValue(1):
+        # 转为附加效果触发,且需主效果不使被动技能进入CD才可触发
+        useSkill = GameWorld.GetGameData().GetSkillBySkillID(effect.GetEffectValue(1))
+        if not useSkill:
+            return False
+        SkillShell.UsePassiveTriggerSkill(attacker, useSkill, defender, GameWorld.GetGameWorld().GetTick(), True)
+        
+        return False
+        
+    if not GameObj.GetPyPlayerState(attacker, effect.GetEffectValue(1)):
+        #GameWorld.DebugLog("状态触发----%s"%effect.GetEffectValue(1))
+        return False
+        
+    return GameWorld.CanHappen(effect.GetEffectValue(0))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4083.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4083.py
new file mode 100644
index 0000000..ae282b5
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4083.py
@@ -0,0 +1,29 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 增加重击伤害加成(重击下)
+#
+# @author: Alee
+# @date 2019-4-25 下午10:14:25
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import AttackCommon
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+    if effect.GetEffectValue(1):
+        # 只针对第一目标
+        if AttackCommon.GetFirstDefenderID(attacker) != defender.GetID():
+            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_4084.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4084.py
new file mode 100644
index 0000000..37ed246
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4084.py
@@ -0,0 +1,19 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 类剑刃风暴每次攻击对第一目标重击触发多一次伤害(旋转)
+#
+# @author: Alee
+# @date 2019-4-26 下午12:31:37
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+import ChConfig
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+    attacker.SetDict(ChConfig.Def_PlayerKey_1314HurtCount, 1)
+    return False
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4085.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4085.py
new file mode 100644
index 0000000..9737451
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4085.py
@@ -0,0 +1,22 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 使用技能后印记数量
+#
+# @author: Alee
+# @date 2019-4-26 下午05:52:27
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import PlayerYinji
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+
+    PlayerYinji.AddYinji(attacker, effect.GetEffectValue(0))
+    return False
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4086.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4086.py
new file mode 100644
index 0000000..e0e3f95
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4086.py
@@ -0,0 +1,32 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 根据印记来增加攻击(技能)伤害
+#
+# @author: Alee
+# @date 2019-4-26 下午05:58:01
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import AttackCommon
+import PlayerYinji
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+    if effect.GetEffectValue(1):
+        # 只针对第一目标
+        if AttackCommon.GetFirstDefenderID(attacker) != defender.GetID():
+            return False
+    
+    
+    return True if PlayerYinji.GetYinjiCnt(attacker) else False
+    
+
+def GetValue(attacker, defender, effect):
+    return float(effect.GetEffectValue(0)*min(PlayerYinji.GetYinjiCnt(attacker), effect.GetEffectValue(1)))/ChConfig.Def_MaxRateValue
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4087.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4087.py
new file mode 100644
index 0000000..09763de
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4087.py
@@ -0,0 +1,25 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 印记达到X以上才增加技能伤害
+#
+# @author: Alee
+# @date 2019-4-26 下午07:46:07
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+import ChConfig
+import PlayerYinji
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+    
+    return True if PlayerYinji.GetYinjiCnt(attacker) >= effect.GetEffectValue(1) else False
+    
+
+def GetValue(attacker, defender, effect):
+    return float(effect.GetEffectValue(0))/ChConfig.Def_MaxRateValue
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4088.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4088.py
new file mode 100644
index 0000000..102a2c9
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4088.py
@@ -0,0 +1,28 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 消耗固定印记数量增加技能伤害
+#
+# @author: Alee
+# @date 2019-4-26 下午07:46:07
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+import ChConfig
+import PlayerYinji
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+    if PlayerYinji.GetYinjiCnt(attacker) < effect.GetEffectValue(1):
+        return False
+    
+    PlayerYinji.SubYinji(attacker, effect.GetEffectValue(1))
+    return True
+    
+
+def GetValue(attacker, defender, effect):
+    return float(effect.GetEffectValue(0))/ChConfig.Def_MaxRateValue
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4089.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4089.py
new file mode 100644
index 0000000..732c6b1
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4089.py
@@ -0,0 +1,28 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 消耗XX个印记数量增加技能伤害,并根据印记数加成
+#
+# @author: Alee
+# @date 2019-4-26 下午07:46:07
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+import ChConfig
+import PlayerYinji
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+    if not PlayerYinji.GetYinjiCnt(attacker):
+        return False
+    
+    PlayerYinji.SubYinji(attacker, min(PlayerYinji.GetYinjiCnt(attacker), effect.GetEffectValue(1)))
+    return True
+    
+
+def GetValue(attacker, defender, effect):
+    return float(effect.GetEffectValue(0)*min(PlayerYinji.GetYinjiCnt(attacker), effect.GetEffectValue(1)))/ChConfig.Def_MaxRateValue
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4090.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4090.py
new file mode 100644
index 0000000..8538ca1
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4090.py
@@ -0,0 +1,23 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 攻击后根据指定印记倍数触发技能
+#
+# @author: Alee
+# @date 2019-4-26 下午08:03:44
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+import PlayerYinji
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+    cnt = PlayerYinji.GetYinjiCnt(attacker)
+    if cnt == 0:
+        return False
+        
+    return True if cnt%effect.GetEffectValue(0) == 0 else False
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4091.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4091.py
new file mode 100644
index 0000000..896627e
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4091.py
@@ -0,0 +1,28 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 使用非攻击类技能后增加印记数, 可增加增益buff数的印记数
+#
+# @author: Alee
+# @date 2019-4-26 下午08:20:09
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import PlayerYinji
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+    addCnt = effect.GetEffectValue(0)
+    if effect.GetEffectValue(1):
+        addCnt = min(attacker.GetBuffState().GetBuffCount(), effect.GetEffectValue(0))
+        
+    if not addCnt:
+        return False
+    
+    PlayerYinji.AddYinji(attacker, addCnt)
+        
+    return False
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 828226c..145dde6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
@@ -121,7 +121,7 @@
     # 刷被动效果和属性
     page = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GFPassivePage, 0, ChConfig.Def_PDictType_GFPassive)
     if clientData.Page == page:
-        GetPassiveEffManager().RegistPassiveEffSet(curPlayer)
+        GetPassiveEffManager().RegistPassiveEffSet(curPlayer, True)
         PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
         
     EventShell.EventRespons_PassiveSet(curPlayer)
@@ -157,7 +157,7 @@
     NetPackCommon.SendFakePack(curPlayer, sendPack)
     
     # 刷被动效果和属性
-    GetPassiveEffManager().RegistPassiveEffSet(curPlayer)
+    GetPassiveEffManager().RegistPassiveEffSet(curPlayer, True)
     PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
     return
 
@@ -362,6 +362,17 @@
              4078:ChConfig.TriggerType_AttackOver,  # 攻击(对敌技能)后被动技能被触发 4
              4079:ChConfig.TriggerType_IsDealy,  # 是否触发致命一击 72
              4080:ChConfig.TriggerType_BounceHPPer, # 反弹伤害百分比值17,
+             4081:ChConfig.TriggerType_AddThumpHitRate, # 提高重击概率 73
+             4082:ChConfig.TriggerType_ThumpHit, # 对第一目标重击触发技能
+             4083:ChConfig.TriggerType_AddThumpHitPer, # 增加重击伤害百分比
+             4084:ChConfig.TriggerType_ThumpHit, # 对第一目标重击触发技能
+             4085:ChConfig.TriggerType_AttackOver,  
+             4086:ChConfig.TriggerType_AttackAddSkillPer,  # 所有攻击伤害(SkillPer)增加,含普攻,计算时 5
+             4087:ChConfig.TriggerType_AttackAddSkillPer,  # 所有攻击伤害(SkillPer)增加,含普攻,计算时 5
+             4088:ChConfig.TriggerType_AttackAddSkillPer,  # 所有攻击伤害(SkillPer)增加,含普攻,计算时 5
+             4089:ChConfig.TriggerType_AttackAddSkillPer,  # 所有攻击伤害(SkillPer)增加,含普攻,计算时 5
+             4090:ChConfig.TriggerType_AttackOver,  # 攻击(对敌技能)后被动技能被触发 4
+             4091:ChConfig.TriggerType_SkillOverNoAttack,   # 技能释放后 与TriggerType_AttackOver相反19,
              }
     return tdict.get(effectID, -1) 
     #===========================================================================
@@ -403,6 +414,10 @@
              4523:ChConfig.TriggerType_SuperHitSkillPer, # 暴击时,增加技能伤害 10
              4524:ChConfig.TriggerType_SuperHitSubLayer, # 暴击减层 67
              4525:ChConfig.TriggerType_SuperHitSkipCD, # 暴击无冷却 68
+             4526:ChConfig.TriggerType_AddThumpHitRate, # 增加重击概率
+             4527:ChConfig.TriggerType_AddThumpHitRate, # 增加重击概率
+             4528:ChConfig.TriggerType_AddThumpHitPer, # 重击时 增加重击百分比 75
+             4529:ChConfig.TriggerType_Buff_SuckBloodPer,   # BUFF类: 百分比吸血, 此处非属性类
              
              803:ChConfig.TriggerType_BloodShield,  # 血盾
              806:ChConfig.TriggerType_BloodShield,  # 血盾
@@ -551,15 +566,21 @@
     
     
     # 重刷可装备的被动技能
-    def RefreshPassiveSkillSet(self):
+    def RefreshPassiveSkillSet(self, isCD=False):
         self.AffectPassiveSkillSetDict = {}
         skillManager = self.gameObj.GetSkillManager()
         skills = FindUsePassiveSkills(self.gameObj)
+        
+        tick = GameWorld.GetGameWorld().GetTick()
         
         for skillID in skills:
             curSkill = skillManager.FindSkillBySkillID(skillID)
             if not curSkill:
                 continue
+            
+            if isCD:
+                # 重切需进入CD
+                SkillCommon.SetSkillRemainTime(curSkill, PlayerControl.GetReduceSkillCDPer(self.gameObj), tick, self.gameObj)
             
             skillTypeID = curSkill.GetSkillTypeID()
             connSkillID = SkillShell.GetConnectSkillID(curSkill)    # 关联技能ID, 0代表不限技能
@@ -650,7 +671,8 @@
         return self.AffectSkillDict
     
 
-    def GetPassiveSkillsByTriggerType(self, triggerType, connSkillID=0):
+    def GetPassiveSkillsByTriggerType(self, triggerType, connSkill=None):
+        connSkillID = connSkill.GetSkillTypeID() if connSkill else 0
         skillList = []
         ## bug:2018-03-15
         ## skillList=self.AffectSkillDict.get((triggerType, connSkillID), [])再用extend会导致AffectSkillDict无限增长
@@ -658,6 +680,18 @@
         skillList.extend(self.AffectPassiveSkillSetDict.get((triggerType, connSkillID), []))
         skillList.extend(self.AffectDogzSkillDict.get((triggerType, connSkillID), []))
         skillList.extend(self.AffectSuperEquipSkillDict.get((triggerType, connSkillID), []))
+        
+        # 指定特殊类型可触发
+        if connSkill and connSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_FbSkill, ChConfig.Def_SkillFuncType_NormalAttack]:
+            funcType = connSkill.GetFuncType()
+            skillList.extend(self.AffectSkillDict.get((triggerType, funcType), []))
+            skillList.extend(self.AffectPassiveSkillSetDict.get((triggerType, funcType), []))
+            skillList.extend(self.AffectDogzSkillDict.get((triggerType, funcType), []))
+            skillList.extend(self.AffectSuperEquipSkillDict.get((triggerType, funcType), []))
+        
+        # 被动再触发被动限制为指定
+        if connSkill and SkillCommon.isPassiveSkill(connSkill):
+            return skillList
         
         if connSkillID != 0 and connSkillID != ChConfig.Def_SkillID_Somersault:
             skillList.extend(self.AffectSkillDict.get((triggerType, 0), []))
@@ -713,16 +747,16 @@
         return
     
     # 人物需同步注册被动技能
-    def RegistPassiveEffSet(self, gameObj):
+    def RegistPassiveEffSet(self, gameObj, isCD=False):
         passiveEff = self.GetPassiveEff(gameObj)
         if not passiveEff:
             # 强制刷新所有被动技能
             passiveEff = PassiveEff(gameObj)
-            if not passiveEff.RefreshPassiveSkillSet():
+            if not passiveEff.RefreshPassiveSkillSet(isCD):
                 return
             self.AddPassiveEff(gameObj, passiveEff)
         else:
-            passiveEff.RefreshPassiveSkillSet()
+            passiveEff.RefreshPassiveSkillSet(isCD)
         return
         
         
@@ -859,7 +893,7 @@
         return 0, 0
         
     connSkillID = connSkill.GetSkillTypeID() if connSkill else 0
-    skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkillID)
+    skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkill)
     if not skills:
         return 0, 0
         
@@ -993,28 +1027,17 @@
     if not attacker:
         return False
 
-    stopPassiveSkill = False   # 被动技能不能再触发被动技能,但可以触发天赋技能
     if connSkill:
         if not connSkill.GetFuncType():
             # 非功能类技能,避免死循环
             return False
-        if SkillCommon.isPassiveSkill(connSkill):
-            #GameWorld.DebugLog("被动技能不能再次触发被动技能")
-            #return False
-            stopPassiveSkill = True
         
-    if SkillCommon.GetUsingPassiveSkill(attacker) and triggerType != ChConfig.TriggerType_BuffState:
-        # 防范被动技能触发的 非被动技能
-        #GameWorld.DebugLog("被动技能释放中不能再次触发被动技能---%s"%triggerType)
-        #return 
-        stopPassiveSkill = True
-    
     passiveEff = GetPassiveEffManager().GetPassiveEff(attacker)
     if not passiveEff:
         return False
         
     connSkillID = connSkill.GetSkillTypeID() if connSkill else 0
-    skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkillID)
+    skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkill)
     if not skills:
         return False
         
@@ -1033,10 +1056,6 @@
 
         if not IsValidPassiveSkill(curSkill):
             continue
-        
-        if stopPassiveSkill and curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_GiftSkill:
-            # 只有天赋才可以再次被触发
-            continue 
         
         effect = SkillCommon.GetSkillEffectByEffectID(curSkill, effectID)
         if not effect:
@@ -1114,7 +1133,7 @@
     if not passiveEff:
         return 0
     connSkillID = connSkill.GetSkillTypeID() if connSkill else 0
-    skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkillID)
+    skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkill)
     if not skills:
         return 0
     
@@ -1179,7 +1198,7 @@
     if not passiveEff:
         return []
     connSkillID = connSkill.GetSkillTypeID() if connSkill else 0
-    skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkillID)
+    skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkill)
     if not skills:
         return []
     
@@ -1228,7 +1247,7 @@
     if not passiveEff:
         return
     connSkillID = connSkill.GetSkillTypeID() if connSkill else 0
-    skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkillID)
+    skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkill)
     if not skills:
         return
     
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 d298435..38c0e1d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -2867,19 +2867,6 @@
         OperControlManager.SetObjActState(curObj, buffSkill)
 
 
-# 非属性技能算属性 特殊处理
-# 法宝SP技能 如1-4级为增加属性,第5级为伤害效果,第6-10级就要包含属性和伤害效果
-def CalcFabaoSPSkillAttr(curPlayer, curPlayerSkill, allAttrList):
-    if curPlayerSkill.GetFuncType() != ChConfig.Def_SkillFuncType_FbSPSkill:
-        return
-    
-    value = GetMaxHPAttrValue(curPlayerSkill)
-    if value == 0:
-        return
-    
-    PlayerControl.CalcAttrDict_Type(ShareDefine.Def_Effect_MaxHP, value, allAttrList)
-    return
-
 
 # 计算属性类技能的属性,同buff层不算战力
 def CalcPassiveAttr_Effect(curPlayer, allAttrList):
@@ -2889,7 +2876,6 @@
         if curPlayerSkill == None:
             continue
         
-        CalcFabaoSPSkillAttr(curPlayer, curPlayerSkill, allAttrList)
         if not SkillCommon.isPassiveAttr(curPlayerSkill):
             continue
         
@@ -3469,7 +3455,6 @@
 def GetAddBuffValue(attacker, curSkill, defender):
     #验证该技能效果1的ID,提取公式
     curEffect = curSkill.GetEffect(0)
-    effectID = curEffect.GetEffectID()  
     
     moduleSuffix = GetBuffModuleSuffix(curEffect)
     
@@ -3586,7 +3571,7 @@
     return
 
 #---------------------------------------------------------------------
-# 获得关联技能
+# 获得关联技能,0 全部 1是主动型技能(法宝,普攻)   其他技能ID
 def GetConnectSkillID(curSkill):
     return curSkill.GetExAttr1()
 
@@ -3623,9 +3608,7 @@
 def GetUpLVCostItemNum(curSkill):
     return curSkill.GetExAttr5()
 
-# 技能特殊增加属性配置,目前只支持生命,潜力技能专用
-def GetMaxHPAttrValue(curSkill):
-    return curSkill.GetMP()
+
 
 ##获得当前技能升级消耗的真气值
 # @param curSkill 当前技能技能

--
Gitblit v1.8.0