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

外挂编程

开发平台:

Windows_Unix

  1. #########################################################################
  2. #  OpenKore - Network subsystem
  3. #  Message sending
  4. #
  5. #  Copyright (c) 2005,2006,2007 OpenKore Team
  6. #
  7. #  This software is open source, licensed under the GNU General Public
  8. #  License, version 2.
  9. #  Basically, this means that you're allowed to modify and distribute
  10. #  this software. However, if you distribute modified versions, you MUST
  11. #  also distribute the source code.
  12. #  See http://www.gnu.org/licenses/gpl.html for the full license.
  13. #########################################################################
  14. # Servertype overview: http://www.openkore.com/wiki/index.php/ServerType
  15. package Network::Send::ServerType9;
  16. use strict;
  17. use Globals qw($accountID $sessionID $sessionID2 $accountSex $char $charID %config %guild @chars $masterServer $syncSync $net);
  18. use Network::Send::ServerType0;
  19. use base qw(Network::Send::ServerType0);
  20. use Log qw(message warning error debug);
  21. use I18N qw(stringToBytes);
  22. use Utils qw(getTickCount getHex getCoordString);
  23. sub new {
  24. my ($class) = @_;
  25. return $class->SUPER::new(@_);
  26. }
  27. sub sendAttack {
  28. my ($self, $monID, $flag) = @_;
  29. my $msg;
  30. $msg = pack("C*", 0x90, 0x01) . pack("x5") .
  31. $monID .
  32. pack("x6") . pack("C", $flag);
  33.   $self->sendToServer($msg);
  34. debug "Sent attack: ".getHex($monID)."n", "sendPacket", 2;
  35. }
  36. sub sendChat {
  37. my ($self, $message) = @_;
  38. $message = "|00$message" if ($config{chatLangCode} && $config{chatLangCode} ne "none");
  39. my ($data, $charName); # Type: Bytes
  40. $message = stringToBytes($message); # Type: Bytes
  41. $charName = stringToBytes($char->{name});
  42. $data = pack("C*", 0xf3, 0x00) .
  43. pack("v*", length($charName) + length($message) + 8) .
  44. $charName . " : " . $message . chr(0);
  45. $self->sendToServer($data);
  46. }
  47. sub sendDrop {
  48. my ($self, $index, $amount) = @_;
  49. my $msg;
  50. $msg = pack("C*", 0x16, 0x01) . pack("x6") .
  51. pack("v*", $index) .
  52. pack("x5") .
  53. pack("v*", $amount);
  54. $self->sendToServer($msg);
  55. debug "Sent drop: $index x $amountn", "sendPacket", 2;
  56. }
  57. sub sendGetPlayerInfo {
  58. my ($self, $ID) = @_;
  59. my $msg;
  60. $msg = pack("C*", 0x8c, 0x00) . pack("x6") . $ID;
  61. $self->sendToServer($msg);
  62. debug "Sent get player info: ID - ".getHex($ID)."n", "sendPacket", 2;
  63. }
  64. sub sendItemUse {
  65. my ($self, $ID, $targetID) = @_;
  66. my $msg;
  67. $msg = pack("C*", 0x9f, 0x00) . pack("x7") .
  68. pack("v*", $ID) .
  69. pack("x9") .
  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;
  77. $msg = pack("C*", 0x85, 0x00) . pack("x5") .
  78. pack("C*", $head, 0x00) . pack("x2") .
  79. pack("C*", $body);
  80. $self->sendToServer($msg);
  81. debug "Sent look: $body $headn", "sendPacket", 2;
  82. $char->{look}{head} = $head;
  83. $char->{look}{body} = $body;
  84. }
  85. sub sendMapLogin {
  86. my ($self, $accountID, $charID, $sessionID, $sex) = @_;
  87. my $msg;
  88. $sex = 0 if ($sex > 1 || $sex < 0); # Sex can only be 0 (female) or 1 (male)
  89. $msg = pack("C*", 0x9b, 0) .
  90. pack("x7") .
  91. $accountID .
  92. pack("x8") .
  93. $charID .
  94. pack("x3") .
  95. $sessionID .
  96. pack("V", getTickCount()) .
  97. pack("C*", $sex);
  98. $self->sendToServer($msg);
  99. }
  100. sub sendMove {
  101. my $self = shift;
  102. my $x = int scalar shift;
  103. my $y = int scalar shift;
  104. my $msg;
  105. $msg = pack("C*", 0xa7, 0x00) . pack("x9") .
  106. 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("C2 x15 C1", 0x90, 0x01, 0x02);
  114. $self->sendToServer($msg);
  115. debug "Sittingn", "sendPacket", 2;
  116. }
  117. sub sendSkillUse {
  118. my ($self, $ID, $lv, $targetID) = @_;
  119. my $msg;
  120. $msg = pack("C*", 0x72, 0x00) . pack("x9") .
  121. pack("v*", $lv) . pack("x5") .
  122. pack("v*", $ID) . pack("x2") .
  123. $targetID;
  124. $self->sendToServer($msg);
  125. debug "Skill Use: $IDn", "sendPacket", 2;
  126. }
  127. sub sendSkillUseLoc {
  128. my ($self, $ID, $lv, $x, $y) = @_;
  129. my $msg;
  130. $msg = pack("C*", 0x13, 0x01) .
  131. pack("x3") .
  132. pack("v*", $lv) .
  133. pack("x8") .
  134. pack("v*", $ID) .
  135. pack("x12") .
  136. pack("v*", $x) .
  137. pack("C*", 0x3D, 0xF8, 0xFA, 0x12, 0x00, 0x18, 0xEE) .
  138. pack("v*", $y);
  139. $self->sendToServer($msg);
  140. debug "Skill Use on Location: $ID, ($x, $y)n", "sendPacket", 2;
  141. }
  142. sub sendStorageAdd {
  143. my ($self, $index, $amount) = @_;
  144. my $msg;
  145. $msg = pack("C*", 0x94, 0x00) . pack("x3") .
  146. pack("v*", $index) .
  147. pack("x12") .
  148. pack("V*", $amount);
  149. $self->sendToServer($msg);
  150. debug "Sent Storage Add: $index x $amountn", "sendPacket", 2;
  151. }
  152. sub sendStorageGet {
  153. my ($self, $index, $amount) = @_;
  154. my $msg;
  155. $msg = pack("C*", 0xf7, 0x00) . pack("x9") .
  156. pack("v*", $index) . pack("x9") .
  157. pack("V*", $amount);
  158. $self->sendToServer($msg);
  159. debug "Sent Storage Get: $index x $amountn", "sendPacket", 2;
  160. }
  161. sub sendStand {
  162. my $self = shift;
  163. my $msg;
  164. $msg = pack("C*", 0x90, 0x01) . pack("x5") . pack("x4") . pack("x6") . pack("C", 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*", 0x89, 0x00);
  175. $msg .= pack("C*", 0x00, 0x00, 0x40) if ($initialSync);
  176. $msg .= pack("C*", 0x00, 0x00, 0x1F) if (!$initialSync);
  177. $msg .= pack("C*", 0x00, 0x00, 0x00, 0x90);
  178. $msg .= $syncSync;
  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*", 0xf5, 0x00) . pack("x7") . $itemID;
  186. $self->sendToServer($msg);
  187. debug "Sent taken", "sendPacket", 2;
  188. }
  189. 1;