Bağlantı kontrolleri
Bağlanan her oyuncunun geçmesi gereken kontroller ekle (whitelist’ler, ban’lar) ve script’inin başka birinin yerine geçtiğini bildir.
Bağlanan her oyuncu ai-core’da tek bir kapıdan geçer. Önce ai-core’un kendi kontrolleri gelir: oyuncunun bir FiveM hesabı olmalı ve gereksiz hiçbir script onun yerine geçen script’in yanında çalışmamalı (panelin Refuse players while both run ayarı açıkken). Sonra diğer resource’ların AddConnectionCheck ile eklediği kontroller, eklendikleri sırayla gelir. İlk ret kazanır.
AddConnectionCheck
Bağlanan her oyuncunun geçmesi gereken bir kontrol ekler. Bir whitelist, ban listesi ya da bakım modu için kullan.
Taraf: Server · Bekler: hayır (kontrolün kendisi hemen cevap vermeli) · Lib: yok
AddConnectionCheck(
id: string,
check: (source: number, identifiers: Record<string, string>) => string | null | undefined,
): voidexports['ai-core']:AddConnectionCheck('myscript:whitelist', function(source, identifiers) end)Parametreler
Prop
Type
identifiers her tanımlayıcı tipini değeriyle önek olmadan tutar: identifiers.license abc123...’tür, license:abc123... değil. Oyuncuda olmayan tipler bulunmaz.
Dönüş değeri
Hiçbir şey. Metin bir id ya da bir fonksiyon olmadan çağrı hiçbir şey yapmaz. Resource’un durduğunda kontrol kaldırılır.
Örnek
import { resourceExport } from "@aicore-fivem/lib/server";
import { Locale } from "common";
const core = resourceExport("ai-core");
const allowed = new Set<string>(); // açılışta veritabanından doldurulur
core.AddConnectionCheck("myscript:whitelist", (_source, identifiers) => {
const fivem = identifiers.fivem;
return fivem && allowed.has(fivem) ? null : Locale("CONNECT_NOT_WHITELISTED");
});Kontrol oyuncu bağlanırken çalışır ve hemen cevap vermelidir: veritabanı sorgusu yok, await yok, Wait yok. Kontrol ettiğin şeyi bellekte tut (açılışta yükle, değiştiğinde güncelle). Hata fırlatan bir kontrol loglanır ve atlanır, böylece asla herkesi dışarıda bırakmaz.
RegisterReplacement
Bir script’in başkalarını gereksiz kıldığını bildirir (script’in onlarınkiyle aynı işi yapar). İkisi de kuruluyken ai-core konsolda uyarır ve silinecek klasörü söyler; ikisi de başlatılmışken ve panelin Refuse players while both run ayarı açıkken kimse giremez.
Taraf: Server · Bekler: hayır · Lib: yok
RegisterReplacement(remove: string | string[], keep?: string): voidexports['ai-core']:RegisterReplacement({ 'qb-banking', 'okokBanking' })Parametreler
Prop
Type
Dönüş değeri
Hiçbir şey. Çağıran resource durduğunda kural kaldırılır. ai-core herhangi bir resource başladıktan ya da durduktan bir saniye sonra çakışmaları yeniden kontrol eder.
Örnek
import { resourceExport } from "@aicore-fivem/lib/server";
const core = resourceExport("ai-core");
// Bizim banka script’imiz bunların yaptığını yapar; ikisini birden çalıştırmak banka ekranlarını ikiye katlar.
core.RegisterReplacement(["qb-banking", "okokBanking"]);Değiştiremediğin bir resource (escrow’lu bir script) aynısını fxmanifest.lua dosyasındaki bir satırla bildirebilir: ai_replaces 'qb-banking'.
GetConflicts
Şu an bulunan her çakışma: onun yerine geçen bir script’in yanına kurulmuş bir script.
Taraf: Server · Bekler: hayır · Lib: yok
GetConflicts(): { keep: string; remove: string; running: boolean; from: string }[]local conflicts = exports['ai-core']:GetConflicts() -- tablo listesiParametreler
Yok.
Dönüş değeri
Çakışma başına bir kayıt içeren bir liste:
Prop
Type
Çakışma yoksa boş liste.
Örnek
import { addCommand, resourceExport } from "@aicore-fivem/lib/server";
const core = resourceExport("ai-core");
addCommand("conflicts", { help: "Lists scripts to remove", restricted: true }, () => {
for (const c of core.GetConflicts())
console.log(`${c.keep} replaces ${c.remove}${c.running ? " (both started!)" : ""} [${c.from}]`);
});Loglar
Resource’unun loglarını ai-core üzerinden Discord’a, Fivemanage’e, FiveM Stats’e ve konsola gönder ve log kanallarını tanımla.
Admin paneli ve komutlar
ai-core’un admin panelinin arkasındaki export’lar - panel kaydı, panel değişiklikleri, Commands sekmesi, lookup listeleri ve gösterge panelindeki diğer script’lerin ayar ekranları.