---@meta --- YimMenuV2 Lua API definitions for the Lua Language Server (sumneko / LuaLS). --- --- This file is annotations only — it is never executed. Point your language --- server at it for autocompletion and type checking, e.g. in `.luarc.json`: --- { "workspace.library": [ "path/to/docs" ] } --- --- See docs/lua-api.md for prose descriptions. Natives loaded via --- `natives.load_natives()` are listed in docs/natives.lua. ------------------------------------------------------------------------------ -- Vector3 ------------------------------------------------------------------------------ ---@class Vector3 ---@field x number ---@field y number ---@field z number ---@overload fun(x: number, y: number, z: number): Vector3 ---@overload fun(): Vector3 Vector3 = {} ---@param x? number ---@param y? number ---@param z? number ---@return Vector3 function Vector3.new(x, y, z) end ---@return number x, number y, number z function Vector3:get_coords() end ---@return number function Vector3:get_x() end ---@return number function Vector3:get_y() end ---@return number function Vector3:get_z() end ---@param value number function Vector3:set_x(value) end ---@param value number function Vector3:set_y(value) end ---@param value number function Vector3:set_z(value) end ---@param other Vector3 ---@return number function Vector3:get_distance(other) end ---@return boolean function Vector3:is_zero() end ------------------------------------------------------------------------------ -- notify ------------------------------------------------------------------------------ notify = {} ---@param title string ---@param message string ---@param duration? integer # milliseconds, default 5000 function notify.success(title, message, duration) end ---@param title string ---@param message string ---@param duration? integer function notify.info(title, message, duration) end ---@param title string ---@param message string ---@param duration? integer function notify.warn(title, message, duration) end ---@param title string ---@param message string ---@param duration? integer function notify.error(title, message, duration) end ------------------------------------------------------------------------------ -- log ------------------------------------------------------------------------------ log = {} ---@param message string function log.verbose(message) end ---@param message string function log.info(message) end ---@param message string function log.warn(message) end ---@param message string function log.error(message) end ---@param message string function log.trace(message) end ------------------------------------------------------------------------------ -- util ------------------------------------------------------------------------------ util = {} ---@param str string ---@return integer function util.joaat(str) end ---Current Unix time in milliseconds. ---@return integer function util.time() end ------------------------------------------------------------------------------ -- script ------------------------------------------------------------------------------ script = {} ---@param fn fun() function script.run_in_callback(fn) end ---Yield the current callback for at least `ms` milliseconds (default 0 = one frame). ---@param ms? integer function script.yield(ms) end ---@return boolean function script.is_inside_callback() end ------------------------------------------------------------------------------ -- event ------------------------------------------------------------------------------ ---@class menu_event ---@field PlayerLeave integer ---@field PlayerJoin integer ---@field ScriptedGameEventReceived integer ---@field ChatMessageReceived integer ---@field Unload integer menu_event = {} event = {} ---@param menu_event integer # a `menu_event.*` constant ---@param handler fun(...) function event.register_handler(menu_event, handler) end ------------------------------------------------------------------------------ -- menu (UI builders) ------------------------------------------------------------------------------ ---@class Submenu local Submenu = {} ---@class Category local Category = {} ---@class Group local Group = {} menu = {} ---@param name string function menu.set_menu_name(name) end ---@param icon string function menu.set_menu_icon(icon) end ---@return string function menu.get_menu_name() end ---@param name? string ---@return Submenu function menu.get_submenu(name) end ---@param name string ---@return Submenu? function menu.find_submenu(name) end ---@param name string ---@param per_row? integer # default 7 ---@return Group function menu.create_group(name, per_row) end ---@return boolean function menu.is_open() end function menu.toggle() end ---Register a raw ImGui draw callback rendered every frame while the menu is open. ---@param fn fun() function menu.add_imgui(fn) end ---Register a raw ImGui draw callback rendered every frame regardless of whether the menu is open. ---@param fn fun() function menu.add_always_draw_imgui(fn) end ---@param name string ---@return Category function Submenu:add_category(name) end ---@param name string ---@return Category? function Submenu:find_category(name) end ---@param name string ---@param per_row? integer # default 7 ---@return Group function Category:add_group(name, per_row) end ---@param name string ---@return Group? function Category:find_group(name) end ---Register a raw ImGui draw callback rendered every frame. ---@param fn fun() function Category:imgui(fn) end ---@param name string function Group:add_command(name) end ---@param name string function Group:add_bool_command(name) end ---@param name string ---@param slider? boolean # default true function Group:add_int_command(name, slider) end ---@param name string ---@param slider? boolean # default true function Group:add_float_command(name, slider) end ---@param name string function Group:add_list_command(name) end ---@param name string ---@param label string ---@param desc? string ---@param fn fun() ---@return CommandHandle function Group:add_button(name, label, desc, fn) end ---@param name string ---@param label string ---@param desc? string ---@param default? boolean ---@param on_enable? fun() ---@param on_disable? fun() ---@return CommandHandle function Group:add_checkbox(name, label, desc, default, on_enable, on_disable) end ---@param name string ---@param label string ---@param desc? string ---@param tick fun() ---@param on_enable? fun() ---@param on_disable? fun() ---@return CommandHandle function Group:add_looped_checkbox(name, label, desc, tick, on_enable, on_disable) end ---Register a raw ImGui draw callback inside the group. ---@param fn fun() function Group:imgui(fn) end ---Manually render the group (for standalone groups inside an `imgui` callback). function Group:draw() end ------------------------------------------------------------------------------ -- commandmgr ------------------------------------------------------------------------------ ---@class CommandHandle local CommandHandle = {} ---@return boolean|integer|number|nil function CommandHandle:get_value() end ---@param value boolean|integer|number function CommandHandle:set_value(value) end ---@return string function CommandHandle:get_name() end ---@return string function CommandHandle:get_desc() end ---Draw the command (call from inside an ImGui callback). function CommandHandle:draw() end commandmgr = {} ---@param name string ---@param label string ---@param desc string ---@param on_call fun() ---@return CommandHandle function commandmgr.add_command(name, label, desc, on_call) end ---@param name string ---@param label string ---@param desc string ---@param default? boolean ---@param on_enable? fun() ---@param on_disable? fun() ---@return CommandHandle function commandmgr.add_bool_command(name, label, desc, default, on_enable, on_disable) end ---@param name string ---@param label string ---@param desc string ---@param tick fun() ---@param on_enable? fun() ---@param on_disable? fun() ---@return CommandHandle function commandmgr.add_looped_command(name, label, desc, tick, on_enable, on_disable) end ---@param name string ---@param label string ---@param desc string ---@param min? integer ---@param max? integer ---@param default? integer ---@param on_change? fun(value: integer) ---@return CommandHandle function commandmgr.add_int_command(name, label, desc, min, max, default, on_change) end ---@param name string ---@param label string ---@param desc string ---@param min? number ---@param max? number ---@param default? number ---@param on_change? fun(value: number) ---@return CommandHandle function commandmgr.add_float_command(name, label, desc, min, max, default, on_change) end ---@param name string ---@param label string ---@param desc string ---@param entries table # array of { key, label } pairs ---@param default? integer ---@param on_change? fun(value: integer) ---@return CommandHandle function commandmgr.add_list_command(name, label, desc, entries, default, on_change) end ---@param name string|integer ---@return CommandHandle? function commandmgr.get_command(name) end ------------------------------------------------------------------------------ -- memory / pointer ------------------------------------------------------------------------------ ---@class pointer ---@overload fun(addr: integer): pointer pointer = {} ---@param addr integer ---@return pointer function pointer.new(addr) end ---@return integer function pointer:get_address() end ---@param addr integer function pointer:set_address(addr) end ---@return boolean function pointer:is_null() end ---@return boolean function pointer:is_valid() end ---@param offset integer ---@return pointer function pointer:add(offset) end ---@param offset integer ---@return pointer function pointer:sub(offset) end ---@param offset? integer ---@return pointer function pointer:rip(offset) end ---@return pointer function pointer:deref() end ---@return integer function pointer:get_byte() end ---@return integer function pointer:get_word() end ---@return integer function pointer:get_int() end ---@return integer function pointer:get_dword() end ---@return integer function pointer:get_qword() end ---@return number function pointer:get_float() end ---@return string function pointer:get_string() end ---@param value integer function pointer:set_byte(value) end ---@param value integer function pointer:set_word(value) end ---@param value integer function pointer:set_int(value) end ---@param value integer function pointer:set_dword(value) end ---@param value integer function pointer:set_qword(value) end ---@param value number function pointer:set_float(value) end ---@param value string function pointer:set_string(value) end ---@param value integer ---@return patch function pointer:patch_byte(value) end ---@param value integer ---@return patch function pointer:patch_word(value) end ---@param value integer ---@return patch function pointer:patch_dword(value) end ---@param value integer ---@return patch function pointer:patch_qword(value) end ---@class patch local patch = {} function patch:apply() end function patch:restore() end memory = {} ---@param pattern string # IDA-format byte signature ---@return pointer? function memory.scan_pattern(pattern) end ---@param entity integer ---@return pointer function memory.handle_to_ptr(entity) end ---@param ptr pointer ---@return integer function memory.ptr_to_handle(ptr) end ---@param size integer ---@return pointer function memory.allocate(size) end ---@param ptr pointer function memory.free(ptr) end ------------------------------------------------------------------------------ -- Entity ------------------------------------------------------------------------------ ---@class Entity ---@overload fun(handle: integer): Entity Entity = {} ---@param handle integer ---@return Entity function Entity.new(handle) end ---@return integer function Entity:get_handle() end ---@return boolean function Entity:is_valid() end ---@return boolean function Entity:is_ped() end ---@return boolean function Entity:is_vehicle() end ---@return boolean function Entity:is_object() end ---@return boolean function Entity:is_player() end ---@return boolean function Entity:is_mission_entity() end ---@return integer function Entity:get_model() end ---@return Vector3 function Entity:get_position() end ---@param pos Vector3 function Entity:set_position(pos) end ---@param order? integer # default 2 ---@return Vector3 function Entity:get_rotation(order) end ---@param rot Vector3 ---@param order? integer # default 2 function Entity:set_rotation(rot, order) end ---@return Vector3 function Entity:get_velocity() end ---@param vel Vector3 function Entity:set_velocity(vel) end ---@return number function Entity:get_heading() end ---@param heading number function Entity:set_heading(heading) end ---@return number function Entity:get_speed() end ---@param enabled boolean function Entity:set_collision(enabled) end ---@param frozen boolean function Entity:set_frozen(frozen) end ---@return boolean function Entity:has_interior() end ---@return boolean function Entity:is_networked() end ---@return boolean function Entity:is_remote() end ---@return boolean function Entity:has_control() end ---@return integer function Entity:get_network_object_id() end function Entity:prevent_migration() end function Entity:force_control() end ---Latent: requests control of the entity. ---@param timeout? integer # milliseconds, default 100 function Entity:request_control(timeout) end ---@return boolean function Entity:is_invincible() end ---@param enabled boolean function Entity:set_invincible(enabled) end ---@return boolean function Entity:is_dead() end function Entity:kill() end ---@return integer function Entity:get_health() end ---@param health integer function Entity:set_health(health) end ---@return integer function Entity:get_max_health() end ---@return boolean function Entity:is_visible() end ---@param visible boolean function Entity:set_visible(visible) end ---@return integer function Entity:get_alpha() end ---@param alpha integer function Entity:set_alpha(alpha) end function Entity:reset_alpha() end function Entity:delete() end ------------------------------------------------------------------------------ -- Ped : Entity ------------------------------------------------------------------------------ ---@class Ped : Entity ---@overload fun(handle: integer): Ped Ped = {} ---@param handle integer ---@return Ped function Ped.new(handle) end ---Latent: spawns a ped. ---@param model integer|string ---@param pos Vector3 ---@param heading? number # default 0 ---@return Ped function Ped.create(model, pos, heading) end ---@return Vehicle function Ped:get_vehicle() end ---@return Vehicle function Ped:get_last_vehicle() end ---@return integer function Ped:get_vehicle_object_id() end ---@param vehicle Vehicle ---@param seat? integer # default 0 function Ped:set_in_vehicle(vehicle, seat) end ---@return boolean function Ped:get_ragdoll() end ---@param enabled boolean function Ped:set_ragdoll(enabled) end ---@param bone integer ---@return Vector3 function Ped:get_bone_position(bone) end ---@return boolean function Ped:is_enemy() end ---@return integer function Ped:get_accuracy() end ---@param accuracy integer function Ped:set_accuracy(accuracy) end ---@param weapon integer|string ---@param equip? boolean # default false function Ped:give_weapon(weapon, equip) end ---@param weapon integer|string function Ped:remove_weapon(weapon) end ---@return integer function Ped:get_current_weapon() end ---@param weapon integer|string ---@return boolean function Ped:has_weapon(weapon) end ---@param enabled boolean function Ped:set_infinite_ammo(enabled) end ---@param enabled boolean function Ped:set_infinite_clip(enabled) end ---@param weapon integer|string function Ped:set_max_ammo_for_weapon(weapon) end ---@param pos Vector3 function Ped:teleport_to(pos) end ---@return integer function Ped:get_armour() end ---@param armour integer function Ped:set_armour(armour) end ---@param group integer function Ped:set_leader_of_group(group) end ---@param group integer function Ped:add_to_group(group) end function Ped:remove_from_group() end ---@param group integer ---@return boolean function Ped:is_member_of_group(group) end function Ped:randomize_outfit() end ---@param name string ---@param duration? integer # default -1 ---@param play_anim? boolean # default true function Ped:start_scenario(name, duration, play_anim) end ---@param enabled boolean function Ped:set_keep_task(enabled) end function Ped:clear_damage() end ---@param time integer # seconds function Ped:set_max_time_underwater(time) end function Ped:set_as_cop() end ------------------------------------------------------------------------------ -- Vehicle : Entity ------------------------------------------------------------------------------ ---@class Vehicle : Entity ---@overload fun(handle: integer): Vehicle Vehicle = {} ---@param handle integer ---@return Vehicle function Vehicle.new(handle) end ---Latent: spawns a vehicle. ---@param model integer|string ---@param pos Vector3 ---@param heading? number # default 0 ---@return Vehicle function Vehicle.create(model, pos, heading) end function Vehicle:fix() end ---@return integer function Vehicle:get_gear() end ---@return number function Vehicle:get_rev_ratio() end ---@return number function Vehicle:get_speed() end function Vehicle:upgrade() end ---@return string function Vehicle:get_plate_text() end ---@param text string function Vehicle:set_plate_text(text) end ---@param seat integer ---@return boolean function Vehicle:is_seat_free(seat) end ---@return boolean function Vehicle:supports_boost() end ---@return boolean function Vehicle:is_boost_active() end ---@param charge? integer # default 100 function Vehicle:set_boost_charge(charge) end ---@param enabled boolean function Vehicle:lower_stance(enabled) end ---@param distance number ---@param time integer function Vehicle:bring_to_halt(distance, time) end ---@return boolean function Vehicle:set_on_ground_properly() end ---@return string function Vehicle:get_full_name() end ------------------------------------------------------------------------------ -- entities ------------------------------------------------------------------------------ entities = {} ---@return integer[] function entities.get_all_vehicles_as_handles() end ---@return integer[] function entities.get_all_peds_as_handles() end ---@return integer[] function entities.get_all_objects_as_handles() end ------------------------------------------------------------------------------ -- Player / players ------------------------------------------------------------------------------ ---@class Player ---@overload fun(id: integer): Player Player = {} ---@param id integer ---@return Player function Player.new(id) end ---@return boolean function Player:is_valid() end ---@return boolean function Player:is_local() end ---@return boolean function Player:is_host() end ---@return boolean function Player:is_modder() end ---@return integer function Player:get_id() end ---@return string function Player:get_name() end ---@return Ped function Player:get_ped() end ---@return integer function Player:get_message_id() end ---@return integer function Player:get_rid() end ---@return string address, integer port function Player:get_external_address() end ---@return string address, integer port function Player:get_internal_address() end ---@return number function Player:get_average_latency() end ---@return number function Player:get_average_packet_loss() end ---@return integer function Player:get_rank() end ---@return integer function Player:get_rp() end ---@return integer function Player:get_money() end ---@return integer function Player:get_wanted_level() end ---@param level integer function Player:set_wanted_level(level) end ---@return integer function Player:get_max_armour() end ---@return integer function Player:get_group() end ---@param visible boolean function Player:set_visible_locally(visible) end ---@param pos Vector3 function Player:teleport_to(pos) end ---@param distance number function Player:set_fall_distance_override(distance) end ---@param ped Ped ---@param delete_old? boolean # default true function Player:set_ped(ped, delete_old) end players = {} ---@return Player[] function players.get_all() end ---@return Player function players.get_local() end ---@return Player function players.get_selected() end ---@param player Player function players.set_selected(player) end ---@param rid integer ---@return Player function players.get_by_rid(rid) end ---@param message_id integer ---@return Player function players.get_by_message_id(message_id) end ---@return Player function players.get_random() end ------------------------------------------------------------------------------ -- ScriptGlobal ------------------------------------------------------------------------------ ---@class ScriptGlobal ---@overload fun(index: integer): ScriptGlobal ScriptGlobal = {} ---@param index integer ---@return ScriptGlobal function ScriptGlobal.new(index) end ---@param offset integer ---@param size? integer # array stride multiplier ---@return ScriptGlobal function ScriptGlobal:at(offset, size) end ---@return boolean function ScriptGlobal:can_access() end ---@return integer function ScriptGlobal:get_int() end ---@return number function ScriptGlobal:get_float() end ---@return string? function ScriptGlobal:get_string() end ---@return Vector3 function ScriptGlobal:get_vector3() end ---@param value integer function ScriptGlobal:set_int(value) end ---@param value number function ScriptGlobal:set_float(value) end ---@param value string ---@param max_length? integer function ScriptGlobal:set_string(value, max_length) end ---@param value Vector3 function ScriptGlobal:set_vector3(value) end ------------------------------------------------------------------------------ -- ScriptLocal ------------------------------------------------------------------------------ ---@class ScriptLocal ScriptLocal = {} ---@param script string|integer # script name or hash ---@param index integer ---@return ScriptLocal? function ScriptLocal.new(script, index) end ---@param offset integer ---@param size? integer ---@return ScriptLocal function ScriptLocal:at(offset, size) end ---@return integer function ScriptLocal:get_int() end ---@return number function ScriptLocal:get_float() end ---@return Vector3 function ScriptLocal:get_vector3() end ---@param value integer function ScriptLocal:set_int(value) end ---@param value number function ScriptLocal:set_float(value) end ---@param value Vector3 function ScriptLocal:set_vector3(value) end ------------------------------------------------------------------------------ -- ScriptPointer ------------------------------------------------------------------------------ ---@class ScriptPointer ---@overload fun(name: string, pattern: string, offset?: integer, rip?: boolean, address?: integer): ScriptPointer ScriptPointer = {} ---@param name string ---@param pattern string # IDA-format signature ---@param offset? integer ---@param rip? boolean ---@param address? integer ---@return ScriptPointer function ScriptPointer.new(name, pattern, offset, rip, address) end ---@param offset integer ---@return ScriptPointer function ScriptPointer:add(offset) end ---@param offset integer ---@return ScriptPointer function ScriptPointer:sub(offset) end ---@return ScriptPointer function ScriptPointer:rip() end ---@param target string|integer ---@return ScriptPointer? function ScriptPointer:scan(target) end ---@return integer function ScriptPointer:get_address() end ---@return string function ScriptPointer:get_name() end ------------------------------------------------------------------------------ -- ScriptPatch ------------------------------------------------------------------------------ ---@class ScriptPatch ---@overload fun(script: string|integer, name: string, pattern: string, offset: integer|integer[], patch_bytes?: integer[]): ScriptPatch ScriptPatch = {} ---@param script string|integer ---@param name string ---@param pattern string ---@param offset integer|integer[] # offset, or patch_bytes if omitted ---@param patch_bytes? integer[] # bytes 0-255 ---@return ScriptPatch function ScriptPatch.new(script, name, pattern, offset, patch_bytes) end function ScriptPatch:enable() end function ScriptPatch:disable() end function ScriptPatch:remove() end ------------------------------------------------------------------------------ -- ScriptFunction ------------------------------------------------------------------------------ ---@class ScriptFunction ---@overload fun(script: string|integer, script_pointer: ScriptPointer): ScriptFunction ScriptFunction = {} ---@param script string|integer ---@param script_pointer ScriptPointer ---@return ScriptFunction function ScriptFunction.new(script, script_pointer) end ---Invoke the script function. ---`param_string` arg chars: `i` int32, `f` float, `h` hash, `b` bool; optional `=` return type (`n`/`i`/`f`/`b`/`h`). Example: `fn:call("ii=i", 5, 10)`. ---@param param_string string ---@param ... any ---@return any function ScriptFunction:call(param_string, ...) end ------------------------------------------------------------------------------ -- scripts ------------------------------------------------------------------------------ scripts = {} ---@param script string|integer ---@return boolean function scripts.is_active(script) end ---@param script string|integer ---@param callback fun() function scripts.run_as_script(script, callback) end ------------------------------------------------------------------------------ -- natives ------------------------------------------------------------------------------ natives = {} ---Load every native namespace table (PLAYER, ENTITY, VEHICLE, ...) as globals. function natives.load_natives() end ---@return boolean function natives.are_natives_loaded() end ------------------------------------------------------------------------------ -- network ------------------------------------------------------------------------------ network = {} ---@param hash integer|string ---@param bits integer # target player bitset ---@param format string # chars: i/f/l/h (max 36 args) ---@param ... integer|number function network.trigger_script_event(hash, bits, format, ...) end ---@param script_hash integer|string function network.force_script_host(script_hash) end ---@param script_hash integer|string ---@param bits integer function network.force_script_on_player(script_hash, bits) end ---@return boolean function network.is_session_started() end ------------------------------------------------------------------------------ -- tunables ------------------------------------------------------------------------------ tunables = {} ---@param hash integer|string ---@param value integer function tunables.set_int(hash, value) end ---@param hash integer|string ---@param value boolean function tunables.set_bool(hash, value) end ---@param hash integer|string ---@param value number function tunables.set_float(hash, value) end ---@param hash integer|string ---@return integer function tunables.get_int(hash) end ---@param hash integer|string ---@return boolean function tunables.get_bool(hash) end ---@param hash integer|string ---@return number function tunables.get_float(hash) end ------------------------------------------------------------------------------ -- stats ------------------------------------------------------------------------------ stats = {} ---@param name string ---@param value integer function stats.set_int(name, value) end ---@param name string ---@param value boolean function stats.set_bool(name, value) end ---@param name string ---@param value number function stats.set_float(name, value) end ---@param name string ---@param value string function stats.set_string(name, value) end ---@param name string ---@return integer function stats.get_int(name) end ---@param name string ---@return boolean function stats.get_bool(name) end ---@param name string ---@return number function stats.get_float(name) end ---@param name string ---@return string function stats.get_string(name) end ---@param index integer ---@param value integer function stats.set_packed_int(index, value) end ---@param index integer ---@param value boolean function stats.set_packed_bool(index, value) end ---@param index integer ---@return integer function stats.get_packed_int(index) end ---@param index integer ---@return boolean function stats.get_packed_bool(index) end ---@param start integer ---@param finish integer ---@param value boolean function stats.set_packed_bool_range(start, finish, value) end ---@param name string ---@param value integer ---@param offset integer ---@param bits integer function stats.set_masked_int(name, value, offset, bits) end ---@param name string ---@param offset integer ---@param bits integer ---@return integer function stats.get_masked_int(name, offset, bits) end ---@param name string ---@param offset integer ---@param value boolean function stats.set_masked_bool(name, offset, value) end ---@param name string ---@param offset integer ---@return boolean function stats.get_masked_bool(name, offset) end ------------------------------------------------------------------------------ -- transactions ------------------------------------------------------------------------------ ---@class BasketTransaction local BasketTransaction = {} ---@param primary integer|string ---@param secondary? integer|string ---@param value integer ---@param stat_value integer ---@param quantity integer function BasketTransaction:add_item(primary, secondary, value, stat_value, quantity) end ---Latent: run the checkout. ---@return boolean function BasketTransaction:run() end transactions = {} ---@param category integer|string ---@param action integer|string ---@return BasketTransaction function transactions.create_basket(category, action) end ---@param category integer|string ---@param action integer|string ---@param item integer|string ---@param value integer ---@return boolean function transactions.run_service(category, action, item, value) end ---@return boolean function transactions.can_use_transactions() end ------------------------------------------------------------------------------ -- FileMgr (sandboxed to Documents/YimMenuV2/scripts) ------------------------------------------------------------------------------ FileMgr = {} ---@return string function FileMgr.GetMenuRootPath() end ---@param path string ---@return boolean function FileMgr.CreateDir(path) end ---@param path string function FileMgr.DeleteFile(path) end ---@param path string ---@return boolean function FileMgr.DoesFileExist(path) end ---@param path string ---@param extension string ---@param recursive? boolean ---@return string[] function FileMgr.FindFiles(path, extension, recursive) end ---@param path string ---@return string function FileMgr.ReadFileContent(path) end ---@param path string ---@param content string ---@param append? boolean ---@return boolean function FileMgr.WriteFileContent(path, content, append) end ------------------------------------------------------------------------------ -- internal (testing only) ------------------------------------------------------------------------------ internal = {} ---@param model string function internal.spawn_vehicle(model) end ------------------------------------------------------------------------------ -- ImGui (used inside category:imgui / group:imgui callbacks) -- -- Value-editing widgets return the (possibly updated) value plus a changed -- flag, e.g. `value, changed = ImGui.Checkbox("Label", value)`. Only the most -- commonly used functions are typed here; the full set is listed in -- docs/lua-api.md. Flag/cond/col arguments use the ImGui* enum tables. ------------------------------------------------------------------------------ ImGui = {} -- Windows & layout ---@param name string ---@param open? boolean ---@param flags? integer ---@return boolean, boolean function ImGui.Begin(name, open, flags) end function ImGui.End() end ---@param name string ---@param size_x? number ---@param size_y? number ---@param border? boolean ---@param flags? integer ---@return boolean function ImGui.BeginChild(name, size_x, size_y, border, flags) end ---@param name string ---@param id integer explicit ImGuiID (e.g. from ImGui.GetID) ---@param size_x? number ---@param size_y? number ---@param child_flags? integer ImGuiChildFlags ---@param window_flags? integer ImGuiWindowFlags ---@return boolean function ImGui.BeginChildEx(name, id, size_x, size_y, child_flags, window_flags) end function ImGui.EndChild() end function ImGui.BeginGroup() end function ImGui.EndGroup() end function ImGui.Separator() end ---@param text string function ImGui.SeparatorText(text) end ---@param offset? number ---@param spacing? number function ImGui.SameLine(offset, spacing) end function ImGui.NewLine() end function ImGui.Spacing() end ---@param x number ---@param y number function ImGui.Dummy(x, y) end ---@param width? number function ImGui.Indent(width) end ---@param width? number function ImGui.Unindent(width) end ---@param disabled? boolean function ImGui.BeginDisabled(disabled) end function ImGui.EndDisabled() end -- Text ---@param text string function ImGui.Text(text) end ---@param r number ---@param g number ---@param b number ---@param a number ---@param text string function ImGui.TextColored(r, g, b, a, text) end ---@param text string function ImGui.TextDisabled(text) end ---@param text string function ImGui.TextWrapped(text) end ---@param label string ---@param text string function ImGui.LabelText(label, text) end ---@param text string function ImGui.BulletText(text) end -- Buttons & toggles ---@param label string ---@param size_x? number ---@param size_y? number ---@return boolean function ImGui.Button(label, size_x, size_y) end ---@param label string ---@return boolean function ImGui.SmallButton(label) end ---@param label string ---@param value boolean ---@return boolean value, boolean pressed function ImGui.Checkbox(label, value) end ---@param label string ---@param active boolean ---@return boolean function ImGui.RadioButton(label, active) end -- Combo / list ---@param label string ---@param preview string ---@param flags? integer ---@return boolean function ImGui.BeginCombo(label, preview, flags) end function ImGui.EndCombo() end ---@param label string ---@param current integer ---@param items string[] ---@param items_count integer ---@param popup_max? integer ---@return integer current, boolean changed function ImGui.Combo(label, current, items, items_count, popup_max) end ---@param label string ---@param selected? boolean ---@param flags? integer ---@param size_x? number ---@param size_y? number ---@return boolean function ImGui.Selectable(label, selected, flags, size_x, size_y) end -- Sliders ---@param label string ---@param value number ---@param min number ---@param max number ---@param format? string ---@return number value, boolean used function ImGui.SliderFloat(label, value, min, max, format) end ---@param label string ---@param value integer ---@param min integer ---@param max integer ---@param format? string ---@return integer value, boolean used function ImGui.SliderInt(label, value, min, max, format) end -- Drags ---@param label string ---@param value number ---@param speed? number ---@param min? number ---@param max? number ---@param format? string ---@return number value, boolean used function ImGui.DragFloat(label, value, speed, min, max, format) end ---@param label string ---@param value integer ---@param speed? number ---@param min? integer ---@param max? integer ---@param format? string ---@return integer value, boolean used function ImGui.DragInt(label, value, speed, min, max, format) end -- Inputs ---@param label string ---@param text string ---@param flags? integer ---@return string text, boolean changed function ImGui.InputText(label, text, flags) end ---@param label string ---@param hint string ---@param text string ---@param flags? integer ---@return string text, boolean changed function ImGui.InputTextWithHint(label, hint, text, flags) end ---@param label string ---@param value number ---@param step? number ---@param step_fast? number ---@param format? string ---@param flags? integer ---@return number value, boolean used function ImGui.InputFloat(label, value, step, step_fast, format, flags) end ---@param label string ---@param value integer ---@param step? integer ---@param step_fast? integer ---@param flags? integer ---@return integer value, boolean used function ImGui.InputInt(label, value, step, step_fast, flags) end -- Colors ---@param label string ---@param color number[] ---@param flags? integer ---@return number[] color, boolean used function ImGui.ColorEdit3(label, color, flags) end ---@param label string ---@param color number[] ---@param flags? integer ---@return number[] color, boolean used function ImGui.ColorEdit4(label, color, flags) end ---@param label string ---@param color number[] ---@param flags? integer ---@return number[] color, boolean used function ImGui.ColorPicker3(label, color, flags) end ---@param label string ---@param color number[] ---@param flags? integer ---@return number[] color, boolean used function ImGui.ColorPicker4(label, color, flags) end -- Trees ---@param label string ---@param text? string ---@return boolean function ImGui.TreeNode(label, text) end function ImGui.TreePop() end ---@param label string ---@param flags? integer ---@return boolean function ImGui.CollapsingHeader(label, flags) end -- Tabs ---@param id string ---@param flags? integer ---@return boolean function ImGui.BeginTabBar(id, flags) end function ImGui.EndTabBar() end ---@param label string ---@return boolean function ImGui.BeginTabItem(label) end function ImGui.EndTabItem() end -- Tooltips & popups function ImGui.BeginTooltip() end function ImGui.EndTooltip() end ---@param text string function ImGui.SetTooltip(text) end ---@param id string ---@param flags? integer ---@return boolean function ImGui.BeginPopup(id, flags) end function ImGui.EndPopup() end ---@param id string ---@param flags? integer function ImGui.OpenPopup(id, flags) end function ImGui.CloseCurrentPopup() end -- Item queries ---@param flags? integer ---@return boolean function ImGui.IsItemHovered(flags) end ---@return boolean function ImGui.IsItemActive() end ---@param button? integer ---@return boolean function ImGui.IsItemClicked(button) end -- Misc ---@param width number function ImGui.PushItemWidth(width) end function ImGui.PopItemWidth() end ---@param width number function ImGui.SetNextItemWidth(width) end ---@param id integer|string function ImGui.PushID(id) end function ImGui.PopID() end ---@return number x, number y function ImGui.GetContentRegionAvail() end ---@param text string ---@return number x, number y function ImGui.CalcTextSize(text) end ---@return number function ImGui.GetFrameRate() end -- Enum tables (name -> integer). Values mirror the entries registered in -- src/core/scripting/libraries/ImGui.cpp for the bundled ImGui (1.92.x). ---@enum ImGuiWindowFlags ImGuiWindowFlags = { None = 0, NoTitleBar = 1, NoResize = 2, NoMove = 4, NoScrollbar = 8, NoScrollWithMouse = 16, NoCollapse = 32, AlwaysAutoResize = 64, NoBackground = 128, NoSavedSettings = 256, NoMouseInputs = 512, MenuBar = 1024, HorizontalScrollbar = 2048, NoFocusOnAppearing = 4096, NoBringToFrontOnFocus = 8192, AlwaysVerticalScrollbar = 16384, AlwaysHorizontalScrollbar = 32768, NoNavInputs = 65536, NoNavFocus = 131072, UnsavedDocument = 262144, NoNav = 196608, NoDecoration = 43, NoInputs = 197120, ChildWindow = 16777216, Tooltip = 33554432, Popup = 67108864, Modal = 134217728, ChildMenu = 268435456, NavFlattened = 536870912, } ---@enum ImGuiChildFlags ImGuiChildFlags = { None = 0, Borders = 1, Border = 1, AlwaysUseWindowPadding = 2, ResizeX = 4, ResizeY = 8, AutoResizeX = 16, AutoResizeY = 32, AlwaysAutoResize = 64, FrameStyle = 128, NavFlattened = 256, } ---@enum ImGuiCond ImGuiCond = { None = 0, Always = 1, Once = 2, FirstUseEver = 4, Appearing = 8 } ---@enum ImGuiCol ImGuiCol = { Text = 0, TextDisabled = 1, WindowBg = 2, ChildBg = 3, PopupBg = 4, Border = 5, BorderShadow = 6, FrameBg = 7, FrameBgHovered = 8, FrameBgActive = 9, TitleBg = 10, TitleBgActive = 11, TitleBgCollapsed = 12, MenuBarBg = 13, ScrollbarBg = 14, ScrollbarGrab = 15, ScrollbarGrabHovered = 16, ScrollbarGrabActive = 17, CheckMark = 18, SliderGrab = 19, SliderGrabActive = 20, Button = 21, ButtonHovered = 22, ButtonActive = 23, Header = 24, HeaderHovered = 25, HeaderActive = 26, Separator = 27, SeparatorHovered = 28, SeparatorActive = 29, ResizeGrip = 30, ResizeGripHovered = 31, ResizeGripActive = 32, InputTextCursor = 33, TabHovered = 34, Tab = 35, TabSelected = 36, TabSelectedOverline = 37, TabDimmed = 38, TabDimmedSelected = 39, TabDimmedSelectedOverline = 40, PlotLines = 41, PlotLinesHovered = 42, PlotHistogram = 43, PlotHistogramHovered = 44, TableHeaderBg = 45, TableBorderStrong = 46, TableBorderLight = 47, TableRowBg = 48, TableRowBgAlt = 49, TextLink = 50, TextSelectedBg = 51, TreeLines = 52, DragDropTarget = 53, NavCursor = 54, NavWindowingHighlight = 55, NavWindowingDimBg = 56, ModalWindowDimBg = 57, COUNT = 58, -- renamed aliases TabActive = 36, TabUnfocused = 38, TabUnfocusedActive = 39, NavHighlight = 54, ModalWindowDarkening = 57, } ---@enum ImGuiStyleVar ImGuiStyleVar = { Alpha = 0, DisabledAlpha = 1, WindowPadding = 2, WindowRounding = 3, WindowBorderSize = 4, WindowMinSize = 5, WindowTitleAlign = 6, ChildRounding = 7, ChildBorderSize = 8, PopupRounding = 9, PopupBorderSize = 10, FramePadding = 11, FrameRounding = 12, FrameBorderSize = 13, ItemSpacing = 14, ItemInnerSpacing = 15, IndentSpacing = 16, CellPadding = 17, ScrollbarSize = 18, ScrollbarRounding = 19, GrabMinSize = 20, GrabRounding = 21, ImageBorderSize = 22, TabRounding = 23, TabBorderSize = 24, TabBarBorderSize = 25, TabBarOverlineSize = 26, TableAngledHeadersAngle = 27, TableAngledHeadersTextAlign = 28, TreeLinesSize = 29, TreeLinesRounding = 30, ButtonTextAlign = 31, SelectableTextAlign = 32, SeparatorTextBorderSize = 33, SeparatorTextAlign = 34, SeparatorTextPadding = 35, COUNT = 36, } ---@enum ImGuiDir ImGuiDir = { None = -1, Left = 0, Right = 1, Up = 2, Down = 3, COUNT = 4 } ---@enum ImGuiKey ImGuiKey = { Tab = 512, LeftArrow = 513, RightArrow = 514, UpArrow = 515, DownArrow = 516, PageUp = 517, PageDown = 518, Home = 519, End = 520, Insert = 521, Delete = 522, Backspace = 523, Space = 524, Enter = 525, Escape = 526, A = 546, C = 548, V = 567, X = 569, Y = 570, Z = 571, KeyPadEnter = 615, COUNT = 645, } ---@enum ImGuiMouseButton -- Keys are registered with the full ImGuiMouseButton_ prefix. ImGuiMouseButton = { ImGuiMouseButton_Left = 0, ImGuiMouseButton_Right = 1, ImGuiMouseButton_Middle = 2, ImGuiMouseButton_COUNT = 5, } ---@enum ImGuiMouseCursor ImGuiMouseCursor = { None = -1, Arrow = 0, TextInput = 1, ResizeAll = 2, ResizeNS = 3, ResizeEW = 4, ResizeNESW = 5, ResizeNWSE = 6, Hand = 7, Wait = 8, Progress = 9, NotAllowed = 10, COUNT = 11, } ---@enum ImGuiHoveredFlags ImGuiHoveredFlags = { None = 0, ChildWindows = 1, RootWindow = 2, AnyWindow = 4, NoPopupHierarchy = 8, AllowWhenBlockedByPopup = 32, AllowWhenBlockedByActiveItem = 128, AllowWhenOverlappedByItem = 256, AllowWhenOverlappedByWindow = 512, AllowWhenDisabled = 1024, NoNavOverride = 2048, AllowWhenOverlapped = 768, RectOnly = 928, RootAndChildWindows = 3, ForTooltip = 4096, Stationary = 8192, DelayNone = 16384, DelayShort = 32768, DelayNormal = 65536, NoSharedDelay = 131072, } ---@enum ImGuiFocusedFlags ImGuiFocusedFlags = { None = 0, ChildWindows = 1, RootWindow = 2, AnyWindow = 4, RootAndChildWindows = 3, } ---@enum ImGuiComboFlags ImGuiComboFlags = { None = 0, PopupAlignLeft = 1, HeightSmall = 2, HeightRegular = 4, HeightLarge = 8, HeightLargest = 16, NoArrowButton = 32, NoPreview = 64, HeightMask = 30, } ---@enum ImGuiInputTextFlags ImGuiInputTextFlags = { None = 0, CharsDecimal = 1, CharsHexadecimal = 2, CharsScientific = 4, CharsUppercase = 8, CharsNoBlank = 16, AllowTabInput = 32, EnterReturnsTrue = 64, EscapeClearsAll = 128, CtrlEnterForNewLine = 256, ReadOnly = 512, Password = 1024, AlwaysOverwrite = 2048, AutoSelectAll = 4096, ParseEmptyRefVal = 8192, DisplayEmptyRefVal = 16384, NoHorizontalScroll = 32768, NoUndoRedo = 65536, ElideLeft = 131072, CallbackCompletion = 262144, CallbackHistory = 524288, CallbackAlways = 1048576, CallbackCharFilter = 2097152, CallbackResize = 4194304, CallbackEdit = 8388608, } ---@enum ImGuiColorEditFlags ImGuiColorEditFlags = { None = 0, NoAlpha = 2, NoPicker = 4, NoOptions = 8, NoSmallPreview = 16, NoInputs = 32, NoTooltip = 64, NoLabel = 128, NoSidePreview = 256, NoDragDrop = 512, NoBorder = 1024, AlphaOpaque = 2048, AlphaNoBg = 4096, AlphaPreviewHalf = 8192, AlphaBar = 65536, HDR = 524288, DisplayRGB = 1048576, DisplayHSV = 2097152, DisplayHex = 4194304, Uint8 = 8388608, Float = 16777216, PickerHueBar = 33554432, PickerHueWheel = 67108864, InputRGB = 134217728, InputHSV = 268435456, DefaultOptions_ = 177209344, DisplayMask_ = 7340032, DataTypeMask_ = 25165824, PickerMask_ = 100663296, InputMask_ = 402653184, } ---@enum ImGuiTreeNodeFlags ImGuiTreeNodeFlags = { None = 0, Selected = 1, Framed = 2, AllowOverlap = 4, NoTreePushOnOpen = 8, NoAutoOpenOnLog = 16, DefaultOpen = 32, OpenOnDoubleClick = 64, OpenOnArrow = 128, Leaf = 256, Bullet = 512, FramePadding = 1024, SpanAvailWidth = 2048, SpanFullWidth = 4096, SpanLabelWidth = 8192, SpanAllColumns = 16384, LabelSpanAllColumns = 32768, NavLeftJumpsToParent = 131072, CollapsingHeader = 26, -- renamed aliases AllowItemOverlap = 4, NavLeftJumpsBackHere = 131072, } ---@enum ImGuiSelectableFlags ImGuiSelectableFlags = { None = 0, DontClosePopups = 1, SpanAllColumns = 2, AllowDoubleClick = 4, Disabled = 8, AllowItemOverlap = 16, } ---@enum ImGuiPopupFlags ImGuiPopupFlags = { None = 0, MouseButtonLeft = 0, MouseButtonRight = 1, MouseButtonMiddle = 2, MouseButtonMask_ = 31, MouseButtonDefault_ = 1, NoReopen = 32, NoOpenOverExistingPopup = 128, NoOpenOverItems = 256, AnyPopupId = 1024, AnyPopupLevel = 2048, AnyPopup = 3072, } ---@enum ImGuiTabBarFlags ImGuiTabBarFlags = { None = 0, Reorderable = 1, AutoSelectNewTabs = 2, TabListPopupButton = 4, NoCloseWithMiddleMouseButton = 8, NoTabListScrollingButtons = 16, NoTooltip = 32, DrawSelectedOverline = 64, FittingPolicyResizeDown = 128, FittingPolicyScroll = 256, FittingPolicyMask_ = 384, FittingPolicyDefault_ = 128, } ---@enum ImGuiTabItemFlags ImGuiTabItemFlags = { None = 0, UnsavedDocument = 1, SetSelected = 2, NoCloseWithMiddleMouseButton = 4, NoPushId = 8, NoTooltip = 16, } ---@enum ImGuiTableFlags ImGuiTableFlags = { None = 0, Resizable = 1, Reorderable = 2, Hideable = 4, Sortable = 8, NoSavedSettings = 16, ContextMenuInBody = 32, RowBg = 64, BordersInnerH = 128, BordersOuterH = 256, BordersInnerV = 512, BordersOuterV = 1024, BordersH = 384, BordersV = 1536, BordersInner = 640, BordersOuter = 1280, Borders = 1920, NoBordersInBody = 2048, NoBordersInBodyUntilResize = 4096, SizingFixedFit = 8192, SizingFixedSame = 16384, SizingStretchProp = 24576, SizingStretchSame = 32768, SizingMask_ = 57344, NoHostExtendX = 65536, NoHostExtendY = 131072, NoKeepColumnsVisible = 262144, PreciseWidths = 524288, NoClip = 1048576, PadOuterX = 2097152, NoPadOuterX = 4194304, NoPadInnerX = 8388608, ScrollX = 16777216, ScrollY = 33554432, SortMulti = 67108864, SortTristate = 134217728, } ---@enum ImGuiTableColumnFlags ImGuiTableColumnFlags = { None = 0, Disabled = 1, DefaultSort = 4, WidthStretch = 8, WidthFixed = 16, NoResize = 32, NoReorder = 64, NoHide = 128, NoClip = 256, NoSort = 512, NoSortAscending = 1024, NoSortDescending = 2048, NoHeaderLabel = 4096, NoHeaderWidth = 8192, PreferSortAscending = 16384, PreferSortDescending = 32768, IndentEnable = 65536, IndentDisabled = 131072, IsEnabled = 16777216, IsVisible = 33554432, IsSorted = 67108864, IsHovered = 134217728, WidthMask_ = 24, IndentMask_ = 196608, StatusMask_ = 251658240, NoDirectResize_ = 1073741824, }