Knight docs
EN ID
GitHub

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

UrutanContoh
Folder gamemodeGamemodes/economy.sa
modules/ di sebelah gamemodeGamemodes/modules/economy.sa
modules/ satu level di atasmodules/economy.sa
Direktori kerjamodules/economy.sa

Setiap modul dimuat sekali. Import melingkar dilaporkan sebagai error saat start.

5. Error yang mungkin muncul

PesanArti
module not found: xTidak ada x.sa di semua lokasi pencarian.
circular import: a -> b -> aDua modul saling import.
expected ';' after event blockBlok hook on wajib diakhiri ;.