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

外挂编程

开发平台:

Windows_Unix

  1. #########################################################################
  2. #  OpenKore - You actor object
  3. #  Copyright (c) 2005 OpenKore Team
  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. #  $Revision$
  13. #  $Id$
  14. #
  15. #########################################################################
  16. ##
  17. # MODULE DESCRIPTION: You actor object
  18. #
  19. # $char is of the Actor::You class. This class represents the your own character.
  20. #
  21. # @MODULE(Actor) is the base class for this class.
  22. package Actor::You;
  23. use strict;
  24. use Globals;
  25. use Log qw(message);
  26. use base qw(Actor);
  27. use InventoryList;
  28. ##
  29. # Skill $char->{permitSkill}
  30. #
  31. # When you use certain items, the server temporarily permits you to use a skill.
  32. # For example, when you use an Yggdrasil Leaf, the server temporarily lets you
  33. # to use Resurrection.
  34. #
  35. # This member specifies which skill is currently temporarily permitted. It is undef
  36. # when there is no temporarily permitted skill.
  37. # The temporary permission is removed once you have used the skill, or when you have
  38. # changed map server. (TODO: are these really all the cases?)
  39. ##
  40. # Hash<String, Hash> $char->{skills}
  41. #
  42. # Contains a set of skills that the character has. The keys of the hash
  43. # are the skill handles, and the values are a hash containing the following
  44. # items:
  45. # `l
  46. # - ID - The skill ID.
  47. # - lv - The maximum level of this skill.
  48. # - sp - The amount of SP that this skill needs, when used at the maximum level.
  49. # - range - The range of this skill, in blocks.
  50. # - up - Whether this skill can be leveled up further.
  51. # - targetType - ??? Probably related to %skillsArea
  52. # `l`
  53. ##
  54. # Actor::Homunculus $char->{homunculus}
  55. #
  56. # If the character has a homunculus, and the homunculus is currently online, then this
  57. # member points to character's homunculus object.
  58. ##
  59. # Bytes $char->{charID}
  60. #
  61. # A unique character ID for this character (not the same as the account ID, or $char->{ID}).
  62. sub new {
  63. my ($class) = @_;
  64. my $self = $class->SUPER::new('You');
  65. $self->{__inventory} = new InventoryList();
  66. return $self;
  67. }
  68. sub nameString {
  69. my ($self, $otherActor) = @_;
  70. return 'yourself' if $self->{ID} eq $otherActor->{ID};
  71. return 'you' if UNIVERSAL::isa($otherActor, 'Actor');
  72. return 'You';
  73. }
  74. ##
  75. # int $char->getSkillLevel(Skill skill)
  76. # Ensures: result >= 0
  77. #
  78. # Returns the maximum level of the specified skill. If the character doesn't
  79. # have that skill, the 0 is returned.
  80. sub getSkillLevel {
  81. my ($self, $skill) = @_;
  82. my $handle = $skill->getHandle();
  83. if ($self->{skills}{$handle}) {
  84. return $self->{skills}{$handle}{lv};
  85. } else {
  86. return 0;
  87. }
  88. }
  89. ##
  90. # InventoryList $char->inventory()
  91. # Ensures: defined(result)
  92. #
  93. # Get the inventory list for this character.
  94. sub inventory {
  95. return $_[0]->{__inventory};
  96. }
  97. ##
  98. # float $char->weight_percent()
  99. #
  100. # Returns your weight percentage (between 0 and 100).
  101. sub weight_percent {
  102. my ($self) = @_;
  103. return main::percent_weight($self);
  104. }
  105. ##
  106. # float $char->hp_percent()
  107. #
  108. # Returns your HP percentage (between 0 and 100).
  109. sub hp_percent {
  110. my ($self) = @_;
  111. return main::percent_hp($self);
  112. }
  113. ##
  114. # float $char->sp_percent()
  115. #
  116. # Returns your SP percentage (between 0 and 100).
  117. sub sp_percent {
  118. my ($self) = @_;
  119. return main::percent_sp($self);
  120. }
  121. ##
  122. # float $char->weight_percent()
  123. #
  124. # Returns your weight percentage (between 0 and 100).
  125. sub weight_percent {
  126. my ($self) = @_;
  127. return $self->{weight} / $self->{weight_max} * 100;
  128. }
  129. ##
  130. # float $char->master()
  131. #
  132. # Returns your master (if any).
  133. #
  134. # FIXME: Should eventually ensure that either an @MODULE(Actor::Party) (party member who
  135. # is not near you) or @MODULE(Actor::Player) (would be ensured if %players hash was
  136. # guaranteed to be clean) is returned.
  137. sub master {
  138. my ($self) = @_;
  139. # Stop if we have no master
  140. return unless $config{follow} && $config{followTarget};
  141. # Search through visible players
  142. keys %players;
  143. while (my ($ID, $player) = each %players) {
  144. return $player if $player->{name} eq $config{followTarget};
  145. }
  146. # Stop if we have no party
  147. return unless $char->{party} && %{$char->{party}};
  148. # Search through party members
  149. keys %{$char->{party}{users}};
  150. while (my ($ID, $player) = each %{$char->{party}{users}}) {
  151. return $player if $player->{name} eq $config{followTarget};
  152. }
  153. # Master is not visible and not in party
  154. return undef;
  155. }
  156. 1;