FleeRo

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

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

Гость

Re: FleeRo

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

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

FleeRo

Сообщение ph1047 »

Скрипт предназначен только для образовательных целей!
  1. #########################################################################
  2. #  OpenKore - Packet sending
  3. #  This module contains functions for sending packets to the server.
  4. #
  5. #  This software is open source, licensed under the GNU General Public
  6. #  License, version 2.
  7. #  Basically, this means that you're allowed to modify and distribute
  8. #  this software. However, if you distribute modified versions, you MUST
  9. #  also distribute the source code.
  10. #  See http://www.gnu.org/licenses/gpl.html for the full license.
  11. #
  12. #  $Revision: 6876 $
  13. #  $Id: ServerType8.pm 6876 2009-08-26 22:05:12Z Technologyguild $
  14. ########################################################################
  15. # Korea (kRO), before February 2007
  16. # The majority of private servers on Dec 2007; packet_ver 22 of eAthena
  17. # Servertype overview: http://www.openkore.com/wiki/index.php/ServerType
  18. package Network::Send::ServerType8;
  19.  
  20. use strict;
  21. use Globals qw($accountID $sessionID $sessionID2 $accountSex $char $charID %config %guild @chars $masterServer $syncSync $net);
  22. use Network::Send::ServerType0;
  23. use base qw(Network::Send::ServerType0);
  24. use Log qw(message warning error debug);
  25. use I18N qw(stringToBytes);
  26. use Utils qw(getTickCount getHex getCoordString);
  27.  
  28. sub new {
  29.     my ($class) = @_;
  30.     return $class->SUPER::new(@_);
  31. }
  32.  
  33. [color=#FF40FF]sub sendMove { #ph1047's encryption pwnage
  34.     my $self = shift;
  35.     my $x = int scalar shift;
  36.     my $y = int scalar shift;
  37.     my $buf;
  38.     my $xx = int($x >> 2);
  39.     my $yy = int($y >> 4);
  40.     $yy = $yy & 0x3F;
  41.     $buf = $x & 0xFF;
  42.     $buf = $buf << 6;
  43.     $buf = $buf & 0xFF;
  44.     $yy = $yy | $buf;
  45.     $xx = $xx & 0xFF;
  46.     $yy = $yy & 0xFF;
  47.     my @asd = (0xA7, 0x00, 0x00, 0x00, 0x00, int($xx), int($yy), 0x00);
  48.     $yy = $y << 4;
  49.     $yy = $yy & 0xFF;
  50.     $buf = $yy;
  51.     $asd[7] = $buf;
  52.     $buf = $asd[5];
  53.     $buf ^= $asd[6];
  54.     $buf ^= $asd[7];
  55.     $buf ^= 0x90;
  56.     $asd[2] = $buf;
  57.     $asd[5] ^= $buf;
  58.     $asd[6] ^= $buf;
  59.     $asd[7] ^= $buf;
  60.    
  61.     my $mes = pack("C8",@asd);
  62.     $self->sendToServer($mes);
  63.     debug "Sent move to: $x, $y\n", "sendPacket", 2;
  64. }
  65.  
  66. sub sendMasterLogin { #ph1047's login pwnage xDDD
  67.     my ($self, $username, $password, $master_version, $version) = @_;
  68.     my %args;
  69.     $args{username} = $username;
  70.     $args{password} = $password;
  71.     $args{master_version} = $master_version;
  72.     $args{version} = $version;
  73.    
  74.     Plugins::callHook('packet_pre/sendMasterLogin', \%args);
  75.     if ($args{return}) {
  76.         $self->sendToServer($args{msg});
  77.         return;
  78.     }
  79.    
  80.     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);
  81.     $self->sendToServer($msg);
  82. }[/color]
  83.  
  84. # 0x0190,21,actionrequest,7:20
  85. sub sendAction { # flag: 0 attack (once), 7 attack (continuous), 2 sit, 3 stand
  86.     my ($self, $monID, $flag) = @_;
  87.  
  88.     my %args;
  89.     $args{monID} = $monID;
  90.     $args{flag} = $flag;
  91.     # eventually we'll trow this hooking out so...
  92.     Plugins::callHook('packet_pre/sendAttack', \%args) if ($flag == 0 || $flag == 7);
  93.     Plugins::callHook('packet_pre/sendSit', \%args) if ($flag == 2 || $flag == 3);
  94.     if ($args{return}) {
  95.         $self->sendToServer($args{msg});
  96.         return;
  97.     }
  98.  
  99.     my $msg = pack('v x3 a4 x9 C', 0x0190, $monID, $flag);
  100.     $self->sendToServer($msg);
  101.     debug "Sent Action: " .$flag. " on: " .getHex($monID)."\n", "sendPacket", 2;
  102. }
  103.  
  104. =pod
  105. sub sendAttack {
  106.     my ($self, $monID, $flag) = @_;
  107.     my $msg;
  108.  
  109.     my %args;
  110.     $args{monID} = $monID;
  111.     $args{flag} = $flag;
  112.     Plugins::callHook('packet_pre/sendAttack', \%args);
  113.     if ($args{return}) {
  114.         $self->sendToServer($args{msg});
  115.         return;
  116.     }
  117.    
  118.     $msg = pack("C*", 0x90, 0x01, 0x00, 0x00, 0x00) .
  119.         $monID . pack("C*",0x00, 0x00, 0x00, 0x00, 0x37, 0x66, 0x61, 0x32, 0x00, $flag);
  120.     $self->sendToServer($msg);
  121.     debug "Sent attack: ".getHex($monID)."\n", "sendPacket", 2;
  122. }
  123.  
  124. sub sendStand {
  125.     my $self = shift;
  126.     my $msg;
  127.  
  128.     my %args;
  129.     $args{flag} = 3;
  130.     Plugins::callHook('packet_pre/sendStand', \%args);
  131.     if ($args{return}) {
  132.         $self->sendToServer($args{msg});
  133.         return;
  134.     }
  135.    
  136.     $msg = pack("C2 x16 C1", 0x90, 0x01, 0x03);
  137.     $self->sendToServer($msg);
  138.     debug "Standing\n", "sendPacket", 2;
  139. }
  140.  
  141. sub sendSit {
  142.     my $self = shift;
  143.     my $msg;
  144.  
  145.     my %args;
  146.     $args{flag} = 2;
  147.     Plugins::callHook('packet_pre/sendSit', \%args);
  148.     if ($args{return}) {
  149.         $self->sendToServer($args{msg});
  150.         return;
  151.     }
  152.    
  153.     $msg = pack("C2 x16 C1", 0x90, 0x01, 0x02);
  154.     $self->sendToServer($msg);
  155.     debug "Sitting\n", "sendPacket", 2;
  156. }
  157. =cut
  158.  
  159. sub sendSkillUse {
  160.     my ($self, $ID, $lv, $targetID) = @_;
  161.     my $msg;
  162.  
  163.     my %args;
  164.     $args{ID} = $ID;
  165.     $args{lv} = $lv;
  166.     $args{targetID} = $targetID;
  167.     Plugins::callHook('packet_pre/sendSkillUse', \%args);
  168.     if ($args{return}) {
  169.         $self->sendToServer($args{msg});
  170.         return;
  171.     }
  172.  
  173.     $msg = pack("v1 x4 v1 x2 v1 x9", 0x72, $lv, $ID) . $targetID;
  174.     $self->sendToServer($msg);
  175.     debug "Skill Use: $ID\n", "sendPacket", 2;
  176. }
  177.  
  178. sub sendChat {
  179.     my ($self, $message) = @_;
  180.     $message = "|00$message" if ($config{chatLangCode} && $config{chatLangCode} ne "none");
  181.  
  182.     my ($data, $charName); # Type: Bytes
  183.     $message = stringToBytes($message); # Type: Bytes
  184.     $charName = stringToBytes($char->{name});
  185.  
  186.     $data = pack("C*", 0xf3, 0x00) .
  187.         pack("v*", length($charName) + length($message) + 8) .
  188.         $charName . " : " . $message . chr(0);
  189.     $self->sendToServer($data);
  190. }
  191.  
  192.  
  193. sub sendDrop {
  194.     my ($self, $index, $amount) = @_;
  195.     my $msg = pack("C*", 0x16, 0x01, 0x35, 0x34, 0x33) .
  196.         pack("v*", $index) .
  197.         pack("C*", 0x61) .
  198.         pack("v*", $amount);
  199.     $self->sendToServer($msg);
  200.     debug "Sent drop: $index x $amount\n", "sendPacket", 2;
  201. }
  202.  
  203. sub sendGetPlayerInfo {
  204.     my ($self, $ID) = @_;
  205.     my $msg = pack("v1 x5", 0x8c) . $ID;
  206.     $self->sendToServer($msg);
  207.     debug "Sent get player info: ID - ".getHex($ID)."\n", "sendPacket", 2;
  208. }
  209.  
  210. sub sendItemUse {
  211.     my ($self, $ID, $targetID) = @_;
  212.     my $msg = pack("C*", 0x9f, 0x00, 0x61, 0x62) .
  213.         pack("v*", $ID) .
  214.         pack("C*", 0x34, 0x35, 0x32, 0x61) .
  215.         $targetID;
  216.     $self->sendToServer($msg);
  217.     debug "Item Use: $ID\n", "sendPacket", 2;
  218. }
  219.  
  220. sub sendLook {
  221.     my ($self, $body, $head) = @_;
  222.     my $msg = pack("v1 x5 C1 x2 C1", 0x85, $head, $body);
  223.     $self->sendToServer($msg);
  224.     debug "Sent look: $body $head\n", "sendPacket", 2;
  225.     $char->{look}{head} = $head;
  226.     $char->{look}{body} = $body;
  227. }
  228.  
  229. sub sendMapLogin {
  230.     my ($self, $accountID, $charID, $sessionID, $sex) = @_;
  231.     my $msg;
  232.  
  233.     $sex = 0 if ($sex > 1 || $sex < 0); # Sex can only be 0 (female) or 1 (male)
  234.     $msg = pack("C*", 0x9b, 0, 0x39, 0x33) .
  235.         $accountID .
  236.         pack("C*", 0x65) .
  237.         $charID .
  238.         pack("C*", 0x37, 0x33, 0x36, 0x64) .
  239.         $sessionID .
  240.         pack("V", getTickCount()) .
  241.         pack("C*", $sex);
  242.     $self->sendToServer($msg);
  243. }
  244.  
  245. sub sendSkillUseLoc {
  246.     my ($self, $ID, $lv, $x, $y) = @_;
  247.     my $msg = pack("C2 x3 v1 x2 v1 x1 v1 x6 v1", 0x13, 0x01, $lv, $ID, $x, $y);
  248.     $self->sendToServer($msg);
  249.     debug "Skill Use on Location: $ID, ($x, $y)\n", "sendPacket", 2;
  250. }
  251.  
  252. sub sendStorageAdd {
  253.     my ($self, $index, $amount) = @_;
  254.     my $msg = pack("v1 x5 v1 x1 V1", 0x94, $index, $amount);
  255.     $self->sendToServer($msg);
  256.     debug "Sent Storage Add: $index x $amount\n", "sendPacket", 2;
  257. }
  258.  
  259. sub sendStorageClose {
  260.     my ($self) = @_;
  261.     my $msg = pack("C*", 0x93, 0x01);
  262.     $self->sendToServer($msg);
  263.     debug "Sent Storage Done\n", "sendPacket", 2;
  264. }
  265.  
  266. sub sendStorageGet {
  267.     my ($self, $index, $amount) = @_;
  268.     my $msg = pack("v1 x12 v1 x2 V1", 0xf7, $index, $amount);
  269.     $self->sendToServer($msg);
  270.     debug "Sent Storage Get: $index x $amount\n", "sendPacket", 2;
  271. }
  272.  
  273. sub sendSync {
  274.     my ($self, $initialSync) = @_;
  275.     my $msg;
  276.     # XKore mode 1 lets the client take care of syncing.
  277.     return if ($self->{net}->version == 1);
  278.  
  279.     $syncSync = pack("V", getTickCount());
  280.     $msg = pack("C*", 0x89, 0x00, 0x00, 0x00);
  281.     $msg .= $syncSync;
  282.     $self->sendToServer($msg);
  283.     debug "Sent Sync\n", "sendPacket", 2;
  284. }
  285.  
  286. sub sendTake {
  287.     my ($self, $itemID) = @_;
  288.     my $msg = pack("v1 x2", 0xf5) . $itemID;
  289.     $self->sendToServer($msg);
  290.     debug "Sent take\n", "sendPacket", 2;
  291. }
  292.  
  293. sub sendHomunculusMove {
  294.     my $self = shift;
  295.     my $homunID = shift;
  296.     my $x = int scalar shift;
  297.     my $y = int scalar shift;
  298.     my $msg = pack("C*", 0x32, 0x02) . $homunID . getCoordString($x, $y, 1);
  299.     $self->sendToServer($msg);
  300.     debug "Sent Homunculus move to: $x, $y\n", "sendPacket", 2;
  301. }
  302.  
  303. 1;
Ответить