ServerType16.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. # euRO (Europe) as of December 20 2006
  13. # Servertype overview: http://www.openkore.com/wiki/index.php/ServerType
  14. package Network::Send::ServerType16;
  15. use strict;
  16. use Globals qw($char $syncSync $net);
  17. use Network::Send::ServerType11;
  18. use Network::PaddedPackets;
  19. use base qw(Network::Send::ServerType11);
  20. use Log qw(error debug);
  21. use Utils qw(getTickCount getHex getCoordString);
  22. sub new {
  23. my ($class) = @_;
  24. return $class->SUPER::new(@_);
  25. }
  26. sub sendAttack {
  27. my ($self, $monID, $flag) = @_;
  28. $self->sendToServer(Network::PaddedPackets::generateAtk($monID, $flag));
  29. debug "Sent attack: ".getHex($monID)."n", "sendPacket", 2;
  30. }
  31. sub sendDrop {
  32. my ($self, $index, $amount) = @_;
  33. my $msg = pack("C*", 0xA2, 0x00, 0x4B, 0x00, 0x98) .
  34. pack("v1", $index) .
  35. pack("C*", 0x03) .
  36. pack("v1", $amount);
  37. $self->sendToServer($msg);
  38. debug "Sent drop: $index x $amountn", "sendPacket", 2;
  39. }
  40. sub sendGetPlayerInfo {
  41. my ($self, $ID) = @_;
  42. my $msg = pack("C*", 0x94, 0x00) . pack("C*", 0x12, 0x05, 0x0C, 0x7B, 0x12) . $ID;
  43. $self->sendToServer($msg);
  44. debug "Sent get player info: ID - ".getHex($ID)."n", "sendPacket", 2;
  45. }
  46. sub sendItemUse {
  47. my ($self, $ID, $targetID) = @_;
  48. my $msg = pack("C*", 0xA7, 0x00, 0x81, 0x06) .
  49. pack("v*", $ID) .
  50. pack("C*", 0x12, 0x00, 0x68, 0xF7) .
  51. $targetID;
  52. $self->sendToServer($msg);
  53. debug "Item Use: $IDn", "sendPacket", 2;
  54. }
  55. sub sendLook {
  56. my ($self, $body, $head) = @_;
  57. my $msg = pack("C*", 0x9B, 0x00, 0x01, 0x02, 0x98, 0x35, 0x5D, $head, 0x00, 0xE8, $body);
  58. $self->sendToServer($msg);
  59. debug "Sent look: $body $headn", "sendPacket", 2;
  60. $char->{look}{head} = $head;
  61. $char->{look}{body} = $body;
  62. }
  63. sub sendMapLogin {
  64. my ($self, $accountID, $charID, $sessionID, $sex) = @_;
  65. $sex = 0 if ($sex > 1 || $sex < 0); # Sex can only be 0 (female) or 1 (male)
  66. my $msg = pack("C*", 0x72, 0, 0, 0) .
  67. $accountID .
  68. pack("C*", 0x50) .
  69. $charID .
  70. pack("C*", 0xFF, 0xFF, 0xFF, 0xCC) .
  71. $sessionID .
  72. pack("V", getTickCount()) .
  73. pack("C*", $sex);
  74. $self->sendToServer($msg);
  75. }
  76. sub sendMove {
  77. my $self = shift;
  78. my $x = int scalar shift;
  79. my $y = int scalar shift;
  80. my $msg = pack("C*", 0x85, 0x00, 0x5D, 0x03) . getCoordString($x, $y);
  81. $self->sendToServer($msg);
  82. debug "Sent move to: $x, $yn", "sendPacket", 2;
  83. }
  84. sub sendSkillUseLoc {
  85. my ($self, $ID, $lv, $x, $y) = @_;
  86. my $msg = pack("C*", 0x16, 0x01, 0x2C, 0x00, 0x1F) .
  87. pack("v", $lv) .
  88. pack("C*", 0x00, 0x98) .
  89. pack("v*", $ID) .
  90. pack("C*", 0x03) .
  91. pack("v*", $x) .
  92. pack("C*", 0x69, 0x03, 0xC0, 0x44, 0xAA, 0x76) .
  93. 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= shift;
  99. my $index = shift;
  100. my $amount = shift;
  101. my $msg = pack("C*", 0xF3, 0x00, 0x6E, 0x05, 0x78, 0xD1, 0x00) .
  102. pack("v", $index) .
  103. pack("C*", 0xE5) .
  104. pack("V", $amount);
  105. $self->sendToServer($msg);
  106. debug "Sent Storage Add: $index x $amountn", "sendPacket", 2;
  107. }
  108. sub sendStorageGet {
  109. my ($self, $index, $amount) = @_;
  110. my $msg = pack("C*", 0xF5, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00) .
  111. pack("v*", $index) .
  112. pack("C*", 0x21, 0x7E) .
  113. pack("V*", $amount);
  114. $self->sendToServer($msg);
  115. debug "Sent Storage Get: $index x $amountn", "sendPacket", 2;
  116. }
  117. sub sendSync {
  118. my ($self, $initialSync) = @_;
  119. my $msg;
  120. # XKore mode 1 lets the client take care of syncing.
  121. return if ($self->{net}->version == 1);
  122. $syncSync = pack("V", getTickCount());
  123. $msg = pack("C*", 0x7E, 0x00)
  124. . pack("C*", 0x00, 0x00)
  125. . $syncSync;
  126. $self->sendToServer($msg);
  127. debug "Sent Syncn", "sendPacket", 2;
  128. }
  129. sub sendTake {
  130. my $self = shift;
  131. my $itemID = shift; # $itemID = long
  132. my $msg = pack("C*", 0x9F, 0x00, 0x5D, 0x03) . $itemID;
  133. $self->sendToServer($msg);
  134. debug "Sent taken", "sendPacket", 2;
  135. }
  136. sub sendSit {
  137. my ($self) = @_;
  138. $self->sendToServer(Network::PaddedPackets::generateSitStand(1));
  139. debug "Sittingn", "sendPacket", 2;
  140. }
  141. sub sendStand {
  142. my ($self) = @_;
  143. $self->sendToServer(Network::PaddedPackets::generateSitStand(0));
  144. debug "Standingn", "sendPacket", 2;
  145. }
  146. sub sendSkillUse {
  147. my ($self, $ID, $lv, $targetID) = @_;
  148. $self->sendToServer(Network::PaddedPackets::generateSkillUse($ID, $lv,  $targetID));
  149. debug "Skill Use: $IDn", "sendPacket", 2;
  150. }
  151. 1;