Lib para Lua
aiLib - a lib para recursos Lua, carregada do ai-lib como o ox_lib.
O ai-lib traz um port da lib para Lua. Ele roda dentro do recurso que o carrega, então pontos, keybinds, comandos e callbacks pertencem a esse recurso e vão embora com ele.
dependency 'ai-lib'
shared_script '@ai-lib/init.lua'Os módulos carregam no primeiro uso: aiLib.notify(...), aiLib.Points.new(), aiLib.addCommand(...). Chamadas que aguardam (triggerServerCallback, menu.show, progress, spawnVehicle, progressFor) precisam rodar em uma thread. Os tipos são a classe AiLib no init.lua do ai-lib.
Recursos em JavaScript sem bundler carregam @ai-lib/dist/client.js / server.js no lugar: o mesmo global aiLib com os helpers /shared da lib TypeScript mais os de /client ou /server.
Os dois lados
| Função | O quê |
|---|---|
aiLib.side | 'client' ou 'server'. |
aiLib.every(ms, fn, options?) | Trabalho periódico na única thread agendadora do recurso (0 = todo frame); job:set(active), job:stop(), job.running. Uma tarefa nunca faz Wait. |
aiLib.waitFor(check, timeout?, interval?) | Espera até check retornar um valor. |
aiLib.formatText(text, ...) | Marcadores {0}. |
aiLib.locale(resource?) | Retorna t(key, ...) e a tabela de idioma combinada. |
aiLib.fail(error) | { ok = false, error = error } para ações do servidor. |
aiLib.numbers.round(value, decimals?), groupDigits(value, separator?), headingTo(from, to) | Helpers numéricos. |
aiLib.stripGameText(text) | Remove tags HTML e códigos do GTA. |
aiLib.notify(...) | Cliente (text, kind?, duration?); servidor (source, text, kind?, duration?). |
aiLib.inventory, aiLib.world, aiLib.appearance | Pelo ai-core; os membros mudam conforme o lado (abaixo). |
Cliente
| Função | O quê |
|---|---|
aiLib.cache | ped, playerId, serverId, vehicle, seat, weapon; cache.onChange(key, handler). |
aiLib.playerData.get(key), playerData.onChange(key, handler) | Os dados do jogador do ai-core (character, money, jobs, duty, gangs, activeGang). |
aiLib.triggerServerCallback(name, args?, timeout?) | Pergunta ao servidor; retorna a resposta e um erro. |
aiLib.onServerCallback(name, handler), aiLib.onServerEvent(name, handler) | Responde ao servidor, escuta eventos do servidor. |
aiLib.callAction(name, args?, { fallback, timeout?, silent? }) | Executa uma ação no servidor, mostra a recusa traduzida, retorna a resposta ok ou nil. |
aiLib.progress(options) | A barra de progresso do ai-lib (anim, scenario, canCancel, whileDead, freeze, disable); true quando terminou. progress.cancel(), progress.isRunning(). |
aiLib.menu.show(request, listeners?) | Um menu ({ title, items, back? }, listeners onHover, onToggle); retorna o id escolhido. |
aiLib.input(request) | Um diálogo de entrada ({ title, confirm, fields }); retorna os valores ou nil. |
aiLib.itemPicker({ title, target? }) | Ferramentas de admin: a grade de itens do ai-core. |
aiLib.skillCheck(difficulty, keys?) | Skill check; true quando toda etapa foi acertada. |
aiLib.lockpick({ difficulty?, pins?, picks? }) | 'opened', 'broken' ou 'cancelled'. |
aiLib.showPrompt(id, text), hidePrompt(id), onPromptPressed(handler) | O prompt do ai-lib. |
aiLib.Points.new() | Pontos de interação: :add(id, options), :addModel(id, options), :addVehicle(id, options), :remove(id), :clear(), :refresh(). |
aiLib.Zones.new() | Zonas: :add(id, options), :remove, :clear, :isInside. |
aiLib.LocalPed.new(options) | Um ped local (attach, seat); :remove(). |
aiLib.Blips.new(), aiLib.Blips.create(options) | Blips: :add, :get, :remove, :clear. |
aiLib.Keybind.new(options) | Uma tecla reconfigurável (hint, icon, hintLabel); :disable(state). |
aiLib.player | coords, heading, distanceTo, freeze, teleport (ground = 'find' ou sem z: o chão sob x / y), playAnim, stopAnim. |
aiLib.playerPed(serverId) | O ped de um jogador, 0 fora do scope. |
aiLib.nearestPlayer(metres, { from?, filter? }) | O id de servidor do outro jogador mais próximo. |
aiLib.nearestVehicle(metres, { networked?, notOwn?, filter? }) | O veículo mais próximo. |
aiLib.waitForEntity(netId, timeout?) | A entidade quando ela existir aqui, 0 após o tempo limite. |
aiLib.waypoint() | O waypoint do mapa { x, y }. |
aiLib.onShot(handler) | O frame em que o ped local atira. |
aiLib.fadeOut(ms?), aiLib.fadeIn(ms?) | Fades de tela. |
aiLib.controls.disable(reason, controls, group?), disableAll(reason, except?), enable(reason) | Controles desativados. |
aiLib.hud.hide(reason), show(reason), visible() | Escondem os HUDs. |
aiLib.keyHints.show(id, { label, keybind?, key?, icon? }), hide(id) | Linhas de dica de tecla. |
aiLib.gestures.isHandsUp(), isPointing(), provider() | Mãos para cima e apontar. |
aiLib.radial.add(item), remove(id), refresh() | Itens do radial pelo ai-core. |
aiLib.inventory.openInventory(), hasItem(item, count?), currentWeapon() | O inventário ativo. |
aiLib.world.pauseSync(reason), resumeSync(reason) | Pausam a sincronização de clima e hora. |
aiLib.appearance.apply(ped, look), read(ped) | Aparências pelo script de roupas ativo. |
aiLib.requestModel, requestAnimDict, requestAnimSet, requestPtfxAsset, requestTextureDict, requestWeaponAsset (name, timeout?) | Carregam um recurso do jogo. |
aiLib.pedHeadshot(ped, transparent?, timeout?) | O handle e o nome de textura de um retrato. |
aiLib.locationName(coords?), vehicleLabel(vehicle), groundZ(x, y, z?) | Nomes e altura do chão. |
aiLib.raycast(from, to, options?) | Uma sondagem em linha: { coords, normal, entity } ou nil. |
local points = aiLib.Points.new()
points:add('shop', {
coords = vector3(25.7, -1347.3, 29.5),
label = 'Open shop',
icon = 'basket-shopping',
onPressed = function()
local pick = aiLib.menu.show({ title = 'Shop', items = { { id = 'water', label = 'Water' } } })
if pick then aiLib.callAction('myshop:buy', { pick }, { fallback = 'BUY_FAILED' }) end
end,
})Servidor
| Função | O quê |
|---|---|
aiLib.onClientCallback(name, handler, { rate?, lock?, ace? }) | Responde a callbacks do cliente pelo portão. |
aiLib.onClientEvent(name, handler, options?) | Um evento de rede do cliente pelo portão. |
aiLib.triggerClientCallback(name, source, args?, timeout?) | Pergunta a um cliente; retorna a resposta e um erro. |
aiLib.isAdmin(source, ace?) | Se o jogador é admin do ai-core (ou tem ace). |
aiLib.RateLimit.new(count, windowMs) | Um limite de rajadas por jogador: limit:take(source), limit:release(source). |
aiLib.progressFor(source, options) | A barra do ai-lib no cliente do jogador, cronometrada pelo servidor (aguarda). |
aiLib.minigameFor(source, options) | Um minigame no cliente do jogador: 'won', 'lost' ou 'broken' (aguarda). |
aiLib.addCommand(name, { help?, params?, restricted? }, handler) | Um comando; handler(source, args, raw). |
aiLib.onCharacter({ loaded?, unloaded? }) | Carga e descarga de personagens, repetindo os personagens carregados antes de um reinício. |
aiLib.online | character, name(src, fallback), jobs, gangs, jobGrade, gangGrade, dutyJob, sources (pergunta ao ai-core a cada chamada). |
aiLib.spawnVehicle(options) | Um veículo do servidor (model, coords, asker, plate, fuel, keysTo, purpose, driver, seats, props, setup, locked, bucket, persistent, bags); aguarda. |
aiLib.playersNear(source, radius), playersNearEntity(entity, radius) | Jogadores por perto. |
aiLib.nearestPlayerTo(source, metres, filter?), nearestVehicleTo(source, metres, filter?) | O jogador ou veículo mais próximo. |
aiLib.vehicleFromNet(netId), vehicleNearPlayer(source, netId, { metres?, driver? }) | Um veículo vivo a partir do net id de um cliente, ou 0. |
aiLib.aiLog(channel, message, options?) | Um log pelo ai-core. |
aiLib.inventory | addItem, removeItem, getItemCount, hasItem, canCarryItem, getItems, clearInventory, registerStash, openInventory, registerUsableItem, getItemDefinition. |
aiLib.vehicleKeys.give(source, vehicle, purpose?), remove, has | Chaves de veículos pelo ai-core. |
aiLib.phone | number, sourceOf, hasPhone, mail, message, notify. |
aiLib.dispatch.alert(alert) | Um alerta policial pelo ai-core. |
aiLib.prison.jail(src, minutes, by?), release(src), timeLeft(src) | Penas de prisão. |
aiLib.world | getWeather, setWeather, getTime, setTime, setBlackout, freezeTime. |
aiLib.appearance.get(charId), provider() | A aparência salva de um personagem (aguarda). |
Não existe no lado Lua: as classes do painel de administração, PendingActions, PlayerMap, Cooldowns, os leitores rígidos de entrada, as classes de state bags (Lua lê Entity(e).state por conta própria) e o banco de dados (recursos Lua usam a API oxmysql do ai-mysql).