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 / Lua / MTA alapok

Lua alapok MTA:SA fejlesztéshez

Ez a rész azoknak készült, akik MTA:SA resource-okat írnak, feltöltenek vagy ellenőriznek. A legfontosabb cél: a kód legyen átlátható, biztonságos és könnyen javítható.

Alap szabályok

  • Különítsd el a kliensoldali és szerveroldali fájlokat.
  • A `shared` fájlba csak olyan konstansok és közös beállítások kerüljenek, amelyek mindkét oldalon biztonságosan láthatók.
  • A kliensoldal soha ne legyen bizalmi forrás.
  • A pénzt, rangot, inventoryt, jármű tulajdonjogot és admin műveletet mindig szerveroldalon ellenőrizd.
  • A túl sok `setTimer`, `onClientRender` vagy globális változó később komoly lagot okozhat.

Ajánlott fájlfelosztás

my_resource/
  meta.xml
  shared/config.lua
  client/main.lua
  client/ui.lua
  server/main.lua
  server/database.lua
  assets/images/logo.png

Jó event használat

A kliens kérhet műveletet, de a szerver döntse el, hogy engedélyezett-e.

-- client/main.lua
triggerServerEvent("shop:buyItem", localPlayer, "repairkit", 1)

-- server/main.lua
addEvent("shop:buyItem", true)
addEventHandler("shop:buyItem", root, function(itemId, amount)
    local player = client
    if not isElement(player) then return end

    amount = tonumber(amount) or 0
    if amount < 1 or amount > 10 then return end

    local price = getItemPrice(itemId)
    if not price then return end

    if getPlayerMoney(player) < price * amount then
        return
    end

    takePlayerMoney(player, price * amount)
    givePlayerItem(player, itemId, amount)
end)

Gyakori hiba

-- rossz: source alapján dönteni veszélyes lehet
local player = source

Helyette szerveroldali klienses eventnél használd a client változót, és ellenőrizd, hogy valós player-e.