ServerType18.pm.svn-base
上传用户: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. # iRO (International) as of June 21 2007.
  13. # Servertype overview: http://www.openkore.com/wiki/index.php/ServerType
  14. package Network::Send::ServerType18;
  15. use strict;
  16. use Globals qw($char $syncSync $net %config);
  17. use Network::Send::ServerType11;
  18. use Network::PaddedPackets;
  19. use base qw(Network::Send::ServerType0);
  20. use Log qw(error debug);
  21. use I18N qw(stringToBytes);
  22. use Utils qw(getTickCount getHex getCoordString2);
  23. sub new {
  24. my ($class) = @_;
  25. return $class->SUPER::new(@_);
  26. }
  27. # Create a random byte string of a specified length.
  28. sub createRandomBytes {
  29. my ($length) = @_;
  30. my $str = '';
  31. for (1..$length) {
  32. $str .= chr(rand(256));
  33. }
  34. return $str;
  35. }
  36. sub sendAttack {
  37. my ($self, $monID, $flag) = @_;
  38. $self->sendToServer(Network::PaddedPackets::generateAtk($monID, $flag));
  39. debug "Sent attack: ".getHex($monID)."n", "sendPacket", 2;
  40. }
  41. sub sendChat {
  42. my ($self, $message) = @_;
  43. $message = "|00$message" if ($config{chatLangCode} && $config{chatLangCode} ne "none");
  44. my ($data, $charName); # Type: Bytes
  45. $message = stringToBytes($message); # Type: Bytes
  46. $charName = stringToBytes($char->{name});
  47. $data = pack("C*", 0x90, 0x01) .
  48. pack("v*", length($charName) + length($message) + 8) .
  49. $charName . " : " . $message . chr(0);
  50. $self->sendToServer($data);
  51. }
  52. sub sendDrop {
  53. my ($self, $index, $amount) = @_;
  54. my $msg = pack("C*", 0x7E, 0x00) .
  55. pack("v1", $amount) .
  56. pack("v1", $index);
  57. $self->sendToServer($msg);
  58. debug "Sent drop: $index x $amountn", "sendPacket", 2;
  59. }
  60. sub sendGetPlayerInfo {
  61. my ($self, $ID) = @_;
  62. my $msg = pack("C*", 0x93, 0x01) . createRandomBytes(3) . $ID;
  63. $self->sendToServer($msg);
  64. debug "Sent get player info: ID - ".getHex($ID)."n", "sendPacket", 2;
  65. }
  66. sub sendItemUse {
  67. my ($self, $ID, $targetID) = @_;
  68. my $msg = pack("C*", 0x9F, 0x00) .
  69. pack("v*", $ID) .
  70. $targetID;
  71. $self->sendToServer($msg);
  72. debug "Item Use: $IDn", "sendPacket", 2;
  73. }
  74. sub sendLook {
  75. my ($self, $body, $head) = @_;
  76. my $msg = pack("C*", 0xF7, 0x00, $head, 0x00, $body);
  77. $self->sendToServer($msg);
  78. debug "Sent look: $body $headn", "sendPacket", 2;
  79. $char->{look}{head} = $head;
  80. $char->{look}{body} = $body;
  81. }
  82. sub sendMapLogin {
  83. my ($self, $accountID, $charID, $sessionID, $sex) = @_;
  84. my $msg;
  85. $sex = 0 if ($sex > 1 || $sex < 0); # Sex can only be 0 (female) or 1 (male)
  86. $msg = pack("C*", 0xF3, 0x00) .
  87. createRandomBytes(3) .
  88. $charID .
  89. $accountID .
  90. chr(0) .
  91. $sessionID .
  92. createRandomBytes(9) .
  93. pack("V", getTickCount()) .
  94. chr($sex) .
  95. createRandomBytes(5);
  96. $self->sendToServer($msg);
  97. }
  98. sub sendMove {
  99. my $self = shift;
  100. my $x = int scalar shift;
  101. my $y = int scalar shift;
  102. my $msg = pack("C*", 0x85, 0x00, 0x00, 0x00, 0x00, 0x00) .
  103. getCoordString2($x, $y, 1);
  104. $self->sendToServer($msg);
  105. debug "Sent move to: $x, $yn", "sendPacket", 2;
  106. }
  107. sub sendSit {
  108. my ($self) = @_;
  109. $self->sendToServer(Network::PaddedPackets::generateSitStand(1));
  110. debug "Sittingn", "sendPacket", 2;
  111. }
  112. sub sendSkillUse {
  113. my ($self, $ID, $lv, $targetID) = @_;
  114. $self->sendToServer(Network::PaddedPackets::generateSkillUse($ID, $lv,  $targetID));
  115. debug "Skill Use: $IDn", "sendPacket", 2;
  116. }
  117. sub sendSkillUseLoc {
  118. my ($self, $ID, $lv, $x, $y) = @_;
  119. my $msg = pack("C*", 0x8C, 0x00) .
  120. pack("v", $lv) .
  121. pack("v*", $ID) .
  122. pack("v*", $x) .
  123. pack("x4") .
  124. pack("v*", $y);
  125. $self->sendToServer($msg);
  126. debug "Skill Use on Location: $ID, ($x, $y)n", "sendPacket", 2;
  127. }
  128. sub sendStand {
  129. my ($self) = @_;
  130. $self->sendToServer(Network::PaddedPackets::generateSitStand(0));
  131. debug "Standingn", "sendPacket", 2;
  132. }
  133. sub sendStorageAdd {
  134. my $self = shift;
  135. my $index = shift;
  136. my $amount = shift;
  137. my $msg = pack("C*", 0xA2, 0x00) .
  138. pack("v", $index) .
  139. pack("V", $amount) .
  140. pack("x8");
  141. $self->sendToServer($msg);
  142. debug "Sent Storage Add: $index x $amountn", "sendPacket", 2;
  143. }
  144. sub sendStorageGet {
  145. my ($self, $index, $amount) = @_;
  146. my $msg = pack("C*", 0x9B, 0x00) .
  147. pack("V*", $amount) .
  148. pack("x12") .
  149. pack("v*", $index);
  150. $self->sendToServer($msg);
  151. debug "Sent Storage Get: $index x $amountn", "sendPacket", 2;
  152. }
  153. sub sendStorageClose {
  154.         my ($self) = @_;
  155.         my $msg = pack("C*", 0x13, 0x01);
  156.         $self->sendToServer($msg);
  157.         debug "Sent Storage Donen", "sendPacket", 2;
  158. }
  159. sub sendSync {
  160. my ($self, $initialSync) = @_;
  161. my $msg;
  162. # XKore mode 1 lets the client take care of syncing.
  163. return if ($self->{net}->version == 1);
  164. $syncSync = pack("V", getTickCount());
  165. $msg = pack("C*", 0xA7, 0x00) . 
  166. pack("x6") .
  167. $syncSync;
  168. $self->sendToServer($msg);
  169. debug "Sent Syncn", "sendPacket", 2;
  170. }
  171. sub sendTake {
  172. my $self = shift;
  173. my $itemID = shift; # $itemID = long
  174. my $msg = pack("C*", 0x16, 0x01) . $itemID;
  175. $self->sendToServer($msg);
  176. debug "Sent taken", "sendPacket", 2;
  177. }
  178. 1;