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

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

Таблица растений, вызовы полиции и причина операции ai-drugs, как продавать известные ему наркотики из другого скрипта, и его приватные события.

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

Таблица базы данных ai_drugs_plants

Одна строка на каждый куст марихуаны в мире. Создаётся при старте (sql/main.sql, через установщик таблиц ai-core). Все строки загружаются один раз при старте и хранятся в памяти; сгнившие растения сервер удаляет, поэтому таблица остаётся маленькой.

СтолбецТипЧто хранит
idBIGINT UNSIGNEDId растения (автоинкремент).
ownerINT UNSIGNEDai_core_characters.id того, кто посадил (по нему считаются растения на персонажа).
x, y, zFLOATГде стоит растение.
planted_atDATETIMEКогда его посадили; рост и гниение отсчитываются от этого момента.

ai-drugs читает таблицу только при старте и дальше держит растения в памяти. Строку, которую другой ресурс вставил, изменил или удалил во время его работы, он не увидит до следующего перезапуска. Меняйте растения только пока ai-drugs остановлен.

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

Продажа может отправить один вызов (по настройке панели Police alert chance) через dispatch.alert из lib: код 10-31, текст "Suspicious hand-off reported" («Сообщение о подозрительной передаче»), в позиции продавца, иконка cannabis, спрайт блипа 51 красного цвета. Вызов попадает в тот скрипт оповещений, который у вас запущен.

Деньги

Деньги от продажи идут на счёт из настройки панели Money account с причиной операции drugs:sale.

Предметы

Наркотики, которые покупают незнакомцы, берутся из списка панели Drugs (по умолчанию weed_bud, coke_baggy, meth_baggy). Чтобы уличные продажи получали товар из вашей нарколаборатории, дайте игроку один из этих предметов: ai-drugs продаёт любой предмет из списка, который есть у игрока.

Пример

Скрипт лаборатории, который превращает 5 weed_bud в один coke_baggy (выдуманный рецепт):

import { inventory, notify, onClientCallback, progressFor } from "@aicore-fivem/lib/server";
import { fail } from "@aicore-fivem/lib/shared";

onClientCallback("mylab:cook", async (source) => {
  if (!inventory.hasItem(source, "weed_bud", 5)) return fail("LAB_ERR_ITEMS");
  const done = await progressFor(source, { label: "Cooking", duration: 10_000 });
  if (!done) return fail("LAB_ERR_CANCELLED");
  if (!inventory.removeItem(source, "weed_bud", 5)) return fail("LAB_ERR_ITEMS");
  inventory.addItem(source, "coke_baggy", 1);
  notify(source, "You made a baggy", "success");
  return { ok: true };
});

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

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

ИмяНаправлениеЧто передаёт
ai-drugs:sellclient callback(buyerNetId): продать незнакомцу рядом с игроком; отвечает { ok, count, price }.
ai-drugs:areaclient -> server(cellX, cellY): ячейка растений игрока изменилась.
ai-drugs:client:plantsserver -> player(reset, puts, removes, serverNow, growMinutes): растения вокруг игрока (ячейки 3x3 по 128 м вокруг него, затем изменения).
ai-drugs:harvestclient callback(plantId): собрать готовое растение или уничтожить его (полиция).

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