FleeRo

Обсуждение особенностей разных пиратских серверов

Модератор: 4epT

Гость

Re: FleeRo

Сообщение Гость »

Не могли бы ссылку на собранный уже бот дать?А то не шибко шарю=\
ph1047

FleeRo

Сообщение ph1047 »

Скрипт предназначен только для образовательных целей!

Код: Выделить всё

#########################################################################
# OpenKore - Packet sending
# This module contains functions for sending packets 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.
#
# $Revision: 6876 $
# $Id: ServerType8.pm 6876 2009-08-26 22:05:12Z Technologyguild $
########################################################################
# Korea (kRO), before February 2007
# The majority of private servers on Dec 2007; packet_ver 22 of eAthena
# Servertype overview: http://www.openkore.com/wiki/index.php/ServerType
package Network::Send::ServerType8;

use strict;
use Globals qw($accountID $sessionID $sessionID2 $accountSex $char $charID %config %guild @chars $masterServer $syncSync $net);
use Network::Send::ServerType0;
use base qw(Network::Send::ServerType0);
use Log qw(message warning error debug);
use I18N qw(stringToBytes);
use Utils qw(getTickCount getHex getCoordString);

sub new {
my ($class) = @_;
return $class->SUPER::new(@_);
}

[color=#FF40FF]sub sendMove { #ph1047's encryption pwnage
my $self = shift;
my $x = int scalar shift;
my $y = int scalar shift;
my $buf;
my $xx = int($x >> 2);
my $yy = int($y >> 4);
$yy = $yy & 0x3F;
$buf = $x & 0xFF;
$buf = $buf << 6;
$buf = $buf & 0xFF;
$yy = $yy | $buf;
$xx = $xx & 0xFF;
$yy = $yy & 0xFF;
my @asd = (0xA7, 0x00, 0x00, 0x00, 0x00, int($xx), int($yy), 0x00);
$yy = $y << 4;
$yy = $yy & 0xFF;
$buf = $yy;
$asd[7] = $buf;
$buf = $asd[5];
$buf ^= $asd[6];
$buf ^= $asd[7];
$buf ^= 0x90;
$asd[2] = $buf;
$asd[5] ^= $buf;
$asd[6] ^= $buf;
$asd[7] ^= $buf;

my $mes = pack("C8",@asd);
$self->sendToServer($mes);
debug "Sent move to: $x, $y\n", "sendPacket", 2;
}

sub sendMasterLogin { #ph1047's login pwnage xDDD
my ($self, $username, $password, $master_version, $version) = @_;
my %args;
$args{username} = $username;
$args{password} = $password;
$args{master_version} = $master_version;
$args{version} = $version;

Plugins::callHook('packet_pre/sendMasterLogin', \%args);
if ($args{return}) {
$self->sendToServer($args{msg});
return;
}

my $msg = pack('v1 C4 a24 C25', 0x64, 0x40, 0x5b, 0xa4, 0xbc, $username, 0xE1, 0x0A, 0xDC, 0x39, 0x49, 0xBA, 0x59, 0xAB, 0xBE, 0x56, 0xE0, 0x57, 0xF2, 0x0F, 0x88, 0x3E, 0x86, 0x97, 0x5D, 0x1A, 0xF1, 0xD4, 0xF3, 0xFE, 0x19);
$self->sendToServer($msg);
}[/color]

# 0x0190,21,actionrequest,7:20
sub sendAction { # flag: 0 attack (once), 7 attack (continuous), 2 sit, 3 stand
my ($self, $monID, $flag) = @_;

my %args;
$args{monID} = $monID;
$args{flag} = $flag;
# eventually we'll trow this hooking out so...
Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7);
Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3);
if ($args{return}) {
$self->sendToServer($args{msg});
return;
}

my $msg = pack('v x3 a4 x9 C', 0x0190, $monID, $flag);
$self->sendToServer($msg);
debug "Sent Action: " .$flag. " on: " .getHex($monID)."\n", "sendPacket", 2;
}

=pod
sub sendAttack {
my ($self, $monID, $flag) = @_;
my $msg;

my %args;
$args{monID} = $monID;
$args{flag} = $flag;
Plugins::callHook('packet_pre/sendAttack', \%args);
if ($args{return}) {
$self->sendToServer($args{msg});
return;
}

$msg = pack("C*", 0x90, 0x01, 0x00, 0x00, 0x00) .
$monID . pack("C*",0x00, 0x00, 0x00, 0x00, 0x37, 0x66, 0x61, 0x32, 0x00, $flag);
$self->sendToServer($msg);
debug "Sent attack: ".getHex($monID)."\n", "sendPacket", 2;
}

sub sendStand {
my $self = shift;
my $msg;

my %args;
$args{flag} = 3;
Plugins::callHook('packet_pre/sendStand', \%args);
if ($args{return}) {
$self->sendToServer($args{msg});
return;
}

$msg = pack("C2 x16 C1", 0x90, 0x01, 0x03);
$self->sendToServer($msg);
debug "Standing\n", "sendPacket", 2;
}

sub sendSit {
my $self = shift;
my $msg;

my %args;
$args{flag} = 2;
Plugins::callHook('packet_pre/sendSit', \%args);
if ($args{return}) {
$self->sendToServer($args{msg});
return;
}

$msg = pack("C2 x16 C1", 0x90, 0x01, 0x02);
$self->sendToServer($msg);
debug "Sitting\n", "sendPacket", 2;
}
=cut

