| | |
| | | import SkillShell
|
| | | import FBLogic
|
| | | import PassiveBuffEffMng
|
| | | import IpyGameDataPY
|
| | | #---------------------------------------------------------------------
|
| | | #导入所有的NPCAI
|
| | | GameWorld.ImportAll("Script\\NPC\\" , "NPCAI")
|
| | |
| | | # @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):
|
| | |
| | | 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 当前时间
|
| | |
| | | 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)
|
| | |
|
| | |
| | |
|
| | | 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:
|
| | |
| | | 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():
|
| | |
| | | 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()):
|