| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #  | 
| # @todo: ¶ÓÎé  | 
| #  | 
| # @author: Alee  | 
| # @date 2018-1-5 ÏÂÎç05:30:16  | 
| # @version 1.0  | 
| #  | 
| # @note:   | 
| #  | 
| #---------------------------------------------------------------------  | 
|   | 
| from AI.AIBase import *  | 
| import logging  | 
| from Robot.PlayerData import PlayerData, g_ServerTick  | 
| from Protocol.PacketsSendPY import tagCMLoginState  | 
| from Robot import DataDefine  | 
|   | 
| import random  | 
| #from Protocol.PacketsSend import tagCLeaveTeam, tagCPlayerLogOut  | 
| from Protocol.PacketsSendPY import tagCMSuperAtk, tagSkillPosHurtObj  | 
|   | 
| import time  | 
|   | 
|   | 
| ##   | 
| #  | 
| # ¼Ì³ÐAIBase  | 
| class AIPlayerActPlayer(AIBase):  | 
|       | 
|     ## ËùÓÐAI±ØÐë²ÉÓÃÕâÖй̶¨µÄ³õʼ»¯ÔÐÍ£¬ÒÔ±ãAIMgr×Ô¶¯¼ÓÔØ  | 
|     #  @param None : None  | 
|     #  @return bool  | 
|     #  @remarks ´ËAI²»ÐèÒªÖÜÆÚÐÔ±»µ÷Óã¬ËùÒÔÉèÖÃΪ²»ÆôÓÃTimer  | 
|     def __init__(self, robot):  | 
|         AIBase.__init__(self, robot, 3, True, True)  | 
|         self.SetActive(True)  | 
|   | 
|     def _Process( self ):  | 
|   | 
|         if not self.robot.GetPlayerInfo().GetStartWorldTick():  | 
|             return  | 
|           | 
|         sendPack = tagCMSuperAtk()  | 
|         sendPack.Clear()  | 
|         job = self.robot.GetPlayerInfo().GetJob()  | 
|         if not job:  | 
|             return  | 
|         sendPack.SkillID = job *100+random.randint(0, 3)  | 
|           | 
|         sendPack.PosX = self.robot.GetPlayerInfo().GetPosX()   | 
|         sendPack.PosY = self.robot.GetPlayerInfo().GetPosY()  | 
|         sendPack.TagPosX = self.robot.GetPlayerInfo().GetPosX() + random.randint(-2, 2)  | 
|         sendPack.TagPosY = self.robot.GetPlayerInfo().GetPosY() + random.randint(-2, 2)  | 
|         sendPack.WorldTick = self.robot.GetPlayerInfo().GetWorldTick()  | 
|   | 
|         #print "attack--------%s-%s-%s-%s"%(job, sendPack.SkillID, sendPack.WorldTick, self.robot.GetPlayerInfo().GetAccID())  | 
|         self.robot.SendMapServerPYPack(sendPack)  | 
|   | 
|     ## ÏòAIMgr×¢²áÏûÏ¢»Øµ÷º¯Êý  | 
|     #  @param None : None  | 
|     #  @return bool  | 
|     #  @remarks   | 
|     def _RegisterPacket(self, aiMgr):  | 
|         #aiMgr.RegNetMsg(0x0614, self.PlayerAttack, True)  | 
|         pass  | 
|   | 
|     def PlayerAttack(self, pack):  | 
|         if pack.ObjType != 1:  | 
|             return  | 
|         playerID = self.robot.GetPlayerInfo().GetPlayerID()  | 
|         beAttacked = False  | 
|           | 
|         for atk in pack.HurtList:  | 
|             if atk.ObjType != 1:  | 
|                 continue  | 
|             if atk.ObjID == playerID:  | 
|                 beAttacked = True  | 
|                 break  | 
|               | 
|         if not beAttacked:  | 
|             return  | 
|           | 
|           | 
|         #skillIDDict = {1:100, 2:200, 3:300}  | 
|         job = self.robot.GetPlayerInfo().GetJob()  | 
|           | 
|         sendPack = tagCMSuperAtk()  | 
|         sendPack.SkillID = job *100 + random.randint(0,3)  | 
|           | 
|         sendPack.PosX = self.robot.GetPlayerInfo().GetPosX()  | 
|         sendPack.PosY = self.robot.GetPlayerInfo().GetPosY()  | 
|         sendPack.TagPosX = self.robot.GetPlayerInfo().GetPosX() + 3  | 
|         sendPack.TagPosY = self.robot.GetPlayerInfo().GetPosY() + 3  | 
|         sendPack.WorldTick = self.robot.GetPlayerInfo().GetWorldTick()  | 
|         sendPack.HurtCount = 1  | 
|         defender = tagSkillPosHurtObj()  | 
|         defender.ObjType = 1  | 
|         defender.ObjID = pack.ObjID  | 
|    | 
|         sendPack.HurtList = [defender]  | 
|           | 
|         self.robot.SendMapServerPYPack(sendPack)  | 
| #===============================================================================  | 
| #        //B4 05 ´øÉ˺¦¶ÓÁеĹ¥»÷ #tagCMSuperAtk  | 
| #   | 
| # struct    tagSkillPosHurtObj  | 
| # {  | 
| #    BYTE        ObjType;  | 
| #    DWORD        ObjID;  | 
| #    BYTE        AttackType;        //±¬»÷, miss  | 
| #    DWORD        HurtHP;  | 
| # };  | 
| #   | 
| # struct    tagCMSuperAtk  | 
| # {  | 
| #    tagHead        Head;  | 
| #    WORD        SkillID;  | 
| #    WORD        PosX;    //¹¥»÷Æðµã  | 
| #    WORD        PosY;      | 
| #    WORD        TagPosX;        //Ä¿±êµã  | 
| #    WORD        TagPosY;  | 
| #    DWORD        WorldTick;  | 
| #    WORD        HurtCount;        //É˺¦ÊýÄ¿  | 
| #    tagSkillPosHurtObj        HurtList[HurtCount];        //size = HurtCount  | 
| # };  | 
| #===============================================================================  | 
|   | 
|           | 
|          |