128 lines
5.6 KiB
Lua
128 lines
5.6 KiB
Lua
|
--[[
|
||
|
Copyright 2011-2016 João Cardoso
|
||
|
Unfit is distributed under the terms of the GNU General Public License (Version 3).
|
||
|
As a special exception, the copyright holders of this library give you permission to embed it
|
||
|
with independent modules to produce an addon, regardless of the license terms of these
|
||
|
independent modules, and to copy and distribute the resulting software under terms of your
|
||
|
choice, provided that you also meet, for each embedded independent module, the terms and
|
||
|
conditions of the license of that module. Permission is not granted to modify this library.
|
||
|
|
||
|
This library is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
GNU General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License
|
||
|
along with the library. If not, see <http://www.gnu.org/licenses/gpl-3.0.txt>.
|
||
|
|
||
|
This file is part of Unfit.
|
||
|
--]]
|
||
|
|
||
|
local Lib = LibStub:NewLibrary('Unfit-1.0', 9)
|
||
|
if not Lib then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
|
||
|
--[[ Data ]]--
|
||
|
|
||
|
do
|
||
|
local _, Class = UnitClass('player')
|
||
|
local Unusable
|
||
|
|
||
|
if Class == 'DEATHKNIGHT' then
|
||
|
Unusable = { -- weapon, armor, dual-wield
|
||
|
{LE_ITEM_WEAPON_BOWS, LE_ITEM_WEAPON_GUNS, LE_ITEM_WEAPON_WARGLAIVE, LE_ITEM_WEAPON_STAFF,LE_ITEM_WEAPON_UNARMED, LE_ITEM_WEAPON_DAGGER, LE_ITEM_WEAPON_THROWN, LE_ITEM_WEAPON_CROSSBOW, LE_ITEM_WEAPON_WAND},
|
||
|
{LE_ITEM_ARMOR_SHIELD}
|
||
|
}
|
||
|
elseif Class == 'DEMONHUNTER' then
|
||
|
Unusable = {
|
||
|
{LE_ITEM_WEAPON_AXE2H, LE_ITEM_WEAPON_BOWS, LE_ITEM_WEAPON_GUNS, LE_ITEM_WEAPON_MACE1H, LE_ITEM_WEAPON_MACE2H, LE_ITEM_WEAPON_POLEARM, LE_ITEM_WEAPON_SWORD2H, LE_ITEM_WEAPON_STAFF, LE_ITEM_WEAPON_THROWN, LE_ITEM_WEAPON_CROSSBOW, LE_ITEM_WEAPON_WAND},
|
||
|
{LE_ITEM_ARMOR_MAIL, LE_ITEM_ARMOR_PLATE, LE_ITEM_ARMOR_SHIELD}
|
||
|
}
|
||
|
elseif Class == 'DRUID' then
|
||
|
Unusable = {
|
||
|
{LE_ITEM_WEAPON_AXE1H, LE_ITEM_WEAPON_AXE2H, LE_ITEM_WEAPON_BOWS, LE_ITEM_WEAPON_GUNS, LE_ITEM_WEAPON_SWORD1H, LE_ITEM_WEAPON_SWORD2H, LE_ITEM_WEAPON_WARGLAIVE, LE_ITEM_WEAPON_THROWN, LE_ITEM_WEAPON_CROSSBOW, LE_ITEM_WEAPON_WAND},
|
||
|
{LE_ITEM_ARMOR_MAIL, LE_ITEM_ARMOR_PLATE, LE_ITEM_ARMOR_SHIELD},
|
||
|
true
|
||
|
}
|
||
|
elseif Class == 'HUNTER' then
|
||
|
Unusable = {
|
||
|
{LE_ITEM_WEAPON_MACE1H, LE_ITEM_WEAPON_MACE2H, LE_ITEM_WEAPON_WARGLAIVE, LE_ITEM_WEAPON_THROWN, LE_ITEM_WEAPON_WAND},
|
||
|
{LE_ITEM_ARMOR_PLATE, LE_ITEM_ARMOR_SHIELD}
|
||
|
}
|
||
|
elseif Class == 'MAGE' then
|
||
|
Unusable = {
|
||
|
{LE_ITEM_WEAPON_AXE1H, LE_ITEM_WEAPON_AXE2H, LE_ITEM_WEAPON_BOWS, LE_ITEM_WEAPON_GUNS, LE_ITEM_WEAPON_MACE1H, LE_ITEM_WEAPON_MACE2H, LE_ITEM_WEAPON_POLEARM, LE_ITEM_WEAPON_SWORD2H, LE_ITEM_WEAPON_WARGLAIVE, LE_ITEM_WEAPON_UNARMED, LE_ITEM_WEAPON_THROWN, LE_ITEM_WEAPON_CROSSBOW},
|
||
|
{LE_ITEM_ARMOR_LEATHER, LE_ITEM_ARMOR_MAIL, LE_ITEM_ARMOR_PLATE, LE_ITEM_ARMOR_SHIELD},
|
||
|
true
|
||
|
}
|
||
|
elseif Class == 'MONK' then
|
||
|
Unusable = {
|
||
|
{LE_ITEM_WEAPON_AXE2H, LE_ITEM_WEAPON_BOWS, LE_ITEM_WEAPON_GUNS, LE_ITEM_WEAPON_MACE2H, LE_ITEM_WEAPON_SWORD2H, LE_ITEM_WEAPON_WARGLAIVE, LE_ITEM_WEAPON_DAGGER, LE_ITEM_WEAPON_THROWN, LE_ITEM_WEAPON_CROSSBOW, LE_ITEM_WEAPON_WAND},
|
||
|
{LE_ITEM_ARMOR_MAIL, LE_ITEM_ARMOR_PLATE, LE_ITEM_ARMOR_SHIELD}
|
||
|
}
|
||
|
elseif Class == 'PALADIN' then
|
||
|
Unusable = {
|
||
|
{LE_ITEM_WEAPON_BOWS, LE_ITEM_WEAPON_GUNS, LE_ITEM_WEAPON_WARGLAIVE, LE_ITEM_WEAPON_STAFF, LE_ITEM_WEAPON_UNARMED, LE_ITEM_WEAPON_DAGGER, LE_ITEM_WEAPON_THROWN, LE_ITEM_WEAPON_CROSSBOW, LE_ITEM_WEAPON_WAND},
|
||
|
{},
|
||
|
true
|
||
|
}
|
||
|
elseif Class == 'PRIEST' then
|
||
|
Unusable = {
|
||
|
{LE_ITEM_WEAPON_AXE1H, LE_ITEM_WEAPON_AXE2H, LE_ITEM_WEAPON_BOWS, LE_ITEM_WEAPON_GUNS, LE_ITEM_WEAPON_MACE2H, LE_ITEM_WEAPON_POLEARM, LE_ITEM_WEAPON_SWORD1H, LE_ITEM_WEAPON_SWORD2H, LE_ITEM_WEAPON_WARGLAIVE, LE_ITEM_WEAPON_UNARMED, LE_ITEM_WEAPON_THROWN, LE_ITEM_WEAPON_CROSSBOW},
|
||
|
{LE_ITEM_ARMOR_LEATHER, LE_ITEM_ARMOR_MAIL, LE_ITEM_ARMOR_PLATE, LE_ITEM_ARMOR_SHIELD},
|
||
|
true
|
||
|
}
|
||
|
elseif Class == 'ROGUE' then
|
||
|
Unusable = {
|
||
|
{LE_ITEM_WEAPON_AXE2H, LE_ITEM_WEAPON_MACE2H, LE_ITEM_WEAPON_POLEARM, LE_ITEM_WEAPON_SWORD2H, LE_ITEM_WEAPON_WARGLAIVE, LE_ITEM_WEAPON_STAFF, LE_ITEM_WEAPON_WAND},
|
||
|
{LE_ITEM_ARMOR_MAIL, LE_ITEM_ARMOR_PLATE, LE_ITEM_ARMOR_SHIELD}
|
||
|
}
|
||
|
elseif Class == 'SHAMAN' then
|
||
|
Unusable = {
|
||
|
{LE_ITEM_WEAPON_BOWS, LE_ITEM_WEAPON_GUNS, LE_ITEM_WEAPON_POLEARM, LE_ITEM_WEAPON_SWORD1H, LE_ITEM_WEAPON_SWORD2H, LE_ITEM_WEAPON_WARGLAIVE, LE_ITEM_WEAPON_THROWN, LE_ITEM_WEAPON_CROSSBOW, LE_ITEM_WEAPON_WAND},
|
||
|
{LE_ITEM_ARMOR_PLATEM}
|
||
|
}
|
||
|
elseif Class == 'WARLOCK' then
|
||
|
Unusable = {
|
||
|
{LE_ITEM_WEAPON_AXE1H, LE_ITEM_WEAPON_AXE2H, LE_ITEM_WEAPON_BOWS, LE_ITEM_WEAPON_GUNS, LE_ITEM_WEAPON_MACE1H, LE_ITEM_WEAPON_MACE2H, LE_ITEM_WEAPON_POLEARM, LE_ITEM_WEAPON_SWORD2H, LE_ITEM_WEAPON_WARGLAIVE, LE_ITEM_WEAPON_UNARMED, LE_ITEM_WEAPON_THROWN, LE_ITEM_WEAPON_CROSSBOW},
|
||
|
{LE_ITEM_ARMOR_LEATHER, LE_ITEM_ARMOR_MAIL, LE_ITEM_ARMOR_PLATE, LE_ITEM_ARMOR_SHIELD},
|
||
|
true
|
||
|
}
|
||
|
elseif Class == 'WARRIOR' then
|
||
|
Unusable = {{LE_ITEM_WEAPON_WARGLAIVE, LE_ITEM_WEAPON_WAND}, {}}
|
||
|
else
|
||
|
Unusable = {{}, {}}
|
||
|
end
|
||
|
|
||
|
|
||
|
Lib.unusable = {}
|
||
|
Lib.cannotDual = Unusable[3]
|
||
|
|
||
|
for i, class in ipairs({LE_ITEM_CLASS_WEAPON, LE_ITEM_CLASS_ARMOR}) do
|
||
|
local list = {}
|
||
|
for _, subclass in ipairs(Unusable[i]) do
|
||
|
list[subclass] = true
|
||
|
end
|
||
|
|
||
|
Lib.unusable[class] = list
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
--[[ API ]]--
|
||
|
|
||
|
function Lib:IsItemUnusable(...)
|
||
|
if ... then
|
||
|
local slot, _,_, class, subclass = select(9, GetItemInfo(...))
|
||
|
return Lib:IsClassUnusable(class, subclass, slot)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function Lib:IsClassUnusable(class, subclass, slot)
|
||
|
if class and subclass and Lib.unusable[class] then
|
||
|
return slot ~= '' and Lib.unusable[class][subclass] or slot == 'INVTYPE_WEAPONOFFHAND' and Lib.cannotDual
|
||
|
end
|
||
|
end
|