AI Core
Przestępczość i wyścigiai-drugs

ai-drugs dla deweloperów

Tabela roślin, alerty i powód wpisu ai-drugs, jak sprzedawać znane mu narkotyki z innego skryptu oraz jego prywatne zdarzenia.

ai-drugs nie ma eksportów. O sprzedaży i zbiorach decyduje jego serwer, a przedmioty, pieniądze i alerty przechodzą przez AI Core. Poniżej jest to, z czego może korzystać inny skrypt.

Tabela bazy danych ai_drugs_plants

Jeden wiersz na każdą roślinę marihuany w świecie. Tworzona przy starcie (sql/main.sql, przez instalator tabel ai-core). Wszystkie wiersze są wczytywane raz przy starcie i trzymane w pamięci; zgniłe rośliny serwer usuwa, więc tabela pozostaje mała.

KolumnaTypCo przechowuje
idBIGINT UNSIGNEDID rośliny (auto increment).
ownerINT UNSIGNEDai_core_characters.id osoby, która zasadziła roślinę (na tej podstawie liczone są rośliny na postać).
x, y, zFLOATGdzie stoi roślina.
planted_atDATETIMEKiedy została zasadzona; od tego momentu liczy się wzrost i gnicie.

ai-drugs czyta tabelę tylko przy starcie, a potem trzyma rośliny w pamięci. Wiersz dodany, zmieniony lub usunięty przez inny zasób w trakcie działania nie jest widoczny aż do następnego restartu. Zmieniaj rośliny tylko wtedy, gdy ai-drugs jest zatrzymany.

Alerty policyjne

Sprzedaż może wysłać jeden alert (według ustawienia Police alert chance w panelu) przez dispatch.alert biblioteki: kod 10-31, tekst „Suspicious hand-off reported”, w miejscu sprzedawcy, ikona cannabis, czerwony blip ze sprite 51. Trafia do tego skryptu alertów, który działa.

Pieniądze

Pieniądze ze sprzedaży trafiają na konto ustawione w Money account w panelu z powodem wpisu drugs:sale.

Przedmioty

Narkotyki, które kupują nieznajomi, to lista Drugs w panelu (domyślnie weed_bud, coke_baggy, meth_baggy). Aby zasilać sprzedaż uliczną z własnego laboratorium, daj graczowi jeden z tych przedmiotów: ai-drugs sprzedaje każdy przedmiot z listy, który gracz ma przy sobie.

Przykład

Skrypt laboratorium, który zamienia 5 weed_bud w jeden coke_baggy (wymyślony przepis):

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 };
});

Prywatne zdarzenia i callbacki

Własny kontrakt skryptu (resource/common/drugs.ts). Serwer sprawdza kupującego, odległość i czasy odnowienia przy każdym wywołaniu. Mogą się zmieniać między wersjami: nie wywołuj ich ani nie nasłuchuj ich z innych zasobów.

NazwaKierunekCo przenosi
ai-drugs:sellcallback klienta(buyerNetId): sprzedaj nieznajomemu stojącemu obok gracza; odpowiada { ok, count, price }.
ai-drugs:areaklient -> serwer(cellX, cellY): zmieniła się komórka roślin gracza.
ai-drugs:client:plantsserwer -> gracz(reset, puts, removes, serverNow, growMinutes): rośliny wokół gracza (komórki 3x3 po 128 m wokół niego, potem zmiany).
ai-drugs:harvestcallback klienta(plantId): zbierz gotową roślinę lub ją zniszcz (policja).

Na tej stronie