5#define MS_BASE 0xDA000000
7#define CUSTOM 0x00010000
8#define TIMER 0x00020000
9#define ACTION 0x00030000
11#define CUSTOM_TARGETPAINTER_TARGET_OBJECT_CREATED (MS_BASE|CUSTOM|100201)
12#define CUSTOM_TARGETPAINTER_TARGET_OBJECT_DESTROY_SELF (MS_BASE|CUSTOM|100202)
15#define CUSTOM_AI_SOLDIER_DIED (MS_BASE|CUSTOM|100501)
16#define CUSTOM_AI_VEHICLE_DIED (MS_BASE|CUSTOM|100502)
17#define CUSTOM_AI_GO_TO_VEHICLE (MS_BASE|CUSTOM|100503)
18#define CUSTOM_AI_ARRIVED_TO_VEHICLE (MS_BASE|CUSTOM|100504)
19#define CUSTOM_AI_VEHICLE_REQUEST_ENTER (MS_BASE|CUSTOM|100505)
20#define CUSTOM_AI_VEHICLE_EXITED (MS_BASE|CUSTOM|100506)
21#define CUSTOM_AI_REQUEST_REFUND (MS_BASE|CUSTOM|100507)
22#define CUSTOM_AI_TRANSPORT_ARRIVED (MS_BASE|CUSTOM|100508)
23#define CUSTOM_AI_VEHICLE_AMMO_EMPTY (MS_BASE|CUSTOM|100509)
24#define CUSTOM_AI_CHECK_REPAIR_NEEDED (MS_BASE|CUSTOM|100510)
25#define CUSTOM_AI_GO_TO_REFILL (MS_BASE|CUSTOM|100511)
26#define CUSTOM_AI_GO_TO_RELOAD (MS_BASE|CUSTOM|100512)
27#define CUSTOM_AI_GO_TO_EXIT_VEHICLE (MS_BASE|CUSTOM|100513)
28#define CUSTOM_AI_ARRIVED_TO_REFILL (MS_BASE|CUSTOM|100514)
29#define CUSTOM_AI_ARRIVED_TO_EXIT_VEHICLE (MS_BASE|CUSTOM|100515)
30#define CUSTOM_AI_REFILL_COMPLETE (MS_BASE|CUSTOM|100516)
31#define CUSTOM_AI_SEARCH_FOR_VEHICLE (MS_BASE|CUSTOM|100517)
32#define CUSTOM_AI_DEACTIVATE_AI (MS_BASE|CUSTOM|100518)
33#define CUSTOM_AI_GO_SWITCH_OBJECTIVE (MS_BASE|CUSTOM|100519)
34#define CUSTOM_AI_REQUEST_PATROL_POINT (MS_BASE|CUSTOM|100520)
35#define CUSTOM_AI_GO_TO_PATROL_POINT (MS_BASE|CUSTOM|100521)
36#define CUSTOM_AI_CHECK_GO_HOME (MS_BASE|CUSTOM|100522)
37#define CUSTOM_AI_SEND_PUBLIC_MESSAGE (MS_BASE|CUSTOM|100523)
38#define CUSTOM_AI_ADD_RADAR_TARGET (MS_BASE|CUSTOM|100524)
39#define CUSTOM_AI_CHECK_RADAR_TARGETS (MS_BASE|CUSTOM|100525)
40#define CUSTOM_AI_ENEMY_KILLED (MS_BASE|CUSTOM|100526)
41#define CUSTOM_AI_ADD_ALLY_TARGET (MS_BASE|CUSTOM|100527)
42#define CUSTOM_AI_REPAIR_NEEDED (MS_BASE|CUSTOM|100528)
43#define CUSTOM_AI_REPAIR_COMPLETE (MS_BASE|CUSTOM|100529)
45#define CUSTOM_AI_COOP_NEXT_RALLYPOINT (MS_BASE|CUSTOM|100601)
46#define CUSTOM_AI_COOP_ARRIVED_TO_RALLYPOINT (MS_BASE|CUSTOM|100602)
47#define CUSTOM_AI_COOP_GROUPRUSH_COMPLETE (MS_BASE|CUSTOM|100603)
48#define CUSTOM_AI_COOP_STOP_SECONDARY_OBJECTIVE (MS_BASE|CUSTOM|100604)
50#define CUSTOM_AI_COOP_PLAYER_RADIO_MESSAGE (MS_BASE|CUSTOM|100701)
51#define CUSTOM_AI_COOP_PLAYER_FOLLOW (MS_BASE|CUSTOM|100702)
52#define CUSTOM_AI_COOP_PLAYER_FOLLOW_COVER (MS_BASE|CUSTOM|100703)
53#define CUSTOM_AI_COOP_PLAYER_FOLLOW_STOP (MS_BASE|CUSTOM|100704)
54#define CUSTOM_AI_COOP_PLAYER_DEFEND_BASE (MS_BASE|CUSTOM|100705)
55#define CUSTOM_AI_COOP_PLAYER_CREATE_OBJECTIVE (MS_BASE|CUSTOM|100706)
56#define CUSTOM_AI_COOP_PLAYER_DESTROY_OBJECTIVE (MS_BASE|CUSTOM|100707)
58#define CUSTOM_AI_ORDER_MOVE (MS_BASE|CUSTOM|100801)
59#define CUSTOM_AI_ORDER_ATTACK (MS_BASE|CUSTOM|100802)
60#define CUSTOM_AI_ORDER_DEFEND (MS_BASE|CUSTOM|100803)
62#define TIMER_AI_CONTROLLER_PLAYERCHECK (MS_BASE|TIMER|100501)
63#define TIMER_AI_OBJECT_SPAWN_COUNTDOWN (MS_BASE|TIMER|100502)
64#define TIMER_AI_OBJECT_SPAWN_GHOSTING_COUNTDOWN (MS_BASE|TIMER|100503)
65#define TIMER_AI_OBJECT_ACTIVATE_COUNTDOWN (MS_BASE|TIMER|100504)
66#define TIMER_AI_WAIT_FOR_VEHICLE_CONSTRUCT (MS_BASE|TIMER|100505)
67#define TIMER_AI_GO_TO_VEHICLE_TIMEOUT (MS_BASE|TIMER|100506)
68#define TIMER_AI_UNDER_ATTACK (MS_BASE|TIMER|100507)
69#define TIMER_AI_REQUEST_DEPLOY (MS_BASE|TIMER|100508)
70#define TIMER_AI_POST_CREATED (MS_BASE|TIMER|100509)
71#define TIMER_AI_SEARCH_FOR_VEHICLE (MS_BASE|TIMER|100510)
72#define TIMER_AI_REFILL_COOLDOWN (MS_BASE|TIMER|100511)
73#define TIMER_AI_DEFEND (MS_BASE|TIMER|100512)
75#define TIMER_AI_CHECK_FOR_BLOCK (MS_BASE|TIMER|100551)
76#define TIMER_AI_CHECK_GET_AROUND_TIMEOUT (MS_BASE|TIMER|100552)
77#define TIMER_AI_CHECK_UNSTUCK_TIMEOUT (MS_BASE|TIMER|100553)
78#define TIMER_AI_CHECK_DISTANCE (MS_BASE|TIMER|100554)
79#define TIMER_AI_CHECK_RADAR (MS_BASE|TIMER|100555)
80#define TIMER_AI_CHECK_ALLIES (MS_BASE|TIMER|100556)
82#define TIMER_AI_COOP_RETRY_REQUEST (MS_BASE|TIMER|100601)
83#define TIMER_AI_COOP_GROUP_WAIT_TEAM_0 (MS_BASE|TIMER|100602)
84#define TIMER_AI_COOP_GROUP_WAIT_TEAM_1 (MS_BASE|TIMER|100603)
85#define TIMER_AI_COOP_PAUSE_INITIATION (MS_BASE|TIMER|100604)
87#define ACTION_AI_GO_TO_VEHICLE (MS_BASE|ACTION|100001)
88#define ACTION_AI_GET_AROUND_REVERSE (MS_BASE|ACTION|100002)
89#define ACTION_AI_GET_AROUND_FORWARD (MS_BASE|ACTION|100003)
90#define ACTION_AI_RANDOM_MOVING (MS_BASE|ACTION|100004)
92#define DEFAULT_BOT_NAME "Bot"
94#define MS_RGB_JOINLEFT_MSG 178,178,178
95#define MS_RGB_DEBUG 255,255,255
97class Radio_Message_Type
100 static int BUILDING_NEEDS_REPAIRS;
101 static int GET_IN_THE_VEHICLE;
102 static int GET_OUT_OF_THE_VEHICLE;
103 static int DESTROY_THAT_VEHICLE;
104 static int DONT_GET_IN_MY_WAY;
105 static int AFFIRMATIVE;
108 static int TAKE_THE_POINT;
110 static int FOLLOW_ME;
112 static int DESTROY_IT_NOW;
114 static int ATTACK_THE_HARVESTER;
115 static int ATTACK_THAT_STRUCTURE;
116 static int DEFEND_THE_BASE;
117 static int DEFEND_THE_HARVESTER;
118 static int DEFEND_THAT_STRUCTURE;
125 static void Init_AI_Global_Controller();
126 static int Get_AI_Player_Controllers_Count(
int team);
127 static void Give_Bot_Credits(
int team,
float amount);
128 static float Steal_Bot_Credits(
int team,
float percentage);
129 static void Receive_Radio_Command(GameObject *sender,
int AnnouncementID,
int orderType = 0,
int orderObjID = 0);
130 static void Send_Radio_Order_To_Bot(GameObject *sender, GameObject *receiver,
int radioIndex,
int orderType = 0,
int orderObjID = 0);
131 static float Get_Money(GameObject *
object);
132 static void Give_Money(GameObject *
object,
float money);
133 static void Activate_Defense_Protocol(
int team);
137class MS_AI_Rally_Point :
public ScriptImpClass
139 void Created(GameObject *obj)
override;
140 void Destroyed(GameObject *obj)
override;
145 bool Get_IsInfantryOnly();
146 GameObject *Get_Object();
149class MS_AI_Patrol_Point :
public MS_AI_Rally_Point
151 void Created(GameObject *obj)
override;
152 void Destroyed(GameObject *obj)
override;