NAME
Game::Tibia::Packet - Session layer support for the MMORPG Tibia
SYNOPSIS
use Game::Tibia::Packet;
# decrypt Tibia packet
my $read; my $ret = $sock->recv($read, 1024);
my $res = Game::Tibia::Packet->new(packet => $read, xtea => $xtea_key);
$packet_type = unpack('C', $res->payload);
# encrypt a Tibia speech packet
my $p = Game::Tibia::Packet->new;
$p->payload .= pack("C S S S/A S C SSC S/A",
0xAA, 0x1, 0x0, "Perl", 0, 1, 1, 1, 8,
"Game::Tibia::Packet says Hi!\n:-)");
$sock->send($p->finalize($xtea_key}))
DESCRIPTION
Methods for constructing Tibia Gameserver (XTEA) packets. Handles
checksum calculation and symmetric encryption depending on the
requested Tibia version.
Should work with all Tibia versions less than 9.80.
METHODS AND ARGUMENTS
new(version => $version, [packet => $payload, xtea => $xtea])
Constructs a new Game::Tibia::Packet instance of version $version. If
payload and XTEA are given, the payload will be decrypted and trimmed
to correct size.
isValid($packet)
Checks if packet's adler32 digest matches (A totally unnecessary
thing on Cipsoft's part, as we already have TCP checksum. Why hash
again?)
payload() : lvalue
returns the payload as lvalue (so you can concat on it)
finalize([$XTEA_KEY])
Finalizes the packet. XTEA encrypts, prepends checksum and length.
version($version)
Returns a hash reference with protocol traits. For example for 840,
it returns:
{ gmbyte => 1, outfit_addons => 1, adler32 => 1, acc_name => 1,
stamina => 1, xtea => 1, VERSION => 840, rsa => 1, lvl_on_msg => 1 };
GIT REPOSITORY
http://github.com/athreef/Game-Tibia-Packet
SEE ALSO
The protocol was reverse engineered as part of writing my Tibia
Wireshark Plugin <https://github.com/a3f/Tibia-Wireshark-Plugin>.
Game::Tibia::Cam
Game::Tibia::Packet::Login
Game::Tibia::Packet::Charlist
http://tpforums.org/forum/forum.php http://tibia.com
AUTHOR
Ahmad Fatoum <athreef@cpan.org>, http://a3f.at
DISCLAIMER
Tibia is copyrighted by Cipsoft GmbH.
COPYRIGHT AND LICENSE
Copyright (C) 2016 Ahmad Fatoum
This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.