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

外挂编程

开发平台:

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::ServerType4;
  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, 0x39, 0x33, 0x68, 0x3B, 0x68, 0x3B, 0x6E, 0x0A, 0xE4, 0x16) .
  28. $ID;
  29. $self->sendToServer($msg);
  30. debug "Sent get character name: ID - ".getHex($ID)."n", "sendPacket", 2;
  31. }
  32. sub sendAttack {
  33. my ($self, $monID, $flag) = @_;
  34. my $msg;
  35. $msg = pack("C*", 0x85, 0x00, 0x60, 0x60) .
  36. $monID .
  37. pack("C*", 0x64, 0x64, 0x3E, 0x63, 0x67, 0x37, $flag);
  38.   $self->sendToServer($msg);
  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*", 0x9F, 0x00) .
  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;
  55. $msg = pack("C*", 0x94, 0x00) .
  56. pack("C*", 0x61, 0x62, 0x34, 0x11) .
  57. pack("v*", $index) .
  58. pack("C*", 0x67, 0x64) .
  59. pack("v*", $amount);
  60. $self->sendToServer($msg);
  61. debug "Sent drop: $index x $amountn", "sendPacket", 2;
  62. }
  63. sub sendGetPlayerInfo {
  64. my ($self, $ID) = @_;
  65. my $msg;
  66. $msg = pack("C*", 0x9B, 0x00) . pack("C*", 0x66, 0x3C, 0x61, 0x62) . $ID;
  67. $self->sendToServer($msg);
  68. debug "Sent get player info: ID - ".getHex($ID)."n", "sendPacket", 2;
  69. }
  70. sub sendItemUse {
  71. my ($self, $ID, $targetID) = @_;
  72. my $msg;
  73. $msg = pack("C*", 0x72, 0x00, 0x65, 0x36, 0x65).pack("v*", $ID).pack("C*", 0x64, 0x37).$targetID;
  74. $self->sendToServer($msg);
  75. debug "Item Use: $IDn", "sendPacket", 2;
  76. }
  77. sub sendLook {
  78. my ($self, $body, $head) = @_;
  79. my $msg;
  80. $msg = pack("C*", 0xF3, 0x00, 0x62, 0x32, 0x31, 0x33, $head,
  81. 0x00, 0x60, 0x30, 0x33, 0x31, 0x31, 0x31, $body);
  82. $self->sendToServer($msg);
  83. debug "Sent look: $body $headn", "sendPacket", 2;
  84. $char->{look}{head} = $head;
  85. $char->{look}{body} = $body;
  86. }
  87. sub sendMapLogin {
  88. my ($self, $accountID, $charID, $sessionID, $sex) = @_;
  89. my $msg;
  90. $sex = 0 if ($sex > 1 || $sex < 0); # Sex can only be 0 (female) or 1 (male)
  91. $msg = pack("C*", 0xF5, 0x00, 0xFF, 0xFF, 0xFF) .
  92. $accountID .
  93. pack("C*", 0xFF, 0xFF, 0xFF, 0xFF, 0xFF) .
  94. $charID .
  95. pack("C*", 0xFF, 0xFF) .
  96. $sessionID .
  97. pack("V1", getTickCount()) .
  98. pack("C*", $sex);
  99. $self->sendToServer($msg);
  100. }
  101. sub sendMove {
  102. my $self = shift;
  103. my $x = int scalar shift;
  104. my $y = int scalar shift;
  105. my $msg;
  106. $msg = pack("C*", 0x89, 0x00) . getCoordString($x, $y);
  107. $self->sendToServer($msg);
  108. debug "Sent move to: $x, $yn", "sendPacket", 2;
  109. }
  110. sub sendSit {
  111. my $self = shift;
  112. my $msg;
  113. $msg = pack("C*", 0x85, 0x00, 0x61, 0x32, 0x00, 0x00, 0x00 ,0x00 ,0x65,
  114. 0x36, 0x37, 0x34, 0x32, 0x35, 0x02);
  115. $self->sendToServer($msg);
  116. debug "Sittingn", "sendPacket", 2;
  117. }
  118. sub sendSkillUse {
  119. my ($self, $ID, $lv, $targetID) = @_;
  120. my $msg;
  121. $msg = pack("C*", 0x90, 0x01, 0x64, 0x63) .
  122. pack("v*", $lv) .
  123. pack("C*", 0x62, 0x65, 0x66, 0x67) .
  124. pack("v*", $ID) .
  125. pack("C*", 0x6C, 0x6B, 0x68, 0x69, 0x3D, 0x6E, 0x3C, 0x0A, 0x95, 0xE3) .
  126. $targetID;
  127. $self->sendToServer($msg);
  128. debug "Skill Use: $IDn", "sendPacket", 2;
  129. }
  130. sub sendSkillUseLoc {
  131. my ($self, $ID, $lv, $x, $y) = @_;
  132. my $msg;
  133. $msg = pack("C*", 0xA7, 0x00, 0x37, 0x65, 0x66, 0x60) . pack("v*", $lv) .
  134. pack("C*", 0x32) . pack("v*", $ID) .
  135. pack("C*", 0x3F, 0x6D, 0x6E, 0x68, 0x3D, 0x68, 0x6F, 0x0C, 0x0C, 0x93, 0xE5, 0x5C) .
  136. pack("v*", $x) . chr(0) . pack("v*", $y);
  137. $self->sendToServer($msg);
  138. debug "Skill Use on Location: $ID, ($x, $y)n", "sendPacket", 2;
  139. }
  140. sub sendStorageAdd {
  141. my ($self, $index, $amount) = @_;
  142. my $msg;
  143. $msg = pack("C*", 0x7E, 0x00) . pack("C*", 0x35, 0x34, 0x3D, 0x65) .
  144. pack("v", $index) .
  145. pack("C", 0x30) .
  146. pack("V", $amount);
  147. $self->sendToServer($msg);
  148. debug "Sent Storage Add: $index x $amountn", "sendPacket", 2;
  149. }
  150. sub sendStorageGet {
  151. my ($self, $index, $amount) = @_;
  152. my $msg;
  153. $msg = pack("C*", 0x93, 0x01, 0x3B, 0x3A, 0x33, 0x69, 0x3B, 0x3B, 0x3E, 0x3A, 0x0A, 0x0A) .
  154. pack("v*", $index) .
  155. pack("C*", 0x35, 0x34, 0x3D, 0x67) .
  156. pack("V*", $amount);
  157. $self->sendToServer($msg);
  158. debug "Sent Storage Get: $index x $amountn", "sendPacket", 2;
  159. }
  160. sub sendStand {
  161. my $self = shift;
  162. my $msg;
  163. $msg = pack("C*", 0x85, 0x00, 0x61, 0x32, 0x00, 0x00, 0x00, 0x00,
  164. 0x65, 0x36, 0x30, 0x63, 0x35, 0x3F, 0x03);
  165. $self->sendToServer($msg);
  166. debug "Standingn", "sendPacket", 2;
  167. }
  168. sub sendSync {
  169. my ($self, $initialSync) = @_;
  170. my $msg;
  171. # XKore mode 1 lets the client take care of syncing.
  172. return if ($self->{net}->version == 1);
  173. $syncSync = pack("V", getTickCount());
  174. $msg = pack("C*", 0x16, 0x01);
  175. $msg .= pack("C*", 0x61, 0x3A) if ($initialSync);
  176. $msg .= pack("C*", 0x61, 0x62) if (!$initialSync);
  177. $msg .= $syncSync;
  178. $msg .= pack("C*", 0x0B);
  179. $self->sendToServer($msg);
  180. debug "Sent Syncn", "sendPacket", 2;
  181. }
  182. sub sendTake {
  183. my ($self, $itemID) = @_;
  184. my $msg;
  185. $msg = pack("C*", 0x13, 0x01, 0x61, 0x60, 0x3B) . $itemID;
  186. $self->sendToServer($msg);
  187. debug "Sent taken", "sendPacket", 2;
  188. }
  189. 1;