Knight docs
EN ID
GitHub

SQLite

Simpan data di file lokal dengan SQLite, sinkron atau asinkron.

SQLite tidak butuh server: database adalah sebuah file. Ideal untuk server kecil dan menengah.

Buka dan buat

knight
let DB = 0;

system::start() {
    DB = sqlite_open("data/server.db");
    sqlite_exec(DB, "CREATE TABLE IF NOT EXISTS accounts (name TEXT PRIMARY KEY, hash TEXT, score INTEGER DEFAULT 0)");
};

Query sinkron

knight
// Mengembalikan indeks hasil, atau null bila error.
let r = sqlite_query(DB, "SELECT score FROM accounts WHERE name = ?", PlayerName(playerid));
if (r != null) {
    let score = cache_get_value_name_int(r, 0, "score");
}

// Mengembalikan null bila sukses, atau string error.
let err = sqlite_exec(DB, "INSERT OR REPLACE INTO accounts (name, score) VALUES (?, ?)", PlayerName(playerid), 10);
Warning
Query sinkron berjalan di tick loop. Query lambat menahan semua pemain. Gunakan bentuk asinkron untuk apa pun yang mungkin lambat.

Query asinkron

knight
function onLoaded(result, err) {
    if (err != "") { Log("error: " + err); return; }
    Log("baris = " + str(cache_get_row_count(result)));
}

player::command("/load") {
    sqlite_query_async(DB, "onLoaded", "SELECT * FROM accounts");
};

Path

Path relatif terhadap direktori kerja server. Gunakan path absolut atau buat foldernya lebih dulu.

Backup