AI Core
Криминал и гонкиai-robberies

ai-robberies для разработчиков

Ключи GlobalState ограбленных целей, метаданные дома, вызовы полиции и причины операций ai-robberies, а также его приватные события.

У ai-robberies нет экспортов. Места и цели являются данными панели, а награды, инструменты, вызовы и двери идут через AI Core. Ниже перечислено то, что может читать другой скрипт.

GlobalState rob:<targetId>

true, пока цель ограблена и ждёт задержки своего места, false после задержки. Пишет его сервер; читать может каждый клиент. При старте ресурса каждый ключ сбрасывается. Id целей являются id записей вкладки Targets (store_1_register_1, store_1_safe, vangelico_vitrine_1...).

Сторона: сервер и клиент (чтение) · Ожидание: нет

Сигнатура
GlobalState[`rob:${targetId}`]: boolean | undefined
Lua
local emptied = GlobalState['rob:' .. targetId] == true

Возвращает

true, пока цель опустошена. false после окончания задержки, undefined / nil, если цель не грабили с момента старта ресурса.

Пример

Показать отметку «ограблено» в вашем собственном скрипте магазина, пока сейф пуст:

// клиент
const SAFE = "store_1_safe";

AddStateBagChangeHandler(`rob:${SAFE}`, "global", (_bag: string, _key: string, value: unknown) => {
  const emptied = value === true;
  // ... показать или скрыть вашу отметку
});

const emptiedNow = GlobalState[`rob:${SAFE}`] === true;

Читайте эти ключи, но никогда не пишите в них: ими владеет ai-robberies и выставляет их по своим таймерам. Значение, записанное другим скриптом, рассинхронизирует проверки сервера и надписи у клиентов.

Метаданные персонажа robbery_house

Id места-дома, в котором находится персонаж (house_12), или null, когда он снаружи. ai-robberies выставляет его, когда грабитель вламывается, и очищает, когда тот уходит. Персонаж, который вышел из игры внутри дома, при следующей загрузке появляется у двери этого дома.

Вызовы полиции

Отправляются через dispatch.alert из lib, поэтому попадают в тот скрипт оповещений, который запущен:

КогдаКодЗаголовокИконкаПриоритет
Первое ограбление за визит (по шансу вызова места)10-90Текст вызова об ограблении, с названием места в качестве сообщения и точкой вызова места в качестве координатsack-dollarhigh
Начинается работа с инкассаторской машиной10-90Текст вызова об инкассаторской машине, в позиции грабителя, спрайт блипа 67 красного цветаtruckhigh

Деньги

Украденные деньги идут на счёт из настройки панели Money account с причиной операции robbery:<placeId> (например, robbery:store_1).

Двери

Цель-дверь с id Doorlock door открывается через слой дверей AI Core (doors.setLocked из lib) и снова запирается, когда заканчивается задержка места.

Приватные события и колбэки

Собственный контракт скрипта (resource/common/robbery.ts). Сервер при каждом вызове проверяет число полицейских, расстояние, предметы и занятость цели. Они могут меняться между версиями: не вызывайте и не слушайте их из других ресурсов.

ИмяНаправлениеЧто передаёт
ai-robberies:startclient callback(targetId): начать грабить цель; отвечает { ok, entered? }. Сервер запускает полосу прогресса и выдаёт награду.
ai-robberies:exitclient callback(): выйти из дома, в котором находится игрок.
ai-robberies:client:insideserver -> player(placeId | null, to): игрок теперь внутри этого дома (или вышел); телепорт в to.
ai-robberies:truckStartclient callback(): оплатить работу с инкассаторской машиной у заказчика.
ai-robberies:client:truckJobserver -> player(netId, x, y, z): машина, которую нужно ограбить, и её задние двери.
ai-robberies:truckPlantclient callback(): заложить заряд (полоса прогресса запускает сервер; двери взрываются после запала).
ai-robberies:client:truckOpenserver -> players near the truck(netId): задние двери открыты.
ai-robberies:truckLootclient callback(): забрать наличные (полосу прогресса запускает сервер).
ai-robberies:client:truckEndserver -> players who knew the truck(): работа с инкассаторской машиной закончена.

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