Module:Sandbox/Hubianzhen/BTD6 rewards: Difference between revisions

From Blooncyclopedia, the independent Bloons knowledge base
Jump to navigation Jump to search
No edit summary
No edit summary
 
(11 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}
local cg = mw.ext.cargo
local cg = mw.ext.cargo
local heroes = {
Quincy = 'QuincyPortrait.png|x20px|link=Quincy (BTD6)|Quincy]] Quincy',
Gwendolin = 'GwendolinPortrait.png|x20px|link=Gwendolin (BTD6)|Gwendolin]] Gwendolin',
StrikerJones = 'StrikerJonesPortrait.png|x20px|link=Striker Jones (BTD6)|Striker Jones]] Striker Jones',
ObynGreenfoot = 'ObynGreenFoot.png|x20px|link=Obyn Greenfoot (BTD6)|Obyn Greenfoot]] Obyn Greenfoot',
CaptainChurchill = 'CaptainChurchillPortrait.png|x20px|link=Captain Churchill (BTD6)|Captain Churchill]] Captain Churchill',
Benjamin = 'BenjaminPortrait.png|x20px|link=Benjamin (BTD6)|Benjamin]] Benjamin',
Ezili = 'EziliPortrait.png|x20px|link=Ezili (BTD6)|Ezili]] Ezili',
PatFusty = 'PatFustyPortrait.png|x20px|link=Pat Fusty (BTD6)|Pat Fusty]] Pat Fusty',
Adora = 'AdoraPortrait.png|x20px|link=Adora (BTD6)|Adora]] Adora',
AdmiralBrickell = 'AdmiralBrickellPortrait.png|x20px|link=Admiral Brickell (BTD6)|Admiral Brickell]] Admiral Brickell',
Etienne = 'EtiennePortrait.png|x20px|link=Etienne (BTD6)|Etienne]] Etienne',
Sauda = 'SaudaPortrait.png|x20px|link=Sauda (BTD6)|Sauda]] Sauda',
Psi = 'PsiPortrait.png|x20px|link=Psi (BTD6)|Psi]] Psi',
Geraldo = 'GeraldoPortrait.png|x20px|link=Geraldo (BTD6)|Geraldo]] Geraldo',
Corvus = 'CorvusPortrait.png|x20px|link=Corvus (BTD6)|Corvus]] Corvus',
Rosalia = 'RosaliaPortrait.png|x20px|link=Rosalia (BTD6)|Rosalia]] Rosalia'
}
local hero_skins = {
["Cyber Quincy"]='QuincyCyberPortrait.png|x20px|link=Cyber Quincy (BTD6)|Cyber Quincy]] Cyber Quincy',
["Scientist Gwendolin"]='GwendolinPortrait (scientist).png|x20px|link=Scientist Gwendolin (BTD6)|Scientist Gwendolin]] Scientist Gwendolin',
["Sentai Captain Churchill"]='SentaiChurchillLVL1.png|x20px|link=Sentai Churchill (BTD6)|Sentai Churchill]] Sentai Churchill',
["Biker Bones"]='BikerBonesPortrait.png|x20px|link=Biker Bones (BTD6)|Biker Bones]] Biker Bones',
ObynOceanGuardian='OceanObynPortraitsLvl1.png|x20px|link=Ocean Guardian (BTD6)|Ocean Guardian]] Ocean Guardian',
BenJammin='BenJamminPortrait.png|x20px|link=Benjammin DJ (BTD6)|Benjammin DJ]] Benjammin DJ',
SmudgeCatt='SmudgeCattPortraitLvl1.png|x20px|link=Smudge Catt (BTD6)|Smudge Catt]] Smudge Catt',
FustyTheSnowman='FustyTheSnowmanPortrait.png|x20px|link=Fusty the Snowman (BTD6)|Fusty the Snowman]] Fusty the Snowman',
["Wolfpack Quincy"]='WolfpackQuincyPortrait.png|x20px|link=Wolfpack Quincy|Wolfpack Quincy]] Wolfpack Quincy',
JoanOfArcAdora='JoanOfArcPortrait.png|x20px|link=Joan of Arc Adora|Joan of Arc Adora]] Joan of Arc Adora',
CircusGwendolin='CircusGwendolinPortrait.png|x20px|link=Harlegwen|Harlegwen]] Harlegwen',
["Octo Jones"]='OctoJonesPortrait.png|x20px|link=Octojones|Octojones]] Octojones',
DreadPirateBrickell='DreadPirateBrickellPortrait.png|x20px|link=Dread Pirate Brickell|Dread Pirate Brickell]] Dread Pirate Brickell',
MoltenObyn='MountainObynPortraitsLvl1.png|x20px|link=Mountain Guardian|Mountain Guardian]] Mountain Guardian',
SushiBento='SushiBentoPortrait.png|x20px|link=Sushi Bento|Sushi Bento]] Sushi Bento',
ETnEtienne='ETnPortrait.png|x20px|link=ETn|ETn]] ETn',
VikingSauda='VikingSaudaPortrait.png|x20px|link=Viking Sauda|Viking Sauda]] Viking Sauda',
Galaxili='GalaxiliPortraitLvl1.png|x20px|link=Galaxili|Galaxili]] Galaxili',
Psimbals='PsimbalsPortrait.png|x20px|link=Psimbals|Psimbals]] Psimbals',
Voidora='VoidoraPortrait.png|x20px|link=Voidora|Voidora]] Voidora',
["Sleigh Captain Churchill"]='SleighChurchillLV1.png|x20px|link=Sleigh Churchill (BTD6)|Sleigh Churchill]] Sleigh Churchill',
KaijuPat='KaijuPatPortrait.png|x20px|link=Kaiju Pat|Kaiju Pat]] Kaiju Pat',
JiangshiSauda='JiangshiSaudaPortrait.png|x20px|link=Jiangshi Sauda|Jiangshi Sauda]] Jiangshi Sauda',
LifeguardBrickell='LifeguardBrickellPortrait.png|x20px|link=Lifeguard Brickell|Lifeguard Brickell]] Lifeguard Brickell',
BookWyrmEtienne='BookWyrmEtiennePortrait.png|x20px|link=Book Wyrm|Book Wyrm]] Book Wyrm',
GeraldoGentlemanGadgeteer='GadgeteerGeraldoPortrait.png|x20px|link=Gentlemonkey Gadgeteer|Gentlemonkey Gadgeteer]] Gentlemonkey Gadgeteer',
DreamstatePsi = 'PsiDreamstatePortrait.png|x20px|link=Dreamstate Psi|Dreamstate Psi]] Dreamstate Psi',
}
local powers = {
SuperMonkeyStorm = 'SuperMonkeyStormIcon.png|x20px|link=Super Monkey Storm (BTD6)|Super Monkey Storm',
MonkeyBoost = 'MonkeyBoostIcon.png|x20px|link=Monkey Boost (BTD6)|Monkey Boost',
Thrive = 'ThriveIcon.png|x20px|link=Thrive',
DartTime = 'DartTimeIcon.png|x20px|link=Time Stop',
CashDrop = 'CashDropIcon.png|x20px|link=Cash Drop (BTD6)|Cash Drop',
BananaFarmer = 'BananaFarmerIcon.png|x20px|link=Banana Farmer (BTD6)|Banana Farmer',
PortableLake = 'PortableLakeIcon.png|x20px|link=Portable Lake (BTD6)|Portable Lake',
Pontoon = 'PontoonIcon.png|x20px|link=Pontoon (BTD6)|Pontoon',
RoadSpikes = 'HotSpikesIcon.png|x20px|link=Road Spikes (BTD6)|Road Spikes',
MoabMine = 'MoabMineIcon.png|x20px|link=MOAB Mine',
CamoTrap = 'CamoTrapIcon.png|x20px|link=Camo Trap',
GlueTrap = 'GlueTrapIcon.png|x20px|link=Glue Trap',
TechBot = 'TechbotIcon.png|x20px|link=Tech Bot',
EnergisingTotem = 'EnergisingTotemIcon.png|x20px|link=Energizing Totem',
BattleCat = 'BattleCatIcon.png|x20px|link=Battle Cat!'
}
local extras = {
BigBloonsMode = 'BigBloonModeIcon.png|x20px|link=Extra#Big Bloons]][[Extra#Big Bloons|Big Bloons]]',
SmallBloonsMode = 'SmallBloonModeIcon.png|x20px|link=Extra#Small Bloons]][[Extra#Small Bloons|Small Bloons]]',
BigTowersMode = 'BigMonkeysModeIcon.png|x20px|link=Extra#Big Monkey Towers]][[Extra#Big Monkey Towers|Big Monkey Towers]]',
SmallTowersMode = 'SmallMonkeysModeIcon.png|x20px|link=Extra#Small Monkey Towers]][[Extra#Small Monkey Towers|Small Monkey Towers]]',
SmallBossesMode = 'SmallBossModeIcon.png|x20px|link=Extra#Small Bosses]][[Extra#Small Bosses|Small Bosses]]'
}


