How to change charBlockSize in Poseidon server ?

Forum closed. All further discussion to be discussed at https://github.com/OpenKore/

Moderator: Moderators

Message
Author
chocobrowny
Noob
Noob
Posts: 19
Joined: 21 Jul 2011, 01:16
Noob?: No

How to change charBlockSize in Poseidon server ?

#1 Post by chocobrowny »

How to change charBlockSize in Poseidon server ?


Today tRO was updated the 13.3 patch and Ragexe.exe was changed

Not only Ragexe.exe changed but charBlockSize was changed too.

tRO need to run poseidon server for pass the gameguard,

So I need to change the poseidon source code, right ?

=================================================

Pic: Problem
Image

=================================================

I read topic http://forums.openkore.com/viewtopic.php?f=37&t=12596

and I think I have to change pack of data but My skill in packet is newbie

so, Please advice how to change this src from charBlockSize = 112 to 116

Code: Select all

	} elsif (($switch eq '0065') || ($switch eq '0275') || ($msg =~ /^$packed_switch$accountID$sessionID$sessionID2\x0\x0.$/)) { # client sends server choice packet

		my $exp = pack("V", 0);
		my $zeny = pack("V", 0);
		my $exp_job = pack("V", 0);
		my $lvl_job = pack("v", 70);
		my $hp = pack("v", 0x0fff);
		my $hp_max = $hp;
		my $sp = pack("v", 0x0fff);
		my $sp_max = $sp;
		my $job_id1 = pack("v", 0);
		my $job_id2 = pack("v", 23);
		my $hairStyle = pack("v", 16);
		my $level = pack("v", 99);
		my $head_low = pack("v", 0);
		my $head_top = pack("v", 5016);
		my $head_mid = pack("v", 0);
		my $hairColor = pack("v", 6);
		my $charName1 = pack("a24", "Poseidon");
		my $charName2 = pack("a24", "Poseidon Dev");
		my ($str, $agi, $vit, $int, $dex, $luk) = (99, 99, 99, 99, 99, 99);
		my $charStats = pack("C*", $str, $agi, $vit, $int, $dex, $luk);
		my $data;

		if($clientdata{$index}{kRO}) {	#Packet 006B of kRO differs from that of other servers
			$client->send($accountID);
			$data = pack ("H272", "6b0088000100000064000000007fffffbc000000000000004cf1d00080020000000000002300000001000000000000000000000000000000000000000000000002004c0000004c00000016001600960006001700000006000000000000000000000001000000b1e2beefbcd3b1d7c0dabdc42100000000000000000000000c0901010c0100000100");
		} else {
			$data = $accountID .
				pack("v2 x20", 0x6b, 0xEC) .
				$charID . $exp . $zeny . $exp_job . $lvl_job .
				pack("x24") . $hp . $hp_max . $sp . $sp_max .
				pack("x2") . $job_id1 . $hairStyle .
				pack("x2") . $level .
				#pack("x2") . $head_low . pack("x2") . $head_top . $head_mid . $hairColor .
				pack("C*", 0x01, 0x00, 0x38, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x9E, 0x00, 0x06, 0x00) .
				#pack("C*", 0x01, 0x00, 0x38, 0x00, 0x00, 0x00, 0x46, 0x00, 0x03, 0x00, 0x06, 0x00) .
				pack("x2") . $charName1 . $charStats . pack("v1", 0) .
				$charID . $exp . $zeny . $exp_job . $lvl_job .
				pack("x24") . $hp . $hp_max . $sp . $sp_max .
				pack("x2") . $job_id2 . $hairStyle .
				pack("x2") . $level .
				#pack("x2") . $head_low . pack("x2") . $head_top . $head_mid . $hairColor .
				pack("C*", 0x01, 0x00, 0x39, 0x00, 0x00, 0x00, 0x9F, 0x00, 0x98, 0x00, 0x06, 0x00) .
				pack("x2") . $charName2 . $charStats . pack("v1", 1);
				# NOTE: ideally, all character slots are filled with the same character, for idiot-proofing
				# NOTE: also, the character's appearance may be made to be modifiable
		}

		$client->send($data);

		# save servers.txt info
		if ($switch ne '0065') {
			$clientdata{$index}{gameLogin_packet} = $switch;
		} else {
			undef $clientdata{$index}{gameLogin_packet};
		}

	} elsif ($switch eq '0066') { # client sends character choice packet
Thanks for your help ^^
"...Every coin have two sides, think more widely and Not everything is black and white, there are shades of grey..."
Image

chocobrowny
Noob
Noob
Posts: 19
Joined: 21 Jul 2011, 01:16
Noob?: No

Re: How to change charBlockSize in Poseidon server ?

#2 Post by chocobrowny »

Now I try to create new charBlockSize packet with this pattern but it's not work -*-

Code: Select all

} else {
         for (@characters) {
            $data .= pack
               $ENV{POSEIDON_CHARBLOCKSIZE} == 116
                  ? 'a4 V3 v x24 V2 v2 x2 v2 x2 v3 x2 v3 x2 a24 C6 v2 x4'
                  : 'a4 V4 x22 v4    x2 v2 x2 v3 x2 v3 x2 a24 C6 v', # old Poseidon packing (charBlockSize 106?)
               $charID, @{$_}{qw(exp zeny exp_job lvl_job hp hp sp sp job_id1 hairStyle level points_skill head_low head_top head_mid hairColor name str agi vit int dex luk slot rename)};
            # NOTE: ideally, all character slots are filled with the same character, for idiot-proofing
            # NOTE: also, the character's appearance may be made to be modifiable
         }
         
         $data = $accountID . pack("v2 x20", 0x6b, ($ENV{POSEIDON_CHARBLOCKSIZE} || 106)*@characters + 24) . $data;
      }

