Telefon ve görünüm
ai-core üzerinden oyuncunun telefonu (numaralar, mailler, mesajlar, bildirimler) ve hangi kıyafet script’i çalışıyorsa onun üzerinden karakterlerin kayıtlı görünümleri.
import { phone, appearance } from "@aicore-fivem/lib/server";phone
ai-core üzerinden oyuncunun telefonu: çalışan ilk telefon script’i (tgiann-phone, lb-phone...) cevap verir. Telefon script’i yoksa her çağrı null ya da false cevabını verir. aiLib.phone üzerindeki Lua karşılıkları aynı adlara ve argüman sırasına sahiptir.
phone.number
Taraf: Server · Bekler: hayır
phone.number(source: number): string | nulllocal number = aiLib.phone.number(source)Dönüş değeri: oyuncunun telefon numarası ya da numarası yoksa veya hiçbir telefon script’i çalışmıyorsa null (Lua’da nil).
const number = phone.number(source);
if (!number) return fail("NO_PHONE_NUMBER");phone.sourceOf
Bir telefon numarasının sahibi olan çevrimiçi oyuncu.
Taraf: Server · Bekler: hayır
phone.sourceOf(number: string): number | nulllocal source = aiLib.phone.sourceOf(number)Dönüş değeri: server id ya da çevrimiçi kimse o numaraya sahip değilse null (Lua’da nil).
const owner = phone.sourceOf("555-0101");
if (owner !== null) notify(owner, "Your phone is ringing");phone.hasPhone
Oyuncunun üzerinde telefon olup olmadığı.
Taraf: Server · Bekler: hayır
phone.hasPhone(source: number): booleanlocal has = aiLib.phone.hasPhone(source)Dönüş değeri: telefonu varsa true; yoksa ya da telefon script’i yoksa false.
if (!phone.hasPhone(source)) return fail("NEED_PHONE");phone.mail
Bir oyuncunun telefonuna mail gönderir.
Taraf: Server · Bekler: hayır
phone.mail(to: number | string, mail: PhoneMail): booleanlocal ok = aiLib.phone.mail(to, mail)Prop
Type
Tipi PhoneMail’dir.
Dönüş değeri: gönderildiyse true, değilse false.
phone.mail(source, {
sender: "Downtown Cab Co.",
subject: "Your shift",
message: "Pick up the taxi at the depot.",
});phone.message
Bir metin mesajı gönderir.
Taraf: Server · Bekler: hayır
phone.message(from: string, to: number | string, text: string): booleanlocal ok = aiLib.phone.message(from, to, text)Prop
Type
Dönüş değeri: gönderildiyse true, değilse false.
phone.message("Dealer", source, "Meet me behind the gas station.");phone.notify
Telefonun içinde bir bildirim gösterir.
Taraf: Server · Bekler: hayır
phone.notify(source: number, notification: PhoneNotification): booleanlocal ok = aiLib.phone.notify(source, notification)Prop
Type
Tipi PhoneNotification’dır.
Dönüş değeri: gösterildiyse true, değilse false.
phone.notify(source, { title: "Bank", message: "Salary paid: $250", app: "bank" });appearance
Hangi kıyafet script’i çalışıyorsa (ai-appearance, tgiann-clothing) ai-core’un görünüm katmanı üzerinden karakterlerin kayıtlı görünümleri.
appearance.get
Yüklü olsun ya da olmasın bir karakterin kayıtlı görünümü. Bir karakterin yerine duran bir ped’i (uyuyan bir beden, bir manken) giydirmek için kullan: sonucu değiştirmeden client’ın appearance.apply fonksiyonuna ver (Lib: client).
Taraf: Server · Bekler: evet (TypeScript’te Promise, Lua’da thread’i yield eder)
appearance.get(charId: number): Promise<CharacterAppearance | null>local look = aiLib.appearance.get(charId) -- { model, data } ya da nil, bir thread içinde çağırProp
Type
Dönüş değeri
Promise<CharacterAppearance | null>: CharacterAppearance, { model, data }’dır (ped model hash’i ve kıyafet script’inin kendi görünüm verisi). Karakterin görünümü yoksa, hiçbir kıyafet script’i çalışmıyorsa ya da ai-core durmuşsa null.
Örnek
import { appearance, online, playersNear } from "@aicore-fivem/lib/server";
async function sendLook(source: number) {
const charId = online.charId(source);
if (charId === undefined) return;
const look = await appearance.get(charId);
if (!look) return;
// Görünüme yalnızca bu karakterin yakınındaki oyuncuların ihtiyacı var.
for (const other of playersNear(source, 100)) emitNet("my-sleepers:look", other, source, look);
}appearance.provider
Taraf: Server · Bekler: hayır
appearance.provider(): string | nulllocal name = aiLib.appearance.provider()Dönüş değeri: cevap veren kıyafet script’i ya da hiçbiri çalışmıyorsa null (Lua’da nil).
console.log(`looks through ${appearance.provider() ?? "nothing"}`);Dünya
Hangi hava script’i çalışıyorsa onun üzerinden saat ve hava, ai-core’un dağıtıcısından routing bucket’lar, kapı kilitleri ve kayıtlı karakterlerin doğma noktaları.
State bag’ler
EntityState, PlayerState, GlobalKey ve GlobalGroup’un server sürümleri: bir ai-* script’inin replike edilen state yazmasının tek yolu.