Code: Select all
Index: src/Network/Receive.pm
===================================================================
--- src/Network/Receive.pm	(revision 6546)
+++ src/Network/Receive.pm	(working copy)
@@ -334,6 +334,24 @@
 		'02AD' => ['login_pin_code_request', 'v1 V', [qw(flag key)]],
 		# Packet Prefix encryption Support
 		'02AE' => ['initialize_message_id_encryption', 'V1 V1', [qw(param1 param2)]],
+		# tRO new packets (2008-09-16Ragexe12_Th)
+		'02B1' => ['quest_list'],
+		'02B2' => ['objective_info'],
+		'02C5' => ['party_invite_result', 'Z24 V1', [qw(name type)]],
+		'02C9' => ['party_allow_invite', 'C1', [qw(type)]],
+		'02D0' => ['inventory_items_nonstackable'],
+		'02D1' => ['storage_items_nonstackable'],
+		'02D2' => ['cart_equip_list'],
+		'02D4' => ['inventory_item_added', 'v1 v1 v1 C1 C1 C1 a8 v1 C1 C1 a6', [qw(index amount nameID identified broken upgrade cards type_equip type fail unknown)]],
+		'02DA' => ['show_equipment', 'C1', [qw(type)]],
+		'02E1' => ['actor_action', 'a4 a4 a4 V2 v1 v1 x1 v2', [qw(sourceID targetID tick src_speed dst_speed damage param2 param3 unknown)]],
+		'02E8' => ['inventory_items_stackable'],
+		'02E9' => ['cart_items_list'],
+		'02EA' => ['storage_items_stackable'],
+		'02EB' => ['map_loaded', 'V1 a3 v1', [qw(syncMapSync coords unknown)]],
+		'02EC' => ['actor_display', 'x1 a4 v3 V1 v5 V1 v5 a4 a4 V1 C2 a5 x3 v2', [qw(ID walk_speed param1 param2 param3 type hair_style weapon shield lowhead timestamp tophead midhead hair_color clothes_color head_dir guildID guildEmblem visual_effects stance sex coords lv unknown)]],
+		'02ED' => ['actor_display', 'a4 v3 V1 v10 a4 a4 x2 V1 C2 a3 x2 v2', [qw(ID walk_speed param1 param2 param3 type hair_style weapon shield lowhead tophead midhead hair_color clothes_color head_dir guildID guildEmblem visual_effects stance sex coords lv unknown)]],
+		'02EE' => ['actor_display', 'a4 v3 V1 v10 a4 a4 x2 V1 C2 a3 x2 C1 v2', [qw(ID walk_speed param1 param2 param3 type hair_style weapon shield lowhead tophead midhead hair_color clothes_color head_dir guildID guildEmblem visual_effects stance sex coords act lv unknown)]]
 	};
 
 	return bless \%self, $class;
@@ -1699,18 +1717,26 @@
 	error TF("Can't Add Cart Item (%s)\n", $reason);
 }
 
