Module:SkillUnlocks: Difference between revisions
From Melvor Idle
No edit summary |
No edit summary |
||
Line 28: | Line 28: | ||
['Ranged Weapon'] = 'Wield', | ['Ranged Weapon'] = 'Wield', | ||
['Ammo'] = 'Use', | ['Ammo'] = 'Use', | ||
['Equipment'] = 'Equip', | |||
['Armour'] = 'Equip', | ['Armour'] = 'Equip', | ||
['Trimmed Armour'] = 'Equip', | |||
['Magic Armour'] = 'Equip', | ['Magic Armour'] = 'Equip', | ||
['Ranged Armour'] = 'Equip', | ['Ranged Armour'] = 'Equip', | ||
Line 40: | Line 42: | ||
local SUBTYPE_OVERRIDES = { | local SUBTYPE_OVERRIDES = { | ||
['Agile Wings Rapier'] = 'Weapon', | ['Agile Wings Rapier'] = 'Weapon', | ||
['Bundled Protection Body'] = 'Armour', | |||
['Ethereal Greataxe'] = 'Weapon', | ['Ethereal Greataxe'] = 'Weapon', | ||
['Ethereal Longbow'] = 'Ranged Weapon', | ['Ethereal Longbow'] = 'Ranged Weapon', | ||
Line 47: | Line 50: | ||
['Lightning Coil 2H Staff'] = 'Magic Staff', | ['Lightning Coil 2H Staff'] = 'Magic Staff', | ||
['Lightning Strike 1H Sword'] = 'Weapon', | ['Lightning Strike 1H Sword'] = 'Weapon', | ||
['Perfect Sight Legs'] = 'Armour', | |||
['Royal Toxins Spear'] = 'Weapon', | ['Royal Toxins Spear'] = 'Weapon', | ||
['Slicing Maelstrom Wand'] = 'Magic Wand', | ['Slicing Maelstrom Wand'] = 'Magic Wand', | ||
['Spectral Ice Sword'] = 'Weapon', | ['Spectral Ice Sword'] = 'Weapon', | ||
['Torrential Blast Crossbow'] = 'Ranged Weapon' | ['Torrential Blast Crossbow'] = 'Ranged Weapon' | ||
} | |||
local GEAR_SETS = { | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Adamant Armour', | |||
['level'] = 30, | |||
['entities'] = {'Adamant Boots', '(S) Adamant Boots', '(G) Adamant Boots', 'Adamant Gloves', 'Adamant Helmet', '(S) Adamant Helmet', '(G) Adamant Helmet', 'Adamant Platebody', '(S) Adamant Platebody', '(G) Adamant Platebody', 'Adamant Platelegs', '(S) Adamant Platelegs', '(G) Adamant Platelegs', 'Adamant Shield', '(S) Adamant Shield', '(G) Adamant Shield'} | |||
}, | |||
{ | |||
['verb'] = 'Wield', | |||
['name'] = 'Adamant Weapons', | |||
['level'] = 30, | |||
['entities'] = {'Adamant 2H Sword', 'Adamant Battleaxe', 'Adamant Dagger', 'Adamant Scimitar', 'Adamant Sword'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Aeris God Armour', | |||
['level'] = 85, | |||
['entities'] = {'Aeris God Boots', 'Aeris God Gloves', 'Aeris God Helmet', 'Aeris God Platebody', 'Aeris God Platelegs'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Air Acolyte Wizard Gear', | |||
['level'] = 1, | |||
['entities'] = {'Air Acolyte Wizard Boots', 'Air Acolyte Wizard Bottoms', 'Air Acolyte Wizard Hat', 'Air Acolyte Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Air Adept Wizard Gear', | |||
['level'] = 35, | |||
['entities'] = {'Air Adept Wizard Boots', 'Air Adept Wizard Bottoms', 'Air Adept Wizard Hat', 'Air Adept Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Air Expert Wizard Gear', | |||
['level'] = 65, | |||
['entities'] = {'Air Expert Wizard Boots', 'Air Expert Wizard Bottoms', 'Air Expert Wizard Hat', 'Air Expert Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Ancient Armour', | |||
['level'] = 70, | |||
['entities'] = {'Ancient Helmet', '(S) Ancient Helmet', '(G) Ancient Helmet', 'Ancient Platebody', '(S) Ancient Platebody', '(G) Ancient Platebody', 'Ancient Platelegs', '(S) Ancient Platelegs', '(G) Ancient Platelegs', 'Ancient Shield', '(S) Ancient Shield', '(G) Ancient Shield'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Ancient Dragonhide Armour', | |||
['level'] = 80, | |||
['entities'] = {'Ancient D-hide Body', 'Ancient D-hide Chaps', 'Ancient D-hide Shield', 'Ancient D-hide Vambraces', '(U) Ancient D-hide Body', '(U) Ancient D-hide Chaps', '(U) Ancient D-hide Shield', '(U) Ancient D-hide Vambraces'} | |||
}, | |||
{ | |||
['verb'] = 'Wield', | |||
['name'] = 'Ancient Weapons', | |||
['level'] = 70, | |||
['entities'] = {'Ancient 2H Sword', 'Ancient Claw', 'Ancient Sword'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Ancient Wizard Gear', | |||
['level'] = 70, | |||
['entities'] = {'Ancient Wizard Boots', 'Ancient Wizard Bottoms', 'Ancient Wizard Hat', 'Ancient Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Augite Armour', | |||
['level'] = 105, | |||
['entities'] = {'Augite Boots', '(I) Augite Boots', '(P) Augite Boots', 'Augite Gloves', 'Augite Helmet', '(I) Augite Helmet', '(P) Augite Helmet', 'Augite Platebody', '(I) Augite Platebody', '(P) Augite Platebody', 'Augite Platelegs', '(I) Augite Platelegs', '(P) Augite Platelegs', 'Augite Shield', '(I) Augite Shield', '(P) Augite Shield'} | |||
}, | |||
{ | |||
['verb'] = 'Wield', | |||
['name'] = 'Augite Weapons', | |||
['level'] = 105, | |||
['entities'] = {'Augite 2H Sword', 'Augite Battleaxe', 'Augite Dagger', 'Augite Scimitar', 'Augite Sword'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Black Armour', | |||
['level'] = 10, | |||
['entities'] = {'Black Boots', '(S) Black Boots', '(G) Black Boots', 'Black Helmet', '(S) Black Helmet', '(G) Black Helmet', 'Black Platebody', '(S) Black Platebody', '(G) Black Platebody', 'Black Platelegs', '(S) Black Platelegs', '(G) Black Platelegs', 'Black Shield', '(S) Black Shield', '(G) Black Shield'} | |||
}, | |||
{ | |||
['verb'] = 'Wield', | |||
['name'] = 'Black Weapons', | |||
['level'] = 10, | |||
['entities'] = {'Black 2H Sword', 'Black Battleaxe', 'Black Dagger', 'Black Scimitar', 'Black Sword'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Black Dragonhide Armour', | |||
['level'] = 70, | |||
['entities'] = {'Black D-hide Body', 'Black D-hide Chaps', 'Black D-hide Shield', 'Black D-hide Vambraces', '(U) Black D-hide Body', '(U) Black D-hide Chaps', '(U) Black D-hide Shield', '(U) Black D-hide Vambraces'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Basic Black Wizard Gear', | |||
['level'] = 50, | |||
['entities'] = {'Black Wizard Boots', 'Black Wizard Bottoms', 'Black Wizard Hat', 'Black Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Blue Dragonhide Armour', | |||
['level'] = 50, | |||
['entities'] = {'Blue D-hide Body', 'Blue D-hide Chaps', 'Blue D-hide Shield', 'Blue D-hide Vambraces', '(U) Blue D-hide Body', '(U) Blue D-hide Chaps', '(U) Blue D-hide Shield', '(U) Blue D-hide Vambraces'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Basic Blue Wizard Gear', | |||
['level'] = 10, | |||
['entities'] = {'Blue Wizard Boots', 'Blue Wizard Bottoms', 'Blue Wizard Hat', 'Blue Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Bronze Armour', | |||
['level'] = 1, | |||
['entities'] = {'Bronze Boots', '(S) Bronze Boots', '(G) Bronze Boots', 'Bronze Gloves', 'Bronze Helmet', '(S) Bronze Helmet', '(G) Bronze Helmet', 'Bronze Platebody', '(S) Bronze Platebody', '(G) Bronze Platebody', 'Bronze Platelegs', '(S) Bronze Platelegs', '(G) Bronze Platelegs', 'Bronze Shield', '(S) Bronze Shield', '(G) Bronze Shield'} | |||
}, | |||
{ | |||
['verb'] = 'Wield', | |||
['name'] = 'Bronze Weapons', | |||
['level'] = 1, | |||
['entities'] = {'Bronze 2H Sword', 'Bronze Battleaxe', 'Bronze Dagger', 'Bronze Scimitar', 'Bronze Sword'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Carrion Armour', | |||
['level'] = 110, | |||
['entities'] = {'Carrion Body', 'Carrion Chaps', 'Carrion Shield', 'Carrion Vambraces', '(U) Carrion Body', '(U) Carrion Chaps', '(U) Carrion Shield', '(U) Carrion Vambraces'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Corundum Armour', | |||
['level'] = 100, | |||
['entities'] = {'Corundum Boots', '(I) Corundum Boots', '(P) Corundum Boots', 'Corundum Gloves', 'Corundum Helmet', '(I) Corundum Helmet', '(P) Corundum Helmet', 'Corundum Platebody', '(I) Corundum Platebody', '(P) Corundum Platebody', 'Corundum Platelegs', '(I) Corundum Platelegs', '(P) Corundum Platelegs', 'Corundum Shield', '(I) Corundum Shield', '(P) Corundum Shield'} | |||
}, | |||
{ | |||
['verb'] = 'Wield', | |||
['name'] = 'Corundum Weapons', | |||
['level'] = 100, | |||
['entities'] = {'Corundum 2H Sword', 'Corundum Battleaxe', 'Corundum Dagger', 'Corundum Scimitar', 'Corundum Sword'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Divine Armour', | |||
['level'] = 110, | |||
['entities'] = {'Divine Boots', '(I) Divine Boots', '(P) Divine Boots', 'Divine Gloves', 'Divine Helmet', '(I) Divine Helmet', '(P) Divine Helmet', 'Divine Platebody', '(I) Divine Platebody', '(P) Divine Platebody', 'Divine Platelegs', '(I) Divine Platelegs', '(P) Divine Platelegs', 'Divine Shield', '(I) Divine Shield', '(P) Divine Shield'} | |||
}, | |||
{ | |||
['verb'] = 'Wield', | |||
['name'] = 'Divine Weapons', | |||
['level'] = 110, | |||
['entities'] = {'Divine 2H Sword', 'Divine Battleaxe', 'Divine Dagger', 'Divine Scimitar', 'Divine Sword'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Dragon Armour', | |||
['level'] = 60, | |||
['entities'] = {'Dragon Boots', '(S) Dragon Boots', '(G) Dragon Boots', 'Dragon Gloves', 'Dragon Helmet', '(S) Dragon Helmet', '(G) Dragon Helmet', 'Dragon Platebody', '(S) Dragon Platebody', '(G) Dragon Platebody', 'Dragon Platelegs', '(S) Dragon Platelegs', '(G) Dragon Platelegs', 'Dragon Shield', '(S) Dragon Shield', '(G) Dragon Shield'} | |||
}, | |||
{ | |||
['verb'] = 'Wield', | |||
['name'] = 'Dragon Weapons', | |||
['level'] = 60, | |||
['entities'] = {'Dragon 2H Sword', 'Dragon Battleaxe', 'Dragon Dagger', 'Dragon Scimitar', 'Dragon Sword'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Earth Acolyte Wizard Gear', | |||
['level'] = 9, | |||
['entities'] = {'Earth Acolyte Wizard Boots', 'Earth Acolyte Wizard Bottoms', 'Earth Acolyte Wizard Hat', 'Earth Acolyte Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Earth Adept Wizard Gear', | |||
['level'] = 43, | |||
['entities'] = {'Earth Adept Wizard Boots', 'Earth Adept Wizard Bottoms', 'Earth Adept Wizard Hat', 'Earth Adept Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Earth Expert Wizard Gear', | |||
['level'] = 73, | |||
['entities'] = {'Earth Expert Wizard Boots', 'Earth Expert Wizard Bottoms', 'Earth Expert Wizard Hat', 'Earth Expert Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Elderwood Armour', | |||
['level'] = 100, | |||
['entities'] = {'Elderwood Body', 'Elderwood Chaps', 'Elderwood Shield', 'Elderwood Vambraces', '(U) Elderwood Body', '(U) Elderwood Chaps', '(U) Elderwood Shield', '(U) Elderwood Vambraces'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Fire Acolyte Wizard Gear', | |||
['level'] = 14, | |||
['entities'] = {'Fire Acolyte Wizard Boots', 'Fire Acolyte Wizard Bottoms', 'Fire Acolyte Wizard Hat', 'Fire Acolyte Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Fire Adept Wizard Gear', | |||
['level'] = 48, | |||
['entities'] = {'Fire Adept Wizard Boots', 'Fire Adept Wizard Bottoms', 'Fire Adept Wizard Hat', 'Fire Adept Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Fire Expert Wizard Gear', | |||
['level'] = 78, | |||
['entities'] = {'Fire Expert Wizard Boots', 'Fire Expert Wizard Bottoms', 'Fire Expert Wizard Hat', 'Fire Expert Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Glacia God Gear', | |||
['level'] = 85, | |||
['entities'] = {'Glacia God Boots', 'Glacia God Gloves', 'Glacia God Helmet', 'Glacia God Platebody', 'Glacia God Platelegs'} | |||
}, | |||
{ | |||
['verb'] = 'Wield', | |||
['name'] = 'Godswords', | |||
['level'] = 85, | |||
['entities'] = {'Aeris Godsword', 'Glacia Godsword', 'Ragnar Godsword', 'Terran Godsword'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Green Dragonhide Armour', | |||
['level'] = 40, | |||
['entities'] = {'Green D-hide Body', 'Green D-hide Chaps', 'Green D-hide Shield', 'Green D-hide Vambraces', '(U) Green D-hide Body', '(U) Green D-hide Chaps', '(U) Green D-hide Shield', '(U) Green D-hide Vambraces'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Basic Green Wizard Gear', | |||
['level'] = 1, | |||
['entities'] = {'Green Wizard Boots', 'Green Wizard Bottoms', 'Green Wizard Hat', 'Green Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Hard Leather Armour', | |||
['level'] = 10, | |||
['entities'] = {'Hard Leather Body', 'Hard Leather Boots', 'Hard Leather Chaps', 'Hard Leather Cowl', 'Hard Leather Gloves', 'Hard Leather Vambraces'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Ice Armor', | |||
['level'] = 40, | |||
['entities'] = {'Ice Boots', 'Ice Helmet', 'Ice Platebody', 'Ice Platelegs', 'Ice Shield'} | |||
}, | |||
{ | |||
['verb'] = 'Wield', | |||
['name'] = 'Ice Weapons', | |||
['level'] = 40, | |||
['entities'] = {'Ice 2H Sword', 'Ice Battleaxe', 'Ice Dagger', 'Ice Sword'} | |||
}, | |||
{ | |||
['verb'] = 'Wield', | |||
['name'] = 'Imbued Magic Wands', | |||
['level'] = 70, | |||
['entities'] = {'Air Imbued Wand', 'Earth Imbued Wand', 'Fire Imbued Wand', 'Water Imbued Wand'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Infernal Legendary Wizard Gear', | |||
['level'] = 105, | |||
['entities'] = {'Infernal Legendary Wizard Boots', 'Infernal Legendary Wizard Bottoms', 'Infernal Legendary Wizard Hat', 'Infernal Legendary Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Infernal Master Wizard Gear', | |||
['level'] = 100, | |||
['entities'] = {'Infernal Master Wizard Boots', 'Infernal Master Wizard Bottoms', 'Infernal Master Wizard Hat', 'Infernal Master Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Infernal Mythical Wizard Gear', | |||
['level'] = 110, | |||
['entities'] = {'Infernal Mythical Wizard Boots', 'Infernal Mythical Wizard Bottoms', 'Infernal Mythical Wizard Hat', 'Infernal Mythical Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Iron Armour', | |||
['level'] = 1, | |||
['entities'] = {'Iron Boots', '(S) Iron Boots', '(G) Iron Boots', 'Iron Gloves', 'Iron Helmet', '(S) Iron Helmet', '(G) Iron Helmet', 'Iron Platebody', '(S) Iron Platebody', '(G) Iron Platebody', 'Iron Platelegs', '(S) Iron Platelegs', '(G) Iron Platelegs', 'Iron Shield', '(S) Iron Shield', '(G) Iron Shield'} | |||
}, | |||
{ | |||
['verb'] = 'Wield', | |||
['name'] = 'Iron Weapons', | |||
['level'] = 1, | |||
['entities'] = {'Iron 2H Sword', 'Iron Battleaxe', 'Iron Dagger', 'Iron Scimitar', 'Iron Sword'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Leather Armour', | |||
['level'] = 1, | |||
['entities'] = {'Leather Body', 'Leather Boots', 'Leather Chaps', 'Leather Cowl', 'Leather Gloves', 'Leather Vambraces'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Lightning Legendary Wizard Gear', | |||
['level'] = 105, | |||
['entities'] = {'Lightning Legendary Wizard Boots', 'Lightning Legendary Wizard Bottoms', 'Lightning Legendary Wizard Hat', 'Lightning Legendary Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Lightning Master Wizard Gear', | |||
['level'] = 100, | |||
['entities'] = {'Lightning Master Wizard Boots', 'Lightning Master Wizard Bottoms', 'Lightning Master Wizard Hat', 'Lightning Master Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Lightning Mythical Wizard Gear', | |||
['level'] = 110, | |||
['entities'] = {'Lightning Mythical Wizard Boots', 'Lightning Mythical Wizard Bottoms', 'Lightning Mythical Wizard Hat', 'Lightning Mythical Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Meteorite Armour', | |||
['level'] = 108, | |||
['entities'] = {'Meteorite Helmet', 'Meteorite Platebody', 'Meteorite Platelegs'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Miolite Armour', | |||
['level'] = 40, | |||
['entities'] = {'Miolite Boots', 'Miolite Helmet', 'Miolite Platebody', 'Miolite Platelegs', 'Miolite Shield'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Mithril Armour', | |||
['level'] = 20, | |||
['entities'] = {'Mithril Boots', '(S) Mithril Boots', '(G) Mithril Boots', 'Mithril Gloves', 'Mithril Helmet', '(S) Mithril Helmet', '(G) Mithril Helmet', 'Mithril Platebody', '(S) Mithril Platebody', '(G) Mithril Platebody', 'Mithril Platelegs', '(S) Mithril Platelegs', '(G) Mithril Platelegs', 'Mithril Shield', '(S) Mithril Shield', '(G) Mithril Shield'} | |||
}, | |||
{ | |||
['verb'] = 'Wield', | |||
['name'] = 'Mithril Weapons', | |||
['level'] = 20, | |||
['entities'] = {'Mithril 2H Sword', 'Mithril Battleaxe', 'Mithril Dagger', 'Mithril Scimitar', 'Mithril Sword'} | |||
}, | |||
{ | |||
['verb'] = 'Wield', | |||
['name'] = 'Mystic Magic Staves', | |||
['level'] = 40, | |||
['entities'] = {'Mystic Air Staff', 'Mystic Earth Staff', 'Mystic Fire Staff', 'Mystic Water Staff'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Poison Legendary Wizard Gear', | |||
['level'] = 105, | |||
['entities'] = {'Poison Legendary Wizard Boots', 'Poison Legendary Wizard Bottoms', 'Poison Legendary Wizard Hat', 'Poison Legendary Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Poison Master Wizard Gear', | |||
['level'] = 100, | |||
['entities'] = {'Poison Master Wizard Boots', 'Poison Master Wizard Bottoms', 'Poison Master Wizard Hat', 'Poison Master Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Poison Mythical Wizard Gear', | |||
['level'] = 110, | |||
['entities'] = {'Poison Mythical Wizard Boots', 'Poison Mythical Wizard Bottoms', 'Poison Mythical Wizard Hat', 'Poison Mythical Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Ragnar God Armour', | |||
['level'] = 85, | |||
['entities'] = {'Ragnar God Boots', 'Ragnar God Gloves', 'Ragnar God Helmet', 'Ragnar God Platebody', 'Ragnar God Platelegs'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Red Dragonhide Armour', | |||
['level'] = 60, | |||
['entities'] = {'Red D-hide Body', 'Red D-hide Chaps', 'Red D-hide Shield', 'Red D-hide Vambraces', '(U) Red D-hide Body', '(U) Red D-hide Chaps', '(U) Red D-hide Shield', '(U) Red D-hide Vambraces'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Basic Red Wizard Gear', | |||
['level'] = 30, | |||
['entities'] = {'Red Wizard Boots', 'Red Wizard Bottoms', 'Red Wizard Hat', 'Red Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Revenant Armour', | |||
['level'] = 105, | |||
['entities'] = {'Revenant Body', 'Revenant Chaps', 'Revenant Shield', 'Revenant Vambraces', '(U) Revenant Body', '(U) Revenant Chaps', '(U) Revenant Shield', '(U) Revenant Vambraces'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Rune Armour', | |||
['level'] = 40, | |||
['entities'] = {'Rune Boots', '(S) Rune Boots', '(G) Rune Boots', 'Rune Gloves', 'Rune Helmet', '(S) Rune Helmet', '(G) Rune Helmet', 'Rune Platebody', '(S) Rune Platebody', '(G) Rune Platebody', 'Rune Platelegs', '(S) Rune Platelegs', '(G) Rune Platelegs', 'Rune Shield', '(S) Rune Shield', '(G) Rune Shield'} | |||
}, | |||
{ | |||
['verb'] = 'Wield', | |||
['name'] = 'Rune Weapons', | |||
['level'] = 40, | |||
['entities'] = {'Rune 2H Sword', 'Rune Battleaxe', 'Rune Dagger', 'Rune Scimitar', 'Rune Sword'} | |||
}, | |||
{ | |||
['verb'] = 'Wield', | |||
['name'] = 'Basic Magic Staves', | |||
['level'] = 1, | |||
['entities'] = {'Staff of Air', 'Staff of Earth', 'Staff of Fire', 'Staff of Water'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Steel Armour', | |||
['level'] = 5, | |||
['entities'] = {'Steel Boots', '(S) Steel Boots', '(G) Steel Boots', 'Steel Gloves', 'Steel Helmet', '(S) Steel Helmet', '(G) Steel Helmet', 'Steel Platebody', '(S) Steel Platebody', '(G) Steel Platebody', 'Steel Platelegs', '(S) Steel Platelegs', '(G) Steel Platelegs', 'Steel Shield', '(S) Steel Shield', '(G) Steel Shield'} | |||
}, | |||
{ | |||
['verb'] = 'Wield', | |||
['name'] = 'Steel Weapons', | |||
['level'] = 5, | |||
['entities'] = {'Steel 2H Sword', 'Steel Battleaxe', 'Steel Dagger', 'Steel Scimitar', 'Steel Sword'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Terran God Armour', | |||
['level'] = 85, | |||
['entities'] = {'Terran God Boots', 'Terran God Gloves', 'Terran God Helmet', 'Terran God Platebody', 'Terran God Platelegs'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Vorloran Devastator Armour', | |||
['level'] = 120, | |||
['entities'] = {'Vorloran Devastator Boots', 'Vorloran Devastator Gauntlets', 'Vorloran Devastator Helmet', 'Vorloran Devastator Platebody', 'Vorloran Devastator Platelegs'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Vorloran Protector Armour', | |||
['level'] = 120, | |||
['entities'] = {'Vorloran Protector Boots', 'Vorloran Protector Gauntlets', 'Vorloran Protector Helmet', 'Vorloran Protector Platebody', 'Vorloran Protector Platelegs'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Water Acolyte Wizard Gear', | |||
['level'] = 5, | |||
['entities'] = {'Water Acolyte Wizard Boots', 'Water Acolyte Wizard Bottoms', 'Water Acolyte Wizard Hat', 'Water Acolyte Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Water Adept Wizard Gear', | |||
['level'] = 39, | |||
['entities'] = {'Water Adept Wizard Boots', 'Water Adept Wizard Bottoms', 'Water Adept Wizard Hat', 'Water Adept Wizard Robes'} | |||
}, | |||
{ | |||
['verb'] = 'Wear', | |||
['name'] = 'Water Expert Wizard Gear', | |||
['level'] = 69, | |||
['entities'] = {'Water Expert Wizard Boots', 'Water Expert Wizard Bottoms', 'Water Expert Wizard Hat', 'Water Expert Wizard Robes'} | |||
} | |||
} | } | ||
Line 113: | Line 563: | ||
return entityList | return entityList | ||
end | |||
function p._prepareSingleEntity(entity) | |||
-- What are you doing with the thing you unlock? ("verbs") | |||
local verb = '' | |||
if VERBS_PER_SUBTYPE[entity.subType] then | |||
verb = VERBS_PER_SUBTYPE[entity.subType] .. ' ' | |||
end | |||
-- Icon overrides | |||
local iconType = entity.entityType | |||
if entity.entityType == 'slayerArea' then | |||
iconType = 'combatArea' | |||
end | |||
return verb .. Icons.Icon({entity.entityName, type=iconType}) | |||
end | |||
function p._prepareGearSet(gearSet) | |||
local icons = '' | |||
for i, entity in ipairs(gearSet.entities) do | |||
-- Skip trimmed armor, which always starts with an open parnthesis | |||
if string.sub(entity, 1, 1) ~= '(' then | |||
icons = icons .. Icons.Icon({entity, type='item', notext=true}) | |||
end | |||
end | |||
return gearSet.verb .. ' ' .. icons .. ' ' .. gearSet.name | |||
end | end | ||
Line 158: | Line 636: | ||
-- Time to iterate! | -- Time to iterate! | ||
local currentLevel = 0 | local currentLevel = 0 | ||
local processedSets = {} | |||
for i, entity in ipairs(entityList) do | for i, entity in ipairs(entityList) do | ||
-- Skip this one if it's in a gear set we've already listed | |||
local entityGearSet = nil | |||
-- | for i, gearSet in ipairs(GEAR_SETS) do | ||
if Shared.contains(gearSet.entities, entity.entityName) then | |||
entityGearSet = gearSet | |||
break | |||
end | |||
end | end | ||
if entityGearSet == nil or Shared.contains(processedSets, entityGearSet.name) == false then | |||
local foundLevel = entity.skillLevel | |||
-- Start a new row if the current entity's level is higher than the | |||
-- current row | |||
if foundLevel ~= currentLevel then | |||
currentLevel = foundLevel | |||
table.insert(resultPart, '\r\n|-') | |||
table.insert(resultPart, '\r\n|' .. foundLevel) | |||
table.insert(resultPart, '\r\n|') | |||
else | |||
table.insert(resultPart, '<br/>') | |||
end | |||
-- Figure out what we need to list - single item or set? | |||
local toInsert = '' | |||
if entityGearSet ~= nil then | |||
toInsert = p._prepareGearSet(entityGearSet) | |||
table.insert(processedSets, entityGearSet.name) | |||
else | |||
toInsert = p._prepareSingleEntity(entity) | |||
end | |||
-- Append entity to the column | |||
table.insert(resultPart, toInsert) | |||
end | end | ||
end | end | ||
Line 196: | Line 683: | ||
local skillName = frame.args ~= nil and frame.args[1] | local skillName = frame.args ~= nil and frame.args[1] | ||
return p._getSkillUnlockTable(skillName) | return p._getSkillUnlockTable(skillName) | ||
end | |||
function p.test() | |||
local ret = {} | |||
for i, gearSet in ipairs(GEAR_SETS) do | |||
mw.logObject(gearSet) | |||
break | |||
--[[ | |||
if Shared.contains(gearSet.entities, 'Bronze Boots') then | |||
ret = gearSet | |||
break | |||
end | |||
--]] | |||
end | |||
return ret | |||
end | end | ||
return p | return p |
Revision as of 06:47, 24 April 2023
Documentation for this module may be created at Module:SkillUnlocks/doc
local p = {}
--This module polls various game data sources to produce a full list of skill
--level unlocks for each skill. The game has a hard-coded set of "milestones"
--for each skill that does the same thing, but it is not exhaustive and not
--permanently visible for most combat skills.
local Shared = require('Module:Shared')
local Constants = require('Module:Constants')
local Icons = require('Module:Icons')
local Items = require('Module:Items')
local CombatAreas = require('Module:CombatAreas')
local CHECK_ITEMS = {'Attack', 'Strength', 'Defence', 'Ranged', 'Magic',
'Slayer'}
local CHECK_AREAS = {'Slayer'}
local TYPE_SORT_ORDER = {
['item'] = 1,
['combatArea'] = 2,
['slayerArea'] = 3,
['dungeon'] = 4
}
local VERBS_PER_SUBTYPE = {
['Weapon'] = 'Wield',
['Magic Wand'] = 'Wield',
['Magic Staff'] = 'Wield',
['Magic Book'] = 'Wield',
['Ranged Weapon'] = 'Wield',
['Ammo'] = 'Use',
['Equipment'] = 'Equip',
['Armour'] = 'Equip',
['Trimmed Armour'] = 'Equip',
['Magic Armour'] = 'Equip',
['Ranged Armour'] = 'Equip',
['Slayer Armour'] = 'Equip',
['Ring'] = 'Equip',
['Amulet'] = 'Equip',
['combatArea'] = 'Access',
['slayerArea'] = 'Access',
['dungeon'] = 'Access'
}
local SUBTYPE_OVERRIDES = {
['Agile Wings Rapier'] = 'Weapon',
['Bundled Protection Body'] = 'Armour',
['Ethereal Greataxe'] = 'Weapon',
['Ethereal Longbow'] = 'Ranged Weapon',
['Ethereal Staff'] = 'Magic Staff',
['Feather Storm Crossbow'] = 'Ranged Weapon',
['FrostSpark 1H Sword'] = 'Weapon',
['Lightning Coil 2H Staff'] = 'Magic Staff',
['Lightning Strike 1H Sword'] = 'Weapon',
['Perfect Sight Legs'] = 'Armour',
['Royal Toxins Spear'] = 'Weapon',
['Slicing Maelstrom Wand'] = 'Magic Wand',
['Spectral Ice Sword'] = 'Weapon',
['Torrential Blast Crossbow'] = 'Ranged Weapon'
}
local GEAR_SETS = {
{
['verb'] = 'Wear',
['name'] = 'Adamant Armour',
['level'] = 30,
['entities'] = {'Adamant Boots', '(S) Adamant Boots', '(G) Adamant Boots', 'Adamant Gloves', 'Adamant Helmet', '(S) Adamant Helmet', '(G) Adamant Helmet', 'Adamant Platebody', '(S) Adamant Platebody', '(G) Adamant Platebody', 'Adamant Platelegs', '(S) Adamant Platelegs', '(G) Adamant Platelegs', 'Adamant Shield', '(S) Adamant Shield', '(G) Adamant Shield'}
},
{
['verb'] = 'Wield',
['name'] = 'Adamant Weapons',
['level'] = 30,
['entities'] = {'Adamant 2H Sword', 'Adamant Battleaxe', 'Adamant Dagger', 'Adamant Scimitar', 'Adamant Sword'}
},
{
['verb'] = 'Wear',
['name'] = 'Aeris God Armour',
['level'] = 85,
['entities'] = {'Aeris God Boots', 'Aeris God Gloves', 'Aeris God Helmet', 'Aeris God Platebody', 'Aeris God Platelegs'}
},
{
['verb'] = 'Wear',
['name'] = 'Air Acolyte Wizard Gear',
['level'] = 1,
['entities'] = {'Air Acolyte Wizard Boots', 'Air Acolyte Wizard Bottoms', 'Air Acolyte Wizard Hat', 'Air Acolyte Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Air Adept Wizard Gear',
['level'] = 35,
['entities'] = {'Air Adept Wizard Boots', 'Air Adept Wizard Bottoms', 'Air Adept Wizard Hat', 'Air Adept Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Air Expert Wizard Gear',
['level'] = 65,
['entities'] = {'Air Expert Wizard Boots', 'Air Expert Wizard Bottoms', 'Air Expert Wizard Hat', 'Air Expert Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Ancient Armour',
['level'] = 70,
['entities'] = {'Ancient Helmet', '(S) Ancient Helmet', '(G) Ancient Helmet', 'Ancient Platebody', '(S) Ancient Platebody', '(G) Ancient Platebody', 'Ancient Platelegs', '(S) Ancient Platelegs', '(G) Ancient Platelegs', 'Ancient Shield', '(S) Ancient Shield', '(G) Ancient Shield'}
},
{
['verb'] = 'Wear',
['name'] = 'Ancient Dragonhide Armour',
['level'] = 80,
['entities'] = {'Ancient D-hide Body', 'Ancient D-hide Chaps', 'Ancient D-hide Shield', 'Ancient D-hide Vambraces', '(U) Ancient D-hide Body', '(U) Ancient D-hide Chaps', '(U) Ancient D-hide Shield', '(U) Ancient D-hide Vambraces'}
},
{
['verb'] = 'Wield',
['name'] = 'Ancient Weapons',
['level'] = 70,
['entities'] = {'Ancient 2H Sword', 'Ancient Claw', 'Ancient Sword'}
},
{
['verb'] = 'Wear',
['name'] = 'Ancient Wizard Gear',
['level'] = 70,
['entities'] = {'Ancient Wizard Boots', 'Ancient Wizard Bottoms', 'Ancient Wizard Hat', 'Ancient Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Augite Armour',
['level'] = 105,
['entities'] = {'Augite Boots', '(I) Augite Boots', '(P) Augite Boots', 'Augite Gloves', 'Augite Helmet', '(I) Augite Helmet', '(P) Augite Helmet', 'Augite Platebody', '(I) Augite Platebody', '(P) Augite Platebody', 'Augite Platelegs', '(I) Augite Platelegs', '(P) Augite Platelegs', 'Augite Shield', '(I) Augite Shield', '(P) Augite Shield'}
},
{
['verb'] = 'Wield',
['name'] = 'Augite Weapons',
['level'] = 105,
['entities'] = {'Augite 2H Sword', 'Augite Battleaxe', 'Augite Dagger', 'Augite Scimitar', 'Augite Sword'}
},
{
['verb'] = 'Wear',
['name'] = 'Black Armour',
['level'] = 10,
['entities'] = {'Black Boots', '(S) Black Boots', '(G) Black Boots', 'Black Helmet', '(S) Black Helmet', '(G) Black Helmet', 'Black Platebody', '(S) Black Platebody', '(G) Black Platebody', 'Black Platelegs', '(S) Black Platelegs', '(G) Black Platelegs', 'Black Shield', '(S) Black Shield', '(G) Black Shield'}
},
{
['verb'] = 'Wield',
['name'] = 'Black Weapons',
['level'] = 10,
['entities'] = {'Black 2H Sword', 'Black Battleaxe', 'Black Dagger', 'Black Scimitar', 'Black Sword'}
},
{
['verb'] = 'Wear',
['name'] = 'Black Dragonhide Armour',
['level'] = 70,
['entities'] = {'Black D-hide Body', 'Black D-hide Chaps', 'Black D-hide Shield', 'Black D-hide Vambraces', '(U) Black D-hide Body', '(U) Black D-hide Chaps', '(U) Black D-hide Shield', '(U) Black D-hide Vambraces'}
},
{
['verb'] = 'Wear',
['name'] = 'Basic Black Wizard Gear',
['level'] = 50,
['entities'] = {'Black Wizard Boots', 'Black Wizard Bottoms', 'Black Wizard Hat', 'Black Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Blue Dragonhide Armour',
['level'] = 50,
['entities'] = {'Blue D-hide Body', 'Blue D-hide Chaps', 'Blue D-hide Shield', 'Blue D-hide Vambraces', '(U) Blue D-hide Body', '(U) Blue D-hide Chaps', '(U) Blue D-hide Shield', '(U) Blue D-hide Vambraces'}
},
{
['verb'] = 'Wear',
['name'] = 'Basic Blue Wizard Gear',
['level'] = 10,
['entities'] = {'Blue Wizard Boots', 'Blue Wizard Bottoms', 'Blue Wizard Hat', 'Blue Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Bronze Armour',
['level'] = 1,
['entities'] = {'Bronze Boots', '(S) Bronze Boots', '(G) Bronze Boots', 'Bronze Gloves', 'Bronze Helmet', '(S) Bronze Helmet', '(G) Bronze Helmet', 'Bronze Platebody', '(S) Bronze Platebody', '(G) Bronze Platebody', 'Bronze Platelegs', '(S) Bronze Platelegs', '(G) Bronze Platelegs', 'Bronze Shield', '(S) Bronze Shield', '(G) Bronze Shield'}
},
{
['verb'] = 'Wield',
['name'] = 'Bronze Weapons',
['level'] = 1,
['entities'] = {'Bronze 2H Sword', 'Bronze Battleaxe', 'Bronze Dagger', 'Bronze Scimitar', 'Bronze Sword'}
},
{
['verb'] = 'Wear',
['name'] = 'Carrion Armour',
['level'] = 110,
['entities'] = {'Carrion Body', 'Carrion Chaps', 'Carrion Shield', 'Carrion Vambraces', '(U) Carrion Body', '(U) Carrion Chaps', '(U) Carrion Shield', '(U) Carrion Vambraces'}
},
{
['verb'] = 'Wear',
['name'] = 'Corundum Armour',
['level'] = 100,
['entities'] = {'Corundum Boots', '(I) Corundum Boots', '(P) Corundum Boots', 'Corundum Gloves', 'Corundum Helmet', '(I) Corundum Helmet', '(P) Corundum Helmet', 'Corundum Platebody', '(I) Corundum Platebody', '(P) Corundum Platebody', 'Corundum Platelegs', '(I) Corundum Platelegs', '(P) Corundum Platelegs', 'Corundum Shield', '(I) Corundum Shield', '(P) Corundum Shield'}
},
{
['verb'] = 'Wield',
['name'] = 'Corundum Weapons',
['level'] = 100,
['entities'] = {'Corundum 2H Sword', 'Corundum Battleaxe', 'Corundum Dagger', 'Corundum Scimitar', 'Corundum Sword'}
},
{
['verb'] = 'Wear',
['name'] = 'Divine Armour',
['level'] = 110,
['entities'] = {'Divine Boots', '(I) Divine Boots', '(P) Divine Boots', 'Divine Gloves', 'Divine Helmet', '(I) Divine Helmet', '(P) Divine Helmet', 'Divine Platebody', '(I) Divine Platebody', '(P) Divine Platebody', 'Divine Platelegs', '(I) Divine Platelegs', '(P) Divine Platelegs', 'Divine Shield', '(I) Divine Shield', '(P) Divine Shield'}
},
{
['verb'] = 'Wield',
['name'] = 'Divine Weapons',
['level'] = 110,
['entities'] = {'Divine 2H Sword', 'Divine Battleaxe', 'Divine Dagger', 'Divine Scimitar', 'Divine Sword'}
},
{
['verb'] = 'Wear',
['name'] = 'Dragon Armour',
['level'] = 60,
['entities'] = {'Dragon Boots', '(S) Dragon Boots', '(G) Dragon Boots', 'Dragon Gloves', 'Dragon Helmet', '(S) Dragon Helmet', '(G) Dragon Helmet', 'Dragon Platebody', '(S) Dragon Platebody', '(G) Dragon Platebody', 'Dragon Platelegs', '(S) Dragon Platelegs', '(G) Dragon Platelegs', 'Dragon Shield', '(S) Dragon Shield', '(G) Dragon Shield'}
},
{
['verb'] = 'Wield',
['name'] = 'Dragon Weapons',
['level'] = 60,
['entities'] = {'Dragon 2H Sword', 'Dragon Battleaxe', 'Dragon Dagger', 'Dragon Scimitar', 'Dragon Sword'}
},
{
['verb'] = 'Wear',
['name'] = 'Earth Acolyte Wizard Gear',
['level'] = 9,
['entities'] = {'Earth Acolyte Wizard Boots', 'Earth Acolyte Wizard Bottoms', 'Earth Acolyte Wizard Hat', 'Earth Acolyte Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Earth Adept Wizard Gear',
['level'] = 43,
['entities'] = {'Earth Adept Wizard Boots', 'Earth Adept Wizard Bottoms', 'Earth Adept Wizard Hat', 'Earth Adept Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Earth Expert Wizard Gear',
['level'] = 73,
['entities'] = {'Earth Expert Wizard Boots', 'Earth Expert Wizard Bottoms', 'Earth Expert Wizard Hat', 'Earth Expert Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Elderwood Armour',
['level'] = 100,
['entities'] = {'Elderwood Body', 'Elderwood Chaps', 'Elderwood Shield', 'Elderwood Vambraces', '(U) Elderwood Body', '(U) Elderwood Chaps', '(U) Elderwood Shield', '(U) Elderwood Vambraces'}
},
{
['verb'] = 'Wear',
['name'] = 'Fire Acolyte Wizard Gear',
['level'] = 14,
['entities'] = {'Fire Acolyte Wizard Boots', 'Fire Acolyte Wizard Bottoms', 'Fire Acolyte Wizard Hat', 'Fire Acolyte Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Fire Adept Wizard Gear',
['level'] = 48,
['entities'] = {'Fire Adept Wizard Boots', 'Fire Adept Wizard Bottoms', 'Fire Adept Wizard Hat', 'Fire Adept Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Fire Expert Wizard Gear',
['level'] = 78,
['entities'] = {'Fire Expert Wizard Boots', 'Fire Expert Wizard Bottoms', 'Fire Expert Wizard Hat', 'Fire Expert Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Glacia God Gear',
['level'] = 85,
['entities'] = {'Glacia God Boots', 'Glacia God Gloves', 'Glacia God Helmet', 'Glacia God Platebody', 'Glacia God Platelegs'}
},
{
['verb'] = 'Wield',
['name'] = 'Godswords',
['level'] = 85,
['entities'] = {'Aeris Godsword', 'Glacia Godsword', 'Ragnar Godsword', 'Terran Godsword'}
},
{
['verb'] = 'Wear',
['name'] = 'Green Dragonhide Armour',
['level'] = 40,
['entities'] = {'Green D-hide Body', 'Green D-hide Chaps', 'Green D-hide Shield', 'Green D-hide Vambraces', '(U) Green D-hide Body', '(U) Green D-hide Chaps', '(U) Green D-hide Shield', '(U) Green D-hide Vambraces'}
},
{
['verb'] = 'Wear',
['name'] = 'Basic Green Wizard Gear',
['level'] = 1,
['entities'] = {'Green Wizard Boots', 'Green Wizard Bottoms', 'Green Wizard Hat', 'Green Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Hard Leather Armour',
['level'] = 10,
['entities'] = {'Hard Leather Body', 'Hard Leather Boots', 'Hard Leather Chaps', 'Hard Leather Cowl', 'Hard Leather Gloves', 'Hard Leather Vambraces'}
},
{
['verb'] = 'Wear',
['name'] = 'Ice Armor',
['level'] = 40,
['entities'] = {'Ice Boots', 'Ice Helmet', 'Ice Platebody', 'Ice Platelegs', 'Ice Shield'}
},
{
['verb'] = 'Wield',
['name'] = 'Ice Weapons',
['level'] = 40,
['entities'] = {'Ice 2H Sword', 'Ice Battleaxe', 'Ice Dagger', 'Ice Sword'}
},
{
['verb'] = 'Wield',
['name'] = 'Imbued Magic Wands',
['level'] = 70,
['entities'] = {'Air Imbued Wand', 'Earth Imbued Wand', 'Fire Imbued Wand', 'Water Imbued Wand'}
},
{
['verb'] = 'Wear',
['name'] = 'Infernal Legendary Wizard Gear',
['level'] = 105,
['entities'] = {'Infernal Legendary Wizard Boots', 'Infernal Legendary Wizard Bottoms', 'Infernal Legendary Wizard Hat', 'Infernal Legendary Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Infernal Master Wizard Gear',
['level'] = 100,
['entities'] = {'Infernal Master Wizard Boots', 'Infernal Master Wizard Bottoms', 'Infernal Master Wizard Hat', 'Infernal Master Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Infernal Mythical Wizard Gear',
['level'] = 110,
['entities'] = {'Infernal Mythical Wizard Boots', 'Infernal Mythical Wizard Bottoms', 'Infernal Mythical Wizard Hat', 'Infernal Mythical Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Iron Armour',
['level'] = 1,
['entities'] = {'Iron Boots', '(S) Iron Boots', '(G) Iron Boots', 'Iron Gloves', 'Iron Helmet', '(S) Iron Helmet', '(G) Iron Helmet', 'Iron Platebody', '(S) Iron Platebody', '(G) Iron Platebody', 'Iron Platelegs', '(S) Iron Platelegs', '(G) Iron Platelegs', 'Iron Shield', '(S) Iron Shield', '(G) Iron Shield'}
},
{
['verb'] = 'Wield',
['name'] = 'Iron Weapons',
['level'] = 1,
['entities'] = {'Iron 2H Sword', 'Iron Battleaxe', 'Iron Dagger', 'Iron Scimitar', 'Iron Sword'}
},
{
['verb'] = 'Wear',
['name'] = 'Leather Armour',
['level'] = 1,
['entities'] = {'Leather Body', 'Leather Boots', 'Leather Chaps', 'Leather Cowl', 'Leather Gloves', 'Leather Vambraces'}
},
{
['verb'] = 'Wear',
['name'] = 'Lightning Legendary Wizard Gear',
['level'] = 105,
['entities'] = {'Lightning Legendary Wizard Boots', 'Lightning Legendary Wizard Bottoms', 'Lightning Legendary Wizard Hat', 'Lightning Legendary Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Lightning Master Wizard Gear',
['level'] = 100,
['entities'] = {'Lightning Master Wizard Boots', 'Lightning Master Wizard Bottoms', 'Lightning Master Wizard Hat', 'Lightning Master Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Lightning Mythical Wizard Gear',
['level'] = 110,
['entities'] = {'Lightning Mythical Wizard Boots', 'Lightning Mythical Wizard Bottoms', 'Lightning Mythical Wizard Hat', 'Lightning Mythical Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Meteorite Armour',
['level'] = 108,
['entities'] = {'Meteorite Helmet', 'Meteorite Platebody', 'Meteorite Platelegs'}
},
{
['verb'] = 'Wear',
['name'] = 'Miolite Armour',
['level'] = 40,
['entities'] = {'Miolite Boots', 'Miolite Helmet', 'Miolite Platebody', 'Miolite Platelegs', 'Miolite Shield'}
},
{
['verb'] = 'Wear',
['name'] = 'Mithril Armour',
['level'] = 20,
['entities'] = {'Mithril Boots', '(S) Mithril Boots', '(G) Mithril Boots', 'Mithril Gloves', 'Mithril Helmet', '(S) Mithril Helmet', '(G) Mithril Helmet', 'Mithril Platebody', '(S) Mithril Platebody', '(G) Mithril Platebody', 'Mithril Platelegs', '(S) Mithril Platelegs', '(G) Mithril Platelegs', 'Mithril Shield', '(S) Mithril Shield', '(G) Mithril Shield'}
},
{
['verb'] = 'Wield',
['name'] = 'Mithril Weapons',
['level'] = 20,
['entities'] = {'Mithril 2H Sword', 'Mithril Battleaxe', 'Mithril Dagger', 'Mithril Scimitar', 'Mithril Sword'}
},
{
['verb'] = 'Wield',
['name'] = 'Mystic Magic Staves',
['level'] = 40,
['entities'] = {'Mystic Air Staff', 'Mystic Earth Staff', 'Mystic Fire Staff', 'Mystic Water Staff'}
},
{
['verb'] = 'Wear',
['name'] = 'Poison Legendary Wizard Gear',
['level'] = 105,
['entities'] = {'Poison Legendary Wizard Boots', 'Poison Legendary Wizard Bottoms', 'Poison Legendary Wizard Hat', 'Poison Legendary Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Poison Master Wizard Gear',
['level'] = 100,
['entities'] = {'Poison Master Wizard Boots', 'Poison Master Wizard Bottoms', 'Poison Master Wizard Hat', 'Poison Master Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Poison Mythical Wizard Gear',
['level'] = 110,
['entities'] = {'Poison Mythical Wizard Boots', 'Poison Mythical Wizard Bottoms', 'Poison Mythical Wizard Hat', 'Poison Mythical Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Ragnar God Armour',
['level'] = 85,
['entities'] = {'Ragnar God Boots', 'Ragnar God Gloves', 'Ragnar God Helmet', 'Ragnar God Platebody', 'Ragnar God Platelegs'}
},
{
['verb'] = 'Wear',
['name'] = 'Red Dragonhide Armour',
['level'] = 60,
['entities'] = {'Red D-hide Body', 'Red D-hide Chaps', 'Red D-hide Shield', 'Red D-hide Vambraces', '(U) Red D-hide Body', '(U) Red D-hide Chaps', '(U) Red D-hide Shield', '(U) Red D-hide Vambraces'}
},
{
['verb'] = 'Wear',
['name'] = 'Basic Red Wizard Gear',
['level'] = 30,
['entities'] = {'Red Wizard Boots', 'Red Wizard Bottoms', 'Red Wizard Hat', 'Red Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Revenant Armour',
['level'] = 105,
['entities'] = {'Revenant Body', 'Revenant Chaps', 'Revenant Shield', 'Revenant Vambraces', '(U) Revenant Body', '(U) Revenant Chaps', '(U) Revenant Shield', '(U) Revenant Vambraces'}
},
{
['verb'] = 'Wear',
['name'] = 'Rune Armour',
['level'] = 40,
['entities'] = {'Rune Boots', '(S) Rune Boots', '(G) Rune Boots', 'Rune Gloves', 'Rune Helmet', '(S) Rune Helmet', '(G) Rune Helmet', 'Rune Platebody', '(S) Rune Platebody', '(G) Rune Platebody', 'Rune Platelegs', '(S) Rune Platelegs', '(G) Rune Platelegs', 'Rune Shield', '(S) Rune Shield', '(G) Rune Shield'}
},
{
['verb'] = 'Wield',
['name'] = 'Rune Weapons',
['level'] = 40,
['entities'] = {'Rune 2H Sword', 'Rune Battleaxe', 'Rune Dagger', 'Rune Scimitar', 'Rune Sword'}
},
{
['verb'] = 'Wield',
['name'] = 'Basic Magic Staves',
['level'] = 1,
['entities'] = {'Staff of Air', 'Staff of Earth', 'Staff of Fire', 'Staff of Water'}
},
{
['verb'] = 'Wear',
['name'] = 'Steel Armour',
['level'] = 5,
['entities'] = {'Steel Boots', '(S) Steel Boots', '(G) Steel Boots', 'Steel Gloves', 'Steel Helmet', '(S) Steel Helmet', '(G) Steel Helmet', 'Steel Platebody', '(S) Steel Platebody', '(G) Steel Platebody', 'Steel Platelegs', '(S) Steel Platelegs', '(G) Steel Platelegs', 'Steel Shield', '(S) Steel Shield', '(G) Steel Shield'}
},
{
['verb'] = 'Wield',
['name'] = 'Steel Weapons',
['level'] = 5,
['entities'] = {'Steel 2H Sword', 'Steel Battleaxe', 'Steel Dagger', 'Steel Scimitar', 'Steel Sword'}
},
{
['verb'] = 'Wear',
['name'] = 'Terran God Armour',
['level'] = 85,
['entities'] = {'Terran God Boots', 'Terran God Gloves', 'Terran God Helmet', 'Terran God Platebody', 'Terran God Platelegs'}
},
{
['verb'] = 'Wear',
['name'] = 'Vorloran Devastator Armour',
['level'] = 120,
['entities'] = {'Vorloran Devastator Boots', 'Vorloran Devastator Gauntlets', 'Vorloran Devastator Helmet', 'Vorloran Devastator Platebody', 'Vorloran Devastator Platelegs'}
},
{
['verb'] = 'Wear',
['name'] = 'Vorloran Protector Armour',
['level'] = 120,
['entities'] = {'Vorloran Protector Boots', 'Vorloran Protector Gauntlets', 'Vorloran Protector Helmet', 'Vorloran Protector Platebody', 'Vorloran Protector Platelegs'}
},
{
['verb'] = 'Wear',
['name'] = 'Water Acolyte Wizard Gear',
['level'] = 5,
['entities'] = {'Water Acolyte Wizard Boots', 'Water Acolyte Wizard Bottoms', 'Water Acolyte Wizard Hat', 'Water Acolyte Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Water Adept Wizard Gear',
['level'] = 39,
['entities'] = {'Water Adept Wizard Boots', 'Water Adept Wizard Bottoms', 'Water Adept Wizard Hat', 'Water Adept Wizard Robes'}
},
{
['verb'] = 'Wear',
['name'] = 'Water Expert Wizard Gear',
['level'] = 69,
['entities'] = {'Water Expert Wizard Boots', 'Water Expert Wizard Bottoms', 'Water Expert Wizard Hat', 'Water Expert Wizard Robes'}
}
}
function p._getEntityTrueSubtype(entityType, entityName)
-- Corrects types of a few entities with misleading/wrong data
if SUBTYPE_OVERRIDES[entityName] then
entityType = SUBTYPE_OVERRIDES[entityName]
end
return entityType
end
function p._addItemsWithSkillRequirement(entityList, skillName)
local skillReqLabel = skillName:lower() .. 'LevelRequired'
local itemList = Items.getItems(function(item)
-- Exclude Golbin Raid exclusives
if item.golbinRaidExclusive ~= nil and item.golbinRaidExclusive then
return false
end
return Items._getItemStat(item, skillReqLabel) ~= nil
end)
-- TODO: This can probably be made into a generic function for each entity
for i, item in ipairs(itemList) do
local processed = {}
processed.entity = item
processed.entityName = item.name
processed.entityType = 'item'
processed.subType = p._getEntityTrueSubtype(item.type, item.name)
processed.skillLevel = Items._getItemStat(item, skillReqLabel)
table.insert(entityList, processed)
end
return entityList
end
-- This covers combat areas, Slayer areas, and dungeons
function p._addAreasWithSkillRequirement(entityList, skillName)
local areaList = CombatAreas.getAreas(function(area)
local hasSkillReq = false
for i, req in ipairs(area.entryRequirements) do
if req.type == 'SkillLevel' and req.skillID == Constants.getSkillID(skillName) then
hasSkillReq = true
end
end
return hasSkillReq
end)
for i, area in ipairs(areaList) do
local processed = {}
processed.entity = area
processed.entityName = area.name
processed.entityType = area.type
processed.subType = p._getEntityTrueSubtype(area.type, area.name)
for a, req in ipairs(area.entryRequirements) do
if req.type == 'SkillLevel' and req.skillID == Constants.getSkillID(skillName) then
processed.skillLevel = req.level
end
end
table.insert(entityList, processed)
end
return entityList
end
function p._prepareSingleEntity(entity)
-- What are you doing with the thing you unlock? ("verbs")
local verb = ''
if VERBS_PER_SUBTYPE[entity.subType] then
verb = VERBS_PER_SUBTYPE[entity.subType] .. ' '
end
-- Icon overrides
local iconType = entity.entityType
if entity.entityType == 'slayerArea' then
iconType = 'combatArea'
end
return verb .. Icons.Icon({entity.entityName, type=iconType})
end
function p._prepareGearSet(gearSet)
local icons = ''
for i, entity in ipairs(gearSet.entities) do
-- Skip trimmed armor, which always starts with an open parnthesis
if string.sub(entity, 1, 1) ~= '(' then
icons = icons .. Icons.Icon({entity, type='item', notext=true})
end
end
return gearSet.verb .. ' ' .. icons .. ' ' .. gearSet.name
end
function p._getSkillUnlockTable(skillName)
-- local skillReqLabel = skillName:lower() .. 'LevelRequired'
-- What do we need to check for this skill? (avoid checking everything for
-- every skill to save time)
local entityList = {}
if Shared.contains(CHECK_ITEMS, skillName) then
entityList = p._addItemsWithSkillRequirement(entityList, skillName)
end
if Shared.contains(CHECK_AREAS, skillName) then
entityList = p._addAreasWithSkillRequirement(entityList, skillName)
end
if Shared.tableIsEmpty(entityList) then
-- TODO: More specific empty handling
return nil
end
-- Sort the big list of everything
table.sort(entityList, function(a, b)
-- Sort by level first
if a.skillLevel ~= b.skillLevel then
return a.skillLevel < b.skillLevel
-- Then by type
elseif TYPE_SORT_ORDER[a.entityType] ~= TYPE_SORT_ORDER[b.entityType] then
return TYPE_SORT_ORDER[a.entityType] < TYPE_SORT_ORDER[b.entityType]
-- Then by subtype
elseif a.subType ~= b.subType then
return a.subType < b.subType
-- And finally by name
else
return a.entityName < b.entityName
end
end)
-- Header and columns
local resultPart = {}
table.insert(resultPart, '{| class="wikitable"\r\n|- class="headerRow-0"')
table.insert(resultPart, '\r\n!' .. Icons.Icon({skillName, type='skill', notext='true'}) .. ' Level')
table.insert(resultPart, '\r\n!Unlocks')
-- Time to iterate!
local currentLevel = 0
local processedSets = {}
for i, entity in ipairs(entityList) do
-- Skip this one if it's in a gear set we've already listed
local entityGearSet = nil
for i, gearSet in ipairs(GEAR_SETS) do
if Shared.contains(gearSet.entities, entity.entityName) then
entityGearSet = gearSet
break
end
end
if entityGearSet == nil or Shared.contains(processedSets, entityGearSet.name) == false then
local foundLevel = entity.skillLevel
-- Start a new row if the current entity's level is higher than the
-- current row
if foundLevel ~= currentLevel then
currentLevel = foundLevel
table.insert(resultPart, '\r\n|-')
table.insert(resultPart, '\r\n|' .. foundLevel)
table.insert(resultPart, '\r\n|')
else
table.insert(resultPart, '<br/>')
end
-- Figure out what we need to list - single item or set?
local toInsert = ''
if entityGearSet ~= nil then
toInsert = p._prepareGearSet(entityGearSet)
table.insert(processedSets, entityGearSet.name)
else
toInsert = p._prepareSingleEntity(entity)
end
-- Append entity to the column
table.insert(resultPart, toInsert)
end
end
table.insert(resultPart, '\r\n|}')
return table.concat(resultPart)
end
function p.getSkillUnlockTable(frame)
local skillName = frame.args ~= nil and frame.args[1]
return p._getSkillUnlockTable(skillName)
end
function p.test()
local ret = {}
for i, gearSet in ipairs(GEAR_SETS) do
mw.logObject(gearSet)
break
--[[
if Shared.contains(gearSet.entities, 'Bronze Boots') then
ret = gearSet
break
end
--]]
end
return ret
end
return p