ServerType10.pm
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:5k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. #########################################################################
  2. #  OpenKore - Network subsystem
  3. #  This module contains functions for sending messages 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. # vRO (Vietnam)
  13. # Note that as of February 2007, vRO uses server type 13 instead of 10,
  14. # so this server type is obsolete at the moment.
  15. # Servertype overview: http://www.openkore.com/wiki/index.php/ServerType
  16. package Network::Send::ServerType10;
  17. use strict;
  18. use Globals qw($accountID $sessionID $sessionID2 $accountSex $char $charID %config %guild @chars $masterServer $syncSync $net);
  19. use Network::Send::ServerType0;
  20. use base qw(Network::Send::ServerType0);
  21. use Log qw(message warning error debug);
  22. use I18N qw(stringToBytes);
  23. use Utils qw(getTickCount getHex getCoordString);
  24. sub new {
  25. my ($class) = @_;
  26. return $class->SUPER::new(@_);
  27. }
  28. sub sendAttack {
  29. my ($self, $monID, $flag) = @_;
  30. my $msg;
  31. my %args;
  32. $args{monID} = $monID;
  33. $args{flag} = $flag;
  34. Plugins::callHook('packet_pre/sendAttack', %args);
  35. if ($args{return}) {
  36. $self->sendToServer($args{msg});
  37. return;
  38. }
  39. $msg = pack("C2 x3", 0x89, 0x00, 0x00, 0x00, 0x00). $monID. pack("x9 C1", $flag);
  40. $self->sendToServer($msg);
  41. debug "Sent attack: ".getHex($monID)."n", "sendPacket", 2;
  42. }
  43. sub sendDrop {
  44. my ($self, $index, $amount) = @_;
  45. my $msg = pack("C2 v1 v1", 0x89, 0x00, $index, $amount);
  46. $self->sendToServer($msg);
  47. debug "Sent drop: $index x $amountn", "sendPacket", 2;
  48. }
  49. sub sendGetPlayerInfo {
  50. my ($self, $ID) = @_;
  51. my $msg = pack("C*", 0xF5, 0x00) . $ID . pack("C*", 0x00, 0x00, 0x00); 
  52. $self->sendToServer($msg);
  53. debug "Sent get player info: ID - ".getHex($ID)."n", "sendPacket", 2;
  54. }
  55. sub sendItemUse {
  56. my ($self, $ID, $targetID) = @_;
  57. my $msg = pack("C*", 0x9F, 0x00) . $targetID . pack("v",$ID);
  58. $self->sendToServer($msg);
  59. debug "Item Use: $IDn", "sendPacket", 2;
  60. }
  61. sub sendLook {
  62. my ($self, $body, $head) = @_;
  63. my $msg = pack("C*", 0x90, 0x01, $body, $head, 0x00);
  64. $self->sendToServer($msg);
  65. debug "Sent look: $body $headn", "sendPacket", 2;
  66. $char->{look}{head} = $head;
  67. $char->{look}{body} = $body;
  68. }
  69. sub sendMapLogin {
  70. my ($self, $accountID, $charID, $sessionID, $sex) = @_;
  71. my $msg = pack("C*",0x9b, 0x00, 0x00) .
  72. $accountID .
  73. $charID .
  74. $sessionID .
  75. pack("C*",0x35, 0x32, 0x61, 0x00) .
  76. pack("V", getTickCount()) .
  77. pack("C*",0x35, 0x00) .
  78. pack("C*", $sex) .
  79. pack("C*", 0x35, 0x36, 0x00);
  80. $self->sendToServer($msg);
  81. }
  82. sub sendMove {
  83. my $self = shift;
  84. my $x = int scalar shift;
  85. my $y = int scalar shift;
  86. my $msg = pack("C*", 0x13, 0x01, 0x61, 0x38, 0x39, 0x34, 0x00) .
  87. getCoordString($x, $y, 1) . pack("C*", 0x39, 0x32, 0x00);
  88. $self->sendToServer($msg);
  89. debug "Sent move to: $x, $yn", "sendPacket", 2;
  90. }
  91. sub sendSkillUseLoc {
  92. my ($self, $ID, $lv, $x, $y) = @_;
  93. my $msg = pack("C*", 0xA7, 0x00) . pack("v", $lv) . pack("v*", $ID) . pack("v*", $x) . pack("x4") . pack("v*", $y);
  94. $self->sendToServer($msg);
  95. debug "Skill Use on Location: $ID, ($x, $y)n", "sendPacket", 2;
  96. }
  97. sub sendStorageAdd {
  98. my ($self, $index, $amount) = @_;
  99. my $msg = pack("C*", 0x7E, 0x00) . pack("v", $index) . pack("C*", 0x00) . pack("V", $amount);
  100. $self->sendToServer($msg);
  101. debug "Sent Storage Add: $index x $amountn", "sendPacket", 2;
  102. }
  103. sub sendStorageGet {
  104. my ($self, $index, $amount) = @_;
  105. my $msg = pack("C*", 0xF7, 0x00) . pack("v", $index) . pack("x12") . pack("V*", $amount);
  106. $self->sendToServer($msg);
  107. debug "Sent Storage Get: $index x $amountn", "sendPacket", 2;
  108. }
  109. sub sendSync {
  110. my ($self, $initialSync) = @_;
  111. # XKore mode 1 lets the client take care of syncing.
  112. return if ($self->{net}->version == 1);
  113. my $msg = pack("C*", 0xF3, 0x00, 0x00);
  114. $msg .= pack("V", getTickCount());
  115. $msg .= pack("C*", 0x39, 0x63, 0x62, 0x00);
  116. $self->sendToServer($msg);
  117. debug "Sent Syncn", "sendPacket", 2;
  118. }
  119. sub sendTake {
  120. my $self = shift;
  121. my $itemID = shift; # $itemID = long
  122. my $msg = pack("C*", 0x16, 0x01) . $itemID;
  123. $self->sendToServer($msg);
  124. debug "Sent taken", "sendPacket", 2;
  125. }
  126. sub sendSit {
  127. my $self = shift;
  128. my $msg;
  129. $msg = pack("C2 x16 C1", 0x89, 0x00, 0x02);
  130. $self->sendToServer($msg);
  131. debug "Sittingn", "sendPacket", 2;
  132. }
  133. sub sendSkillUse {
  134. my ($self, $ID, $lv, $targetID) = @_;
  135. my $msg;
  136. $msg = pack("C2 x4 v1 x2 v1 x9", 0x13, 0x01, $lv, $ID) . $targetID;
  137. $self->sendToServer($msg);
  138. debug "Skill Use: $IDn", "sendPacket", 2;
  139. }
  140. sub sendStand {
  141. my $self = shift;
  142. my $msg;
  143. $msg = pack("C2 x16 C1", 0x89, 0x00, 0x03);
  144. $self->sendToServer($msg);
  145. debug "Standingn", "sendPacket", 2;
  146. }
  147. 1;