Téléphone et apparence
Le téléphone du joueur via ai-core (numéros, mails, SMS, notifications) et l’apparence enregistrée des personnages via le script de vêtements qui tourne.
import { phone, appearance } from "@aicore-fivem/lib/server";phone
Le téléphone du joueur via ai-core : le premier script de téléphone qui tourne (tgiann-phone, lb-phone...) répond. Sans script de téléphone, chaque appel répond null ou false. Les équivalents Lua sur aiLib.phone ont les mêmes noms et le même ordre d’arguments.
phone.number
Côté : serveur · Attend : non
phone.number(source: number): string | nulllocal number = aiLib.phone.number(source)Retour le numéro de téléphone du joueur, ou null (Lua nil) quand il n’en a pas ou qu’aucun script de téléphone ne tourne.
const number = phone.number(source);
if (!number) return fail("NO_PHONE_NUMBER");phone.sourceOf
Le joueur en ligne à qui appartient un numéro de téléphone.
Côté : serveur · Attend : non
phone.sourceOf(number: string): number | nulllocal source = aiLib.phone.sourceOf(number)Retour l’id serveur, ou null (Lua nil) quand personne en ligne n’a ce numéro.
const owner = phone.sourceOf("555-0101");
if (owner !== null) notify(owner, "Your phone is ringing");phone.hasPhone
Indique si le joueur porte un téléphone.
Côté : serveur · Attend : non
phone.hasPhone(source: number): booleanlocal has = aiLib.phone.hasPhone(source)Retour true quand il en a un ; false sinon, ou sans script de téléphone.
if (!phone.hasPhone(source)) return fail("NEED_PHONE");phone.mail
Envoie un mail sur le téléphone d’un joueur.
Côté : serveur · Attend : non
phone.mail(to: number | string, mail: PhoneMail): booleanlocal ok = aiLib.phone.mail(to, mail)Prop
Type
Le type est PhoneMail.
Retour true quand il est envoyé, false sinon.
phone.mail(source, {
sender: "Downtown Cab Co.",
subject: "Your shift",
message: "Pick up the taxi at the depot.",
});phone.message
Envoie un SMS.
Côté : serveur · Attend : non
phone.message(from: string, to: number | string, text: string): booleanlocal ok = aiLib.phone.message(from, to, text)Prop
Type
Retour true quand il est envoyé, false sinon.
phone.message("Dealer", source, "Meet me behind the gas station.");phone.notify
Affiche une notification dans le téléphone.
Côté : serveur · Attend : non
phone.notify(source: number, notification: PhoneNotification): booleanlocal ok = aiLib.phone.notify(source, notification)Prop
Type
Le type est PhoneNotification.
Retour true quand elle est affichée, false sinon.
phone.notify(source, { title: "Bank", message: "Salary paid: $250", app: "bank" });appearance
L’apparence enregistrée des personnages via la couche apparence d’ai-core, quel que soit le script de vêtements qui tourne (ai-appearance, tgiann-clothing).
appearance.get
L’apparence enregistrée d’un personnage, chargé ou non. Utilisez-la pour habiller un ped qui représente un personnage (un corps endormi, un mannequin) : transmettez le résultat tel quel à appearance.apply côté client (Lib : client).
Côté : serveur · Attend : oui (Promise en TypeScript, cède la main (yield) dans le thread en Lua)
appearance.get(charId: number): Promise<CharacterAppearance | null>local look = aiLib.appearance.get(charId) -- { model, data } ou nil, à appeler dans un threadProp
Type
Retour
Promise<CharacterAppearance | null> : CharacterAppearance est { model, data } (le hash du modèle du ped et les données d’apparence propres au script de vêtements). null quand le personnage n’en a pas, qu’aucun script de vêtements ne tourne, ou qu’ai-core est arrêté.
Exemple
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;
// Seuls les joueurs proches de ce personnage ont besoin de l’apparence.
for (const other of playersNear(source, 100)) emitNet("my-sleepers:look", other, source, look);
}appearance.provider
Côté : serveur · Attend : non
appearance.provider(): string | nulllocal name = aiLib.appearance.provider()Retour le script de vêtements qui répond, ou null (Lua nil) quand aucun ne tourne.
console.log(`looks through ${appearance.provider() ?? "nothing"}`);Monde
L’heure et la météo via le script météo qui tourne, les routing buckets de l’allocateur d’ai-core, le verrouillage des portes et les points d’apparition des personnages enregistrés.
State bags
Les versions serveur d’EntityState, PlayerState, GlobalKey et GlobalGroup : la seule façon dont un script ai-* écrit un état répliqué.