[Release] LC-Server fertig / Basierend auf -AquaLung- dateien

08/07/2010 02:45 Boooooooooter#1906
also kann man wieder den boot benutzen von tytal?? ich peil nichts mehr?
08/07/2010 02:48 Endtothenight#1907
Quote:
Originally Posted by Boooooooooter View Post
also kann man wieder den boot benutzen von tytal?? ich peil nichts mehr?
#Fail
Das hat nichts mit dem Thema zu tun.
08/07/2010 02:50 Boooooooooter#1908
okee dann okee...und geht es aber??
08/07/2010 02:54 shadow52#1909
@dsfgd
Einen Emulator dafür zu Coden müsste doch normal nichtmal so schwer sein. Die Pakete werden soweit ich weiß unverschlüsselt gesendet. (Hatt glaube auch jemand mal geschrieben.)

Und die Maps bzw den Link für die Maps hatte ich auch nur aus dem Thread hier.
08/07/2010 03:49 dsfgd#1910
Quote:
Originally Posted by shadow52 View Post
@dsfgd
Einen Emulator dafür zu Coden müsste doch normal nichtmal so schwer sein. Die Pakete werden soweit ich weiß unverschlüsselt gesendet. (Hatt glaube auch jemand mal geschrieben.)
tja wenn es so einfach wäre einen server zu schreiben hätt ichs schon lange gemacht, lc ist kein besonders kompliziertes spiel, ein server emu bzw. eine sandbox für den anfang müsste nicht besonders schwer sein aber trotzdem ist hier unwissenheit die größte hürde ^^

das beste was ich hinbekommen hab, war das jeder beliebige Client mir das Login Paket an ein ~80 zeilen c prog gesendet hat ^^

Anfangen konnt ich damit aber nichts, da ich keine ahnung hab wie man Sandbox/Server schreibt.

Ein gutes tutorial wo die basics erklärt werden wäre hilfreich.

und ja, der alte client hier aus dem Thread verschlüsselt die Pakete nicht, die verschlüsselung kam hinzu als der echte Korea server eröffnet wurde, damals war es RC4 und das PW "LASTCHAOS", welche es heute ist weiß ich nicht genau, es kann AES oder eine Custom sein, sollte aber wenn der server erstmal läuft keine weitere hürde darstellen. (notfalls kommentiert man die einfach aus XD)
08/07/2010 04:27 shadow52#1911
Vlleicht kannst du damit irgendwas Anfangen. (Suche noch weitere Tutorials ^^)
Edit: Es ist kein Proxy Client wie es im Titel des Clients steht.
Der Source Code:
[Only registered and activated users can see links. Click Here To Register...]
08/07/2010 22:45 dsfgd#1912
Quote:
Originally Posted by shadow52 View Post
Vlleicht kannst du damit irgendwas Anfangen. (Suche noch weitere Tutorials ^^)
Edit: Es ist kein Proxy Client wie es im Titel des Clients steht.
das ganze ist ja nett, aber es ist wirklich nur ein Proxy,

du kannst dir das so vorstellen:

Normal:
Spiel -> Netzwerk Adapater -> GameServer

Proxy:
Spiel -> Proxy -> MS Loopback Adapter -> Netzwerk Adapater -> GameServer

ansich ist das ganze nur eine Möglichkeit einen simplen Paket Editor zu schreiben, aber bringen tut das nix, solange man die Verschlüsselung
nicht geknackt hat sieht man dasselbe wie bei WPE.

bei einem Server muss man sich mit sowas auseinandersetzen:

SEND:
[Only registered and activated users can see links. Click Here To Register...]

RECV:
[Only registered and activated users can see links. Click Here To Register...]

die MSDN liefert gute code beispiele, aber ich suche keine generellen Tutorials für die benutzung von Winsock2 Funktionen, sondern konkret ein Tutorial was beschreibt wie man einen LoginServer schreibt, sämtliche Pakete die ich benötige hab ich bereits entschlüsselt ^^

hier ein paar beispiele:
aber zu beachten ist, die können sich verändert haben in neueren Clients,

