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
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.pngJó 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 = sourceHelyette szerveroldali klienses eventnél használd a client változót, és ellenőrizd, hogy valós player-e.