From e19b08127ac798154fab5f8f11f782e54aaa025b Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期日, 05 五月 2019 14:16:36 +0800
Subject: [PATCH] 6457 缥缈仙域事件设置结束暂不做限制,防止异常导致无法结束

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/ChNPC.py |   61 ++++++++++++++++++++++++++++--
 1 files changed, 57 insertions(+), 4 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 92e89fd..2c2aee9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/ChNPC.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/ChNPC.py
@@ -46,6 +46,7 @@
 import SkillShell
 import FBLogic
 import PassiveBuffEffMng
+import IpyGameDataPY
 #---------------------------------------------------------------------
 #导入所有的NPCAI
 GameWorld.ImportAll("Script\\NPC\\" , "NPCAI")
@@ -89,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):
@@ -118,7 +134,13 @@
     callFunc(atkObj, curNPC, skill, tick)
     
     PlayerActivity.OnAttackNPCActivity(atkObj, curNPC)
-    
+
+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 当前时间
@@ -136,11 +158,25 @@
 def __Func_InitNPC(tick):
     #调用NPC AI击杀触发
     NPCCommon.OnNPCDie = OnNPCDie
-    GameWorld.Log("NPC Initing...FB %d"%GameWorld.GetGameWorld().GetCurGameWorldIndex())
+    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)
+        if gameWorldIndex == activityLineID:
+            hideNPCIDList = IpyGameDataPY.GetFuncEvalCfg("MapLine", 3)
+            GameWorld.Log("    hideNPCIDList=%s" % hideNPCIDList)
+            
     gameNPC = GameWorld.GetNPCManager()
     npcCount = gameNPC.GetNPCCount()
     for i in xrange(npcCount):
         curNPC = gameNPC.GetNPCByIndex(i)
+        if curNPC.GetNPCID() in hideNPCIDList:
+            curNPC.SetVisible(False)
+            continue
         #初始化
         NPCCommon.InitNPC(curNPC) 
         
@@ -184,7 +220,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:
@@ -272,9 +312,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():
@@ -317,7 +358,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()):

--
Gitblit v1.8.0