From fab6b218ebda60b9d364d0188be91e4b104f03e8 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 21 一月 2019 17:41:13 +0800
Subject: [PATCH] 5959 子 【开发】【1.5.100】增加诛仙神技 / 【后端】【1.5.100】诛仙神技

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py                     |    4 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4069.py |   37 ++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                         |    4 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py                   |    8 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4519.py  |    9 ++-
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                              |    4 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py                |   12 ++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py     |   32 +++++++++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4028.py |   10 ++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                            |   16 ++++-
 10 files changed, 118 insertions(+), 18 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 4f104c8..712fdd3 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -787,7 +787,9 @@
 CDBPlayerRefresh_SoulSplinters,         # 聚魂碎片 197
 CDBPlayerRefresh_SoulCore,              # 核心环 198
 CDBPlayerRefresh_Honor,                 # 荣誉 199
-) = range(146, 200)
+CDBPlayerRefresh_ZhuxianRate,           # 诛仙一击概率 200
+CDBPlayerRefresh_ZhuxianHurtPer,        # 诛仙一击伤害百分比 201
+) = range(146, 202)
 
 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 71e9bed..cef9985 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
@@ -1301,11 +1301,12 @@
                           ChConfig.Def_HurtType_LuckyHit:[False, 0, 0],
                           ChConfig.Def_HurtType_SuperHit:[False, 0, 0],
                           ChConfig.Def_HurtType_Parry:[False, 0, 0],
+                          ChConfig.Def_HurtType_Zhuxian:[False, 0, 0],
                           }
     
     calcTypeList =  []
     if atkObjType == IPY_GameWorld.gotPlayer:
-        calcTypeList += [ChConfig.Def_HurtType_LuckyHit, ChConfig.Def_HurtType_SuperHit]
+        calcTypeList += [ChConfig.Def_HurtType_LuckyHit, ChConfig.Def_HurtType_SuperHit, ChConfig.Def_HurtType_Zhuxian]
     if defObjType == IPY_GameWorld.gotPlayer:
         calcTypeList += [ChConfig.Def_HurtType_Parry]
     # 暂时只计算玩家
@@ -1318,6 +1319,7 @@
                   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),
                   }
     
     hadCheckList = [] # 已经处理过的伤害类型列表
@@ -1403,6 +1405,17 @@
     if GameWorld.CanHappen(ChConfig.Def_ChanceDefRate):
         return True, 0, chanceDefPer
     return
+
+def __HurtTypeHappen_Zhuxian(atkObj, defObj, happenState):
+    """诛仙一击"""
+    rate = PlayerControl.GetZhuXianRate(atkObj)
+    if not rate:
+        return
+    
+    if GameWorld.CanHappen(rate):
+        return True, PlayerControl.GetZhuXianHurtPer(atkObj), 0
+    return
+
 
 
 # 改变技能伤害(效果ID1010), 野外小怪1009替换1010伤害(2018-03-07增加精英怪)
@@ -1617,9 +1630,21 @@
     reducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_ReduceHurtHPPer)
     hurtValue = int(hurtValue*(max(ChConfig.Def_MaxRateValue - reducePer, 0))*1.0/ChConfig.Def_MaxRateValue)
     
+    
+    # 终极斩杀新效果,必须和斩杀严格区分,会涉及到CD概率,已经触发其他技能等问题
+    if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_ZhongjiZhansha):
+        # 斩杀
+        hurtType = ChConfig.Def_HurtType_ZhognjiZhansha
+        hurtValue = GameObj.GetHP(defObj)
+        #伤害结构体
+        resultHurtType.HurtHP = hurtValue
+        resultHurtType.HurtType = hurtType
+        resultHurtType.RealHurtHP = hurtValue
+        
+        remainHP = 0 # 剩余血量
 
     # 斩杀,濒死等情况的处理
-    if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackKill):
+    elif PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackKill):
         # 斩杀
         hurtType = ChConfig.Def_HurtType_Zhansha
         hurtValue = GameObj.GetHP(defObj)
@@ -1816,7 +1841,8 @@
     isLuckyHit, aLuckyHit, dLuckyHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_LuckyHit] # 幸运一击
     isSuperHit, aSuperHit, dSuperHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_SuperHit] # 暴击
     dDamChanceDef = hurtTypeResultDict[ChConfig.Def_HurtType_Parry][2] # 抵御, 大于0代表触发抵御效果
