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