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

外挂编程

开发平台:

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::ServerType5;
  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 sendGetCharacterName {
  26. my ($self, $ID) = @_;
  27. my $msg = pack("C*", 0xa2, 0x00, 0x00, 0x00, 0x00) . $ID;
  28. $self->sendToServer($msg);
  29. debug "Sent get character name: ID - ".getHex($ID)."n", "sendPacket", 2;
  30. }
  31. sub sendAttack {
  32. my ($self, $monID, $flag) = @_;
  33. my $msg;
  34. $msg = pack("C*", 0x90, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0xb0, 0x58) .
  35. $monID .
  36. pack("C*", 0x3f, 0x74, 0xfb, 0x12, 0x00, 0xd0, 0xda, 0x63, $flag);
  37.   $self->sendToServer($msg);
  38. debug "Sent attack: ".getHex($monID)."n", "sendPacket", 2;
  39. }
  40. sub sendChat {
  41. my ($self, $message) = @_;
  42. $message = "|00$message" if ($config{chatLangCode} && $config{chatLangCode} ne "none");
  43. my ($data, $charName); # Type: Bytes
  44. $message = stringToBytes($message); # Type: Bytes
  45. $charName = stringToBytes($char->{name});
  46. $data = pack("C*", 0xf3, 0x00) .
  47. pack("v*", length($charName) + length($message) + 8) .
  48. $charName . " : " . $message . chr(0);
  49. $self->sendToServer($data);
  50. }
  51. sub sendDrop {
  52. my ($self, $index, $amount) = @_;
  53. my $msg;
  54. $msg = pack("C*", 0x16, 0x01, 0x4b) .
  55. pack("v*", $index) .
  56. pack("C*", 0x60, 0x13, 0x14, 0x82, 0x21) .
  57. pack("v*", $amount);
  58. $self->sendToServer($msg);
  59. debug "Sent drop: $index x $amountn", "sendPacket", 2;
  60. }
  61. sub sendGetPlayerInfo {
  62. my ($self, $ID) = @_;
  63. my $msg;
  64. $msg = pack("C*", 0x8c, 0x00, 0x12, 0x00) . $ID;
  65. $self->sendToServer($msg);
  66. debug "Sent get player info: ID - ".getHex($ID)."n", "sendPacket", 2;
  67. }
  68. sub sendItemUse {
  69. my ($self, $ID, $targetID) = @_;
  70. my $msg;
  71. $msg = pack("C*", 0x9f, 0x00, 0x12, 0x00, 0x00, 0xab ,0xca ,0x11 ,0x5c) .
  72. pack("v*", $ID) .
  73. pack("C*", 0x00, 0x18, 0xfb, 0x12) .
  74. $targetID;
  75. $self->sendToServer($msg);
  76. debug "Item Use: $IDn", "sendPacket", 2;
  77. }
  78. sub sendLook {
  79. my ($self, $body, $head) = @_;
  80. my $msg;
  81. $msg = pack("C*", 0x85, 0x00, 0x54, 0x00, 0xD8, 0x5D, 0x2E, 0x14) .
  82. pack("C*", $head, 0x00, 0x00, 0x00, 0x08, 0x60, 0x13, 0x14) .
  83. pack("C*", $body);
  84. $self->sendToServer($msg);
  85. debug "Sent look: $body $headn", "sendPacket", 2;
  86. $char->{look}{head} = $head;
  87. $char->{look}{body} = $body;
  88. }
  89. sub sendMapLogin {
  90. my ($self, $accountID, $charID, $sessionID, $sex) = @_;
  91. my $msg;
  92. $sex = 0 if ($sex > 1 || $sex < 0); # Sex can only be 0 (female) or 1 (male)
  93. $msg = pack("C*", 0x9b, 0, 0, 0x10) .
  94. pack("C*", 0, 0, 0, 0, 0) .
  95. $accountID .
  96. pack("C*", 0xfc, 0x12) .
  97. $charID .
  98. pack("C*", 0x00, 0xff, 0xff, 0xff) .
  99. $sessionID .
  100. pack("V", getTickCount()) .
  101. pack("C*", $sex);
  102. $self->sendToServer($msg);
  103. }
  104. sub sendMove {
  105. my $self = shift;
  106. my $x = int scalar shift;
  107. my $y = int scalar shift;
  108. my $msg;
  109. $msg = pack("C*", 0xa7, 0x00, 0x62, 0x13, 0x18, 0x13, 0x97, 0x11) .
  110. getCoordString($x, $y);
  111. $self->sendToServer($msg);
  112. debug "Sent move to: $x, $yn", "sendPacket", 2;
  113. }
  114. sub sendSit {
  115. my $self = shift;
  116. my $msg;
  117. $msg = pack("C*", 0x90, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0xb0, 0x58,
  118. 0x00, 0x00, 0x00, 0x00, 0x3f, 0x74, 0xfb, 0x12, 0x00, 0xd0, 0xda, 0x63, 0x02);
  119. $self->sendToServer($msg);
  120. debug "Sittingn", "sendPacket", 2;
  121. }
  122. sub sendSkillUse {
  123. my ($self, $ID, $lv, $targetID) = @_;
  124. my $msg;
  125. $msg = pack("C*", 0x72, 0x00, 0x0d, 0x01, 0x32, 0x07) .
  126. pack("v*", $lv) .
  127. pack("C*", 0x07, 0x00, 0x00, 0x00, 0xd8, 0x07, 0x0d, 0x01, 0x00) .
  128. pack("v*", $ID) .
  129. pack("C*", 0x8e, 0x00, 0x01, 0xa8, 0x9a, 0x2b, 0x16, 0x12, 0x00, 0x00, 0x00) .
  130. $targetID;
  131. $self->sendToServer($msg);
  132. debug "Skill Use: $IDn", "sendPacket", 2;
  133. }
  134. sub sendSkillUseLoc {
  135. my ($self, $ID, $lv, $x, $y) = @_;
  136. my $msg;
  137. $msg = pack("C*", 0x13, 0x01, 0x37, 0x65, 0x66, 0x60, 0x1C, 0xa0, 0xc0, 0x32, 0xBF, 0x00) .
  138. pack("v*", $lv) .
  139. pack("C*", 0x32) .
  140. pack("v*", $ID) .
  141. pack("C*", 0x3F) .
  142. pack("v*", $x) .
  143. pack("C*", 0x6D, 0x6E, 0x68, 0x3D, 0x68, 0x6F, 0x0C, 0x0C, 0x93, 0xE5, 0x5C) .
  144. pack("v*", $y);
  145. $self->sendToServer($msg);
  146. debug "Skill Use on Location: $ID, ($x, $y)n", "sendPacket", 2;
  147. }
  148. sub sendStorageAdd {
  149. my ($self, $index, $amount) = @_;
  150. my $msg;
  151. $msg = pack("C*", 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00) .
  152. pack("C*", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00) .
  153. pack("v*", $index) .
  154. pack("C*", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x01, 0x00) .
  155. pack("V*", $amount);
  156. $self->sendToServer($msg);
  157. debug "Sent Storage Add: $index x $amountn", "sendPacket", 2;
  158. }
  159. sub sendStorageGet {
  160. my ($self, $index, $amount) = @_;
  161. my $msg;
  162. $msg = pack("C*", 0xf7, 0x00, 0x00, 0x00) .
  163. pack("C*", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00) .
  164. pack("v*", $index) .
  165. pack("C*", 0x00) .
  166. pack("V*", $amount);
  167. $self->sendToServer($msg);
  168. debug "Sent Storage Get: $index x $amountn", "sendPacket", 2;
  169. }
  170. sub sendStand {
  171. my $self = shift;
  172. my $msg;
  173. $msg = pack("C*", 0x90, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0xb0, 0x58,
  174. 0x00, 0x00, 0x00, 0x00, 0x3f, 0x74, 0xfb, 0x12, 0x00, 0xd0, 0xda, 0x63, 0x03);
  175. $self->sendToServer($msg);
  176. debug "Standingn", "sendPacket", 2;
  177. }
  178. sub sendSync {
  179. my ($self, $initialSync) = @_;
  180. my $msg;
  181. # XKore mode 1 lets the client take care of syncing.
  182. return if ($self->{net}->version == 1);
  183. $syncSync = pack("V", getTickCount());
  184. $msg = pack("C*", 0x89, 0x00);
  185. $msg .= pack("C*", 0x00, 0x00, 0x40) if ($initialSync);
  186. $msg .= pack("C*", 0x00, 0x00, 0x1F) if (!$initialSync);
  187. $msg .= pack("C*", 0x00, 0x00, 0x00, 0x90);
  188. $msg .= $syncSync;
  189. $self->sendToServer($msg);
  190. debug "Sent Syncn", "sendPacket", 2;
  191. }
  192. sub sendTake {
  193. my ($self, $itemID) = @_;
  194. my $msg;
  195. $msg = pack("C*", 0xf5, 0x00, 0x66, 0x00, 0xff, 0xff, 0xff, 0xff, 0x5c) . $itemID;
  196. $self->sendToServer($msg);
  197. debug "Sent taken", "sendPacket", 2;
  198. }
  199. 1;