-
+    isZhuxianHit, aZhuxianHurtPer, dZhuxianReducePer = hurtTypeResultDict[ChConfig.Def_HurtType_Zhuxian] # 诛仙一击
+    
     if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_OneDamage):
         return 1, hurtType
     
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 c32efd6..926174b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
@@ -1490,12 +1490,14 @@
         if GameObj.GetHP(defender) <= 0:
             if hurtList[1] == IPY_GameWorld.gotPlayer:
                 if hurtList[2] == ChConfig.Def_HurtType_Zhansha:
-                    defender.SetDict("zhansha", 1)
+                    defender.SetDict(ChConfig.Def_PlayerKey_Zhansha, 1)
+                elif hurtList[2] == 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] == ChConfig.Def_HurtType_Zhansha:
-                    defender.SetDict("zhansha", 0)
+                if hurtList[2] in [ChConfig.Def_HurtType_Zhansha, ChConfig.Def_HurtType_ZhognjiZhansha]:
+                    defender.SetDict(ChConfig.Def_PlayerKey_Zhansha, 0)
             continue
         
         if usePassiveSkillResult:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 662e63a..57b1728 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 = 131
+Def_Calc_AllAttrType_MAX = 133
 #基本属性BUFF计算,顺序与 ObjProperty_AttrByIndex 对应,同时也为buff效果ID同步通知策划
 TYPE_Calc_AttrList = (
 #基础属性
@@ -214,7 +214,9 @@
 TYPE_Calc_WingHPPer,                    # 翅膀生命百分比
 TYPE_Calc_SuiteBasePer,                 # 套装基础属性百分比
 TYPE_Calc_PlusBaseAtkPer,               # 强化基础攻击百分比
-TYPE_Calc_ProDef,                       # 当前防护值
+TYPE_Calc_ProDef,                       # 当前防护值 130
+TYPE_Calc_ZhuxianRate,                  # 诛仙一击的概率
+TYPE_Calc_ZhuxianHurtPer,               # 诛仙一击的伤害比
 ) = range(1, Def_Calc_AllAttrType_MAX)
 
 
@@ -772,7 +774,9 @@
 Def_HurtType_Immune,           # 免疫 10
 Def_HurtType_RealmSupress,     # 境界压制 11
 Def_HurtType_Zhansha,     # 斩杀 12
-) = range(1, 13)
+Def_HurtType_Zhuxian,     # 诛仙一击 13
+Def_HurtType_ZhognjiZhansha,     # 终极斩杀 14
+) = range(1, 15)
 #Def_HurtType_SuckBlood,      # 吸血 
 
 (
@@ -3028,6 +3032,9 @@
 
 #---SetDict 玩家字典KEY,不存于数据库---
 # key的长度不能超过29个字节
+Def_PlayerKey_Zhansha = "zhansha"   # 斩杀标志
+Def_PlayerKey_ZhuxianRate = "ZXRate"   # 诛仙一击的概率
+Def_PlayerKey_ZhuxianHurtPer = "ZXHurtPer"   # 诛仙一击的伤害%
 Def_PlayerKey_LockHPSkillID = "LockHPSkillID"   # 锁血功能的技能
 Def_PlayerKey_GodWeaponBeforeProDef = "GWBPD"   # 神兵护盾被攻击前的值
 Def_PlayerKey_curHurtValue = "curHurtValue"     # 计算中的临时伤害值,技能特殊用
@@ -4469,7 +4476,8 @@
 TriggerType_LockHP, # 锁血触发技能 63
 TriggerType_BeLuckyHit, # 被会心一击触发技能 64
 TriggerType_BeLuckyHitSubPer, # 减少受到的会心伤害 65
-) = range(1, 66)
+TriggerType_ZhongjiZhansha, # 终极斩杀 66
+) = range(1, 67)
 
 
 # NPC功能类型定义
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 7f1ddd9..17a6cb5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -6627,6 +6627,18 @@
 def GetFuncDef(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CopyFuncAttr % (ChConfig.TYPE_Calc_AttrDEF - 1))
 def SetFuncDef(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_CopyFuncAttr % (ChConfig.TYPE_Calc_AttrDEF - 1), value)
 
