#![allow(unused_imports)]
use crate::omp::containers::{FlatSet, HybridString, Pair, Span};
use crate::omp::types::{
Colour, GTAQuat, Hours, Microseconds, Milliseconds, Minutes, Seconds, StringView, TimePoint,
UID, Vector2, Vector3, Vector4, WorldTimePoint,
};
use crate::omp::vtable::{call_vtable_small_struct, opaque, slots, virtual_fns};
use crate::omp::*;
slots! {
SLOT_BAN: usize = 7, 6;
SLOT_GET_NETWORK_DATA: usize = 9, 8;
SLOT_BROADCAST_RPC_TO_STREAMED: usize = 10, 9;
SLOT_BROADCAST_PACKET_TO_STREAMED: usize = 11, 10;
SLOT_BROADCAST_SYNC_PACKET: usize = 12, 11;
SLOT_SPAWN: usize = 13, 12;
SLOT_GET_CLIENT_VERSION: usize = 14, 13;
SLOT_GET_CLIENT_VERSION_NAME: usize = 15, 14;
SLOT_SET_POSITION_FIND_Z: usize = 16, 15;
SLOT_SET_CAMERA_POSITION: usize = 17, 16;
SLOT_GET_CAMERA_POSITION: usize = 18, 17;
SLOT_SET_CAMERA_LOOK_AT: usize = 19, 18;
SLOT_GET_CAMERA_LOOK_AT: usize = 20, 19;
SLOT_SET_CAMERA_BEHIND: usize = 21, 20;
SLOT_INTERPOLATE_CAMERA_POSITION: usize = 22, 21;
SLOT_INTERPOLATE_CAMERA_LOOK_AT: usize = 23, 22;
SLOT_ATTACH_CAMERA_TO_OBJECT: usize = 24, 24;
SLOT_ATTACH_CAMERA_TO_PLAYER_OBJECT: usize = 25, 23;
SLOT_SET_NAME: usize = 26, 25;
SLOT_GET_SERIAL: usize = 28, 27;
SLOT_GIVE_WEAPON: usize = 29, 28;
SLOT_REMOVE_WEAPON: usize = 30, 29;
SLOT_SET_WEAPON_AMMO: usize = 31, 30;
SLOT_GET_WEAPONS: usize = 32, 31;
SLOT_GET_WEAPON_SLOT: usize = 33, 32;
SLOT_RESET_WEAPONS: usize = 34, 33;
SLOT_SET_ARMED_WEAPON: usize = 35, 34;
SLOT_GET_ARMED_WEAPON: usize = 36, 35;
SLOT_GET_ARMED_WEAPON_AMMO: usize = 37, 36;
SLOT_SET_SHOP_NAME: usize = 38, 37;
SLOT_GET_SHOP_NAME: usize = 39, 38;
SLOT_GET_DRUNK_LEVEL: usize = 41, 40;
SLOT_SET_COLOUR: usize = 42, 41;
SLOT_GET_COLOUR: usize = 43, 42;
SLOT_SET_OTHER_COLOUR: usize = 44, 43;
SLOT_GET_OTHER_COLOUR: usize = 45, 44;
SLOT_GET_CONTROLLABLE: usize = 47, 46;
SLOT_SET_SPECTATING: usize = 48, 47;
SLOT_PLAY_SOUND: usize = 51, 50;
SLOT_LAST_PLAYED_SOUND: usize = 52, 51;
SLOT_PLAY_AUDIO: usize = 53, 52;
SLOT_PLAYER_CRIME_REPORT: usize = 54, 53;
SLOT_STOP_AUDIO: usize = 55, 54;
SLOT_LAST_PLAYED_AUDIO: usize = 56, 55;
SLOT_CREATE_EXPLOSION: usize = 57, 56;
SLOT_SEND_DEATH_MESSAGE: usize = 58, 57;
SLOT_SEND_EMPTY_DEATH_MESSAGE: usize = 59, 58;
SLOT_REMOVE_DEFAULT_OBJECTS: usize = 60, 59;
SLOT_FORCE_CLASS_SELECTION: usize = 61, 60;
SLOT_RESET_MONEY: usize = 64, 63;
SLOT_SET_MAP_ICON: usize = 66, 65;
SLOT_UNSET_MAP_ICON: usize = 67, 66;
SLOT_USE_STUNT_BONUSES: usize = 68, 67;
SLOT_TOGGLE_OTHER_NAME_TAG: usize = 69, 68;
SLOT_SET_TIME: usize = 70, 69;
SLOT_GET_TIME: usize = 71, 70;
SLOT_USE_CLOCK: usize = 72, 71;
SLOT_HAS_CLOCK: usize = 73, 72;
SLOT_USE_WIDESCREEN: usize = 74, 73;
SLOT_HAS_WIDESCREEN: usize = 75, 74;
SLOT_SET_TRANSFORM: usize = 76, 75;
SLOT_SET_GRAVITY: usize = 83, 82;
SLOT_GET_GRAVITY: usize = 84, 83;
SLOT_SET_WORLD_TIME: usize = 85, 84;
SLOT_APPLY_ANIMATION: usize = 86, 85;
SLOT_CLEAR_ANIMATIONS: usize = 87, 86;
SLOT_GET_ANIMATION_DATA: usize = 88, 87;
SLOT_GET_SURFING_DATA: usize = 89, 88;
SLOT_STREAM_IN_FOR_PLAYER: usize = 90, 89;
SLOT_IS_STREAMED_IN_FOR_PLAYER: usize = 91, 90;
SLOT_STREAM_OUT_FOR_PLAYER: usize = 92, 91;
SLOT_STREAMED_FOR_PLAYERS: usize = 93, 92;
SLOT_GET_STATE: usize = 94, 93;
SLOT_SET_CHAT_BUBBLE: usize = 99, 98;
SLOT_SEND_CLIENT_MESSAGE: usize = 100, 99;
SLOT_SEND_CHAT_MESSAGE: usize = 101, 100;
SLOT_SEND_COMMAND: usize = 102, 101;
SLOT_SEND_GAME_TEXT: usize = 103, 102;
SLOT_HIDE_GAME_TEXT: usize = 104, 103;
SLOT_HAS_GAME_TEXT: usize = 105, 104;
SLOT_GET_GAME_TEXT: usize = 106, 105;
SLOT_GET_WEATHER: usize = 108, 107;
SLOT_SET_WORLD_BOUNDS: usize = 109, 108;
SLOT_GET_WORLD_BOUNDS: usize = 110, 109;
SLOT_SET_FIGHTING_STYLE: usize = 111, 110;
SLOT_GET_FIGHTING_STYLE: usize = 112, 111;
SLOT_SET_SKILL_LEVEL: usize = 113, 112;
SLOT_SET_ACTION: usize = 114, 113;
SLOT_GET_ACTION: usize = 115, 114;
SLOT_SET_VELOCITY: usize = 116, 115;
SLOT_GET_VELOCITY: usize = 117, 116;
SLOT_GET_KEY_DATA: usize = 120, 119;
SLOT_GET_SKILL_LEVELS: usize = 121, 120;
SLOT_GET_AIM_DATA: usize = 122, 121;
SLOT_GET_BULLET_DATA: usize = 123, 122;
SLOT_USE_CAMERA_TARGETING: usize = 124, 123;
SLOT_HAS_CAMERA_TARGETING: usize = 125, 124;
SLOT_REMOVE_FROM_VEHICLE: usize = 126, 125;
SLOT_GET_CAMERA_TARGET_PLAYER: usize = 127, 126;
SLOT_GET_CAMERA_TARGET_VEHICLE: usize = 128, 127;
SLOT_GET_CAMERA_TARGET_OBJECT: usize = 129, 128;
SLOT_GET_CAMERA_TARGET_ACTOR: usize = 130, 129;
SLOT_GET_TARGET_PLAYER: usize = 131, 130;
SLOT_GET_TARGET_ACTOR: usize = 132, 131;
SLOT_SET_REMOTE_VEHICLE_COLLISIONS: usize = 133, 132;
SLOT_SPECTATE_PLAYER: usize = 134, 133;
SLOT_SPECTATE_VEHICLE: usize = 135, 134;
SLOT_GET_SPECTATE_DATA: usize = 136, 135;
SLOT_SEND_CLIENT_CHECK: usize = 137, 136;
SLOT_TOGGLE_GHOST_MODE: usize = 138, 137;
SLOT_IS_GHOST_MODE_ENABLED: usize = 139, 138;
SLOT_GET_DEFAULT_OBJECTS_REMOVED: usize = 140, 139;
SLOT_GET_KICK_STATUS: usize = 141, 140;
SLOT_CLEAR_TASKS: usize = 142, 141;
SLOT_ALLOW_WEAPONS: usize = 143, 142;
SLOT_ARE_WEAPONS_ALLOWED: usize = 144, 143;
SLOT_ALLOW_TELEPORT: usize = 145, 144;
SLOT_IS_TELEPORT_ALLOWED: usize = 146, 145;
SLOT_IS_USING_OFFICIAL_CLIENT: usize = 147, 146;
SLOT_IS_USING_OMP: usize = 148, 147;
}
virtual_fns! {
pub fn player_ban(player: IPlayer, reason: StringView) = [0, SLOT_BAN];
#[must_use]
pub fn player_network_data(
player: IPlayer,
) -> *const PeerNetworkData = [0, SLOT_GET_NETWORK_DATA] or std::ptr::null();
pub fn player_broadcast_rpc_to_streamed(
player: IPlayer,
id: i32,
data: Span<u8>,
channel: i32,
skip_from: bool,
) = [0, SLOT_BROADCAST_RPC_TO_STREAMED];
pub fn player_broadcast_packet_to_streamed(
player: IPlayer,
data: Span<u8>,
channel: i32,
skip_from: bool,
) = [0, SLOT_BROADCAST_PACKET_TO_STREAMED];
pub fn player_broadcast_sync_packet(
player: IPlayer,
data: Span<u8>,
channel: i32,
) = [0, SLOT_BROADCAST_SYNC_PACKET];
pub fn player_spawn(player: IPlayer) = [0, SLOT_SPAWN];
#[must_use]
pub fn player_client_version(player: IPlayer) -> u8 = [0, SLOT_GET_CLIENT_VERSION] or 0;
pub fn player_set_position_find_z(
player: IPlayer,
pos: Vector3,
) = [0, SLOT_SET_POSITION_FIND_Z];
pub fn player_set_camera_position(
player: IPlayer,
pos: Vector3,
) = [0, SLOT_SET_CAMERA_POSITION];
#[must_use]
pub fn player_camera_position(
player: IPlayer,
) -> Vector3 = [0, SLOT_GET_CAMERA_POSITION] or Vector3::ZERO;
pub fn player_set_camera_look_at(
player: IPlayer,
pos: Vector3,
cut_type: i32,
) = [0, SLOT_SET_CAMERA_LOOK_AT];
#[must_use]
pub fn player_camera_look_at(
player: IPlayer,
) -> Vector3 = [0, SLOT_GET_CAMERA_LOOK_AT] or Vector3::ZERO;
pub fn player_set_camera_behind(player: IPlayer) = [0, SLOT_SET_CAMERA_BEHIND];
pub fn player_interpolate_camera_position(
player: IPlayer,
from: Vector3,
to: Vector3,
time: i32,
cut_type: i32,
) = [0, SLOT_INTERPOLATE_CAMERA_POSITION];
pub fn player_interpolate_camera_look_at(
player: IPlayer,
from: Vector3,
to: Vector3,
time: i32,
cut_type: i32,
) = [0, SLOT_INTERPOLATE_CAMERA_LOOK_AT];
pub fn player_attach_camera_to_object(
player: IPlayer,
object: *mut IObject,
) = [0, SLOT_ATTACH_CAMERA_TO_OBJECT];
pub fn player_attach_camera_to_player_object(
player: IPlayer,
object: *mut IPlayerObject,
) = [0, SLOT_ATTACH_CAMERA_TO_PLAYER_OBJECT];
#[must_use]
pub fn player_set_name(player: IPlayer, name: StringView) -> i32 = [0, SLOT_SET_NAME] or 0;
pub fn player_give_weapon(player: IPlayer, weapon: WeaponSlotData) = [0, SLOT_GIVE_WEAPON];
pub fn player_remove_weapon(player: IPlayer, weapon: u8) = [0, SLOT_REMOVE_WEAPON];
pub fn player_set_weapon_ammo(
player: IPlayer,
data: WeaponSlotData,
) = [0, SLOT_SET_WEAPON_AMMO];
#[must_use]
pub fn player_weapons(
player: IPlayer,
) -> *const [WeaponSlotData; 13] = [0, SLOT_GET_WEAPONS] or std::ptr::null();
pub fn player_reset_weapons(player: IPlayer) = [0, SLOT_RESET_WEAPONS];
pub fn player_set_armed_weapon(player: IPlayer, weapon: u32) = [0, SLOT_SET_ARMED_WEAPON];
#[must_use]
pub fn player_armed_weapon(player: IPlayer) -> u32 = [0, SLOT_GET_ARMED_WEAPON] or 0;
#[must_use]
pub fn player_armed_weapon_ammo(player: IPlayer) -> u32 = [0, SLOT_GET_ARMED_WEAPON_AMMO] or 0;
pub fn player_set_shop_name(player: IPlayer, name: StringView) = [0, SLOT_SET_SHOP_NAME];
#[must_use]
pub fn player_drunk_level(player: IPlayer) -> i32 = [0, SLOT_GET_DRUNK_LEVEL] or 0;
pub fn player_set_colour(player: IPlayer, colour: Colour) = [0, SLOT_SET_COLOUR];
#[must_use]
pub fn player_colour(
player: IPlayer,
) -> *const Colour = [0, SLOT_GET_COLOUR] or std::ptr::null();
pub fn player_set_other_colour(
player: IPlayer,
other: *mut IPlayer,
colour: Colour,
) = [0, SLOT_SET_OTHER_COLOUR];
#[must_use]
pub fn player_other_colour(
player: IPlayer,
other: *mut IPlayer,
colour: &mut Colour,
) -> bool = [0, SLOT_GET_OTHER_COLOUR] or false;
#[must_use]
pub fn player_controllable(player: IPlayer) -> bool = [0, SLOT_GET_CONTROLLABLE] or false;
pub fn player_set_spectating(player: IPlayer, spectating: bool) = [0, SLOT_SET_SPECTATING];
pub fn player_play_sound(player: IPlayer, sound: u32, pos: Vector3) = [0, SLOT_PLAY_SOUND];
#[must_use]
pub fn player_last_played_sound(player: IPlayer) -> u32 = [0, SLOT_LAST_PLAYED_SOUND] or 0;
pub fn player_play_audio(
player: IPlayer,
url: StringView,
use_pos: bool,
pos: Vector3,
distance: f32,
) = [0, SLOT_PLAY_AUDIO];
#[must_use]
pub fn player_player_crime_report(
player: IPlayer,
suspect: *mut IPlayer,
crime: i32,
) -> bool = [0, SLOT_PLAYER_CRIME_REPORT] or false;
pub fn player_stop_audio(player: IPlayer) = [0, SLOT_STOP_AUDIO];
pub fn player_create_explosion(
player: IPlayer,
vec: Vector3,
type_value: i32,
radius: f32,
) = [0, SLOT_CREATE_EXPLOSION];
pub fn player_send_death_message(
player: IPlayer,
other_player: *mut IPlayer,
killer: *mut IPlayer,
weapon: i32,
) = [0, SLOT_SEND_DEATH_MESSAGE];
pub fn player_send_empty_death_message(player: IPlayer) = [0, SLOT_SEND_EMPTY_DEATH_MESSAGE];
pub fn player_remove_default_objects(
player: IPlayer,
model: u32,
pos: Vector3,
radius: f32,
) = [0, SLOT_REMOVE_DEFAULT_OBJECTS];
pub fn player_force_class_selection(player: IPlayer) = [0, SLOT_FORCE_CLASS_SELECTION];
pub fn player_reset_money(player: IPlayer) = [0, SLOT_RESET_MONEY];
pub fn player_set_map_icon(
player: IPlayer,
id: i32,
pos: Vector3,
type_value: i32,
colour: Colour,
style: i32,
) = [0, SLOT_SET_MAP_ICON];
pub fn player_unset_map_icon(player: IPlayer, id: i32) = [0, SLOT_UNSET_MAP_ICON];
pub fn player_use_stunt_bonuses(player: IPlayer, enable: bool) = [0, SLOT_USE_STUNT_BONUSES];
pub fn player_toggle_other_name_tag(
player: IPlayer,
other: *mut IPlayer,
toggle: bool,
) = [0, SLOT_TOGGLE_OTHER_NAME_TAG];
pub fn player_set_time(player: IPlayer, hr: Hours, min: Minutes) = [0, SLOT_SET_TIME];
pub fn player_use_clock(player: IPlayer, enable: bool) = [0, SLOT_USE_CLOCK];
#[must_use]
pub fn player_has_clock(player: IPlayer) -> bool = [0, SLOT_HAS_CLOCK] or false;
pub fn player_use_widescreen(player: IPlayer, enable: bool) = [0, SLOT_USE_WIDESCREEN];
#[must_use]
pub fn player_has_widescreen(player: IPlayer) -> bool = [0, SLOT_HAS_WIDESCREEN] or false;
pub fn player_set_transform(player: IPlayer, tm: GTAQuat) = [0, SLOT_SET_TRANSFORM];
pub fn player_set_gravity(player: IPlayer, gravity: f32) = [0, SLOT_SET_GRAVITY];
#[must_use]
pub fn player_gravity(player: IPlayer) -> f32 = [0, SLOT_GET_GRAVITY] or 0.0;
pub fn player_set_world_time(player: IPlayer, time: Hours) = [0, SLOT_SET_WORLD_TIME];
pub fn player_apply_animation(
player: IPlayer,
animation: &AnimationData,
sync_type: i32,
) = [0, SLOT_APPLY_ANIMATION];
pub fn player_clear_animations(player: IPlayer, sync_type: i32) = [0, SLOT_CLEAR_ANIMATIONS];
#[must_use]
pub fn player_surfing_data(
player: IPlayer,
) -> PlayerSurfingData = [0, SLOT_GET_SURFING_DATA] or PlayerSurfingData::default();
pub fn player_stream_in_for_player(
player: IPlayer,
other: *mut IPlayer,
) = [0, SLOT_STREAM_IN_FOR_PLAYER];
#[must_use]
pub fn player_is_streamed_in_for_player(
player: IPlayer,
other: *mut IPlayer,
) -> bool = [0, SLOT_IS_STREAMED_IN_FOR_PLAYER] or false;
pub fn player_stream_out_for_player(
player: IPlayer,
other: *mut IPlayer,
) = [0, SLOT_STREAM_OUT_FOR_PLAYER];
#[must_use]
pub fn player_streamed_for_players(
player: IPlayer,
) -> *const FlatSet<IPlayer> = [0, SLOT_STREAMED_FOR_PLAYERS] or std::ptr::null();
#[must_use]
pub fn player_state(player: IPlayer) -> i32 = [0, SLOT_GET_STATE] or 0;
pub fn player_set_chat_bubble(
player: IPlayer,
text: StringView,
colour: &Colour,
draw_dist: f32,
expire: Milliseconds,
) = [0, SLOT_SET_CHAT_BUBBLE];
pub fn player_send_client_message(
player: IPlayer,
colour: &Colour,
message: StringView,
) = [0, SLOT_SEND_CLIENT_MESSAGE];
pub fn player_send_chat_message(
player: IPlayer,
sender: *mut IPlayer,
message: StringView,
) = [0, SLOT_SEND_CHAT_MESSAGE];
pub fn player_send_command(player: IPlayer, message: StringView) = [0, SLOT_SEND_COMMAND];
pub fn player_send_game_text(
player: IPlayer,
message: StringView,
time: Milliseconds,
style: i32,
) = [0, SLOT_SEND_GAME_TEXT];
pub fn player_hide_game_text(player: IPlayer, style: i32) = [0, SLOT_HIDE_GAME_TEXT];
#[must_use]
pub fn player_has_game_text(
player: IPlayer,
style: i32,
) -> bool = [0, SLOT_HAS_GAME_TEXT] or false;
#[must_use]
pub fn player_game_text(
player: IPlayer,
style: i32,
message: &mut StringView,
time: &mut Milliseconds,
remaining: &mut Milliseconds,
) -> bool = [0, SLOT_GET_GAME_TEXT] or false;
#[must_use]
pub fn player_weather(player: IPlayer) -> i32 = [0, SLOT_GET_WEATHER] or 0;
pub fn player_set_world_bounds(player: IPlayer, coords: Vector4) = [0, SLOT_SET_WORLD_BOUNDS];
#[must_use]
pub fn player_world_bounds(
player: IPlayer,
) -> Vector4 = [0, SLOT_GET_WORLD_BOUNDS] or Vector4::ZERO;
pub fn player_set_fighting_style(player: IPlayer, style: i32) = [0, SLOT_SET_FIGHTING_STYLE];
#[must_use]
pub fn player_fighting_style(player: IPlayer) -> i32 = [0, SLOT_GET_FIGHTING_STYLE] or 0;
pub fn player_set_skill_level(
player: IPlayer,
skill: i32,
level: i32,
) = [0, SLOT_SET_SKILL_LEVEL];
pub fn player_set_action(player: IPlayer, action: i32) = [0, SLOT_SET_ACTION];
#[must_use]
pub fn player_action(player: IPlayer) -> i32 = [0, SLOT_GET_ACTION] or 0;
pub fn player_set_velocity(player: IPlayer, velocity: Vector3) = [0, SLOT_SET_VELOCITY];
#[must_use]
pub fn player_velocity(player: IPlayer) -> Vector3 = [0, SLOT_GET_VELOCITY] or Vector3::ZERO;
#[must_use]
pub fn player_key_data(
player: IPlayer,
) -> *const PlayerKeyData = [0, SLOT_GET_KEY_DATA] or std::ptr::null();
#[must_use]
pub fn player_skill_levels(
player: IPlayer,
) -> *const [u16; 11] = [0, SLOT_GET_SKILL_LEVELS] or std::ptr::null();
#[must_use]
pub fn player_aim_data(
player: IPlayer,
) -> *const PlayerAimData = [0, SLOT_GET_AIM_DATA] or std::ptr::null();
#[must_use]
pub fn player_bullet_data(
player: IPlayer,
) -> *const PlayerBulletData = [0, SLOT_GET_BULLET_DATA] or std::ptr::null();
pub fn player_use_camera_targeting(
player: IPlayer,
enable: bool,
) = [0, SLOT_USE_CAMERA_TARGETING];
#[must_use]
pub fn player_has_camera_targeting(
player: IPlayer,
) -> bool = [0, SLOT_HAS_CAMERA_TARGETING] or false;
pub fn player_remove_from_vehicle(player: IPlayer, force: bool) = [0, SLOT_REMOVE_FROM_VEHICLE];
#[must_use]
pub fn player_camera_target_player(
player: IPlayer,
) -> *mut IPlayer = [0, SLOT_GET_CAMERA_TARGET_PLAYER] or std::ptr::null_mut();
#[must_use]
pub fn player_camera_target_vehicle(
player: IPlayer,
) -> *mut IVehicle = [0, SLOT_GET_CAMERA_TARGET_VEHICLE] or std::ptr::null_mut();
#[must_use]
pub fn player_camera_target_object(
player: IPlayer,
) -> *mut IObject = [0, SLOT_GET_CAMERA_TARGET_OBJECT] or std::ptr::null_mut();
#[must_use]
pub fn player_camera_target_actor(
player: IPlayer,
) -> *mut IActor = [0, SLOT_GET_CAMERA_TARGET_ACTOR] or std::ptr::null_mut();
#[must_use]
pub fn player_target_player(
player: IPlayer,
) -> *mut IPlayer = [0, SLOT_GET_TARGET_PLAYER] or std::ptr::null_mut();
#[must_use]
pub fn player_target_actor(
player: IPlayer,
) -> *mut IActor = [0, SLOT_GET_TARGET_ACTOR] or std::ptr::null_mut();
pub fn player_set_remote_vehicle_collisions(
player: IPlayer,
collide: bool,
) = [0, SLOT_SET_REMOTE_VEHICLE_COLLISIONS];
pub fn player_spectate_player(
player: IPlayer,
target: *mut IPlayer,
mode: i32,
) = [0, SLOT_SPECTATE_PLAYER];
pub fn player_spectate_vehicle(
player: IPlayer,
target: *mut IVehicle,
mode: i32,
) = [0, SLOT_SPECTATE_VEHICLE];
#[must_use]
pub fn player_spectate_data(
player: IPlayer,
) -> *const PlayerSpectateData = [0, SLOT_GET_SPECTATE_DATA] or std::ptr::null();
pub fn player_send_client_check(
player: IPlayer,
action_type: i32,
address: i32,
offset: i32,
count: i32,
) = [0, SLOT_SEND_CLIENT_CHECK];
pub fn player_toggle_ghost_mode(player: IPlayer, toggle: bool) = [0, SLOT_TOGGLE_GHOST_MODE];
#[must_use]
pub fn player_is_ghost_mode_enabled(
player: IPlayer,
) -> bool = [0, SLOT_IS_GHOST_MODE_ENABLED] or false;
#[must_use]
pub fn player_default_objects_removed(
player: IPlayer,
) -> i32 = [0, SLOT_GET_DEFAULT_OBJECTS_REMOVED] or 0;
#[must_use]
pub fn player_kick_status(player: IPlayer) -> bool = [0, SLOT_GET_KICK_STATUS] or false;
pub fn player_clear_tasks(player: IPlayer, sync_type: i32) = [0, SLOT_CLEAR_TASKS];
pub fn player_allow_weapons(player: IPlayer, allow: bool) = [0, SLOT_ALLOW_WEAPONS];
#[must_use]
pub fn player_are_weapons_allowed(
player: IPlayer,
) -> bool = [0, SLOT_ARE_WEAPONS_ALLOWED] or false;
pub fn player_allow_teleport(player: IPlayer, allow: bool) = [0, SLOT_ALLOW_TELEPORT];
#[must_use]
pub fn player_is_teleport_allowed(
player: IPlayer,
) -> bool = [0, SLOT_IS_TELEPORT_ALLOWED] or false;
#[must_use]
pub fn player_is_using_official_client(
player: IPlayer,
) -> bool = [0, SLOT_IS_USING_OFFICIAL_CLIENT] or false;
#[must_use]
pub fn player_is_using_omp(player: IPlayer) -> bool = [0, SLOT_IS_USING_OMP] or false;
}
#[must_use]
pub unsafe fn player_client_version_name(player: *mut IPlayer) -> Option<String> {
let view = call_vtable_small_struct!(
player.cast::<u8>(),
0,
SLOT_GET_CLIENT_VERSION_NAME,
StringView,
StringView::EMPTY
)?;
unsafe { view.to_owned_string() }
}
#[must_use]
pub unsafe fn player_serial(player: *mut IPlayer) -> Option<String> {
let view = call_vtable_small_struct!(
player.cast::<u8>(),
0,
SLOT_GET_SERIAL,
StringView,
StringView::EMPTY
)?;
unsafe { view.to_owned_string() }
}
#[must_use]
pub unsafe fn player_weapon_slot(player: *mut IPlayer, slot: i32) -> Option<WeaponSlotData> {
call_vtable_small_struct!(
player.cast::<u8>(),
0,
SLOT_GET_WEAPON_SLOT,
WeaponSlotData,
WeaponSlotData::default(),
(i32)(slot)
)
}
#[must_use]
pub unsafe fn player_shop_name(player: *mut IPlayer) -> Option<String> {
let view = call_vtable_small_struct!(
player.cast::<u8>(),
0,
SLOT_GET_SHOP_NAME,
StringView,
StringView::EMPTY
)?;
unsafe { view.to_owned_string() }
}
#[must_use]
pub unsafe fn player_last_played_audio(player: *mut IPlayer) -> Option<String> {
let view = call_vtable_small_struct!(
player.cast::<u8>(),
0,
SLOT_LAST_PLAYED_AUDIO,
StringView,
StringView::EMPTY
)?;
unsafe { view.to_owned_string() }
}
#[must_use]
pub unsafe fn player_time(player: *mut IPlayer) -> Option<Pair<Hours, Minutes>> {
call_vtable_small_struct!(player.cast::<u8>(), 0, SLOT_GET_TIME, Pair<Hours, Minutes>, unsafe { std::mem::zeroed::<Pair<Hours, Minutes>>() })
}
#[must_use]
pub unsafe fn player_animation_data(player: *mut IPlayer) -> Option<PlayerAnimationData> {
call_vtable_small_struct!(
player.cast::<u8>(),
0,
SLOT_GET_ANIMATION_DATA,
PlayerAnimationData,
PlayerAnimationData::default()
)
}