AI Core
Справочник APILib: общее и fivem

Текст и числа

formatText, round, groupDigits, formatWeight, stripGameText, randomInt, pickRandom и rollChance, а также где описан ServerClock.

Небольшие помощники для того, что читают игроки (деньги, вес, переведённые тексты), для случайных бросков и для обратных отсчётов, совпадающих с часами сервера.

TypeScript
import { formatText, round, groupDigits, formatWeight, stripGameText, randomInt, pickRandom, rollChance, ServerClock } from "@aicore-fivem/lib/shared";

Текст

formatText

Подставляет в текст значения на места плейсхолдеров {0}, {1}... по позиции. Перевод может переставить или повторить плейсхолдер ("{1} paid {0}"), поэтому значения идут по номеру, а не по порядку.

Сторона: Клиент, сервер и NUI · Ждёт: нет

Сигнатура
formatText(template: string, args: ReadonlyArray<string | number>): string
Lua
local text = aiLib.formatText(template, ...) -- значения отдельными аргументами

Параметры

Prop

Type

Возвращает

string: текст, в котором заполнен каждый плейсхолдер, для которого есть значение. Плейсхолдер без значения остаётся как есть ({2}).

Пример

import { formatText } from "@aicore-fivem/lib/shared";

formatText("You paid ${0} for {1} items", [250, 3]); // "You paid $250 for 3 items" (Вы заплатили $250 за 3 предмета)

Вызывать её самому приходится редко: помощники локализации (createLocale, aiLib.locale, LangTexts) уже заполняют плейсхолдеры. См. Локализация.

stripGameText

Делает текст из другого скрипта простым: удаляет HTML-теги, цветовые коды GTA и коды ввода (~r~, ~INPUT_PICKUP~) и &nbsp;, схлопывает повторяющиеся пробелы и обрезает края. Используйте перед тем, как показать текст другого скрипта в своём интерфейсе.

Сторона: Клиент, сервер и NUI · Ждёт: нет

Сигнатура
stripGameText(text: unknown): string
Lua
local plain = aiLib.stripGameText(text)

Параметры

Prop

Type

Возвращает

string: простой текст. "" для null / undefined (Lua: nil).

Пример

import { stripGameText } from "@aicore-fivem/lib/shared";

stripGameText("Press ~INPUT_CONTEXT~ to <b>open</b>  the ~g~shop~s~"); // "Press to open the shop" (Нажмите, чтобы открыть магазин)

Числа

round

Округляет число до заданного количества знаков после запятой.

Сторона: Клиент, сервер и NUI · Ждёт: нет

Сигнатура
round(value: number, decimals?: number): number
Lua
local rounded = aiLib.numbers.round(value, decimals)

Параметры

Prop

Type

Возвращает

number: округлённое значение.

Пример

import { round } from "@aicore-fivem/lib/shared";

round(12.345, 1); // 12.3
round(12.5);      // 13

groupDigits

Записывает число с разделителем через каждые три цифры: 1234567 становится 1,234,567. Сохраняет знак и дробную часть. Используйте для каждой суммы денег, которую видят игроки.

Сторона: Клиент, сервер и NUI · Ждёт: нет

Сигнатура
groupDigits(value: number | string, separator?: string): string
Lua
local text = aiLib.numbers.groupDigits(value, separator)

Параметры

Prop

Type

Возвращает

string: число, разбитое на группы.

Пример

import { groupDigits } from "@aicore-fivem/lib/shared";

groupDigits(1234567);        // "1,234,567"
groupDigits(-9876.5);        // "-9,876.5"
groupDigits(1500000, ".");   // "1.500.000"

formatWeight

Записывает вес в граммах так, как его читают игроки: меньше 1 кг в граммах, от 1 кг в килограммах с одним знаком после запятой (целые килограммы от 100 кг), цифры разбиты на группы.

Сторона: Клиент, сервер и NUI · Ждёт: нет

Сигнатура
formatWeight(grams: number): string

Lua: аналога нет.

Параметры

Prop

Type

Возвращает

string: "750 g", "1.5 kg", "1,250 kg".

Пример

import { formatWeight } from "@aicore-fivem/lib/shared";

formatWeight(750);      // "750 g"
formatWeight(1500);     // "1.5 kg"
formatWeight(1250000);  // "1,250 kg"

Случайность

randomInt

Случайное целое число от min до max, оба включительно.

Сторона: Клиент, сервер и NUI · Ждёт: нет

Сигнатура
randomInt(min: number, max: number): number

Lua: аналога нет; используйте math.random(min, max).

Параметры

Prop

Type

Возвращает

number: целое число от min до max.

Пример

import { randomInt } from "@aicore-fivem/lib/shared";

const payout = randomInt(150, 300); // 150, 151, ... или 300

pickRandom

Один случайный элемент списка.

Сторона: Клиент, сервер и NUI · Ждёт: нет

Сигнатура
pickRandom<T>(list: readonly T[]): T | undefined

Lua: аналога нет; используйте list[math.random(#list)].

Параметры

Prop

Type

Возвращает

Один элемент или undefined, если список пуст.

Пример

import { pickRandom } from "@aicore-fivem/lib/shared";

const loot = pickRandom(["goldbar", "rolex", "diamond"]) ?? "goldbar";

rollChance

true с шансом percent из 100.

Сторона: Клиент, сервер и NUI · Ждёт: нет

Сигнатура
rollChance(percent: number): boolean

Lua: аналога нет; используйте math.random() * 100 < percent.

Параметры

Prop

Type

Возвращает

true примерно percent раз из 100.

Пример

resource/server/index.ts
import { inventory } from "@aicore-fivem/lib/server";
import { rollChance } from "@aicore-fivem/lib/shared";

function useLockpick(source: number, slot: number): void {
  if (rollChance(25)) inventory.removeItem(source, "lockpick", 1, undefined, slot); // ломается в 1 случае из 4
}

Бросайте на сервере для всего, что даёт предметы или деньги. Бросок на клиенте читер может подделать.

Время

ServerClock

Часы сервера на клиенте, для обратных отсчётов, которые не зависят от собственных часов клиента. Экспортируется из @aicore-fivem/lib/shared и не имеет Lua-аналога. Полный справочник (sync, now, toLocal, пример обратного отсчёта) находится на странице Камера и время: ServerClock.

На этой странице