AI Core
API başvurusuLib: server

Araçlar

spawnVehicle, vehicleType, randomPlate, en yakın araçlar, client net id’lerinden entity’ler, vehicleKeys, yakıt ve garajlar.

TypeScript
import { spawnVehicle, vehicleKeys, fuel, garages, vehicleFromNet } from "@aicore-fivem/lib/server";

Araç oluşturma

spawnVehicle

Server’da ağa bağlı (networked) bir araç oluşturur ve tek çağrıda kurar: plaka, yakıt, görünüm, kilit, routing bucket, doğru amaç için anahtarlar, bir sürücü ve yolcular. Her script aracı için kullan (meslek araçları, kiralıklar, garaj araçları, admin spawn’ları).

Taraf: Server · Bekler: evet (TypeScript’te Promise, Lua’da thread’i yield eder)

Signature
spawnVehicle(options: SpawnVehicleOptions): Promise<number | null>
Lua
local vehicle = aiLib.spawnVehicle(options) -- entity ya da nil, bir thread içinde çağır

Parametreler

Prop

Type

SpawnVehicleOptions

Prop

Type

Dönüş değeri

Promise<number | null>: araç entity handle’ı. Model yoksa (asker client’ı öyle söylediyse), entity 5 saniye içinde oluşturulmadıysa ya da tip bilinmiyorsa null.

Örnek

import { onClientCallback, spawnVehicle, hasCharacter, near } from "@aicore-fivem/lib/server";
import { fail } from "@aicore-fivem/lib/shared";

const DEPOT = { x: 895.4, y: -179.3, z: 74.7 };

onClientCallback(
  "my-taxi:start",
  async (source) => {
    const vehicle = await spawnVehicle({
      model: "taxi",
      coords: { x: 899.1, y: -180.6, z: 73.8, heading: 238 },
      asker: source,
      keysTo: source,
      purpose: "job",
      driver: source,
      fuel: 100,
      setup: { dirt: 0 },
    });
    if (!vehicle) return fail("SPAWN_FAILED");
    return { ok: true, netId: NetworkGetNetworkIdFromEntity(vehicle) };
  },
  { guards: [hasCharacter(), near(DEPOT, 5)], lock: true },
);

Anahtarlar, server plakayı okuyana kadar (en fazla 3 saniye) bekler: sahip client’ın ilk senkronundan önce server boş bir plaka okur. Oturtulan oyuncular oturana kadar en fazla 2 saniye boyunca yeniden yerleştirilir. TypeScript’te bir client’tan gelen model tipi, ikinci bir oyuncunun client’ı aynı cevabı verene kadar yalnızca o oyuncuya hizmet eder; Lua karşılığı aldığı ilk cevabı tutar.

vehicleType

Bir oyuncunun client’ına sorulan bir modelin spawn tipi. Para almadan önce bir modelin var olduğunu kontrol etmek için kullan.

Taraf: Server · Bekler: evet (Promise)

Signature
vehicleType(model: string, asker: number): Promise<string | null>

Lua karşılığı yok: asker ile aiLib.spawnVehicle bunu kontrol eder ve bilinmeyen bir model için nil döndürür.

Prop

Type

Dönüş değeri

Promise<string | null>: automobile, bike, boat, heli, plane, submarine, trailer ya da train; oyunda böyle bir araç yoksa ya da client geçerli bir cevap vermediyse null. İki farklı oyuncunun client’ı bir cevapta anlaştığında cevap herkes için saklanır; böylece değiştirilmiş tek bir client yalnızca kendi spawn’larını bozabilir.

Örnek

import { onClientCallback, vehicleType } from "@aicore-fivem/lib/server";
import { fail, oneArg, readText } from "@aicore-fivem/lib/shared";

onClientCallback("my-dealer:buy", { args: oneArg((v) => readText(v, 32)), lock: true }, async (source, model) => {
  if (!(await vehicleType(model, source))) return fail("UNKNOWN_MODEL");
  // parayı al, sonra spawnVehicle(...)
  return { ok: true };
});

randomPlate

Oyunun kendisininkine benzeyen rastgele bir plaka (iki rakam, üç harf, üç rakam) ya da senin ön ekin ve ardından rakamlar.

Taraf: Server · Bekler: hayır

Signature
randomPlate(prefix?: string): string

Lua karşılığı yok (plaka vermezsen aiLib.spawnVehicle rastgele bir plaka ayarlar).

Prop

Type

