AI Core
API başvurusuAI Core: server export’ları

Araç anahtarları

Sunucunun çalıştırdığı anahtar script’i hangisiyse onun üzerinden araç anahtarı ver, al ve kontrol et.

Her anahtar çağrısı ai-core üzerinden gider, asla bir anahtar script’inin kendi export’ları üzerinden değil (ai-vehiclekeys dahil). ai-core onu aktif anahtar sistemine iletir: panelin Key script ayarının seçtiği ya da çalışan ilk sistem. Hiçbir anahtar script’i çalışmıyorken her oyuncu her anahtara sahip sayılır.

Bir araç ya bir server entity handle’ı (CreateVehicleServerSetter’ın ya da spawnVehicle’ın döndürdüğü sayı) ya da bir plaka metni olarak verilir. Plaka önce kırpılır ve büyük harfe çevrilir, bu yüzden " ab12cde " ve "AB12CDE" aynı anahtardır.

Her anahtarın, anahtar sistemine oyuncunun onu neden aldığını söyleyen bir amacı vardır. Bazı anahtar sistemleri bunları farklı ele alır (satın alınan bir araç yeni bir anahtar eşyası, bir iş aracı kontağa sabit bir anahtar alır). Bkz. KeyPurpose.

AmaçNe zaman
purchaseOyuncu artık aracın sahibi (galeri, admin verdi): yeni bir anahtar, eski kopyalar çalışmayı bırakır.
garageDepodan çıkarılan sahipli bir araç: sahibinde anahtar zaten vardır.
jobVardiya için bir iş aracı.
rentalKiralama süresi boyunca kiralık bir araç.
temporaryKısa ömürlü başka her şey (admin spawn’ı, test sürüşü, soygun aracı). Varsayılan.

GiveVehicleKeys

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

Taraf: Server · Bekler: hayır · Lib: vehicleKeys.give (ve spawnVehicle({ keysTo, purpose }) onları senin için verir)

İmza
GiveVehicleKeys(source: number, vehicle: number | string, purpose?: KeyPurpose): void
Lua
exports['ai-core']:GiveVehicleKeys(source, vehicle, 'rental')

Parametreler

Prop

Type

Dönüş değeri

Hiçbir şey. Araç entity’si yoksa, plaka boşsa, source bir sayı değilse ya da hiçbir anahtar sistemi çalışmıyorsa çağrı hiçbir şey yapmaz. Bir anahtar sisteminin hatası fırlatılmaz, loglanır.

Örnek

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

const core = resourceExport("ai-core");
const SPAWN = { x: -1023.5, y: -2694.1, z: 13.9, heading: 150 };

onClientCallback("myscript:rentScooter", { lock: true }, async (source) => {
  if (!core.RemoveMoney(source, "cash", 100, "scooter_rental")) return fail("NOT_ENOUGH_MONEY");
  const vehicle = await spawnVehicle({ model: "faggio", coords: SPAWN, asker: source });
  if (!vehicle) {
    core.AddMoney(source, "cash", 100, "scooter_rental_refund");
    return fail("SPAWN_FAILED");
  }
  core.GiveVehicleKeys(source, vehicle, "rental");
  return { ok: true };
});

Yeni oluşturulmuş bir aracın, sahibi olan client onu senkronlayana kadar server’da plakası yoktur. Oluşturduktan hemen sonra okuduğun bir plakayı değil, entity’yi ver; lib’in spawnVehicle’ı plakayı bekler ve anahtarları kendisi verebilir (keysTo, purpose).

RemoveVehicleKeys

Bir oyuncudan bir aracın anahtarlarını alır.

Taraf: Server · Bekler: hayır · Lib: vehicleKeys.remove

İmza
RemoveVehicleKeys(source: number, vehicle: number | string): void
Lua
exports['ai-core']:RemoveVehicleKeys(source, 'AB12CDE')

Parametreler

Prop

Type

Dönüş değeri

Hiçbir şey. GiveVehicleKeys ile aynı sessiz durumlar.

Örnek

import { resourceExport } from "@aicore-fivem/lib/server";

const core = resourceExport("ai-core");

/** Kiralama bitti: önce anahtarlar gider, sonra scooter. */
export function endRental(source: number, vehicle: number): void {
  core.RemoveVehicleKeys(source, vehicle);
  if (DoesEntityExist(vehicle)) DeleteEntity(vehicle);
}

Aracı silmeden önce anahtarları al. Bazı anahtar sistemleri plakayı entity’den okur, entity gittikten sonra bu başarısız olur.

HasVehicleKeys

Bir oyuncunun bir aracın anahtarlarına sahip olup olmadığı.

Taraf: Server · Bekler: hayır · Lib: vehicleKeys.has

İmza
HasVehicleKeys(source: number, vehicle: number | string): boolean
Lua
local has = exports['ai-core']:HasVehicleKeys(source, vehicle)

Parametreler

Prop

Type

Dönüş değeri

boolean: oyuncu anahtarlara sahipse true. Hiçbir anahtar sistemi çalışmıyorsa, anahtar sistemi bu soruyu cevaplayamıyorsa ya da başarısız olursa da true; böylece eksik bir anahtar script’i oyuncuları asla dışarıda bırakmaz. Oyuncunun anahtarı yoksa, araç entity’si yoksa, plaka boşsa ya da source bir sayı değilse false.

Örnek

import { onClientCallback, resourceExport, vehicleNearPlayer } from "@aicore-fivem/lib/server";
import { fail, oneArg, readId } from "@aicore-fivem/lib/shared";

const core = resourceExport("ai-core");

// Oyuncunun yanındaki bir arabanın bagajını açmak anahtarlarını gerektirir.
onClientCallback("myscript:openTrunk", { args: oneArg(readId) }, (source, netId) => {
  const vehicle = vehicleNearPlayer(source, netId, { metres: 4 });
  if (!vehicle) return fail("TOO_FAR");
  if (!core.HasVehicleKeys(source, vehicle)) return fail("NO_KEYS");
  return { ok: true };
});

Bu sayfada