FiveM
Server
Server tarafı kalıpları — callbackler, oxmysql, yetki kontrolü.
Olay + kaynak doğrulama
source'u her zaman olayın başında yakala; sonra Wait çağrıları onu bozar.
RegisterNetEvent('liveDev:buyItem', function(item, amount)
local src = source
local Player = exports['qb-core']:GetCoreObject().Functions.GetPlayer(src)
if not Player then return end
local price = (Config.Prices[item] or 0) * amount
if Player.Functions.RemoveMoney('cash', price) then
Player.Functions.AddItem(item, amount)
TriggerClientEvent('ox_lib:notify', src, {
type = 'success',
description = ('%dx %s alındı'):format(amount, item),
})
end
end)ox_lib callback (server → client cevap)
lib.callback.register('liveDev:getBalance', function(source)
local Player = exports['qb-core']:GetCoreObject().Functions.GetPlayer(source)
return Player and Player.PlayerData.money.bank or 0
end)oxmysql sorguları
-- Tekil satır
local row = MySQL.single.await(
'SELECT * FROM player_vehicles WHERE plate = ?',
{ plate }
)
-- Liste
local vehicles = MySQL.query.await(
'SELECT plate, label FROM player_vehicles WHERE citizenid = ?',
{ cid }
)
-- Yazma + etkilenen satır
local affected = MySQL.update.await(
'UPDATE player_vehicles SET stored = 1 WHERE plate = ?',
{ plate }
)SQL injection
Asla string birleştirme ile sorgu kurma. Her zaman ? placeholder + parametre
dizisi kullan.