From 0ff8e21c92b39adfdf062b40c4e0147213bba70a Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 26 十一月 2018 23:18:29 +0800
Subject: [PATCH] 4923 【后端】【1.3】神兵技能
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_802.py | 27 +++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_520.py | 49 +++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4066.py | 34 ++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_807.py | 33 +-----
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4065.py | 34 ++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4067.py | 35 +++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py | 19 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 13 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_807.py | 52 ++++++++++
10 files changed, 267 insertions(+), 33 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
index 3c4b876..b7f7d9f 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
@@ -1503,7 +1503,7 @@
return True
# 攻击时防守方神兵护盾的处理
-def CalcAtkProDef(atkObj, defObj, hurtValue):
+def CalcAtkProDef(atkObj, defObj, hurtValue, curSkill, tick):
if defObj.GetGameObjType() != IPY_GameWorld.gotPlayer:
return hurtValue
@@ -1518,6 +1518,9 @@
PlayerControl.SetProDef(defObj, curProDef - absortValue)
+ # 被动技能触发
+ defObj.SetDict(ChConfig.Def_PlayerKey_GodWeaponBeforeProDef, curProDef)
+ PassiveBuffEffMng.OnPassiveSkillTrigger(defObj, atkObj, curSkill, ChConfig.TriggerType_ProDefValue, tick)
return hurtValue - absortValue
## 计算伤血值
@@ -1567,7 +1570,19 @@
hurtValue, hurtType = CalcHurtHP(atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, tick, orgAtkObj=attacker)
# 优先处理神兵护盾
- hurtValue = CalcAtkProDef(atkObj, defObj, hurtValue)
+ hurtValue = CalcAtkProDef(atkObj, defObj, hurtValue, curSkill, tick)
+
+ # 伤害吸收盾回血型
+ buffManager = defObj.GetBuffState()
+ curEffect, plusValue, skillID = BuffSkill.FindBuffEffectPlusByEffectID(buffManager, ChConfig.Def_Skill_Effect_AbsorbShieldXMZJ)
+ if skillID:
+ absortValue = hurtValue*curEffect.GetEffectValue(0)/ShareDefine.Def_MaxRateValue
+ if absortValue:
+ hurtValue -= absortValue
+ findBuff = SkillCommon.FindBuffByID(defObj, skillID)[0]
+ if findBuff:
+ # 用于回血
+ findBuff.SetValue(int(findBuff.GetValue() + absortValue))
if defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldValue):
# 麒麟护盾吸收伤害,将抵消的伤害存储
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 45deeff..4bd73c9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -553,6 +553,7 @@
#写死的技能效果ID---------------------------------------------------------------------
Def_Skill_Effect_AddAtkByHP = 503 # 每损失XX血量增加攻击XX,最高攻击加成XX
Def_Skill_Effect_AbsorbShield = 801 # A值记录吸收伤害值,B值记录吸收值上限为xx%血量上限值 C值为释放的爆炸技能ID 如麒麟盾
+Def_Skill_Effect_AbsorbShieldXMZJ = 802 # 须弥真界 神兵技能吸收伤害 百分比
Def_Skill_Effect_BoomSeedHurt = 804 # BUFF种子单层伤害
Def_Skill_Effect_AttackReplace = 1009 #攻击计算,野外小怪伤害替换1010 (2018-03-07增加精英怪)
Def_Skill_Effect_Attack = 1010 #攻击计算
@@ -613,7 +614,7 @@
#---------需要记录在buff管理器中的效果ID,主要用于查找用---------------------------
-Def_BuffManager_EffectsID = [Def_Skill_Effect_ProBloodPer]
+Def_BuffManager_EffectsID = [Def_Skill_Effect_ProBloodPer, Def_Skill_Effect_AbsorbShieldXMZJ]
#-------------------------------------------------------------------------
#基础属性效果ID
@@ -1359,11 +1360,11 @@
#被动技能 Buf最大数目
Def_Max_PassiveBuff_Count = 30
#行为技能 buf最大数目
-Def_Max_ActionBuff_Count = 10
+Def_Max_ActionBuff_Count = 20
#持续增益BUFF最大数目
-Def_Max_ProcessBuff_Count = 10
+Def_Max_ProcessBuff_Count = 20
#持续减益BUFF最大数目
-Def_Max_ProcessDeBuff_Count = 10
+Def_Max_ProcessDeBuff_Count = 20
#马匹速度技能ID[马匹普通速度, 马匹加速]
Def_Skill_TypeID_Speed = [60001, 60101]
@@ -2987,6 +2988,7 @@
#---SetDict 玩家字典KEY,不存于数据库---
# key的长度不能超过29个字节
+Def_PlayerKey_GodWeaponBeforeProDef = "GWBPD" # 神兵护盾被攻击前的值
Def_PlayerKey_curHurtValue = "curHurtValue" # 计算中的临时伤害值,技能特殊用
Def_PlayerKey_DefenderObjID = "DefenderObjID" # 后续触发技能需要用到的对象ID,暂用于玩家
Def_PlayerKey_SomersaultTime = "Somersault" # 翻滚一定时间内无敌,表现为MISS
@@ -4391,7 +4393,8 @@
TriggerType_AttackAddFinalPer, #增加最终伤害百分比 59
TriggerType_SummonDie, #自身召唤兽死亡触发技能 60
TriggerType_GiftReduceCD, # 天赋用的减CD 61
-) = range(1, 62)
+TriggerType_ProDefValue, # 神兵护盾值下降时 62
+) = range(1, 63)
# NPC功能类型定义
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_520.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_520.py
new file mode 100644
index 0000000..234c943
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_520.py
@@ -0,0 +1,49 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 神兵属性的百分比转化为指定属性的值
+#
+# @author: Alee
+# @date 2018-11-26 下午09:35:32
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+#导入
+import ChConfig
+import EffGetSet
+import IPY_GameWorld
+import PlayerControl
+#---------------------------------------------------------------------
+
+
+def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
+ if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
+ return
+
+ attrList = PlayerControl.GetCalcAttrListValue(defender, ChConfig.Def_CalcAttrFunc_GodWeapon)
+
+ value = attrList[2].get(curEffect.GetEffectValue(0), 0)*curEffect.GetEffectValue(1)/ChConfig.Def_MaxRateValue
+
+ attrType = curEffect.GetEffectValue(2)
+ attrTypeList = [attrType]
+ # 攻击力有最大最小 特殊处理
+ if attrType in [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]:
+ attrTypeList = [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]
+ for tmpType in attrTypeList:
+ calcDict[tmpType] = calcDict.get(tmpType, 0) + value
+
+ return
+
+
+## 返回buff类型,线性与否
+# @param
+# @return None
+# @remarks 函数详细说明.
+def GetCalcType():
+ return ChConfig.TYPE_Linear
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_802.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_802.py
new file mode 100644
index 0000000..eb44167
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_802.py
@@ -0,0 +1,27 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+#
+##@package Buff_802
+# @todo: (pvp)被玩家攻击3秒内吸收30%伤害并在状态结束后恢复吸收伤害等量的生命值,冷却30秒
+#
+# @author Alee
+# @date 2017-10-31 14:10
+# @version 1.0
+#
+#---------------------------------------------------------------------
+"""Version = 2017-10-31 14:10"""
+
+
+import SkillCommon
+
+def OnBuffDisappear(curObj, curSkill, curBuff, curEffect, tick):
+ if curObj.GetHP() <= 0:
+ return
+
+ value = curBuff.GetValue()
+ if value <= 0:
+ return
+
+ SkillCommon.SkillAddHP(curObj, 0, value)
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_807.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_807.py
index 212895f..5a26f5d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_807.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_807.py
@@ -3,7 +3,7 @@
#
##@package
#
-# @todo: 神兵生命转换为血盾
+# @todo: 神兵生命转换为血盾, A值为百分比
#
# @author: Alee
# @date 2018-4-23 下午02:04:06
@@ -15,34 +15,15 @@
import GameWorld
import ChConfig
-import GameObj
-import SkillShell
+import PlayerControl
def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):
+ attrList = PlayerControl.GetCalcAttrListValue(attacker, ChConfig.Def_CalcAttrFunc_GodWeapon)
+
+ hp = attrList[2].get(ChConfig.TYPE_Calc_AttrMaxHP, 0)
+
curEffect = curSkill.GetEffect(0)
- return [int(float(curEffect.GetEffectValue(0))/ChConfig.Def_MaxRateValue*GameObj.GetMaxHP(attacker))]
+ return [hp*curEffect.GetEffectValue(0)/ChConfig.Def_MaxRateValue]
-def OnBuffDisappear(curObj, curSkill, curBuff, curEffect, tick):
- if curEffect.GetEffectValue(1) == 0:
- return
- boomValue = curBuff.GetValue()
- # 剩余护盾值用于爆炸
- if boomValue == 0:
- return
-
- boomValue = int(boomValue*float(curEffect.GetEffectValue(1))/ChConfig.Def_MaxRateValue)
- #效果值 第三个值为技能ID
- boomID = curEffect.GetEffectValue(2)
- skillData = GameWorld.GetGameData().GetSkillBySkillID(boomID)
- if not skillData:
- return
-
- # 存储起来用于伤害
- curObj.SetDict(ChConfig.Def_PlayerKey_MoreHurtValue, boomValue)
-
- SkillShell.Trigger_UseSkill(curObj, None, skillData, tick, curObj.GetPosX(), curObj.GetPosY())
- curObj.SetDict(ChConfig.Def_PlayerKey_MoreHurtValue, 0)
-
- return
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_807.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_807.py
new file mode 100644
index 0000000..3db250f
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_807.py
@@ -0,0 +1,52 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+# @todo: 神兵生命转换为血盾
+#
+# @author: Alee
+# @date 2018-1-30 下午05:11:45
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import SkillCommon
+
+def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
+ curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
+ if not curSkill:
+ return False
+
+ buffType = SkillCommon.GetBuffType(curSkill)
+ buffTuple = SkillCommon.GetBuffManagerByBuffType(attacker, buffType)
+ #通过类型获取目标的buff管理器为空,则跳出
+ if buffTuple == ():
+ return False
+
+ buffManager = buffTuple[0]
+ buff = buffManager.FindBuff(skillID)
+ if not buff:
+ return False
+
+ buffValue = buff.GetValue()
+ if buffValue == 0:
+ return False
+
+ hurtValue = attacker.GetDictByKey(ChConfig.Def_PlayerKey_BloodShiledHurt)
+ if hurtValue == 0:
+ return False
+
+ buff.SetValue(max(buffValue - hurtValue, 0))
+ attacker.SetDict(ChConfig.Def_PlayerKey_BloodShiledHurt, max(hurtValue - buffValue, 0))
+
+ if buff.GetValue() == 0:
+ buff.SetRemainTime(0)
+ return True
+
+
+def GetValue(attacker, defender, passiveEffect):
+ return 1
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4065.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4065.py
new file mode 100644
index 0000000..922beb8
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4065.py
@@ -0,0 +1,34 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+# @todo: 神兵等级差,增加PVP减伤效果
+#
+# @author: Alee
+# @date 2018-1-9 下午09:39:37
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import GameObj
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ attrLV = attacker.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % effect.GetEffectValue(0))
+ tagAttrLV = defender.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % effect.GetEffectValue(0))
+
+ if tagAttrLV >= attrLV:
+ return False
+
+ return True
+
+
+
+def GetValue(attacker, defender, effect):
+ attrLV = attacker.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % effect.GetEffectValue(0))
+ tagAttrLV = defender.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % effect.GetEffectValue(0))
+
+ return min(effect.GetEffectValue(2), (attrLV - tagAttrLV)*effect.GetEffectValue(1))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4066.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4066.py
new file mode 100644
index 0000000..5656afc
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4066.py
@@ -0,0 +1,34 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+# @todo: 指定神兵等级差,增加PVP增加伤害效果
+#
+# @author: Alee
+# @date 2018-1-9 下午09:39:37
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import GameObj
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ attrLV = attacker.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % effect.GetEffectValue(0))
+ tagAttrLV = defender.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % effect.GetEffectValue(0))
+
+ if tagAttrLV >= attrLV:
+ return False
+
+ return True
+
+
+
+def GetValue(attacker, defender, effect):
+ attrLV = attacker.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % effect.GetEffectValue(0))
+ tagAttrLV = defender.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % effect.GetEffectValue(0))
+
+ return min(effect.GetEffectValue(2), (attrLV - tagAttrLV)*effect.GetEffectValue(1))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4067.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4067.py
new file mode 100644
index 0000000..f2225bc
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4067.py
@@ -0,0 +1,35 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 神兵护盾值降为低于XX%触发技能
+#
+# @author: Alee
+# @date 2018-11-26 下午10:20:47
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import GameObj
+import PlayerControl
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ beforeProDef = attacker.GetDictByKey(ChConfig.Def_PlayerKey_GodWeaponBeforeProDef)
+ compPer = effect.GetEffectValue(0)
+ curPorDef = PlayerControl.GetProDef(attacker)
+ maxProDef = PlayerControl.GetMaxProDef(attacker)
+
+ beforePer = beforeProDef*1.0/maxProDef*ChConfig.Def_MaxRateValue
+ curPer = curPorDef*1.0/maxProDef*ChConfig.Def_MaxRateValue
+
+ if beforePer > compPer and curPer <= compPer:
+ # 只有跨过那个值才能触发
+ return True
+
+ return False
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
index 4cac370..a2c7478 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
@@ -340,6 +340,9 @@
4062:ChConfig.TriggerType_AttackAddFinalPer, # 增加最终伤害百分比 59
4063:ChConfig.TriggerType_SummonDie, #自身召唤兽死亡触发技能 60
4064:ChConfig.TriggerType_GiftReduceCD, # 天赋减少CD9, #CD
+ 4065:ChConfig.TriggerType_DamageReducePVP, # PVP减少伤害
+ 4066:ChConfig.TriggerType_AddDamagePer, # 提高增加伤害属性值,计算时 3
+ 4067:ChConfig.TriggerType_ProDefValue, # 神兵护盾值下降时 62
}
return tdict.get(effectID, -1)
#===========================================================================
@@ -378,6 +381,7 @@
4520:ChConfig.TriggerType_AddLayer, # BUFF类: 目标BUFF层级增加时 52
803:ChConfig.TriggerType_BloodShield, # 血盾
806:ChConfig.TriggerType_BloodShield, # 血盾
+ 807:ChConfig.TriggerType_BloodShield, # 血盾
808:ChConfig.TriggerType_BloodShield, # 血盾
}
return tdict.get(effectID, -1)
--
Gitblit v1.8.0