Knight docs
EN ID
GitHub

Arsitektur

Bagaimana engine berlapis dan kenapa gameplay tetap di gamemode.

Prinsip desain

Lapisan

text
Klien (SA-MP 0.3.7 / 0.3.DL)
   │ UDP
   ▼
raknet        transport, cookie, ACK/ordering, fragmentasi
   │
   ▼
samp/protocol encode/decode RPC, struct sync, InitGame
   │
   ▼
server        peer, pool dunia, streaming, dispatch event
   │
   ▼
runtime       evaluator AST Knight + tabel native
   │
   ▼
gamemode (.sa)  callback + native = gameplay

Alur event chat

text
klien → RPC_Chat (101)
  → protocol.ParseChat
  → runtime.OnPlayerText(playerid, text)
      jika handler ada dan return false → berhenti
  → selain itu broadcast ke semua klien

Streaming

Pemain, kendaraan, objek, label, dan pickup di-stream berdasarkan jarak. Radius stream berasal dari streamdistance di server.cfg dan dapat diubah saat runtime.

Konkurensi

Pemrosesan paket single-threaded per tick, jadi state dunia tidak butuh lock. Pekerjaan database berjalan di goroutine worker dan mengirim hasil kembali ke tick loop, tempat callback gamemode dipanggil.

Note
Itulah sebabnya callback database dan timer berjalan di loop utama: kode gamemode tidak pernah dieksekusi bersamaan.