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;
}
}