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