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

外挂编程

开发平台:

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. # Servertype overview: http://www.openkore.com/wiki/index.php/ServerType
  13. package Network::Send::ServerType6;
  14. use strict;
  15. use Globals qw($accountID $sessionID $sessionID2 $accountSex $char $charID %config %guild @chars $masterServer $syncSync $net);
  16. use Network::Send::ServerType0;
  17. use base qw(Network::Send::ServerType0);
  18. use Log qw(message warning error debug);
  19. use I18N qw(stringToBytes);
  20. use Utils qw(getTickCount getHex getCoordString);
  21. sub new {
  22. my ($class) = @_;
  23. return $class->SUPER::new(@_);
  24. }
  25. sub sendAttack {
  26. my ($self, $monID, $flag) = @_;
  27. my $msg;
  28. $msg = pack("C*", 0x89, 0x00, 0x00, 0x00, 0x00, 0x25) .
  29. $monID .
  30. pack("C*", 0x03, 0x04, 0x01, 0xb7, 0x39, 0x03, 0x00, $flag);
  31.   $self->sendToServer($msg);
  32. debug "Sent attack: ".getHex($monID)."n", "sendPacket", 2;
  33. }
  34. sub sendDrop {
  35. my ($self, $index, $amount) = @_;
  36. my $msg;
  37. $msg = pack("C*", 0xA2, 0x00, 0, 0) .
  38. pack("v*", $index) .
  39. pack("C*", 0x7f, 0x03, 0xD2, 0xf2) .
  40. pack("v*", $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*", 0x94, 0x00, 0x54, 0x00, 0x44, 0xc1, 0x4b, 0x02, 0x44) . $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("C*", 0xA7, 0x00, 0x49).pack("v*", $ID).
  55. pack("C*", 0xfa, 0x12, 0x00, 0xdc, 0xf9, 0x12).$targetID;
  56. $self->sendToServer($msg);
  57. debug "Item Use: $IDn", "sendPacket", 2;
  58. }
  59. sub sendMapLogin {
  60. my ($self, $accountID, $charID, $sessionID, $sex) = @_;
  61. my $msg;
  62. $sex = 0 if ($sex > 1 || $sex < 0); # Sex can only be 0 (female) or 1 (male)
  63. $msg = pack("C*",0x72, 0x00, 0x00) .
  64. $accountID .
  65. pack("C*", 0x00, 0xe8, 0xfa) .
  66. $charID .
  67. pack ("C*", 0x65, 0x00, 0xff, 0xff, 0xff, 0xff) .
  68. $sessionID .
  69. pack("V", getTickCount()) .
  70. pack("C*", $sex);
  71. $self->sendToServer($msg);
  72. }
  73. sub sendMove {
  74. my $self = shift;
  75. my $x = int scalar shift;
  76. my $y = int scalar shift;
  77. my $msg;
  78. $msg = pack("C*", 0x85, 0x00, 0x4b) . getCoordString($x, $y);
  79. $self->sendToServer($msg);
  80. debug "Sent move to: $x, $yn", "sendPacket", 2;
  81. }
  82. sub sendSit {
  83. my $self = shift;
  84. my $msg;
  85. $msg = pack("C*", 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00) .
  86. pack("C*", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02);
  87. $self->sendToServer($msg);
  88. debug "Sittingn", "sendPacket", 2;
  89. }
  90. sub sendSkillUse {
  91. my ($self, $ID, $lv, $targetID) = @_;
  92. my $msg;
  93. $msg = pack("v*", 0x0113, 0x0000, 0x0045, 0x00, $lv) .
  94. pack("v", 0) .
  95. pack("v*", $ID, 0) .
  96. pack("v", 0x0060) . $targetID;
  97. $self->sendToServer($msg);
  98. debug "Skill Use: $IDn", "sendPacket", 2;
  99. }
  100. sub sendSkillUseLoc {
  101. my ($self, $ID, $lv, $x, $y) = @_;
  102. my $msg;
  103. $msg = pack("v*", 0x0116, 0x0000, $lv) .
  104. pack("v*", $ID, 0x1508) .
  105. pack("V*", 0, 0, 0) .
  106. pack("v*", $x, 0x1ad8, 0x76b4, $y);
  107. $self->sendToServer($msg);
  108. debug "Skill Use on Location: $ID, ($x, $y)n", "sendPacket", 2;
  109. }
  110. sub sendStand {
  111. my $self = shift;
  112. my $msg;
  113. $msg = pack("C*", 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00) .
  114. pack("C*", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03);
  115. $self->sendToServer($msg);
  116. debug "Standingn", "sendPacket", 2;
  117. }
  118. sub sendSync {
  119. my ($self, $initialSync) = @_;
  120. my $msg;
  121. # XKore mode 1 lets the client take care of syncing.
  122. return if ($self->{net}->version == 1);
  123. $syncSync = pack("V", getTickCount());
  124. $msg = pack("C*", 0x7E, 0x00);
  125. $msg .= pack("C*", 0x30) if ($initialSync);
  126. $msg .= pack("C*", 0x94) if (!$initialSync);
  127. $msg .= $syncSync;
  128. $self->sendToServer($msg);
  129. debug "Sent Syncn", "sendPacket", 2;
  130. }
  131. sub sendTake {
  132. my ($self, $itemID) = @_;
  133. my $msg;
  134. $msg = pack("C*", 0x9F, 0x00, 0x7f,) . $itemID;
  135. $self->sendToServer($msg);
  136. debug "Sent taken", "sendPacket", 2;
  137. }
  138. 1;