MTADEV Tudástár

Használható MTA:SA fejlesztői dokumentáció

Gyakorlati leírások Lua, resource struktúra, SQL, biztonság, optimalizálás, moderáció és Discord/web összekötés témákban. Nem csak szöveg: ellenőrzőlisták és másolható példák is vannak.

9 cikk 9 kategória gyakorlati példák
Tudástár / Biztonság

Biztonságos client/server event kezelés

MTA-ban a kliensoldali kódot a játékos gépe futtatja, ezért nem szabad vakon megbízni abban, amit a kliens küld.

Amit mindig szerveroldalon ellenőrizz

  • Játékos pénze.
  • Játékos rangja és admin jogosultsága.
  • Inventory item létezése.
  • Távolság markerhez, NPC-hez, járműhöz.
  • Cooldown / spam védelem.
  • Mennyiség, ár, ID, SQL rekord tulajdonjoga.

Példa távolság ellenőrzésre

local shopPos = Vector3(1234.0, -1450.0, 13.5)

addEvent("shop:open", true)
addEventHandler("shop:open", root, function()
    local player = client
    if not isElement(player) then return end

    local px, py, pz = getElementPosition(player)
    if getDistanceBetweenPoints3D(px, py, pz, shopPos.x, shopPos.y, shopPos.z) > 4 then
        return
    end

    triggerClientEvent(player, "shop:showPanel", resourceRoot)
end)

Event spam védelem

local lastUse = {}

function isOnCooldown(player, key, seconds)
    local now = getTickCount()
    local id = getPlayerSerial(player) .. ":" .. key
    if lastUse[id] and now - lastUse[id] < seconds * 1000 then
        return true
    end
    lastUse[id] = now
    return false
end

Tiltott szemlélet

  • „A kliens úgysem tudja meghívni.” De tudja.
  • „A panelben nincs ilyen gomb.” Nem számít.
  • „A serial alapján majd jó lesz.” A serial hasznos, de önmagában nem jogosultság.