Code: Select all

sub received_characters_unpackString {
	for ($masterServer && $masterServer->{charBlockSize}) {
		return 'a4 V9 v V2 v14 Z24 C8 v Z16 x4 x4' if $_ == 136;
		return 'a4 V9 v V2 v14 Z24 C8 v Z16 x4' if $_ == 132;
		return 'a4 V9 v V2 v14 Z24 C8 v Z16' if $_ == 128;
		return 'a4 V9 v V2 v14 Z24 C6 v2 x4' if $_ == 116; # TODO: (missing 2 last bytes)
		return 'a4 V9 v V2 v14 Z24 C6 v2' if $_ == 112;
		return 'a4 V9 v17 Z24 C6 v2' if $_ == 108;
		return 'a4 V9 v17 Z24 C6 v' if $_ == 106 || !$_;
		die "Unknown charBlockSize: $_";
	}
}
"...Every coin have two sides, think more widely and Not everything is black and white, there are shades of grey..."
Image

chocobrowny
Noob
Noob
Posts: 19
Joined: 21 Jul 2011, 01:16
Noob?: No

Re: How to change charBlockSize in Poseidon server ?

#3 Post by chocobrowny »

I try to create packet in Poseidon::RagnarokServer for CharBlockSize 116
but not work,

It still error charBlockSize 116.

I check the packet byte is match but it still error.

Please check it or advice me ^^

