AI Core

Baza danych

@aicore-fivem/mysql, typowane tabele i ai-mysql dla skryptów zewnętrznych.

AI Core ma własny silnik bazy danych, @aicore-fivem/mysql. Każdy zasób ai-*, który używa bazy danych, uruchamia małą pulę we własnym procesie (bez przeskoku przez eksport przy każdym zapytaniu); ai-mysql zastępuje oxmysql, mysql-async i ghmattimysql, więc skrypty zewnętrzne zachowują swoje API.

Tabele

Zasób trzyma swoje tabele w sql/main.sql i instaluje je przy starcie:

createDatabaseTables(ResourceName, "sql/main.sql");

Tworzy brakujące tabele i dodaje brakujące kolumny; nigdy nie usuwa ani nie zmienia istniejących. Każda tabela ma prefiks zasobu (ai_<name>_...), klucz główny i używa utf8mb4_unicode_ci.

Zapytania

Build generuje z SQL typy wierszy (resource/server/tables.ts). Proste zapytania z nich korzystają:

export const db = tables<Tables, TableInserts>();
const rows = await db.select("ai_garages_vehicles", ["id", "plate"], { owner }, { limit: 50 });

Złączenia, zakresy, upserty i operacje masowe zostają zwykłym SQL z placeholderami:

await mysql.query("UPDATE ai_x SET count = count - ? WHERE id = ? AND count >= ?", [n, id, n]);

Zasady

  • Placeholdery dla każdej wartości; identyfikatory tylko ze stałej listy.
  • Pieniądze to liczba całkowita, czasy to DATETIME w UTC, flagi to TINYINT(1).
  • Dane gracza są czytane raz przy wczytaniu i trzymane w pamięci; częste wartości zapisuje okresowy flush, krytyczne (pieniądze, przedmioty) jedno warunkowe polecenie lub transakcja.
  • Zapisy masowe to jedno polecenie na porcję, nigdy jedno na wiersz.
  • Każdy zasób, który używa bazy danych, potrzebuje add_convar_permission <resource> read mysql_connection_string w env.cfg.

Na tej stronie