Dönüş değeri: 8 karakterlik bir plaka (42ABC123 ya da randomPlate("TAXI") için TAXI1234). Benzersizliği kontrol edilmez: saklamadan önce kendi tablonu kontrol et.

const plate = randomPlate("RENT");

Araç bulmak

nearestVehicleTo

Bir oyuncuya metres mesafe içindeki, filtrenden geçen en yakın araç. Oyuncunun oturduğu araç önceliklidir.

Taraf: Server · Bekler: hayır

Signature
nearestVehicleTo(source: number, metres: number, filter?: (vehicle: number) => boolean): number
Lua
local vehicle = aiLib.nearestVehicleTo(source, metres, filter) -- entity ya da 0

Prop

Type

Dönüş değeri: araç entity’si ya da hiç yoksa 0.

const vehicle = nearestVehicleTo(source, 5);
if (!vehicle) return fail("NO_VEHICLE");

Server’daki her aracı dolaşır: komutlar ve aksiyonlar (hız sınırlı) için kullan, asla bir tick içinde değil.

nearestVehicleAt

Bir noktaya metres mesafe içindeki en yakın araç. Bir spawn noktasının boş olduğunu kontrol etmek için kullan.

Taraf: Server · Bekler: hayır

Signature
nearestVehicleAt(point: { x: number; y: number; z: number }, metres: number, filter?: (vehicle: number) => boolean): number

Lua karşılığı yok.

Dönüş değeri: araç entity’si ya da hiç yoksa 0. nearestVehicleTo gibi her aracı dolaşır.

const SPOT = { x: 899.1, y: -180.6, z: 73.8 };
if (nearestVehicleAt(SPOT, 3)) return fail("SPOT_BLOCKED");

Client girdisinden entity’ler

Bir client asla bir entity handle’ı değil, bir network id gönderir. Bunlar bir net id’yi canlı server entity’sine çevirir ve kontrol eder; böylece NetworkGetEntityFromNetworkId + DoesEntityExist + GetEntityType zincirini asla elle çağırmazsın.

entityFromNet

Bir client’ın network id’sinin arkasındaki canlı entity.

Taraf: Server · Bekler: hayır

Signature
entityFromNet(netId: unknown, type?: 1 | 2 | 3): number

Lua karşılığı yok (Lua’da vehicleFromNet var).

Prop

Type

Dönüş değeri: entity ya da değer pozitif bir tam sayı değilse, ağa bağlı değilse, yok olduysa veya başka bir tipteyse 0.

const prop = entityFromNet(rawNetId, 3);
if (!prop) return fail("NOT_FOUND");

pedFromNet

entityFromNet(netId, 1): canlı ped ya da 0.

Taraf: Server · Bekler: hayır

Signature
pedFromNet(netId: unknown): number

Lua karşılığı yok.

const ped = pedFromNet(rawNetId);

vehicleFromNet

entityFromNet(netId, 2): canlı araç ya da 0.

Taraf: Server · Bekler: hayır

Signature
vehicleFromNet(netId: unknown): number
Lua
local vehicle = aiLib.vehicleFromNet(netId) -- entity ya da 0
const vehicle = vehicleFromNet(rawNetId);
if (!vehicle) return fail("NO_VEHICLE");

vehicleNearPlayer

Bir client’ın network id’sinin arkasındaki araç; ama yalnızca oyuncu ona yakınsa (ya da sürücü koltuğundaysa).

Taraf: Server · Bekler: hayır

Signature
vehicleNearPlayer(source: number, netId: unknown, options?: { metres?: number; driver?: boolean }): number
Lua
local vehicle = aiLib.vehicleNearPlayer(source, netId, options) -- entity ya da 0

Prop

Type

Dönüş değeri: araç ya da id hatalıysa, araç yok olduysa veya oyuncu çok uzaktaysa / sürücü değilse 0.

onClientCallback("my-tow:hook", { args: oneArg(readId), lock: true }, (source, netId) => {
  const vehicle = vehicleNearPlayer(source, netId, { metres: 6 });
  if (!vehicle) return fail("TOO_FAR");
  return { ok: true };
});

Anahtarlar

vehicleKeys ai-core’un anahtar katmanı üzerinden gider: sunucunun çalıştırdığı anahtar script’i (ai-vehiclekeys ya da sahibin seçtiği başka biri) cevap verir. Bir araç, bir server entity handle’ı ya da bir plakadır.

vehicleKeys.give

Bir oyuncuya bir aracın anahtarlarını verir.

Taraf: Server · Bekler: hayır

