Exports dos scripts
Os exports de cada script ai-*, e as APIs de outros scripts que eles substituem.
Os scripts ai-* nunca chamam uns aos outros para uma tarefa compartilhada: itens, chaves, alertas, prisão, médico, aparências, itens do radial e clima passam pelo ai-core (a lib), que chama os exports abaixo. Chame-os você mesmo só para o que é específico daquele script. Exports tipados em @aicore-fivem/shared funcionam com resourceExport("ai-..."); os outros com callExport(resource, name, ...args) ou uma chamada simples a exports[...].
Quando um script substitui outro (provide), os nomes de export do outro script também respondem, então exports.ox_inventory:AddItem(...) chega ao ai-inventory.
ai-lib
A interface compartilhada do jogador. Exports de cliente, tipados AiLibClientExports; notify, progress, showPrompt, menu, input, skillCheck e lockpick da lib os chamam por você.
| Export | O quê |
|---|---|
Notify(notification: Notification): void | Um cartão de notificação (text, title?, kind, duration?). |
ShowProgress(label: string, duration: number): void | Mostra a barra de progresso por duration ms (quem chama executa a ação). |
HideProgress(): void | Esconde a barra. |
ShowPrompt(id: string, text: string, at?: { x, y, z }): void | Mostra ou atualiza o prompt de quem chama; at o desenha sobre um ponto do mundo. |
HidePrompt(id: string): void | Esconde um prompt. |
OpenMenu(requestId: number, request: MenuRequest): void | Um menu; a escolha chega como MENU_EVENTS.menuResult. |
OpenInput(requestId: number, request: InputRequest): void | Um diálogo de entrada; os valores chegam como MENU_EVENTS.inputResult. |
OpenMinigame(requestId: number, request: MinigameRequest): void | Um skill check ou lockpick; o resultado chega como MENU_EVENTS.menuResult. |
CloseDialog(): void | Fecha o menu ou a entrada abertos de quem chama (respondido com null). |
O evento de servidor ai-lib:client:notify (LIB_UI.notifyEvent) com uma Notification mostra um cartão na tela daquele jogador.
ai-inventory
Exports de servidor (próprios): os outros scripts ai-* chegam a eles pela camada de inventário do ai-core.
| Export | O quê |
|---|---|
AddItem(inv: number | string, item: string, count: number, metadata?, slot?): boolean | Adiciona itens. |
RemoveItem(inv: number | string, item: string, count: number, metadata?, slot?): boolean | Remove itens. |
GetItemCount(inv: number | string, item: string, metadata?): number | Quantos há. |
GetItems(inv: number | string): { name, label, count, slot, metadata }[] | Cada pilha com seu rótulo. |
CanCarryItem(inv: number | string, item: string, count: number, metadata?): boolean | Se cabe. |
RegisterUsableItem(name: string, handler: (source, item) => unknown): void | Se handler retornar false o item fica; senão a quantidade consume dele é tirada. |
RegisterStash(name: string, label: string, slots: number, maxWeight: number, jobs?: string[], personal?: boolean): void | Um stash. |
OpenInventory(source: number, inv: number | string): boolean | Abre um inventário na tela de um jogador. |
ClearInventory(inv: number | string): void | Esvazia o inventário. |
Items(name?: string): unknown | Uma definição de item (formato do ox), ou todas. |
GetWeight(inv: number | string): { weight, maxWeight } | null | Peso carregado e limite em gramas. |
Exports de cliente: OpenInventory(type, data), CloseInventory(), OpenSelf() (o próprio inventário com o chão, o porta-malas ou o porta-luvas ao redor), GetItemCount(item), HasItem(items: string \| string[] \| Record<string, number>, amount?), GetPlayerItems().
Evento local do servidor ai-inventory:usedItem (source, name, slot, metadata, status).
API do ox_inventory
O ai-inventory faz provide de ox_inventory e responde aos seus exports (ox_inventory 2.44). Os inventários têm os nomes do ox: o source de um jogador, um nome de stash, { id, owner } para stashes pessoais, uma placa para porta-malas.
- Servidor:
AddItem(retornasuccess, response, chamacb),RemoveItem,GetItem,GetItemCount,Search(count/slots),CanCarryItem,CanCarryWeight,CanCarryAmount,GetInventory,GetInventoryItems,GetSlot,GetSlotWithItem,GetSlotsWithItem,GetSlotIdWithItem,GetSlotIdsWithItem,GetEmptySlot,SetMetadata,SetDurability,SetMaxWeight,RegisterStash,ClearInventory,Items,ItemList,forceOpenInventory(stash, jogador, loja),CreateTemporaryStash,CustomDrop,RemoveInventory,SwapSlots. - Cliente:
openInventory,closeInventory,Search,GetItemCount,GetPlayerItems,GetPlayerWeight,GetPlayerMaxWeight,Items,useSlot,getCurrentWeapon/GetCurrentWeapon;displayMetadata,weaponWheel,setStashTargetsão aceitos e não fazem nada. - Sem resposta: hooks (
registerHook,removeHooks),UpdateVehicle,ConfiscateInventory/ReturnInventory,GetContainerFromSlot,RegisterShop(as lojas vêm do painel).
API do qb-inventory
O ai-inventory faz provide de qb-inventory (API 2.0). Os itens retornados trazem os dois formatos: count / metadata e amount / info.
- Servidor:
AddItem(identifier, item, amount, slot, info),RemoveItem,HasItem(nome, lista ou{ name = amount }),GetItemCount,GetItemByName,GetItemsByName,GetItemBySlot,CanAddItem,GetFreeWeight,GetSlots,ClearInventory,SetItemData,CreateInventory,OpenInventory,OpenInventoryById,RemoveInventory,CloseInventory. - Cliente:
HasItem,CloseInventory. - Sem resposta: hooks e listeners,
CreateShop/OpenShop,SetInventory,GetInventory,SaveInventory,LoadInventory,UseItem,GetFirstSlotByItem,GetSlotsByItem,GetTotalWeight.
ai-vehicles
Veículos com dono. Exports de servidor, tipados AiVehiclesServerExports. VehicleOwner é { type: "character" \| "job" \| "gang" \| "resource", id }.
| Export | O quê |
|---|---|
CreateVehicle(owner: VehicleOwner, model: string, garage: string | null, props?): { id, plate } | null | Registra um novo veículo com dono. |
GetVehicle(ref: number | string): OwnedVehicle | null | Um veículo por id ou placa. |
GetVehicles(owner: VehicleOwner): OwnedVehicle[] | Veículos de um personagem online, ou a frota de um emprego ou gangue. |
IsOwnedPlate(plate: string): boolean | Se uma placa pertence a um veículo com dono. |
GetVehicleIdByEntity(entity: number): number | null | O id de um veículo com dono que está no mundo. |
GetPlateOwners(): [plate, type, id][] | Todo veículo com dono em memória (depois siga ai-vehicles:owners). |
GetEntity(id: number): number | null | A entidade de um veículo no mundo. |
SaveVehicle(id: number, change: { props?, fuel?, engine?, body?, state?, garage? }): void | Salva condição e aparência; o tuning salvo continua. |
SaveTuning(id: number, props: unknown): void | Salva as props completas com o tuning (só oficinas de tuning). |
StoreVehicle(id: number, garage: string | null, state?: VehicleState): void | Guarda um veículo em uma garagem (garage, out, impound). |
SetOwner(id: number, owner: VehicleOwner): void | Muda o dono. |
DeleteVehicle(id: number): void | Apaga um veículo. |
SpawnVehicle(id: number, at: { x, y, z, heading }, asker: number, cb: (netId: number | null) => void, purpose?: KeyPurpose, setup?): void | Cria a entidade; cb recebe seu net id. |
O ai-vehicles faz provide de qbx_vehicles: GetPlayerVehicles(filters), GetPlayerVehicle(id), CreatePlayerVehicle(request), SetPlayerVehicleOwner(id, citizenid), DeletePlayerVehicles(idType, idValue), GetVehicleIdByPlate(plate), DoesPlayerVehiclePlateExist(plate), SaveVehicle(entity, options) (filtros por citizenid precisam do dono online).
ai-vehicleshop
| Export | O quê |
|---|---|
GetCatalogPrice(model: string): number | null | O preço de catálogo de um modelo (servidor). |
ai-vehiclekeys
Exports de servidor, também sob qbx_vehiclekeys. Um veículo é uma entidade ou uma placa. Os scripts dão chaves pelo ai-core (GiveVehicleKeys, vehicleKeys da lib), que os chama enquanto o ai-vehiclekeys é o sistema de chaves ativo.
| Export | O quê |
|---|---|
HasKeys(source: number, vehicle: number | string): boolean | Se o jogador tem as chaves. |
GiveKeys(source: number, vehicle: number | string): void | Dá as chaves. |
RemoveKeys(source: number, vehicle: number | string): void | Tira as chaves. |
SetLockState(vehicle, state) | Tranca ("lock", true, 2) ou destranca uma entidade de veículo. |
IsPlayerNearVehicle(source, vehicle) | Se o jogador está perto do veículo. |
ai-death
Exports de servidor, tipados AiDeathServerExports; Revive e IsDead também sob qbx_medical. Os scripts usam a camada médica do ai-core (medical da lib) em vez deles.
| Export | O quê |
|---|---|
Revive(source: number): boolean | Levanta um jogador caído; false quando não está caído. |
IsDead(source: number): boolean | Se o jogador está caído. |
Heal(source: number): void | Vida cheia para um jogador que não está caído. |
O evento de cliente hospital:client:Revive enviado pelo servidor reanima o jogador.
ai-prison
Exports de servidor; a camada de prisão do ai-core (prison da lib) os chama.
| Export | O quê |
|---|---|
JailPlayer(source, minutes, by?) | Prende um jogador; true quando funcionou. |
ReleasePlayer(source) | Solta um jogador preso. |
GetJailTime(source) | Minutos restantes (0 quando livre). |
ai-policealert
| Export | O quê |
|---|---|
DispatchAlert(alert: DispatchAlert): void | Mostra um cartão de alerta; só a camada de despacho do ai-core o chama (os scripts usam SendDispatchAlert / dispatch da lib). |
ai-doorlock
Exports de servidor, tipados AiDoorlockServerExports; portas pelo id do painel. Também responde a setDoorState e getDoor do ox_doorlock.
| Export | O quê |
|---|---|
SetDoorState(id: string, locked: boolean): void | Tranca ou destranca uma porta. |
IsLocked(id: string): boolean | Se uma porta está trancada. |
ai-banking
Dinheiro de sociedade para scripts QB (uma conta é o nome de um emprego). Exports de servidor, também sob qb-banking; getAccountMoney, addAccountMoney, removeAccountMoney do Renewed-Banking respondem igual.
| Export | O quê |
|---|---|
GetAccountBalance(job) | O saldo bancário da conta de um emprego. |
AddMoney(job, amount, reason) | Adiciona a ela. |
RemoveMoney(job, amount, reason) | Tira dela. |
ai-hud
| Export | Lado | O quê |
|---|---|---|
OpenSettings() | Cliente | Abre as configurações do HUD. |
SetMinimapAlways(on: boolean) | Cliente | Um interruptor próprio de um admin: o minimapa a pé, independente do painel. |
GetMinimapAlways(): boolean | Cliente | Se está ligado. |
GetNeeds(source) | Servidor | hunger, thirst, stress do jogador, ou null. |
SetNeed(source, need, value) | Servidor | Define uma necessidade. |
AddNeed(source, need, delta) | Servidor | Muda uma necessidade em delta. |
ai-smallresources
Exports de cliente.
| Export | O quê |
|---|---|
GetSeatbelt(): boolean | null | Se o jogador usa cinto; null a pé ou com os cintos desligados. As mudanças chegam como ai-smallresources:seatbelt. |
IsHandsUp(): boolean | Mãos para cima (os scripts usam gestures da lib). |
IsPointing(): boolean | Apontando. |
ai-sirens
Exports de cliente para veículos de emergência; vehicle é por padrão aquele em que o jogador está sentado. As mudanças de estado funcionam no cliente do motorista.
| Export | O quê |
|---|---|
SetLights(vehicle, on) | Luzes ligadas ou desligadas. |
ToggleLights(vehicle) | Alterna as luzes. |
SetSirenTone(vehicle, tone) | Tom 0-3 (0 = desligada). |
ToggleSiren(vehicle) | Sirene ligada ou desligada. |
CycleTone(vehicle) | O próximo tom. |
GetSirenTone(vehicle) | O tom atual. |
AreLightsOn(vehicle) | Se as luzes estão ligadas. |
GetAirManuState(vehicle) | O estado do tom manual. |
GetLightbarModel(vehicle) | O modelo da barra de luzes, ou null. |
ai-exitsleeping
| Export | Lado | O quê |
|---|---|---|
AddCreateCheck(id, fn(source, charId, coords) => boolean) | Servidor | Retorne false para não deixar corpo dormindo (um apartamento, uma área de evento); removido quando o recurso que o adicionou para. |
PlayerLoaded() | Cliente | Acorda o personagem quando o modo de despertar é "export". |
SetHidden(reason, hidden) | Cliente | Esconde todo corpo dormindo neste cliente enquanto houver algum motivo (interiores, shells). |
SetCarryBlocked(reason, blocked) | Cliente | Esconde a opção de carregar enquanto houver algum motivo. |
ai-appearance
Exports de cliente, tipados AiAppearanceClientExports; os scripts usam appearance da lib.
| Export | O quê |
|---|---|
ApplyAppearance(ped: number, appearance: unknown): boolean | Coloca uma aparência do ai-appearance em um ped do modelo dela. |
GetPedAppearance(ped: number): unknown | A aparência do jogador local, null para outros peds. |
ai-radialmenu
Exports de cliente próprios (tipados AiRadialClientExports): AddItem(item) (onSelect é aceito como onPressed), RemoveItem(id, parent?), Refresh(). Os scripts usam radial da lib.
Ele faz provide das APIs de outras rodas:
qb-radialmenu:AddOption(data, id?)retorna o id,RemoveOption(id).tgiann-radialmenu-target:AddMenuItem(item | items, parentId?),RemoveMenuItem(id, parentId?),ClearMenuItems(),RegisterSubMenu({ id, items }),RefreshMenu(),DisableMenu(state),IsMenuDisabled(),OpenMenu(),CloseMenu(),IsMenuOpen(),HasMenuItem(id),SetMenuItemHidden(id, state),IsMenuItemHidden(id),UpdateMenuItem(id, { label?, icon? }),ResetMenuItem(id).
ai-target
Responde à API de cliente do ox_target sob ai-target e ox_target: addSphereZone, addBoxZone, addPolyZone, removeZone, zoneExists, addModel, removeModel, addEntity, removeEntity, addLocalEntity, removeLocalEntity, addGlobalPed / Vehicle / Object / Player e seus removeGlobal*, disableTargeting, isActive. addGlobalOption não é oferecido (registra um aviso). Os scripts usam Points da lib, que escolhe prompt ou target pela configuração do dono.
ai-voice
Substitui o pma-voice 7.x (faz provide de pma-voice, mumble-voip, tokovoip, toko-voip, tokovoip_script).
- Servidor, nomes do pma-voice:
setPlayerRadio,setPlayerCall,getPlayersInRadioChannel/GetPlayersInRadioChannel,addChannelCheck,overrideRadioNameGetter,isValidPlayer. - Servidor, próprios:
getBackend,setPlayerProximityMode(source, index),setPlayerRange(source, metres | null),getPlayerProximity(source),toggleMute(source, seconds?),addProximityCheck(fn(source, index, distance))(false recusa),addPlayerRadioListen/removePlayerRadioListen/setPlayerRadioActive(source, channel),getPlayerRadioChannels(source)({ active, channels }),addCallCheck(fn(source, callId))(true permite),setPlayerCallSpeaker(source, on)/getPlayerCallSpeaker(source),setPlayerSubmix(source, name | null). - Cliente: os exports de cliente do pma-voice (
setRadioChannel,setCallChannel,setRadioVolume,setCallVolume,setVoiceProperty,overrideProximityRange,toggleMutePlayer,toggleRadioAnim...) maisaddRadioDisableBit/removeRadioDisableBit,registerCustomSubmix,setEffectSubmix; própriosaddRadioChannel/removeRadioChannel/setActiveRadioChannel/getRadioChannels,setCallSpeaker/getCallSpeaker,setRadioAnimDisabled,createSubmix(name, spec)/getSubmix/editSubmix/listSubmixes,cycleProximity,getBackend,isRadioTalking. - Eventos locais: cliente
pma-voice:setTalkingMode,pma-voice:radioActive,pma-voice:toggleRadioAnim; servidorpma-voice:playerMuted.
ai-weathersync
Exports sob ai-weathersync e qb-weathersync (todo o seu contrato): setWeather, setTime, setBlackout, setTimeFreeze, setDynamicWeather, nextWeatherStage, getWeatherState, getTime, getBlackoutState, getTimeFreezeState, getDynamicWeather. Os scripts usam GetWeather / SetWeather... do ai-core (world da lib), que funcionam com qualquer script de clima.
ai-chat
Substitui o recurso chat do FiveM.
- Cliente: exports
addMessage(message),addSuggestion(name, help, params); eventoschat:addMessage,chatMessage (author, color, text),chat:addSuggestion(s),chat:removeSuggestion,chat:addMode/chat:removeMode,chat:clear. - Servidor: exports
addMessage(target, message),registerMessageHook(fn),registerMode(data); eventochatMessage (source, author, text)antes da entrega (cancele-o para descartar a mensagem).
ai-mysql
Substitui o oxmysql: exports sob ai-mysql e oxmysql: query, single, scalar, insert, update, prepare, rawExecute, transaction, startTransaction, store, isReady, awaitConnection, execute, fetch, cada um também como <name>_async / <name>Sync. Também os nomes do ghmattimysql (execute, scalar, transaction, store) e do mysql-async (mysql_execute, mysql_insert, mysql_fetch_all, mysql_fetch_scalar, mysql_transaction, mysql_store); eventos oxmysql:error, oxmysql:transaction-error. Veja Banco de dados.