Routing bucket’lar
Ayrı bir dünya için (instance’lı bir iç mekan, bir soygun evi) boş bir routing bucket al ve geri ver.
Bir routing bucket, dünyanın ayrı bir kopyasıdır: bucket 5’teki oyuncular ve entity’ler bucket 0’dakileri (normal dünya) göremez ya da onlara dokunamaz. Tamamen ayrı olması gereken bir dünya için kullan, instance’lı bir daire ya da bir soygun evinin içi gibi. Yalnızca bir iç mekandaki oyuncuları gizlemek için conceal native’leri daha ucuzdur.
Her script bucket’larını ai-core’un dağıtıcısından alır, böylece iki script asla aynısını kullanmaz. Bucket numarasını asla kendin seçme (1000 + houseId).
AcquireBucket
Resource’un için boş bir routing bucket alır. Yeni bucket’ta çevre nüfusu yoktur (trafik ya da yaya yok) ve katı entity kilidi vardır (içinde yalnızca server entity oluşturabilir). Sen geri verene ya da resource’un durana kadar senindir.
Taraf: Server · Bekler: hayır · Lib: buckets.acquire
AcquireBucket(tag: string): numberlocal bucket = exports['ai-core']:AcquireBucket('apartment:12')Parametreler
Prop
Type
Dönüş değeri
number: bucket id’si, 1000 ya da daha yüksek. Geri verilen id’ler önce yeniden dağıtılır.
Örnek
import { onClientCallback, PlayerMap, resourceExport } from "@aicore-fivem/lib/server";
import { fail } from "@aicore-fivem/lib/shared";
const core = resourceExport("ai-core");
const INSIDE = { x: 266.1, y: -1007.3, z: -101.0, heading: 0 };
// Hangi dairenin bucket’ında kimin olduğu; bir oyuncu çıktığında kendiliğinden boşalır.
const inside = new PlayerMap<number>();
onClientCallback("myscript:enterApartment", { lock: true }, (source) => {
if (inside.has(source)) return fail("ALREADY_INSIDE");
const bucket = core.AcquireBucket(`apartment:${source}`);
inside.set(source, bucket);
SetPlayerRoutingBucket(String(source), bucket);
SetEntityCoords(GetPlayerPed(String(source)), INSIDE.x, INSIDE.y, INSIDE.z, false, false, false, false);
return { ok: true };
});Oyuncu ayrıldığında (ya da düştüğünde) onu bucket 0’a geri taşı ve bucket’ı ReleaseBucket ile geri ver. Hiç bırakmadığın bir bucket resource’un durana kadar alınmış kalır.
ReleaseBucket
Bir bucket’ı dağıtıcıya geri verir. Yalnızca onu alan resource yapabilir.
Taraf: Server · Bekler: hayır · Lib: buckets.release
ReleaseBucket(id: number): booleanlocal released = exports['ai-core']:ReleaseBucket(bucket)Parametreler
Prop
Type
Dönüş değeri
boolean: bucket geri verildiğinde true. Resource’un onu tutmuyorsa (başka bir resource aldı, zaten bırakıldı) ya da id bir sayı değilse false.
Örnek
import { onClientCallback, PlayerMap, resourceExport } from "@aicore-fivem/lib/server";
import { fail } from "@aicore-fivem/lib/shared";
const core = resourceExport("ai-core");
const DOOR = { x: -269.4, y: -955.3, z: 31.2 };
const inside = new PlayerMap<number>({ onDrop: (_source, bucket) => core.ReleaseBucket(bucket) });
onClientCallback("myscript:leaveApartment", (source) => {
const bucket = inside.get(source);
if (bucket === undefined) return fail("NOT_INSIDE");
inside.delete(source);
// Önce oyuncuyu dışarı taşı, sonra bucket’ı geri ver.
SetPlayerRoutingBucket(String(source), 0);
SetEntityCoords(GetPlayerPed(String(source)), DOOR.x, DOOR.y, DOOR.z, false, false, false, false);
core.ReleaseBucket(bucket);
return { ok: true };
});Resource’un durduğunda ai-core tuttuğu her bucket’ı bir kerede serbest bırakır. İçeride kalan oyuncular taşınmaz: bunu kendi durdurma handler’ında yap.