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

外挂编程

开发平台:

Windows_Unix

  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. # Servertype overview: http://www.openkore.com/wiki/index.php/ServerType
  13. package Network::Send::ServerType2;
  14. use strict;
  15. use Globals qw($accountID $sessionID $sessionID2 $accountSex $char $charID %config %guild @chars $masterServer $syncSync $net);
  16. use Network::Send::ServerType0;
  17. use base qw(Network::Send::ServerType0);
  18. use Log qw(message warning error debug);
  19. use I18N qw(stringToBytes);
  20. use Utils qw(getTickCount getHex getCoordString);
  21. sub new {
  22. my ($class) = @_;
  23. return $class->SUPER::new(@_);
  24. }
  25. sub sendTake {
  26. my ($self, $itemID) = @_;
  27. my $msg;
  28. $msg = pack("C*", 0x9F, 0x00, 0x00, 0x00, 0x68) . $itemID;
  29. $self->sendToServer($msg);
  30. debug "Sent taken", "sendPacket", 2;
  31. }
  32. sub sendAttack {
  33. my ($self, $monID, $flag) = @_;
  34. my $msg;
  35. $msg = pack("C*", 0x89, 0x00, 0x00, 0x00).
  36. $monID .
  37. pack("C*", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, $flag);
  38. $self->sendToServer($msg);
  39. debug "Sent attack: ".getHex($monID)."n", "sendPacket", 2;
  40. }
  41. sub sendDrop {
  42. my ($self, $index, $amount) = @_;
  43. my $msg;
  44. $msg = pack("C*", 0xA2, 0x00) .
  45. pack("C*", 0xFF, 0xFF, 0x08, 0x10) .
  46. pack("v*", $index) .
  47. pack("C*", 0xD2, 0x9B) .
  48. pack("v*", $amount);
  49. $self->sendToServer($msg);
  50. debug "Sent drop: $index x $amountn", "sendPacket", 2;
  51. }
  52. sub sendGetPlayerInfo {
  53. my ($self, $ID) = @_;
  54. my $msg;
  55. $msg = pack("C*", 0x94, 0x00) . pack("C*", 0x12, 0x00, 150, 75) . $ID;
  56. $self->sendToServer($msg);
  57. debug "Sent get player info: ID - ".getHex($ID)."n", "sendPacket", 2;
  58. }
  59. sub sendItemUse {
  60. my ($self, $ID, $targetID) = @_;
  61. my $msg;
  62. $msg = pack("C*", 0xA7, 0x00, 0x9A, 0x12, 0x1C).pack("v*", $ID, 0).$targetID;
  63. $self->sendToServer($msg);
  64. debug "Item Use: $IDn", "sendPacket", 2;
  65. }
  66. sub sendLook {
  67. my ($self, $body, $head) = @_;
  68. my $msg;
  69. $msg = pack("C*", 0x9B, 0x00, 0xF2, 0x04, 0xC0, 0xBD, $head,
  70. 0x00, 0xA0, 0x71, 0x75, 0x12, 0x88, 0xC1, $body);
  71. $self->sendToServer($msg);
  72. debug "Sent look: $body $headn", "sendPacket", 2;
  73. $char->{look}{head} = $head;
  74. $char->{look}{body} = $body;
  75. }
  76. sub sendSit {
  77. my $self = shift;
  78. my $msg;
  79. $msg = pack("C*", 0x89, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x02);
  80. $self->sendToServer($msg);
  81. debug "Sittingn", "sendPacket", 2;
  82. }
  83. sub sendSkillUse {
  84. my ($self, $ID, $lv, $targetID) = @_;
  85. my $msg;
  86. $msg = pack("v*", 0x0113, 0x0000, $lv) .
  87. pack("V", 0) .
  88. pack("v*", $ID, 0) .
  89. pack("V*", 0, 0) . $targetID;
  90. $self->sendToServer($msg);
  91. debug "Skill Use: $IDn", "sendPacket", 2;
  92. }
  93. sub sendSkillUseLoc {
  94. my ($self, $ID, $lv, $x, $y) = @_;
  95. my $msg;
  96. $msg = pack("v*", 0x0116, 0x0000, 0x0000, $lv) .
  97. chr(0) . pack("v*", $ID) .
  98. pack("V*", 0, 0, 0) .
  99. pack("v*", $x) . chr(0) . pack("v*", $y);
  100. $self->sendToServer($msg);
  101. debug "Skill Use on Location: $ID, ($x, $y)n", "sendPacket", 2;
  102. }
  103. sub sendStorageAdd {
  104. my ($self, $index, $amount) = @_;
  105. my $msg;
  106. $msg = pack("C*", 0xF3, 0x00) . pack("C*", 0x12, 0x00, 0x40, 0x73) .
  107. pack("v", $index) .
  108. pack("C", 0xFF) .
  109. pack("V", $amount);
  110. $self->sendToServer($msg);
  111. debug "Sent Storage Add: $index x $amountn", "sendPacket", 2;
  112. }
  113. sub sendStorageGet {
  114. my ($self, $index, $amount) = @_;
  115. my $msg;
  116. $msg = pack("v*", 0x00F5, 0, 0, 0, 0, 0, $index, 0, 0) . pack("V*", $amount);
  117. $self->sendToServer($msg);
  118. debug "Sent Storage Get: $index x $amountn", "sendPacket", 2;
  119. }
  120. sub sendStand {
  121. my $self = shift;
  122. my $msg;
  123. $msg = pack("C*", 0x89, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
  124. 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03);
  125. $self->sendToServer($msg);
  126. debug "Standingn", "sendPacket", 2;
  127. }
  128. sub sendSync {
  129. my ($self, $initialSync) = @_;
  130. my $msg;
  131. # XKore mode 1 lets the client take care of syncing.
  132. return if ($self->{net}->version == 1);
  133. $syncSync = pack("V", getTickCount());
  134. $msg = pack("C*", 0x7E, 0x00);
  135. $msg .= pack("C*", 0x30, 0x00, 0x40) if ($initialSync);
  136. $msg .= pack("C*", 0x00, 0x00, 0x1F) if (!$initialSync);
  137. $msg .= $syncSync;
  138. $self->sendToServer($msg);
  139. debug "Sent Syncn", "sendPacket", 2;
  140. }
  141. sub sendTake {
  142. my ($self, $itemID) = @_;
  143. my $msg;
  144. $msg = pack("C*", 0x9F, 0x00, 0x00, 0x00, 0x68) . $itemID;
  145. $self->sendToServer($msg);
  146. debug "Sent taken", "sendPacket", 2;
  147. }
  148. 1;