ServerType11.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. # Servertype overview: http://www.openkore.com/wiki/index.php/ServerType
  13. package Network::Send::ServerType11;
  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 Network::PaddedPackets;
  18. use base qw(Network::Send::ServerType0);
  19. use Log qw(message warning error debug);
  20. use I18N qw(stringToBytes);
  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;
  34. $msg = pack("C*", 0xA2, 0x00) .
  35. pack("C*", 0x00, 0x00, 0x08, 0xA2) .
  36. pack("v*", $index) .
  37. pack("C*", 0x02, 0x97) .
  38. pack("v*", $amount);
  39. $self->sendToServer($msg);
  40. debug "Sent drop: $index x $amountn", "sendPacket", 2;
  41. }
  42. sub sendGetPlayerInfo {
  43. my ($self, $ID) = @_;
  44. my $msg;
  45. $msg = pack("C*", 0x94, 0x00) . pack("C*", 0x30, 0x03, 0x44, 0xA1) . $ID;
  46. $self->sendToServer($msg);
  47. debug "Sent get player info: ID - ".getHex($ID)."n", "sendPacket", 2;
  48. }
  49. sub sendItemUse {
  50. my ($self, $ID, $targetID) = @_;
  51. my $msg;
  52. $msg = pack("C*", 0xA7, 0x00, 0x32, 0x06, 0x1C) . 
  53. pack("v*", $ID) .
  54. pack("C*", 0x00, 0xD8) .
  55. $targetID;
  56. $self->sendToServer($msg);
  57. debug "Item Use: $IDn", "sendPacket", 2;
  58. }
  59. sub sendLook {
  60. my ($self, $body, $head) = @_;
  61. my $msg;
  62. $msg = pack("C*", 0x9B, 0x00, 0x33, 0x06, 0x00, 0x00, $head,
  63. 0x00, 0x08, 0xA0, 0x30, 0x03, 0x00, 0x00, $body);
  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;
  72. $sex = 0 if ($sex > 1 || $sex < 0); # Sex can only be 0 (female) or 1 (male)
  73. $msg = pack("C*", 0x72,0, 0, 0, 0xE8) .
  74. $accountID .
  75. pack("C*", 0xC3, 0x66, 0x00, 0xFF, 0xFF) .
  76. $charID .
  77. pack("C*", 0x12, 0x00) .
  78. $sessionID .
  79. pack("V", getTickCount()) .
  80. pack("C*",$sex);
  81. $self->sendToServer($msg);
  82. }
  83. sub sendMove {
  84. my $self = shift;
  85. my $x = int scalar shift;
  86. my $y = int scalar shift;
  87. my $msg;
  88. $msg = pack("C*", 0x85, 0x00) . getCoordString($x, $y);
  89. $self->sendToServer($msg);
  90. debug "Sent move to: $x, $yn", "sendPacket", 2;
  91. }
  92. sub sendSkillUseLoc {
  93. my ($self, $ID, $lv, $x, $y) = @_;
  94. my $msg;
  95. $msg = pack("C*", 0x16, 0x01, 0x7F, 0x00, 0x04, 0xFA) .
  96. pack("v", $lv) .
  97. pack("C*", 0xBF) .
  98. pack("v*", $ID) .
  99. pack("C*", 0x00, 0x38, 0xB8, 0x94, 0x02, 0x28, 0xC1, 0x97,
  100. 0x02, 0xC0, 0x44, 0xAA) .
  101. pack("v*", $x) . 
  102. pack("C*", 0x00) .
  103. pack("v*", $y);
  104. $self->sendToServer($msg);
  105. debug "Skill Use on Location: $ID, ($x, $y)n", "sendPacket", 2;
  106. }
  107. sub sendStorageAdd {
  108. my ($self, $index, $amount) = @_;
  109. my $msg;
  110. $msg = pack("C*", 0xF3, 0x00, 0xEA, 0x73, 0x50, 0xF8) .
  111. pack("v", $index) .
  112. pack("C*", 0x50) .
  113. pack("V", $amount);
  114. $self->sendToServer($msg);
  115. debug "Sent Storage Add: $index x $amountn", "sendPacket", 2;
  116. }
  117. sub sendStorageGet {
  118. my ($self, $index, $amount) = @_;
  119. my $msg;
  120. $msg = pack("C*", 0xF5, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00) .
  121. pack("v*", $index) .
  122. pack("C*", 0x00, 0x00, 0x00, 0x00) .
  123. pack("V*", $amount);
  124. $self->sendToServer($msg);
  125. debug "Sent Storage Get: $index x $amountn", "sendPacket", 2;
  126. }
  127. sub sendSync {
  128. my ($self, $initialSync) = @_;
  129. my $msg;
  130. # XKore mode 1 lets the client take care of syncing.
  131. return if ($self->{net}->version == 1);
  132. $syncSync = pack("V", getTickCount());
  133. $msg = pack("C*", 0x7E, 0x00);
  134. $msg .= pack("C*", 0x30, 0x00, 0x80,) if ($initialSync);
  135. $msg .= pack("C*", 0x00, 0x00, 0x80) if (!$initialSync);
  136. $msg .= $syncSync;
  137. $self->sendToServer($msg);
  138. debug "Sent Syncn", "sendPacket", 2;
  139. }
  140. sub sendTake {
  141. my ($self, $itemID) = @_;
  142. my $msg;
  143. $msg = pack("C*", 0x9F, 0x00, 0x00, 0x00, 0x08) . $itemID;
  144. $self->sendToServer($msg);
  145. debug "Sent taken", "sendPacket", 2;
  146. }
  147. sub sendSit {
  148. my ($self) = @_;
  149. $self->sendToServer(Network::PaddedPackets::generateSitStand(1));
  150. debug "Sittingn", "sendPacket", 2;
  151. }
  152. sub sendStand {
  153. my ($self) = @_;
  154. $self->sendToServer(Network::PaddedPackets::generateSitStand(0));
  155. debug "Standingn", "sendPacket", 2;
  156. }
  157. sub sendSkillUse {
  158. my ($self, $ID, $lv, $targetID) = @_;
  159. $self->sendToServer(Network::PaddedPackets::generateSkillUse($ID, $lv,  $targetID));
  160. debug "Skill Use: $IDn", "sendPacket", 2;
  161. }
  162. 1;