[serverdowner]fix-variante #1 - python (1500 Thanks-Release)

07/14/2013 17:29 .XXShuzZzle#31
So und jetzt nochmal für alle die denken Ja das Geht nur bei der Zahl oder weiß was ich.
Der Int kann einem maximalem Bereich von genau -2,147,483,647 bis + 2,147,483,647 haben dabei benutzt er 4 bytes. Das heißt jede Andere Größere Zahl == Würrg, weil Metin2 mal wieder schlecht gecoded ist und kein vernünftiges Error-handling hat. Was ihr machen könntet wäre den Int in einem BigInt umzuändern. Achtung Bigint braucht 8bytes hat aber dafür einem maximalen Bereich von -2^63 (-9,223,372,036,854,775,808) bis 2^63-1 (9,223,372,036,854,775,807). Dann müsste man weitaus größere Zahlen eingeben. Am besten man noppt die Kacke einfach aus :D
07/14/2013 20:38 Computerfreek#32
Quote:
Originally Posted by .XXShuzZzle View Post
So und jetzt nochmal für alle die denken Ja das Geht nur bei der Zahl oder weiß was ich.
Der Int kann einem maximalem Bereich von genau -2,147,483,647 bis + 2,147,483,647 haben dabei benutzt er 4 bytes. Das heißt jede Andere Größere Zahl == Würrg, weil Metin2 mal wieder schlecht gecoded ist und kein vernünftiges Error-handling hat. Was ihr machen könntet wäre den Int in einem BigInt umzuändern. Achtung Bigint braucht 8bytes hat aber dafür einem maximalen Bereich von -2^63 (-9,223,372,036,854,775,808) bis 2^63-1 (9,223,372,036,854,775,807). Dann müsste man weitaus größere Zahlen eingeben. Am besten man noppt die Kacke einfach aus :D
(-2^64)-(2^64-1), ist schließlich 64 bit und kein 63 bit. Daher stimmen deine Zahlen so nicht.
Und das in dem Falle umzuschreiben ist im Grunde gar nicht machbar, weil das Programm auf 32 bit kompiliert ist und somit nichts größer als 4 Byte nimmt - zumindest nicht auf einem Mal.
Will man es unbedingt doch machen, nimmt man ab besten eine bestehende Lib für solche Probleme und nutzt eine libgame. Alles andere ist ziemlich sadistisch.
07/14/2013 20:57 DasKuchen#33
Quote:
Originally Posted by .Raicon View Post
Naja nette Idee leider bringt es nichts :)

1.) Es gibt eine bestimmte Reichweite an Zahlen die den Core platt machen ;D
2.) Man kann den Clienten umgehen und direkt mit dem Server packete austausche.
z.B. der HBot von Nico_W.
3.) Nimmt man einfach nen anderen Befehl außer Dice.

LG . Raicon
4.) Man kann direkt das ChatPaket senden.
07/14/2013 21:18 Computerfreek#34
Quote:
Originally Posted by DasKuchen View Post
4.) Man kann direkt das ChatPaket senden.
Das können nur Ausnahmefälle. Und die, die das können, die legen für gewöhnlich keine Server down.
07/14/2013 21:22 sucopowa#35
Quote:
Originally Posted by .Raicon View Post
3.) Nimmt man einfach nen anderen Befehl außer Dice.

LG . Raicon

wie zum besipiel?
habe selber ein server, möchte mich einfach nur schlauer machen ^^
danke :)
07/14/2013 21:34 callmax#36
Quote:
wie zum besipiel?
habe selber ein server, möchte mich einfach nur schlauer machen ^^
danke
Quote:
int number_ex(int first, int second, const char *szSrcFile, int iLineNo)
{
int _first = first;
int _second = second;
if ( first > second )
{
sys_err(
"number_ex",
362,
"number(): first argument is bigger than second argument %d -> %d, %s %d",
first,
second,
szSrcFile,
iLineNo);
_second = first;
_first = second;
}
return _first + thecore_random() % (_second + 1 - _first);
}
Jeder Befehl der die Funk aufruft sollte dazu fähig sein
07/14/2013 21:42 sucopowa#37
Quote:
Originally Posted by callmax View Post
Jeder Befehl der die Funk aufruft sollte dazu fähig sein
warum wisst ihr alle so viel????

warum weis ich so wenig? T___________T


(kanst du nicht so ne korrekte wissens übertragung machen? xD

danke für die info ^^


PS: um zu wissen welche befehle diese funktzion aufruffen müsste ich de game entpacken und irgendwo reinschauen...?
denke ja xD
07/14/2013 23:36 Red Firestar#38
Quote:
Originally Posted by .Avenue™ View Post
Code:
		name = player.GetName()
		if text.find("-2147483648")!=-1 or text.find("2147483647")!=-1 or text.find("/")!=-1:
			if name.find("[")!=-1 or name.find("]")!=-1:
				net.SendChatPacket(text, type)
			else:
				chat.AppendChat(chat.CHAT_TYPE_INFO, "Der Befehl wurde nicht gefunden.")
		else:
			net.SendChatPacket(text, type)
in die uichat.py.
Wohin es genau kommt, sollte selbsterklärend sein.

Habe auch eine dif für die game r34083 geschrieben (nur für dice)
Code:
This difference file has been created by Avenue 

r34083 
0041E28A: 64 90 
0041E28B: 69 90 
0041E28C: 63 90 
0041E28D: 65 90
für die r2019
Code:
This difference file has been created by Avenue 

r2019
002FAF6A: 64 90
002FAF6B: 69 90
002FAF6C: 63 90
002FAF6D: 65 90
für die r2089M_32
Code:
This difference file has been created by Avenue 

r2089M_32
002FAFEA: 64 90
002FAFEB: 69 90
002FAFEC: 63 90
002FAFED: 65 90
Danke *-* wird vielen Helfen.
07/15/2013 00:47 iYoshix3#39
So könnte man "/" im Text auch nicht mehr verwenden...
Code:
if text[0] == "/" and not player.GetName()[0] == "[":
 return
Das wäre meiner meinung nach der beste Clientside fix.
Außerdem könnte man einfach, wie schon gesagt ein Packet an den Server senden,
ohne den Clienten zu nutzen. Oder ein Python Script injecten, dass dann dieses
Packet ausführt und den Code sendet. Gibt ja genug möglichkeiten.

Mfg,
Yoshix3
07/15/2013 12:34 xworldx#40
is possible find in some log, who shutdowned server ? thx