• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Podstawy, jak działa komunikacja

Pikunio

New Member
Joined
Aug 7, 2023
Messages
2
Reaction score
0
Hej,

Ostatnio wpadłem sobie na genialny pomysł jakim jest zgłebienie kodu serwera Tibii. Troche pojęcia o samym programowaniu mam więc zaciekawiła mnie kwestia jak jest zapisywana informacja o stanie graczy/potworów na mapie. Jak wyglada update tego że jak ja się porusze to gracz obok mnie widzi to. To nie jest przeciez chyba zapis na bazke z kazdym ruchem bo to by bylo jakies crucial dla performance albo po prostu bredze. Wiec tutaj pytanka jak komuś by się nudziło i chciałby to skrócić i opisać.

1. Jak wygląda komunikacja serwer <->client. To jest po jakims websockecie czy cos innego?
2. Czy na serwerze na DB jest zapisywane wszystko na biezaco, czy co jakis czas. Jak co jakis czas to i tak musi byc pewnie gdzies przetrzymywana tymczasowo wartosc przykladowego gracza w przypadku disconnecta.
3. Jak wyglada odswiezanie tego co sie dzieje na ekranie. Gracz co X milisekund zaciaga info z serwera, czy po prostu z kazdym ruchem gracza leca jakieś eventy które są dostarczane do wszystkich graczy w jakims X zasięgu.

W sumie tyle, więcej nie pamiętam, moze po uzyskaniu odpowiedzi pojawią się kolejne :D

Z góry dzięki za odpowiedzi jak jakieś się pojawią.
 
1. Komunikacja jest natywna, odbywa się na bazie TCP/IP, ruch jest dodatkowo szyfrowany przez algorytm XTEA zaraz po handshake który stosuje RSA do zaszyfrowania wymiany klucza XTEA. Komunikacja późniejsza korzysta z symetrycznego XTEA, a nie z asymetrczynego RSA, dlatego że jest znacznie lżejsza dla procesora.

2. Zapisywana jest gdy gracz się wylogowuje bądź następuje server save. Do momentu zapisania informacje znajdują się w RAMie w postaci zainstancjowanej klasy Player. Pointery do tej klasy znajdziesz w hash mapie 'std::unordered_map<uint32_t, Player*> players;'

3. Jeżeli następują jakieś zdarzenia, np. ktoś się porusza, czy pisze wiadomość, to serwer agreguje zdarzenia do bufora wiadomości, jeżeli jesteśmy w odpowiednim zasięgu. Domyślnie co 10ms (OUTPUTMESSAGE_AUTOSEND_DELAY) bufory są rozsyłane i czyszczone do przyjęcia nowych "zdarzeń". Istnieją też zdarzenia, które są rozsyłane bez względu na nasze położenie.
 
Back
Top