ó
|ómYc           @   s  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z d  d l	 m
 Z
 d  d l	 Td  d l Td a d „  Z d	 „  Z d
 d d „  ƒ  YZ d d d „  ƒ  YZ d d d „  ƒ  YZ d d d „  ƒ  YZ d S(   iÿÿÿÿN(   t   ArtyManager(   t
   SatManager(   t   PlayerTracker(   t   timer(   t   g_debug(   t   *c           C   s.   t  r t j ƒ  d GHn  t t t t ƒ a d  S(   Ns   aiArtyV2.py initialized(   R   t   logt   initt   AiCommandert   G_AI_SETTINGSt   G_ARTY_SETTINGSt   G_SAT_SETTINGSt   aiCommander(    (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyR      s    
c           C   s,   t  j ƒ  d  a  t r( t j ƒ  d GHn  d  S(   Ns   aiArtyV2.py deinitialized(   R   t   deinitt   NoneR   R   (    (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyR      s
    

t	   EventInfoc           B   s   e  Z d  „  Z RS(   c         C   s%   | |  _  | |  _ t j ƒ  |  _ d  S(   N(   t   typet   positiont   hostt   timer_getWallTimet   time(   t   selfR   R   (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyt   __init__(   s    		(   t   __name__t
   __module__R   (    (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyR   '   s   t
   ObjectInfoc           B   s   e  Z d  „  Z RS(   c         C   s   | |  _  | |  _ | |  _ d  S(   N(   R   R   t   objref(   R   R   R   R   (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyR   .   s    		(   R   R   R   (    (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyR   -   s   t
   TargetInfoc           B   s   e  Z d  „  Z RS(   c         C   s   | |  _  | |  _ | |  _ d  S(   N(   t   teamt   radiusR   (   R   R   R   R   (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyR   4   s    		(   R   R   R   (    (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyR   3   s   R   c           B   s¡   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s	  | |  _  | |  _ | |  _ | t | t | t | t | t | t | t	 | t
 | t | t d | t d f |  _ d  |  _ d  |  _ d  |  _ t |  _ t |  _ g  |  _ g  |  _ g  |  _ d  |  _ t j ƒ  pá |  j  d |  _ t j |  j ƒ t rd GHn  d  S(   Ni    t   ONLY_IN_AIGAMEs   AiCommander initialized!(    t   settingst   artySettingst   satSettingst   OBJECT_ENEMY_IDLEt   OBJECT_ENEMY_SOLDIERt   OBJECT_ENEMY_LIGHTARMOURt   OBJECT_ENEMY_HEAVYARMOURt   OBJECT_ENEMY_UNKNOWNt   OBJECT_FRIENDLY_SOLDIERt   OBJECT_FRIENDLY_LIGHTARMOURt   OBJECT_FRIENDLY_HEAVYARMOURt   OBJECT_FRIENDLY_UNKNOWNt   EVENT_CPSTATUSCHANGE_NEUTRALIZEt   EVENT_CPSTATUSCHANGE_TOPt   WEIGHT_KERNELR   t   artyManagert   playerTrackert
   satManagert   Falset   team1_hasCommandert   team2_hasCommandert   team1_eventListt   team2_eventListt   targetst	   loopTimerR   t   sgl_getIsAIGamet   isAIGamet   registerGameStatusHandlert   gameStatusChangedR   (   R   t
   aiSettingsR    R!   (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyR   :   s6    												c         C   s¨   |  j  s d  St |  j ƒ |  _ |  j j d ƒ |  j j d ƒ t ƒ  |  _ t |  j |  j ƒ |  _	 |  j
 s¤ t j |  j d |  j ƒ |  _
 t r¤ t j d ƒ q¤ n  d  S(   Ni   i   t   LOOP_INTERVALs"   AiCommander: loopTimer registered!(   R9   R    R    R.   t   disableArtyR   R/   R   R!   R0   R7   R   t   loopR   t   loopScanR   R   t   output(   R   (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyt	   gameStart[   s    	 	 c         C   su   d  |  _ |  j r+ |  j j ƒ  d  |  _ n  d  |  _ g  |  _ g  |  _ g  |  _ |  j rq |  j j	 ƒ  d  |  _ n  d  S(   N(
   R   R.   R/   R   R0   R4   R5   R6   R7   t   abort(   R   (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyt   gameEndi   s    							c         C   s"   t  j |  j ƒ t r d GHn  d  S(   Ns   AiCommander deinitialized!(   R   t   unregisterGameStatusHandlerR;   R   (   R   (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyR   v   s    c         C   sB   | t  j j k r |  j ƒ  n | t  j j k r> |  j ƒ  n  d  S(   N(   t   bf2t
   GameStatust   PlayingRB   t   EndGameRD   (   R   t   status(    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyR;   {   s    c         C   s§   y’ t  r t j d ƒ n  |  j ƒ  |  j sZ |  j d ƒ } | rZ |  j j d | ƒ qZ n  |  j s‘ |  j d ƒ } | r‘ |  j j d | ƒ q‘ n  Wn t	 ƒ  n Xd  S(   Ns   loopScan...i   i   (
   R   R   RA   t   renewCommanderStateR2   t   findPosForArtyR.   t   startArtyAtR3   t   ExceptionOutput(   R   t   pos(    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyR@   ‚   s     
		c         C   s?  |  j  j | ƒ s d  Si  } | d k r1 |  j p7 |  j } g  } |  j j | ƒ rt|  j j | ƒ j ƒ  } |  j j | ƒ s€ d  S|  j j | ƒ } |  j | | | ƒ xÌ | D]Á } | | d |  j	 d k rÓ q¬ q¬ d g t
 |  j ƒ | | | d <| | d j } t }	 t j | ƒ rDt | }
 |
 t k r7q¬ qDt |
 }	 n  | j t |	 | | d | | d ƒ ƒ q¬ Wn  x— | D] } d g t
 |  j ƒ | | j <t j ƒ  | j |  j	 | j d } t rÝt j d | ƒ n  | d k  r{| | j | j c d | 7<q{q{Wx­ t j j ƒ  D]œ } | j ƒ  | k r| j  ƒ  } | rº|  j! | ƒ } t }	 t j | ƒ r•t | }
 |
 t k rˆqq•t" |
 }	 n  | j t |	 | j# ƒ  | ƒ ƒ qºqqWx:| D]2} x)| D]!} |  j$ | j | ƒ } | |  j	 d k rqÒqÒd } d  } d } xt |  j& D]i } | j' | k rL| j' d k rLq"n  |  j( | j | j ƒ } | d  k s|| | k  r"| } | } q"q"W| rÜ| j) |  j	 d } | | k  rÜ| d |  j	 d	 d | | 9} qÜn  | | | j c | 7<qÒWqÅWt rt j d
 | ƒ n  |  j* | | ƒ } | r7g  | (n  | Sd  S(   Ni   t   VEHICLE_SPEED_THRESHOLDi    i   s   event decay: %s t   ARTY_ROUGHDIST_THRESHOLDi'  t*   OBJECT_INCP_DIST_THRESHOLD_RADIUS_MODIFIERt   OBJECT_INCP_WEIGHT_MODIFIER_MAXs   weightTable: %s(+   R.   t   isAvailableR4   R5   R0   t   getLastScanResultt   copyt   startSatScant   getIdleObjectsFromScanR   t   lenR-   t   templateNameR&   t   VEHICLETYPE_CONVERTt   gett   OBJECT_SKIPt   ENEMYTYPE_CONVERTt   appendR   R   R   R   R   R   R   R   RA   RF   t   playerManagert
   getPlayerst   getTeamt
   getVehiclet   getRootParentt   FRIENDLYTYPE_CONVERTt   getPositiont   getRoughDistanceR   R6   R   t   getVectorDistanceR   t   findMaxArtyWeightPos(   R   R   t   weightTablet	   eventListt   objectInfoListt   lastScanResultt
   scanResultt   indext   objNamet   vehicleTypet	   dummyTypet	   eventInfot   decayt   pt   vt   artyPost   objInfot	   roughDistt   weightModifiert   closestTargett   closestTargetdistt   objt
   distanceTot	   thresholdRO   (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyRL   •   sˆ      "
 0%  %
 ) '
c         C   s½   i  } x( | D]  } | | d | | | d <q Wx… | D]} } | j  | | d ƒ r8 | | | d } |  j | | | d ƒ |  j d k  rµ | j t t | | | d ƒ ƒ qµ q8 q8 Wd  S(   Ni    i   t   OBJECT_IDLE_DIST_THRESHOLD(   R\   Rg   R   R_   R   R"   (   R   t   prevScant   scanRl   t   objPosTableRo   RO   (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyRX   ì   s    'c   	      C   sá   | d k r |  j  p |  j } d } d  } x• | D] } d } | | } t | ƒ t |  j ƒ k r„ | |  j t | ƒ |  j ƒ 7} n  | |  j d t j ƒ  d 7} | | k r1 | } | } q1 q1 W| |  j d k rÙ | Sd  Sd  S(   Ni   i    t   WEIGHT_RANDOMg      à?t   ARTY_WEIGHT_THRESHOLD(	   R4   R5   R   RY   R-   t   vec_dot_tuplet   tupleR   t   random(	   R   R   Rj   Rk   t	   maxWeightt   maxWeightPosRO   t   weightt   weights(    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyRi   ö   s    
 " c         C   s8   d } x+ t  | | ƒ D] \ } } | | | 7} q W| S(   Ni    (   t   zip(   R   t   at   bt   resultt   xt   y(    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyR†     s    c         C   s:   t  j j d ƒ d  k |  _ t  j j d ƒ d  k |  _ d  S(   Ni   i   (   RF   R`   t   getCommanderR   R2   R3   (   R   (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyRK     s    c         C   s9   | d k r |  j  p |  j } | j | ƒ |  j ƒ  d  S(   Ni   (   R4   R5   R_   R@   (   R   R   t   eventRk   (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyt   eventNotify  s    c         C   s5  y t  r& t j d | j | f ƒ n  t  rX t j d | j d ƒ | j d ƒ f ƒ n  | j d ƒ d k r½ | rv q	t  rŒ t j d ƒ n  | j d ƒ } |  j | t t | j ƒ  ƒ ƒ nL | r	| j d ƒ d k rá d } n d } |  j | t t	 | j ƒ  ƒ ƒ n  t  rt j d	 ƒ n  Wn t
 ƒ  n Xd  S(
   Ns   onCPStatusChange: %s %ssE   onCPStatusChange: cp.cp_getParam('team')=%s cp.cp_getParam('flag')=%sR   t   flagi    t
   neutralizei   i   t   onCPStatusChangeEnd(   R   R   RA   RZ   t   cp_getParamR•   R   R+   Rf   R,   RN   (   R   t   cpt   topt   atkTeam(    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyt   onCPStatusChange  s*      , "	" c         C   s¥   d d d g } t  j | d | d ƒ | d <t  j | d | d ƒ | d <t  j | d | d ƒ | d <t  j | d | d | d | d | d | d ƒ S(   Ng        i    i   i   (   t   matht   fabst   sqrt(   R   t   pos1t   pos2t   diffVec(    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyRh   D  s
    c         C   sK   t  j | d | d ƒ t  j | d | d ƒ t  j | d | d ƒ S(   Ni    i   i   (   Rž   RŸ   (   R   R¡   R¢   (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyRg   M  s    c         C   s)   | j  ƒ  } | d  k r | S|  j | ƒ S(   N(   t	   getParentR   Rd   (   R   R}   t   parent(    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyRd   P  s    c         C   s'   t  t j d ƒ ƒ } | r t St Sd  S(   Ns   sv.internet(   t   intR   t   rcon_invokeR1   t   True(   R   t   internet(    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyt   isLocalX  s    (   R   R   R   RB   RD   R   R;   R@   RL   RX   Ri   R†   RK   R•   R   Rh   Rg   Rd   Rª   (    (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyR   9   s"   	!						W	
					(				(    (    (    (    (   R   RF   R   Rž   Rˆ   R    R   R   R   R    R   t   exceptionoutputR   R   R   R   R   R   R   R   (    (    (    sM   D:\Program Files (x86)\BF2\mods\Rush\python\game\gamemodes\aiArty\aiArtyV2.pyt   <module>   s"   

	
		