Kintamieji:
pck (string) - paketo turinys be pirmu dveju baitu
FromClient (boolean) - ar paketas atejo is kliento
FromServer (boolean) - ar paketas atejo is serverio
buf (string) - buferis. jus zinot kam jis naudijamas
Funkcijos:
ShowTab ir HideTab - panelio atidarymas/uzdarymas kuri galima valdyti skriptu
SendToClient - siuncia buferi klientui
SendToServer - siuncia buferi serveriui
(siunciaunt buferi automatiskai dasideda du baitai nusakantys paketo ilgi)
ReadD(var index:integer):integer - skaito is paketo (pck) sveikaji skaiciu (4 baitus)
ReadS(var index:integer):string - skaito is paketo (pck) eilute
ReadC(var index:integer):byte - skaito is paketo (pck) baita
Index - pradine skaitymo pozicija, kuria keicia funkcija (pakeiciamas i nuskaitytu baitu skaiciu)
HStr(h:string):string - perdaro HEX eilute i tokio tipo eilute kuri saugoma kintamajame pck
Pavyzdziui, HStr('AA 00 BB 00 CC 00') grazins #$AA#$00#$BB#$00#$CC#$00. Funkcijai galima perduoti seka su tarpais ir be ju.
WriteS(v:string) - iraso eilute i buferi (buf) (automatiskai vercia i unicode)
WriteD(v:integer; ind:integer=0) - i buferi (buf) iraso sveikaji skaiciu (4 baitus)
WriteC(v:byte; ind:integer=0) - i buferi (buf) iraso viena baita
Paskutinese dvejose funkcijose parametras ind nera butinas. Jei parametras nenurodytas, tuomet buferis papildomas baitu/skaiciumi, o jei nurodytas - modifikuojamas buferis.
Pavizdys:
buf=HStr('AA BB CC DD EE');
Jeigu WriteD(10,1), tuomet buf=[0A 00 00 00 EE].
O jei WriteD(10), tuomet buf=[AA BB CC DD EE 0A 00 00 00].
http://fursoffers.narod.ru/Packets.htm
Paketai
1) Kiekvienas paketas susideda is paketo dydzio(2 baitai), paketo tipo(1 baitas) ir bloko parametru(ilgio). Login serverio paketuoe gale paketo pridedama paketo kontroline suma ir uzpildoma nuliais tiek kad paketo ilgis butu didesnis 8 baitais.
2) Paketo eilutes tai ANSI baitai padalinti nuliais, eilutes pabaiga reiskia du nuliai.
Pavizdys: 'A', 0x00, 'B', 0x00, 'C', 0x00, 0x00, 0x00
3) Baitai zodziuose ir dvigubuose zodziuose siunciami atvirkscia tvarka. Reiskias jeigu siunciame skaiciu 1, tuomet reikia ji uzrasyti 01 00 00 00, o ne 00 00 00 01.
4) Kontroline paketo suma skaiciuojama taip:
unsigned long checksum( unsigned char *packet, int count )
{
long chksum = 0L;
for( int i = 0; i < count; i += 4 ) chksum ^= *((unsigned long *)&raw[i]);
return chksum;
};
5) Bendravimo su gameservu procesas:
1. Iskart po uzmegsto rysio serveris klientui siuncia paketa Init
2. Kliento atsakymas yra paketas RequestGGAuth
3. Serverio atsakymas - paketas GGAuth
4. Jeigu gameguardo autorizacija sekminga, klientas siuncia RequestAuthLogin paketa kuriame yra loginas ir slaptazodis
5. Loginas nesekmingas - serverio atsakymas paketas LoginFail, kitu atveju serveris siuncia paketa LoginOk, kuriame saugomas sesijos raktas (session key) #1. l2j jis pastovus.
6. Tuomet klientas uzklausia serveriu saraso paketu RequestServerList
7. Atsakymas - paketas ServerList, jame atsiunciamas serveriu sarasas su ju ip adresais ir portais.
8. Po gameserverio pasirinkimo klientas siuncia RequestServerLogin paketa
9. LoginServer patikrina ar accountas nera uzbanintas, ar nepasiektas maksimalus zaideju skaicius, serverio bukle, jei visi patikrinimai praeiti sekmingai tuomet siunciamas paketas PlayOk kuriame saugomas sesijos raktas (session key) #2, raktas generuojamas pagal sistemini serverio laika milisekundemis, soketo numeri.
10. Po to klientas issiuncia paketa AuthLogin pasirinktam serveriui, perduoda session key #1, ir session key #2 ir logina, reikalinga generavimo raktui pagal kuri bus sifruojami visi paketai.
11. Serveris siuncia PlayOk paketa kuriame saugomas veikeju sarasas.