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

外挂编程

开发平台:

Windows_Unix

  1. #########################################################################
  2. #  OpenKore - Network subsystem
  3. #  This module contains functions for sending messages 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. #
  13. #  ServerType for rRO and vRO
  14. #  27 December 2006: Updated to support 2006-12-18a protocol
  15. #  19 January  2007: Updated to support 2007-01-16a protocol
  16. #  13 February 2007: vRO now also uses this server type.
  17. #  07 March    2007: Updated to support rRO 2007-02-26a protocol / vRO is disabled?
  18. #  23 March    2007: Updated to support rRO 2007-02-26e protocol
  19. #  12 June     2007: Updated to support rRO 2007-05-29a protocol
  20. #########################################################################
  21. # Servertype overview: http://www.openkore.com/wiki/index.php/ServerType
  22. package Network::Send::ServerType13;
  23. use strict;
  24. use Globals qw($accountID $sessionID $sessionID2 $accountSex $char $charID %config %guild @chars $masterServer $syncSync $net);
  25. use Network::Send::ServerType0;
  26. use Network::PaddedPackets;
  27. use base qw(Network::Send::ServerType0);
  28. use Log qw(message warning error debug);
  29. use I18N qw(stringToBytes);
  30. use Utils qw(getTickCount getHex getCoordString);
  31. sub new {
  32. my ($class) = @_;
  33. return $class->SUPER::new(@_);
  34. }
  35. sub sendAttack {
  36. my ($self, $monID, $flag) = @_;
  37. $self->sendToServer(Network::PaddedPackets::generateAtk($monID, $flag));
  38. debug "Sent attack: ".getHex($monID)."n", "sendPacket", 2;
  39. }
  40. sub sendChat {
  41. my ($self, $message) = @_;
  42. $message = "|00$message" if ($config{chatLangCode} && $config{chatLangCode} ne "none");
  43. my ($data, $charName); # Type: Bytes
  44. $message = stringToBytes($message); # Type: Bytes
  45. $charName = stringToBytes($char->{name});
  46. $data = pack("C*", 0x90, 0x01) . pack("v*", length($charName) + length($message) + 8) . $charName . " : " . $message . chr(0);
  47. $self->sendToServer($data);
  48. #'debug send bla-bla-bla' not found! - pJ
  49. }
  50. sub sendDrop {
  51. my ($self, $index, $amount) = @_;
  52. my $msg;
  53. $msg = pack("C*", 0x93, 0x01) . pack("v1", $amount) . pack("v1", $index);
  54. $self->sendToServer($msg);
  55. debug "Sent drop: $index x $amountn", "sendPacket", 2;
  56. }
  57. sub sendGetCharacterName {
  58. my ($self, $ID) = @_;
  59. my $msg;
  60. $msg = pack("C*", 0x9B, 0x00) . $ID . pack("x1");
  61. $self->sendToServer($msg);
  62. debug "Sent get character name: ID - ".getHex($ID)."n", "sendPacket", 2;
  63. }
  64. sub sendGetPlayerInfo {
  65. my ($self, $ID) = @_;
  66. my $msg;
  67. $msg = pack("C*", 0x7E, 0x00) . pack("x3") . $ID;
  68. $self->sendToServer($msg);
  69. debug "Sent get player info: ID - ".getHex($ID)."n", "sendPacket", 2;
  70. }
  71. sub sendItemUse {
  72. my $self = shift;
  73. my $ID = shift;
  74. my $targetID = shift;
  75. my $msg;
  76. $msg = pack("C*", 0x89, 0x00) . pack("v", $ID) . $targetID;
  77. $self->sendToServer($msg);
  78. debug "Item Use: $IDn", "sendPacket", 2;
  79. }
  80. sub sendLook {
  81. my ($self, $body, $head) = @_;
  82. my $msg;
  83. $msg = pack("C*", 0xA2, 0x00) . pack("C*", $head, 0, $body);
  84. $self->sendToServer($msg);
  85. debug "Sent look: $body $headn", "sendPacket", 2;
  86. $char->{look}{head} = $head;
  87. $char->{look}{body} = $body;
  88. }
  89. sub sendMapLogin {
  90. my $self = shift;
  91. my $accountID = shift;
  92. my $charID = shift;
  93. my $sessionID = shift;
  94. my $sex = shift;
  95. my $msg;
  96. $sex = 0 if ($sex > 1 || $sex < 0); # Sex can only be 0 (female) or 1 (male)
  97. $msg = pack("C*", 0x8C, 0x00). $charID. $sessionID . pack("x1")  . $accountID .  pack("x5")  .  pack("V", getTickCount()) . pack("x3") . pack("x2") . 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*", 0xF7, 0x00) . pack("x8") . getCoordString($x, $y, 1) . pack("x6"); 
  106. $self->sendToServer($msg);
  107. debug "Sent move to: $x, $yn", "sendPacket", 2;
  108. }
  109. sub sendSit {
  110. my ($self) = @_;
  111. $self->sendToServer(Network::PaddedPackets::generateSitStand(1));
  112. debug "Sittingn", "sendPacket", 2;
  113. }
  114. sub sendStand {
  115. my ($self) = @_;
  116. $self->sendToServer(Network::PaddedPackets::generateSitStand(0));
  117. debug "Standingn", "sendPacket", 2;
  118. }
  119. sub sendSkillUse {
  120. my ($self, $ID, $lv, $targetID) = @_;
  121. $self->sendToServer(Network::PaddedPackets::generateSkillUse($ID, $lv,  $targetID));
  122. debug "Skill Use: $IDn", "sendPacket", 2;
  123. }
  124. sub sendSkillUseLoc {
  125. my ($self, $ID, $lv, $x, $y) = @_;
  126. my $msg;
  127. $msg = pack("C*", 0x13, 0x01) . pack("v", $lv) . pack("v*", $ID) . pack("v*", $x) . pack("v*", $y) . pack("x1");
  128. $self->sendToServer($msg);
  129. debug "Skill Use on Location: $ID, ($x, $y)n", "sendPacket", 2;
  130. }
  131. sub sendStorageAdd {
  132. my $self = shift;
  133. my $index = shift;
  134. my $amount = shift;
  135. my $msg;
  136. $msg = pack("C*", 0x72, 0x00) . pack("x9") . pack("V", $amount) . pack("v", $index);
  137. $self->sendToServer($msg);
  138. debug "Sent Storage Add: $index x $amountn", "sendPacket", 2;
  139. }
  140. sub sendStorageClose {
  141. my ($self) = @_;
  142. my $msg;
  143. $msg = pack("C*", 0x16, 0x01);
  144. $self->sendToServer($msg);
  145. debug "Sent Storage Donen", "sendPacket", 2;
  146. }
  147. sub sendStorageGet {
  148. my $self = shift;
  149. my $index = shift;
  150. my $amount = shift;
  151. my $msg;
  152. $msg = pack("C*", 0x9F, 0x00) . pack("x11") . pack("v", $index) . pack("V*", $amount);
  153. $self->sendToServer($msg);
  154. debug "Sent Storage Get: $index x $amountn", "sendPacket", 2;
  155. }
  156. sub sendSync {
  157. my ($self, $initialSync) = @_;
  158. my $msg;
  159. # XKore mode 1 lets the client take care of syncing.
  160. return if ($self->{net}->version == 1);
  161. $syncSync = pack("V", getTickCount());
  162. $msg = pack("C*", 0xF5, 0x00) . $syncSync . pack("x1")  . pack("x4"); 
  163. $self->sendToServer($msg);
  164. debug "Sent Syncn", "sendPacket", 2;
  165. }
  166. sub sendTake {
  167. my $self = shift;
  168. my $itemID = shift; # $itemID = long
  169. my $msg;
  170. $msg = pack("C*", 0xA7, 0x00) . $itemID;
  171. $self->sendToServer($msg);
  172. debug "Sent taken", "sendPacket", 2;
  173. }
  174. 1;