sub sendSkillUse {
my ($self, $ID, $lv, $targetID) = @_;
my $msg;

my %args;
$args{ID} = $ID;
$args{lv} = $lv;
$args{targetID} = $targetID;
Plugins::callHook('packet_pre/sendSkillUse', \%args);
if ($args{return}) {
$self->sendToServer($args{msg});
return;
}

$msg = pack("v1 x4 v1 x2 v1 x9", 0x72, $lv, $ID) . $targetID;
$self->sendToServer($msg);
debug "Skill Use: $ID\n", "sendPacket", 2;
}

sub sendChat {
my ($self, $message) = @_;
$message = "|00$message" if ($config{chatLangCode} && $config{chatLangCode} ne "none");

my ($data, $charName); # Type: Bytes
$message = stringToBytes($message); # Type: Bytes
$charName = stringToBytes($char->{name});

$data = pack("C*", 0xf3, 0x00) .
pack("v*", length($charName) + length($message) + 8) .
$charName . " : " . $message . chr(0);
$self->sendToServer($data);
}


sub sendDrop {
my ($self, $index, $amount) = @_;
my $msg = pack("C*", 0x16, 0x01, 0x35, 0x34, 0x33) .
pack("v*", $index) .
pack("C*", 0x61) .
pack("v*", $amount);
$self->sendToServer($msg);
debug "Sent drop: $index x $amount\n", "sendPacket", 2;
}

sub sendGetPlayerInfo {
my ($self, $ID) = @_;
my $msg = pack("v1 x5", 0x8c) . $ID;
$self->sendToServer($msg);
debug "Sent get player info: ID - ".getHex($ID)."\n", "sendPacket", 2;
}

sub sendItemUse {
my ($self, $ID, $targetID) = @_;
my $msg = pack("C*", 0x9f, 0x00, 0x61, 0x62) .
pack("v*", $ID) .
pack("C*", 0x34, 0x35, 0x32, 0x61) .
$targetID;
$self->sendToServer($msg);
debug "Item Use: $ID\n", "sendPacket", 2;
}

sub sendLook {
my ($self, $body, $head) = @_;
my $msg = pack("v1 x5 C1 x2 C1", 0x85, $head, $body);
$self->sendToServer($msg);
debug "Sent look: $body $head\n", "sendPacket", 2;
$char->{look}{head} = $head;
$char->{look}{body} = $body;
}

sub sendMapLogin {
my ($self, $accountID, $charID, $sessionID, $sex) = @_;
my $msg;

$sex = 0 if ($sex > 1 || $sex < 0); # Sex can only be 0 (female) or 1 (male)
$msg = pack("C*", 0x9b, 0, 0x39, 0x33) .
$accountID .
pack("C*", 0x65) .
$charID .
pack("C*", 0x37, 0x33, 0x36, 0x64) .
$sessionID .
pack("V", getTickCount()) .
pack("C*", $sex);
$self->sendToServer($msg);
}

sub sendSkillUseLoc {
my ($self, $ID, $lv, $x, $y) = @_;
my $msg = pack("C2 x3 v1 x2 v1 x1 v1 x6 v1", 0x13, 0x01, $lv, $ID, $x, $y);
$self->sendToServer($msg);
debug "Skill Use on Location: $ID, ($x, $y)\n", "sendPacket", 2;
}

sub sendStorageAdd {
my ($self, $index, $amount) = @_;
my $msg = pack("v1 x5 v1 x1 V1", 0x94, $index, $amount);
$self->sendToServer($msg);
debug "Sent Storage Add: $index x $amount\n", "sendPacket", 2;
}

sub sendStorageClose {
my ($self) = @_;
my $msg = pack("C*", 0x93, 0x01);
$self->sendToServer($msg);
debug "Sent Storage Done\n", "sendPacket", 2;
}

sub sendStorageGet {
my ($self, $index, $amount) = @_;
my $msg = pack("v1 x12 v1 x2 V1", 0xf7, $index, $amount);
$self->sendToServer($msg);
debug "Sent Storage Get: $index x $amount\n", "sendPacket", 2;
}

sub sendSync {
my ($self, $initialSync) = @_;
my $msg;
# XKore mode 1 lets the client take care of syncing.
return if ($self->{net}->version == 1);

$syncSync = pack("V", getTickCount());
$msg = pack("C*", 0x89, 0x00, 0x00, 0x00);
$msg .= $syncSync;
$self->sendToServer($msg);
debug "Sent Sync\n", "sendPacket", 2;
}

sub sendTake {
my ($self, $itemID) = @_;
my $msg = pack("v1 x2", 0xf5) . $itemID;
$self->sendToServer($msg);
debug "Sent take\n", "sendPacket", 2;
}

sub sendHomunculusMove {
my $self = shift;
my $homunID = shift;
my $x = int scalar shift;
my $y = int scalar shift;
my $msg = pack("C*", 0x32, 0x02) . $homunID . getCoordString($x, $y, 1);
$self->sendToServer($msg);
debug "Sent Homunculus move to: $x, $y\n", "sendPacket", 2;
}

1;
Ответить