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