From ccfd713e99081322e68bc8c2f3f1ea02f0df52eb Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 02 一月 2020 14:11:11 +0800
Subject: [PATCH] 8358 【主干】【后端】坐骑修改(修复bug)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/ChNPC.py | 63 +++++++++++++++++++++++++++----
1 files changed, 54 insertions(+), 9 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/ChNPC.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/ChNPC.py
index 3ef7bf5..dbaf5d3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/ChNPC.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/ChNPC.py
@@ -90,11 +90,26 @@
# @remarks 函数详细说明.
def OnNPCDie(curNPC,HurtType,HurtID):
PassiveBuffEffMng.GetPassiveEffManager().RemovePassiveEff((curNPC.GetID(), IPY_GameWorld.gotNPC))
+
+ # 召唤NPC死亡触发被动技能
+ owner = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotPlayer, curNPC)
+ if owner:
+ owner.SetDict("summondie", curNPC.GetNPCID())
+ PassiveBuffEffMng.OnPassiveSkillTrigger(owner, None, None, ChConfig.TriggerType_SummonDie,
+ GameWorld.GetGameWorld().GetTick())
+
callFunc = GameWorld.GetExecFunc(NPCAI, "AIType_%d.%s"%(curNPC.GetAIType(), "OnDie"))
if callFunc == None:
return None
callFunc(curNPC,HurtType,HurtID)
+ return
+
+def OnNPCSetDead(curNPC):
+ callFunc = GameWorld.GetExecFunc(NPCAI, "AIType_%d.%s"%(curNPC.GetAIType(), "OnNPCSetDead"))
+ if callFunc == None:
+ return None
+ callFunc(curNPC)
return
def OnNPCReborn(curNPC):
@@ -112,6 +127,7 @@
# @return None
# @remarks 函数详细说明.
def OnNPCAttacked(atkObj, curNPC, skill, tick):
+ NPCCommon.OnNPCAttacked(atkObj, curNPC, skill, tick)
callFunc = GameWorld.GetExecFunc(NPCAI, "AIType_%d.%s"%(curNPC.GetAIType(), "OnAttacked"))
if callFunc == None:
return None
@@ -119,7 +135,14 @@
callFunc(atkObj, curNPC, skill, tick)
PlayerActivity.OnAttackNPCActivity(atkObj, curNPC)
-
+ return
+
+def OnCheckCanDie(atkObj, curNPC, skill, tick):
+ callFunc = GameWorld.GetExecFunc(NPCAI, "AIType_%d.%s"%(curNPC.GetAIType(), "OnCheckCanDie"))
+ if callFunc == None:
+ return True
+ return callFunc(atkObj, curNPC, skill, tick)
+
#---------------------------------------------------------------------
## 初始化NPC
# @param tick 当前时间
@@ -140,15 +163,15 @@
gameWorldIndex = GameWorld.GetGameWorld().GetCurGameWorldIndex()
GameWorld.Log("NPC Initing...FB %d" % gameWorldIndex)
mapID = GameWorld.GetMap().GetMapID()
+ hideNPCIDList = [] # 需要隐藏的NPCID列表
# 由于某些常规线boss区域要重复利用,所以活动线独立,不开放给玩家,仅特定活动时系统传入
activityMapLineDict = IpyGameDataPY.GetFuncEvalCfg("MapLine", 2, {})
if mapID in activityMapLineDict:
activityLineID = max(0, activityMapLineDict[mapID] - 1)
- hideNPCIDList = [] # 需要隐藏的NPCID列表
- if gameWorldIndex == activityLineID:
- hideNPCIDList = IpyGameDataPY.GetFuncEvalCfg("MapLine", 3)
- GameWorld.Log(" hideNPCIDList=%s" % hideNPCIDList)
-
+ if gameWorldIndex == activityLineID:
+ hideNPCIDList = IpyGameDataPY.GetFuncEvalCfg("MapLine", 3)
+ GameWorld.Log(" hideNPCIDList=%s" % hideNPCIDList)
+
gameNPC = GameWorld.GetNPCManager()
npcCount = gameNPC.GetNPCCount()
for i in xrange(npcCount):
@@ -199,7 +222,11 @@
if curNPC == None:
continue
-
+
+ #2018.10.9修改:增加boss条件过滤,用标试点刷出来的boss也是召唤兽,放在bossAI中处理,此处不处理
+ if ChConfig.IsGameBoss(curNPC):
+ continue
+
normal_NPC_List.append(curNPC)
for curNPC in normal_NPC_List:
@@ -287,9 +314,10 @@
if curNPC.GetType() == IPY_GameWorld.ntElf:
continue
- if curNPC.GetOwner() == None:
+ if curNPC.GetOwner() == None and not ChConfig.IsGameBoss(curNPC):
#2009.8.17修改
#如果一个召唤兽的主人为None, 划归为普通NPC, 为了减少副本中的CPU使用率
+ #2018.10.9修改:增加boss条件过滤,用标试点刷出来的boss也是召唤兽,也需要处理
continue
if not curNPC.IsAlive():
@@ -332,7 +360,19 @@
for curNPC in gameTruck_List:
ProcessNPCAI(curNPC, tick)
+ # 宠物AI
+ ProcessPetAI(gameWorld, gameNPC, tick)
+
+# 宠物AI需求减弱特殊处理, 减少性能消耗
+def ProcessPetAI(gameWorld, gameNPC, tick):
#---处理宠物的AI---
+ #未到刷新间隔
+ if tick - gameWorld.GetTickByType(ChConfig.TYPE_Map_Tick_PetAITick) < \
+ ChConfig.TYPE_Map_Tick_Time[ChConfig.TYPE_Map_Tick_PetAITick]:
+ return
+
+ gameWorld.SetTickByType(ChConfig.TYPE_Map_Tick_PetAITick, tick)
+
gamePet_List = []
for index in range(0, gameNPC.GetPetCount()):
@@ -399,7 +439,7 @@
GameWorld.GetGameFB().SetGameFBDict(ChConfig.Def_FBDict_NPCShowEndTick % npcID, 0)
GameWorld.DebugLog("NPC秀结束,开始处理AI!npcID=%s,tick=%s,endTick=%s" % (npcID, tick, endTick))
- callFunc = GameWorld.GetExecFunc(NPCAI, "AIType_%d.%s"%(curNPC.GetAIType(), "ProcessAI"))
+ callFunc = GameWorld.GetExecFunc(NPCAI, "AIType_%s.%s"%(GetAIName(curNPC), "ProcessAI"))
if callFunc == None:
#NPCAI不可使用
# #默认call类型1的AI
@@ -409,7 +449,12 @@
return
callFunc(curNPC, tick)
+ return
+def GetAIName(curNPC):
+ if curNPC.GetType() in [ChConfig.ntPriWoodPilePVE, ChConfig.ntPriWoodPilePVP]:
+ return "PriWood"
+ return curNPC.GetAIType()
##################################################logic
--
Gitblit v1.8.0