#!/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
|
# };
|
#===============================================================================
|
|
|
|