ServerType17.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. # tRO (Thai) for 2007-05-22bRagexe by kLabMouse (thanks to abt123, championrpg and penz for support)
  13. # latest updaes will go here. Please don't use this ServerType for other servers except tRO.
  14. # Servertype overview: http://www.openkore.com/wiki/index.php/ServerType
  15. package Network::Send::ServerType17;
  16. use strict;
  17. use Globals;
  18. use Network::Send::ServerType0;
  19. use Network::PaddedPackets;
  20. use base qw(Network::Send::ServerType0);
  21. use Log qw(error debug);
  22. use I18N qw(stringToBytes);
  23. use Utils qw(getTickCount getHex getCoordString);
  24. sub new {
  25. my ($class) = @_;
  26. return $class->SUPER::new(@_);
  27. }
  28. sub sendAttack {
  29. my ($self, $monID, $flag) = @_;
  30. $self->sendToServer(Network::PaddedPackets::generateAtk($monID, $flag));
  31. debug "Sent attack: ".getHex($monID)."n", "sendPacket", 2;
  32. }
  33. sub sendGameLogin { # 0275
  34. my ($self, $accountID, $sessionID, $sessionID2, $sex) = @_;
  35. my ($serv) = $masterServer->{ip} =~ /d+.d+.d+.(d+)/;
  36. my $msg = pack("C2", 0x75, 0x02) . $accountID . $sessionID . $sessionID2 . pack("C*", 0, 0, $sex) . pack("x16 C1 x3", $serv);
  37. $self->sendToServer($msg);
  38. debug "Sent sendGameLoginn", "sendPacket", 2;
  39. }
  40. sub sendSit {
  41. my ($self) = @_;
  42. $self->sendToServer(Network::PaddedPackets::generateSitStand(1));
  43. debug "Sittingn", "sendPacket", 2;
  44. }
  45. sub sendStand {
  46. my ($self) = @_;
  47. $self->sendToServer(Network::PaddedPackets::generateSitStand(0));
  48. debug "Standingn", "sendPacket", 2;
  49. }
  50. sub sendSkillUse {
  51. my ($self, $ID, $lv, $targetID) = @_;
  52. $self->sendToServer(Network::PaddedPackets::generateSkillUse($ID, $lv,  $targetID));
  53. debug "Skill Use: $IDn", "sendPacket", 2;
  54. }
  55. sub sendChat { # 00F3
  56. my ($self, $message) = @_;
  57. $message = "|00$message" if ($config{chatLangCode} && $config{chatLangCode} ne "none");
  58. my ($data, $charName); # Type: Bytes
  59. $message = stringToBytes($message); # Type: Bytes
  60. $charName = stringToBytes($char->{name});
  61. $data = pack("C*", 0xF3, 0x00) .
  62. pack("v*", length($charName) + length($message) + 8) .
  63. $charName . " : " . $message . chr(0);
  64. $self->sendToServer($data);
  65. }
  66. sub sendDrop { # 009B
  67. my ($self, $index, $amount) = @_;
  68. my $msg = pack("C2 v1 v1", 0x9B, 0x00, $index, $amount);
  69. $self->sendToServer($msg);
  70. debug "Sent drop: $index x $amountn", "sendPacket", 2;
  71. }
  72. sub sendGetPlayerInfo { # 0190
  73. my ($self, $ID) = @_;
  74. my $msg = pack("C*", 0x90, 0x01) . $ID. pack("x1") ;
  75. $self->sendToServer($msg);
  76. debug "Sent get player info: ID - ".getHex($ID)."n", "sendPacket", 2;
  77. }
  78. sub sendGetCharacterName { # 00F5
  79.         my ($self, $ID) = @_;
  80.         my $msg = pack("S a4 x5", 0x00F5, $ID);
  81.         $self->sendToServer($msg);
  82.         debug "Sent get character name: ID - ".getHex($ID)."n", "sendPacket", 2;
  83. }
  84. sub sendItemUse { # 0113
  85. my ($self, $ID, $targetID) = @_;
  86. my $msg = pack("C2", 0x13, 0x01) . $targetID. pack("v1", $ID);
  87. $self->sendToServer($msg);
  88. debug "Item Use: $IDn", "sendPacket", 2;
  89. }
  90. sub sendLook { # 0072
  91. my ($self, $body, $head) = @_;
  92. my $msg = pack("C3 x1 C1", 0x72, 0x00, $head, $body);
  93. $self->sendToServer($msg);
  94. debug "Sent look: $body $headn", "sendPacket", 2;
  95. $char->{look}{head} = $head;
  96. $char->{look}{body} = $body;
  97. }
  98. sub sendMapLogin { # 008C
  99. my ($self, $accountID, $charID, $sessionID, $sex) = @_;
  100. $sex = 0 if ($sex > 1 || $sex < 0); # Sex can only be 0 (female) or 1 (male)
  101. my $msg = pack("C*", 0x8C, 0x00) .
  102. pack("x3") .
  103. $accountID .
  104. $charID .
  105. pack("x1") .
  106. $sessionID .
  107. pack("x4") .
  108. pack("V", getTickCount()) .
  109. pack("C*", $sex) .
  110. pack ("x2");
  111. $self->sendToServer($msg);
  112. }
  113. sub sendMove { # 00F7
  114. my $self = shift;
  115. my $x = int scalar shift;
  116. my $y = int scalar shift;
  117. my $msg = pack("C2 x11", 0xF7, 0x00) . getCoordString($x, $y, 1);
  118. $self->sendToServer($msg);
  119. debug "Sent move to: $x, $yn", "sendPacket", 2;
  120. }
  121. sub sendSkillUseLoc { # 009F
  122. my ($self, $ID, $lv, $x, $y) = @_;
  123. my $msg = pack("v1 v1 x3 v1 v1 v1", 0x9F, $y, $lv, $ID, $x);
  124. $self->sendToServer($msg);
  125. debug "Skill Use on Location: $ID, ($x, $y)n", "sendPacket", 2;
  126. }
  127. sub sendStorageAdd { # 00A7
  128. my $self= shift;
  129. my $index = shift;
  130. my $amount = shift;
  131. my $msg = pack("C2 V1 x1 v1", 0xA7, 0x00, $amount, $index);
  132. $self->sendToServer($msg);
  133. debug "Sent Storage Add: $index x $amountn", "sendPacket", 2;
  134. }
  135. sub sendStorageGet { # 0094
  136. my ($self, $index, $amount) = @_;
  137. my $msg = pack("C2 v1 V1 x6", 0x94, 0x00, $index, $amount);
  138. $self->sendToServer($msg);
  139. debug "Sent Storage Get: $index x $amountn", "sendPacket", 2;
  140. }
  141. sub sendStorageClose { # 0085
  142. my ($self) = @_;
  143. my $msg = pack("C*", 0x85, 0x00);
  144. $self->sendToServer($msg);
  145. debug "Sent Storage Donen", "sendPacket", 2;
  146. }
  147. sub sendSync { # 007E
  148. my ($self, $initialSync) = @_;
  149. my $msg;
  150. # XKore mode 1 lets the client take care of syncing.
  151. return if ($self->{net}->version == 1);
  152. $syncSync = pack("V", getTickCount());
  153. $msg = pack("C2 x1", 0x7E, 0x00) . $syncSync . pack("x5");
  154. $self->sendToServer($msg);
  155. debug "Sent Syncn", "sendPacket", 2;
  156. }
  157. sub sendTake { # 0116
  158. my $self = shift;
  159. my $itemID = shift; # $itemID = long
  160. my $msg = pack("C2", 0x16, 0x01) . $itemID;
  161. $self->sendToServer($msg);
  162. debug "Sent taken", "sendPacket", 2;
  163. }
  164. 1;