Signature
vehicleKeys.give(source: number, vehicle: number | string, purpose?: KeyPurpose): void
Lua
aiLib.vehicleKeys.give(source, vehicle, purpose)

Prop

Type

Dönüş değeri void.

vehicleKeys.give(source, vehicle, "rental");

vehicleKeys.remove

Bir oyuncunun bir araca ait anahtarlarını alır.

Taraf: Server · Bekler: hayır

Signature
vehicleKeys.remove(source: number, vehicle: number | string): void
Lua
aiLib.vehicleKeys.remove(source, vehicle)

Dönüş değeri void.

vehicleKeys.remove(source, "RENT1234");

vehicleKeys.has

Bir oyuncunun anahtarlara sahip olup olmadığı.

Taraf: Server · Bekler: hayır

Signature
vehicleKeys.has(source: number, vehicle: number | string): boolean
Lua
local has = aiLib.vehicleKeys.has(source, vehicle)

Dönüş değeri boolean. Anahtar script’i bunu söyleyemiyorsa ya da hiçbiri çalışmıyorsa da true; bu yüzden onu değerli bir şeyin tek kilidi olarak kullanma.

if (!vehicleKeys.has(source, vehicle)) return fail("NO_KEYS");

Yakıt

fuel, hangi yakıt script’i çalışıyorsa ai-core’un yakıt katmanı üzerinden bir aracın yakıtını (0 ile 100 arası) okur ve ayarlar. Server’da Lua karşılığı yok: ai-core’un GetVehicleFuel / SetVehicleFuel export’larını çağır.

fuel.get

Taraf: Server · Bekler: hayır

Signature
fuel.get(vehicle: number): number | null

Dönüş değeri: bir server araç entity’sinin seviyesi (0 ile 100 arası) ya da yakıtı yoksa null.

const level = fuel.get(vehicle) ?? 0;

fuel.set

Taraf: Server · Bekler: hayır

Signature
fuel.set(vehicle: number, level: number): boolean

Prop

Type

Dönüş değeri: ayarlandıysa true, yanlış bir araç için false.

fuel.set(vehicle, 100);

fuel.provider

Taraf: Server · Bekler: hayır

Signature
fuel.provider(): string | null

Dönüş değeri: cevap veren yakıt script’inin resource adı (ai-fuel, ox_fuel, LegacyFuel...) ya da hiçbiri çalışmıyorsa null.

console.log(`fuel through ${fuel.provider() ?? "nothing"}`);

Garajlar

garages, hangi garaj script’i çalışıyorsa ai-core’un garaj katmanı üzerinden gider; her script yalnızca dışarıya açtığı şeylere cevap verir. Lua karşılığı yok.

garages.impound

Bir aracı otoparka (impound) gönderir ya da by için garaj script’inin impound formunu açar.

Taraf: Server · Bekler: hayır

Signature
garages.impound(vehicle: number, by?: number): boolean

Prop

Type

Dönüş değeri: garaj script’i aracı aldıysa true. Hiçbir şey almadıysa false: aracı kendin sil.

if (!garages.impound(vehicle, source)) DeleteEntity(vehicle);

garages.store

Bir aracı bir garaja koyar.

Taraf: Server · Bekler: hayır

Signature
garages.store(vehicle: number, garage?: string | null, by?: number): boolean

Prop

Type

Dönüş değeri: konduysa true, hiçbir şey almadıysa false.

if (!garages.store(vehicle, "legion", source)) return fail("STORE_FAILED");

garages.open

Garaj script’inin garaj menüsünü bir oyuncu için açar.

Taraf: Server · Bekler: hayır

Signature
garages.open(source: number, garage?: string | null): boolean

Dönüş değeri: açıldıysa true, script’in böyle bir menüsü yoksa false.

garages.open(source, "pillbox");

garages.stored

Bir oyuncunun garajlardaki ya da otoparktaki araçları.

Taraf: Server · Bekler: evet (Promise)

Signature
garages.stored(source: number): Promise<GaragedVehicle[] | null>

Dönüş değeri: GaragedVehicle[] (plate, model, garage, impounded) ya da script bunu söyleyemiyorsa veya ai-core durmuşsa null.

const list = await garages.stored(source);
const impounded = list?.filter((v) => v.impounded).length ?? 0;

garages.provider

Taraf: Server · Bekler: hayır

Signature
garages.provider(): string | null

Dönüş değeri: cevap veren garaj script’i ya da hiçbiri çalışmıyorsa null.

if (!garages.provider()) console.warn("no garage script runs");

Bu sayfada