Transifex autosync
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / bot / api.qh
1 #pragma once
2
3 #include <common/weapons/_all.qh>
4 #include <common/stats.qh>
5 #include <common/weapons/_all.qh>
6 #include <common/physics/player.qh>
7
8 bool autocvar_g_waypoints_for_items;
9 bool bot_waypoints_for_items;
10
11 const int WAYPOINTFLAG_GENERATED = BIT(23);
12 const int WAYPOINTFLAG_ITEM = BIT(22);
13 const int WAYPOINTFLAG_TELEPORT = BIT(21); // teleports, warpzones and jumppads
14 //const int WAYPOINTFLAG_NORELINK = BIT(20); // deprecated, see explanation below. Do not recycle this bit.
15 const int WAYPOINTFLAG_PERSONAL = BIT(19);
16 const int WAYPOINTFLAG_PROTECTED = BIT(18);  // Useless WP detection never kills these.
17 const int WAYPOINTFLAG_USEFUL = BIT(17);  // Useless WP detection temporary flag.
18 const int WAYPOINTFLAG_DEAD_END = BIT(16);  // Useless WP detection temporary flag.
19 const int WAYPOINTFLAG_LADDER = BIT(15);
20 const int WAYPOINTFLAG_JUMP = BIT(14);
21 const int WAYPOINTFLAG_CUSTOM_JP = BIT(13);  // jumppad with different destination waypoint (changed in the editor)
22 const int WAYPOINTFLAG_CROUCH = BIT(12);
23 const int WAYPOINTFLAG_SUPPORT = BIT(11);
24
25 // removed WAYPOINTFLAG_NORELINK since it breaks backward compatibility
26 // e.g. support waypoints would have no outgoing links in old Xonotic versions
27 // In general, old Xonotic versions should spawn a normal waypoint for each unknown waypoint type
28 const int WAYPOINTFLAG_NORELINK__DEPRECATED = BIT(20);
29 const int WPFLAGMASK_NORELINK = (WAYPOINTFLAG_TELEPORT | WAYPOINTFLAG_LADDER | WAYPOINTFLAG_JUMP | WAYPOINTFLAG_CUSTOM_JP | WAYPOINTFLAG_SUPPORT);
30
31 float bot_custom_weapon;
32 float bot_weapons_close[REGISTRY_MAX(Weapons)];
33 float bot_weapons_far[REGISTRY_MAX(Weapons)];
34 float bot_weapons_mid[REGISTRY_MAX(Weapons)];
35 float skill;
36
37 .float bot_tracewalk_time;
38 .float bot_attack;
39 .float bot_dodgerating;
40 .float bot_dodge;
41 .float bot_forced_team;
42 .float bot_moveskill; // moving technique
43 .float bot_pickup;
44 .float(entity player, entity item) bot_pickupevalfunc;
45 .string cleanname;
46 .float havocbot_role_timeout;
47 .void(entity this) havocbot_role;
48 .void(entity this) havocbot_previous_role;
49 .float isbot; // true if this client is actually a bot
50 .float lastteleporttime;
51 .vector lastteleport_origin;
52 .float navigation_hasgoals;
53 .float nearestwaypointtimeout;
54 .entity nearestwaypoint;
55 .float speed;
56 .entity wp00, wp01, wp02, wp03, wp04, wp05, wp06, wp07, wp08, wp09, wp10, wp11, wp12, wp13, wp14, wp15;
57 .entity wp16, wp17, wp18, wp19, wp20, wp21, wp22, wp23, wp24, wp25, wp26, wp27, wp28, wp29, wp30, wp31;
58 .float wp00mincost, wp01mincost, wp02mincost, wp03mincost, wp04mincost, wp05mincost, wp06mincost, wp07mincost;
59 .float wp08mincost, wp09mincost, wp10mincost, wp11mincost, wp12mincost, wp13mincost, wp14mincost, wp15mincost;
60 .float wp16mincost, wp17mincost, wp18mincost, wp19mincost, wp20mincost, wp21mincost, wp22mincost, wp23mincost;
61 .float wp24mincost, wp25mincost, wp26mincost, wp27mincost, wp28mincost, wp29mincost, wp30mincost, wp31mincost;
62 .float wpconsidered;
63 .float wpcost;
64 .int wpflags;
65 .entity wphw00, wphw01, wphw02, wphw03, wphw04, wphw05, wphw06, wphw07;
66
67 bool bot_aim(entity this, .entity weaponentity, float shotspeed, float shotspeedupward, float maxshottime, float applygravity);
68 void bot_aim_reset(entity this);
69 void bot_clientconnect(entity this);
70 void bot_clientdisconnect(entity this);
71 void bot_cmdhelp(string scmd);
72 void bot_endgame();
73 bool bot_fixcount();
74 void bot_list_commands();
75 void bot_queuecommand(entity bot, string cmdstring);
76 void bot_relinkplayerlist();
77 void bot_resetqueues();
78 void bot_serverframe();
79 bool bot_shouldattack(entity this, entity e);
80 void bot_think(entity this);
81
82 entity find_bot_by_name(string name);
83 entity find_bot_by_number(float number);
84
85 void havocbot_goalrating_enemyplayers(entity this, float ratingscale, vector org, float sradius);
86 void havocbot_goalrating_items(entity this, float ratingscale, vector org, float sradius);
87 void havocbot_goalrating_waypoints(entity this, float ratingscale, vector org, float sradius);
88
89 bool havocbot_goalrating_item_pickable_check_players(entity this, vector org, entity item, vector item_org);
90
91 vector havocbot_middlepoint;
92 float havocbot_middlepoint_radius;
93 float havocbot_symmetry_axis_m;
94 float havocbot_symmetry_axis_q;
95 float havocbot_symmetry_origin_order;
96
97 .float goalentity_lock_timeout;
98 .float ignoregoaltime;
99 .entity ignoregoal;
100
101 bool bots_would_leave;
102
103 int player_count;
104 int currentbots;
105
106 .entity bot_basewaypoint;
107 .bool navigation_dynamicgoal;
108 void navigation_dynamicgoal_init(entity this, bool initially_static);
109 void navigation_dynamicgoal_set(entity this, entity dropper);
110 void navigation_dynamicgoal_unset(entity this);
111 entity navigation_findnearestwaypoint(entity ent, float walkfromwp);
112 void navigation_goalrating_end(entity this);
113 void navigation_goalrating_start(entity this);
114 void navigation_goalrating_timeout_set(entity this);
115 void navigation_goalrating_timeout_force(entity this);
116 void navigation_goalrating_timeout_expire(entity this, float seconds);
117 bool navigation_goalrating_timeout(entity this);
118 void navigation_goalrating_timeout_extend_if_needed(entity this, float seconds);
119 bool navigation_goalrating_timeout_can_be_anticipated(entity this);
120 void navigation_markroutes(entity this, entity fixed_source_waypoint);
121 void navigation_markroutes_inverted(entity fixed_source_waypoint);
122 void navigation_routerating(entity this, entity e, float f, float rangebias);
123
124 vector get_closer_dest(entity ent, vector org);
125
126 void set_tracewalk_dest(entity ent, vector org, bool fix_player_dest);
127 vector set_tracewalk_dest_2(entity ent, vector org);
128 bool tracewalk(entity e, vector start, vector m1, vector m2, vector end, float end_height, float movemode);
129
130 void waypoint_remove_fromeditor(entity pl);
131 void waypoint_remove(entity wp);
132 void waypoint_saveall();
133 void waypoint_schedulerelinkall();
134 void waypoint_schedulerelink(entity wp);
135 void waypoint_spawnforitem(entity e);
136 void waypoint_spawnforitem_force(entity e, vector org);
137 void waypoint_spawnforteleporter(entity e, vector destination, float timetaken, entity tracetest_ent);
138 void waypoint_spawnforteleporter_wz(entity e, entity tracetest_ent);
139 void waypoint_spawn_fromeditor(entity pl, bool at_crosshair, bool is_jump_wp, bool is_crouch_wp, bool is_support_wp);
140 entity waypoint_spawn(vector m1, vector m2, float f);
141 void waypoint_unreachable(entity pl);
142 void waypoint_start_hardwiredlink(entity pl, bool at_crosshair);
143 void waypoint_lock(entity pl);
144
145 void waypoint_getSymmetricalOrigin_cmd(entity caller, bool save, int arg_idx);
146 void waypoint_getSymmetricalAxis_cmd(entity caller, bool save, int arg_idx);
147
148 IntrusiveList g_waypoints;
149 IntrusiveList g_bot_targets;
150 IntrusiveList g_bot_dodge;
151 STATIC_INIT(botapi)
152 {
153         g_waypoints = IL_NEW();
154         g_bot_targets = IL_NEW();
155         g_bot_dodge = IL_NEW();
156 }