PS ich hab den Bug gefunden, warum man andere Chars nur im Merchant Mode sehen kann, der client ist zu alt, server zu neu ^^, der server sendet zuviele daten, der client kann mit dehnen nix anfangen und denkt dann das der char bei MerchantFlag immer eine 1 stehen hat.
Code:
'struct LC_PAKET_HEADER{
'	short SEND_RECV;
'	int RANDOM_NUMBER;
'	short unk1;
'	short unk2;
'	short SIZE; // Big Endian
'	// then the encrypted Paket
'	// char PAKET[LC_PAKET_HEADER.SIZE]
'	// NOTE: LC_PAKET_HEADER.SIZE  -> max size is 1024 - sizeof(LC_Paket_Header) // = 1012
'	// NOTE2: the Paket Header is not encrypted.
'}LC_Paket_Header;

' Big Note: ALL DATA is BIG ENDIAN, not little Endian

' Every Opcode: 1 Byte = Type, 1 Byte = SubType

		Public Const REQUEST_LOGIN As UShort = &H0300
		'03 00
		'00 02 D5 00 
		'66 61 6C 6F 00 = Name + 0x00
		'31 32 33 34 00 = Password + 0x00

		Public Const REQUEST_CHARACTER As Byte = &H04
		'04 00 = CREATE_CHARACTER
		'4D 61 67 65 54 65 73 74 65 72 00 = Name + 0x00
		'03 = Job
		'03 = HairStyle
		'02 = FaceStyle
		
		'04 01 = DELETE_CHARACTER
		'00 00 00 01 = CharacterID
		
		'04 02 = SELECT_CHARACTER
		'00 00 00 01 = CharacterID
		
		
		Public Const REQUEST_ACCEPT_CHAR As Byte = &H05

		Public Const ERROR_OPCODES as UShort = &H0100
		'01 0A = CREATE_CHARACTER_ERROR_NAME_IS_IN_USE
		'01 1F = LOGIN_ERROR_INVALID_PASSWORD
		'01 20 = LOGIN_ERROR_ACCOUNT_IS_ONLINE
		'01 2B = LOGIN_ERROR_24_HOURS_BANNED
		'01 D5 = ???
		
		Public Const LOGIN_SUCCESS As UShort = &H2200
		'22 00
		'00 00 01 00 
		'00 00 01 00 
		'00 00 01 00 
		'00 00 01 00 
		'00 00 01 00 
		'00 00 01 00 
		'00 00 01 00 00 07 CF 
		'31 39 32 2E 31 36 38 2E 35 36 2E 31 30 31 00 = Server IP + 0x00
		'00 00 10 0E 

		Public Const CREATE_CHARACTER_SUCCESSFULL As UShort = &H0200
		
		Public Const ACCOUNT_VERIFIED As UShort = &H0201
		'02 01
		'00 00 00 00 = ??? (00 = OK?, 01 = Failure?)		
		
		Public Const REQUEST_LOAD_CHARS1 As UShort = &H0202
		'02 02 
		'00 00 00 01 = Character ID
		'46 61 6C 6F 00 = Character Name + 0x00
		'02 = Job (00 = Titan, 01 = Ritter, 02 = Heiler, 03 = Mage, 04 = Schurke, 05 = Beschwörer, 06 = Nightshadow)
		'01 = HairStyle
		'01 = FaceStyle
		'00 = Unknown Third Style Option?
		'50 = Level
		'00 00 00 00 00 00 02 E0 = EXP
		'00 11 9B 24 9D 00 00 00 = Max EXP
		'1C 78 83 8A = Stats
		'0F 23 = HP
		'0F 23 = Max HP
		'0D AD = MP
		'0D AD = Max MP
		'00 00 00 1B = Equip Armor
		'00 00 02 CE = Equip Weapon
		'00 00 00 3E = Equip Pants
		'FF FF FF FF = Equip Shield
		'00 00 00 42 = Equip Gloves
		'00 00 00 45 = Equip Boots
		' Notes: HP/MP will be 4 Byte and Helm/Wings will be send in later clients


		Public Const REQUEST_LOAD_CHARS2 As UShort = &H0203
08/08/2010 04:12 Mike5555#1913
Quote:
Originally Posted by dsfgd View Post
man kann ohne probleme
- neue Items (hauptsächlich waffen/rüssi, da die scripts für andere fehlen)
- neue NPC's + drops
- neue Maps
hinzufügen, aber es wird nie so funktionieren wie auf dem aktuellen clienten, der alte client ist für sowas nie ausgelegt gewesen, es würde jahre dauern alle funktionen in assembler nachzubauen... es wäre einfacher einen emu zu schreiben (for allem könnte man dann die bugs des echten servers beseitigen XD)



