samp_sdk/omp/generated/npc.rs
1//! `INPC` — generated by `cargo xtask gen-omp` from `Server/Components/NPCs/npcs.hpp`.
2//! Implemented by `NPC` in the server's `NPCs`.
3//!
4//! Do not edit: change `xtask/omp-wrappers.toml` or the generator and
5//! regenerate. Slots are clang's layout of the header for each ABI, checked
6//! against the official binaries by `cargo xtask check-abi --generated`.
7
8#![allow(unused_imports)]
9
10use crate::omp::containers::{FlatSet, HybridString, Pair, Span};
11use crate::omp::types::{
12 Colour, GTAQuat, Hours, Microseconds, Milliseconds, Minutes, Seconds, StringView, TimePoint,
13 UID, Vector2, Vector3, Vector4, WorldTimePoint,
14};
15use crate::omp::vtable::{call_vtable_small_struct, opaque, slots, virtual_fns};
16use crate::omp::*;
17
18opaque! {
19 /// Opaque handle for `INPC*`.
20 pub INPC;
21}
22
23slots! {
24 /// `IPlayer * INPC::getPlayer()`
25 SLOT_GET_PLAYER: usize = 6, 5;
26 /// `Vector3 INPC::getPosition()`
27 SLOT_GET_POSITION: usize = 7, 6;
28 /// `void INPC::setPosition(const Vector3 &, bool)`
29 SLOT_SET_POSITION: usize = 8, 7;
30 /// `GTAQuat INPC::getRotation()`
31 SLOT_GET_ROTATION: usize = 9, 8;
32 /// `void INPC::setRotation(const GTAQuat &, bool)`
33 SLOT_SET_ROTATION: usize = 10, 9;
34 /// `int INPC::getVirtualWorld()`
35 SLOT_GET_VIRTUAL_WORLD: usize = 11, 10;
36 /// `void INPC::setVirtualWorld(int)`
37 SLOT_SET_VIRTUAL_WORLD: usize = 12, 11;
38 /// `void INPC::spawn()`
39 SLOT_SPAWN: usize = 13, 12;
40 /// `void INPC::respawn()`
41 SLOT_RESPAWN: usize = 14, 13;
42 /// `bool INPC::move(Vector3, NPCMoveType, float, float)`
43 SLOT_MOVE: usize = 15, 14;
44 /// `bool INPC::moveToPlayer(IPlayer &, NPCMoveType, float, float, Milliseconds, bool)`
45 SLOT_MOVE_TO_PLAYER: usize = 16, 15;
46 /// `void INPC::stopMove()`
47 SLOT_STOP_MOVE: usize = 17, 16;
48 /// `bool INPC::isMoving()`
49 SLOT_IS_MOVING: usize = 18, 17;
50 /// `void INPC::setSkin(int)`
51 SLOT_SET_SKIN: usize = 19, 18;
52 /// `bool INPC::isStreamedInForPlayer(const IPlayer &)`
53 SLOT_IS_STREAMED_IN_FOR_PLAYER: usize = 20, 19;
54 /// `const FlatPtrHashSet<IPlayer> & INPC::streamedForPlayers()`
55 SLOT_STREAMED_FOR_PLAYERS: usize = 21, 20;
56 /// `void INPC::setInterior(unsigned int)`
57 SLOT_SET_INTERIOR: usize = 22, 21;
58 /// `unsigned int INPC::getInterior()`
59 SLOT_GET_INTERIOR: usize = 23, 22;
60 /// `Vector3 INPC::getVelocity()`
61 SLOT_GET_VELOCITY: usize = 24, 23;
62 /// `void INPC::setVelocity(Vector3, bool)`
63 SLOT_SET_VELOCITY: usize = 25, 24;
64 /// `void INPC::setHealth(float)`
65 SLOT_SET_HEALTH: usize = 26, 25;
66 /// `float INPC::getHealth()`
67 SLOT_GET_HEALTH: usize = 27, 26;
68 /// `void INPC::setArmour(float)`
69 SLOT_SET_ARMOUR: usize = 28, 27;
70 /// `float INPC::getArmour()`
71 SLOT_GET_ARMOUR: usize = 29, 28;
72 /// `bool INPC::isDead()`
73 SLOT_IS_DEAD: usize = 30, 29;
74 /// `void INPC::setWeapon(uint8_t)`
75 SLOT_SET_WEAPON: usize = 31, 30;
76 /// `uint8_t INPC::getWeapon()`
77 SLOT_GET_WEAPON: usize = 32, 31;
78 /// `void INPC::setAmmo(int)`
79 SLOT_SET_AMMO: usize = 33, 32;
80 /// `int INPC::getAmmo()`
81 SLOT_GET_AMMO: usize = 34, 33;
82 /// `void INPC::setWeaponSkillLevel(PlayerWeaponSkill, int)`
83 SLOT_SET_WEAPON_SKILL_LEVEL: usize = 35, 34;
84 /// `int INPC::getWeaponSkillLevel(PlayerWeaponSkill)`
85 SLOT_GET_WEAPON_SKILL_LEVEL: usize = 36, 35;
86 /// `void INPC::setKeys(uint16_t, uint16_t, uint16_t)`
87 SLOT_SET_KEYS: usize = 37, 36;
88 /// `void INPC::getKeys(uint16_t &, uint16_t &, uint16_t &)`
89 SLOT_GET_KEYS: usize = 38, 37;
90 /// `void INPC::meleeAttack(int, bool)`
91 SLOT_MELEE_ATTACK: usize = 39, 38;
92 /// `void INPC::stopMeleeAttack()`
93 SLOT_STOP_MELEE_ATTACK: usize = 40, 39;
94 /// `bool INPC::isMeleeAttacking()`
95 SLOT_IS_MELEE_ATTACKING: usize = 41, 40;
96 /// `void INPC::setFightingStyle(PlayerFightingStyle)`
97 SLOT_SET_FIGHTING_STYLE: usize = 42, 41;
98 /// `PlayerFightingStyle INPC::getFightingStyle()`
99 SLOT_GET_FIGHTING_STYLE: usize = 43, 42;
100 /// `void INPC::enableReloading(bool)`
101 SLOT_ENABLE_RELOADING: usize = 44, 43;
102 /// `bool INPC::isReloadEnabled()`
103 SLOT_IS_RELOAD_ENABLED: usize = 45, 44;
104 /// `bool INPC::isReloading()`
105 SLOT_IS_RELOADING: usize = 46, 45;
106 /// `void INPC::enableInfiniteAmmo(bool)`
107 SLOT_ENABLE_INFINITE_AMMO: usize = 47, 46;
108 /// `bool INPC::isInfiniteAmmoEnabled()`
109 SLOT_IS_INFINITE_AMMO_ENABLED: usize = 48, 47;
110 /// `PlayerWeaponState INPC::getWeaponState()`
111 SLOT_GET_WEAPON_STATE: usize = 49, 48;
112 /// `void INPC::setAmmoInClip(int)`
113 SLOT_SET_AMMO_IN_CLIP: usize = 50, 49;
114 /// `int INPC::getAmmoInClip()`
115 SLOT_GET_AMMO_IN_CLIP: usize = 51, 50;
116 /// `void INPC::shoot(int, PlayerBulletHitType, uint8_t, const Vector3 &, const Vector3 &, bool, EntityCheckType)`
117 SLOT_SHOOT: usize = 52, 51;
118 /// `bool INPC::isShooting()`
119 SLOT_IS_SHOOTING: usize = 53, 52;
120 /// `void INPC::aimAt(const Vector3 &, bool, int, bool, const Vector3 &, EntityCheckType)`
121 SLOT_AIM_AT: usize = 54, 53;
122 /// `void INPC::aimAtPlayer(IPlayer &, bool, int, bool, const Vector3 &, const Vector3 &, EntityCheckType)`
123 SLOT_AIM_AT_PLAYER: usize = 55, 54;
124 /// `void INPC::stopAim()`
125 SLOT_STOP_AIM: usize = 56, 55;
126 /// `bool INPC::isAiming()`
127 SLOT_IS_AIMING: usize = 57, 56;
128 /// `bool INPC::isAimingAtPlayer(IPlayer &)`
129 SLOT_IS_AIMING_AT_PLAYER: usize = 58, 57;
130 /// `void INPC::setWeaponAccuracy(uint8_t, float)`
131 SLOT_SET_WEAPON_ACCURACY: usize = 59, 58;
132 /// `float INPC::getWeaponAccuracy(uint8_t)`
133 SLOT_GET_WEAPON_ACCURACY: usize = 60, 59;
134 /// `void INPC::setWeaponReloadTime(uint8_t, int)`
135 SLOT_SET_WEAPON_RELOAD_TIME: usize = 61, 60;
136 /// `int INPC::getWeaponReloadTime(uint8_t)`
137 SLOT_GET_WEAPON_RELOAD_TIME: usize = 62, 61;
138 /// `int INPC::getWeaponActualReloadTime(uint8_t)`
139 SLOT_GET_WEAPON_ACTUAL_RELOAD_TIME: usize = 63, 62;
140 /// `void INPC::setWeaponShootTime(uint8_t, int)`
141 SLOT_SET_WEAPON_SHOOT_TIME: usize = 64, 63;
142 /// `int INPC::getWeaponShootTime(uint8_t)`
143 SLOT_GET_WEAPON_SHOOT_TIME: usize = 65, 64;
144 /// `void INPC::setWeaponClipSize(uint8_t, int)`
145 SLOT_SET_WEAPON_CLIP_SIZE: usize = 66, 65;
146 /// `int INPC::getWeaponClipSize(uint8_t)`
147 SLOT_GET_WEAPON_CLIP_SIZE: usize = 67, 66;
148 /// `int INPC::getWeaponActualClipSize(uint8_t)`
149 SLOT_GET_WEAPON_ACTUAL_CLIP_SIZE: usize = 68, 67;
150 /// `void INPC::enterVehicle(IVehicle &, uint8_t, NPCMoveType)`
151 SLOT_ENTER_VEHICLE: usize = 69, 68;
152 /// `void INPC::exitVehicle()`
153 SLOT_EXIT_VEHICLE: usize = 70, 69;
154 /// `bool INPC::putInVehicle(IVehicle &, uint8_t)`
155 SLOT_PUT_IN_VEHICLE: usize = 71, 70;
156 /// `bool INPC::removeFromVehicle()`
157 SLOT_REMOVE_FROM_VEHICLE: usize = 72, 71;
158 /// `bool INPC::moveByPath(int, NPCMoveType, float, bool)`
159 SLOT_MOVE_BY_PATH: usize = 73, 72;
160 /// `void INPC::pausePath()`
161 SLOT_PAUSE_PATH: usize = 74, 73;
162 /// `void INPC::resumePath()`
163 SLOT_RESUME_PATH: usize = 75, 74;
164 /// `void INPC::stopPath()`
165 SLOT_STOP_PATH: usize = 76, 75;
166 /// `bool INPC::isMovingByPath()`
167 SLOT_IS_MOVING_BY_PATH: usize = 77, 76;
168 /// `bool INPC::isPathPaused()`
169 SLOT_IS_PATH_PAUSED: usize = 78, 77;
170 /// `int INPC::getCurrentPathId()`
171 SLOT_GET_CURRENT_PATH_ID: usize = 79, 78;
172 /// `int INPC::getCurrentPathPointIndex()`
173 SLOT_GET_CURRENT_PATH_POINT_INDEX: usize = 80, 79;
174 /// `IVehicle * INPC::getVehicle()`
175 SLOT_GET_VEHICLE: usize = 81, 80;
176 /// `int INPC::getVehicleSeat()`
177 SLOT_GET_VEHICLE_SEAT: usize = 82, 81;
178 /// `IVehicle * INPC::getEnteringVehicle()`
179 SLOT_GET_ENTERING_VEHICLE: usize = 83, 82;
180 /// `int INPC::getEnteringVehicleSeat()`
181 SLOT_GET_ENTERING_VEHICLE_SEAT: usize = 84, 83;
182 /// `void INPC::useVehicleSiren(bool)`
183 SLOT_USE_VEHICLE_SIREN: usize = 85, 84;
184 /// `bool INPC::isVehicleSirenUsed()`
185 SLOT_IS_VEHICLE_SIREN_USED: usize = 86, 85;
186 /// `void INPC::setVehicleHealth(float)`
187 SLOT_SET_VEHICLE_HEALTH: usize = 87, 86;
188 /// `float INPC::getVehicleHealth()`
189 SLOT_GET_VEHICLE_HEALTH: usize = 88, 87;
190 /// `void INPC::setVehicleHydraThrusters(int)`
191 SLOT_SET_VEHICLE_HYDRA_THRUSTERS: usize = 89, 88;
192 /// `int INPC::getVehicleHydraThrusters()`
193 SLOT_GET_VEHICLE_HYDRA_THRUSTERS: usize = 90, 89;
194 /// `void INPC::setVehicleGearState(int)`
195 SLOT_SET_VEHICLE_GEAR_STATE: usize = 91, 90;
196 /// `int INPC::getVehicleGearState()`
197 SLOT_GET_VEHICLE_GEAR_STATE: usize = 92, 91;
198 /// `void INPC::setVehicleTrainSpeed(float)`
199 SLOT_SET_VEHICLE_TRAIN_SPEED: usize = 93, 92;
200 /// `float INPC::getVehicleTrainSpeed()`
201 SLOT_GET_VEHICLE_TRAIN_SPEED: usize = 94, 93;
202 /// `void INPC::resetAnimation()`
203 SLOT_RESET_ANIMATION: usize = 95, 94;
204 /// `void INPC::setAnimation(int, float, bool, bool, bool, bool, int)`
205 SLOT_SET_ANIMATION: usize = 96, 95;
206 /// `void INPC::getAnimation(int &, float &, bool &, bool &, bool &, bool &, int &)`
207 SLOT_GET_ANIMATION: usize = 97, 96;
208 /// `void INPC::applyAnimation(const AnimationData &)`
209 SLOT_APPLY_ANIMATION: usize = 98, 97;
210 /// `void INPC::clearAnimations()`
211 SLOT_CLEAR_ANIMATIONS: usize = 99, 98;
212 /// `void INPC::setSpecialAction(PlayerSpecialAction)`
213 SLOT_SET_SPECIAL_ACTION: usize = 100, 99;
214 /// `PlayerSpecialAction INPC::getSpecialAction()`
215 SLOT_GET_SPECIAL_ACTION: usize = 101, 100;
216 /// `bool INPC::startPlayback(StringView, bool, const Vector3 &, const GTAQuat &)`
217 SLOT_START_PLAYBACK: usize = 102, 102;
218 /// `bool INPC::startPlayback(int, bool, const Vector3 &, const GTAQuat &)`
219 SLOT_START_PLAYBACK_ID: usize = 103, 101;
220 /// `void INPC::stopPlayback()`
221 SLOT_STOP_PLAYBACK: usize = 104, 103;
222 /// `void INPC::pausePlayback(bool)`
223 SLOT_PAUSE_PLAYBACK: usize = 105, 104;
224 /// `bool INPC::isPlayingPlayback()`
225 SLOT_IS_PLAYING_PLAYBACK: usize = 106, 105;
226 /// `bool INPC::isPlaybackPaused()`
227 SLOT_IS_PLAYBACK_PAUSED: usize = 107, 106;
228 /// `bool INPC::playNode(int, NPCMoveType, float, float, bool)`
229 SLOT_PLAY_NODE: usize = 108, 107;
230 /// `void INPC::stopPlayingNode()`
231 SLOT_STOP_PLAYING_NODE: usize = 109, 108;
232 /// `void INPC::pausePlayingNode()`
233 SLOT_PAUSE_PLAYING_NODE: usize = 110, 109;
234 /// `void INPC::resumePlayingNode()`
235 SLOT_RESUME_PLAYING_NODE: usize = 111, 110;
236 /// `bool INPC::isPlayingNodePaused()`
237 SLOT_IS_PLAYING_NODE_PAUSED: usize = 112, 111;
238 /// `bool INPC::isPlayingNode()`
239 SLOT_IS_PLAYING_NODE: usize = 113, 112;
240 /// `uint16_t INPC::changeNode(int, uint16_t)`
241 SLOT_CHANGE_NODE: usize = 114, 113;
242 /// `bool INPC::updateNodePoint(uint16_t)`
243 SLOT_UPDATE_NODE_POINT: usize = 115, 114;
244 /// `void INPC::setInvulnerable(bool)`
245 SLOT_SET_INVULNERABLE: usize = 116, 115;
246 /// `bool INPC::isInvulnerable()`
247 SLOT_IS_INVULNERABLE: usize = 117, 116;
248 /// `void INPC::setSurfingData(const PlayerSurfingData &)`
249 SLOT_SET_SURFING_DATA: usize = 118, 117;
250 /// `PlayerSurfingData INPC::getSurfingData()`
251 SLOT_GET_SURFING_DATA: usize = 119, 118;
252 /// `void INPC::resetSurfingData()`
253 SLOT_RESET_SURFING_DATA: usize = 120, 119;
254 /// `bool INPC::isMovingToPlayer(IPlayer &)`
255 SLOT_IS_MOVING_TO_PLAYER: usize = 121, 120;
256 /// `void INPC::kill(IPlayer *, uint8_t)`
257 SLOT_KILL: usize = 122, 121;
258 /// `IPlayer * INPC::getPlayerAimingAt()`
259 SLOT_GET_PLAYER_AIMING_AT: usize = 123, 122;
260 /// `IPlayer * INPC::getPlayerMovingTo()`
261 SLOT_GET_PLAYER_MOVING_TO: usize = 124, 123;
262 /// `void INPC::setWeaponState(PlayerWeaponState)`
263 SLOT_SET_WEAPON_STATE: usize = 125, 124;
264 /// `Vector3 INPC::getPositionMovingTo()`
265 SLOT_GET_POSITION_MOVING_TO: usize = 126, 125;
266}
267
268virtual_fns! {
269 /// `IPlayer * INPC::getPlayer()`.
270 ///
271 /// # Safety
272 /// `npc` must be a live `INPC`.
273 #[must_use]
274 pub fn npc_player(npc: INPC) -> *mut IPlayer = [0, SLOT_GET_PLAYER] or std::ptr::null_mut();
275
276 /// `Vector3 INPC::getPosition()`.
277 ///
278 /// # Safety
279 /// `npc` must be a live `INPC`.
280 #[must_use]
281 pub fn npc_position(npc: INPC) -> Vector3 = [0, SLOT_GET_POSITION] or Vector3::ZERO;
282
283 /// `void INPC::setPosition(const Vector3 &, bool)`.
284 ///
285 /// # Safety
286 /// `npc` must be a live `INPC`.
287 pub fn npc_set_position(
288 npc: INPC,
289 position: &Vector3,
290 immediate_update: bool,
291 ) = [0, SLOT_SET_POSITION];
292
293 /// `GTAQuat INPC::getRotation()`.
294 ///
295 /// # Safety
296 /// `npc` must be a live `INPC`.
297 #[must_use]
298 pub fn npc_rotation(npc: INPC) -> GTAQuat = [0, SLOT_GET_ROTATION] or GTAQuat::default();
299
300 /// `void INPC::setRotation(const GTAQuat &, bool)`.
301 ///
302 /// # Safety
303 /// `npc` must be a live `INPC`.
304 pub fn npc_set_rotation(
305 npc: INPC,
306 rotation: >AQuat,
307 immediate_update: bool,
308 ) = [0, SLOT_SET_ROTATION];
309
310 /// `int INPC::getVirtualWorld()`.
311 ///
312 /// # Safety
313 /// `npc` must be a live `INPC`.
314 #[must_use]
315 pub fn npc_virtual_world(npc: INPC) -> i32 = [0, SLOT_GET_VIRTUAL_WORLD] or 0;
316
317 /// `void INPC::setVirtualWorld(int)`.
318 ///
319 /// # Safety
320 /// `npc` must be a live `INPC`.
321 pub fn npc_set_virtual_world(npc: INPC, vw: i32) = [0, SLOT_SET_VIRTUAL_WORLD];
322
323 /// `void INPC::spawn()`.
324 ///
325 /// # Safety
326 /// `npc` must be a live `INPC`.
327 pub fn npc_spawn(npc: INPC) = [0, SLOT_SPAWN];
328
329 /// `void INPC::respawn()`.
330 ///
331 /// # Safety
332 /// `npc` must be a live `INPC`.
333 pub fn npc_respawn(npc: INPC) = [0, SLOT_RESPAWN];
334
335 /// `bool INPC::move(Vector3, NPCMoveType, float, float)`.
336 ///
337 /// # Safety
338 /// `npc` must be a live `INPC`.
339 #[must_use]
340 pub fn npc_move(
341 npc: INPC,
342 position: Vector3,
343 move_type: i32,
344 move_speed: f32,
345 stop_range: f32,
346 ) -> bool = [0, SLOT_MOVE] or false;
347
348 /// `bool INPC::moveToPlayer(IPlayer &, NPCMoveType, float, float, Milliseconds, bool)`.
349 ///
350 /// # Safety
351 /// `npc` must be a live `INPC`.
352 #[must_use]
353 pub fn npc_move_to_player(
354 npc: INPC,
355 target_player: *mut IPlayer,
356 move_type: i32,
357 move_speed: f32,
358 stop_range: f32,
359 pos_check_update_delay: Milliseconds,
360 auto_restart: bool,
361 ) -> bool = [0, SLOT_MOVE_TO_PLAYER] or false;
362
363 /// `void INPC::stopMove()`.
364 ///
365 /// # Safety
366 /// `npc` must be a live `INPC`.
367 pub fn npc_stop_move(npc: INPC) = [0, SLOT_STOP_MOVE];
368
369 /// `bool INPC::isMoving()`.
370 ///
371 /// # Safety
372 /// `npc` must be a live `INPC`.
373 #[must_use]
374 pub fn npc_is_moving(npc: INPC) -> bool = [0, SLOT_IS_MOVING] or false;
375
376 /// `void INPC::setSkin(int)`.
377 ///
378 /// # Safety
379 /// `npc` must be a live `INPC`.
380 pub fn npc_set_skin(npc: INPC, model: i32) = [0, SLOT_SET_SKIN];
381
382 /// `bool INPC::isStreamedInForPlayer(const IPlayer &)`.
383 ///
384 /// # Safety
385 /// `npc` must be a live `INPC`.
386 #[must_use]
387 pub fn npc_is_streamed_in_for_player(
388 npc: INPC,
389 other: *mut IPlayer,
390 ) -> bool = [0, SLOT_IS_STREAMED_IN_FOR_PLAYER] or false;
391
392 /// `const FlatPtrHashSet<IPlayer> & INPC::streamedForPlayers()`.
393 ///
394 /// # Safety
395 /// `npc` must be a live `INPC`.
396 #[must_use]
397 pub fn npc_streamed_for_players(
398 npc: INPC,
399 ) -> *const FlatSet<IPlayer> = [0, SLOT_STREAMED_FOR_PLAYERS] or std::ptr::null();
400
401 /// `void INPC::setInterior(unsigned int)`.
402 ///
403 /// # Safety
404 /// `npc` must be a live `INPC`.
405 pub fn npc_set_interior(npc: INPC, interior: u32) = [0, SLOT_SET_INTERIOR];
406
407 /// `unsigned int INPC::getInterior()`.
408 ///
409 /// # Safety
410 /// `npc` must be a live `INPC`.
411 #[must_use]
412 pub fn npc_interior(npc: INPC) -> u32 = [0, SLOT_GET_INTERIOR] or 0;
413
414 /// `Vector3 INPC::getVelocity()`.
415 ///
416 /// # Safety
417 /// `npc` must be a live `INPC`.
418 #[must_use]
419 pub fn npc_velocity(npc: INPC) -> Vector3 = [0, SLOT_GET_VELOCITY] or Vector3::ZERO;
420
421 /// `void INPC::setVelocity(Vector3, bool)`.
422 ///
423 /// # Safety
424 /// `npc` must be a live `INPC`.
425 pub fn npc_set_velocity(npc: INPC, position: Vector3, update: bool) = [0, SLOT_SET_VELOCITY];
426
427 /// `void INPC::setHealth(float)`.
428 ///
429 /// # Safety
430 /// `npc` must be a live `INPC`.
431 pub fn npc_set_health(npc: INPC, health: f32) = [0, SLOT_SET_HEALTH];
432
433 /// `float INPC::getHealth()`.
434 ///
435 /// # Safety
436 /// `npc` must be a live `INPC`.
437 #[must_use]
438 pub fn npc_health(npc: INPC) -> f32 = [0, SLOT_GET_HEALTH] or 0.0;
439
440 /// `void INPC::setArmour(float)`.
441 ///
442 /// # Safety
443 /// `npc` must be a live `INPC`.
444 pub fn npc_set_armour(npc: INPC, armour: f32) = [0, SLOT_SET_ARMOUR];
445
446 /// `float INPC::getArmour()`.
447 ///
448 /// # Safety
449 /// `npc` must be a live `INPC`.
450 #[must_use]
451 pub fn npc_armour(npc: INPC) -> f32 = [0, SLOT_GET_ARMOUR] or 0.0;
452
453 /// `bool INPC::isDead()`.
454 ///
455 /// # Safety
456 /// `npc` must be a live `INPC`.
457 #[must_use]
458 pub fn npc_is_dead(npc: INPC) -> bool = [0, SLOT_IS_DEAD] or false;
459
460 /// `void INPC::setWeapon(uint8_t)`.
461 ///
462 /// # Safety
463 /// `npc` must be a live `INPC`.
464 pub fn npc_set_weapon(npc: INPC, weapon: u8) = [0, SLOT_SET_WEAPON];
465
466 /// `uint8_t INPC::getWeapon()`.
467 ///
468 /// # Safety
469 /// `npc` must be a live `INPC`.
470 #[must_use]
471 pub fn npc_weapon(npc: INPC) -> u8 = [0, SLOT_GET_WEAPON] or 0;
472
473 /// `void INPC::setAmmo(int)`.
474 ///
475 /// # Safety
476 /// `npc` must be a live `INPC`.
477 pub fn npc_set_ammo(npc: INPC, ammo: i32) = [0, SLOT_SET_AMMO];
478
479 /// `int INPC::getAmmo()`.
480 ///
481 /// # Safety
482 /// `npc` must be a live `INPC`.
483 #[must_use]
484 pub fn npc_ammo(npc: INPC) -> i32 = [0, SLOT_GET_AMMO] or 0;
485
486 /// `void INPC::setWeaponSkillLevel(PlayerWeaponSkill, int)`.
487 ///
488 /// # Safety
489 /// `npc` must be a live `INPC`.
490 pub fn npc_set_weapon_skill_level(
491 npc: INPC,
492 weapon_skill: i32,
493 level: i32,
494 ) = [0, SLOT_SET_WEAPON_SKILL_LEVEL];
495
496 /// `int INPC::getWeaponSkillLevel(PlayerWeaponSkill)`.
497 ///
498 /// # Safety
499 /// `npc` must be a live `INPC`.
500 #[must_use]
501 pub fn npc_weapon_skill_level(
502 npc: INPC,
503 weapon_skill: i32,
504 ) -> i32 = [0, SLOT_GET_WEAPON_SKILL_LEVEL] or 0;
505
506 /// `void INPC::setKeys(uint16_t, uint16_t, uint16_t)`.
507 ///
508 /// # Safety
509 /// `npc` must be a live `INPC`.
510 pub fn npc_set_keys(
511 npc: INPC,
512 up_and_down: u16,
513 left_and_right: u16,
514 keys: u16,
515 ) = [0, SLOT_SET_KEYS];
516
517 /// `void INPC::getKeys(uint16_t &, uint16_t &, uint16_t &)`.
518 ///
519 /// # Safety
520 /// `npc` must be a live `INPC`.
521 pub fn npc_keys(
522 npc: INPC,
523 up_and_down: &mut u16,
524 left_and_right: &mut u16,
525 keys: &mut u16,
526 ) = [0, SLOT_GET_KEYS];
527
528 /// `void INPC::meleeAttack(int, bool)`.
529 ///
530 /// # Safety
531 /// `npc` must be a live `INPC`.
532 pub fn npc_melee_attack(
533 npc: INPC,
534 time: i32,
535 secondary_melee_attack: bool,
536 ) = [0, SLOT_MELEE_ATTACK];
537
538 /// `void INPC::stopMeleeAttack()`.
539 ///
540 /// # Safety
541 /// `npc` must be a live `INPC`.
542 pub fn npc_stop_melee_attack(npc: INPC) = [0, SLOT_STOP_MELEE_ATTACK];
543
544 /// `bool INPC::isMeleeAttacking()`.
545 ///
546 /// # Safety
547 /// `npc` must be a live `INPC`.
548 #[must_use]
549 pub fn npc_is_melee_attacking(npc: INPC) -> bool = [0, SLOT_IS_MELEE_ATTACKING] or false;
550
551 /// `void INPC::setFightingStyle(PlayerFightingStyle)`.
552 ///
553 /// # Safety
554 /// `npc` must be a live `INPC`.
555 pub fn npc_set_fighting_style(npc: INPC, style: i32) = [0, SLOT_SET_FIGHTING_STYLE];
556
557 /// `PlayerFightingStyle INPC::getFightingStyle()`.
558 ///
559 /// # Safety
560 /// `npc` must be a live `INPC`.
561 #[must_use]
562 pub fn npc_fighting_style(npc: INPC) -> i32 = [0, SLOT_GET_FIGHTING_STYLE] or 0;
563
564 /// `void INPC::enableReloading(bool)`.
565 ///
566 /// # Safety
567 /// `npc` must be a live `INPC`.
568 pub fn npc_enable_reloading(npc: INPC, toggle: bool) = [0, SLOT_ENABLE_RELOADING];
569
570 /// `bool INPC::isReloadEnabled()`.
571 ///
572 /// # Safety
573 /// `npc` must be a live `INPC`.
574 #[must_use]
575 pub fn npc_is_reload_enabled(npc: INPC) -> bool = [0, SLOT_IS_RELOAD_ENABLED] or false;
576
577 /// `bool INPC::isReloading()`.
578 ///
579 /// # Safety
580 /// `npc` must be a live `INPC`.
581 #[must_use]
582 pub fn npc_is_reloading(npc: INPC) -> bool = [0, SLOT_IS_RELOADING] or false;
583
584 /// `void INPC::enableInfiniteAmmo(bool)`.
585 ///
586 /// # Safety
587 /// `npc` must be a live `INPC`.
588 pub fn npc_enable_infinite_ammo(npc: INPC, enable: bool) = [0, SLOT_ENABLE_INFINITE_AMMO];
589
590 /// `bool INPC::isInfiniteAmmoEnabled()`.
591 ///
592 /// # Safety
593 /// `npc` must be a live `INPC`.
594 #[must_use]
595 pub fn npc_is_infinite_ammo_enabled(
596 npc: INPC,
597 ) -> bool = [0, SLOT_IS_INFINITE_AMMO_ENABLED] or false;
598
599 /// `PlayerWeaponState INPC::getWeaponState()`.
600 ///
601 /// # Safety
602 /// `npc` must be a live `INPC`.
603 #[must_use]
604 pub fn npc_weapon_state(npc: INPC) -> i8 = [0, SLOT_GET_WEAPON_STATE] or 0;
605
606 /// `void INPC::setAmmoInClip(int)`.
607 ///
608 /// # Safety
609 /// `npc` must be a live `INPC`.
610 pub fn npc_set_ammo_in_clip(npc: INPC, ammo: i32) = [0, SLOT_SET_AMMO_IN_CLIP];
611
612 /// `int INPC::getAmmoInClip()`.
613 ///
614 /// # Safety
615 /// `npc` must be a live `INPC`.
616 #[must_use]
617 pub fn npc_ammo_in_clip(npc: INPC) -> i32 = [0, SLOT_GET_AMMO_IN_CLIP] or 0;
618
619 /// `void INPC::shoot(int, PlayerBulletHitType, uint8_t, const Vector3 &, const Vector3 &, bool, EntityCheckType)`.
620 ///
621 /// # Safety
622 /// `npc` must be a live `INPC`.
623 pub fn npc_shoot(
624 npc: INPC,
625 hit_id: i32,
626 hit_type: u8,
627 weapon: u8,
628 end_point: &Vector3,
629 offset: &Vector3,
630 is_hit: bool,
631 between_check_flags: u8,
632 ) = [0, SLOT_SHOOT];
633
634 /// `bool INPC::isShooting()`.
635 ///
636 /// # Safety
637 /// `npc` must be a live `INPC`.
638 #[must_use]
639 pub fn npc_is_shooting(npc: INPC) -> bool = [0, SLOT_IS_SHOOTING] or false;
640
641 /// `void INPC::aimAt(const Vector3 &, bool, int, bool, const Vector3 &, EntityCheckType)`.
642 ///
643 /// # Safety
644 /// `npc` must be a live `INPC`.
645 pub fn npc_aim_at(
646 npc: INPC,
647 point: &Vector3,
648 shoot: bool,
649 shoot_delay: i32,
650 set_angle: bool,
651 offset_from: &Vector3,
652 between_check_flags: u8,
653 ) = [0, SLOT_AIM_AT];
654
655 /// `void INPC::aimAtPlayer(IPlayer &, bool, int, bool, const Vector3 &, const Vector3 &, EntityCheckType)`.
656 ///
657 /// # Safety
658 /// `npc` must be a live `INPC`.
659 pub fn npc_aim_at_player(
660 npc: INPC,
661 at_player: *mut IPlayer,
662 shoot: bool,
663 shoot_delay: i32,
664 set_angle: bool,
665 offset: &Vector3,
666 offset_from: &Vector3,
667 between_check_flags: u8,
668 ) = [0, SLOT_AIM_AT_PLAYER];
669
670 /// `void INPC::stopAim()`.
671 ///
672 /// # Safety
673 /// `npc` must be a live `INPC`.
674 pub fn npc_stop_aim(npc: INPC) = [0, SLOT_STOP_AIM];
675
676 /// `bool INPC::isAiming()`.
677 ///
678 /// # Safety
679 /// `npc` must be a live `INPC`.
680 #[must_use]
681 pub fn npc_is_aiming(npc: INPC) -> bool = [0, SLOT_IS_AIMING] or false;
682
683 /// `bool INPC::isAimingAtPlayer(IPlayer &)`.
684 ///
685 /// # Safety
686 /// `npc` must be a live `INPC`.
687 #[must_use]
688 pub fn npc_is_aiming_at_player(
689 npc: INPC,
690 player: *mut IPlayer,
691 ) -> bool = [0, SLOT_IS_AIMING_AT_PLAYER] or false;
692
693 /// `void INPC::setWeaponAccuracy(uint8_t, float)`.
694 ///
695 /// # Safety
696 /// `npc` must be a live `INPC`.
697 pub fn npc_set_weapon_accuracy(
698 npc: INPC,
699 weapon: u8,
700 accuracy: f32,
701 ) = [0, SLOT_SET_WEAPON_ACCURACY];
702
703 /// `float INPC::getWeaponAccuracy(uint8_t)`.
704 ///
705 /// # Safety
706 /// `npc` must be a live `INPC`.
707 #[must_use]
708 pub fn npc_weapon_accuracy(npc: INPC, weapon: u8) -> f32 = [0, SLOT_GET_WEAPON_ACCURACY] or 0.0;
709
710 /// `void INPC::setWeaponReloadTime(uint8_t, int)`.
711 ///
712 /// # Safety
713 /// `npc` must be a live `INPC`.
714 pub fn npc_set_weapon_reload_time(
715 npc: INPC,
716 weapon: u8,
717 time: i32,
718 ) = [0, SLOT_SET_WEAPON_RELOAD_TIME];
719
720 /// `int INPC::getWeaponReloadTime(uint8_t)`.
721 ///
722 /// # Safety
723 /// `npc` must be a live `INPC`.
724 #[must_use]
725 pub fn npc_weapon_reload_time(
726 npc: INPC,
727 weapon: u8,
728 ) -> i32 = [0, SLOT_GET_WEAPON_RELOAD_TIME] or 0;
729
730 /// `int INPC::getWeaponActualReloadTime(uint8_t)`.
731 ///
732 /// # Safety
733 /// `npc` must be a live `INPC`.
734 #[must_use]
735 pub fn npc_weapon_actual_reload_time(
736 npc: INPC,
737 weapon: u8,
738 ) -> i32 = [0, SLOT_GET_WEAPON_ACTUAL_RELOAD_TIME] or 0;
739
740 /// `void INPC::setWeaponShootTime(uint8_t, int)`.
741 ///
742 /// # Safety
743 /// `npc` must be a live `INPC`.
744 pub fn npc_set_weapon_shoot_time(
745 npc: INPC,
746 weapon: u8,
747 time: i32,
748 ) = [0, SLOT_SET_WEAPON_SHOOT_TIME];
749
750 /// `int INPC::getWeaponShootTime(uint8_t)`.
751 ///
752 /// # Safety
753 /// `npc` must be a live `INPC`.
754 #[must_use]
755 pub fn npc_weapon_shoot_time(
756 npc: INPC,
757 weapon: u8,
758 ) -> i32 = [0, SLOT_GET_WEAPON_SHOOT_TIME] or 0;
759
760 /// `void INPC::setWeaponClipSize(uint8_t, int)`.
761 ///
762 /// # Safety
763 /// `npc` must be a live `INPC`.
764 pub fn npc_set_weapon_clip_size(
765 npc: INPC,
766 weapon: u8,
767 size: i32,
768 ) = [0, SLOT_SET_WEAPON_CLIP_SIZE];
769
770 /// `int INPC::getWeaponClipSize(uint8_t)`.
771 ///
772 /// # Safety
773 /// `npc` must be a live `INPC`.
774 #[must_use]
775 pub fn npc_weapon_clip_size(npc: INPC, weapon: u8) -> i32 = [0, SLOT_GET_WEAPON_CLIP_SIZE] or 0;
776
777 /// `int INPC::getWeaponActualClipSize(uint8_t)`.
778 ///
779 /// # Safety
780 /// `npc` must be a live `INPC`.
781 #[must_use]
782 pub fn npc_weapon_actual_clip_size(
783 npc: INPC,
784 weapon: u8,
785 ) -> i32 = [0, SLOT_GET_WEAPON_ACTUAL_CLIP_SIZE] or 0;
786
787 /// `void INPC::enterVehicle(IVehicle &, uint8_t, NPCMoveType)`.
788 ///
789 /// # Safety
790 /// `npc` must be a live `INPC`.
791 pub fn npc_enter_vehicle(
792 npc: INPC,
793 vehicle: *mut IVehicle,
794 seat_id: u8,
795 move_type: i32,
796 ) = [0, SLOT_ENTER_VEHICLE];
797
798 /// `void INPC::exitVehicle()`.
799 ///
800 /// # Safety
801 /// `npc` must be a live `INPC`.
802 pub fn npc_exit_vehicle(npc: INPC) = [0, SLOT_EXIT_VEHICLE];
803
804 /// `bool INPC::putInVehicle(IVehicle &, uint8_t)`.
805 ///
806 /// # Safety
807 /// `npc` must be a live `INPC`.
808 #[must_use]
809 pub fn npc_put_in_vehicle(
810 npc: INPC,
811 vehicle: *mut IVehicle,
812 seat: u8,
813 ) -> bool = [0, SLOT_PUT_IN_VEHICLE] or false;
814
815 /// `bool INPC::removeFromVehicle()`.
816 ///
817 /// # Safety
818 /// `npc` must be a live `INPC`.
819 #[must_use]
820 pub fn npc_remove_from_vehicle(npc: INPC) -> bool = [0, SLOT_REMOVE_FROM_VEHICLE] or false;
821
822 /// `bool INPC::moveByPath(int, NPCMoveType, float, bool)`.
823 ///
824 /// # Safety
825 /// `npc` must be a live `INPC`.
826 #[must_use]
827 pub fn npc_move_by_path(
828 npc: INPC,
829 path_id: i32,
830 move_type: i32,
831 move_speed: f32,
832 reverse: bool,
833 ) -> bool = [0, SLOT_MOVE_BY_PATH] or false;
834
835 /// `void INPC::pausePath()`.
836 ///
837 /// # Safety
838 /// `npc` must be a live `INPC`.
839 pub fn npc_pause_path(npc: INPC) = [0, SLOT_PAUSE_PATH];
840
841 /// `void INPC::resumePath()`.
842 ///
843 /// # Safety
844 /// `npc` must be a live `INPC`.
845 pub fn npc_resume_path(npc: INPC) = [0, SLOT_RESUME_PATH];
846
847 /// `void INPC::stopPath()`.
848 ///
849 /// # Safety
850 /// `npc` must be a live `INPC`.
851 pub fn npc_stop_path(npc: INPC) = [0, SLOT_STOP_PATH];
852
853 /// `bool INPC::isMovingByPath()`.
854 ///
855 /// # Safety
856 /// `npc` must be a live `INPC`.
857 #[must_use]
858 pub fn npc_is_moving_by_path(npc: INPC) -> bool = [0, SLOT_IS_MOVING_BY_PATH] or false;
859
860 /// `bool INPC::isPathPaused()`.
861 ///
862 /// # Safety
863 /// `npc` must be a live `INPC`.
864 #[must_use]
865 pub fn npc_is_path_paused(npc: INPC) -> bool = [0, SLOT_IS_PATH_PAUSED] or false;
866
867 /// `int INPC::getCurrentPathId()`.
868 ///
869 /// # Safety
870 /// `npc` must be a live `INPC`.
871 #[must_use]
872 pub fn npc_current_path_id(npc: INPC) -> i32 = [0, SLOT_GET_CURRENT_PATH_ID] or 0;
873
874 /// `int INPC::getCurrentPathPointIndex()`.
875 ///
876 /// # Safety
877 /// `npc` must be a live `INPC`.
878 #[must_use]
879 pub fn npc_current_path_point_index(
880 npc: INPC,
881 ) -> i32 = [0, SLOT_GET_CURRENT_PATH_POINT_INDEX] or 0;
882
883 /// `IVehicle * INPC::getVehicle()`.
884 ///
885 /// # Safety
886 /// `npc` must be a live `INPC`.
887 #[must_use]
888 pub fn npc_vehicle(npc: INPC) -> *mut IVehicle = [0, SLOT_GET_VEHICLE] or std::ptr::null_mut();
889
890 /// `int INPC::getVehicleSeat()`.
891 ///
892 /// # Safety
893 /// `npc` must be a live `INPC`.
894 #[must_use]
895 pub fn npc_vehicle_seat(npc: INPC) -> i32 = [0, SLOT_GET_VEHICLE_SEAT] or 0;
896
897 /// `IVehicle * INPC::getEnteringVehicle()`.
898 ///
899 /// # Safety
900 /// `npc` must be a live `INPC`.
901 #[must_use]
902 pub fn npc_entering_vehicle(
903 npc: INPC,
904 ) -> *mut IVehicle = [0, SLOT_GET_ENTERING_VEHICLE] or std::ptr::null_mut();
905
906 /// `int INPC::getEnteringVehicleSeat()`.
907 ///
908 /// # Safety
909 /// `npc` must be a live `INPC`.
910 #[must_use]
911 pub fn npc_entering_vehicle_seat(npc: INPC) -> i32 = [0, SLOT_GET_ENTERING_VEHICLE_SEAT] or 0;
912
913 /// `void INPC::useVehicleSiren(bool)`.
914 ///
915 /// # Safety
916 /// `npc` must be a live `INPC`.
917 pub fn npc_use_vehicle_siren(npc: INPC, use_value: bool) = [0, SLOT_USE_VEHICLE_SIREN];
918
919 /// `bool INPC::isVehicleSirenUsed()`.
920 ///
921 /// # Safety
922 /// `npc` must be a live `INPC`.
923 #[must_use]
924 pub fn npc_is_vehicle_siren_used(npc: INPC) -> bool = [0, SLOT_IS_VEHICLE_SIREN_USED] or false;
925
926 /// `void INPC::setVehicleHealth(float)`.
927 ///
928 /// # Safety
929 /// `npc` must be a live `INPC`.
930 pub fn npc_set_vehicle_health(npc: INPC, health: f32) = [0, SLOT_SET_VEHICLE_HEALTH];
931
932 /// `float INPC::getVehicleHealth()`.
933 ///
934 /// # Safety
935 /// `npc` must be a live `INPC`.
936 #[must_use]
937 pub fn npc_vehicle_health(npc: INPC) -> f32 = [0, SLOT_GET_VEHICLE_HEALTH] or 0.0;
938
939 /// `void INPC::setVehicleHydraThrusters(int)`.
940 ///
941 /// # Safety
942 /// `npc` must be a live `INPC`.
943 pub fn npc_set_vehicle_hydra_thrusters(
944 npc: INPC,
945 direction: i32,
946 ) = [0, SLOT_SET_VEHICLE_HYDRA_THRUSTERS];
947
948 /// `int INPC::getVehicleHydraThrusters()`.
949 ///
950 /// # Safety
951 /// `npc` must be a live `INPC`.
952 #[must_use]
953 pub fn npc_vehicle_hydra_thrusters(
954 npc: INPC,
955 ) -> i32 = [0, SLOT_GET_VEHICLE_HYDRA_THRUSTERS] or 0;
956
957 /// `void INPC::setVehicleGearState(int)`.
958 ///
959 /// # Safety
960 /// `npc` must be a live `INPC`.
961 pub fn npc_set_vehicle_gear_state(npc: INPC, gear: i32) = [0, SLOT_SET_VEHICLE_GEAR_STATE];
962
963 /// `int INPC::getVehicleGearState()`.
964 ///
965 /// # Safety
966 /// `npc` must be a live `INPC`.
967 #[must_use]
968 pub fn npc_vehicle_gear_state(npc: INPC) -> i32 = [0, SLOT_GET_VEHICLE_GEAR_STATE] or 0;
969
970 /// `void INPC::setVehicleTrainSpeed(float)`.
971 ///
972 /// # Safety
973 /// `npc` must be a live `INPC`.
974 pub fn npc_set_vehicle_train_speed(npc: INPC, speed: f32) = [0, SLOT_SET_VEHICLE_TRAIN_SPEED];
975
976 /// `float INPC::getVehicleTrainSpeed()`.
977 ///
978 /// # Safety
979 /// `npc` must be a live `INPC`.
980 #[must_use]
981 pub fn npc_vehicle_train_speed(npc: INPC) -> f32 = [0, SLOT_GET_VEHICLE_TRAIN_SPEED] or 0.0;
982
983 /// `void INPC::resetAnimation()`.
984 ///
985 /// # Safety
986 /// `npc` must be a live `INPC`.
987 pub fn npc_reset_animation(npc: INPC) = [0, SLOT_RESET_ANIMATION];
988
989 /// `void INPC::setAnimation(int, float, bool, bool, bool, bool, int)`.
990 ///
991 /// # Safety
992 /// `npc` must be a live `INPC`.
993 pub fn npc_set_animation(
994 npc: INPC,
995 animation_id: i32,
996 delta: f32,
997 loop_value: bool,
998 lock_x: bool,
999 lock_y: bool,
1000 freeze: bool,
1001 time: i32,
1002 ) = [0, SLOT_SET_ANIMATION];
1003
1004 /// `void INPC::getAnimation(int &, float &, bool &, bool &, bool &, bool &, int &)`.
1005 ///
1006 /// # Safety
1007 /// `npc` must be a live `INPC`.
1008 pub fn npc_animation(
1009 npc: INPC,
1010 animation_id: &mut i32,
1011 delta: &mut f32,
1012 loop_value: &mut bool,
1013 lock_x: &mut bool,
1014 lock_y: &mut bool,
1015 freeze: &mut bool,
1016 time: &mut i32,
1017 ) = [0, SLOT_GET_ANIMATION];
1018
1019 /// `void INPC::applyAnimation(const AnimationData &)`.
1020 ///
1021 /// # Safety
1022 /// `npc` must be a live `INPC`.
1023 pub fn npc_apply_animation(
1024 npc: INPC,
1025 animation_data: &AnimationData,
1026 ) = [0, SLOT_APPLY_ANIMATION];
1027
1028 /// `void INPC::clearAnimations()`.
1029 ///
1030 /// # Safety
1031 /// `npc` must be a live `INPC`.
1032 pub fn npc_clear_animations(npc: INPC) = [0, SLOT_CLEAR_ANIMATIONS];
1033
1034 /// `void INPC::setSpecialAction(PlayerSpecialAction)`.
1035 ///
1036 /// # Safety
1037 /// `npc` must be a live `INPC`.
1038 pub fn npc_set_special_action(npc: INPC, action: i32) = [0, SLOT_SET_SPECIAL_ACTION];
1039
1040 /// `PlayerSpecialAction INPC::getSpecialAction()`.
1041 ///
1042 /// # Safety
1043 /// `npc` must be a live `INPC`.
1044 #[must_use]
1045 pub fn npc_special_action(npc: INPC) -> i32 = [0, SLOT_GET_SPECIAL_ACTION] or 0;
1046
1047 /// `bool INPC::startPlayback(StringView, bool, const Vector3 &, const GTAQuat &)`.
1048 ///
1049 /// # Safety
1050 /// `npc` must be a live `INPC`.
1051 #[must_use]
1052 pub fn npc_start_playback(
1053 npc: INPC,
1054 record_name: StringView,
1055 auto_unload: bool,
1056 point: &Vector3,
1057 rotation: >AQuat,
1058 ) -> bool = [0, SLOT_START_PLAYBACK] or false;
1059
1060 /// `bool INPC::startPlayback(int, bool, const Vector3 &, const GTAQuat &)`.
1061 ///
1062 /// # Safety
1063 /// `npc` must be a live `INPC`.
1064 #[must_use]
1065 pub fn npc_start_playback_id(
1066 npc: INPC,
1067 record_id: i32,
1068 auto_unload: bool,
1069 point: &Vector3,
1070 rotation: >AQuat,
1071 ) -> bool = [0, SLOT_START_PLAYBACK_ID] or false;
1072
1073 /// `void INPC::stopPlayback()`.
1074 ///
1075 /// # Safety
1076 /// `npc` must be a live `INPC`.
1077 pub fn npc_stop_playback(npc: INPC) = [0, SLOT_STOP_PLAYBACK];
1078
1079 /// `void INPC::pausePlayback(bool)`.
1080 ///
1081 /// # Safety
1082 /// `npc` must be a live `INPC`.
1083 pub fn npc_pause_playback(npc: INPC, paused: bool) = [0, SLOT_PAUSE_PLAYBACK];
1084
1085 /// `bool INPC::isPlayingPlayback()`.
1086 ///
1087 /// # Safety
1088 /// `npc` must be a live `INPC`.
1089 #[must_use]
1090 pub fn npc_is_playing_playback(npc: INPC) -> bool = [0, SLOT_IS_PLAYING_PLAYBACK] or false;
1091
1092 /// `bool INPC::isPlaybackPaused()`.
1093 ///
1094 /// # Safety
1095 /// `npc` must be a live `INPC`.
1096 #[must_use]
1097 pub fn npc_is_playback_paused(npc: INPC) -> bool = [0, SLOT_IS_PLAYBACK_PAUSED] or false;
1098
1099 /// `bool INPC::playNode(int, NPCMoveType, float, float, bool)`.
1100 ///
1101 /// # Safety
1102 /// `npc` must be a live `INPC`.
1103 #[must_use]
1104 pub fn npc_play_node(
1105 npc: INPC,
1106 node_id: i32,
1107 move_type: i32,
1108 move_speed: f32,
1109 radius: f32,
1110 set_angle: bool,
1111 ) -> bool = [0, SLOT_PLAY_NODE] or false;
1112
1113 /// `void INPC::stopPlayingNode()`.
1114 ///
1115 /// # Safety
1116 /// `npc` must be a live `INPC`.
1117 pub fn npc_stop_playing_node(npc: INPC) = [0, SLOT_STOP_PLAYING_NODE];
1118
1119 /// `void INPC::pausePlayingNode()`.
1120 ///
1121 /// # Safety
1122 /// `npc` must be a live `INPC`.
1123 pub fn npc_pause_playing_node(npc: INPC) = [0, SLOT_PAUSE_PLAYING_NODE];
1124
1125 /// `void INPC::resumePlayingNode()`.
1126 ///
1127 /// # Safety
1128 /// `npc` must be a live `INPC`.
1129 pub fn npc_resume_playing_node(npc: INPC) = [0, SLOT_RESUME_PLAYING_NODE];
1130
1131 /// `bool INPC::isPlayingNodePaused()`.
1132 ///
1133 /// # Safety
1134 /// `npc` must be a live `INPC`.
1135 #[must_use]
1136 pub fn npc_is_playing_node_paused(
1137 npc: INPC,
1138 ) -> bool = [0, SLOT_IS_PLAYING_NODE_PAUSED] or false;
1139
1140 /// `bool INPC::isPlayingNode()`.
1141 ///
1142 /// # Safety
1143 /// `npc` must be a live `INPC`.
1144 #[must_use]
1145 pub fn npc_is_playing_node(npc: INPC) -> bool = [0, SLOT_IS_PLAYING_NODE] or false;
1146
1147 /// `uint16_t INPC::changeNode(int, uint16_t)`.
1148 ///
1149 /// # Safety
1150 /// `npc` must be a live `INPC`.
1151 #[must_use]
1152 pub fn npc_change_node(
1153 npc: INPC,
1154 node_id: i32,
1155 target_point_id: u16,
1156 ) -> u16 = [0, SLOT_CHANGE_NODE] or 0;
1157
1158 /// `bool INPC::updateNodePoint(uint16_t)`.
1159 ///
1160 /// # Safety
1161 /// `npc` must be a live `INPC`.
1162 #[must_use]
1163 pub fn npc_update_node_point(
1164 npc: INPC,
1165 point_id: u16,
1166 ) -> bool = [0, SLOT_UPDATE_NODE_POINT] or false;
1167
1168 /// `void INPC::setInvulnerable(bool)`.
1169 ///
1170 /// # Safety
1171 /// `npc` must be a live `INPC`.
1172 pub fn npc_set_invulnerable(npc: INPC, toggle: bool) = [0, SLOT_SET_INVULNERABLE];
1173
1174 /// `bool INPC::isInvulnerable()`.
1175 ///
1176 /// # Safety
1177 /// `npc` must be a live `INPC`.
1178 #[must_use]
1179 pub fn npc_is_invulnerable(npc: INPC) -> bool = [0, SLOT_IS_INVULNERABLE] or false;
1180
1181 /// `void INPC::setSurfingData(const PlayerSurfingData &)`.
1182 ///
1183 /// # Safety
1184 /// `npc` must be a live `INPC`.
1185 pub fn npc_set_surfing_data(npc: INPC, data: &PlayerSurfingData) = [0, SLOT_SET_SURFING_DATA];
1186
1187 /// `PlayerSurfingData INPC::getSurfingData()`.
1188 ///
1189 /// # Safety
1190 /// `npc` must be a live `INPC`.
1191 #[must_use]
1192 pub fn npc_surfing_data(
1193 npc: INPC,
1194 ) -> PlayerSurfingData = [0, SLOT_GET_SURFING_DATA] or PlayerSurfingData::default();
1195
1196 /// `void INPC::resetSurfingData()`.
1197 ///
1198 /// # Safety
1199 /// `npc` must be a live `INPC`.
1200 pub fn npc_reset_surfing_data(npc: INPC) = [0, SLOT_RESET_SURFING_DATA];
1201
1202 /// `bool INPC::isMovingToPlayer(IPlayer &)`.
1203 ///
1204 /// # Safety
1205 /// `npc` must be a live `INPC`.
1206 #[must_use]
1207 pub fn npc_is_moving_to_player(
1208 npc: INPC,
1209 player: *mut IPlayer,
1210 ) -> bool = [0, SLOT_IS_MOVING_TO_PLAYER] or false;
1211
1212 /// `void INPC::kill(IPlayer *, uint8_t)`.
1213 ///
1214 /// # Safety
1215 /// `npc` must be a live `INPC`.
1216 pub fn npc_kill(npc: INPC, killer: *mut IPlayer, weapon: u8) = [0, SLOT_KILL];
1217
1218 /// `IPlayer * INPC::getPlayerAimingAt()`.
1219 ///
1220 /// # Safety
1221 /// `npc` must be a live `INPC`.
1222 #[must_use]
1223 pub fn npc_player_aiming_at(
1224 npc: INPC,
1225 ) -> *mut IPlayer = [0, SLOT_GET_PLAYER_AIMING_AT] or std::ptr::null_mut();
1226
1227 /// `IPlayer * INPC::getPlayerMovingTo()`.
1228 ///
1229 /// # Safety
1230 /// `npc` must be a live `INPC`.
1231 #[must_use]
1232 pub fn npc_player_moving_to(
1233 npc: INPC,
1234 ) -> *mut IPlayer = [0, SLOT_GET_PLAYER_MOVING_TO] or std::ptr::null_mut();
1235
1236 /// `void INPC::setWeaponState(PlayerWeaponState)`.
1237 ///
1238 /// # Safety
1239 /// `npc` must be a live `INPC`.
1240 pub fn npc_set_weapon_state(npc: INPC, state: i8) = [0, SLOT_SET_WEAPON_STATE];
1241
1242 /// `Vector3 INPC::getPositionMovingTo()`.
1243 ///
1244 /// # Safety
1245 /// `npc` must be a live `INPC`.
1246 #[must_use]
1247 pub fn npc_position_moving_to(
1248 npc: INPC,
1249 ) -> Vector3 = [0, SLOT_GET_POSITION_MOVING_TO] or Vector3::ZERO;
1250}