local tower_names = {
local tower_names = {
Line 30: Line 105:


local towers = {
local towers = {
DartMonkey = '-DartMonkey.png|x20px|link=Dart Monkey (BTD6)]] Dart Monkey',
DartMonkey = '000-DartMonkey.png|x20px|link=Dart Monkey (BTD6)]] Dart Monkey',
BoomerangMonkey = '-BoomerangMonkey.png|x20px|link=Boomerang Monkey (BTD6)]] Boomerang Monkey',
BoomerangMonkey = '000-BoomerangMonkey.png|x20px|link=Boomerang Monkey (BTD6)]] Boomerang Monkey',
BombShooter = '-BombShooter.png|x20px|link=Bomb Shooter (BTD6)]] Bomb Shooter',
BombShooter = '000-BombShooter.png|x20px|link=Bomb Shooter (BTD6)]] Bomb Shooter',
TackShooter = '-TackShooter.png|x20px|link=Tack Shooter (BTD6)]] Tack Shooter',
TackShooter = '000-TackShooter.png|x20px|link=Tack Shooter (BTD6)]] Tack Shooter',
IceMonkey = '-IceMonkey.png|x20px|link=Ice Monkey (BTD6)]] Ice Monkey',
IceMonkey = '000-IceMonkey.png|x20px|link=Ice Monkey (BTD6)]] Ice Monkey',
GlueGunner = '-GlueGunner.png|x20px|link=Glue Gunner (BTD6)]] Glue Gunner',
GlueGunner = '000-GlueGunner.png|x20px|link=Glue Gunner (BTD6)]] Glue Gunner',
SniperMonkey = '-SniperMonkey.png|x20px|link=Sniper Monkey (BTD6)]] Sniper Monkey',
SniperMonkey = '000-SniperMonkey.png|x20px|link=Sniper Monkey (BTD6)]] Sniper Monkey',
MonkeySub = '-MonkeySub.png|x20px|link=Monkey Sub (BTD6)]] Monkey Sub',
MonkeySub = '000-MonkeySub.png|x20px|link=Monkey Sub (BTD6)]] Monkey Sub',
MonkeyBuccaneer = '-MonkeyBuccaneer.png|x20px|link=Monkey Buccaneer (BTD6)]] Monkey Buccaneer',
MonkeyBuccaneer = '000-MonkeyBuccaneer.png|x20px|link=Monkey Buccaneer (BTD6)]] Monkey Buccaneer',
MonkeyAce = '-MonkeyAce.png|x20px|link=Monkey Ace (BTD6)]] Monkey Ace',
MonkeyAce = '000-MonkeyAce.png|x20px|link=Monkey Ace (BTD6)]] Monkey Ace',
HeliPilot = '-HeliPilot.png|x20px|link=Heli Pilot (BTD6)]] Heli Pilot',
HeliPilot = '000-HeliPilot.png|x20px|link=Heli Pilot (BTD6)]] Heli Pilot',
MortarMonkey = '-MortarMonkey.png|x20px|link=Mortar Monkey (BTD6)]] Mortar Monkey',
MortarMonkey = '000-MortarMonkey.png|x20px|link=Mortar Monkey (BTD6)]] Mortar Monkey',
DartlingGunner = '-DartlingGunner.png|x20px|link=Dartling Gunner (BTD6)]] Dartling Gunner',
DartlingGunner = '000-DartlingGunner.png|x20px|link=Dartling Gunner (BTD6)]] Dartling Gunner',
WizardMonkey = '-WIzard.png|x20px|link=Wizard Monkey (BTD6)]] Wizard Monkey',
WizardMonkey = '000-WIzard.png|x20px|link=Wizard Monkey (BTD6)]] Wizard Monkey',
SuperMonkey = '-SuperMonkey.png|x20px|link=Super Monkey (BTD6)]] Super Monkey',
SuperMonkey = '000-SuperMonkey.png|x20px|link=Super Monkey (BTD6)]] Super Monkey',
NinjaMonkey = '-NinjaMonkey.png|x20px|link=Ninja Monkey (BTD6)]] Ninja Monkey',
NinjaMonkey = '000-NinjaMonkey.png|x20px|link=Ninja Monkey (BTD6)]] Ninja Monkey',
Alchemist = '-Alchemist.png|x20px|link=Alchemist (BTD6)]] Alchemist',
Alchemist = '000-Alchemist.png|x20px|link=Alchemist (BTD6)]] Alchemist',
Druid = '-Druid.png|x20px|link=Druid (BTD6)]] Druid',
Druid = '000-Druid.png|x20px|link=Druid (BTD6)]] Druid',
Mermonkey = '-Mermonkey.png|x20px|link=Mermonkey (BTD6)]] Mermonkey',
Mermonkey = '000-Mermonkey.png|x20px|link=Mermonkey (BTD6)]] Mermonkey',
BananaFarm = '-BananaFarm.png|x20px|link=Banana Farm (BTD6)]] Banana Farm',
BananaFarm = '000-BananaFarm.png|x20px|link=Banana Farm (BTD6)]] Banana Farm',
SpikeFactory = '-SpikeFactory.png|x20px|link=Spike Factory (BTD6)]] Spike Factory',
SpikeFactory = '000-SpikeFactory.png|x20px|link=Spike Factory (BTD6)]] Spike Factory',
MonkeyVillage = '-MonkeyVillage.png|x20px|link=Monkey Village (BTD6)]] Monkey Village',
MonkeyVillage = '000-MonkeyVillage.png|x20px|link=Monkey Village (BTD6)]] Monkey Village',
EngineerMonkey = '-EngineerMonkey.png|x20px|link=Engineer Monkey (BTD6)]] Engineer Monkey',
EngineerMonkey = '000-EngineerMonkey.png|x20px|link=Engineer Monkey (BTD6)]] Engineer Monkey',
BeastHandler = '-BeastHandler.png|x20px|link=Beast Handler (BTD6)]] Beast Handler'
BeastHandler = '000-BeastHandler.png|x20px|link=Beast Handler (BTD6)]] Beast Handler'
}
}


Line 84: Line 159:


local reward_for_type = {
local reward_for_type = {
['MonkeyMoney'] = function(value)
return string.format('[[File:BTD6 BloonjaminsIcon.png|x20px|link=Monkey Money]] %s', value)
end,
['KnowledgePoints'] = function(value)
return string.format('[[File:BTD6 KnowledgeIcon.png|x20px|link=Monkey Knowledge Point|Monkey Knowledge Points]] %s', value)
end,
['InstaRank'] = function(value)
return string.format('[[File:BTD6 LvlHolder.png|x20px|link=Level]] %s', value)
end,
['FullTowerUnlock'] = function(value)
['FullTowerUnlock'] = function(value)
return string.format('[[File:BTD6 %s', towers[value])
return string.format('[[File:BTD6 %s', towers[value])
end,
['RandomPower'] = function(value)
local delimiter = string.find(value, ',')
return string.format('[[File:BTD6 PowersIcon.png|x20px|link=Power|Powers]] "%s" power ×%s', string.sub(value, 1, delimiter - 1), string.sub(value, delimiter + 1, string.len(value)))
end,
['Trophy'] = function(value)
return string.format('[[File:BTD6 TrophyIcon.png|x20px|link=Trophy (BTD6)|Trophies]] %s', value)
end,
['RacesPass'] = function(value)
return string.format('[[File:BTD6 RacePassIconSmall.png|x20px|link=Race Pass]] %s', value)
end,
['CollectionEvent'] = function(value)
return string.format('[[File:BTD6 EventTotemLootIcon.png|x20px|link=Collection Event (BTD6)|Collection Rewards]] %s', value)
end,
['Hero'] = function(value)
return string.format('[[File:BTD6 %s', heroes[value])
end,
['HeroSkin'] = function(value)
return string.format('[[File:BTD6 %s', hero_skins[value])
end,
['Power'] = function(value)
local delimiter = string.find(value, ',')
if delimiter ~= nil then
return string.format('[[File:BTD6 %s]] ×%s',
powers[string.sub(value, 1, delimiter - 1)],
string.sub(value, delimiter + 1, string.len(value)))
else
return string.format('[[File:BTD6 %s]] ×1', powers[value])
end
end,
end,
Line 94: Line 216:
local mid = tonumber(string.sub(value, delimiter + 2, delimiter + 2))
local mid = tonumber(string.sub(value, delimiter + 2, delimiter + 2))
local btm = tonumber(string.sub(value, delimiter + 3, delimiter + 3))
local btm = tonumber(string.sub(value, delimiter + 3, delimiter + 3))
local tower = string.sub(value, 1, delimiter - 1)
--[[ If both paths equal, the order is:
--[[ Insta-towers:
If both paths equal, the order is:
Middle, Top, Bottom
Middle, Top, Bottom
exceptions:  
exceptions:  
Dart middle then bottom
Dart middle then bottom (t1 and t2)
Bucc bottom then middle
Bucc middle then bottom (t2)
can be volatile, so keeping an eye on those changes
]]--
]]--
-- Middle
if mid >= top and mid >= btm then
if mid >= top and mid >= btm then
top, btm = 0
top, btm = 0, 0
-- Top
elseif top >= mid and top >= btm then
elseif top >= mid and top >= btm then
mid, btm = 0
if top == btm and (tower == "DartMonkey" or (tower == "MonkeyBuccaneer" and top == 2)) then top, mid = 0, 0
else
mid, btm = 0, 0
end
-- Bottom
else
top, mid = 0, 0
end
end
return string.format('[[File:BTD6 %s%s%s%s]] %s-%s-%s',  
return string.format('[[File:BTD6 %s%s%s%s]] %s-%s-%s',  
tostring(top), tostring(mid), tostring(btm),
tostring(top), tostring(mid), tostring(btm), insta_towers[tower],
insta_towers[string.sub(value, 1, delimiter - 1)],
string.sub(value, delimiter + 1, delimiter + 1), string.sub(value, delimiter + 2, delimiter + 2), string.sub(value, delimiter + 3, delimiter + 3)
string.sub(value, delimiter + 1, delimiter + 1), string.sub(value, delimiter + 2, delimiter + 2), string.sub(value, delimiter + 3, delimiter + 3)
)
)
Line 146: Line 278:
end,
end,
['BigBloonsMode'] =  function(value) return '[[File:BTD6 BigBloonModeIcon.png|x20px|link=Extra#Big Bloons|Big Bloons]] Big Bloons' end,
['SmallBloonsMode'] = function(value) return '[[File:BTD6 SmallBloonModeIcon.png|x20px|link=Extra#Small Bloons|Small Bloons]] Small Bloons' end,
['BigTowersMode'] =  function(value) return '[[File:BTD6 BigMonkeysModeIcon.png|x20px|link=Extra#Big Monkey Towers|Big Monkey Towers]] Big Monkey Towers' end,
['SmallTowersMode'] = function(value) return '[[File:BTD6 SmallMonkeysModeIcon.png|x20px|link=Extra#Small Monkey Towers|Small Monkey Towers]] Small Monkey Towers' end,
['SmallBossesMode'] = function(value) return '[[File:BTD6 SmallBossModeIcon.png|x20px|link=Extra#Small Bosses|Small Bosses]] Small Bosses' end,
['DoubleCashMode'] = function(value) return '[[File:BTD6 DoubleCashModeShop.png|x20px|link=Double Cash Mode (BTD6)|Double Cash Mode]] Double Cash Mode' end,
['FastTrack'] = function(value) return '[[File:BTD6 FastTrackIconSmall.png|x20px|link=Fast Track Mode]] Fast Track Mode' end,
['MapEditorUnlock'] = function(value) return 'Map Editor unlocked' end,
['TrophyStoreItem'] = function(value)
local result = cg.query('btd6_cosmetic_items', '_pageName, name, shortname, image', {
where = string.format('id = "%s"', value)
})
return string.format('[[File:%s|x20px|link=%s|%s]] %s', result[1].image, result[1]._pageName, result[1].name, result[1].shortname)
end
}
}


function p.parse(text)
function p.parse(text, source)
local reward_text = {}
local reward_text = {}
Line 157: Line 304:
if delimiter ~= nil then
if delimiter ~= nil then
table.insert(reward_text, reward_for_type[string.sub(reward, 1, delimiter - 1)](string.sub(reward, delimiter + 1, string.len(reward))))
table.insert(reward_text, reward_for_type[string.sub(reward, 1, delimiter - 1)](string.sub(reward, delimiter + 1, string.len(reward))))
--[[if string.sub(reward, 1, delimiter - 1) == 'TrophyStoreItem' and source ~= nil then
if string.sub(reward, 1, delimiter - 1) == 'TrophyStoreItem' and source ~= nil then
cg.store('btd6_cosmetic_sources', {
cg.store('btd6_cosmetic_sources', {
name = source,
name = source,
item = string.sub(reward, delimiter + 1, string.len(reward))
item = string.sub(reward, delimiter + 1, string.len(reward))
})
})
end]]--
end
else
else
Line 173: Line 320:


function p.main(frame)
function p.main(frame)
return p.parse(frame.args[1])
return p.parse(frame.args[1], frame.args['source'])
end
end


return p
return p

Latest revision as of 17:15, 24 February 2025

Documentation for this module may be created at Module:Sandbox/Hubianzhen/BTD6 rewards/doc

local p = {}
local cg = mw.ext.cargo

local heroes = {
	Quincy = 'QuincyPortrait.png|x20px|link=Quincy (BTD6)|Quincy]] Quincy',
	Gwendolin = 'GwendolinPortrait.png|x20px|link=Gwendolin (BTD6)|Gwendolin]] Gwendolin',
	StrikerJones = 'StrikerJonesPortrait.png|x20px|link=Striker Jones (BTD6)|Striker Jones]] Striker Jones',
	ObynGreenfoot = 'ObynGreenFoot.png|x20px|link=Obyn Greenfoot (BTD6)|Obyn Greenfoot]] Obyn Greenfoot',
	CaptainChurchill = 'CaptainChurchillPortrait.png|x20px|link=Captain Churchill (BTD6)|Captain Churchill]] Captain Churchill',
	Benjamin = 'BenjaminPortrait.png|x20px|link=Benjamin (BTD6)|Benjamin]] Benjamin',
	Ezili = 'EziliPortrait.png|x20px|link=Ezili (BTD6)|Ezili]] Ezili',
	PatFusty = 'PatFustyPortrait.png|x20px|link=Pat Fusty (BTD6)|Pat Fusty]] Pat Fusty',
	Adora = 'AdoraPortrait.png|x20px|link=Adora (BTD6)|Adora]] Adora',
	AdmiralBrickell = 'AdmiralBrickellPortrait.png|x20px|link=Admiral Brickell (BTD6)|Admiral Brickell]] Admiral Brickell',
	Etienne = 'EtiennePortrait.png|x20px|link=Etienne (BTD6)|Etienne]] Etienne',
	Sauda = 'SaudaPortrait.png|x20px|link=Sauda (BTD6)|Sauda]] Sauda',
	Psi = 'PsiPortrait.png|x20px|link=Psi (BTD6)|Psi]] Psi',
	Geraldo = 'GeraldoPortrait.png|x20px|link=Geraldo (BTD6)|Geraldo]] Geraldo',
	Corvus = 'CorvusPortrait.png|x20px|link=Corvus (BTD6)|Corvus]] Corvus',
	Rosalia = 'RosaliaPortrait.png|x20px|link=Rosalia (BTD6)|Rosalia]] Rosalia'
}

local hero_skins = {
	["Cyber Quincy"]='QuincyCyberPortrait.png|x20px|link=Cyber Quincy (BTD6)|Cyber Quincy]] Cyber Quincy',
	["Scientist Gwendolin"]='GwendolinPortrait (scientist).png|x20px|link=Scientist Gwendolin (BTD6)|Scientist Gwendolin]] Scientist Gwendolin',
	["Sentai Captain Churchill"]='SentaiChurchillLVL1.png|x20px|link=Sentai Churchill (BTD6)|Sentai Churchill]] Sentai Churchill',
	["Biker Bones"]='BikerBonesPortrait.png|x20px|link=Biker Bones (BTD6)|Biker Bones]] Biker Bones',
	ObynOceanGuardian='OceanObynPortraitsLvl1.png|x20px|link=Ocean Guardian (BTD6)|Ocean Guardian]] Ocean Guardian',
	BenJammin='BenJamminPortrait.png|x20px|link=Benjammin DJ (BTD6)|Benjammin DJ]] Benjammin DJ',
	SmudgeCatt='SmudgeCattPortraitLvl1.png|x20px|link=Smudge Catt (BTD6)|Smudge Catt]] Smudge Catt',
	FustyTheSnowman='FustyTheSnowmanPortrait.png|x20px|link=Fusty the Snowman (BTD6)|Fusty the Snowman]] Fusty the Snowman',
	["Wolfpack Quincy"]='WolfpackQuincyPortrait.png|x20px|link=Wolfpack Quincy|Wolfpack Quincy]] Wolfpack Quincy',
	JoanOfArcAdora='JoanOfArcPortrait.png|x20px|link=Joan of Arc Adora|Joan of Arc Adora]] Joan of Arc Adora',
	CircusGwendolin='CircusGwendolinPortrait.png|x20px|link=Harlegwen|Harlegwen]] Harlegwen',
	["Octo Jones"]='OctoJonesPortrait.png|x20px|link=Octojones|Octojones]] Octojones',
	DreadPirateBrickell='DreadPirateBrickellPortrait.png|x20px|link=Dread Pirate Brickell|Dread Pirate Brickell]] Dread Pirate Brickell',
	MoltenObyn='MountainObynPortraitsLvl1.png|x20px|link=Mountain Guardian|Mountain Guardian]] Mountain Guardian',
	SushiBento='SushiBentoPortrait.png|x20px|link=Sushi Bento|Sushi Bento]] Sushi Bento',
	ETnEtienne='ETnPortrait.png|x20px|link=ETn|ETn]] ETn',
	VikingSauda='VikingSaudaPortrait.png|x20px|link=Viking Sauda|Viking Sauda]] Viking Sauda',
	Galaxili='GalaxiliPortraitLvl1.png|x20px|link=Galaxili|Galaxili]] Galaxili',
	Psimbals='PsimbalsPortrait.png|x20px|link=Psimbals|Psimbals]] Psimbals',
	Voidora='VoidoraPortrait.png|x20px|link=Voidora|Voidora]] Voidora',
	["Sleigh Captain Churchill"]='SleighChurchillLV1.png|x20px|link=Sleigh Churchill (BTD6)|Sleigh Churchill]] Sleigh Churchill',
	KaijuPat='KaijuPatPortrait.png|x20px|link=Kaiju Pat|Kaiju Pat]] Kaiju Pat',
	JiangshiSauda='JiangshiSaudaPortrait.png|x20px|link=Jiangshi Sauda|Jiangshi Sauda]] Jiangshi Sauda',
	LifeguardBrickell='LifeguardBrickellPortrait.png|x20px|link=Lifeguard Brickell|Lifeguard Brickell]] Lifeguard Brickell',
	BookWyrmEtienne='BookWyrmEtiennePortrait.png|x20px|link=Book Wyrm|Book Wyrm]] Book Wyrm',
	GeraldoGentlemanGadgeteer='GadgeteerGeraldoPortrait.png|x20px|link=Gentlemonkey Gadgeteer|Gentlemonkey Gadgeteer]] Gentlemonkey Gadgeteer',
	DreamstatePsi = 'PsiDreamstatePortrait.png|x20px|link=Dreamstate Psi|Dreamstate Psi]] Dreamstate Psi',
}

local powers = {
	SuperMonkeyStorm = 'SuperMonkeyStormIcon.png|x20px|link=Super Monkey Storm (BTD6)|Super Monkey Storm',
	MonkeyBoost = 'MonkeyBoostIcon.png|x20px|link=Monkey Boost (BTD6)|Monkey Boost',
	Thrive = 'ThriveIcon.png|x20px|link=Thrive',
	DartTime = 'DartTimeIcon.png|x20px|link=Time Stop',
	CashDrop = 'CashDropIcon.png|x20px|link=Cash Drop (BTD6)|Cash Drop',
	BananaFarmer = 'BananaFarmerIcon.png|x20px|link=Banana Farmer (BTD6)|Banana Farmer',
	PortableLake = 'PortableLakeIcon.png|x20px|link=Portable Lake (BTD6)|Portable Lake',
	Pontoon = 'PontoonIcon.png|x20px|link=Pontoon (BTD6)|Pontoon',
	RoadSpikes = 'HotSpikesIcon.png|x20px|link=Road Spikes (BTD6)|Road Spikes',
	MoabMine = 'MoabMineIcon.png|x20px|link=MOAB Mine',
	CamoTrap = 'CamoTrapIcon.png|x20px|link=Camo Trap',
	GlueTrap = 'GlueTrapIcon.png|x20px|link=Glue Trap',
	TechBot = 'TechbotIcon.png|x20px|link=Tech Bot',
	EnergisingTotem = 'EnergisingTotemIcon.png|x20px|link=Energizing Totem',
	BattleCat = 'BattleCatIcon.png|x20px|link=Battle Cat!'
}

local extras = {
	BigBloonsMode = 'BigBloonModeIcon.png|x20px|link=Extra#Big Bloons]][[Extra#Big Bloons|Big Bloons]]',
	SmallBloonsMode = 'SmallBloonModeIcon.png|x20px|link=Extra#Small Bloons]][[Extra#Small Bloons|Small Bloons]]',
	BigTowersMode = 'BigMonkeysModeIcon.png|x20px|link=Extra#Big Monkey Towers]][[Extra#Big Monkey Towers|Big Monkey Towers]]',
	SmallTowersMode = 'SmallMonkeysModeIcon.png|x20px|link=Extra#Small Monkey Towers]][[Extra#Small Monkey Towers|Small Monkey Towers]]',
	SmallBossesMode = 'SmallBossModeIcon.png|x20px|link=Extra#Small Bosses]][[Extra#Small Bosses|Small Bosses]]'
}

local tower_names = {
	DartMonkey = 'Dart Monkey',
	BoomerangMonkey = 'Boomerang Monkey',
	BombShooter = 'Bomb Shooter',
	TackShooter = 'Tack Shooter',
	IceMonkey = 'Ice Monkey',
	GlueGunner = 'Glue Gunner',
	SniperMonkey = 'Sniper Monkey',
	MonkeySub = 'Monkey Sub',
	MonkeyBuccaneer = 'Monkey Buccaneer',
	MonkeyAce = 'Monkey Ace',
	HeliPilot = 'Heli Pilot',
	MortarMonkey = 'Mortar Monkey',
	DartlingGunner = 'Dartling Gunner',
	WizardMonkey = 'Wizard Monkey',
	SuperMonkey = 'Super Monkey',
	NinjaMonkey = 'Ninja Monkey',
	Alchemist = 'Alchemist',
	Druid = 'Druid',
	Mermonkey = 'Mermonkey',
	BananaFarm = 'Banana Farm',
	SpikeFactory = 'Spike Factory',
	MonkeyVillage = 'Monkey Village',
	EngineerMonkey = 'Engineer Monkey',
	BeastHandler = 'Beast Handler'
}

local towers = {
	DartMonkey = '000-DartMonkey.png|x20px|link=Dart Monkey (BTD6)]] Dart Monkey',
	BoomerangMonkey = '000-BoomerangMonkey.png|x20px|link=Boomerang Monkey (BTD6)]] Boomerang Monkey',
	BombShooter = '000-BombShooter.png|x20px|link=Bomb Shooter (BTD6)]] Bomb Shooter',
	TackShooter = '000-TackShooter.png|x20px|link=Tack Shooter (BTD6)]] Tack Shooter',
	IceMonkey = '000-IceMonkey.png|x20px|link=Ice Monkey (BTD6)]] Ice Monkey',
	GlueGunner = '000-GlueGunner.png|x20px|link=Glue Gunner (BTD6)]] Glue Gunner',
	SniperMonkey = '000-SniperMonkey.png|x20px|link=Sniper Monkey (BTD6)]] Sniper Monkey',
	MonkeySub = '000-MonkeySub.png|x20px|link=Monkey Sub (BTD6)]] Monkey Sub',
	MonkeyBuccaneer = '000-MonkeyBuccaneer.png|x20px|link=Monkey Buccaneer (BTD6)]] Monkey Buccaneer',
	MonkeyAce = '000-MonkeyAce.png|x20px|link=Monkey Ace (BTD6)]] Monkey Ace',
	HeliPilot = '000-HeliPilot.png|x20px|link=Heli Pilot (BTD6)]] Heli Pilot',
	MortarMonkey = '000-MortarMonkey.png|x20px|link=Mortar Monkey (BTD6)]] Mortar Monkey',
	DartlingGunner = '000-DartlingGunner.png|x20px|link=Dartling Gunner (BTD6)]] Dartling Gunner',
	WizardMonkey = '000-WIzard.png|x20px|link=Wizard Monkey (BTD6)]] Wizard Monkey',
	SuperMonkey = '000-SuperMonkey.png|x20px|link=Super Monkey (BTD6)]] Super Monkey',
	NinjaMonkey = '000-NinjaMonkey.png|x20px|link=Ninja Monkey (BTD6)]] Ninja Monkey',
	Alchemist = '000-Alchemist.png|x20px|link=Alchemist (BTD6)]] Alchemist',
	Druid = '000-Druid.png|x20px|link=Druid (BTD6)]] Druid',
	Mermonkey = '000-Mermonkey.png|x20px|link=Mermonkey (BTD6)]] Mermonkey',
	BananaFarm = '000-BananaFarm.png|x20px|link=Banana Farm (BTD6)]] Banana Farm',
	SpikeFactory = '000-SpikeFactory.png|x20px|link=Spike Factory (BTD6)]] Spike Factory',
	MonkeyVillage = '000-MonkeyVillage.png|x20px|link=Monkey Village (BTD6)]] Monkey Village',
	EngineerMonkey = '000-EngineerMonkey.png|x20px|link=Engineer Monkey (BTD6)]] Engineer Monkey',
	BeastHandler = '000-BeastHandler.png|x20px|link=Beast Handler (BTD6)]] Beast Handler'
}

local insta_towers = {
	DartMonkey = '-DartMonkeyInsta.png|x20px|link=Dart Monkey (BTD6)',
	BoomerangMonkey = '-BoomerangMonkeyInsta.png|x20px|link=Boomerang Monkey (BTD6)',
	BombShooter = '-BombShooterInsta.png|x20px|link=Bomb Shooter (BTD6)',
	TackShooter = '-TackShooterInsta.png|x20px|link=Tack Shooter (BTD6)',
	IceMonkey = '-IceMonkeyInsta.png|x20px|link=Ice Monkey (BTD6)',
	GlueGunner = '-GlueGunnerInsta.png|x20px|link=Glue Gunner (BTD6)',
	SniperMonkey = '-SniperMonkeyInsta.png|x20px|link=Sniper Monkey (BTD6)',
	MonkeySub = '-MonkeySubInsta.png|x20px|link=Monkey Sub (BTD6)',
	MonkeyBuccaneer = '-MonkeyBuccaneerInsta.png|x20px|link=Monkey Buccaneer (BTD6)',
	MonkeyAce = '-MonkeyAceInsta.png|x20px|link=Monkey Ace (BTD6)',
	HeliPilot = '-HeliPilotInsta.png|x20px|link=Heli Pilot (BTD6)',
	MortarMonkey = '-MortarMonkeyInsta.png|x20px|link=Mortar Monkey (BTD6)',
	DartlingGunner = '-DartlingGunnerInsta.png|x20px|link=Dartling Gunner (BTD6)',
	WizardMonkey = '-WIzardInsta.png|x20px|link=Wizard Monkey (BTD6)',
	SuperMonkey = '-SuperMonkeyInsta.png|x20px|link=Super Monkey (BTD6)',
	NinjaMonkey = '-NinjaMonkeyInsta.png|x20px|link=Ninja Monkey (BTD6)',
	Alchemist = '-AlchemistInsta.png|x20px|link=Alchemist (BTD6)',
	Druid = '-DruidInsta.png|x20px|link=Druid (BTD6)',
	Mermonkey = '-MermonkeyInsta.png|x20px|link=Mermonkey (BTD6)',
	BananaFarm = '-BananaFarmInsta.png|x20px|link=Banana Farm (BTD6)',
	SpikeFactory = '-SpikeFactoryInsta.png|x20px|link=Spike Factory (BTD6)',
	MonkeyVillage = '-MonkeyVillageInsta.png|x20px|link=Monkey Village (BTD6)',
	EngineerMonkey = '-EngineerMonkeyInsta.png|x20px|link=Engineer Monkey (BTD6)',
	BeastHandler = '-BeastHandlerInsta.png|x20px|link=Beast Handler (BTD6)'
}

local reward_for_type = {
	['MonkeyMoney'] = function(value)
		return string.format('[[File:BTD6 BloonjaminsIcon.png|x20px|link=Monkey Money]] %s', value)
	end,
	
	['KnowledgePoints'] = function(value)
		return string.format('[[File:BTD6 KnowledgeIcon.png|x20px|link=Monkey Knowledge Point|Monkey Knowledge Points]] %s', value)
	end,
	
	['InstaRank'] = function(value)
		return string.format('[[File:BTD6 LvlHolder.png|x20px|link=Level]] %s', value)
	end,
	
	['FullTowerUnlock'] = function(value)
		return string.format('[[File:BTD6 %s', towers[value])
	end,
	
	['RandomPower'] = function(value)
		local delimiter = string.find(value, ',')
		return string.format('[[File:BTD6 PowersIcon.png|x20px|link=Power|Powers]] "%s" power ×%s', string.sub(value, 1, delimiter - 1), string.sub(value, delimiter + 1, string.len(value)))
	end,
	
	['Trophy'] = function(value)
		return string.format('[[File:BTD6 TrophyIcon.png|x20px|link=Trophy (BTD6)|Trophies]] %s', value)
	end,
	
	['RacesPass'] = function(value)
		return string.format('[[File:BTD6 RacePassIconSmall.png|x20px|link=Race Pass]] %s', value)
	end,
	
	['CollectionEvent'] = function(value)
		return string.format('[[File:BTD6 EventTotemLootIcon.png|x20px|link=Collection Event (BTD6)|Collection Rewards]] %s', value)
	end,
	
	['Hero'] = function(value)
		return string.format('[[File:BTD6 %s', heroes[value])
	end,
	
	['HeroSkin'] = function(value)
		return string.format('[[File:BTD6 %s', hero_skins[value])
	end,
	
	['Power'] = function(value)
		local delimiter = string.find(value, ',')
		if delimiter ~= nil then
			return string.format('[[File:BTD6 %s]] ×%s',
				powers[string.sub(value, 1, delimiter - 1)],
				string.sub(value, delimiter + 1, string.len(value)))
		else
			return string.format('[[File:BTD6 %s]] ×1', powers[value])
		end
	end,
	
	['InstaMonkey'] = function(value)
		local delimiter = string.find(value, ',')
		local top = tonumber(string.sub(value, delimiter + 1, delimiter + 1))
		local mid =	tonumber(string.sub(value, delimiter + 2, delimiter + 2))
		local btm =	tonumber(string.sub(value, delimiter + 3, delimiter + 3))
		local tower = string.sub(value, 1, delimiter - 1)
		
		--[[	Insta-towers:
				If both paths equal, the order is:
				Middle, Top, Bottom
				
				exceptions: 
				Dart middle then bottom (t1 and t2)
				Bucc middle then bottom (t2)
				can be volatile, so keeping an eye on those changes
		]]--
		
		-- Middle
		if mid >= top and mid >= btm then
			top, btm = 0, 0
		-- Top
		elseif top >= mid and top >= btm then
			if top == btm and (tower == "DartMonkey" or (tower == "MonkeyBuccaneer" and top == 2)) then top, mid = 0, 0
			else
				mid, btm = 0, 0
			end
		-- Bottom
		else
			top, mid = 0, 0
		end
		
		return string.format('[[File:BTD6 %s%s%s%s]] %s-%s-%s', 
			tostring(top), tostring(mid), tostring(btm), insta_towers[tower],
			string.sub(value, delimiter + 1, delimiter + 1), string.sub(value, delimiter + 2, delimiter + 2), string.sub(value, delimiter + 3, delimiter + 3)
		)
	end,
	
	['RandomInstaMonkey'] = function(value)
		local values = {}
		for v in string.gmatch(value, '([^,]+)') do
			table.insert(values, v)
		end
		
		local tier = values[1]
		local amt = values[2]
		local tower = tower_names[values[3]]
		
		-- tier 0
		if values[1] == "0" then
			if #values == 3 then
				-- random tier 0 of a specific tower
				return string.format('[[File:BTD6 InstaRandomTier1.png|x20px|Tier 0 %s Insta Monkey|link=Insta Monkey]] %s ×%s', tower, tower, amt)
			else
				-- random tier 0
				return string.format('[[File:BTD6 InstaRandomTier1.png|x20px|Tier 0 Insta Monkey|link=Insta Monkey]] ×%s', amt)
			end
		else
			if #values == 3 then
				-- random tier X of a specific tower
				return string.format('[[File:BTD6 InstaRandomTier%s.png|x20px|Tier %s %s Insta Monkey|link=Insta Monkey]] %s ×%s', tier, tier, tower, tower, amt)
			else
				-- random tier X
				return string.format('[[File:BTD6 InstaRandomTier%s.png|x20px|Tier %s Insta Monkey|link=Insta Monkey]] ×%s', tier, tier, amt)
			end
		end
	end,
	
	['BigBloonsMode'] =   function(value) return '[[File:BTD6 BigBloonModeIcon.png|x20px|link=Extra#Big Bloons|Big Bloons]] Big Bloons' end,
	['SmallBloonsMode'] = function(value) return '[[File:BTD6 SmallBloonModeIcon.png|x20px|link=Extra#Small Bloons|Small Bloons]] Small Bloons' end,
	['BigTowersMode'] =   function(value) return '[[File:BTD6 BigMonkeysModeIcon.png|x20px|link=Extra#Big Monkey Towers|Big Monkey Towers]] Big Monkey Towers' end,
	['SmallTowersMode'] = function(value) return '[[File:BTD6 SmallMonkeysModeIcon.png|x20px|link=Extra#Small Monkey Towers|Small Monkey Towers]] Small Monkey Towers' end,
	['SmallBossesMode'] = function(value) return '[[File:BTD6 SmallBossModeIcon.png|x20px|link=Extra#Small Bosses|Small Bosses]] Small Bosses' end,
	['DoubleCashMode'] = function(value) return '[[File:BTD6 DoubleCashModeShop.png|x20px|link=Double Cash Mode (BTD6)|Double Cash Mode]] Double Cash Mode' end,
	['FastTrack'] = function(value) return '[[File:BTD6 FastTrackIconSmall.png|x20px|link=Fast Track Mode]] Fast Track Mode' end,
	['MapEditorUnlock'] = function(value) return 'Map Editor unlocked' end,
	
	['TrophyStoreItem'] = function(value)
		local result = cg.query('btd6_cosmetic_items', '_pageName, name, shortname, image', {
			where = string.format('id = "%s"', value)
		})
		return string.format('[[File:%s|x20px|link=%s|%s]] %s', result[1].image, result[1]._pageName, result[1].name, result[1].shortname)
	end
}

function p.parse(text, source)
	local reward_text = {}
	
	-- split text by '#'
	for reward in string.gmatch(text, '([^#]+)') do
		-- split reward by ':'
		local delimiter = string.find(reward, ':')
		if delimiter ~= nil then
			table.insert(reward_text, reward_for_type[string.sub(reward, 1, delimiter - 1)](string.sub(reward, delimiter + 1, string.len(reward))))
			if string.sub(reward, 1, delimiter - 1) == 'TrophyStoreItem' and source ~= nil then
				cg.store('btd6_cosmetic_sources', {
					name = source,
					item = string.sub(reward, delimiter + 1, string.len(reward))
				})
			end
				
		else
			table.insert(reward_text, reward_for_type[reward]())	
		end
	end
	
	return table.concat(reward_text, ', ')
end

function p.main(frame)
	return p.parse(frame.args[1], frame.args['source'])
end

return p