local _M = loadPrevious(...) do local weapon_classes = { onehanded = {waraxe = true, dagger = true, mace = true, mindstar = true, longsword = true, whip = true}, twohanded = {battleaxe = true, greatmaul = true, greatsword = true, trident = true, staff = true}, melee = {waraxe = true, dagger = true, mace = true, mindstar = true, longsword = true, whip = true, battleaxe = true, greatmaul = true, greatsword = true, trident = true, staff = true}, ranged = {bow = true, sling = true}, warrior = {waraxe = true, battleaxe = true, mace = true, greatmaul = true, longsword = true, greatsword = true}, exotic = {trident = true, whip = true}, axe = {waraxe = true, battleaxe = true}, blunt = {mace = true, greatmaul = true}, sword = {longsword = true, greatsword = true}, dagger = {dagger = true}, shield = {shield = false}, -- a shield is a weapon sometimes, but not here any = setmetatable({}, {__index = function (t, idx) return type(idx) == "string" and idx ~= "shield" end}) } weapon_classes.missile = weapon_classes.ranged -- synonyms weapon_classes.projectile = weapon_classes.ranged weapon_classes.knife = weapon_classes.dagger local retmeta = { __len = function (t) local i = 0 for _ in pairs(t) do i = i + 1 end return i end } function _M:hasWeapon(weapon_type) local hands = {self.INVEN_MAINHAND, self.INVEN_OFFHAND, self.INVEN_PSIONIC_FOCUS} local ret, match if weapon_type then ret = setmetatable({}, retmeta) match = weapon_classes[weapon_type] or {[weapon_type] = true} end for i = 1, #hands do local hand = hands[i] local inven = self:getInven(hand) if inven and inven[1] then if not weapon_type then return true elseif match[inven[1].subtype] then ret[hand] = {inven = inven, weapon = inven[1]} end end end return ret or false end end return _M