İçeriğe geç

Geliştirici export'ları

Sunucu scriptlerin Fiveops’u exports.fiveops:<ad>(…) ile çağırabilir. İşlemler web paneliyle aynı yoldan geçer ve Fiveops loguna yazılır. Export’lar yalnızca sunucu tarafında çalışır.

my_admin/server.lua
RegisterNetEvent('my_admin:revive', function(target)
local src = source
local allowed = exports.fiveops:hasPermission(src, 'revive')
if not (allowed.ok and allowed.data) then return end
local result = exports.fiveops:revive(target, src)
if not result.ok then
print(('canlandırma olmadı: %s'):format(result.error))
end
end)

Export’ları bir olay işleyicisinden ya da thread içinden (CreateThread) çağır: bazıları Fiveops bulutunun cevabını bekler.

AlanDeğer
oktrue ya da false
dataok true ise sonuç (aşağıdaki tablolarda)
errorok false ise hata kodu
detailHatayla ilgili ek bilgi; nil olabilir
errorAnlamı
player_not_foundOyuncu sunucuda değil ya da karakter yok.
invalid_argsBir parametre eksik ya da hatalı; detail hangisi olduğunu söyler.
unsupportedFramework’ün ya da scriptlerin bunu desteklemiyor (ör. ox_inventory yok).
frameworkFramework değişikliği reddetti.
cloudFiveops bulutu kabul etmedi.
not_foundEşleşen bir şey yok (ör. duyurunun alıcısı yok).
rate_limitedÇok sık gönderildi; biraz bekleyip yeniden dene.
session_errorYetkili bilgisi şu an Fiveops’tan alınamadı. Ayrıntı session_pending ise çağrı bir thread dışından geldi ve beklenemedi: CreateThread içinden çağır.
internalBeklenmeyen hata; sunucu konsolunda export … hata satırı çıkar.

Her işlemin son parametresi performedBy (isteğe bağlı). Fiveops logunda export’u çağıran resource her zaman görünür; performedBy işlemi kimin yaptığını ekler.

performedByLogda görünen
Oyuncunun sunucu ID’si (sayı)O oyuncu, tam kimliğiyle (hesap, karakter, Discord)
MetinO ad
{ name = '…', discordId = '…' }Ad ve Discord hesabı
nilYalnızca resource adı

Yapılamayan işlemler de sebebiyle loglanır. Oyuncu ya da yetkili okumak loglanmaz.

ExportParametrelerdata
getPlayers()—Çevrimiçi oyuncuların listesi
getPlayer(target)Sunucu ID’si ya da çevrimdışı karakter için citizenId (metin)Tek oyuncu; ek olarak cash, bank ve identifiers (IP asla yok)
getStaff(src)Sunucu ID’si{ staff = false } ya da { staff = true, role, title, permissions }
hasPermission(src, permission)Sunucu ID’si, izin anahtarı (ör. kick, ban, revive, heal)true ya da false; sahip ve yönetici rollerinde her izin var

Oyuncu alanları: id, online, name (karakter), account, citizenId, discordId, job = { name, label, grade, gradeLabel, isBoss, onDuty }, gang, state (alive, down, dead), frozen, staff, staffTitle. Çevrimdışı karakterde online = false ve id yerine lastSeen olur.

ExportParametrelerdata
kick(target, reason, performedBy)Sunucu ID’si; sebep zorunlutrue
ban(target, reason, duration, performedBy)Sunucu ID’si ya da citizenId; duration saniye, 0 kalıcıYasak kaydı (id, reason, expiresAt)
revive(target, performedBy)Sunucu ID’si{ framework }: yalnızca oyunun canlandırması çalıştıysa false
heal(target, performedBy)Sunucu ID’sitrue
freeze(target, state, performedBy)Sunucu ID’si; state = false çözer{ frozen }
teleport(target, coords, performedBy)Sunucu ID’si; vector3 ya da { x, y, z }; z yoksa zemin bulunurtrue
giveItem(target, item, count, metadata, performedBy)Sunucu ID’si ya da citizenId; ox_inventory eşya adı; count varsayılan 1; metadata isteğe bağlıtrue
giveMoney(target, account, amount, performedBy)Sunucu ID’si ya da citizenId; account cash ya da bank{ cash, bank }
setJob(target, job, grade, performedBy)Sunucu ID’si ya da citizenId; meslek adı ve rütbetrue
announce(card, performedBy)Aşağıda{ id, count }: count alıcı sayısı

citizenId hedefi, framework’ün destekliyorsa paneldeki gibi çevrimdışı da çalışır.

exports.fiveops:announce({
title = 'Sunucu yeniden başlıyor',
text = 'Sunucu 10 dakika sonra yeniden başlayacak.',
style = 'warning',
target = { kind = 'all' },
}, 'Restart botu')
AlanDeğer
textZorunlu, en çok 500 karakter
titleİsteğe bağlı, en çok 64 karakter
styleannounce (varsayılan), info, event, warning, urgent
seconds4–45, varsayılan 10
soundSessiz için false
signaturenone (varsayılan), performedBy’ın role’ü ya da name’i
targetKimler görecek; varsayılan herkes
targetAlıcılar
{ kind = 'all' }Herkes
{ kind = 'players', ids = { 3, 12 } }Bu sunucu ID’leri
{ kind = 'staff' }Oyundaki yetkililer
{ kind = 'job', name = 'police', grades = { 2 }, duty = true }Bir meslek; grades ve duty isteğe bağlı
{ kind = 'gang', name = 'ballas' }Bir çete
{ kind = 'state', states = { 'dead', 'down' } }Bu durumdaki oyuncular
{ kind = 'radius', center = 12, meters = 50 }Bir oyuncunun çevresi (10–2000 m)
{ kind = 'role', roleId = '…' }Bir Discord rolündekiler

Menüdeki sınır burada da geçerli: gönderen başına 8 saniyede bir duyuru, sunucu genelinde dakikada en çok 6.

Sunucu scriptinde AddEventHandler ile dinle.

OlayArgümanlar
fiveops:characterDeletedcitizenId, { id, name, via, batch }
fiveops:characterRestoredcitizenId, { id, name }
fiveops:charactersDeletedToplu işlem ID’si, { total, ok, failed, skipped, via, ref }

exports.fiveops:emit('staff.action', { actor = 'Atlas', action = 'jail' }) kendi scriptinin bir işlemini paneldeki yetkili etkinliğine sayar (actor ve action zorunlu, en çok 64 karakter; target ve meta isteğe bağlı). Fiveops loguna yazılmaz.