ServerType8.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. #  $Revision$
  13. #  $Id$
  14. ########################################################################
  15. # Korea (kRO), before February 2007
  16. # The majority of private servers on Dec 2007; packet_ver 22 of eAthena
  17. # Servertype overview: http://www.openkore.com/wiki/index.php/ServerType
  18. package Network::Send::ServerType8;
  19. use strict;
  20. use Globals qw($accountID $sessionID $sessionID2 $accountSex $char $charID %config %guild @chars $masterServer $syncSync $net);
  21. use Network::Send::ServerType0;
  22. use base qw(Network::Send::ServerType0);
  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 sendMove {
  31. my $self = shift;
  32. my $x = int scalar shift;
  33. my $y = int scalar shift;
  34. my $msg = pack("C*", 0xA7, 0x00, 0x00, 0x00) . getCoordString($x, $y);
  35. $self->sendToServer($msg);
  36. debug "Sent move to: $x, $yn", "sendPacket", 2;
  37. }
  38. sub sendSit {
  39. my $self = shift;
  40. my $msg;
  41. my %args;
  42. $args{flag} = 2;
  43. Plugins::callHook('packet_pre/sendSit', %args);
  44. if ($args{return}) {
  45. $self->sendToServer($args{msg});
  46. return;
  47. }
  48. $msg = pack("C2 x16 C1", 0x90, 0x01, 0x02);
  49. $self->sendToServer($msg);
  50. debug "Sittingn", "sendPacket", 2;
  51. }
  52. sub sendSkillUse {
  53. my ($self, $ID, $lv, $targetID) = @_;
  54. my $msg;
  55. my %args;
  56. $args{ID} = $ID;
  57. $args{lv} = $lv;
  58. $args{targetID} = $targetID;
  59. Plugins::callHook('packet_pre/sendSkillUse', %args);
  60. if ($args{return}) {
  61. $self->sendToServer($args{msg});
  62. return;
  63. }
  64. $msg = pack("v1 x4 v1 x2 v1 x9", 0x72, $lv, $ID) . $targetID;
  65. $self->sendToServer($msg);
  66. debug "Skill Use: $IDn", "sendPacket", 2;
  67. }
  68. sub sendAttack {
  69. my ($self, $monID, $flag) = @_;
  70. my $msg;
  71. my %args;
  72. $args{monID} = $monID;
  73. $args{flag} = $flag;
  74. Plugins::callHook('packet_pre/sendAttack', %args);
  75. if ($args{return}) {
  76. $self->sendToServer($args{msg});
  77. return;
  78. }
  79. $msg = pack("C*", 0x90, 0x01, 0x00, 0x00, 0x00) . 
  80. $monID . pack("C*",0x00, 0x00, 0x00, 0x00, 0x37, 0x66, 0x61, 0x32, 0x00, $flag);
  81. $self->sendToServer($msg);
  82. debug "Sent attack: ".getHex($monID)."n", "sendPacket", 2;
  83. }
  84. sub sendChat {
  85. my ($self, $message) = @_;
  86. $message = "|00$message" if ($config{chatLangCode} && $config{chatLangCode} ne "none");
  87. my ($data, $charName); # Type: Bytes
  88. $message = stringToBytes($message); # Type: Bytes
  89. $charName = stringToBytes($char->{name});
  90. $data = pack("C*", 0xf3, 0x00) .
  91. pack("v*", length($charName) + length($message) + 8) .
  92. $charName . " : " . $message . chr(0);
  93. $self->sendToServer($data);
  94. }
  95. sub sendDrop {
  96. my ($self, $index, $amount) = @_;
  97. my $msg = pack("C*", 0x16, 0x01, 0x35, 0x34, 0x33) .
  98. pack("v*", $index) .
  99. pack("C*", 0x61) .
  100. pack("v*", $amount);
  101. $self->sendToServer($msg);
  102. debug "Sent drop: $index x $amountn", "sendPacket", 2;
  103. }
  104. sub sendGetPlayerInfo {
  105. my ($self, $ID) = @_;
  106. my $msg = pack("v1 x5", 0x8c) . $ID;
  107. $self->sendToServer($msg);
  108. debug "Sent get player info: ID - ".getHex($ID)."n", "sendPacket", 2;
  109. }
  110. sub sendItemUse {
  111. my ($self, $ID, $targetID) = @_;
  112. my $msg = pack("C*", 0x9f, 0x00, 0x61, 0x62) .
  113. pack("v*", $ID) .
  114. pack("C*", 0x34, 0x35, 0x32, 0x61) .
  115. $targetID;
  116. $self->sendToServer($msg);
  117. debug "Item Use: $IDn", "sendPacket", 2;
  118. }
  119. sub sendLook {
  120. my ($self, $body, $head) = @_;
  121. my $msg = pack("v1 x5 C1 x2 C1", 0x85, $head, $body);
  122. $self->sendToServer($msg);
  123. debug "Sent look: $body $headn", "sendPacket", 2;
  124. $char->{look}{head} = $head;
  125. $char->{look}{body} = $body;
  126. }
  127. sub sendMapLogin {
  128. my ($self, $accountID, $charID, $sessionID, $sex) = @_;
  129. my $msg;
  130. $sex = 0 if ($sex > 1 || $sex < 0); # Sex can only be 0 (female) or 1 (male)
  131. $msg = pack("C*", 0x9b, 0, 0x39, 0x33) .
  132. $accountID .
  133. pack("C*", 0x65) .
  134. $charID .
  135. pack("C*", 0x37, 0x33, 0x36, 0x64) . 
  136. $sessionID .
  137. pack("V", getTickCount()) .
  138. pack("C*", $sex);
  139. $self->sendToServer($msg);
  140. }
  141. sub sendSkillUseLoc {
  142. my ($self, $ID, $lv, $x, $y) = @_;
  143. my $msg = pack("C2 x3 v1 x2 v1 x1 v1 x6 v1", 0x13, 0x01, $lv, $ID, $x, $y);
  144. $self->sendToServer($msg);
  145. debug "Skill Use on Location: $ID, ($x, $y)n", "sendPacket", 2;
  146. }
  147. sub sendStorageAdd {
  148. my ($self, $index, $amount) = @_;
  149. my $msg = pack("v1 x5 v1 x1 V1", 0x94, $index, $amount);
  150. $self->sendToServer($msg);
  151. debug "Sent Storage Add: $index x $amountn", "sendPacket", 2;
  152. }
  153. sub sendStorageClose {
  154. my ($self) = @_;
  155. my $msg = pack("C*", 0x93, 0x01);
  156. $self->sendToServer($msg);
  157. debug "Sent Storage Donen", "sendPacket", 2;
  158. }
  159. sub sendStorageGet {
  160. my ($self, $index, $amount) = @_;
  161. my $msg = pack("v1 x12 v1 x2 V1", 0xf7, $index, $amount);
  162. $self->sendToServer($msg);
  163. debug "Sent Storage Get: $index x $amountn", "sendPacket", 2;
  164. }
  165. sub sendStand {
  166. my $self = shift;
  167. my $msg;
  168. my %args;
  169. $args{flag} = 3;
  170. Plugins::callHook('packet_pre/sendStand', %args);
  171. if ($args{return}) {
  172. $self->sendToServer($args{msg});
  173. return;
  174. }
  175. $msg = pack("C2 x16 C1", 0x90, 0x01, 0x03);
  176. $self->sendToServer($msg);
  177. debug "Standingn", "sendPacket", 2;
  178. }
  179. sub sendSync {
  180. my ($self, $initialSync) = @_;
  181. my $msg;
  182. # XKore mode 1 lets the client take care of syncing.
  183. return if ($self->{net}->version == 1);
  184. $syncSync = pack("V", getTickCount());
  185. $msg = pack("C*", 0x89, 0x00, 0x00, 0x00);
  186. $msg .= $syncSync;
  187. $self->sendToServer($msg);
  188. debug "Sent Syncn", "sendPacket", 2;
  189. }
  190. sub sendTake {
  191. my ($self, $itemID) = @_;
  192. my $msg = pack("v1 x2", 0xf5) . $itemID;
  193. $self->sendToServer($msg);
  194. debug "Sent taken", "sendPacket", 2;
  195. }
  196. sub sendHomunculusMove {
  197. my $self = shift;
  198. my $homunID = shift;
  199. my $x = int scalar shift;
  200. my $y = int scalar shift;
  201. my $msg = pack("C*", 0x32, 0x02) . $homunID . getCoordString($x, $y, 1);
  202. $self->sendToServer($msg);
  203. debug "Sent Homunculus move to: $x, $yn", "sendPacket", 2;
  204. }
  205. 1;