diff --git a/data/plugins/skill/fletching/plugin.xml b/data/plugins/skill/fletching/plugin.xml new file mode 100644 index 00000000..8d025a52 --- /dev/null +++ b/data/plugins/skill/fletching/plugin.xml @@ -0,0 +1,16 @@ + + + skill-fletching + 1 + Fletching + Adds the Fletching skill. + + Major + + + + + + util + + \ No newline at end of file diff --git a/data/plugins/skill/runecraft/plugin.xml b/data/plugins/skill/runecraft/plugin.xml index 93face6f..bdd1f063 100644 --- a/data/plugins/skill/runecraft/plugin.xml +++ b/data/plugins/skill/runecraft/plugin.xml @@ -15,5 +15,7 @@ - + + util + \ No newline at end of file diff --git a/data/plugins/util/command.rb b/data/plugins/util/command.rb index dacbf48f..7607c062 100644 --- a/data/plugins/util/command.rb +++ b/data/plugins/util/command.rb @@ -7,6 +7,16 @@ def valid_arg_length(args, length, player, message) return valid end +# Returns the name of the Object, Npc, or Item with the specified id. +def name_of(type, id) + types = [ :object, :item, :npc ] + unless types.include?(type) + raise "Invalid type of #{type} specified, must be one of #{types}" + end + + return Kernel.const_get("#{type.capitalize}Definition").lookup(id).name.to_s +end + # Add a has_keys? method to hash class Hash @@ -19,7 +29,7 @@ end class Player - # Returns whether or not the player's + # Returns whether or not the player's current level is greater than or equal to the specified level. def has_level(skill, level) return skill_set.get_skill(skill).current_level >= level end diff --git a/data/plugins/util/name-lookup.rb b/data/plugins/util/name-lookup.rb index c3e570d3..a0f876f2 100644 --- a/data/plugins/util/name-lookup.rb +++ b/data/plugins/util/name-lookup.rb @@ -19,17 +19,13 @@ end def lookup_entity(type, symbol) symbol = symbol.to_s cached = NAME_CACHE[type + symbol] - return cached unless cached == nil + return cached unless cached.nil? name = symbol.to_s.gsub('_', ' ') - if name.include?(' ') - id = name[name.rindex(' ') + 1, name.length - 1].to_i - end - id = find_entities(type, name, 1).first if id == nil || id == 0 + id = name[name.rindex(' ') + 1, name.length - 1].to_i if name.include?(' ') + id = find_entities(type, name, 1).first if (id .nil? || id.zero?) - if id == nil - raise "The #{type} called #{name} could not be identified." - end + raise "The #{type} called #{name} could not be identified." if id.nil? NAME_CACHE[type + symbol] = id return id @@ -37,15 +33,16 @@ end # Finds entities with the specified type (e.g. npc) and name, returning possible ids as an array. def find_entities(type, name, limit=5) - ids = []; name.downcase! + ids = []; + name.downcase! Kernel.const_get("#{type.capitalize}Definition").definitions.each do |definition| - break if ids.length == limit - ids << definition.id.to_i if definition.name.to_s.downcase == name + break if (ids.length == limit) + ids << definition.id.to_i if (definition.name.to_s.downcase == name) end return ids end private -NAME_CACHE = {} \ No newline at end of file +NAME_CACHE = {} # Primitive, caching all may not be desirable. \ No newline at end of file diff --git a/src/org/apollo/game/model/inv/Inventory.java b/src/org/apollo/game/model/inv/Inventory.java index bb3d1da8..9a455fa2 100644 --- a/src/org/apollo/game/model/inv/Inventory.java +++ b/src/org/apollo/game/model/inv/Inventory.java @@ -415,6 +415,24 @@ public final class Inventory { return remove(id, 1) == 1; } + /** + * Removes one item with each of the specified ids. + *

+ * This method will attempt to remove one of each item, and will continue even if a previous item could not be + * removed. + * + * @param ids The ids of the item to remove. + * @return {@code true} if one of each item could be removed, otherwise {@code false}. + */ + public boolean remove(int... ids) { + boolean successful = true; + for (int id : ids) { + successful &= remove(id); + } + + return successful; + } + /** * Removes {@code amount} of the item with the specified {@code id}. If the item is stackable, it will remove it * from the stack. If not, it'll remove {@code amount} items. @@ -505,7 +523,7 @@ public final class Inventory { int removed = Math.min(amount, itemAmount); int remainder = itemAmount - removed; - set(slot, remainder > 0 ? new Item(item.getId(), remainder) : null); + set(slot, (remainder > 0) ? new Item(item.getId(), remainder) : null); return removed; } }