ServerType8_1.pm
上传用户: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. #  $Revision: 5555 $
  13. #  $Id: ServerType8.pm 5555 2007-03-21 16:23:01Z vcl_kore $
  14. #  Modified by skseo, Jan-24-2007, Fixed bugs.
  15. ########################################################################
  16. # Korea (kRO), after February 2007
  17. # Servertype overview: http://www.openkore.com/wiki/index.php/ServerType
  18. package Network::Send::ServerType8_1;
  19. use strict;
  20. use Globals qw($accountID $sessionID $sessionID2 $accountSex $char $charID %config %guild @chars $masterServer $syncSync $net);
  21. use Network::Send::ServerType8;
  22. use base qw(Network::Send::ServerType8);
  23. use Log qw(message warning error debug);
  24. use I18N qw(stringToBytes);
  25. use Utils qw(getTickCount getHex getCoordString);
  26. sub new {
  27. my ($class) = @_;
  28. return $class->SUPER::new(@_);
  29. }
  30. sub sendAttack {
  31. my ($self, $monID, $flag) = @_;
  32. my %args;
  33. $args{monID} = $monID;
  34. $args{flag} = $flag;
  35. Plugins::callHook('packet_pre/sendAttack', %args);
  36. if ($args{return}) {
  37. $self->sendToServer($args{msg});
  38. return;
  39. }
  40. my $msg = pack("C*", 0x90, 0x01) . pack("x7") . $monID . pack("x9 C1", $flag);
  41. $self->sendToServer($msg);
  42. debug "Sent attack: ".getHex($monID)."n", "sendPacket", 2;
  43. }
  44. sub sendChat {
  45. my ($self, $message) = @_;
  46. $message = "|00$message" if ($config{chatLangCode} && $config{chatLangCode} ne "none");
  47. my ($data, $charName); # Type: Bytes
  48. $message = stringToBytes($message); # Type: Bytes
  49. $charName = stringToBytes($char->{name});
  50. $data = pack("C*", 0xf3, 0x00) .
  51. pack("v*", length($charName) + length($message) + 8) .
  52. $charName . " : " . $message . chr(0);
  53. $self->sendToServer($data);
  54. }
  55. sub sendDrop {
  56. my ($self, $index, $amount) = @_;
  57. my $msg = pack("C*", 0x16, 0x01) . pack("x4") .pack("v*", $index) . pack("x7") . 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 = pack("C*", 0x8c, 0x00) . pack("x8") . $ID;
  64. $self->sendToServer($msg);
  65. debug "Sent get player info: ID - ".getHex($ID)."n", "sendPacket", 2;
  66. }
  67. sub sendItemUse {
  68. my ($self, $ID, $targetID) = @_;
  69. my $msg = pack("C*", 0x9f, 0x00) . pack("x5") . pack("v*", $ID) . pack("x7") . $targetID;
  70. $self->sendToServer($msg);
  71. debug "Item Use: $IDn", "sendPacket", 2;
  72. }
  73. sub sendLook {
  74. my ($self, $body, $head) = @_;
  75. my $msg = pack("C*", 0x85, 0x00) . pack("x2") . pack("C*", $head) . pack("x4") . pack("C*", $body);
  76. $self->sendToServer($msg);
  77. debug "Sent look: $body $headn", "sendPacket", 2;
  78. $char->{look}{head} = $head;
  79. $char->{look}{body} = $body;
  80. }
  81. sub sendMapLogin {
  82. my ($self, $accountID, $charID, $sessionID, $sex) = @_;
  83. $sex = 0 if ($sex > 1 || $sex < 0); # Sex can only be 0 (female) or 1 (male)
  84. my $msg = pack("C*", 0x9b, 0) . pack("x5") .$accountID . pack("x4") . $charID . pack("x6") . $sessionID . pack("V", getTickCount()) . pack("C*", $sex);
  85. $self->sendToServer($msg);
  86. }
  87. sub sendMove {
  88. my $self = shift;
  89. my $x = int scalar shift;
  90. my $y = int scalar shift;
  91. my $msg = pack("C*", 0xA7, 0x00) . pack("x3") . getCoordString($x, $y);
  92. $self->sendToServer($msg);
  93. debug "Sent move to: $x, $yn", "sendPacket", 2;
  94. }
  95. sub sendSit {
  96. my $self = shift;
  97. my %args;
  98. $args{flag} = 2;
  99. Plugins::callHook('packet_pre/sendSit', %args);
  100. if ($args{return}) {
  101. $self->sendToServer($args{msg});
  102. return;
  103. }
  104. my $msg = pack("C2 x20 C1", 0x90, 0x01, 0x02);
  105. $self->sendToServer($msg);
  106. debug "Sittingn", "sendPacket", 2;
  107. }
  108. sub sendStand {
  109. my $self = shift;
  110. my %args;
  111. $args{flag} = 3;
  112. Plugins::callHook('packet_pre/sendStand', %args);
  113. if ($args{return}) {
  114. $self->sendToServer($args{msg});
  115. return;
  116. }
  117. my $msg = pack("C2 x20 C1", 0x90, 0x01, 0x03);
  118. $self->sendToServer($msg);
  119. debug "Standingn", "sendPacket", 2;
  120. }
  121. sub sendSkillUse {
  122. my $self = shift;
  123. my $ID = shift;
  124. my $lv = shift;
  125. my $targetID = shift;
  126. my %args;
  127. $args{ID} = $ID;
  128. $args{lv} = $lv;
  129. $args{targetID} = $targetID;
  130. Plugins::callHook('packet_pre/sendSkillUse', %args);
  131. if ($args{return}) {
  132. $self->sendToServer($args{msg});
  133. return;
  134. }
  135. my $msg = pack("C*", 0x72, 0x00) . pack("x7") . pack("v*", $lv) . pack("x4") . pack("v*", $ID) . pack("x1") . $targetID;
  136. $self->sendToServer($msg);
  137. debug "Skill Use: $IDn", "sendPacket", 2;
  138. }
  139. sub sendSkillUseLoc {
  140. my ($self, $ID, $lv, $x, $y) = @_;
  141. my $msg = pack("C*", 0x17, 0x01) . pack("v*", $ID) . pack("x4") . pack("v*", $lv) . pack("x12") . pack("v*", $x) . pack("C*", 0x19, 0xea, 0x4d, 0x09) . pack("v*", $y);
  142. $self->sendToServer($msg);
  143. debug "Skill Use on Location: $ID, ($x, $y)n", "sendPacket", 2;
  144. }
  145. sub sendStorageAdd {
  146. my $self= shift;
  147. my $index = shift;
  148. my $amount = shift;
  149. my $msg = pack("C*", 0x94, 0x00) . pack("x1") . pack("v*", $index) . pack("x10") . pack("V*", $amount);
  150. $self->sendToServer($msg);
  151. debug "Sent Storage Add: $index x $amountn", "sendPacket", 2;
  152. }
  153. sub sendStorageGet {
  154. my ($self, $index, $amount) = @_;
  155. my $msg = pack("C*", 0xf7, 0x00) . pack("x1") . pack("v*", $index) . pack("x8") . pack("V*", $amount);
  156. $self->sendToServer($msg);
  157. debug "Sent Storage Get: $index x $amountn", "sendPacket", 2;
  158. }
  159. sub sendStorageClose {
  160. my ($self) = @_;
  161. my $msg = pack("C*", 0x93, 0x01);
  162. $self->sendToServer($msg);
  163. debug "Sent Storage Donen", "sendPacket", 2;
  164. }
  165. sub sendSync {
  166. my ($self, $initialSync) = @_;
  167. my $msg;
  168. # XKore mode 1 lets the client take care of syncing.
  169. return if ($self->{net}->version == 1);
  170. $syncSync = pack("V", getTickCount());
  171. my $msg = pack("C2 x5", 0x89, 0x00) . $syncSync;
  172. $self->sendToServer($msg);
  173. debug "Sent Syncn", "sendPacket", 2;
  174. }
  175. sub sendTake {
  176. my $self = shift;
  177. my $itemID = shift; # $itemID = long
  178. my $msg = pack("C*", 0xf5, 0x00) . pack("x5") . $itemID;
  179. $self->sendToServer($msg);
  180. debug "Sent taken", "sendPacket", 2;
  181. }
  182. 1;