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

外挂编程

开发平台:

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. # pRO Thor (Philippines) as of December 20 2006
  13. # paddedPackets_attackID 0x009B
  14. # paddedPackets_skillUseID 0x0089
  15. # syncID 0x009F
  16. # syncTickOffset 9
  17. # mapLoadedTickOffset 11
  18. # Servertype overview: http://www.openkore.com/wiki/index.php/ServerType
  19. package Network::Send::ServerType15;
  20. use strict;
  21. use Globals qw($char $syncSync $net %config);
  22. use Network::Send::ServerType11;
  23. use Network::PaddedPackets;
  24. use base qw(Network::Send::ServerType11);
  25. use Log qw(error debug);
  26. use I18N qw(stringToBytes);
  27. use Utils qw(getTickCount getHex getCoordString);
  28. sub new {
  29. my ($class) = @_;
  30. return $class->SUPER::new(@_);
  31. }
  32. sub sendAttack {
  33. my ($self, $monID, $flag) = @_;
  34. $self->sendToServer(Network::PaddedPackets::generateAtk($monID, $flag));
  35. debug "Sent attack: ".getHex($monID)."n", "sendPacket", 2;
  36. }
  37. sub sendChat {
  38. my ($self, $message) = @_;
  39. $message = "|00$message" if ($config{chatLangCode} && $config{chatLangCode} ne "none");
  40. my ($data, $charName); # Type: Bytes
  41. $message = stringToBytes($message); # Type: Bytes
  42. $charName = stringToBytes($char->{name});
  43. $data = pack("C*", 0x93, 0x01) .
  44. pack("v*", length($charName) + length($message) + 8) .
  45. $charName . " : " . $message . chr(0);
  46. $self->sendToServer($data);
  47. }
  48. sub sendSit {
  49. my ($self) = @_;
  50. $self->sendToServer(Network::PaddedPackets::generateSitStand(1));
  51. debug "Sittingn", "sendPacket", 2;
  52. }
  53. sub sendStand {
  54. my ($self) = @_;
  55. $self->sendToServer(Network::PaddedPackets::generateSitStand(0));
  56. debug "Standingn", "sendPacket", 2;
  57. }
  58. sub sendSkillUse {
  59. my ($self, $ID, $lv, $targetID) = @_;
  60. $self->sendToServer(Network::PaddedPackets::generateSkillUse($ID, $lv,  $targetID));
  61. debug "Skill Use: $IDn", "sendPacket", 2;
  62. }
  63. sub sendDrop {
  64. my ($self, $index, $amount) = @_;
  65. my $msg;
  66. $msg = pack("C2 v1 v1", 0xF5, 0x00, $amount, $index);
  67. $self->sendToServer($msg);
  68. debug "Sent drop: $index x $amountn", "sendPacket", 2;
  69. }
  70. sub sendGetPlayerInfo {
  71. my ($self, $ID) = @_;
  72. my $msg = pack("C*", 0x13, 0x01) . $ID . pack("x2");
  73. $self->sendToServer($msg);
  74. debug "Sent get player info: ID - ".getHex($ID)."n", "sendPacket", 2;
  75. }
  76. sub sendItemUse {
  77. my ($self, $ID, $targetID) = @_;
  78. my $msg = pack("C2", 0xF3, 0x00) . pack("v1", $ID). $targetID;
  79. $self->sendToServer($msg);
  80. debug "Item Use: $IDn", "sendPacket", 2;
  81. }
  82. sub sendLook {
  83. my ($self, $body, $head) = @_;
  84. my $msg = pack("C3 x1 C1", 0x90, 0x01, $head, $body);
  85. $self->sendToServer($msg);
  86. debug "Sent look: $body $headn", "sendPacket", 2;
  87. $char->{look}{head} = $head;
  88. $char->{look}{body} = $body;
  89. }
  90. sub sendMapLogin {
  91. my ($self, $accountID, $charID, $sessionID, $sex) = @_;
  92. $sex = 0 if ($sex > 1 || $sex < 0); # Sex can only be 0 (female) or 1 (male)
  93. my $msg = pack("C*", 0xA2, 0x00, 0x00) .
  94. pack("C*", $sex, 0x00) .
  95. $charID .
  96. pack("x4") .
  97. pack("V", getTickCount()) .
  98. pack("x5") .
  99. $sessionID .
  100. $accountID;
  101. $self->sendToServer($msg);
  102. }
  103. sub sendMove {
  104. my $self = shift;
  105. my $x = int scalar shift;
  106. my $y = int scalar shift;
  107. my $msg = pack("C2", 0x16, 0x01) . pack ("x3") . getCoordString($x, $y, 1). pack ("x1");
  108. $self->sendToServer($msg);
  109. debug "Sent move to: $x, $yn", "sendPacket", 2;
  110. }
  111. sub sendSkillUseLoc {
  112. my ($self, $ID, $lv, $x, $y) = @_;
  113. my $msg = pack("v1 v1 v1 v1 x1 v1", 0x7E, $x, $ID, $lv, $y);
  114. $self->sendToServer($msg);
  115. debug "Skill Use on Location: $ID, ($x, $y)n", "sendPacket", 2;
  116. }
  117. sub sendStorageAdd {
  118. my $self= shift;
  119. my $index = shift;
  120. my $amount = shift;
  121. my $msg = pack("C2 v1 x5 V1", 0x85, 0x00, $index, $amount);
  122. $self->sendToServer($msg);
  123. debug "Sent Storage Add: $index x $amountn", "sendPacket", 2;
  124. }
  125. sub sendStorageGet {
  126. my ($self, $index, $amount) = @_;
  127. my $msg = pack("C2 V1 x6 v1", 0xF7, 0x00, $amount, $index);
  128. $self->sendToServer($msg);
  129. debug "Sent Storage Get: $index x $amountn", "sendPacket", 2;
  130. }
  131. sub sendStorageClose {
  132. my ($self) = @_;
  133. my $msg = pack("C*", 0x8C, 0x00);
  134. $self->sendToServer($msg);
  135. debug "Sent Storage Donen", "sendPacket", 2;
  136. }
  137. sub sendSync {
  138. my ($self, $initialSync) = @_;
  139. my $msg;
  140. # XKore mode 1 lets the client take care of syncing.
  141. return if ($self->{net}->version == 1);
  142. $syncSync = pack("V", getTickCount());
  143. $msg = pack("C2 x7", 0x9F, 0x00) . $syncSync;
  144. $self->sendToServer($msg);
  145. debug "Sent Syncn", "sendPacket", 2;
  146. }
  147. sub sendTake {
  148. my $self = shift;
  149. my $itemID = shift; # $itemID = long
  150. my $msg = pack("C2", 0x94, 0x00) . $itemID;
  151. $self->sendToServer($msg);
  152. debug "Sent taken", "sendPacket", 2;
  153. }
  154. 1;