ServerType1.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. # oRO (Oceania/Australia), as of February 2006.
  13. # Servertype overview: http://www.openkore.com/wiki/index.php/ServerType
  14. package Network::Send::ServerType1;
  15. use strict;
  16. use Globals qw($accountID $sessionID $sessionID2 $accountSex $char $charID %config %guild @chars $masterServer $syncSync $net);
  17. use Network::Send::ServerType0;
  18. use base qw(Network::Send::ServerType0);
  19. use Log qw(message warning error debug);
  20. use I18N qw(stringToBytes);
  21. use Utils qw(getTickCount getHex getCoordString);
  22. sub new {
  23. my ($class) = @_;
  24. return $class->SUPER::new(@_);
  25. }
  26. sub sendAttack {
  27. my ($self, $monID, $flag) = @_;
  28. my $msg;
  29. my %args;
  30. $args{monID} = $monID;
  31. $args{flag} = $flag;
  32. Plugins::callHook('packet_pre/sendAttack', %args);
  33. $msg = pack("C*", 0x89, 0x00, 0x00, 0x00).
  34. $monID .
  35. pack("C*", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, $flag);
  36. $self->sendToServer($msg);
  37. debug "Sent attack: ".getHex($monID)."n", "sendPacket", 2;
  38. }
  39. sub sendDrop {
  40. my ($self, $index, $amount) = @_;
  41. my $msg;
  42. $msg = pack("C*", 0xA2, 0x00) .
  43. pack("C*", 0xFF, 0xFF, 0x08, 0x10) .
  44. pack("v*", $index) .
  45. pack("C*", 0xD2, 0x9B) .
  46. pack("v*", $amount);
  47. $self->sendToServer($msg);
  48. debug "Sent drop: $index x $amountn", "sendPacket", 2;
  49. }
  50. sub sendGetPlayerInfo {
  51. my ($self, $ID) = @_;
  52. my $msg;
  53. $msg = pack("C*", 0x94, 0x00) . pack("C*", 0x12, 0x00, 150, 75) . $ID;
  54. $self->sendToServer($msg);
  55. debug "Sent get player info: ID - ".getHex($ID)."n", "sendPacket", 2;
  56. }
  57. sub sendItemUse {
  58. my ($self, $ID, $targetID) = @_;
  59. my $msg;
  60. $msg = pack("C*", 0xA7, 0x00, 0x9A, 0x12, 0x1C).pack("v*", $ID, 0).$targetID;
  61. $self->sendToServer($msg);
  62. debug "Item Use: $IDn", "sendPacket", 2;
  63. }
  64. sub sendLook {
  65. my ($self, $body, $head) = @_;
  66. my $msg;
  67. $msg = pack("C*", 0x9B, 0x00, 0xF2, 0x04, 0xC0, 0xBD, $head,
  68. 0x00, 0xA0, 0x71, 0x75, 0x12, 0x88, 0xC1, $body);
  69. $self->sendToServer($msg);
  70. debug "Sent look: $body $headn", "sendPacket", 2;
  71. $char->{look}{head} = $head;
  72. $char->{look}{body} = $body;
  73. }
  74. sub sendMapLogin {
  75. my ($self, $accountID, $charID, $sessionID, $sex) = @_;
  76. my $msg;
  77. $sex = 0 if ($sex > 1 || $sex < 0); # Sex can only be 0 (female) or 1 (male)
  78. my $key = pack("C*", 0xFC, 0x2B, 0x8B, 0x01, 0x00);
  79. # 0xFA,0x12,0x00,0xE0,0x5D
  80. # 0xFA,0x12,0x00,0xD0,0x7B
  81. $msg = pack("C*", 0x72, 0, 0, 0, 0) . $accountID . $key . $charID . pack("C*", 0xFF, 0xFF) .
  82. $sessionID . pack("V", getTickCount()) . pack("C", $sex);
  83. $self->sendToServer($msg);
  84. }
  85. sub sendSit {
  86. my $self = shift;
  87. my $msg;
  88. my %args;
  89. $args{flag} = 2;
  90. Plugins::callHook('packet_pre/sendSit', %args);
  91. if ($args{return}) {
  92. $self->sendToServer($args{msg});
  93. return;
  94. }
  95. $msg = pack("C*", 0x89, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x02);
  96. $self->sendToServer($msg);
  97. debug "Sittingn", "sendPacket", 2;
  98. }
  99. sub sendSkillUse {
  100. my ($self, $ID, $lv, $targetID) = @_;
  101. my $msg;
  102. my %args;
  103. $args{ID} = $ID;
  104. $args{lv} = $lv;
  105. $args{targetID} = $targetID;
  106. Plugins::callHook('packet_pre/sendSkillUse', %args);
  107. if ($args{return}) {
  108. $self->sendToServer($args{msg});
  109. return;
  110. }
  111. $msg = pack("v*", 0x0113, 0x0000, $lv) .
  112. pack("V", 0) .
  113. pack("v*", $ID, 0) .
  114. pack("V*", 0, 0) . $targetID;
  115. $self->sendToServer($msg);
  116. debug "Skill Use: $IDn", "sendPacket", 2;
  117. }
  118. sub sendSkillUseLoc {
  119. my ($self, $ID, $lv, $x, $y) = @_;
  120. my $msg;
  121. $msg = pack("v*", 0x0116, 0x0000, 0x0000, $lv) .
  122. chr(0) . pack("v*", $ID) .
  123. pack("V*", 0, 0, 0) .
  124. pack("v*", $x) . chr(0) . pack("v*", $y);
  125. $self->sendToServer($msg);
  126. debug "Skill Use on Location: $ID, ($x, $y)n", "sendPacket", 2;
  127. }
  128. sub sendStorageAdd {
  129. my ($self, $index, $amount) = @_;
  130. my $msg;
  131. $msg = pack("C*", 0xF3, 0x00) . pack("C*", 0x12, 0x00, 0x40, 0x73) .
  132. pack("v", $index) .
  133. pack("C", 0xFF) .
  134. pack("V", $amount);
  135. $self->sendToServer($msg);
  136. debug "Sent Storage Add: $index x $amountn", "sendPacket", 2;
  137. }
  138. sub sendStorageGet {
  139. my ($self, $index, $amount) = @_;
  140. my $msg;
  141. $msg = pack("v*", 0x00F5, 0, 0, 0, 0, 0, $index, 0, 0) . pack("V*", $amount);
  142. $self->sendToServer($msg);
  143. debug "Sent Storage Get: $index x $amountn", "sendPacket", 2;
  144. }
  145. sub sendStand {
  146. my $self = shift;
  147. my $msg;
  148. my %args;
  149. $args{flag} = 3;
  150. Plugins::callHook('packet_pre/sendStand', %args);
  151. if ($args{return}) {
  152. $self->sendToServer($args{msg});
  153. return;
  154. }
  155. $msg = pack("C*", 0x89, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
  156. 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03);
  157. $self->sendToServer($msg);
  158. debug "Standingn", "sendPacket", 2;
  159. }
  160. sub sendSync {
  161. my ($self, $initialSync) = @_;
  162. my $msg;
  163. # XKore mode 1 lets the client take care of syncing.
  164. return if ($self->{net}->version == 1);
  165. $syncSync = pack("V", getTickCount());
  166. $msg = pack("C*", 0x7E, 0x00);
  167. $msg .= pack("C*", 0x30, 0x00, 0x40) if ($initialSync);
  168. $msg .= pack("C*", 0x00, 0x00, 0x1F) if (!$initialSync);
  169. $msg .= $syncSync;
  170. $self->sendToServer($msg);
  171. debug "Sent Syncn", "sendPacket", 2;
  172. }
  173. sub sendTake {
  174. my ($self, $itemID) = @_;
  175. my $msg;
  176. $msg = pack("C*", 0x9F, 0x00, 0x00, 0x00, 0x68) . $itemID;
  177. $self->sendToServer($msg);
  178. debug "Sent taken", "sendPacket", 2;
  179. }
  180. 1;