• 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!

UpDate klienta

Hakur

New Member
Joined
Feb 12, 2012
Messages
145
Reaction score
1
Witam, piszę tego posta ze względu iż potrzebuję od was pomocy żebyście mnie "nakierowali" jak można zrobić do edytowanego klienta do ots'a coś w stylu informacji gdy update (no chodzi o zmianę protokołu, taki mały że np mapa + jakieś tam aktualizacje skryptów) to na starszym kliencie nie można się już zalogować. Czyli mam klienta np nazwę go sobie Tibus 1.0 i zrobie małego patcha i zmienię nazwę wszędzie na Tibus 1.1 to chciałbym wtedy żeby na tibus 1.0 już nie można było się logować i pojawiała się informacja o update a na tibus 1.1 już normalnie. Widziałem na wielu ots'ach z własnymi klientami że tak mają zrobione.
Tutaj przykładowy ss

http://img259.imageshack.us/img259/2820/testcxs.png


Prosił bym o podanie jakich linków do tematów albo wytłumaczenie jak to zrobić gdyż naprawde szukałem tego i nie mogłem znaleźć. (możliwe że pod złymi frazami)
 
Last edited:
Przy aktualizacji mapy i skryptów użytkownik nie musi ponownie ściągać klienta, może że dodasz/zmienisz coś w kliencie, wtedy jest takowa potrzeba. Nie wiem czy da rady tak zrobić, ale najpierw powinieneś ręcznie zmienić protokół w swoim kliencie np. z 8.54 (854) na jakiś własny (105) i sprawdzać to przy połączeniu z serwerem, w pliku definitions.h mam definicję z klientem, który jest akceptowany.

A jeśli chodzi o updater'a wystarczy go napisać w C# lub Javie, takie coś raczej nie powinno być trudne. Przy włączenia sprawdza czy klient jest aktualny, jeśli nie - aktualizuje go.
 
No dobra ale jeśli ustawił bym w kliencie wersje 1.00 (8.54) to co potem? W resources.h zmienić te linie?
#define CLIENT_VERSION_MIN 854
#define CLIENT_VERSION_MAX 854
 
No tak, i raczej wszystko powinno być w porządku.
 
Nie działa tak ;/ Zrobiłem że w resources zmieniłem z 854 max i mini na 100 i w kliencie świeżym nic nie zmieniałem cały 854 to nadal normalnie mogłem wbijać ;/
(tak komplikowałem i odpaliłem nowy)
 
Last edited:
Nie działa tak ;/ Zrobiłem że w resources zmieniłem z 854 max i mini na 100 i w kliencie świeżym nic nie zmieniałem cały 854 to nadal normalnie mogłem wbijać ;/
(tak skomplikowałem i odpaliłem nowy)

Bo to nie jedyna zmiana - musisz napisać funkcje która będzie ten protocol sprawdzać i porównywać z akceptowanym
 
Czyli dupa ;/ bo nie bardzo wiem jak to zrobic
Poszukaj sobie, jeden warunek więc wcale nie powinno być tak trudno, choć przecież każdy silnik sprawdza czy klient, który się łączy jest podaną wersje, więc raczej coś sknociłeś :O
 
#up tak
#Ralcoral no własnie nie mogłem znaleźć pod różnymi frazami szukałem ;/
 
a masz tak:

#define CLIENT_VERSION_MIN 100
#define CLIENT_VERSION_MAX 100

??

i zobacz czy w protocolgame.cpp masz takie cos

if(version < CLIENT_VERSION_MIN || version > CLIENT_VERSION_MAX)
{
disconnectClient(0x0A, CLIENT_VERSION_STRING);
return false;
}

bo to musi działać..
 
No tak mam tylko w protocolgame.cpp mam tak
if(version < CLIENT_VERSION_MIN || version > CLIENT_VERSION_MAX)
{
disconnectClient(0x14, CLIENT_VERSION_STRING);
return false;
}
A gdy zmieniłem 0x14 na 0x0A to przy logowaniu debug klienta

a w protocollogin.cpp jest tak jak dałeś czyli
if(version < CLIENT_VERSION_MIN || version > CLIENT_VERSION_MAX)
{
disconnectClient(0x0A, CLIENT_VERSION_STRING);
return false;
}
 
Tutaj jest wszystko dobrze wystarczy że tylko stałe w definitions.h podmienisz
PHP:
CLIENT_VERSION_MIN = 100
CLIENT_VERSION_MAX = 100
I oczywiście w kliencie, i wszystko powinno dobrze działać.
 
Aha przez przypadek zapomniałem zmienić protokołu serwera ale mam inny problem ze zmianą wersji w kliencie bo gdy tam gdzie info jest zmieniłem na 1.00 to nie moge się logować bo za stary klient a nigdzie nie mogę w hexach klienta znaleźć coś jeszcze z klientem 8.54
 
Aha przez przypadek zapomniałem zmienić protokołu serwera ale mam inny problem ze zmianą wersji w kliencie bo gdy tam gdzie info jest zmieniłem na 1.00 to nie moge się logować bo za stary klient a nigdzie nie mogę w hexach klienta znaleźć coś jeszcze z klientem 8.54


poszukaj na forum jest na 100% jak to zmienić coś kojarze ze jak masz 8.54 to w kliencie jest jakby 5408 oczywiście musisz prze konwertować to na hex
 
No właśnie szukałem troche czasu i nie mogłem nic znaleźć tylko jak na mc zmienic ;/
 
Zamiast bawić się za każdym razem w wersję klienta, gdy np wypuszczasz poprawkę pic/dat/spr, zmieniaj sygnatury plików. W Noxitu powinieneś mieć zmianę sygnatury pliku...

Przy silniku 8.54 powinieneś mieć coś takiego w protocollogin.cpp:

Code:
	/*uint16_t clientos = */msg.GetU16();
	uint16_t version = msg.GetU16();
	msg.SkipBytes(12);

zamiast ostatniej linijki wstaw sobie:

Code:
	uint32_t datSignature = msg.GetU32();
	uint32_t sprSignature = msg.GetU32();
	uint32_t picSignature = msg.GetU32();

i porównaj:

Code:
	if(sprSignature != z)
	{
		disconnectClient(0x0A, "Aktualizacja SPR");
		return;
	}

	if(datSignature != y)
	{
		disconnectClient(0x0A, "Aktualizacja DAT");
		return;
	}

	if(picSignature != x)
	{
		disconnectClient(0x0A, "Aktualizacja PIC");
		return;
	}

Oczywiście da się to przenieść do config.lua żebyś nie musiał przekompilowywać za każdym razem.
Jeśli chodzi o samo .exe, to musisz zmieniać bajcik, który jest.. gdzieśtam :) Nie no, do 8.54 chyba slawkens gdzieś tu wrzucał na forum adres do tego bajta.
 
O dzieki elf, ale nie mogłem znaleźć tego bita i jak bym znalazł to na jakiego zmienić?
 
Pozwolę sobie na wykorzystanie tego tematu.

Czy da się przy tym wykorzystać cipowski updater??
 
Back
Top