Работы и службы
Полицейские оповещения, тюрьма, записи MDT, медики, реанимация и лечение, стресс, голод и жажда, определения работ и банд, прайм-тайм.
import { dispatch, prison, mdt, ems, medical, stress, needs, definitions, isPrimeTime } from "@aicore-fivem/lib/server";Каждый объект здесь работает через один из слоёв ai-core: отвечает тот скрипт, который сервер использует для этой задачи (система оповещений, тюрьма, MDT, скрипт смерти, HUD). Ваш скрипт продолжает работать, когда владелец его меняет. Пока такой скрипт не запущен, вызовы тихо завершаются неудачей (false, 0, null).
dispatch
dispatch.alert
Отправляет оповещение полиции (или другой работе). Система оповещений показывает его членам jobs на дежурстве, по умолчанию полицейским работам.
Сторона: Сервер · Ждёт: нет
dispatch.alert(alert: DispatchAlert): booleanlocal ok = aiLib.dispatch.alert(alert)DispatchAlert
Prop
Type
Тип: DispatchAlert.
Возвращает
boolean: true, если отправлено. false, если не запущена система оповещений или оповещение неверное.
Пример
import { dispatch, coordsOf, createLocale } from "@aicore-fivem/lib/server";
const Locale = createLocale();
function storeRobbed(source: number, store: string) {
dispatch.alert({
code: "10-90",
title: Locale("ALERT_STORE_ROBBERY"),
message: store,
coords: coordsOf(source),
source,
icon: "store",
priority: "high",
});
}prison
Тюремные сроки через ai-core, какой бы скрипт тюрьмы ни был запущен.
prison.jail
Отправляет загруженного игрока в тюрьму.
Сторона: Сервер · Ждёт: нет
prison.jail(source: number, minutes: number, by?: number): booleanlocal ok = aiLib.prison.jail(source, minutes, by)Prop
Type
Возвращает true, если посажен, false, пока не запущена тюрьма.
if (!prison.jail(target, 15, officer)) return fail("NO_PRISON");prison.release
Выпускает заключённого игрока.
Сторона: Сервер · Ждёт: нет
prison.release(source: number): booleanlocal ok = aiLib.prison.release(source)Возвращает true, если освобождён, false, если игрок не в тюрьме или тюрьма не запущена.
prison.release(target);prison.timeLeft
Сторона: Сервер · Ждёт: нет
prison.timeLeft(source: number): numberlocal minutes = aiLib.prison.timeLeft(source)Возвращает оставшиеся минуты срока, 0, если игрок на свободе.
if (prison.timeLeft(source) > 0) return fail("IN_PRISON");mdt
Полицейские записи MDT (штрафы, ордера, аресты, тюрьма) через слой MDT ai-core. Пока MDT не запущен, ничего не записывается.
mdt.record
Записывает запись в полицейский MDT.
Сторона: Сервер · Ждёт: нет
mdt.record(record: MdtRecord): booleanlocal ok = aiLib.mdt.record(record)MdtRecord
Prop
Type
Тип: MdtRecord.
Возвращает true, если записано, false, если MDT не запущен или не принимает такую запись.
if (prison.jail(target, 20, officer)) mdt.record({ kind: "jail", target, by: officer, title: "Armed robbery", minutes: 20 });mdt.provider
Сторона: Сервер · Ждёт: нет
mdt.provider(): string | nulllocal name = aiLib.mdt.provider()Возвращает MDT, в который уходят записи, или null.
if (!mdt.provider()) console.log("no MDT: records are skipped");ems
Медики через слой EMS ai-core: собственный подсчёт и вызовы бедствия скрипта EMS, иначе подсчёт дежурных и оповещения ai-core.
ems.available
Сколько медиков свободно, чтобы принять вызов.
Сторона: Сервер · Ждёт: нет
ems.available(jobs: string[]): numberlocal count = aiLib.ems.available(jobs)Prop
Type
Возвращает число медиков на дежурстве в jobs, не считая занятых, если скрипт диспетчера о них знает.
// Разрешаем игрокам возрождаться в больнице, только если ни один медик не может приехать.
const canRespawn = ems.available(["ambulance"]) === 0;ems.distress
Отправляет вызов бедствия для игрока медикам из call.jobs.
Сторона: Сервер · Ждёт: нет
ems.distress(source: number, call: DistressCall): booleanlocal ok = aiLib.ems.distress(source, call)Prop
Type
Тип: DistressCall.
Возвращает true, если вызов кто-то принял, иначе false.
if (!ems.distress(source, { jobs: ["ambulance"], message: "Unconscious" })) return fail("NO_MEDICS");ems.provider
Сторона: Сервер · Ждёт: нет
ems.provider(): string | nulllocal name = aiLib.ems.provider()Возвращает источник EMS, который использует слой, "ai-core" для собственного подсчёта дежурных.
console.log(`medics through ${ems.provider()}`);medical
Реанимация, лечение и состояние без сознания через медицинский слой ai-core, какой бы скрипт смерти или скорой помощи ни был запущен. Lua-аналога нет: вызывайте экспорты ai-core RevivePlayer, HealPlayer, IsPlayerDead.
medical.revive
Поднимает игрока без сознания там, где он лежит.
Сторона: Сервер · Ждёт: нет
medical.revive(source: number): booleanВозвращает true, если реанимирован, false, если игрок не без сознания или не запущен скрипт смерти.
if (!medical.revive(target)) return fail("NOT_DOWN");medical.heal
Полностью восстанавливает здоровье игроку, который не лежит без сознания.
Сторона: Сервер · Ждёт: нет
medical.heal(source: number): booleanВозвращает true, если вылечен, false, если не запущен скрипт смерти.
medical.heal(source);medical.isDead
Лежит ли игрок без сознания.
Сторона: Сервер · Ждёт: нет
medical.isDead(source: number): booleanВозвращает true, если без сознания; false без скрипта смерти. Используйте вместо чтения здоровья педа.
if (medical.isDead(source)) return fail("YOU_ARE_DOWN");medical.provider
Сторона: Сервер · Ждёт: нет
medical.provider(): string | nullВозвращает скрипт смерти, который отвечает (ai-death...), или null, если никакой не запущен.
console.log(`deaths through ${medical.provider() ?? "nothing"}`);stress
Стресс игроков (от 0 до 100) через слой стресса ai-core, какой бы HUD его ни хранил.
stress.gain
Добавляет очки стресса.
Сторона: Сервер · Ждёт: нет
stress.gain(source: number, amount: number): booleanlocal ok = aiLib.stress.gain(source, amount)Prop
Type
Возвращает true, если добавлено, false, если не запущен HUD со стрессом.
stress.gain(source, 5); // после перестрелкиstress.relieve
Убирает очки стресса.
Сторона: Сервер · Ждёт: нет
stress.relieve(source: number, amount: number): booleanlocal ok = aiLib.stress.relieve(source, amount)Возвращает true, если убрано, false, если не запущен HUD со стрессом или amount равен 0 или меньше.
inventory.registerUsableItem("cigarette", (source) => {
stress.relieve(source, 10);
});stress.provider
Сторона: Сервер · Ждёт: нет
stress.provider(): string | nulllocal name = aiLib.stress.provider()Возвращает HUD, который хранит стресс, или null.
if (!stress.provider()) console.log("no HUD keeps stress");needs
needs.refill
Полностью восполняет голод и жажду (реанимация администратором, больница) через HUD, который их хранит, а без него через метаданные персонажа ai-core.
Сторона: Сервер · Ждёт: нет
needs.refill(source: number): booleanLua-аналога нет: вызывайте экспорт ai-core RefillNeeds(source).
Возвращает true, если восполнено, false, если у игрока нет персонажа.
if (medical.revive(target)) needs.refill(target);Определения работ и банд
definitions.job
Определение работы так, как оно задано в панели ai-core. Каждое читается из ai-core один раз и хранится, пока панель его не изменит, поэтому чтение сводится к поиску в памяти.
Сторона: Сервер · Ждёт: нет
definitions.job(name: string): JobDefinition | nullLua-аналога нет: вызывайте экспорт ai-core GetJobDefinition(name).
Возвращает JobDefinition (label, type, defaultDuty, listed?, grades) или null, если такой работы нет.
const label = definitions.job("police")?.label ?? "police";definitions.gang
Сторона: Сервер · Ждёт: нет
definitions.gang(name: string): GangDefinition | nullLua-аналога нет: вызывайте экспорт ai-core GetGangDefinition(name).
Возвращает GangDefinition (label, grades) или null.
const gang = definitions.gang("ballas");
if (!gang) return fail("UNKNOWN_GANG");Прайм-тайм
isPrimeTime
Идёт ли прайм-тайм для работы, по настройке прайм-тайма ai-core. Часы берутся из tgiann-policealert, пока он запущен, иначе из часов, заданных в панели ai-core.
Сторона: Сервер · Ждёт: нет
isPrimeTime(job?: string): booleanLua-аналога нет: вызывайте экспорт ai-core IsPrimeTime(job).
Prop
Type
Возвращает true во время прайм-тайма.
if (!isPrimeTime("police")) return fail("BANK_CLOSED_FOR_HEISTS");