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, bayraklarTINYINT(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.cfgiçindeadd_convar_permission <resource> read mysql_connection_stringsatırı olmalı.