Текст и числа
formatText, round, groupDigits, formatWeight, stripGameText, randomInt, pickRandom и rollChance, а также где описан ServerClock.
Небольшие помощники для того, что читают игроки (деньги, вес, переведённые тексты), для случайных бросков и для обратных отсчётов, совпадающих с часами сервера.
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>): stringlocal 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~) и , схлопывает повторяющиеся пробелы и обрезает края. Используйте перед тем, как показать текст другого скрипта в своём интерфейсе.
Сторона: Клиент, сервер и NUI · Ждёт: нет
stripGameText(text: unknown): stringlocal 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): numberlocal 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); // 13groupDigits
Записывает число с разделителем через каждые три цифры: 1234567 становится 1,234,567. Сохраняет знак и дробную часть. Используйте для каждой суммы денег, которую видят игроки.
Сторона: Клиент, сервер и NUI · Ждёт: нет
groupDigits(value: number | string, separator?: string): stringlocal 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): stringLua: аналога нет.
Параметры
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): numberLua: аналога нет; используйте math.random(min, max).
Параметры
Prop
Type
Возвращает
number: целое число от min до max.
Пример
import { randomInt } from "@aicore-fivem/lib/shared";
const payout = randomInt(150, 300); // 150, 151, ... или 300pickRandom
Один случайный элемент списка.
Сторона: Клиент, сервер и NUI · Ждёт: нет
pickRandom<T>(list: readonly T[]): T | undefinedLua: аналога нет; используйте 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): booleanLua: аналога нет; используйте math.random() * 100 < percent.
Параметры
Prop
Type
Возвращает
true примерно percent раз из 100.
Пример
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.