Modul & Import
Pecah gamemode menjadi modul dan bagikan fungsi export.
Modul adalah file .sa biasa dengan header module yang bisa di-import file lain. Modul membuat gamemode besar tetap rapi dan memungkinkan Anda memasang sistem buatan komunitas tanpa mengubah file utama.
1. Menulis modul
Buat Gamemodes/modules/economy.sa, di sebelah gamemode Anda (folder modules di dalam folder gamemode juga bisa).
knight
module "economy" {
version: "1.0.0";
author: "Knight";
};
let balances = {};
function economyAdd(int id, int amount) {
balances[id] = at(balances, id) + amount;
return at(balances, id);
}
export function economyBalance(int id) {
return at(balances, id);
}
export function economySpend(int id, int amount) {
if (at(balances, id) < amount) { return false; }
balances[id] = at(balances, id) - amount;
return true;
}
Note
Metadata
module opsional. export adalah penanda untuk manusia: semua function level atas dalam satu program bisa dipanggil dari file mana pun.2. Import modul
knight
import "economy";
system::start() {
AddPlayerClass(0, 1958.4, 1343.2, 15.4, 270.0, 24, 50);
economyAdd(0, 100);
};
player::command("/bal") {
SendClientMessage(playerid, "Saldo: {economyBalance(playerid)}");
};
3. Hook dan veto
Modul bisa mendaftarkan hook event dengan on. Mengembalikan false memveto event: handler berikutnya tidak jalan dan aksi default dilewati.
knight
module "anticheat" { version: "1.0.0"; };
const MAX_WARNINGS = 3;
const BANNED = ["cheat", "hack", "aimbot"];
let warnings = {};
on player::chat(string message) {
let low = lower(message);
for (let word in BANNED) {
if (contains(low, word)) {
let n = at(warnings, playerid) + 1;
warnings[playerid] = n;
SendClientMessage(playerid, "Peringatan {n}/{MAX_WARNINGS}");
if (n >= MAX_WARNINGS) { Kick(playerid); }
return false;
}
}
return true;
};
4. Lokasi pencarian modul
| Urutan | Contoh |
|---|---|
| Folder gamemode | Gamemodes/economy.sa |
| modules/ di sebelah gamemode | Gamemodes/modules/economy.sa |
| modules/ satu level di atas | modules/economy.sa |
| Direktori kerja | modules/economy.sa |
Setiap modul dimuat sekali. Import melingkar dilaporkan sebagai error saat start.
5. Error yang mungkin muncul
| Pesan | Arti |
|---|---|
module not found: x | Tidak ada x.sa di semua lokasi pencarian. |
circular import: a -> b -> a | Dua modul saling import. |
expected ';' after event block | Blok hook on wajib diakhiri ;. |