| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #---------------------------------------------------------------------
|
| | | ##@package AIType_21
|
| | | #巡逻守卫AI,攻击非本国家玩家,和红名玩家
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | # @author PanWei
|
| | | # @date 2010-4-28下午06:01:33
|
| | | # @version 1.4
|
| | | ##@package NPCAI.AIType_21
|
| | | #
|
| | | #模块详细说明.
|
| | | # @change: "2010-05-12 18:30" zhengyang 添加注释
|
| | | # @change: "2010-06-09 09:50" zhengyang 守卫npc加入异常状态眩晕判断 |
| | | # @change: 2010-06-14 16:00 zhengyang 修正普攻参数传错
|
| | | # @change: "2010-11-22 12:15" Alee 删除异常/沉默判定
|
| | | #---------------------------------------------------------------------
|
| | | """Version = 2010-11-22 12:15"""
|
| | | #---------------------------------------------------------------------
|
| | | import IPY_GameWorld
|
| | | import GameWorld
|
| | | import NPCCommon
|
| | | import BaseAttack
|
| | | # @todo:副本活动机器人
|
| | | # @author hxp
|
| | | # @date 2018-12-06
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 副本活动机器人
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2018-12-06 20:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import ChConfig
|
| | | import AICommon
|
| | | import GameObj
|
| | |
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | ## 初始化
|
| | | # @param curNPC NPC实例
|
| | |
| | | # @remarks 函数详细说明.
|
| | | def DoInit(curNPC):
|
| | | curNPC.GetNPCAngry().Init(ChConfig.Def_BossAngryCount)
|
| | | return
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | ##正常AI逻辑处理
|
| | |
| | | #@return 返回值无意义
|
| | | #@remarks 正常AI逻辑处理
|
| | | def ProcessAI(curNPC, tick):
|
| | | npcControl = NPCCommon.NPCControl(curNPC)
|
| | | if curNPC.GetCurAction() == IPY_GameWorld.laNPCDie or not curNPC.IsAlive():
|
| | | #NPC死亡, 进入死亡倒计时
|
| | | if npcControl.DieTick(tick) == 0:
|
| | | return
|
| | | |
| | | #刷新自己的buff
|
| | | npcControl.RefreshBuffState(tick)
|
| | | if GameObj.GetHP(curNPC) == 0 :
|
| | | # BUFF刷新中可能会导致NPC死亡
|
| | | return
|
| | | |
| | | # #判断异常状态
|
| | | # if curNPC.GetAbnormalState() == IPY_GameWorld.sctFaint:
|
| | | # return |
| | | |
| | | curNPCAction = curNPC.GetCurAction()
|
| | | #NPC快速奔跑中, 处理
|
| | | if curNPCAction == IPY_GameWorld.laNPCMove and curNPC.GetCurMoveType() == IPY_GameWorld.mtRun :
|
| | | AICommon.NormalNPCFast_Move(curNPC , tick)
|
| | | return
|
| | | |
| | | #刷新自己仇恨度列表
|
| | | npcControl.RefreshAngryList(tick)
|
| | | curNPCAngry = npcControl.GetMaxAngryTag()
|
| | | |
| | | #仇恨度列表中的人为空
|
| | | if curNPCAngry == None :
|
| | | AICommon.NormalNPCFree_Move(curNPC , tick)
|
| | | return
|
| | | |
| | | #仇恨对象类型,仇恨对象ID
|
| | | curNPCAngryType = curNPCAngry.GetObjType()
|
| | | curNPCAngryID = curNPCAngry.GetObjID()
|
| | | #战斗中回血
|
| | | npcControl.ProcessBattleHPRestore(tick)
|
| | | #执行攻击逻辑
|
| | | __NPCFight(curNPC, curNPCAngryID, curNPCAngryType, tick)
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | ## npc攻击战斗
|
| | | # @param curNPC 当前npc
|
| | | # @param tagID curNPCAngryID
|
| | | # @param tagType curNPCAngryType |
| | | # @param tick 当前时间
|
| | | # @return None
|
| | | # @remarks 战斗逻辑实现
|
| | | def __NPCFight(curNPC, tagID, tagType, tick):
|
| | | #设置进入战斗状态
|
| | | NPCCommon.SetNPCInBattleState(curNPC)
|
| | | npcControl = NPCCommon.NPCControl(curNPC)
|
| | | #NPC的打怪AI
|
| | | if not npcControl.IsInRefreshArea():
|
| | | #追击返回
|
| | | npcControl.MoveBack()
|
| | | return
|
| | | |
| | | #开始攻击
|
| | | curTag = GameWorld.GetObj(tagID, tagType)
|
| | | |
| | | if curTag == None or GameObj.GetHP(curTag) <= 0:
|
| | | return
|
| | | |
| | | tagDist = GameWorld.GetDist(curNPC.GetPosX(), curNPC.GetPosY(), curTag.GetPosX(), curTag.GetPosY())
|
| | | |
| | | if tagDist > curNPC.GetAtkDist() :
|
| | | npcControl.MoveToObj_Detel(curTag)
|
| | | return
|
| | | |
| | | if tick - curNPC.GetAttackTick() < curNPC.GetAtkInterval():
|
| | | #攻击间隔没有到, 返回
|
| | | return
|
| | | |
| | | if npcControl.FixTagPos(curTag.GetPosX(), curTag.GetPosY()):
|
| | | #修正这个NPC的站立位置
|
| | | return
|
| | | |
| | | #普通攻击
|
| | | BaseAttack.Attack(curNPC, curTag, None, tick)
|
| | | return
|
| | | |
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|