+#---诛仙一击概率---
+def GetZhuXianRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ZhuxianRate)
+def SetZhuXianRate(curPlayer, value): 
+    curPlayer.SetDict(ChConfig.Def_PlayerKey_ZhuxianRate, value)
+    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ZhuxianRate, value, False) 
+
+#---诛仙一击伤害百分比---
+def GetZhuXianHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ZhuxianHurtPer)
+def SetZhuXianHurtPer(curPlayer, value): 
+    curPlayer.SetDict(ChConfig.Def_PlayerKey_ZhuxianHurtPer, value)
+    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ZhuxianHurtPer, value, False)
+
 
 ## 增加天梯竞技场积分
 #  @param curPlayer 玩家实例
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 4f104c8..712fdd3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -787,7 +787,9 @@
 CDBPlayerRefresh_SoulSplinters,         # 聚魂碎片 197
 CDBPlayerRefresh_SoulCore,              # 核心环 198
 CDBPlayerRefresh_Honor,                 # 荣誉 199
-) = range(146, 200)
+CDBPlayerRefresh_ZhuxianRate,           # 诛仙一击概率 200
+CDBPlayerRefresh_ZhuxianHurtPer,        # 诛仙一击伤害百分比 201
+) = range(146, 202)
 
 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 e46b79c..f0807ee 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
@@ -167,6 +167,10 @@
    [lambda curObj:PlayerControl.GetSuiteBasePer(curObj), lambda curObj, value:PlayerControl.SetSuiteBasePer(curObj, value), 0, 0, 0],      # 套装基础属性百分比
    [lambda curObj:PlayerControl.GetPlusBaseAtkPer(curObj), lambda curObj, value:PlayerControl.SetPlusBaseAtkPer(curObj, value), 0, 0, 0],      # 强化基础攻击百分比
    [lambda curObj:PlayerControl.GetProDef(curObj), lambda curObj, value:PlayerControl.SetProDef(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_ExAttr4, 1, 0],  # 当前防护值
+   [lambda curObj:PlayerControl.GetZhuXianRate(curObj), lambda curObj, value:PlayerControl.SetZhuXianRate(curObj, value), ShareDefine.CDBPlayerRefresh_ZhuxianRate, 1, 0],      # 诛仙一击概率
+   [lambda curObj:PlayerControl.GetZhuXianHurtPer(curObj), lambda curObj, value:PlayerControl.SetZhuXianHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_ZhuxianHurtPer, 1, 0],      # 诛仙一击伤害比
+
+
 ]
 
 ## 通过索引获得属性值
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4519.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4519.py
index 9ecff4e..ca05704 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4519.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4519.py
@@ -22,9 +22,12 @@
         # 当前已经被处理为死亡,那么就不触发
         return False
     
-    if attacker.GetDictByKey("zhansha") and passiveEffect.GetEffectValue(0):
-        # 斩杀不触发的标志
-        return False
+    zhanshaState = attacker.GetDictByKey(ChConfig.Def_PlayerKey_Zhansha)
+    
+    if zhanshaState:
+        # 按位判断,1为斩杀情况下,此技能不可被触发,2为终极斩杀不触发,3为任何斩杀都不触发
+        if (passiveEffect.GetEffectValue(2) & pow(2, zhanshaState-1)) != 0:
+            return False
     
     attacker.SetHP(1)
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4028.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4028.py
index 55f325f..a652780 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4028.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4028.py
@@ -22,9 +22,13 @@
         # 当前已经被处理为死亡,那么就不触发
         return False
 
-    if attacker.GetDictByKey("zhansha") and effect.GetEffectValue(2):
-        # 斩杀不触发的标志
-        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
+    
     
     result = GameWorld.CanHappen(effect.GetEffectValue(0))
     if result:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4069.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4069.py
new file mode 100644
index 0000000..851cc16
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4069.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+# @todo: 对生命低于XX的玩家 有XX概率 《终极斩杀》
+#
+# @author: Alee
+# @date 2018-1-9 下午09:39:37
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import GameObj
+import IPY_GameWorld
+import PassiveBuffEffMng
+# 血量低于XX
+def CheckCanHappen(attacker, defender, effect, curSkill):
+    if not defender:
+        return False
+    if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
+        return False
+    if GameObj.GetHP(defender)*ChConfig.Def_MaxRateValue/GameObj.GetMaxHP(defender) >= effect.GetEffectValue(0):
+        return False
+    
+    value = effect.GetEffectValue(1)
+
+    #value += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_AttackKillHappen)
+
+    return GameWorld.CanHappen(value)
+    
+
+def GetValue(attacker, defender, effect):
+    return 1
+

--
Gitblit v1.8.0