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

外挂编程

开发平台:

Windows_Unix

  1. #########################################################################
  2. #  OpenKore - Entity lookup and matching
  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: Entity lookup and matching
  18. #
  19. # This module contains functions for matching input typed by the player with
  20. # an in-game entity (e.g. players, monsters, items). These functions make
  21. # it easy to match an entity using a number or a name.
  22. package Match;
  23. use strict;
  24. use Globals;
  25. use Utils;
  26. ##
  27. # Actor::Player Match::player(ID, [boolean partial_match = false])
  28. # ID: either a number in the player list, or a player name.
  29. # Returns: an Actor::Player object, or undef if not found.
  30. #
  31. # Find an player in the global player list based on the given match criteria.
  32. # You can either find a player by name, or by number (as displayed in the 'pl' command).
  33. #
  34. # Example:
  35. # # Suppose these players are on screen:
  36. # # 0     SuperPlayer
  37. # # 1     BigKnight
  38. # # 3     MyHunter
  39. # Match::player(1);           # Returns the Actor::Player object for BigKnight
  40. # Match::player(2);           # undef - player 2 does not exist
  41. # Match::player("MyHunter");  # Returns the Actor::Player object for MyHunter
  42. # Match::player("someone");   # undef - there is no such player on screen
  43. sub player {
  44. my $ID = shift;
  45. my $partial = shift;
  46. if ($ID =~ /^d+$/) {
  47. return $playersList->get($ID);
  48. } elsif ($partial) {
  49. $ID = quotemeta $ID;
  50. foreach my $player (@{$playersList->getItems()}) {
  51. return $player if ($player->name =~ /^$ID/i);
  52. }
  53. } else {
  54. foreach my $player (@{$playersList->getItems()}) {
  55. return $player if (lc($player->name) eq lc($ID));
  56. }
  57. }
  58. return undef;
  59. }
  60. ##
  61. # Actor::Item Match::inventoryItem(name)
  62. # name: either a number in the inventory list, or an item name.
  63. # Returns: the hash to the inventory item matching $name, or undef.
  64. #
  65. # Find an item in the inventory. Actor::Item::get() does the same thing, but allows more search criteria.
  66. sub inventoryItem {
  67. my ($name) = @_;
  68. if ($name =~ /^d+$/) {
  69. # A number was provided
  70. my $item = $char->inventory->get($name);
  71. return UNIVERSAL::isa($item, 'Actor::Item') ? $item : undef;
  72. }
  73. # A name was provided; match it
  74. return $char->inventory->getByName($name);
  75. }
  76. ##
  77. # Match::cartItem(name)
  78. # name: either a number in the cart list, or an item name.
  79. # Returns: the hash to the cart item matching $name, or undef.
  80. #
  81. # Find an item in cart.
  82. sub cartItem {
  83. my ($name) = @_;
  84. if ($name =~ /^d+$/) {
  85. # A number was provided
  86. return unless $cart{inventory}[$name] && %{$cart{inventory}[$name]};
  87. return $cart{inventory}[$name];
  88. }
  89. # A name was provided; match it
  90. my $index = findIndexString_lc($cart{inventory}, 'name', $name);
  91. return unless defined($index);
  92. return $cart{inventory}[$index];
  93. }
  94. ##
  95. # Match::storageItem(name)
  96. # name: either a number in the storage list, or an item name.
  97. # Returns: the hash to the storage item matching $name, or undef.
  98. #
  99. # Find an item in storage.
  100. sub storageItem {
  101. my ($name) = lc shift;
  102. if ($name =~ /^d+$/) {
  103. # A number was provided
  104. return unless defined($storageID[$name]); # Invalid number
  105. return $storage{$storageID[$name]};
  106. }
  107. # A name was provided; match it
  108. my $index;
  109. for my $ID (@storageID) {
  110. my $item = $storage{$ID};
  111. return $item if lc($item->{name}) eq $name;
  112. }
  113. return; # Not found
  114. }
  115. 1;