die maps bringen gar nichts, last chaos besitzt nur eine theoretische Z achse, diese Maps sind HeightMaps, d.h. sie sagen nur wo kollisionen sind und wo bestimmte Zonen (NonPVP) anfangen, neue Maps zum clienten hinzuzufügen ist schwieriger.

ps: man kann die heightmaps aus den aktuellen Mapsfiles extrahieren und so alle bekommen, ich werd dazu aber kein tut machen, da man sie noch "konvertieren" muss damit sie im format des servers sind.
Genau daran hab ich schon lange gedacht nur leider ist bis jetzt nicht ein Emu drausen für LastChaos

Nur ich bin am anfang also ungeeignet ich hab zwar Zeit aber null Plan wie man sowas von Anfang baut files nachfügen das geht ja Aion z.B ist das schon sehr weit in Emus

daher weiß es nicht könnte man da nichts über Java und so machen ?

weil das der Server zu alt ist hab ich mir auch schon gedacht und man wirklich besser ein Neuen aufsätzt so in der Form des Aion weil bei Aion
ist im Prinzip ja ein ding, sag ich mal so einfach was mit sich selber läuft.

Wie gesagt bin am Anfang mit dieser Geschichte des Server betreiben falls falsch Aussagen bitte nicht auf die Goldwaage legen.

aber an Mitarbeit und Gedanken beteiligt in den Sinne.

ah P.S wie bekomm ich eine Dauerhafte ip zustande bin einfach zu blöd dafür ich bekomm zwar nen Name also ne Domain beim Anbieter aber ich Hoste nichts oder komm nicht durch.
08/08/2010 05:40 dsfgd#1914
Quote:
Originally Posted by Mike5555 View Post
Genau daran hab ich schon lange gedacht nur leider ist bis jetzt nicht ein Emu drausen für LastChaos
ich hab mal da was für euch ^^, ich habs soweit so gut geschafft über den Login Bildschirm hinauszukommen XD

Also Client sendet Login Paket und Server antwortet -> Serverauswahl bildschirm ^^ es funktioniert soweit so gut nur viel zu früh um zu sagen das es was wird, dieser alte client sendet ständig irgendwie bei nem fehler ein 00 Paket und das führt bei meinem Server zu einem exit, naja was erwartet man, 252 zeilen code und völlig unoptimiert.

Quote:
Originally Posted by Mike5555 View Post
Nur ich bin am anfang also ungeeignet ich hab zwar Zeit aber null Plan wie man sowas von Anfang baut files nachfügen das geht ja Aion z.B ist das schon sehr weit in Emus

daher weiß es nicht könnte man da nichts über Java und so machen ?

weil das der Server zu alt ist hab ich mir auch schon gedacht und man wirklich besser ein Neuen aufsätzt so in der Form des Aion weil bei Aion
ist im Prinzip ja ein ding, sag ich mal so einfach was mit sich selber läuft.

Wie gesagt bin am Anfang mit dieser Geschichte des Server betreiben falls falsch Aussagen bitte nicht auf die Goldwaage legen.
Aion ist kein Gutes beispiel, eigentlich kann man LastChaos mit keinem einzigen anderen Spiel vergleichen, weil es so simpel gecoded ist sag ich mal,

der komplette Login als beispiel besteht darin "Hallo Server" zu sagen, der liefert dann eine Serverliste, dann sagt man nochmal "Hallo" und bekommt eine Charakter auswahl geliefert, zum schluss sagt man welchen char man will und schon wars das, dann kommt GameServer...

mit Java würd ich generell nichts machen, das ist von vornherein blödsinn, jede Sprache, ob nun .net, delphi, c oder c++ ist wesentlich schneller.

das updaten würde automatisch gehen, bei lastchaos wird die Serverdatenbank ja praktisch mit dem Clienten mitgeliefert, lediglich dinge die der server speichern muss (Character, Items, Spawns, Drops, Werte, etc.) müsste man gelegentlich updaten.

PS: mit servern bin ich auch am anfang, ich mache das hier nur weil ich üben/lernen will wie sowas geht, aber ohne tutorial muss ich mir alles selber beibringen und das dauert...
08/08/2010 06:25 zukoo#1915
Help me?
[Only registered and activated users can see links. Click Here To Register...]
08/08/2010 08:00 dsfgd#1916
Quote:
Originally Posted by zukoo View Post
Help me?
[Only registered and activated users can see links. Click Here To Register...]
1. Connector
2. Helper
3. Messenger
4. LoginServer
5. GameServer

