Eksporty serwerowe ai-core
Każdy eksport serwerowy ai-core - sygnatura i działanie, pogrupowane według obszaru.
Typowane jako AiCoreServerExports w @aicore-fivem/shared (exports.ts). W TypeScript weź jeden uchwyt na plik; w Lua wywołuj bezpośrednio exports['ai-core'].
import { resourceExport } from "@aicore-fivem/lib/server";
const core = resourceExport("ai-core");Typy używane poniżej: CharacterInfo, AiPlayerData, JobMembership ({ job, grade }), GangMembership ({ gang, grade }), InventoryRef (id serwerowe gracza albo id innego ekwipunku: nazwa schowka, tablica), KeyPurpose (purchase, garage, job, rental, temporary), wszystkie w @aicore-fivem/shared.
Postacie i gracze
| Eksport | Co |
|---|---|
GetPlayerData(src: number): AiPlayerData | null | Wszystko, co ai-core trzyma dla wczytanego gracza: postać, pieniądze, prace, służba, gangi, metadane. |
GetCharacter(src: number): CharacterInfo | null | Wczytana postać (id, citizenid, imię i nazwisko, data urodzenia, płeć, narodowość). |
GetSourceByCharId(charId: number): number | null | Id serwerowe gracza grającego tą postacią. |
GetSourceByCitizenId(citizenid: string): number | null | To samo według citizen id. |
GetLoadedSources(): number[] | Id serwerowe każdego gracza z wczytaną postacią. |
GetFivemId(src: number): string | null | Identyfikator FiveM gracza. |
SwitchCharacter(src: number): boolean | Odsyła gracza do ekranu postaci. |
SetOfflinePosition(charId: number, position: { x, y, z, heading? }): boolean | Przenosi punkt pojawienia się zapisanej (niewczytanej) postaci; false, gdy jest wczytana. |
GetPlayersInScope(source: number): number[] | Gracze w zasięgu OneSync danego gracza (około 424 m). |
const character = core.GetCharacter(source);
if (character) console.log(character.firstname, character.lastname);local character = exports['ai-core']:GetCharacter(source)
if character then print(character.firstname, character.lastname) endPieniądze
Konta to te z listy Accounts w panelu (domyślnie cash, bank). reason trafia do księgi.
| Eksport | Co |
|---|---|
GetMoney(src: number, account: string): number | null | Saldo gracza. |
AddMoney(src: number, account: string, amount: number, reason?: string): boolean | Dodaje pieniądze. |
RemoveMoney(src: number, account: string, amount: number, reason?: string): boolean | Zabiera pieniądze; false, gdy konto nie może zapłacić. |
SetMoney(src: number, account: string, amount: number, reason?: string): boolean | Ustawia saldo. |
GetSharedMoney(ownerType: "job" | "gang", ownerId: string, account: string): number | null | Wspólne konto pracy lub gangu. |
AddSharedMoney(ownerType, ownerId, account, amount: number, reason?: string): boolean | Dodaje do wspólnego konta. |
RemoveSharedMoney(ownerType, ownerId, account, amount: number, reason?: string): boolean | Zabiera ze wspólnego konta. |
TransferMoney(from: MoneyRef, to: MoneyRef, amount: number, reason?: string, fee?: number): boolean | Przenosi pieniądze między dwoma kontami w jednej transakcji z oboma wpisami w księdze; from płaci też fee. |
GetAccountTypes(): Record<string, AccountTypeDefinition> | Lista kont (label, start, allowNegative). |
MoneyRef to { source, account } dla wczytanego gracza albo { owner: "job" \| "gang", id, account } dla wspólnego konta.
if (core.RemoveMoney(source, "bank", 500, "fine")) {
core.AddSharedMoney("job", "police", "bank", 500, "fine");
}if exports['ai-core']:RemoveMoney(source, 'bank', 500, 'fine') then
exports['ai-core']:AddSharedMoney('job', 'police', 'bank', 500, 'fine')
endPrace i gangi
Postać może mieć kilka prac i gangów, z co najwyżej jedną pracą na służbie i jednym aktywnym gangiem.
| Eksport | Co |
|---|---|
GetJobs(src: number): JobMembership[] | null | Każde członkostwo w pracy. |
GetCurrentJob(src: number): JobMembership | null | Praca, którą inne skrypty widzą jako „tę” pracę: na służbie, inaczej ostatnia na służbie, inaczej pierwsza. |
GetDutyJob(src: number): string | null | Praca, w której gracz jest na służbie. |
SetDuty(src: number, job: string | null): boolean | Wprowadza gracza na służbę w pracy albo zdejmuje ze służby (null). |
SetJob(src: number, job: string, grade: number): boolean | Dodaje pracę albo zmienia jej stopień. |
RemoveJob(src: number, job: string): boolean | Usuwa członkostwo w pracy. |
GetOnDutyCount(job: string): number | Ilu graczy jest na służbie w pracy. |
IsPrimeTime(job?: string): boolean | Prime time dla pracy (godziny tgiann-policealert, gdy działa, inaczej godziny z panelu). |
GetGangs(src: number): GangMembership[] | null | Każde członkostwo w gangu. |
GetActiveGang(src: number): string | null | Aktywny gang. |
SetGang(src: number, gang: string, grade: number): boolean | Dodaje gang albo zmienia jego stopień. |
RemoveGang(src: number, gang: string): boolean | Usuwa członkostwo w gangu. |
SetActiveGang(src: number, gang: string | null): boolean | Wybiera aktywny gang. |
GetJobDefinitions(): Record<string, JobDefinition> | Każda definicja pracy (kopia: do rzadkich odczytów). |
GetJobDefinition(job: string): JobDefinition | null | Jedna praca: label, type, defaultDuty, listed?, grades (label, salary, boss). |
GetGangDefinitions(): Record<string, GangDefinition> | Każda definicja gangu. |
GetGangDefinition(gang: string): GangDefinition | null | Jeden gang: label, grades. |
if (core.GetDutyJob(source) === "police") {
const officers = core.GetOnDutyCount("police");
}if exports['ai-core']:GetDutyJob(source) == 'police' then
local officers = exports['ai-core']:GetOnDutyCount('police')
endMetadane i ustawienia serwera
| Eksport | Co |
|---|---|
GetMeta(src: number, key: string): unknown | Jedna wartość z metadanych postaci. |
SetMeta(src: number, key: string, value: unknown): boolean | Ustawia wartość metadanych. |
GetBranding(): Branding | Nazwa serwera, podtytuł, hasła i tło z ustawień General w panelu. |
GetUpdates(): UpdateInfo[] | Skrypty z nowszym wydaniem na GitHub niż uruchomiona wersja. |
Przedmioty
Warstwa ekwipunku ai-core: odpowiada aktywny ekwipunek (false, 0 albo pusto, gdy żaden nie działa).
| Eksport | Co |
|---|---|
AddItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): boolean | Dodaje przedmioty. |
RemoveItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): boolean | Usuwa przedmioty. |
GetItemCount(inv: InventoryRef, item: string, metadata?: ItemMetadata): number | Ile jest danego przedmiotu. |
HasItem(inv: InventoryRef, item: string, count?: number): boolean | Czy ekwipunek ma co najmniej count. |
CanCarryItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata): boolean | Czy przedmioty się zmieszczą. |
GetItems(inv: InventoryRef): InventoryStack[] | Każdy stos (name, label, count, slot, metadata). |
ClearInventory(inv: InventoryRef): void | Opróżnia ekwipunek. |
RegisterStash(name: string, label: string, slots: number, maxWeight: number, jobs?: string[]): void | Schowek; zapamiętany i rejestrowany ponownie w każdym ekwipunku, który staje się aktywny. |
OpenInventory(source: number, inv: InventoryRef): boolean | Otwiera schowek albo inny ekwipunek na ekranie gracza. |
RegisterUsableItem(name: string, handler: UsableItemHandler): void | handler(source, item) działa przy użyciu; zwrócenie false zostawia przedmiot. Zachowany po restarcie ekwipunku. |
GetItemDefinition(name: string): ItemDefinition | null | Jeden przedmiot (name, label, weight, unique, close, description, image?). |
GetItemDefinitions(): Record<string, ItemDefinition> | Każdy przedmiot. |
UseItem(source: number, name: string, item?: unknown): unknown | Uruchamia zarejestrowany handler (wywołuje go most). |
IsUsableItem(name: string): boolean | Czy handler jest zarejestrowany. |
core.RegisterUsableItem("bandage", (source, item) => {
// heal, then let the inventory take the item
});
if (core.CanCarryItem(source, "water", 2)) core.AddItem(source, "water", 2);exports['ai-core']:RegisterUsableItem('bandage', function(source, item)
-- heal, then let the inventory take the item
end)
if exports['ai-core']:CanCarryItem(source, 'water', 2) then
exports['ai-core']:AddItem(source, 'water', 2)
endKlucze pojazdów
Pojazd to uchwyt encji serwerowej albo tablica; purpose domyślnie to temporary.
| Eksport | Co |
|---|---|
GiveVehicleKeys(source: number, vehicle: number | string, purpose?: KeyPurpose): void | Daje klucze przez aktywny system kluczy. |
RemoveVehicleKeys(source: number, vehicle: number | string): void | Odbiera klucze. |
HasVehicleKeys(source: number, vehicle: number | string): boolean | Czy gracz ma klucze. |
exports['ai-core']:GiveVehicleKeys(source, 'AB12CDE', 'rental')Leczenie
| Eksport | Co |
|---|---|
GetMedicalSystem(): string | null | Skrypt śmierci, do którego ai-core przekazuje wywołania. |
RevivePlayer(source: number): boolean | Podnosi powalonego gracza tam, gdzie leży; false, gdy nie jest powalony albo nie działa żaden skrypt śmierci. |
HealPlayer(source: number): boolean | Pełne zdrowie dla gracza, który nie jest powalony. |
IsPlayerDead(source: number): boolean | Czy gracz jest powalony. |
Wygląd
| Eksport | Co |
|---|---|
GetAppearanceSystem(): string | null | Skrypt ubrań, z którego ai-core czyta wygląd. |
GetCharacterAppearance(charId: number, done: (look: CharacterAppearance | null) => void): void | Zapisany wygląd postaci (wczytanej lub nie); done dostaje { model, data } albo null. |
exports['ai-core']:GetCharacterAppearance(charId, function(look)
if look then TriggerClientEvent('myscript:dress', source, look) end
end)Telefon
Odpowiada skrypt telefonu, który działa (brak: null albo false).
| Eksport | Co |
|---|---|
GetPhoneNumber(source: number): string | null | Numer gracza. |
GetSourceByPhone(number: string): number | null | Gracz z tym numerem. |
HasPhone(source: number): boolean | Czy gracz ma telefon. |
SendPhoneMail(to: number | string, mail: PhoneMail): boolean | Mail (sender, subject, message) do gracza lub na numer. |
SendPhoneMessage(from: string, to: number | string, text: string): boolean | Wiadomość tekstowa. |
PhoneNotify(source: number, notification: PhoneNotification): boolean | Powiadomienie telefonu (title, message, app?). |
Dispatch
| Eksport | Co |
|---|---|
SendDispatchAlert(alert: DispatchAlert): boolean | Pokazuje alert członkom jobs na służbie przez aktywny system alertów; false, gdy żaden nie działa. |
DispatchAlert: title oraz opcjonalnie code, message, coords, jobs, source (podejrzany), blip (sprite, color?, scale?), duration (sekundy), icon, priority (normal albo high). Teksty są już przetłumaczone.
core.SendDispatchAlert({
code: "10-90",
title: "Store robbery",
jobs: ["police"],
source,
priority: "high",
});exports['ai-core']:SendDispatchAlert({
code = '10-90', title = 'Store robbery', jobs = { 'police' }, source = source, priority = 'high',
})Więzienie
| Eksport | Co |
|---|---|
JailPlayer(source: number, minutes: number, by?: number): boolean | Wsadza gracza do więzienia przez działający skrypt więzienia. |
ReleasePlayer(source: number): boolean | Wypuszcza gracza. |
GetJailTime(source: number): number | Pozostałe minuty. |
Czas i pogoda
Kontrakt qb-weathersync działającego skryptu pogody (null albo false, gdy żaden nie działa).
| Eksport | Co |
|---|---|
GetWeather(): string | null | Obecny typ pogody. |
SetWeather(type: string): boolean | Ustawia pogodę (EXTRASUNNY, RAIN...). |
GetTime(): { hour, minute } | null | Czas w grze. |
SetTime(hour: number, minute?: number): boolean | Ustawia czas w grze. |
SetBlackout(on: boolean): boolean | Włącza lub wyłącza blackout. |
FreezeTime(on: boolean): boolean | Zamraża lub odmraża zegar. |
Buckety routingu
| Eksport | Co |
|---|---|
AcquireBucket(tag: string): number | Wolny bucket routingu dla wywołującego zasobu (bez populacji, ścisła blokada); zwalniany, gdy zasób się zatrzyma. |
ReleaseBucket(id: number): boolean | Oddaje bucket (tylko zasób, który go wziął); najpierw przenieś z niego graczy. |
Logi
| Eksport | Co |
|---|---|
Log(channel: string, message: string, options?: LogOptions): void | Wysyła log wywołującego zasobu do każdego włączonego dostawcy (Discord, Fivemanage, FiveM Stats, konsola). options: level, source, target, metadata. |
LogChannels(channels: Record<string, LogChannel>): void | Opisuje kanały wywołującego zasobu (dataset, active); wywołaj raz przy starcie. |
exports['ai-core']:Log('sales', 'Sold a car', { source = source, metadata = { price = 25000 } })Połączenie
| Eksport | Co |
|---|---|
AddConnectionCheck(id: string, check: (source, identifiers) => string | null | undefined): void | Sprawdzenie, przez które przechodzi każdy łączący się gracz: zwróć tekst odmowy albo null, żeby go wpuścić. |
RegisterReplacement(remove: string | string[], keep?: string): void | Deklaruje, że keep (domyślnie wywołujący) czyni remove zbędnym: ostrzeżenie w konsoli, wejścia odrzucane, gdy działają oba. |
GetConflicts(): { keep, remove, running, from }[] | Skrypty zainstalowane obok tego, który je zastępuje. |
Panel administratora i komendy
| Eksport | Co |
|---|---|
RegisterAdminPanel(resource: string): void | Zasób z panelem zgłasza się (robi to AdminPanel liba). |
AdminPanelChanged(delta: AdminDelta): void | Zasób panelu zmienił rekord; ai-core przekazuje to administratorom z otwartym panelem. |
RegisterCommands(resource: string, commands: CommandInfo[]): void | addCommand liba wypisuje komendy zasobu w zakładce Commands. |
GetLookupValues(source: LookupSource): string[] | Wartości listy wyboru (item, job, gang, account...) do walidacji w panelu. |
RegisterExternalPanel(panel: { id?, label, icon?, description?, command?, url? }): void | Pokazuje na pulpicie własny ekran ustawień innego skryptu (otwierany przez command albo osadzony url). |
exports['ai-core']:RegisterExternalPanel({
label = 'My script', icon = 'gear', description = 'Its own settings', command = 'myscriptconfig',
})