AI Core

Veritabanı

@aicore-fivem/mysql, tipli tablolar ve üçüncü parti script’ler için ai-mysql.

AI Core’un kendi veritabanı motoru var: @aicore-fivem/mysql. Veritabanı kullanan her ai-* resource’u kendi sürecinde küçük bir havuz çalıştırır (sorgu başına export atlaması yok); ai-mysql oxmysql, mysql-async ve ghmattimysql’in yerine geçer, böylece üçüncü parti script’ler API’lerini korur.

Tablolar

Bir resource tablolarını sql/main.sql içinde tutar ve açılışta kurar:

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

Eksik tabloları oluşturur ve eksik sütunları ekler; var olanları asla silmez veya değiştirmez. Her tablo resource adıyla başlar (ai_<ad>_...), birincil anahtarı vardır ve utf8mb4_unicode_ci kullanır.

Sorgular

Derleme SQL’den tipli satır tipleri (resource/server/tables.ts) yazar. Basit sorgular bunları kullanır:

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

Join’ler, aralıklar, upsert’ler ve toplu ifadeler yer tutuculu düz SQL olarak kalır:

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

Kurallar

  • Her değer için yer tutucu; tanımlayıcılar sadece sabit bir listeden.
  • Para tamsayı, zamanlar UTC DATETIME, bayraklar TINYINT(1).
  • Oyuncu verisi girişte bir kez okunur ve bellekte tutulur; sık değişen değerler periyodik olarak, kritik olanlar (para, eşya) tek koşullu ifade veya transaction ile yazılır.
  • Toplu yazmalar satır başına değil, parça başına tek ifade.
  • Veritabanı kullanan her resource’un env.cfg içinde add_convar_permission <resource> read mysql_connection_string satırı olmalı.

Bu sayfada