-- Developers: --Divine (http://forum.botoflegends.com/user/86308-divine/) --PvPSuite (http://forum.botoflegends.com/user/76516-pvpsuite/) local sVersion = '3.4'; local rVersion = GetWebResult('raw.githubusercontent.com', '/Nader-Sl/BoLStudio/master/Versions/p_skinChanger.version?no-cache=' .. math.random(1, 25000)); if ((rVersion) and (tonumber(rVersion) ~= nil)) then if (tonumber(sVersion) < tonumber(rVersion)) then print('[p_skinChanger] An update has been found and it is now downloading!'); DownloadFile('https://raw.githubusercontent.com/Nader-Sl/BoLStudio/master/Scripts/p_skinChanger.lua?no-cache=' .. math.random(1, 25000), (SCRIPT_PATH.. GetCurrentEnv().FILE_NAME), function() print('[p_skinChanger] Script has been updated, please reload!'); end); return; end; else print('[p_skinChanger] Update Error'); end; if (not VIP_USER) then print('[p_skinChanger] Non-VIP Not Supported'); return; elseif ((string.find(GetGameVersion(), 'Releases/6.1') == nil) and ((string.find(GetGameVersion(), 'Releases/6.2') == nil))) then print('[p_skinChanger] Game Version Not Supported'); return; end; local skinsPB = {}; local skinObjectPos = nil; local skinHeader = nil; local dispellHeader = nil; local skinH = nil; local skinHPos = nil; if (string.find(GetGameVersion(), 'Releases/6.2') ~= nil) then skinsPB = { [1] = 0xD4, [10] = 0xAD, [8] = 0xCD, [4] = 0x95, [12] = 0x8D, [5] = 0x94, [9] = 0xCC, [7] = 0xEC, [3] = 0xB4, [11] = 0xAC, [6] = 0xED, [2] = 0xB5, }; skinObjectPos = 37; skinHeader = 0x0E dispellHeader = 0x130; skinH = 0xD4; skinHPos = 32; header = 0x0E elseif (string.find(GetGameVersion(), 'Releases/6.1') ~= nil) then skinsPB = { [1] = 0xA4, [10] = 0x3F, [8] = 0x37, [4] = 0xB2, [12] = 0xB0, [5] = 0x2B, [9] = 0x2F, [7] = 0x27, [3] = 0xA2, [11] = 0xA0, [6] = 0x3B, [2] = 0xBC, }; skinObjectPos = 16; skinHeader = 0x9C; dispellHeader = 0x39; skinH = 0xAC; skinHPos = 6; header = 0x9C end; local theMenu = nil; local initBall = false; local ballCreated = false; local ballNetworkID = nil; local lastFormSeen = nil; local cougarForm = false; local spiderForm = false; local lastTimeTickCalled = 0; local lastSkin = 0; function OnLoad() InitMenu(); if (not theMenu['save' .. myHero.charName .. 'Skin']) then theMenu['change' .. myHero.charName .. 'Skin'] = false; theMenu['selected' .. myHero.charName .. 'Skin'] = 1; elseif (theMenu['change' .. myHero.charName .. 'Skin']) then SendSkinPacket(myHero.charName, skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], myHero.networkID); end; if (myHero.charName == 'Orianna') then for I = 1, objManager.maxObjects do local tempObject = objManager:getObject(I); if ((tempObject) and (tempObject.name == 'TheDoomBall') and (tempObject.team == myHero.team)) then initBall = true; ballCreated = true; ballNetworkID = tempObject.networkID; break; end; end; elseif (myHero.charName == 'Nidalee') then if (myHero:GetSpellData(_Q).name == 'Takedown') then cougarForm = true; end; elseif (myHero.charName == 'Elise') then if (myHero:GetSpellData(_Q).name == 'EliseSpiderQCast') then spiderForm = true; end; end; print('[p_skinChanger] Loaded Successfully'); end; function OnUnload() if (theMenu['change' .. myHero.charName .. 'Skin']) then if (myHero.charName == 'Orianna') then if (ballCreated) then return print('[p_skinChanger] Skin could not be unloaded because ball is active!'); else SendSkinPacket('Orianna', nil, myHero.networkID); end; elseif (myHero.charName == 'Nidalee') then if (cougarForm) then return print('[p_skinChanger] Skin could not be unloaded due to cougar form!'); else SendSkinPacket('Nidalee', nil, myHero.networkID); end; elseif (myHero.charName == 'Elise') then if (spiderForm) then return print('[p_skinChanger] Skin could not be unloaded due to spider form!'); else SendSkinPacket('Elise', nil, myHero.networkID); end; else SendSkinPacket(myHero.charName, nil, myHero.networkID); end; end; end; function OnTick() if ((CurrentTimeInMillis() - lastTimeTickCalled) > 200) then lastTimeTickCalled = CurrentTimeInMillis(); if (theMenu['change' .. myHero.charName .. 'Skin']) then if (theMenu['selected' .. myHero.charName .. 'Skin'] ~= lastSkin) then lastSkin = theMenu['selected' .. myHero.charName .. 'Skin']; if (myHero.charName == 'Orianna') then if (ballCreated) then SendSkinPacket('OriannaNoBall', skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], myHero.networkID); if (ballNetworkID ~= nil) then SendSkinPacket('OriannaBall', skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], ballNetworkID); end; else SendSkinPacket('Orianna', skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], myHero.networkID); end; elseif (myHero.charName == 'Nidalee') then if (cougarForm) then SendSkinPacket('Nidalee_Cougar', skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], myHero.networkID); else SendSkinPacket('Nidalee', skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], myHero.networkID); end; elseif (myHero.charName == 'Elise') then if (spiderForm) then SendSkinPacket('EliseSpider', skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], myHero.networkID); else SendSkinPacket('Elise', skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], myHero.networkID); end; else SendSkinPacket(myHero.charName, skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], myHero.networkID); end; end; elseif (lastSkin ~= 0) then if (myHero.charName == 'Orianna') then if ((ballCreated) and (ballNetworkID ~= nil)) then theMenu['change' .. myHero.charName .. 'Skin'] = true; return print('[p_skinChanger] You can\'t disable skin changer while the ball is active!'); else SendSkinPacket('Orianna', nil, myHero.networkID); end; elseif (myHero.charName == 'Nidalee') then if (cougarForm) then theMenu['change' .. myHero.charName .. 'Skin'] = true; return print('[p_skinChanger] You can\'t disable skin changer while on cougar form!'); else SendSkinPacket('Nidalee', nil, myHero.networkID); end; elseif (myHero.charName == 'Elise') then if (spiderForm) then theMenu['change' .. myHero.charName .. 'Skin'] = true; return print('[p_skinChanger] You can\'t disable skin changer while on spider form!'); else SendSkinPacket('Elise', nil, myHero.networkID); end; else SendSkinPacket(myHero.charName, nil, myHero.networkID); end; lastSkin = 0; end; end; end; function OnRecvPacket(rPacket) if (rPacket.header == skinHeader) then if ((myHero.charName == 'Orianna') or (myHero.charName == 'Nidalee') or (myHero.charName == 'Elise')) then rPacket.pos = 2; if (myHero.networkID == rPacket:DecodeF()) then rPacket.pos = skinObjectPos; local pS1 = rPacket:Decode4(); local pS2 = rPacket:Decode4(); local pS3 = rPacket:Decode2(); local pS4 = rPacket:Decode1(); local pS5 = rPacket:Decode1(); local pS6 = rPacket:Decode1(); local pS7 = rPacket:Decode1(); if (myHero.charName == 'Orianna') then if ((pS1 == 0x6169724F) and (pS2 == 0x4E616E6E) and (pS3 == 0x426F) and (pS4 == 0x61) and (pS5 == 0x6C) and (pS5 == 0x6C)) then ballCreated = true; if (theMenu['change' .. myHero.charName .. 'Skin']) then rPacket:Replace1(skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], skinHPos); rPacket:Replace1(skinH, skinHPos + 1); rPacket:Replace1(skinH, skinHPos + 2); rPacket:Replace1(skinH, skinHPos + 3); end; end; elseif (myHero.charName == 'Nidalee') then if ((pS1 == 0x6164694E) and (pS2 == 0x5F65656C) and (pS3 == 0x6F43) and (pS4 == 0x75) and (pS5 == 0x67) and (pS6 == 0x61) and (pS7 == 0x72)) then cougarForm = true; if (theMenu['change' .. myHero.charName .. 'Skin']) then rPacket:Replace1(skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], skinHPos); rPacket:Replace1(skinH, skinHPos + 1); rPacket:Replace1(skinH, skinHPos + 2); rPacket:Replace1(skinH, skinHPos + 3); end; else lastFormSeen = cougarForm; end; elseif (myHero.charName == 'Elise') then if ((pS1 == 0x73696C45) and (pS2 == 0x69705365) and (pS3 == 0x6564) and (pS4 == 0x72)) then spiderForm = true; if (theMenu['change' .. myHero.charName .. 'Skin']) then rPacket:Replace1(skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], skinHPos); rPacket:Replace1(skinH, skinHPos + 1); rPacket:Replace1(skinH, skinHPos + 2); rPacket:Replace1(skinH, skinHPos + 3); end; else lastFormSeen = spiderForm; end; end; end; end; elseif (rPacket.header == dispellHeader) then rPacket.pos = 2; if (myHero.networkID == rPacket:DecodeF()) then if (myHero.charName == 'Nidalee') then if (lastFormSeen ~= nil) then if (lastFormSeen) then if (theMenu['change' .. myHero.charName .. 'Skin']) then SendSkinPacket('Nidalee_Cougar', skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], myHero.networkID); end; cougarForm = true; else if (theMenu['change' .. myHero.charName .. 'Skin']) then SendSkinPacket('Nidalee', skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], myHero.networkID); end; cougarForm = false; end; lastFormSeen = nil; else if (theMenu['change' .. myHero.charName .. 'Skin']) then SendSkinPacket('Nidalee', skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], myHero.networkID); end; cougarForm = false; end; elseif (myHero.charName == 'Elise') then if (lastFormSeen ~= nil) then if (lastFormSeen) then if (theMenu['change' .. myHero.charName .. 'Skin']) then SendSkinPacket('EliseSpider', skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], myHero.networkID); end; spiderForm = true; else if (theMenu['change' .. myHero.charName .. 'Skin']) then SendSkinPacket('Elise', skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], myHero.networkID); end; spiderForm = false; end; lastFormSeen = nil; else if (theMenu['change' .. myHero.charName .. 'Skin']) then SendSkinPacket('Elise', skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], myHero.networkID); end; spiderForm = false; end; end; end; end; end; function OnCreateObj(tObj) if (myHero.charName == 'Orianna') then if ((tObj.valid) and (tObj.name == 'TheDoomBall') and (tObj.team == myHero.team)) then ballNetworkID = tObj.networkID; ballCreated = true; if (theMenu['change' .. myHero.charName .. 'Skin']) then SendSkinPacket('OriannaBall', skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], ballNetworkID); end; end; end; end; function OnApplyBuff(bSource, bUnit, tBuff) if (myHero.charName == 'Orianna') then if (bUnit and (bUnit.isMe) and (tBuff.name == 'orianaghostself')) then if ((theMenu['change' .. myHero.charName .. 'Skin']) and (ballCreated)) then SendSkinPacket('Orianna', skinsPB[theMenu['selected' .. myHero.charName .. 'Skin']], myHero.networkID); elseif (initBall) then SendSkinPacket('Orianna', nil, myHero.networkID); initBall = false; end; ballCreated = false; ballNetworkID = nil; end; end; end; function InitMenu() theMenu = scriptConfig('p_skinChanger', 'p_skinChanger'); theMenu:addParam('save' .. myHero.charName .. 'Skin', 'Save Skin', SCRIPT_PARAM_ONOFF, false); theMenu:addParam('change' .. myHero.charName .. 'Skin', 'Change Skin', SCRIPT_PARAM_ONOFF, false); theMenu:addParam('selected' .. myHero.charName .. 'Skin', 'Selected Skin', SCRIPT_PARAM_LIST, 1,skinMeta[myHero.charName]); end; function SendSkinPacket(mObject, skinPB, networkID) if (string.find(GetGameVersion(), 'Releases/6.2') ~= nil) then local mP = CLoLPacket(header); mP.vTable = 0xFB7464; mP:EncodeF(myHero.networkID); mP:Encode1(0x00); for I = 1, string.len(mObject) do mP:Encode1(string.byte(string.sub(mObject, I, I))); end; for I = 1, (14 - string.len(mObject)) do mP:Encode1(0x00); end; mP:Encode2(0x0000); mP:Encode4(0x0000000D); mP:Encode4(0x0000000F); mP:Encode4(0x00000000); mP:Encode2(0x0000); if (skinnedObject) then mP:Encode4(0xD5D5D5D5); else mP:Encode1(skinPB); for I = 1, 3 do mP:Encode1(skinH); end; end mP:Hide(); RecvPacket(mP); elseif (string.find(GetGameVersion(), 'Releases/6.1') ~= nil) then local mP = CLoLPacket(header); mP.vTable = 0xEECD38; mP:EncodeF(myHero.networkID); if (skinPB == nil) then mP:Encode4(0xA4A4A4A4); else mP:Encode1(skinPB); for I = 1, 3 do mP:Encode1(skinH); end; end; mP:Encode4(0x00000000); mP:Encode2(0x0000); mP:Encode1(0x00); for I = 1, string.len(mObject) do mP:Encode1(string.byte(string.sub(mObject, I, I))); end; for I = 1, (14 - string.len(mObject)) do mP:Encode1(0x00); end; mP:Encode1(0x00); mP:Encode1(0x00); mP:Encode4(0x0000000D); mP:Encode4(0x0000000F); mP:Encode4(0x00000000); mP:Hide(); RecvPacket(mP); end; end; function CurrentTimeInMillis() return (os.clock() * 1000); end; skinMeta = { -- A ["Aatrox"] = {"Classic", "Justicar", "Mecha", "Sea Hunter"}, ["Ahri"] = {"Classic", "Dynasty", "Midnight", "Foxfire", "Popstar", "Challenger", "Academy"}, ["Akali"] = {"Classic", "Stinger", "Crimson", "All-star", "Nurse", "Blood Moon", "Silverfang", "Headhunter"}, ["Alistar"] = {"Classic", "Black", "Golden", "Matador", "Longhorn", "Unchained", "Infernal", "Sweeper", "Marauder"}, ["Amumu"] = {"Classic", "Pharaoh", "Vancouver", "Emumu", "Re-Gifted", "Almost-Prom King", "Little Knight", "Sad Robot", "Surprise Party"}, ["Anivia"] = {"Classic", "Team Spirit", "Bird of Prey", "Noxus Hunter", "Hextech", "Blackfrost", "Prehistoric"}, ["Annie"] = {"Classic", "Goth", "Red Riding", "Annie in Wonderland", "Prom Queen", "Frostfire", "Reverse", "FrankenTibbers", "Panda", "Sweetheart"}, ["Ashe"] = {"Classic", "Freljord", "Sherwood Forest", "Woad", "Queen", "Amethyst", "Heartseeker", "Marauder"}, ["Azir"] = {"Classic", "Galactic", "Gravelord"}, -- B ["Bard"] = {"Classic", "Elderwood", "Chroma Pack: Marigold", "Chroma Pack: Ivy", "Chroma Pack: Sage"}, ["Blitzcrank"] = {"Classic", "Rusty", "Goalkeeper", "Boom Boom", "Piltover Customs", "Definitely Not", "iBlitzcrank", "Riot", "Chroma Pack: Molten", "Chroma Pack: Cobalt", "Chroma Pack: Gunmetal", "Battle Boss"}, ["Brand"] = {"Classic", "Apocalyptic", "Vandal", "Cryocore", "Zombie", "Spirit Fire"}, ["Braum"] = {"Classic", "Dragonslayer", "El Tigre", "Lionheart"}, -- C ["Caitlyn"] = {"Classic", "Resistance", "Sheriff", "Safari", "Arctic Warfare", "Officer", "Headhunter", "Chroma Pack: Pink", "Chroma Pack: Green", "Chroma Pack: Blue","Lunar"}, ["Cassiopeia"] = {"Classic", "Desperada", "Siren", "Mythic", "Jade Fang", "Chroma Pack: Day", "Chroma Pack: Dusk", "Chroma Pack: Night"}, ["Chogath"] = {"Classic", "Nightmare", "Gentleman", "Loch Ness", "Jurassic", "Battlecast Prime", "Prehistoric"}, ["Corki"] = {"Classic", "UFO", "Ice Toboggan", "Red Baron", "Hot Rod", "Urfrider", "Dragonwing", "Fnatic"}, -- D ["Darius"] = {"Classic", "Lord", "Bioforge", "Woad King", "Dunkmaster", "Chroma Pack: Black Iron", "Chroma Pack: Bronze", "Chroma Pack: Copper", "Academy"}, ["Diana"] = {"Classic", "Dark Valkyrie", "Lunar Goddess"}, ["DrMundo"] = {"Classic", "Toxic", "Mr. Mundoverse", "Corporate Mundo", "Mundo Mundo", "Executioner Mundo", "Rageborn Mundo", "TPA Mundo", "Pool Party"}, ["Draven"] = {"Classic", "Soul Reaver", "Gladiator", "Primetime", "Pool Party"}, -- E ["Ekko"] = {"Classic", "Sandstorm", "Academy"}, ["Elise"] = {"Classic", "Death Blossom", "Victorious", "Blood Moon"}, ["Evelynn"] = {"Classic", "Shadow", "Masquerade", "Tango", "Safecracker"}, ["Ezreal"] = {"Classic", "Nottingham", "Striker", "Frosted", "Explorer", "Pulsefire", "TPA", "Debonair", "Ace of Spades"}, -- F ["FiddleSticks"] = {"Classic", "Spectral", "Union Jack", "Bandito", "Pumpkinhead", "Fiddle Me Timbers", "Surprise Party", "Dark Candy", "Risen"}, ["Fiora"] = {"Classic", "Royal Guard", "Nightraven", "Headmistress", "PROJECT"}, ["Fizz"] = {"Classic", "Atlantean", "Tundra", "Fisherman", "Void", "Chroma Pack: Orange", "Chroma Pack: Black", "Chroma Pack: Red", "Cottontail"}, -- G ["Galio"] = {"Classic", "Enchanted", "Hextech", "Commando", "Gatekeeper", "Debonair"}, ["Gangplank"] = {"Classic", "Spooky", "Minuteman", "Sailor", "Toy Soldier", "Special Forces", "Sultan", "Captain"}, ["Garen"] = {"Classic", "Sanguine", "Desert Trooper", "Commando", "Dreadknight", "Rugged", "Steel Legion", "Chroma Pack: Garnet", "Chroma Pack: Plum", "Chroma Pack: Ivory", "Rogue Admiral"}, ["Gnar"] = {"Classic", "Dino", "Gentleman"}, ["Gragas"] = {"Classic", "Scuba", "Hillbilly", "Santa", "Gragas, Esq.", "Vandal", "Oktoberfest", "Superfan", "Fnatic", "Caskbreaker"}, ["Graves"] = {"Classic", "Hired Gun", "Jailbreak", "Mafia", "Riot", "Pool Party", "Cutthroat"}, -- H ["Hecarim"] = {"Classic", "Blood Knight", "Reaper", "Headless", "Arcade", "Elderwood"}, ["Heimerdinger"] = {"Classic", "Alien Invader", "Blast Zone", "Piltover Customs", "Snowmerdinger", "Hazmat"}, -- I ["Illaoi"] = {"Classic", "Void Bringer"}, ["Irelia"] = {"Classic", "Nightblade", "Aviator", "Infiltrator", "Frostblade", "Order of the Lotus"}, -- J ["Janna"] = {"Classic", "Tempest", "Hextech", "Frost Queen", "Victorious", "Forecast", "Fnatic"}, ["JarvanIV"] = {"Classic", "Commando", "Dragonslayer", "Darkforge", "Victorious", "Warring Kingdoms", "Fnatic"}, ["Jax"] = {"Classic", "The Mighty", "Vandal", "Angler", "PAX", "Jaximus", "Temple", "Nemesis", "SKT T1", "Chroma Pack: Cream", "Chroma Pack: Amber", "Chroma Pack: Brick", "Warden"}, ["Jayce"] = {"Classic", "Full Metal", "Debonair", "Forsaken"}, ["Jinx"] = {"Classic", "Mafia", "Firecracker", "Slayer"}, -- K ["Kalista"] = {"Classic", "Blood Moon", "Championship"}, ["Karma"] = {"Classic", "Sun Goddess", "Sakura", "Traditional", "Order of the Lotus", "Warden"}, ["Karthus"] = {"Classic", "Phantom", "Statue of", "Grim Reaper", "Pentakill", "Fnatic", "Chroma Pack: Burn", "Chroma Pack: Blight", "Chroma Pack: Frostbite"}, ["Kassadin"] = {"Classic", "Festival", "Deep One", "Pre-Void", "Harbinger", "Cosmic Reaver"}, ["Katarina"] = {"Classic", "Mercenary", "Red Card", "Bilgewater", "Kitty Cat", "High Command", "Sandstorm", "Slay Belle", "Warring Kingdoms"}, ["Kayle"] = {"Classic", "Silver", "Viridian", "Unmasked", "Battleborn", "Judgment", "Aether Wing", "Riot"}, ["Kennen"] = {"Classic", "Deadly", "Swamp Master", "Karate", "Kennen M.D.", "Arctic Ops"}, ["Khazix"] = {"Classic", "Mecha", "Guardian of the Sands"}, ["Kindred"] = {"Classic", "Shadowfire"}, ["KogMaw"] = {"Classic", "Caterpillar", "Sonoran", "Monarch", "Reindeer", "Lion Dance", "Deep Sea", "Jurassic", "Battlecast"}, -- L ["Leblanc"] = {"Classic", "Wicked", "Prestigious", "Mistletoe", "Ravenborn"}, ["LeeSin"] = {"Classic", "Traditional", "Acolyte", "Dragon Fist", "Muay Thai", "Pool Party", "SKT T1", "Chroma Pack: Black", "Chroma Pack: Blue", "Chroma Pack: Yellow", "Knockout"}, ["Leona"] = {"Classic", "Valkyrie", "Defender", "Iron Solari", "Pool Party", "Chroma Pack: Pink", "Chroma Pack: Azure", "Chroma Pack: Lemon", "PROJECT"}, ["Lissandra"] = {"Classic", "Bloodstone", "Blade Queen"}, ["Lucian"] = {"Classic", "Hired Gun", "Striker", "Chroma Pack: Yellow", "Chroma Pack: Red", "Chroma Pack: Blue", "PROJECT"}, ["Lulu"] = {"Classic", "Bittersweet", "Wicked", "Dragon Trainer", "Winter Wonder", "Pool Party"}, ["Lux"] = {"Classic", "Sorceress", "Spellthief", "Commando", "Imperial", "Steel Legion", "Star Guardian"}, -- M ["Malphite"] = {"Classic", "Shamrock", "Coral Reef", "Marble", "Obsidian", "Glacial", "Mecha", "Ironside"}, ["Malzahar"] = {"Classic", "Vizier", "Shadow Prince", "Djinn", "Overlord", "Snow Day"}, ["Maokai"] = {"Classic", "Charred", "Totemic", "Festive", "Haunted", "Goalkeeper"}, ["MasterYi"] = {"Classic", "Assassin", "Chosen", "Ionia", "Samurai Yi", "Headhunter", "Chroma Pack: Gold", "Chroma Pack: Aqua", "Chroma Pack: Crimson", "PROJECT"}, ["MissFortune"] = {"Classic", "Cowgirl", "Waterloo", "Secret Agent", "Candy Cane", "Road Warrior", "Mafia", "Arcade", "Captain"}, ["Mordekaiser"] = {"Classic", "Dragon Knight", "Infernal", "Pentakill", "Lord", "King of Clubs"}, ["Morgana"] = {"Classic", "Exiled", "Sinful Succulence", "Blade Mistress", "Blackthorn", "Ghost Bride", "Victorious", "Chroma Pack: Toxic", "Chroma Pack: Pale", "Chroma Pack: Ebony","Lunar"}, -- N ["Nami"] = {"Classic", "Koi", "River Spirit", "Urf", "Chroma Pack: Sunbeam", "Chroma Pack: Smoke", "Chroma Pack: Twilight"}, ["Nasus"] = {"Classic", "Galactic", "Pharaoh", "Dreadknight", "Riot K-9", "Infernal", "Archduke", "Chroma Pack: Burn", "Chroma Pack: Blight", "Chroma Pack: Frostbite",}, ["Nautilus"] = {"Classic", "Abyssal", "Subterranean", "AstroNautilus", "Warden"}, ["Nidalee"] = {"Classic", "Snow Bunny", "Leopard", "French Maid", "Pharaoh", "Bewitching", "Headhunter", "Warring Kingdoms"}, ["Nocturne"] = {"Classic", "Frozen Terror", "Void", "Ravager", "Haunting", "Eternum"}, ["Nunu"] = {"Classic", "Sasquatch", "Workshop", "Grungy", "Nunu Bot", "Demolisher", "TPA", "Zombie"}, -- O ["Olaf"] = {"Classic", "Forsaken", "Glacial", "Brolaf", "Pentakill", "Marauder"}, ["Orianna"] = {"Classic", "Gothic", "Sewn Chaos", "Bladecraft", "TPA", "Winter Wonder"}, -- P ["Pantheon"] = {"Classic", "Myrmidon", "Ruthless", "Perseus", "Full Metal", "Glaive Warrior", "Dragonslayer", "Slayer"}, ["Poppy"] = {"Classic", "Noxus", "Lollipoppy", "Blacksmith", "Ragdoll", "Battle Regalia", "Scarlet Hammer"}, -- Q ["Quinn"] = {"Classic", "Phoenix", "Woad Scout", "Corsair"}, -- R ["Rammus"] = {"Classic", "King", "Chrome", "Molten", "Freljord", "Ninja", "Full Metal", "Guardian of the Sands"}, ["Reksai"] = {"Classic", "Eternum", "Pool Party"}, ["Renekton"] = {"Classic", "Galactic", "Outback", "Bloodfury", "Rune Wars", "Scorched Earth", "Pool Party", "Scorched Earth", "Prehistoric"}, ["Rengar"] = {"Classic", "Headhunter", "Night Hunter", "SSW"}, ["Riven"] = {"Classic", "Redeemed", "Crimson Elite", "Battle Bunny", "Championship", "Dragonblade", "Arcade"}, ["Rumble"] = {"Classic", "Rumble in the Jungle", "Bilgerat", "Super Galaxy"}, ["Ryze"] = {"Classic", "Human", "Tribal", "Uncle", "Triumphant", "Professor", "Zombie", "Dark Crystal", "Pirate", "Whitebeard"}, -- S ["Sejuani"] = {"Classic", "Sabretusk", "Darkrider", "Traditional", "Bear Cavalry", "Poro Rider"}, ["Shaco"] = {"Classic", "Mad Hatter", "Royal", "Nutcracko", "Workshop", "Asylum", "Masked", "Wild Card"}, ["Shen"] = {"Classic", "Frozen", "Yellow Jacket", "Surgeon", "Blood Moon", "Warlord", "TPA"}, ["Shyvana"] = {"Classic", "Ironscale", "Boneclaw", "Darkflame", "Ice Drake", "Championship"}, ["Singed"] = {"Classic", "Riot Squad", "Hextech", "Surfer", "Mad Scientist", "Augmented", "Snow Day", "SSW"}, ["Sion"] = {"Classic", "Hextech", "Barbarian", "Lumberjack", "Warmonger"}, ["Sivir"] = {"Classic", "Warrior Princess", "Spectacular", "Huntress", "Bandit", "PAX", "Snowstorm", "Warden", "Victorious"}, ["Skarner"] = {"Classic", "Sandscourge", "Earthrune", "Battlecast Alpha", "Guardian of the Sands"}, ["Sona"] = {"Classic", "Muse", "Pentakill", "Silent Night", "Guqin", "Arcade", "DJ"}, ["Soraka"] = {"Classic", "Dryad", "Divine", "Celestine", "Reaper", "Order of the Banana"}, ["Swain"] = {"Classic", "Northern Front", "Bilgewater", "Tyrant"}, ["Syndra"] = {"Classic", "Justicar", "Atlantean", "Queen of Diamonds"}, -- T ["TahmKench"] = {"Classic", "Master Chef"}, ["Talon"] = {"Classic", "Renegade", "Crimson Elite", "Dragonblade", "SSW"}, ["Taric"] = {"Classic", "Emerald", "Armor of the Fifth Age", "Bloodstone"}, ["Teemo"] = {"Classic", "Happy Elf", "Recon", "Badger", "Astronaut", "Cottontail", "Super", "Panda", "Omega Squad"}, ["Thresh"] = {"Classic", "Deep Terror", "Championship", "Blood Moon", "SSW"}, ["Tristana"] = {"Classic", "Riot Girl", "Earnest Elf", "Firefighter", "Guerilla", "Buccaneer", "Rocket Girl", "Chroma Pack: Navy", "Chroma Pack: Purple", "Chroma Pack: Orange", "Dragon Trainer"}, ["Trundle"] = {"Classic", "Lil' Slugger", "Junkyard", "Traditional", "Constable"}, ["Tryndamere"] = {"Classic", "Highland", "King", "Viking", "Demonblade", "Sultan", "Warring Kingdoms", "Nightmare"}, ["TwistedFate"] = {"Classic", "PAX", "Jack of Hearts", "The Magnificent", "Tango", "High Noon", "Musketeer", "Underworld", "Red Card", "Cutpurse"}, ["Twitch"] = {"Classic", "Kingpin", "Whistler Village", "Medieval", "Gangster", "Vandal", "Pickpocket", "SSW"}, -- U ["Udyr"] = {"Classic", "Black Belt", "Primal", "Spirit Guard", "Definitely Not"}, ["Urgot"] = {"Classic", "Giant Enemy Crabgot", "Butcher", "Battlecast"}, -- V ["Varus"] = {"Classic", "Blight Crystal", "Arclight", "Arctic Ops", "Heartseeker", "Swiftbolt"}, ["Vayne"] = {"Classic", "Vindicator", "Aristocrat", "Dragonslayer", "Heartseeker", "SKT T1", "Arclight", "Chroma Pack: Green", "Chroma Pack: Red", "Chroma Pack: Silver"}, ["Veigar"] = {"Classic", "White Mage", "Curling", "Veigar Greybeard", "Leprechaun", "Baron Von", "Superb Villain", "Bad Santa", "Final Boss"}, ["Velkoz"] = {"Classic", "Battlecast", "Arclight"}, ["Vi"] = {"Classic", "Neon Strike", "Officer", "Debonair", "Demon"}, ["Viktor"] = {"Classic", "Full Machine", "Prototype", "Creator"}, ["Vladimir"] = {"Classic", "Count", "Marquis", "Nosferatu", "Vandal", "Blood Lord", "Soulstealer", "Academy"}, ["Volibear"] = {"Classic", "Thunder Lord", "Northern Storm", "Runeguard", "Captain"}, -- W ["Warwick"] = {"Classic", "Grey", "Urf the Manatee", "Big Bad", "Tundra Hunter", "Feral", "Firefang", "Hyena", "Marauder"}, ["MonkeyKing"] = {"Classic", "Volcanic", "General", "Jade Dragon", "Underworld","Radiant"}, -- X ["Xerath"] = {"Classic", "Runeborn", "Battlecast", "Scorched Earth", "Guardian of the Sands"}, ["XinZhao"] = {"Classic", "Commando", "Imperial", "Viscero", "Winged Hussar", "Warring Kingdoms", "Secret Agent"}, -- Y ["Yasuo"] = {"Classic", "High Noon", "PROJECT"}, ["Yorick"] = {"Classic", "Undertaker", "Pentakill"}, -- Z ["Zac"] = {"Classic", "Special Weapon", "Pool Party", "Chroma Pack: Orange", "Chroma Pack: Bubblegum", "Chroma Pack: Honey"}, ["Zed"] = {"Classic", "Shockblade", "SKT T1", "PROJECT"}, ["Ziggs"] = {"Classic", "Mad Scientist", "Major", "Pool Party", "Snow Day", "Master Arcanist"}, ["Zilean"] = {"Classic", "Old Saint", "Groovy", "Shurima Desert", "Time Machine", "Blood Moon"}, ["Zyra"] = {"Classic", "Wildfire", "Haunted", "SKT T1"}, }