+# 02D2 <msg len>.W {<index>.W <item id>.W <type>.B <identifiy>.B <equip type>.W <equiped pos>.W <broken>.B <refined>.B <card>.8B <unknown>.6B}.26B*
 sub cart_equip_list {
 	my ($self, $args) = @_;
 
 	# "0122" sends non-stackable item info
 	# "0123" sends stackable item info
-	my $newmsg;
+	my ($newmsg, $psize);
 	my $msg = $args->{RAW_MSG};
 	my $msg_size = $args->{RAW_MSG_SIZE};
 	$self->decrypt(\$newmsg, substr($msg, 4));
 	$msg = substr($msg, 0, 4).$newmsg;
-	my $psize = ($args->{switch} eq '0297') ? 24 : 20;
 
+	if ($args->{switch} eq '0297') {
+		$psize = 24;
+	} elsif ($args->{switch} eq '02D2') {
+		$psize = 26;
+	} else {
+		$psize = 20;
+	}
+
 	for (my $i = 4; $i < $msg_size; $i += $psize) {
 		my $index = unpack("v1", substr($msg, $i, 2));
 		my $ID = unpack("v1", substr($msg, $i+2, 2));
@@ -1755,6 +1781,7 @@
 	$args->{item} = $item;
 }
 
+#02E9 <msg len>.W {<index>.W <item id>.W <type>.B <identify>.B <amount>.W <arrow>.W <card>.8B <unknown>.4B}.22B*
 sub cart_items_list {
 	my ($self, $args) = @_;
 
@@ -1767,6 +1794,14 @@
 	$msg = substr($msg, 0, 4).$newmsg;
 	my $psize = ($switch eq "0123") ? 10 : 18;
 
+	if ($switch eq '0123') {
+		$psize = 10;
+	} elsif ($switch eq '02E9') {
+		$psize = 22;
+	} else {
+		$psize = 18;
+	}
+
 	for (my $i = 4; $i < $msg_size; $i += $psize) {
 		my $index = unpack("v1", substr($msg, $i, 2));
 		my $ID = unpack("v1", substr($msg, $i+2, 2));
@@ -3334,14 +3369,22 @@
 
 }
 
+# 02B0 <msg len>.W {<index>.W <item id>.W <type>.B <identify>.B <equip type>.W <equiped pos>.W <broken>.B <refined>.B <card>.8B <unknown>.6B}.26B*
 sub inventory_items_nonstackable {
 	my ($self, $args) = @_;
 	return unless changeToInGameState();
-	my $newmsg;
+	my ($newmsg, $psize);
 	$self->decrypt(\$newmsg, substr($args->{RAW_MSG}, 4));
 	my $msg = substr($args->{RAW_MSG}, 0, 4) . $newmsg;
-	my $psize = ($args->{switch} eq '0295') ? 24 : 20;
 
+	if ($args->{switch} eq '0295') {
+		$psize = 24;
+	} elsif ($args->{switch} eq '02D0') {
+		$psize = 26;
+	} else {
+		$psize = 20;
+	}
+
 	for (my $i = 4; $i < $args->{RAW_MSG_SIZE}; $i += $psize) {
 		my $index = unpack("v1", substr($msg, $i, 2));
 		my $ID = unpack("v1", substr($msg, $i + 2, 2));
@@ -3381,14 +3424,22 @@
 	$ai_v{'cart_time'} = time + 1;
 }
 
+# 02E8 <msg len>.W {<index>.W <item id>.W <type>.B <identify>.B <amount>.W <arrow>.W <card>.8B <unknown>.4B}.22B*
 sub inventory_items_stackable {
 	my ($self, $args) = @_;
 	return unless changeToInGameState();
-	my $newmsg;
+	my ($newmsg, $psize);
 	$self->decrypt(\$newmsg, substr($args->{RAW_MSG}, 4));
 	my $msg = substr($args->{RAW_MSG}, 0, 4).$newmsg;
-	my $psize = ($args->{switch} eq "00A3") ? 10 : 18;
 
+	if ($args->{switch} eq '00A3') {
+		$psize = 10;
+	} elsif ($args->{switch} eq '02E8') {
+		$psize = 22;
+	} else {
+		$psize = 18;
+	}
+
 	for (my $i = 4; $i < $args->{RAW_MSG_SIZE}; $i += $psize) {
 		my $index = unpack("v1", substr($msg, $i, 2));
 		my $ID = unpack("v1", substr($msg, $i + 2, 2));
@@ -4215,6 +4266,35 @@
 	$ai_v{npc_talk}{time} = time;
 }
 
+# Structure of packet by eAthena
+sub objective_info {
+	my ($self, $args) = @_;
+	my ($questID, $time, $mobnum, $mobCount, $mobName, $i, $k);
+
+	for ($i = 8; $i < $args->{RAW_MSG_SIZE}; $i += 104) {
+		($questID, $time, $mobnum) = unpack('V x4 V v', substr($args->{RAW_MSG}, $i, 14));
+
+		# TODO
+
+		for ($k = 14; $k < 104; $k += 30) {
+			($mobCount, $mobName) = unpack('x4 v Z24', substr($args->{RAW_MSG}, $k, 30));
+			$mobName = bytesToString($mobName);
+
+			# TODO
+		}
+	}
+}
+
+sub party_allow_invite {
+	my ($self, $args) = @_;
+
+	if ($args->{type}) {
+		message T("Not allowed other player invite to Party\n"), "party", 1;
+	} else {
+		message T("Allowed other player invite to Party\n"), "party", 1;
+	}
+}
+
 sub party_chat {
 	my ($self, $args) = @_;
 	my $msg;
@@ -4613,6 +4693,17 @@
 	shift @lastpm;
 }
 
+# Structure of Packet by eAthena
+sub quest_list {
+	my ($self, $args) = @_;
+	my ($questID, $state, $i);
+
+	for ($i = 8; $i < $args->{RAW_MSG_SIZE}; $i += 5) {
+		($questID, $state) = unpack('V C', substr($args->{RAW_MSG}, $i, 5));
+		# TODO
+	}
+}
+
 # The block size in the received_characters packet varies from server to server.
 # This method may be overrided in other ServerType handlers to return
 # the correct block size.
@@ -5026,6 +5117,16 @@
 	message TF("You can sell %s items!\n", $number);
 }
 
+sub show_equipment {
+	my ($self, $args) = @_;
+
+	if ($args->{type}) {
+		message T("Allowed other player view Equipment\n");
+	} else {
+		message T("Not allowed other player view Equipment\n");
+	}
+}
+
 sub skill_cast {
 	my ($self, $args) = @_;
 
@@ -5783,15 +5884,23 @@
 	}
 }
 
+# 02D1 <msg len>.W {<index>.W <item id>.W <type>.B <identify>.B <equip type>.W <equiped pos>.W <broken>.B <refined>.B <card>.8B <unknown>.6B}.26B*
 sub storage_items_nonstackable {
 	my ($self, $args) = @_;
 	# Retrieve list of non-stackable (weapons & armor) storage items.
 	# This packet is sent immediately after 00A5/01F0.
-	my $newmsg;
+	my ($newmsg, $psize);
 	$self->decrypt(\$newmsg, substr($args->{RAW_MSG}, 4));
 	my $msg = substr($args->{RAW_MSG}, 0, 4).$newmsg;
-	my $psize = ($args->{switch} eq '0296') ? 24 : 20;
 
+	if ($args->{switch} eq '0296') {
+		$psize = 24;
+	} elsif ($args->{switch} eq '02D1') {
+		$psize = 26;
+	} else {
+		$psize = 20;
+	}
+
 	for (my $i = 4; $i < $args->{RAW_MSG_SIZE}; $i += $psize) {
 		my $index = unpack("v1", substr($msg, $i, 2));
 		my $ID = unpack("v1", substr($msg, $i + 2, 2));
@@ -5812,16 +5921,24 @@
 	}
 }
 
+# 02EA <msg len>.W {<index>.W <item id>.W <type>.B <identify>.B <amount>.W <arrow>.W <card>.8B <unknown>.4B}.22B*
 sub storage_items_stackable {
 	my ($self, $args) = @_;
 	# Retrieve list of stackable storage items
-	my $newmsg;
+	my ($newmsg, $psize);
 	$self->decrypt(\$newmsg, substr($args->{RAW_MSG}, 4));
 	my $msg = substr($args->{RAW_MSG}, 0, 4).$newmsg;
 	undef %storage;
 	undef @storageID;
 
-	my $psize = ($args->{switch} eq "00A5") ? 10 : 18;
+	if ($args->{switch} eq '00A5') {
+		$psize = 10;
+	} elsif ($args->{switch} eq '02EA') {
+		$psize = 22;
+	} else {
+		$psize = 18;
+	}
+
 	for (my $i = 4; $i < $args->{RAW_MSG_SIZE}; $i += $psize) {
 		my $index = unpack("v1", substr($msg, $i, 2));
 		my $ID = unpack("v1", substr($msg, $i + 2, 2));
Index: src/Network/Send/ServerType0.pm
===================================================================
--- src/Network/Send/ServerType0.pm	(revision 6546)
+++ src/Network/Send/ServerType0.pm	(working copy)
@@ -391,10 +391,12 @@
 sub sendGameLogin {
 	my ($self, $accountID, $sessionID, $sessionID2, $sex) = @_;
 	my $msg = pack("v1", hex($masterServer->{gameLogin_packet}) || 0x65) . $accountID . $sessionID . $sessionID2 . pack("C*", 0, 0, $sex);
-	if (hex($masterServer->{gameLogin_packet}) == 0x0273) {
+	
+	if (hex($masterServer->{gameLogin_packet}) == 0x0273 || hex($masterServer->{gameLogin_packet}) == 0x0275) {
 		my ($serv) = $masterServer->{ip} =~ /\d+\.\d+\.\d+\.(\d+)/;
 		$msg .= pack("x16 C1 x3", $serv);
 	}
+
 	$self->sendToServer($msg);
 	debug "Sent sendGameLogin\n", "sendPacket", 2;
 }
@@ -678,7 +680,8 @@
 	my $msg;
 	$sex = 0 if ($sex > 1 || $sex < 0); # Sex can only be 0 (female) or 1 (male)
 	
-	if ($self->{serverType} == 0) {
+	if ($self->{serverType} == 0 || $self->{serverType} == 21) {
+		# Server Type 21 is tRO (2008-09-16Ragexe12_Th)
 		$msg = pack("C*", 0x72,0) .
 			$accountID .
 			$charID .
src\Network\Send\ServerType21.pm
Code: Select all
#########################################################################
#  OpenKore - Network subsystem
#  This module contains functions for sending messages to the server.
#
#  This software is open source, licensed under the GNU General Public
#  License, version 2.
#  Basically, this means that you're allowed to modify and distribute
#  this software. However, if you distribute modified versions, you MUST
#  also distribute the source code.
#  See http://www.gnu.org/licenses/gpl.html for the full license.
#########################################################################
# tRO (Thai) for 2008-09-16Ragexe12_Th
# Servertype overview: http://www.openkore.com/wiki/index.php/ServerType
package Network::Send::ServerType21;
use strict;
use Globals;
use Network::Send::ServerType0;
use base qw(Network::Send::ServerType0);
use Log qw(error debug);
use I18N qw(stringToBytes);
use Utils qw(getTickCount getHex getCoordString);
sub new {
	my ($class) = @_;
	return $class->SUPER::new(@_);
}
sub sendMove {
	my $self = shift;
	my $x = int scalar shift;
	my $y = int scalar shift;
	my $msg;
	$msg = pack("C*", 0x85, 0x00) . getCoordString($x, $y, 1);
	$self->sendToServer($msg);
	debug "Sent move to: $x, $y\n", "sendPacket", 2;
}
1;
Code: Select all
#########################################################################
#  OpenKore - Network subsystem
#  Copyright (c) 2006 OpenKore Team
#
#  This software is open source, licensed under the GNU General Public
#  License, version 2.
#  Basically, this means that you're allowed to modify and distribute
#  this software. However, if you distribute modified versions, you MUST
#  also distribute the source code.
#  See http://www.gnu.org/licenses/gpl.html for the full license.
#########################################################################
# tRO (Thai) for 2008-09-16Ragexe12_Th
# Servertype overview: http://www.openkore.com/wiki/index.php/ServerType
package Network::Receive::ServerType21;
use strict;
use Network::Receive;
use base qw(Network::Receive);
use Log qw(message warning error debug);
use Translation;
use Globals;
use I18N qw(bytesToString);
use Utils qw(getHex swrite makeIP makeCoords);
 
sub new {
	my ($class) = @_;
	my $self = $class->SUPER::new();
	$self->{packet_list}{'0078'} = ['actor_display', 'x1 a4 v14 a4 v2 x2 C2 a3 x2 C1 v1', [qw(ID walk_speed param1 param2 param3 type hair_style weapon shield lowhead tophead midhead hair_color clothes_color head_dir guildID guildEmblem visual_effects stance sex coords act lv)]];
	$self->{packet_list}{'007C'} = ['actor_display', 'x1 a4 v14 C2 a3', [qw(ID walk_speed param1 param2 param3 hair_style weapon lowhead type shield tophead midhead hair_color clothes_color head_dir stance sex coords)]];
	$self->{packet_list}{'022C'} = ['actor_display', 'x1 a4 v3 V1 v5 V1 v5 a4 a4 V1 C2 a5 x3 v1', [qw(ID walk_speed param1 param2 param3 type hair_style weapon shield lowhead timestamp tophead midhead hair_color clothes_color head_dir guildID guildEmblem visual_effects stance sex coords lv)]];
	return $self;
}
sub account_server_info {
	my ($self, $args) = @_;
	my $msg = substr($args->{serverInfo},4); # tRO uses some king of offset for the data.
	my $msg_size = length($msg);
	$net->setState(2);
	undef $conState_tries;
	$sessionID = $args->{sessionID};
	$accountID = $args->{accountID};
	$sessionID2 = $args->{sessionID2};
	$accountSex = $args->{accountSex} % 2;
	$accountSex2 = ($config{'sex'} ne "") ? $config{'sex'} : $accountSex;
	message swrite(
		T("-----------Account Info------------\n" . 
		"Account ID: \@<<<<<<<<< \@<<<<<<<<<<\n" .
		"Sex:        \@<<<<<<<<<<<<<<<<<<<<<\n" .
		"Session ID: \@<<<<<<<<< \@<<<<<<<<<<\n" .
		"            \@<<<<<<<<< \@<<<<<<<<<<\n" .
		"-----------------------------------"), 
		[unpack("V1",$accountID), getHex($accountID), $sex_lut{$accountSex}, unpack("V1",$sessionID), getHex($sessionID),
		unpack("V1",$sessionID2), getHex($sessionID2)]), 'connection';
	my $num = 0;
	undef @servers;
	for (my $i = 0; $i < $msg_size; $i+=32) {
		$servers[$num]{ip} = makeIP(substr($msg, $i, 4));
		$servers[$num]{ip} = $masterServer->{ip} if ($masterServer && $masterServer->{private});
		$servers[$num]{port} = unpack("v1", substr($msg, $i+4, 2));
		$servers[$num]{name} = bytesToString(unpack("Z*", substr($msg, $i + 6, 20)));
		$servers[$num]{users} = unpack("V",substr($msg, $i + 26, 4));
		$num++;
	}
	message T("--------- Servers ----------\n" .
			"#   Name                  Users  IP              Port\n"), 'connection';
	for (my $num = 0; $num < @servers; $num++) {
		message(swrite(
			"@<< @<<<<<<<<<<<<<<<<<<<< @<<<<< @<<<<<<<<<<<<<< @<<<<<",
			[$num, $servers[$num]{name}, $servers[$num]{users}, $servers[$num]{ip}, $servers[$num]{port}]
		), 'connection');
	}
	message("-------------------------------\n", 'connection');
	if ($net->version != 1) {
		message T("Closing connection to Account Server\n"), 'connection';
		$net->serverDisconnect();
		if (!$masterServer->{charServer_ip} && $config{server} eq "") {
			my @serverList;
			foreach my $server (@servers) {
				push @serverList, $server->{name};
			}
			my $ret = $interface->showMenu(
					T("Please select your login server."),
					\@serverList,
					title => T("Select Login Server"));
			if ($ret == -1) {
				quit();
			} else {
				main::configModify('server', $ret, 1);
			}
		} elsif ($masterServer->{charServer_ip}) {
			message TF("Forcing connect to char server %s: %s\n", $masterServer->{charServer_ip}, $masterServer->{charServer_port}), 'connection';	
			
		} else {
			message TF("Server %s selected\n",$config{server}), 'connection';
		}
	}
}
1;
Code: Select all
Index: recvpackets-tro.txt
===================================================================
--- recvpackets-tro.txt	(revision 6546)
+++ recvpackets-tro.txt	(working copy)
@@ -1,4 +1,4 @@
-# Packet lengths for tRO (March 3rd, 2008)
+# Packet lengths for tRO (2008-09-16)
 0064 55
 0065 17
 0066 3
@@ -19,11 +19,11 @@
 0075 0
 0076 9
 0077 5
-0078 54
+0078 55
 0079 53
 007A 58
 007B 60
-007C 41
+007C 42
 007D 2
 007E 6
 007F 6
@@ -255,21 +255,13 @@
 0163 0
 0164 0
 0165 30
-0165 30
 0166 0
-0166 0
 0167 3
-0167 3
 0168 14
-0168 14
 0169 3
-0169 3
 016A 30
-016A 30
 016B 10
-016B 10
 016C 43
-016C 43
 016D 14
 016E 186
 016F 182
@@ -455,7 +447,7 @@
 0229 15
 022A 58
 022B 57
-022C 64
+022C 65
 022D 5
 022E 71
 022F 5
@@ -559,21 +551,19 @@
 0298 8
 0299 6
 029A 27
-029B 72
+029B 80
 029C 66
 029D 0
 029E 11
 029F 3
 02A2 8
 02A5 8
-02A6 204
-02A7 204
+02A6 404
+02A7 404
 02AA 4
 02AB 36
 02AC 6
 02AD 8
-02AE 10
-02AF 2
 02B0 85
 02B1 0
 02B2 0
@@ -633,3 +623,330 @@
 02ED 59
 02EE 60
 02EF 8
+02F0 10
+02F1 2
+02F2 2
+02F3 0
+02F4 0
+02F5 0
+02F6 0
+02F7 0
+02F8 0
+02F9 0
+02FA 0
+02FB 0
+02FC 0
+02FD 0
+02FE 0
+02FF 0
+0300 0
+0301 0
+0302 0
+0303 0
+0304 0
+0305 0
+0306 0
+0307 0
+0308 0
+0309 0
+030A 0
+030B 0
+030C 0
+030D 0
+030E 0
+030F 0
+0310 0
+0311 0
+0312 0
+0313 0
+0314 0
+0315 0
+0316 0
+0317 0
+0318 0
+0319 0
+031A 0
+031B 0
+031C 0
+031D 0
+031E 0
+031F 0
+0320 0
+0321 0
+0322 0
+0323 0
+0324 0
+0325 0
+0326 0
+0327 0
+0328 0
+0329 0
+032A 0
+032B 0
+032C 0
+032D 0
+032E 0
+032F 0
+0330 0
+0331 0
+0332 0
+0333 0
+0334 0
+0335 0
+0336 0
+0337 0
+0338 0
+0339 0
+033A 0
+033B 0
+033C 0
+033D 0
+033E 0
+033F 0
+0340 0
+0341 0
+0342 0
+0343 0
+0344 0
+0345 0
+0346 0
+0347 0
+0348 0
+0349 0
+034A 0
+034B 0
+034C 0
+034D 0
+034E 0
+034F 0
+0350 0
+0351 0
+0352 0
+0353 0
+0354 0
+0355 0
+0356 0
+0357 0
+0358 0
+0359 0
+035A 0
+035B 0
+035C 2
+035D 0
+035E 2
+035F 0
+0360 0
+0361 0
+0362 0
+0363 0
+0364 0
+0365 0
+0366 0
+0367 0
+0368 0
+0369 0
+036A 0
+036B 0
+036C 0
+036D 0
+036E 0
+036F 0
+0370 0
+0371 0
+0372 0
+0373 0
+0374 0
+0375 0
+0376 0
+0377 0
+0378 0
+0379 0
+037A 0
+037B 0
+037C 0
+037D 0
+037E 0
+037F 0
+0380 0
+0381 0
+0382 0
+0383 0
+0384 0
+0385 0
+0386 0
+0387 0
+0388 0
+0389 0
+038A 0
+038B 0
+038C 0
+038D 0
+038E 0
+038F 0
+0390 0
+0391 0
+0392 0
+0393 0
+0394 0
+0395 0
+0396 0
+0397 0
+0398 0
+0399 0
+039A 0
+039B 0
+039C 0
+039D 0
+039E 0
+039F 0
+03A0 0
+03A1 0
+03A2 0
+03A3 0
+03A4 0
+03A5 0
+03A6 0
+03A7 0
+03A8 0
+03A9 0
+03AA 0
+03AB 0
+03AC 0
+03AD 0
+03AE 0
+03AF 0
+03B0 0
+03B1 0
+03B2 0
+03B3 0
+03B4 0
+03B5 0
+03B6 0
+03B7 0
+03B8 0
+03B9 0
+03BA 0
+03BB 0
+03BC 0
+03BD 0
+03BE 0
+03BF 0
+03C0 0
+03C1 0
+03C2 0
+03C3 0
+03C4 0
+03C5 0
+03C6 0
+03C7 0
+03C8 0
+03C9 0
+03CA 0
+03CB 0
+03CC 0
+03CD 0
+03CE 0
+03CF 0
+03D0 0
+03D1 0
+03D2 0
+03D3 0
+03D4 0
+03D5 0
+03D6 0
+03D7 0
+03D8 0
+03D9 0
+03DA 0
+03DB 0
+03DC 0
+03DD 18
+03DE 18
+03E2 0
+03E3 0
+03E4 0
+03E5 0
+03E6 0
+03E7 0
+03E8 0
+03E9 0
+03EA 0
+03EB 0
+03EC 0
+03ED 0
+03EE 0
+03EF 0
+03F0 0
+03F1 0
+03F2 0
+03F3 0
+03F4 0
+03F5 0
+03F6 0
+03F7 0
+03F8 0
+03F9 0
+03FA 0
+03FB 0
+03FC 0
+03FD 0
+03FE 0
+03FF 0
+0400 0
+0401 0
+0402 0
+0403 0
+0404 0
+0405 0
+0406 0
+0407 0
+0408 0
+0409 0
+040A 0
+040B 0
+040C 0
+040D 0
+040E 0
+040F 0
+0410 0
+0411 0
+0412 0
+0413 0
+0414 0
+0415 0
+0416 0
+0417 0
+0418 0
+0419 0
+041A 0
+041B 0
+041C 0
+041D 0
+041E 0
+041F 0
+0420 0
+0421 0
+0422 0
+0423 0
+0424 0
+0425 0
+0426 0
+0427 0
+0428 0
+0429 0
+042A 0
+042B 0
+042C 0
+042D 0
+042E 0
+042F 0
+0430 0
+0431 0
+0432 0
+0433 0
+0434 0
+0435 0
+0436 19
+0437 7
+0438 10
+0439 8
Index: servers.txt
===================================================================
--- servers.txt	(revision 6546)
+++ servers.txt	(working copy)
@@ -360,58 +360,32 @@
 PINEncryptKey 0x050B6F79, 0x0202C179, 0x00E20120, 0x04FA43E3, 0x0179B6C8, 0x05973DF2, 0x07D8D6B, 0x08CB9ED9
 
 ## www.ragnarok.in.th/
-[Thailand - tRO Main server (Surtr, Bestla, Magni, Frey, Skadi)]
+[Thailand - tRO Main server (Norse)]
 ip 203.144.244.5
 port 6900
 master_version 7
 version 24
-serverType 0
+serverType 21
 secureLogin 3
 secureLogin_type 0
 secureLogin_account 0
 gameLogin_packet 0x275
-gameGuard 1
 pauseCharServer 1
 patchserver wpatch.ragnarok.in.th
 patchpath /patch70
 serverEncoding Thai
 recvpackets recvpackets-tro.txt
 
-# please double check before use this entry
-[Thailand - tRO: Valkyrie2]
-ip 203.144.244.122
-port 6900
-master_version 7
-version 31
-serverType 17
-secureLogin 3
-secureLogin_type 0
-secureLogin_requestCode
-secureLogin_account 3
-pauseCharServer 1
-patchserver wpatch.ragnarok.in.th
-patchpath /patch70
-serverEncoding Thai
-paddedPackets 1
-paddedPackets_attackID 0x193
-paddedPackets_skillUseID 0x89
-# Data for XKore PP mode
-syncID 0x7E
-syncTickOffset 3
-mapLoadedTickOffset 5
-recvpackets recvpackets-tro.txt
-
 [Thailand - tRO Free life server (Alice(new), Poring)]
 ip 203.144.244.121
 port 6900
 master_version 7
 version 24
-serverType 0
+serverType 21
 secureLogin 3
 secureLogin_type 0
 secureLogin_account 0
 gameLogin_packet 0x275
-gameGuard 1
 pauseCharServer 1
 patchserver wpatch.ragnarok.in.th
 patchpath /patch70
@@ -423,12 +397,11 @@
 port 6900
 master_version 7
 version 24
-serverType 0
+serverType 21
 secureLogin 3
 secureLogin_type 0
 secureLogin_account 0
 gameLogin_packet 0x275
-gameGuard 1
 pauseCharServer 1
 patchserver wpatch.ragnarok.in.th
 patchpath /patch70







