From 08495407cded2639b5de41960b38e4edb0fe0ad0 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 23 八月 2018 21:48:56 +0800
Subject: [PATCH] fix:2818 子 【开发】新增境界压制技能 / 【后端】境界压制技能
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AICommon.py | 42 ++++++++++++++++++++++++++++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py | 8 ++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 8 ++++++--
3 files changed, 56 insertions(+), 2 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 926c040..fc5f516 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
@@ -1580,6 +1580,7 @@
dMissSuccessRate += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_MissSuccessPer)
skillID = curSkill.GetSkillID() if curSkill else 0
+
atkIsBoss = 0 # 攻击方是否boss
suppressValueLV = 0 # 等级最终压制值, 由压制规则及相关参数计算得出,可作为伤害公式计算参数使用
suppressValueFP = 0 # 战力最终压制值, 由压制规则及相关参数计算得出,可作为伤害公式计算参数使用
@@ -1588,6 +1589,13 @@
suppressNPCFightPower = 0 # 压制NPC战力
#当攻击方为NPC,防守方为玩家时,计算压制等级 及 压制战力
if atkObjType == IPY_GameWorld.gotNPC and defObjType == IPY_GameWorld.gotPlayer:
+
+ if curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_RealmSuppress:
+ # 境界压制技能不对高等级境界玩家产生攻击
+ aRealmLV, dRealmLV = GetPVERealmLVs(atkObj, defObj, atkObjType, defObjType)
+ if aRealmLV >= dRealmLV:
+ return 0, ChConfig.Def_HurtType_Immune # 免疫
+
atkIsBoss = 1 if ChConfig.IsGameBoss(atkObj) else 0
if NPCCommon.GetIsLVSuppress(atkObj):
suppressLV = max(0, aLV - dLV)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index a1feead..ed365f9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -744,7 +744,8 @@
Def_HurtType_SuperHit, # 暴击 7
Def_HurtType_LuckyHit, # 会心一击伤害 8
Def_HurtType_Miss, # 闪避 9
-) = range(1, 10)
+Def_HurtType_Immune, # 免疫 10
+) = range(1, 11)
#Def_HurtType_SuckBlood, # 吸血
(
@@ -4857,7 +4858,10 @@
Def_SkillFuncType_PetSkill, #6为宠物技能
Def_SkillFuncType_GWSkill, #7为神兵技能
Def_SkillFuncType_NormalAttack, #8为普攻
-) = range(9)
+Def_SkillFuncType_SP15, #9为SP15级 服务端未用到
+Def_SkillFuncType_SkillRoll, #10为翻滚 服务端未用到
+Def_SkillFuncType_RealmSuppress, #11为境界压制 目前是NPC在用
+) = range(12)
# 受技能效果完全影响的怪, 对应 Def_BattleRelationType_CommNoBoss
Def_SkillAttack_NPCIsBoss = [ Def_NPCType_Ogre_Normal , #平凡小怪 0 # c++ 定义为普通NPC视野刷新
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AICommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AICommon.py
index d449a62..0c3079f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AICommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AICommon.py
@@ -395,6 +395,44 @@
#---------------------------------------------------------------------
+
+
+def GetCanUseRealmSuppressSkll(curNPC, curSkill):
+ if curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_RealmSuppress:
+ # 非境界压制技能返回可用
+ return True
+
+ # 境界压制技能需判断 周围是否有低境界玩家
+ npcRealmLV = NPCCommon.GetRealmLV(curNPC)
+ angryManager = curNPC.GetNPCAngry()
+
+ for i in range(0, angryManager.GetAngryCount()) :
+ curAngry = angryManager.GetAngryValueTag(i)
+ if curAngry == None or curAngry.GetObjID() == 0:
+ continue
+
+ #仇恨值
+ curAngryValue = curAngry.GetAngryValue()
+ if curAngryValue == 0:
+ continue
+
+ if curAngry.GetIsDisable():
+ continue
+
+ angryID = curAngry.GetObjID()
+ angryObjType = curAngry.GetObjType()
+ if angryObjType != IPY_GameWorld.gotPlayer:
+ continue
+
+ curTag = GameWorld.GetObj(angryID, angryObjType)
+ if not curTag:
+ continue
+ if curTag.GetOfficialRank() < npcRealmLV:
+ return True
+
+ return False
+
+
##NPC自动释放技能
# @param curNPC NPC实例
# @param curTag 攻击目标
@@ -453,6 +491,10 @@
if not CheckSkillTrigger(curNPC, triggerDict, index, tick):
continue
+ # 境界压制需要根据仇恨列表中的玩家是否有压制
+ if not GetCanUseRealmSuppressSkll(curNPC, useSkill):
+ continue
+
useCnt = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_SkillUseCnt % useSkill.GetSkillTypeID()) # 该技能已使用次数
useSkillList.append([useCnt, index, useSkill])
--
Gitblit v1.8.0