From 9aec240e848ba4bb6b473707ad8f48aee5180141 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 29 四月 2019 10:06:52 +0800
Subject: [PATCH] 6632 子 【开发】增加新的符印属性 / 【后端】增加新的符印属性
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py | 10
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4507.py | 30 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4532.py | 57 ++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_9.py | 6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py | 5
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4096.py | 25 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4094.py | 25 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_39.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 15 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4006.py | 29 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_805.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4004.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py | 150 +++++++-----
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py | 60 +++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4097.py | 28 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py | 4
/dev/null | 25 --
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py | 82 +++---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4095.py | 21 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4531.py | 6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py | 61 ++--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 28 +
26 files changed, 473 insertions(+), 211 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 3b66d80..e828e44 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
@@ -1401,6 +1401,8 @@
superHitRate = eval(ReadChConfig.GetChConfig("CalcSuperHitRate"))
superHitRate += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, None,
ChConfig.TriggerType_Buff_AddSuperHitRate)
+ superHitRate += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, None,
+ ChConfig.TriggerType_Buff_AddSuperHitRate)
if superHitRate <= 0:
return
if GameWorld.CanHappen(superHitRate):
@@ -1672,50 +1674,9 @@
SetFirstDefender(atkObj, defObj, curSkill)
resultHurtType = HurtType()
- atkObjType = attacker.GetGameObjType()
defObjType = defObj.GetGameObjType()
dHP = GameObj.GetHP(defObj) # 防守方当前血量
dMaxHP = GameObj.GetMaxHP(defObj) # 防守方最大血量
-
- # 当技能表的技能伤害百分比为0,技能伤害增加值定义为直接伤害值,不经过计算
- if atkSkillPer == 0:
- hurtValue, hurtType = int(atkSkillValue), ChConfig.Def_HurtType_Normal
- hurtValue += atkObj.GetDictByKey(ChConfig.Def_PlayerKey_MoreHurtValue)
-
- elif SkillShell.IsPlayerUseSkill(atkObj, curSkill) and SkillShell.isClientHurtValue(defObj.GetID(), defObjType):
- # 缓存单次攻击中的最大伤害,被动技能概率性增加伤害,此处放大最大伤害
- hurtValue = atkObj.GetDictByKey(ChConfig.Def_PlayerKey_ClientMaxHurtValue)
- if hurtValue == 0:
- #hurtValue, hurtType = CalcHurtHP(atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, tick, None, True)
- # 理论伤害一致, 多加点预算伤害避免计算误差
- #hurtValue = min(ShareDefine.Def_UpperLimit_DWord, hurtValue+10)
- #atkObj.SetDict(ChConfig.Def_PlayerKey_ClientMaxHurtValue, int(hurtValue*1.2))
- hurtValue = atkObj.GetMaxAtk()*atkSkillPer*40 # 加入被动计算不准确改成估算
-
- clientValue, hurtType = SkillShell.GetClientHurtByObj(defObj.GetID(), defObjType)
- if clientValue <= hurtValue:
- hurtValue = clientValue
- else:
- # 外挂最高伤害基本防范
- GameWorld.DebugLog(atkObj, "%s----客户端伤害 %s 服务端最高伤害 %s"%(atkObj.GetID(), [clientValue, hurtType], hurtValue))
- hurtValue = int(hurtValue*0.8)
- #GameWorld.DebugAnswer(atkObj, "客户端伤害 %s 服务端伤害 %s"%([defObj.GetID(), clientValue, hurtType], hurtValue))
-
- else:
- hurtValue, hurtType = CalcHurtHP(atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, tick, orgAtkObj=attacker)
-
- WriteHurtLog(attacker, defObj, curSkill, hurtValue, hurtType, "公式层")
-
- hurtValue = CalcHurtHPWithBuff(atkObj, defObj, hurtValue, curSkill, tick)
-
- # buff减少伤害百分比
- reducePer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defObj, atkObj, None, ChConfig.TriggerType_ReduceHurtHPPer)
-
- # 被攻击被动技能特殊减免 受到单次伤害超过生命上限10%时候,减免50%伤害,CD10秒
- defObj.SetDict(ChConfig.Def_PlayerKey_curHurtValue, hurtValue)
- 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):
@@ -1742,13 +1703,43 @@
remainHP = 0 # 剩余血量
else:
+ # 当技能表的技能伤害百分比为0,技能伤害增加值定义为直接伤害值,不经过计算
+ if atkSkillPer == 0:
+ hurtValue, hurtType = int(atkSkillValue), ChConfig.Def_HurtType_Normal
+ hurtValue += atkObj.GetDictByKey(ChConfig.Def_PlayerKey_MoreHurtValue)
+
+ elif SkillShell.IsPlayerUseSkill(atkObj, curSkill) and SkillShell.isClientHurtValue(defObj.GetID(), defObjType):
+ # 缓存单次攻击中的最大伤害,被动技能概率性增加伤害,此处放大最大伤害
+ hurtValue = atkObj.GetDictByKey(ChConfig.Def_PlayerKey_ClientMaxHurtValue)
+ if hurtValue == 0:
+ #hurtValue, hurtType = CalcHurtHP(atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, tick, None, True)
+ # 理论伤害一致, 多加点预算伤害避免计算误差
+ #hurtValue = min(ShareDefine.Def_UpperLimit_DWord, hurtValue+10)
+ #atkObj.SetDict(ChConfig.Def_PlayerKey_ClientMaxHurtValue, int(hurtValue*1.2))
+ hurtValue = atkObj.GetMaxAtk()*atkSkillPer*40 # 加入被动计算不准确改成估算
+
+ clientValue, hurtType = SkillShell.GetClientHurtByObj(defObj.GetID(), defObjType)
+ if clientValue <= hurtValue:
+ hurtValue = clientValue
+ else:
+ # 外挂最高伤害基本防范
+ GameWorld.DebugLog(atkObj, "%s----客户端伤害 %s 服务端最高伤害 %s"%(atkObj.GetID(), [clientValue, hurtType], hurtValue))
+ hurtValue = int(hurtValue*0.8)
+ #GameWorld.DebugAnswer(atkObj, "客户端伤害 %s 服务端伤害 %s"%([defObj.GetID(), clientValue, hurtType], hurtValue))
+
+ else:
+ hurtValue, hurtType = CalcHurtHP(atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, tick, orgAtkObj=attacker)
+
+ WriteHurtLog(attacker, defObj, curSkill, hurtValue, hurtType, "公式层")
+
+ # 各种减伤 吸收盾处理
+ hurtValue = CalcHurtHPWithBuff(atkObj, defObj, hurtValue, curSkill, tick)
+
#伤害结构体
resultHurtType.HurtHP = hurtValue
resultHurtType.HurtType = hurtType
resultHurtType.RealHurtHP = hurtValue
- # 血盾
- hurtValue = CalcBloodShield(atkObj, defObj, hurtValue)
remainHP = min(dMaxHP, max(0, dHP - hurtValue)) # 剩余血量
remainHP = int(remainHP) #防范
@@ -1872,16 +1863,6 @@
# 伤害吸收盾回血型
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))
-
curEffect, plusValue, skillID = BuffSkill.FindBuffEffectPlusByEffectID(buffManager, ChConfig.Def_Skill_Effect_AbsorbShield)
if skillID:
@@ -1897,15 +1878,38 @@
findBuff.SetRemainTime(1)
- # 天罡护法,将期间受到的伤害总值用于回血,不改变伤害
- curEffect, plusValue, skillID2 = BuffSkill.FindBuffEffectPlusByEffectID(buffManager, ChConfig.Def_Skill_Effect_StoreBlood)
- if skillID2:
+ # 天罡护法,将期间受到的伤害总值用于回血,不改变伤害,暂且不用
+ #===========================================================================
+ # curEffect, plusValue, skillID2 = BuffSkill.FindBuffEffectPlusByEffectID(buffManager, ChConfig.Def_Skill_Effect_StoreBlood)
+ # if skillID2:
+ # absortValue = hurtValue*curEffect.GetEffectValue(0)/ShareDefine.Def_MaxRateValue
+ # if absortValue:
+ # findBuff = SkillCommon.FindBuffByID(defObj, skillID2)[0]
+ # if findBuff:
+ # # 用于回血
+ # findBuff.SetValue(int(findBuff.GetValue() + absortValue))
+ #===========================================================================
+
+ curEffect, plusValue, skillID = BuffSkill.FindBuffEffectPlusByEffectID(buffManager, ChConfig.Def_Skill_Effect_AbsorbShieldXMZJ)
+ if skillID:
absortValue = hurtValue*curEffect.GetEffectValue(0)/ShareDefine.Def_MaxRateValue
if absortValue:
- findBuff = SkillCommon.FindBuffByID(defObj, skillID2)[0]
+ hurtValue -= absortValue
+ findBuff = SkillCommon.FindBuffByID(defObj, skillID)[0]
if findBuff:
# 用于回血
findBuff.SetValue(int(findBuff.GetValue() + absortValue))
+
+ # buff减少伤害百分比
+ reducePer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defObj, atkObj, None, ChConfig.TriggerType_ReduceHurtHPPer)
+
+ # 被攻击被动技能特殊减免 受到单次伤害超过生命上限10%时候,减免50%伤害,CD10秒
+ defObj.SetDict(ChConfig.Def_PlayerKey_curHurtValue, hurtValue)
+ reducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_ReduceHurtHPPer)
+ hurtValue = int(hurtValue*(max(ChConfig.Def_MaxRateValue - reducePer, 0))*1.0/ChConfig.Def_MaxRateValue)
+
+ hurtValue = CalcBloodShield(atkObj, defObj, hurtValue)
+
return hurtValue
@@ -1942,7 +1946,7 @@
msg, attackerID, attackerName, defenderID, defenderName,
skillID, skillName, hurtValue, hurtType))
-# 血盾支持多个同时存在
+# 血盾支持多个同时存在, 反弹也会被吸收
def CalcBloodShield(atkObj, defObj, hurtValue):
# 伤害值用于血盾抵消
defObj.SetDict(ChConfig.Def_PlayerKey_BloodShiledHurt, hurtValue)
@@ -1955,9 +1959,11 @@
# 计算攻击伤害
# maxHurt参数用于模拟计算最大伤害,防范客户端攻击伤害过高
def CalcHurtHP(atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, tick, happenState=None, **atkwargs):
- # 翻滚闪避特殊处理
- if tick - defObj.GetDictByKey(ChConfig.Def_PlayerKey_SomersaultTime) < 500:
- return 0, ChConfig.Def_HurtType_Miss
+ #===========================================================================
+ # # 翻滚闪避特殊处理
+ # if tick - defObj.GetDictByKey(ChConfig.Def_PlayerKey_SomersaultTime) < 500:
+ # return 0, ChConfig.Def_HurtType_Miss
+ #===========================================================================
summonAtkPer = 1 # 召唤继承提高基础攻击力,取表
summonAtkObj = atkwargs.get('orgAtkObj', None) if atkwargs.get('orgAtkObj', None) else atkObj
@@ -2107,8 +2113,10 @@
# atkSkillPer 包含普攻,所以不是用技能增强处理
atkSkillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddSkillPer)
-
atkSkillPer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddSkillPer)
+ if hurtType == ChConfig.Def_HurtType_SuperHit:
+ atkSkillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitAddSkillPer)
+
if isSuperHit:
addASuperHit = PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitValue)
@@ -2271,7 +2279,14 @@
if hurtFormulaKey not in hurtDist:
GameWorld.ErrLog("CalcAttackValue.txt 伤害公式未配置, key=%s" % (hurtFormulaKey))
return 0, ChConfig.Def_HurtType_Miss
- hurtFormula = hurtDist[hurtFormulaKey]
+
+ if atkwargs.get('hurtFormulaKey', None):
+ # 指定公式
+ aBurnValue = atkwargs.get('burnValue', 0)
+ aBurnPer = atkwargs.get('burnPer', 0)
+ hurtFormula = hurtDist[atkwargs.get('hurtFormulaKey', None)]
+ else:
+ hurtFormula = hurtDist[hurtFormulaKey]
hurtValue = int(eval(FormulaControl.GetCompileFormula(hurtFormulaKey, hurtFormula)))
if hurtType == ChConfig.Def_HurtType_Normal and SuppressValueRealmRate > 10000:
@@ -2334,7 +2349,7 @@
#反弹伤害
CalcBounceHP(atkObj, defObj, resultHurtType.LostHP, resultHurtType.HurtType, curSkill)
#吸血
- CalcSuckBlood(atkObj, defObj, curSkill, resultHurtType.RealHurtHP, tick)
+ CalcSuckBlood(atkObj, defObj, curSkill, resultHurtType, tick)
if atkObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
# 记录最后一次伤害值
@@ -2466,10 +2481,12 @@
# @param atkObj 攻击者
# @param defObj 防守者
# @return None
-def CalcSuckBlood(atkObj, defObj, curSkill, hurtValue, tick):
+def CalcSuckBlood(atkObj, defObj, curSkill, resultHurtType, tick):
if atkObj.GetGameObjType() != IPY_GameWorld.gotPlayer:
return
+
+ hurtValue, hurtType = resultHurtType.RealHurtHP, resultHurtType.HurtType,
if not hurtValue:
return
@@ -2495,6 +2512,9 @@
atkBackHPPer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
+ if hurtType == ChConfig.Def_HurtType_SuperHit:
+ atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitSuckBloodPer)
+
atkBackHP += int(hurtValue * atkBackHPPer*1.0 / ChConfig.Def_MaxRateValue)
suckHP += atkBackHP
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 b8fe78a..78f1a5a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
@@ -1567,6 +1567,7 @@
return
if hurtType == ChConfig.Def_HurtType_SuperHit:
PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defender, curSkill, ChConfig.TriggerType_SuperHit, tick)
+ PassiveBuffEffMng.OnPassiveBuffTrigger(attacker, defender, curSkill, ChConfig.TriggerType_SuperHit, tick)
elif hurtType == ChConfig.Def_HurtType_ThumpHit:
PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defender, curSkill, ChConfig.TriggerType_ThumpHit, tick)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index c25a68a..447b606 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -63,12 +63,13 @@
Def_Buff_Replace_Better, # 相同typeid取最高,如果新的是低级的则不处理
Def_Buff_Replace_New, # 相同typeid替换最新,即使是低级的
Def_Buff_Coexist, # 不同的释放者可共存
-) = range(3)
+Def_Buff_Recharge, # 若同类型buff存在不管等级高低,只给原buff充能只改变值或时间
+) = range(4)
Def_BuffValue_Count = 3 # buff记录的value个数
#游戏对象属性--------------------------------------------
-Def_Calc_AllAttrType_MAX = 131
+Def_Calc_AllAttrType_MAX = 135
#基本属性BUFF计算,顺序与 ObjProperty_AttrByIndex 对应,同时也为buff效果ID同步通知策划
TYPE_Calc_AttrList = (
TYPE_Calc_Metal, # 金 1
@@ -212,7 +213,11 @@
TYPE_Calc_FabaoHurt, # 法宝技能增伤
TYPE_Calc_FabaoHurtPer, # 法宝技能加成
TYPE_Calc_FinalHurtReducePer, # 最终伤害减少百分比
-TYPE_Calc_YinjiTime, # 每X秒自动消失一个印记
+TYPE_Calc_YinjiTime, # 每X秒自动消失一个印记 130
+TYPE_Calc_TheFBSkillsCD, # 减少指定技能组CD XX%
+TYPE_Calc_BurnValue, # 灼烧固定伤害
+TYPE_Calc_BurnTimePer, # 延长灼烧时间百分比
+TYPE_Calc_SubSpeedPer, # 减移动速度百分比
) = range(1, Def_Calc_AllAttrType_MAX)
@@ -564,6 +569,7 @@
Def_Skill_Effect_SummonAttr = 1013 # 召唤兽属性
Def_Skill_Effect_BoomSeedID = 1014 # 引爆BUFF种子
Def_Skill_Effect_ReCD = 1016 # 重置CD
+Def_Skill_Effect_Burn = 1034 # 灼烧
Def_Skill_Effect_RandWarn = 1061 # 随机预警
Def_Skill_Effect_AttackReplaceByNPCSeries = 1062 # 对指定系的伤害
Def_Skill_Effect_AvgHurtFMCnt = 1064 # NPC技能按仙盟成员数均摊伤害
@@ -3006,7 +3012,7 @@
Def_PlayerState_LimitSkill, # 禁魔状态 10
Def_PlayerState_LimitAddHP, # 禁疗状态 11
Def_PlayerState_Blind, # 致盲状态 12
- Def_PlayerState_LoseBlood1, # 职业1持续掉血状态 13
+ Def_PlayerState_LoseBlood1, # 灼烧 13
Def_PlayerState_LoseBlood2, # 职业2持续掉血状态 14
Def_PlayerState_LoseBlood3, # 职业3持续掉血状态 15
Def_PlayerState_MissSneerAtk, # 对嘲讽攻击免疫表现为miss 16
@@ -3019,6 +3025,10 @@
#---SetDict 玩家字典KEY,不存于数据库---
# key的长度不能超过29个字节
+Def_PlayerKey_TheFBSkillsCD = "TheFBSkillsCD" # 减少指定技能组CD XX%
+Def_PlayerKey_BurnValue = "BurnValue" # 灼烧固定伤害
+Def_PlayerKey_BurnTimePer = "BurnTimePer" # 延长灼烧时间百分比
+Def_PlayerKey_SubSpeedPer = "SubSpeedPer" # 减移动速度百分比
Def_PlayerKey_YinjiCnt = "YinjiCnt" # 当前印记数
Def_PlayerKey_LostYinjiTime = "LostYinjiTime" # 每X秒自动消失一个印记
Def_PlayerKey_1314HurtCount = "1314cnt" # 类剑刃风暴技能的1314效果,伤害次数处理
@@ -3038,7 +3048,6 @@
Def_PlayerKey_LockHPSkillID = "LockHPSkillID" # 锁血功能的技能
Def_PlayerKey_GodWeaponBeforeProDef = "GWBPD" # 神兵护盾被攻击前的值
Def_PlayerKey_curHurtValue = "curHurtValue" # 计算中的临时伤害值,技能特殊用
-Def_PlayerKey_DefenderObjID = "DefenderObjID" # 后续触发技能需要用到的对象ID,暂用于玩家
Def_PlayerKey_SomersaultTime = "Somersault" # 翻滚一定时间内无敌,表现为MISS
Def_PlayerKey_CopyFuncAttr = "CopyFuncAttr%s" # 玩家属性刷新中的计算属性缓存,便于buff刷新计算
Def_Player_RefreshAttrByBuff = "PlayerAttrByBuff" # 玩家属性刷新功能属性缓存,便于buff刷新计算, 间隔刷新
@@ -4189,6 +4198,10 @@
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_TheFBSkillsCD:[[TYPE_Calc_TheFBSkillsCD], False, TYPE_Linear], # 减少指定技能组CD XX%
+ ShareDefine.Def_Effect_BurnValue:[[TYPE_Calc_BurnValue], False, TYPE_Linear], # 灼烧固定伤害
+ ShareDefine.Def_Effect_BurnTimePer:[[TYPE_Calc_BurnTimePer], False, TYPE_Linear], # 延长灼烧时间百分比
+ ShareDefine.Def_Effect_SubSpeedPer:[[TYPE_Calc_SubSpeedPer], False, TYPE_Linear], # 减移动速度百分比
#战斗非线性
ShareDefine.Def_Effect_SuperHitPer:[[TYPE_Calc_SuperHit], False, TYPE_NoLinear],
@@ -4450,7 +4463,10 @@
TriggerType_SkillSuccess, # 任何技能释放成功都可触发 76
TriggerType_BounceHPPerByAttacker, # 反弹伤害百分比值, 由攻击方决定 77
TriggerType_NoControl, # 使关联技能不受控制 78
-) = range(1, 79)
+TriggerType_SuperHitSuckBloodPer, # 暴击百分比吸血, 79
+TriggerType_SuperHitAddSkillPer, # 暴击增加技能伤害 80
+TriggerType_BurnPer, # 灼烧伤害百分比 81
+) = range(1, 82)
#不可以佩戴翅膀的地图
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py
index 219316f..50d3bd5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py
@@ -1271,7 +1271,7 @@
skillTypeID, buffOwner = 0, None
lostValue = int(GameObj.GetMaxHP(curPlayer) * lostHPPer / 100.0) * lostTime
#GameWorld.DebugLog("OnCollecting lostHPPer=%s,lostTime=%s,lostValue=%s" % (lostHPPer, lostTime, lostValue), playerID)
- SkillCommon.SkillLostHP(curPlayer, skillTypeID, buffOwner, lostValue, tick)
+ SkillCommon.SkillLostHP(curPlayer, skillTypeID, buffOwner, lostValue, tick, skillAffect=False)
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 5d406a6..294025a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -6692,7 +6692,20 @@
def SetYinjiCnt(curPlayer, value):
curPlayer.SetDict(ChConfig.Def_PlayerKey_YinjiCnt, value)
curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_YinjiCnt, value, False)
-
+
+# 减少指定技能组CD XX%
+def GetTheFBSkillsCD(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TheFBSkillsCD)
+def SetTheFBSkillsCD(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_TheFBSkillsCD, value)
+# 灼烧固定伤害
+def GetBurnValue(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BurnValue)
+def SetBurnValue(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BurnValue, value)
+# 延长灼烧时间百分比
+def GetBurnTimePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BurnTimePer)
+def SetBurnTimePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BurnTimePer, value)
+# 减移动速度百分比
+def GetSubSpeedPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SubSpeedPer)
+def SetSubSpeedPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SubSpeedPer, value)
+
## 计算功能背包物品属性
# @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 eab101b..7c339df 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -614,7 +614,7 @@
curPlayer.SetDict(ChConfig.Def_PlayerKey_CollectLostHPTick, tick)
lostValue = int(GameObj.GetMaxHP(curPlayer) * lostHPPer / 100.0) * lostTime
skillTypeID, buffOwner = 0, None
- SkillCommon.SkillLostHP(curPlayer, skillTypeID, buffOwner, lostValue, tick)
+ SkillCommon.SkillLostHP(curPlayer, skillTypeID, buffOwner, lostValue, tick, skillAffect=False)
GameWorld.DebugLog("采集掉血: npcID=%s,lostHPPer=%s,lostTime=%s,lostValue=%s" % (collectNPCIpyData.GetNPCID(), lostHPPer, lostTime, lostValue))
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index ce81d0c..9d1a485 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -545,6 +545,10 @@
Def_Effect_FinalHurtPer = 142 # 最终伤害万分率
Def_Effect_FinalHurtReducePer = 143 # 最终伤害减少万分
Def_Effect_YinjiTime = 144 # 每X毫秒自动消失一个印记
+Def_Effect_TheFBSkillsCD = 145 # 减少指定技能组CD XX%
+Def_Effect_BurnValue = 146 # 灼烧固定伤害
+Def_Effect_BurnTimePer = 147 # 延长灼烧时间百分比
+Def_Effect_SubSpeedPer = 148 # 减移动速度百分比
#增加%d物理伤害值,其中a值为伤害值
Def_Effect_AddAtk = 1005
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
index 493b90b..338b59f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
@@ -79,23 +79,7 @@
return result
-#===============================================================================
-# # CanRepeatTime字段个位数
-# (
-# Def_BuffTime_Reset, # 0 重置时间
-# Def_BuffTime_Add, # 1 增加时间
-# Def_BuffTime_Keep, # 2 时间不变
-# Def_BuffTime_Keep_AddValue, # 3 时间不变只增加值,默认为替换更强值
-# ) = range(4)
-#
-# # CanRepeatTime字段十位数
-# (
-# Def_Buff_Replace_Better, # 相同typeid取最高,如果新的是低级的则不处理
-# Def_Buff_Replace_New, # 相同typeid替换最新,即使是低级的
-# Def_Buff_Coexist, # 不同的释放者可共存
-# ) = range(3)
-#===============================================================================
-
+# 快捷搜索 CanRepeatTime字段
# buff时间处理类型,个位数
def GetBuffRepeatTimeType(curSkill):
return curSkill.GetCanRepeatTime()%10
@@ -111,6 +95,19 @@
layerMaxCnt = hasEffect.GetEffectValue(0) # 能叠加的最大上限
return layerMaxCnt
+
+# 改变BUFF持续时间
+def ChangeLastTime(attacker, curSkill):
+ buffTime = curSkill.GetLastTime()
+ if not attacker:
+ return buffTime
+ if curSkill.GetEffect(0).GetEffectID() == ChConfig.Def_Skill_Effect_Burn:
+ # 灼烧的时间特殊处理
+ buffTime = buffTime*(ChConfig.Def_MaxRateValue + PlayerControl.GetBurnTimePer(attacker))/ChConfig.Def_MaxRateValue
+
+ buffTime += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(attacker, None, curSkill, ChConfig.TriggerType_BuffTime)
+ return buffTime
+
#---------------------------------------------------------------------
## 增加BUFF 减少BUFF(参数 -> 当前对象,buff类型,当前技能,当前时间,Buff总值->用于持续类技能 , Buff拥有者)
@@ -146,7 +143,7 @@
#技能类型ID
curSkillTypeID = curSkill.GetSkillTypeID()
#当前技能持续时间
- curSkillLastTime = curSkill.GetLastTime()
+ curSkillLastTime = ChangeLastTime(buffOwner, curSkill)
#当前技能等级
curSkillLV = curSkill.GetSkillLV()
#替换模式
@@ -212,31 +209,36 @@
if buffSkillLV == curSkillLV:
changeLayer = False
- if layerMaxCnt:
- curLayerCnt = curBuff.GetLayer()
- if curLayerCnt < layerMaxCnt:
- if layerCalc == ChConfig.Def_BuffLayer_Add:
- curBuff.SetLayer(curLayerCnt + 1)
- #BUFF层级变化触发被动
- if buffOwner:
- curObj.SetDict(ChConfig.Def_PlayerKey_AddBuffLayer, curBuff.GetLayer())
- PassiveBuffEffMng.OnPassiveSkillTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddLayer, tick)
- PassiveBuffEffMng.OnPassiveBuffTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddLayer, tick)
- curObj.SetDict(ChConfig.Def_PlayerKey_AddBuffLayer, 0)
- else:
- curBuff.SetLayer(layerMaxCnt)
- changeLayer = True
+ if layerMaxCnt and curBuff.GetLayer() < layerMaxCnt:
+ if layerCalc == ChConfig.Def_BuffLayer_Add:
+ curBuff.SetLayer(curBuff.GetLayer() + 1)
+ #BUFF层级变化触发被动
+ if buffOwner:
+ curObj.SetDict(ChConfig.Def_PlayerKey_AddBuffLayer, curBuff.GetLayer())
+ PassiveBuffEffMng.OnPassiveSkillTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddLayer, tick)
+ PassiveBuffEffMng.OnPassiveBuffTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddLayer, tick)
+ curObj.SetDict(ChConfig.Def_PlayerKey_AddBuffLayer, 0)
+ else:
+ curBuff.SetLayer(layerMaxCnt)
+ changeLayer = True
+
+ # Def_Buff_Replace_New和Def_Buff_Recharge 均可走到此逻辑
__BuffCanRemain(buffState, curBuff, i, resultTime, plusValueList, buffOwner)
# 此处考虑下plusValue变强是否刷属性
#DoAddBuffOver(curObj, curSkill, addBuff, tick)
return changeLayer
else:
+ if buffReplaceType == ChConfig.Def_Buff_Recharge:
+ # 充能型
+ __BuffCanRemain(buffState, curBuff, i, resultTime, plusValueList, buffOwner)
+ return
+
processInterval = curBuff.GetProcessInterval()
ownerID, ownerType = curBuff.GetOwnerID(), curBuff.GetOwnerType()
buffState.DeleteBuffByIndex(i)
SkillShell.ClearBuffEffectBySkillID(curObj, buffSkillID, ownerID, ownerType)
return __AddBuff(curObj, buffState, curSkill, plusValueList, buffOwner, isDelRefresh,
- tick, processInterval, layerMaxCnt, layerCalc)
+ tick, curSkillLastTime, processInterval, layerMaxCnt, layerCalc)
#已经找到同一类型的技能,立即退出不然会导致错乱
return False
@@ -254,7 +256,7 @@
isDelRefresh = True
return __AddBuff(curObj, buffState, curSkill, plusValueList, buffOwner, isDelRefresh,
- tick, 0, layerMaxCnt, layerCalc)
+ tick, curSkillLastTime, 0, layerMaxCnt, layerCalc)
## 是否血包/蓝包buff
@@ -314,15 +316,15 @@
# @param isDelRefresh 外界删除BUFF是否刷新
# @param tick 时间戳
# @return 是否刷新玩家属性
-def __AddBuff(curObj, buffState, curSkill, plusValueList, buffOwner, isDelRefresh, tick,
- updProcessInterval, layerMaxCnt, layerCalc):
+def __AddBuff(curObj, buffState, curSkill, plusValueList, buffOwner, isDelRefresh, tick,
+ curSkillLastTime, updProcessInterval, layerMaxCnt, layerCalc):
skillID = curSkill.GetSkillID()
#是否需要通知客户端
isNotify = True if curSkill.GetClientEffectType() != 0 else False
# 增加第四个参数是否立即广播
addBuff = buffState.AddBuff(skillID, tick, isNotify, False)
- buffIndex = buffState.GetBuffCount() # buff在管理器中的索引
+
if updProcessInterval > 0:
# 继承上一个buff的循环记录
addBuff.SetProcessInterval(updProcessInterval)
@@ -337,11 +339,7 @@
else:
addBuff.SetLayer(layerMaxCnt)
- if buffOwner:
- addTime = PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(buffOwner, None, curSkill, ChConfig.TriggerType_BuffTime)
- if addTime:
- #有改变持续时间的技能
- addBuff.SetRemainTime(curSkill.GetLastTime() + addTime)
+ addBuff.SetRemainTime(curSkillLastTime)
# 同步主从技能时间
SyncMasterBuffTime(curObj, addBuff, curSkill)
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 e814874..bd8af1a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
@@ -170,6 +170,10 @@
[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秒自动消失一个印记 毫秒
+ [lambda curObj:PlayerControl.GetTheFBSkillsCD(curObj), lambda curObj, value:PlayerControl.SetTheFBSkillsCD(curObj, value), 0, 0, 0], # 减少指定技能组CD XX%
+ [lambda curObj:PlayerControl.GetBurnValue(curObj), lambda curObj, value:PlayerControl.SetBurnValue(curObj, value), ShareDefine.CDBPlayerRefresh_YinjiTime, 0, 0], # 灼烧固定伤害
+ [lambda curObj:PlayerControl.GetBurnTimePer(curObj), lambda curObj, value:PlayerControl.SetBurnTimePer(curObj, value), 0, 0, 0], # 延长灼烧时间百分比
+ [lambda curObj:PlayerControl.GetSubSpeedPer(curObj), lambda curObj, value:PlayerControl.SetSubSpeedPer(curObj, value), 0, 0, 0], # 减移动速度百分比
]
## 通过索引获得属性值
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py
new file mode 100644
index 0000000..8bec96a
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py
@@ -0,0 +1,60 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 灼烧(流派专用,额外公式), 持续过程中可能会被改变伤害或者持续时长,无法用次数控制,无层级概念
+# 若同类型buff存在不管等级高低,只给原buff充能只改变值或时间
+# @author: Alee
+# @date 2019-4-28 下午04:12:17
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+
+#导入
+import SkillCommon
+import GameWorld
+import ChConfig
+import AttackCommon
+import PlayerControl
+import PassiveBuffEffMng
+#---------------------------------------------------------------------
+#全局变量
+#---------------------------------------------------------------------
+
+#---------------------------------------------------------------------
+#逻辑实现
+## 持续性Buff处理
+# @param defender 承受者
+# @param curBuff 当前Buff
+# @param curEffect Buff效果
+# @param tick 当前时间
+# @return None
+# @remarks 函数详细说明.
+def ProcessBuff(defender, curBuff, curEffect, processBuffTick, tick):
+ #单次伤害
+ singleDecHP = curBuff.GetValue()
+ buffOwner = SkillCommon.GetBuffOwner(curBuff)
+
+ curBuffSkillID = curBuff.GetSkill().GetSkillTypeID()
+
+ SkillCommon.SkillLostHP(defender, curBuffSkillID, buffOwner, singleDecHP, tick, hurtType=ChConfig.Def_HurtType_Bleed)
+
+ return
+
+# 灼烧的特征为延长buff时间,重算伤害
+def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):
+ curEffect = curSkill.GetEffect(0)
+ skillPer = curEffect.GetEffectValue(0)
+ skillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_BurnPer)
+ skillEnhance = curEffect.GetEffectValue(1) + PlayerControl.GetBurnValue(attacker)
+ skillPer = skillPer*1.0/ChConfig.Def_MaxRateValue
+ # 灼烧特殊公式
+ hurtValue, hurtType = AttackCommon.CalcHurtHP(attacker, defender, curSkill,
+ 0, 0, GameWorld.GetGameWorld().GetTick(), ChConfig.Def_Skill_HappenState_HitOn,
+ hurtFormulaKey="Burn", burnValue=skillEnhance, burnPer=skillPer)
+
+ return [hurtValue]
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_4507.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_4507.py
deleted file mode 100644
index dbc01c0..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_4507.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-##@package
-#
-# @todo: buff中只对目标提高暴击率(记录在buffvalue)
-#
-# @author: Alee
-# @date 2018-4-23 下午07:46:03
-# @version 1.0
-#
-# @note:
-#
-#---------------------------------------------------------------------
-
-import ChConfig
-
-
-## 将目标ID记录在buffvalue中 触发时判断
-# @param None
-# @return None
-def DoAddBuffOver(curObj, addBuff, curEffect, tick):
- addBuff.SetValue(curObj.GetDictByKey(ChConfig.Def_PlayerKey_DefenderObjID))
- curObj.SetDict(ChConfig.Def_PlayerKey_DefenderObjID, 0)
- return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_805.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_805.py
index 278cdee..6d5dcad 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_805.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_805.py
@@ -27,7 +27,7 @@
if GameObj.GetHP(curObj) <= 0:
return
SkillCommon.SkillLostHP(curObj, curBuff.GetBuffID(), SkillCommon.GetBuffOwner(curBuff),
- curBuff.GetValue(), tick, curBuff.GetValue1())
+ curBuff.GetValue(), tick, hurtType=curBuff.GetValue1())
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
index 87b5128..bc90b1e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
@@ -1222,18 +1222,15 @@
return
-## 技能伤血
-# @param curObj 当前对象
-# @param skillTypeID 技能类型ID
-# @param buffOwner buff拥有者
-# @param lostValue 丢失值
-# @param tick 当前时间
-# @param view 是否广播
-# @param reduce 是否扣血
-# @return None
-# @remarks 函数详细说明.
-def SkillLostHP(curObj, skillTypeID, buffOwner, lostValue, tick, view=True, reduceHP=True,
- isDoAttackResult=True, hurtType=ChConfig.Def_HurtType_Normal):
+## 直接扣血不走公式
+# view 是否广播客户端飘血
+# isDoAttackResult 是否立即处理结果,为False必须外层有处理
+# hurtType 飘血类型
+# skillAffect 默认True 会被各种技能BUFF盾等影响伤血数值
+# False代表一些特殊处理纯固定伤害飘字(如采集固定掉1点血)
+def SkillLostHP(curObj, skillTypeID, buffOwner, lostValue, tick, view=True,
+ isDoAttackResult=True, hurtType=ChConfig.Def_HurtType_Normal,
+ skillAffect=True):
if lostValue <= 0:
GameWorld.Log('###技能伤害血量异常,数值错误 = %s,技能类型ID = %s' % (lostValue, skillTypeID))
return
@@ -1257,28 +1254,26 @@
# 没有血量不能再触发
return
- if reduceHP :
- lostValue = AttackCommon.CalcAtkProDef(buffOwner, curObj, lostValue, curSkill, tick)
- # 血盾
- lostValue = AttackCommon.CalcBloodShield(buffOwner, curObj, lostValue)
-
- #剩余血量
- remainHP = max(curObjHP_BeforeAttack - lostValue , 0)
-
- #NPC处理
- if curObjType == IPY_GameWorld.gotNPC:
- #宠物特殊处理
- if curObj.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
- PetControl.SetPetHP(curObj, remainHP)
- else:
- GameObj.SetHP(curObj, remainHP)
- if not view : # 已广播的不重复
- curObj.Notify_HPEx()
-
- #其他对象逻辑处理
+ if skillAffect:
+ lostValue = AttackCommon.CalcHurtHPWithBuff(buffOwner, curObj, lostValue, curSkill, tick)
+
+ #剩余血量
+ remainHP = max(curObjHP_BeforeAttack - lostValue , 0)
+
+ #NPC处理
+ if curObjType == IPY_GameWorld.gotNPC:
+ #宠物特殊处理
+ if curObj.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
+ PetControl.SetPetHP(curObj, remainHP)
else:
- # 已广播的不重复
- GameObj.SetHP(curObj, remainHP, not view)
+ GameObj.SetHP(curObj, remainHP)
+ if not view : # 已广播的不重复
+ curObj.Notify_HPEx()
+
+ #其他对象逻辑处理
+ else:
+ # 已广播的不重复
+ GameObj.SetHP(curObj, remainHP, not view)
AttackCommon.WriteHurtLog(buffOwner, curObj, curSkill, lostValue, hurtType, "持续掉血")
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_39.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_39.py
index 21b35a6..5030299 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_39.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_39.py
@@ -12,12 +12,8 @@
#------------------------------------------------------------------------------
import ChConfig
import BaseAttack
-import GameObj
import SkillCommon
import IPY_GameWorld
-import GameWorld
-import SkillShell
-import AttackCommon
import NPCCommon
#------------------------------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_9.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_9.py
index 4801d83..c948028 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_9.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_9.py
@@ -65,7 +65,9 @@
#GameWorld.DebugLog("-----技能冲锋模板9 %s %s"%([attacker.GetPosX(), attacker.GetPosY()], [destX, destY]))
attacker.ChangePos(destX, destY)
- if curSkill.GetSkillID() == ChConfig.Def_SkillID_Somersault:
- attacker.SetDict(ChConfig.Def_PlayerKey_SomersaultTime, tick)
+ #===========================================================================
+ # if curSkill.GetSkillID() == ChConfig.Def_SkillID_Somersault:
+ # attacker.SetDict(ChConfig.Def_PlayerKey_SomersaultTime, tick)
+ #===========================================================================
return result
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4507.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4507.py
index db170f6..74bd207 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4507.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4507.py
@@ -14,7 +14,7 @@
import ChConfig
import GameWorld
import IPY_GameWorld
-import SkillCommon
+import AttackCommon
def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
if not defender:
@@ -22,21 +22,19 @@
if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
return False
- curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
- if not curSkill:
- return
-
- buffType = SkillCommon.GetBuffType(curSkill)
- buffTuple = SkillCommon.GetBuffManagerByBuffType(attacker, buffType)
- #通过类型获取目标的buff管理器为空,则跳出
- if buffTuple == ():
- return
-
- buffManager = buffTuple[0]
- buff = buffManager.FindBuff(skillID)
- if not buff:
- return
- return buff.GetValue() == defender.GetID()
+ if passiveEffect.GetEffectValue(1):
+ # 第一目标
+ if AttackCommon.GetFirstDefenderID(attacker) != defender.GetID():
+ return False
+
+ if passiveEffect.GetEffectValue(2):
+ useSkill = skillkwargs.get("useSkill", None)
+ if not useSkill:
+ return False
+ # 普通攻击有效
+ if useSkill.GetFuncType() != ChConfig.Def_SkillFuncType_NormalAttack:
+ return False
+ return True
def GetValue(attacker, defender, passiveEffect):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4531.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4531.py
index 7d31dd6..a1601e2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4531.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4531.py
@@ -1,10 +1,12 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#
-# @todo: buff中被攻击反弹自身最大攻击力XX%伤害
+##@package
+#
+# @todo: buff中被标记的攻击者攻击标记方,层级最后一次反弹伤害
#
# @author: Alee
-# @date 2018-1-30 下午05:11:45
+# @date 2019-4-27 下午10:25:12
# @version 1.0
#
# @note:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4532.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4532.py
new file mode 100644
index 0000000..a6c34b0
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4532.py
@@ -0,0 +1,57 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: buff中对第一目标暴击触发技能 附加第X倍数次普攻暴击触发
+#
+# @author: Alee
+# @date 2019-4-27 下午10:19:51
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+import ChConfig
+import GameWorld
+import SkillCommon
+import BuffSkill
+
+def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
+ if passiveEffect.GetEffectValue(0):
+ useSkill = skillkwargs.get("useSkill", None)
+ if not useSkill:
+ return False
+ # 普通攻击有效
+ if useSkill.GetFuncType() != ChConfig.Def_SkillFuncType_NormalAttack:
+ return False
+
+ 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(curSkill.GetSkillTypeID())
+ if not buff:
+ return False
+
+ buff.SetValue2(buff.GetValue2() + 1)
+
+ if buff.GetValue2()%passiveEffect.GetEffectValue(0) != 0:
+ return False
+
+ return True
+
+
+def GetSkillData(passiveEffect):
+ skillID = passiveEffect.GetEffectValue(1)
+ return GameWorld.GetGameData().GetSkillBySkillID(skillID)
+
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4004.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4004.py
index d379e6d..617b7ad 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4004.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4004.py
@@ -29,7 +29,5 @@
if GameObj.GetHP(defender)*ChConfig.Def_MaxRateValue/GameObj.GetMaxHP(defender) >= hpPer:
return False
- # 记录此目标,不使用其他接口是因为有可能被改变,如一段时间只对触发的目标玩家提高暴击率
- attacker.SetDict(ChConfig.Def_PlayerKey_DefenderObjID, defender.GetID())
return GameWorld.CanHappen(effect.GetEffectValue(0))
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4006.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4006.py
new file mode 100644
index 0000000..86cb187
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4006.py
@@ -0,0 +1,29 @@
+#!/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):
+ skillID = effect.GetEffectValue(0)
+ if skillID:
+ # 转为附加效果触发,且需主效果不使被动技能进入CD才可触发
+ useSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
+ if not useSkill:
+ return False
+ SkillShell.UsePassiveTriggerSkill(attacker, useSkill, defender, GameWorld.GetGameWorld().GetTick(), True)
+ return False
+
+ return True
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4094.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4094.py
new file mode 100644
index 0000000..3442543
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4094.py
@@ -0,0 +1,25 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 提高暴击概率
+#
+# @author: Alee
+# @date 2019-4-27 下午10:43:37
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+import GameObj
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ if not GameObj.GetPyPlayerState(defender, effect.GetEffectValue(1)):
+ #GameWorld.DebugLog("状态触发----%s"%effect.GetEffectValue(1))
+ 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_4095.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4095.py
new file mode 100644
index 0000000..a4265df
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4095.py
@@ -0,0 +1,21 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 提高暴击概率
+#
+# @author: Alee
+# @date 2019-4-27 下午10:43:37
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ return True
+
+
+def GetValue(attacker, defender, effect):
+ return effect.GetEffectValue(0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4096.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4096.py
new file mode 100644
index 0000000..39f9838
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4096.py
@@ -0,0 +1,25 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 暴击增加技能伤害
+#
+# @author: Alee
+# @date 2019-4-27 下午11:31:01
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+
+ 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_4097.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4097.py
new file mode 100644
index 0000000..44c9904
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4097.py
@@ -0,0 +1,28 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 暴击增加技能伤害
+#
+# @author: Alee
+# @date 2019-4-27 下午11:31:01
+# @version 1.0
+#
+# @note:
+#
+#---------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import GameObj
+import PlayerControl
+
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+
+ return True
+
+
+def GetValue(attacker, defender, effect):
+ return effect.GetEffectValue(0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
index 3d1af13..81787a1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
@@ -373,6 +373,10 @@
4091:ChConfig.TriggerType_SkillOverNoAttack, # 技能释放后 与TriggerType_AttackOver相反19,
4092:ChConfig.TriggerType_SkillSuccess, # 任何技能释放成功都可触发 76 减印记
4093:ChConfig.TriggerType_NoControl, # 使关联技能不受控制 78
+ 4094:ChConfig.TriggerType_Buff_AddSuperHitRate, # BUFF类:增加暴击率
+ 4095:ChConfig.TriggerType_SuperHitSuckBloodPer, # BUFF类: 暴击百分比吸血, 79
+ 4096:ChConfig.TriggerType_SuperHitAddSkillPer, # 暴击增加技能伤害
+ 4097:ChConfig.TriggerType_BurnPer, # 灼烧伤害百分比 81
}
return tdict.get(effectID, -1)
#===========================================================================
@@ -420,6 +424,7 @@
4529:ChConfig.TriggerType_Buff_SuckBloodPer, # BUFF类: 百分比吸血, 此处非属性类
4530:ChConfig.TriggerType_Buff_AttackSubLayer, # BUFF类:攻击减buff层,0消失
4531:ChConfig.TriggerType_BounceHPPerByAttacker, # 反弹伤害百分比值, 由攻击方决定 77
+ 4532:ChConfig.TriggerType_SuperHit, # buff中对第一目标暴击触发技能
803:ChConfig.TriggerType_BloodShield, # 血盾
806:ChConfig.TriggerType_BloodShield, # 血盾
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 8f260a8..e7b262f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -3436,16 +3436,6 @@
return True
-#===============================================================================
-# Def_Effect_GoddessAddHP = 1300 # 加血 (压总值血量百分比)
-# Def_Effect_AddHPValue_All = 1027 # 持续加血(压总值攻击)
-# Def_Effect_LostHPValue_All = 1033 # 持续减血(压总值攻击)
-# Def_Effect_LostAndAddHPValue_All = 1050 # 持续吸血(压总值攻击)
-# Def_Effect_LostHPValue_Single = 1201 # 持续单次减血计算 攻击
-# Def_Effect_AddHPValue_Single = 1202 # 持续单次加血计算 攻击
-# Def_Effect_LostHP_MaxHP = 1089 # 持续减血(压总值, 血量百分比)
-#===============================================================================
-
#waring: 此值影响了BUFF的替换规则,值大替换小的
##添加BUFF前压入BUFF的值,这边只计算和攻击者相关,仅支持放在效果1的buff
# @param attacker 攻击方
--
Gitblit v1.8.0