then it should work.


Leuts ich glaub ich bin nahe dran die verschlüsselung zu knacken, es ist ein Custom Verschlüsselung, die auf Bit Shiftung und Xor basiert, zudem wird es in 2x 4 Byte Blöcken 3x verschlüsselt mit 2 Funktionen ^^

es wird soviel hin und her geshiftet das ich im moment den überblick verloren hab,

so sieht das test Paket unverschlüsselt aus:
03 00 00 05 29 00 74 65 73 74 69 65 65 00 70 77 74 65 73 74 00 09 15 94 AB 84 44 00 00 00 00 00

so sieht es verschlüsselt aus:
77 A1 95 46 BA 7A 76 C7 2F 1C A5 A8 12 D3 51 96 16 B5 34 AB F0 6F 9B 10 1C D7 BD 61 37 A5 6D 5D

das Paket ist das aktuelle Login Paket, hier die übersetzung was es bedeutet:

03 00 = REQUEST_LOGIN
00 05 29 00 = PATCH_VERSION
74 65 73 74 69 65 65 00 = Name (testiee)
70 77 74 65 73 74 00 = Password (pwtest)
09 15 94 AB 84 44 00 00 00 00 00 = irgendein Zeit Wert


so sieht die 1. funktion aus: (pseudo C code von IDA Pro)
Code:
int __cdecl sub_1045ACB0(int a1, int a2)
{
  unsigned int v2; // edx@1
  int v3; // ecx@1
  int v4; // esi@1
  int v5; // ecx@1
  int v6; // edx@1
  int v7; // eax@1
  int v8; // ecx@1
  int v9; // edx@1
  int v10; // eax@1
  int v11; // ecx@1
  int v12; // eax@1
  int v13; // edx@1
  int v14; // esi@1
  unsigned int v15; // ecx@1
  int v16; // ecx@1
  int v17; // eax@1
  unsigned int v18; // ecx@1
  int v19; // edx@1
  int v20; // ebx@2
  int v21; // eax@2
  int v22; // eax@2
  int result; // eax@3
  int v25; // eax@3
  int v26; // ecx@3
  int v27; // eax@3
  int v28; // esi@3
  unsigned int v29; // ecx@3
  unsigned int v30; // edx@3
  int v31; // edx@3
  int v32; // eax@3
  int v33; // ecx@3
  int v34; // edx@3
  int v35; // eax@3
  int v36; // ecx@3
  int v37; // edx@3
  int v38; // ecx@3
  int v39; // eax@3
  int v40; // edx@3
  int v41; // esi@3
  signed int v42; // [sp+10h] [bp-4h]@1

  v5 = *(_DWORD *)(a1 + 4) & 0xF0F0F0F ^ (*(_DWORD *)a1 >> 4) & 0xF0F0F0F;
  v6 = v5 ^ *(_DWORD *)(a1 + 4);
  v42 = 8;
  v7 = 16 * v5 ^ *(_DWORD *)a1;
  v8 = (unsigned __int16)v6 ^ ((unsigned int)v7 >> 16);
  v9 = v8 ^ v6;
  v10 = (v8 << 16) ^ v7;
  v11 = v10 & 0x33333333 ^ ((unsigned int)v9 >> 2) & 0x33333333;
  v12 = v11 ^ v10;
  v13 = 4 * v11 ^ v9;
  v14 = v12;
  v15 = (unsigned int)v13 >> 8;
  v16 = v14 & 0xFF00FF ^ v15 & 0xFF00FF;
  v4 = a2;
  v17 = v16 ^ v12;
  v18 = 2 * ((v16 << 8) ^ v13) | (((v16 << 8) ^ (unsigned int)v13) >> 31);
  v19 = (v17 ^ v18) & 0xAAAAAAAA;
  v3 = v19 ^ v18;
  v2 = 2 * (v19 ^ v17) | ((v19 ^ (unsigned int)v17) >> 31);
  do
  {
    v20 = *(_DWORD *)v4;
    v21 = *(_DWORD *)v4 ^ (((unsigned int)v3 >> 4) | (v3 << 28));
    v4 += 16;
    v2 ^= dword_105E1048[v21 & 0x3F] | dword_105E0E48[((v20 ^ (((unsigned int)v3 >> 4) | (v3 << 28))) >> 8) & 0x3F] | dword_105E0C48[((unsigned int)v21 >> 16) & 0x3F] | dword_105E0A48[((unsigned int)v21 >> 24) & 0x3F] | dword_105E1148[(v3 ^ *(_DWORD *)(v4 - 12)) & 0x3F] | dword_105E0F48[(((unsigned int)v3 ^ *(_DWORD *)(v4 - 12)) >> 8) & 0x3F] | dword_105E0D48[(((unsigned int)v3 ^ *(_DWORD *)(v4 - 12)) >> 16) & 0x3F] | dword_105E0B48[(((unsigned int)v3 ^ *(_DWORD *)(v4 - 12)) >> 24) & 0x3F];
    v22 = *(_DWORD *)(v4 - 8) ^ ((v2 >> 4) | (v2 << 28));
    v3 ^= dword_105E1048[v22 & 0x3F] | dword_105E0E48[((*(_DWORD *)(v4 - 8) ^ ((v2 >> 4) | (v2 << 28))) >> 8) & 0x3F] | dword_105E0C48[((unsigned int)v22 >> 16) & 0x3F] | dword_105E0A48[((*(_DWORD *)(v4 - 8) ^ ((v2 >> 4) | (v2 << 28))) >> 24) & 0x3F] | dword_105E1148[(v2 ^ *(_DWORD *)(v4 - 4)) & 0x3F] | dword_105E0F48[((v2 ^ *(_DWORD *)(v4 - 4)) >> 8) & 0x3F] | dword_105E0D48[((v2 ^ *(_DWORD *)(v4 - 4)) >> 16) & 0x3F] | dword_105E0B48[((v2 ^ *(_DWORD *)(v4 - 4)) >> 24) & 0x3F];
  }
  while ( v42-- != 1 );
  v25 = ((unsigned int)v3 >> 1) | (v3 << 31);
  v26 = (v2 ^ (((unsigned int)v3 >> 1) | (v3 << 31))) & 0xAAAAAAAA;
  v27 = v26 ^ v25;
  v28 = v27;
  v29 = ((v26 ^ v2) >> 1) | ((v26 ^ v2) << 31);
  v30 = v29 >> 8;
  v31 = v28 & 0xFF00FF ^ v30 & 0xFF00FF;
  v32 = v31 ^ v27;
  v33 = (v31 << 8) ^ v29;
  v34 = v32 & 0x33333333 ^ ((unsigned int)v33 >> 2) & 0x33333333;
  v35 = v34 ^ v32;
  v36 = 4 * v34 ^ v33;
  v37 = (unsigned __int16)v36 ^ ((unsigned int)v35 >> 16);
  v38 = v37 ^ v36;
  v39 = (v37 << 16) ^ v35;
  v40 = v38 & 0xF0F0F0F ^ ((unsigned int)v39 >> 4) & 0xF0F0F0F;
  v41 = v39 ^ 16 * (v38 & 0xF0F0F0F ^ ((unsigned int)v39 >> 4) & 0xF0F0F0F);
  result = a1;
  *(_DWORD *)a1 = v41;
  *(_DWORD *)(a1 + 4) = v38 ^ v40;
  return result;
}
08/08/2010 13:34 Endtothenight#1917
Hm vlt hilft es dir weiter wenn du dich mit Wurstbrot123 in Verbindung setzt, der hat einen Packetbot für irgendein MMORPG gecodet und sich deshalb relativ viel mit den Packets beschäftigt, der kann dir evtl weiterhelfen, wenn es ihm nicht mal wieder an Motivation mangelt ;) Schreib ihn einfach mal an...

LG
08/08/2010 17:10 Kim#1918
Falo ich weiß nicht ob ich dir groß helfen kann,, aber ich hab mir vor ner zeit mal nen eigenen wow server gesaugt, er lief ebenfalls mit emu ..
solltest dich dort mal in der section mal umschauen wie die das machen ...
war hier lange nichtmehr im thread drin, kann da nicht viel sagen :)

"Shadow52 sagt: "Er sollte sich entweder die WoW emus anschauen oder die Source vom Warrok Emu von Jezzx"" - Danke :P

MfG
08/09/2010 15:44 Artarex#1919
Was würden wir nur ohne Falo machen xD^^
08/09/2010 19:05 gogna#1920
Hiho bin auch mal wieder hier hab nru ne kruze frage wen ich offline sever starte und so können andere spieler mit zocken ?? über lan (hab 6pc verfügbar)
Lg GognA