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