Protokol Jaringan
Format wire, id RPC, dan catatan kompatibilitas.
Knight berbicara protokol wire SA-MP 0.3.7, termasuk tambahan 0.3.DL. Kompatibel byte dengan klien resmi, jadi tidak perlu patch klien.
Transport
- UDP dengan handshake offline RakNet legacy (cookie + auth key).
- Obfuscation: port server menjadi mask kunci enkripsi.
- Kanal reliable ordered 0–31, paket unreliable dan unreliable-sequenced.
- Fragmentasi payload di atas MTU dengan reassembly.
Handshake koneksi
text
klien server
| OpenConnectionRequest1 -> |
| <- OpenConnectionReply1 |
| OpenConnectionRequest2 ->
| <- OpenConnectionReply2 | (cookie challenge)
| ConnectionRequest ->
| <- AuthKey | (challenge serial GPCI)
| AuthKey(response) ->
| <- ConnectionAccepted |
| NewIncomingConnection ->
| RPC_ClientJoin (25) -> | versi, nama, serial, version string
| <- RPC_InitGame (139) | hostname, limit, model kendaraan
RPC penting
| Id | Nama | Arah |
|---|---|---|
| 25 | ClientJoin | klien → server |
| 139 | InitGame | server → klien |
| 128 / 129 | RequestClass / RequestSpawn | klien → server |
| 52 | Spawn | klien → server |
| 101 | Chat | klien → server |
| 93 | ClientMessage | server → klien |
| 61 / 62 | ShowDialog / DialogResponse | keduanya |
| 153 | SetPlayerSkin | server → klien |
| 164 / 165 | WorldVehicleAdd / Remove | server → klien |
| 179 | ModelRequest (0.3.DL) | server → klien |
| 183 | ModelUrl (redirect 0.3.DL) | server → klien |
Versi klien
| Nomor | Klien |
|---|---|
| 4057 | SA-MP 0.3.7 |
| 4062 | SA-MP 0.3.DL |
Knight membaca versi dari ClientJoin dan hanya mengirim RPC model kustom ke klien 0.3.DL. Klien lama menerima model dasar.
Encoding teks
String SA-MP adalah Windows-1252. Knight mengubah string UTF-8 gamemode ke CP1252 di wire dan mengubah teks masuk kembali ke UTF-8.