Code: Select all

	} elsif (($switch eq '0065') || ($switch eq '0275') || ($msg =~ /^$packed_switch$accountID$sessionID$sessionID2\x0\x0.$/)) { # client sends server choice packet

		my $exp = pack("V", 0);
		my $zeny = pack("V", 0);
		my $exp_job = pack("V", 0);
		my $lvl_job = pack("v", 70);
		my $hp = pack("v", 0x0fff);
		my $hp_max = $hp;
		my $sp = pack("v", 0x0fff);
		my $sp_max = $sp;
		my $job_id1 = pack("v", 0);
		my $job_id2 = pack("v", 23);
		my $hairStyle = pack("v", 16);
		my $level = pack("v", 99);
		my $head_low = pack("v", 0);
		my $head_top = pack("v", 5016);
		my $head_mid = pack("v", 0);
		my $hairColor = pack("v", 6);
		my $charName1 = pack("a24", "Poseidon");
		my $charName2 = pack("a24", "Poseidon Dev");
		my ($str, $agi, $vit, $int, $dex, $luk) = (99, 99, 99, 99, 99, 99);
		my $charStats = pack("C*", $str, $agi, $vit, $int, $dex, $luk);
		my $data;

		if($clientdata{$index}{kRO}) {	#Packet 006B of kRO differs from that of other servers
			$client->send($accountID);
			$data = pack ("H272", "6b0088000100000064000000007fffffbc000000000000004cf1d00080020000000000002300000001000000000000000000000000000000000000000000000002004c0000004c00000016001600960006001700000006000000000000000000000001000000b1e2beefbcd3b1d7c0dabdc42100000000000000000000000c0901010c0100000100");
		} else {
			$data = $accountID .
				pack("v2 x20", 0x6b, 0xEC) .
				$charID . $exp . $zeny . $exp_job . $lvl_job .
				pack("x24") . $hp . $hp_max . $sp . $sp_max .
				pack("x2") . $job_id1 . $hairStyle .
				pack("x2") . $level .
				#pack("x2") . $head_low . pack("x2") . $head_top . $head_mid . $hairColor .
				pack("C*", 0x01, 0x00, 0x38, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x9E, 0x00, 0x06, 0x00) .
				#pack("C*", 0x01, 0x00, 0x38, 0x00, 0x00, 0x00, 0x46, 0x00, 0x03, 0x00, 0x06, 0x00) .
				pack("x2") . $charName1 . $charStats . pack("v1", 0) .
				$charID . $exp . $zeny . $exp_job . $lvl_job .
				pack("x24") . $hp . $hp_max . $sp . $sp_max .
				pack("x2") . $job_id2 . $hairStyle .
				pack("x2") . $level .
				#pack("x2") . $head_low . pack("x2") . $head_top . $head_mid . $hairColor .
				pack("C*", 0x01, 0x00, 0x39, 0x00, 0x00, 0x00, 0x9F, 0x00, 0x98, 0x00, 0x06, 0x00) .
				pack("x2") . $charName2 . $charStats . pack("v1", 1);
				# NOTE: ideally, all character slots are filled with the same character, for idiot-proofing
				# NOTE: also, the character's appearance may be made to be modifiable
		}

		$client->send($data);

		# save servers.txt info
		if ($switch ne '0065') {
			$clientdata{$index}{gameLogin_packet} = $switch;
		} else {
			undef $clientdata{$index}{gameLogin_packet};
		}

	} elsif ($switch eq '0066') { # client sends character choice packet
"...Every coin have two sides, think more widely and Not everything is black and white, there are shades of grey..."
Image

EternalHarvest
Developers
Developers
Posts: 1798
Joined: 05 Dec 2008, 05:42
Noob?: Yes

Re: How to change charBlockSize in Poseidon server ?

#4 Post by EternalHarvest »

You may want to check how Base::Ragnarok::CharServer (not used in Poseidon so far) does it.

chocobrowny
Noob
Noob
Posts: 19
Joined: 21 Jul 2011, 01:16
Noob?: No

Re: How to change charBlockSize in Poseidon server ?

#5 Post by chocobrowny »

From EternalHarvest answer in topic Poseidon: CHARACTER_INFO size error

So I try to create charactor packet but It's not work.

I compare with packet from Official Server, the packet length is equal but Client can't login to poseidon server.

tRO official server use hackshield and I can't bypass it,

before tRO updated I use program like poseidon but this program use charBlockSize 112

So I thing modifying poseidon server may be help me to bot

======================================

I saw code in Base::Ragnarok::CharServer and now OPK can run normally but HS kick me every 10 min.

======================================

Current my code in Poseidon::RagnarokServer;

Code: Select all

} elsif (($switch eq '0065') || ($switch eq '0275') || ($msg =~ /^$packed_switch$accountID$sessionID$sessionID2\x0\x0.$/)) { # client sends server choice packet

		my $exp = pack("V", 0);
		my $zeny = pack("V", 0);
		my $exp_job = pack("V", 0);
		my $lvl_job = pack("v", 1);
		my $hp = pack("V", 0x0fff);
		my $hp_max = $hp;
		my $sp = pack("v", 0x0fff);
		my $sp_max = $sp;
		my $job_id1 = pack("v", 0);
		my $job_id2 = pack("v", 23);
		my $hairStyle = pack("v", 16);
		my $level = pack("v", 99);
		my $pointSkill = pack("v",1);
		my $head_low = pack("v", 0);
		my $head_top = pack("v", 5016);
		my $head_mid = pack("v", 0);
		my $hairColor = pack("v", 6);
		my $charName1 = pack("a24", "Poseidon");
		my $charName2 = pack("a24", "Poseidon Dev");
		my ($str, $agi, $vit, $int, $dex, $luk) = (99, 99, 99, 99, 99, 99);
		my $charStats = pack("C*", $str, $agi, $vit, $int, $dex, $luk);
		my $data;
		
		
		if($clientdata{$index}{kRO}) {	#Packet 006B of kRO differs from that of other servers
			$client->send($accountID);
			$data = pack ("H272", "6b0088000100000064000000007fffffbc000000000000004cf1d00080020000000000002300000001000000000000000000000000000000000000000000000002004c0000004c00000016001600960006001700000006000000000000000000000001000000b1e2beefbcd3b1d7c0dabdc42100000000000000000000000c0901010c0100000100");
		} else {
			#$client->send($accountID);
			
			$data = $accountID . pack("v", 0x6b) . pack("C*", 0x7b) .
				$charID . $exp . $zeny . $exp_job . $lvl_job .
				pack("x24") . $hp . $hp_max . $sp . $sp_max .
				pack("x2") . $job_id1 . $hairStyle .
				pack("x2") . $level .
				pack("x2") . $head_low . pack("x2") . $head_top . $head_mid . $hairColor .
				#pack("C*", 0x01, 0x00, 0x38, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x9E, 0x00, 0x06, 0x00) .
				#pack("C*", 0x01, 0x00, 0x38, 0x00, 0x00, 0x00, 0x46, 0x00, 0x03, 0x00, 0x06, 0x00) .
				pack("x2") . $charName1 . $charStats . pack("v", 0) . pack("v", 1) . pack("x4") ;
				
			#	pack("x22") . $hp . $hp_max . $sp . $sp_max .
			#	pack("x2") . $job_id2 . $hairStyle .
			#	pack("x2") . $level .
			#	pack("x2") . $head_low . pack("x2") . $head_top . $head_mid . $hairColor .
			#	##pack("C*", 0x01, 0x00, 0x39, 0x00, 0x00, 0x00, 0x9F, 0x00, 0x98, 0x00, 0x06, 0x00) .
			#	pack("x2") . $charName2 . $charStats . pack("v", 1) . pack("v", 1) . pack("x4");
				# NOTE: ideally, all character slots are filled with the same character, for idiot-proofing
				# NOTE: also, the character's appearance may be made to be modifiable
		}

		$client->send($data);

		# save servers.txt info
		if ($switch ne '0065') {
			$clientdata{$index}{gameLogin_packet} = $switch;
		} else {
			undef $clientdata{$index}{gameLogin_packet};
		}

	} elsif ($switch eq '0066') { # client sends character choice packet
================================================================

Packet from Wireshark

Code: Select all

00000000  75 02 10 51 6e 00 4a 3c  00 00 00 00 00 00 00 00 u..Qn.J< ........
00000010  00 74 82 73 81 7b 09 b8  cf 11 50 dc 7c cf 16 ef .t.s.{.. ..P.|...
00000020  9d 08 00 00 00                                   .....
    00000000  10 51 6e 00                                      .Qn.
    00000004  6b 00 ef 00 09 09 09 91  8a 27 00 a1 f2 00 00 71 k....... .'.....q
    00000014  3d 1d 00 a2 52 02 00 30  00 00 00 00 00 00 00 00 =...R..0 ........
    00000024  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 35 ........ .......5
    00000034  00 a9 07 00 00 62 0e 00  00 bc 01 bc 01 96 00 11 .....b.. ........
    00000044  00 02 00 00 00 56 00 0b  00 00 00 00 00 00 00 00 .....V.. ........
    00000054  00 03 00 00 00 b7 d2 ca  76 6f a7 b9 d9 eb be c5 ........ vo......
    00000064  cd 65 00 00 00 00 00 00  00 00 00 00 00 46 46 01 .e...... .....FF.
    00000074  01 3c 01 00 00 01 00 00  00 00 00 e0 9d 27 00 d7 .<...... .....'..
    00000084  06 00 00 02 04 00 00 65  02 00 00 0b 00 00 00 00 .......e ........
    00000094  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........
    000000A4  00 00 00 00 00 62 00 00  00 62 00 00 00 25 00 25 .....b.. .b...%.%
    000000B4  00 96 00 05 00 02 00 00  00 09 00 01 00 00 00 00 ........ ........
    000000C4  00 00 00 00 00 03 00 00  00 42 53 60 53 6c 61 76 ........ .BS`Slav
    000000D4  65 33 32 00 00 00 00 00  00 00 00 00 00 00 00 00 e32..... ........
    000000E4  00 09 09 01 01 13 01 01  00 01 00 00 00 00 00    ........ .......
00000025  87 01 10 51 6e 00                                ...Qn.
    000000F3  87 01 10 51 6e 00                                ...Qn.
0000002B  66 00 01                                         f..
    000000F9  71 00 e0 9d 27 00 70 61  79 6f 6e 2e 67 61 74 00 q...'.pa yon.gat.
    00000109  00 00 00 00 00 00 7a 9b  0b e0 88 13             ......z. ....
==================================================================

Console log from XMode. Login via tRO Official Server

Code: Select all

--------- Servers ----------
#   Name                  Users  IP              Port
0   Yoyo(new)             1854   122.155.11.210  5000
1   Picky                 2177   122.155.11.194  5000
-------------------------------
Sent by RO client packet: 0275    [37 bytes]  
Packet Tokenizer: Unknown switch: 5110
================================================
<< Received unknown packet [4 bytes]   Oct 26 16:21:40 2011
  0>  10 51 6E 00                                           .Qn.
Received packet: 006B    [239 bytes]  [Received characters from Game Login Server]
Received packet: 006B Handler: received_characters
Received characters from Character Server
From Console Log, I don't understand why Client received two packet; unknown packet and packet: 006B.

But I code to send packet...

Code: Select all

$client->send($accountID);
$client->send($data);
It combine this code to 1 packet -*-

I think new Ragexe.exe has to send 2 packet,

Please advice me how to fix it ^^
"...Every coin have two sides, think more widely and Not everything is black and white, there are shades of grey..."
Image

chocobrowny
Noob
Noob
Posts: 19
Joined: 21 Jul 2011, 01:16
Noob?: No

Re: How to change charBlockSize in Poseidon server ?

#6 Post by chocobrowny »

After I try to pack charactor packet with 116 charBlockSize, Now I can show the poseidon char on RO Client.

But I can't login with this char.

I use xmode to monitor Client and it show detail of charactor but in RO Client windows show only loading page and disconnect from poseidon server.

Please give me any advice ^^

==========================

Console from XMode

Code: Select all

================================================
<< Sent by RO client:    01DB - Login Code Request [2 bytes]   Oct 27 12:24:31 2011
  0>  DB 01                                                 ..
Packet Parser: Unknown switch: 01DB
================================================
<< Received packet:      01DC - Login Code [20 bytes]   Oct 27 12:24:31 2011
  0>  DC 01 14 00 00 00 00 00    00 00 00 00 00 00 00 00    ................
 16>  00 00 00 00                                           ....
Received packet: 01DC Handler: secure_login_key
================================================
<< Sent by RO client:    01FA - Login [48 bytes]   Oct 27 12:24:31 2011
  0>  FA 01 18 00 00 00 68 61    63 68 69 74 61 31 35 00    ......hachita15.
 16>  00 00 00 00 00 00 00 00    00 00 00 00 00 00 AF 07    ................
 32>  B5 E0 2B CD 4E 56 7A 10    10 E8 56 44 8E 97 07 00    ..+.NVz...VD....
Packet Parser: Unknown switch: 01FA
================================================
<< Received packet:      0069 - Account Info [83 bytes]   Oct 27 12:24:31 2011
  0>  69 00 53 00 01 00 00 00    01 00 00 00 02 00 00 00    i.S.............
 16>  00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00    ................
 32>  00 00 00 00 00 00 00 00    00 00 00 00 00 00 01 00    ................
 48>  00 00 00 7F 00 00 01 F4    1A 50 6F 73 65 69 64 6F    .........Poseido
 64>  6E 20 73 65 72 76 65 72    00 00 00 00 00 00 00 00    n server........
 80>  00 00 00                                              ...
Received packet: 0069 Handler: account_server_info
-----------Account Info------------
Account ID: 1          01 00 00 00
Sex:        Boy
Session ID: 1          01 00 00 00
            2          02 00 00 00
-----------------------------------
--------- Servers ----------
#   Name                  Users  IP              Port
0   Poseidon server       0      127.0.0.1       6900
-------------------------------
================================================
<< Sent by RO client:    0275 [37 bytes]   Oct 27 12:24:32 2011
  0>  75 02 01 00 00 00 01 00    00 00 02 00 00 00 00 00    u...............
 16>  01 5C 4D D6 96 59 DB 67    E3 3C 26 5E DE 84 87 40    .\M..Y.g.<&^...@
 32>  C2 00 00 00 00                                        .....
Received packet: 0275 Handler: game_login
================================================
<< Received packet:      006B - Received characters from Game Login Server [123 bytes]   Oct 27 12:24:32 2011
  0>  6B 00 7B 00 09 09 09 A0    17 02 00 44 C7 48 00 E0    k.{........D.H..
 16>  D1 8C 02 99 53 2E 00 42    00 00 00 00 00 00 00 00    ....S..B........
 32>  00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00    ................
 48>  00 12 25 00 00 12 25 00    00 F5 01 F5 01 96 00 AD    ..%...%.........
 64>  0F 01 00 00 00 61 00 00    00 00 00 00 00 D7 00 00    .....a..........
 80>  00 00 00 00 00 4E 69 6E    6B 6F 6D 61 6E 00 00 00    .....Ninkoman...
 96>  00 00 00 00 00 00 00 00    00 00 00 00 00 53 3D 20    .............S= 
112>  01 04 52 00 00 01 00 00    00 00 00                   ..R........
Received packet: 006B Handler: received_characters
Received characters from Character Server
------------- Character List -------------
Slot 0: Ninkoman (Assassin Cross, level 97/66)
------------------------------------------
================================================
<< Sent by RO client:    0066 - Char Login [3 bytes]   Oct 27 12:24:33 2011
  0>  66 00 00                                              f..
Received packet: 0066 Handler: char_login
Task::Raise::init queue empty
Task::Raise::init queue empty
Config 'char' set to 0 (was 0)
Saving F:\OPKr7718-SVN\BotOrganizer\Profiles\test\Config\config.txt...
================================================
<< Received packet:      0071 - Received character ID and Map IP from Game Login Server [28 bytes]   Oct 27 12:24:33 2011
  0>  71 00 01 00 00 00 6E 65    77 5F 31 2D 31 2E 67 61    q.....new_1-1.ga
 16>  74 00 00 00 00 00 7F 00    00 01 F4 1A                t...........
Received packet: 0071 Handler: received_character_ID_and_Map
Received character ID and Map IP from Character Server
----------Game Info----------
Char ID: 01 00 00 00 (1)
MAP Name: new_1-1.gat
MAP IP: 127.0.0.1
MAP Port: 6900
-----------------------------
================================================
<< Sent by RO client:    0072 - Map Login [19 bytes]   Oct 27 12:24:33 2011
  0>  72 00 01 00 00 00 01 00    00 00 01 00 00 00 E5 BF    r...............
 16>  1E 00 01                                              ...
Received packet: 0072 Handler: map_login
================================================
<< Received packet:      0073 - Enter Map [11 bytes]   Oct 27 12:24:33 2011
  0>  73 00 31 63 E9 02 0D 46    F0 05 05                   s.1c...F...
Received packet: 0073 Handler: map_loaded
Waiting for map to load...
You AI suspended by clientSuspend for 10 seconds
Your Coordinates: 53, 111
"...Every coin have two sides, think more widely and Not everything is black and white, there are shades of grey..."
Image

Locked