From b2c3652b5c42feaaaa0867c44662201db89d9e97 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期一, 03 六月 2019 13:42:20 +0800
Subject: [PATCH] 6969 【2.0】【后端】缥缈仙域先随机再扣活跃
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py | 130 ++++++++++++++++++++++++++-----------------
1 files changed, 79 insertions(+), 51 deletions(-)
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 854897d..c2f464a 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
@@ -33,6 +33,7 @@
import ShareDefine
import GameObj
import PassiveBuffEffMng
+import IpyGameDataPY
#---------------------------------------------------------------------
#---------------------------------------------------------------------
@@ -98,6 +99,11 @@
curSkill.SetLastUseTick(tick)
coolDownTime = curSkill.GetCoolDownTime()
remainTime = coolDownTime
+
+ skillTypeID = curSkill.GetSkillTypeID()
+ if atkObj and skillTypeID in IpyGameDataPY.GetFuncEvalCfg("SkillCD", 1):
+ reduceSkillCDPer += PlayerControl.GetTheFBSkillsCD(atkObj)
+
if isPassiveSkill(curSkill):
if curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_GiftSkill:
# 天赋有减CD效果
@@ -1222,32 +1228,15 @@
return
-## 获取哥布林功能NPC类型掉血值
-def GetGoblinLostHP(defender, hurtValue):
- if not defender:
- return hurtValue
-
- defObjType = defender.GetGameObjType()
- if defObjType == IPY_GameWorld.gotNPC:
- npcFuncType = defender.GetFunctionType()
- if npcFuncType == ChConfig.Def_NPCFuncType_Goblin:
- goblinHurtValue = int(ReadChConfig.GetEvalChConfig('GoblinHurtValue'))
- hurtValue = min(hurtValue, goblinHurtValue)
-
- return hurtValue
-
-## 技能伤血
-# @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,7 +1246,6 @@
## 后续有其他情况也应考虑进来,如镖车是否某状态不掉血
return
- #lostValue = GetGoblinLostHP(curObj, lostValue)
curObjType = curObj.GetGameObjType()
curSkill = GameWorld.GetGameData().FindSkillByType(skillTypeID, 1)
@@ -1272,34 +1260,38 @@
# 没有血量不能再触发
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)
+ 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:
+ timeLostHPIpyData = IpyGameDataPY.GetIpyGameDataNotLog("NPCTimeLostHP", curObj.GetNPCID())
+ if timeLostHPIpyData:
+ AttackCommon.UpdateTimeMonsterHP(curObj, timeLostHPIpyData, tick)
else:
GameObj.SetHP(curObj, remainHP)
- if not view : # 已广播的不重复
- curObj.Notify_HPEx()
+
+ if not view : # 已广播的不重复
+ curObj.Notify_HPEx()
- #其他对象逻辑处理
- else:
- # 已广播的不重复
- GameObj.SetHP(curObj, remainHP, not view)
+ #其他对象逻辑处理
+ else:
+ # 已广播的不重复
+ GameObj.SetHP(curObj, remainHP, not view)
AttackCommon.WriteHurtLog(buffOwner, curObj, curSkill, lostValue, hurtType, "持续掉血")
-
if view:
#广播伤血类型
AttackCommon.ChangeHPView(curObj, buffOwner, skillTypeID, notifyLostValue, hurtType)
+ if buffOwner:
+ PassiveBuffEffMng.OnPassiveSkillTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AttackOverPassive, tick)
# 濒死状态触发技能
if GameObj.GetHP(curObj) == 0:
@@ -1688,11 +1680,13 @@
return True
buffSkill = curObjBuff.GetSkill()
- buffSkillLV = buffSkill.GetSkillLV()
- #已存在更强大的效果
- if buffSkillLV > curSkillLV:
- return
+ #buff根据情况可以叠加低级,或者低级覆盖高级
+# buffSkillLV = buffSkill.GetSkillLV()
+#
+# #已存在更强大的效果
+# if buffSkillLV > curSkillLV:
+# return
if not buffSkill.GetLastTime():
#GameWorld.DebugLog("无时间限制buff,只要存在buff,则无需重复添加")
@@ -1765,6 +1759,35 @@
return returnInfo
+
+def FindBuffByOwner(gameObj, skillTypeID, ownerID, ownerType):
+ findSkill = GameWorld.GetGameData().GetSkillBySkillID(skillTypeID)
+ buffType = GetBuffType(findSkill)
+ buffTuple = GetBuffManagerByBuffType(gameObj, buffType)
+ if buffTuple == ():
+ return None
+
+ buffManager = buffTuple[0]
+ for i in range(0, buffManager.GetBuffCount()):
+ curBuff = buffManager.GetBuff(i)
+ if not curBuff:
+ continue
+
+ #判断是否拥有同一类型的技能
+ if curBuff.GetSkill().GetSkillTypeID() != skillTypeID:
+ continue
+
+ #判断是否拥有同一类型的技能
+ if curBuff.GetOwnerID() != ownerID:
+ continue
+
+ if curBuff.GetOwnerType() != ownerType:
+ continue
+
+ return curBuff
+
+ return None
+
#---------------------------------------------------------------------
## 执行清空命令 参数:玩家, 保留技能类型列表
# @param curPlayer 玩家
@@ -1973,6 +1996,10 @@
# @return 返回值, 伤害数量
# @remarks 获得区域技能伤害对象数量
def GetSkillArea_Atk_Count(attacker, curSkill):
+ if attacker.GetGameObjType() == IPY_GameWorld.gotPlayer and attacker.GetAttackMode() == IPY_GameWorld.amContest:
+ # 单一目标锁定模式
+ return 1
+
#默认攻击最大数
hurtCount = 50
@@ -2105,6 +2132,7 @@
#技能附加
skillValue = curSkill.GetEffect(0).GetEffectValue(1)
+ skillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(userObj, None, curSkill, ChConfig.TriggerType_AddHP)/float(ChConfig.Def_MaxRateValue)
#公式计算治疗值
cureHP = int((cureBaseValue * skillPer + skillValue + addExValue) * curePercent)
--
Gitblit v1.8.0