Module:Building

--[==[-- -- Lua script to get Building Information -- building: get Building data based on input parameters 1 = Building Name 2 = Enchantment Number 3 = Event Name / IP Short Name

Unknown is returned if building is not in data. --]==]

local p = {}

---[=[ For testing remove 1 '-' from start of line local attrData = mw.loadData('Module:Building/data') --[==[]=] local attrData = { ["Under the Sea"] = { ["W"] = true, ["A"] = "Jamming with a Hot Crustacean Band", ["R"] = { ["magic"] = {"4h", 12, 155, "IP-TLM", "Sebastian,3", "King triton,2", "Ariel,3", "Ursula,2", T=true}, ["tlm"] = {"4h", 23, 32, "", "", "", "", "", true}, ["wir"] = {"4h", 12, 50, "IP-TLM", "Sebastian,2", "King triton,3", "Ariel,2", "Ursula,3"}, }   }, } --]==]

local EC = require("Module:EC").getEC local TOK = require("Module:CharacterToken").getToken local npc = require("Module:NPC").getNPC local lte = require("Module:LTEvent").getLTE local util = require("Module:Utility")

function p.building(frame) local tArgs = util.getArgs(frame)

local buildName = tArgs[1] or "" local enchLvl = tArgs[2] or "" local event = tArgs[3] or ""

buildName = buildName:gsub("^%s*(.-)%s*$", "%1") or '' if buildName == "" then buildName = mw.title.getCurrentTitle.text else buildName = mw.text.decode(buildName, false) end enchLvl = enchLvl:upper:gsub("^%s*(.-)%s*$", "%1") or '' event = event:lower:gsub("^%s*(.-)%s*$", "%1") or ''

local outType = "D"

if enchLvl:match("^[DRM]$") then outType = enchLvl enchLvl = "" end

enchLvl = enchLvl:gsub("[^0-5]", "")

local data = {}

if attrData[buildName] then data = attrData[buildName] else data = { ["A"] = "?", ["R"] = { ["magic"] = {"?h", "?", "?"}, }		}		buildName = "Unknown" end

local reward = ""

if event ~= "" and data["R"][event] then reward = event else reward = "magic" -- current event (no magic entry yet) -- pick the first reward key (should be for current event) if not data["R"]["magic"] then for k, v in pairs(data["R"]) do				if k ~= "after" then reward = k					break end end end end

local tFunc = { -- Magic Reward only ["M"] = function if data["R"][reward][1] ~= "" then return data["R"][reward][3] end end, -- Rewards only ["R"] = function if data["R"][reward][1] ~= "" then local tRet = {" Rewards (Every ", data["R"][reward][1], ") '''", "", "", "", EC({reward}), data["R"][reward][3], "", "", "'''"								}						if bData[2] ~= 0 then tRet[4] = EC({"XP"}) tRet[5] = data["R"][reward][2] tRet[6] = ", " end if data["R"][reward]["T"] and event == "" then tRet[ 9] = ", " if reward ~= "magic" then tRet[10] = npc({"Gold Trophies", nil, nil, nil, reward}) else tRet[10] = npc({"Gold Trophies", "G"}) end end return table.concat(tRet) else return "" end end, -- Default (token rewards table row) ["D"] = function local tRet = {"|-\n| style=\"text-align: center;\"|", "", "\n|", "", ": ", "", "", "", "", "\n|", "", '\n| data-sort-value="', "", '"|', "", "\n| nowrap|", "", "", ", ", "", "", "", "", "", ""							}					local buildType = "Ba" if data[1] then buildType = "Bc" end

bData = data["R"][reward]

tRet[ 2] = " " tRet[ 4] = buildName tRet[ 6] = data["A"] if enchLvl ~= "" then tRet[ 7] = " ''* Enchantment Level " tRet[ 8] = tostring(enchLvl) tRet[ 9] = "'' " end if data["W"] then tRet[11] = npc({"Happiness"}) end if bData[1] ~= "" then local durNumb, durHMS = string.match(bData[1], "^([%d%?]+)([hms])$") local durNumb = tonumber(durNumb) if durNumb then if durHMS == "h" then durNumb = durNumb * 3600 elseif durHMS == "m" then durNumb = durNumb * 60 end else durNumb = 99900 end tRet[13] = durNumb tRet[15] = bData[1] if bData[2] ~= 0 then tRet[17] = EC({"XP"}) tRet[18] = bData[2] end tRet[20] = EC({reward}) tRet[21] = bData[3] else tRet[19] = "" end if bData["T"] and event == "" then tRet[22] = ", " if reward ~= "magic" then tRet[23] = npc({"Gold Trophies", nil, nil, nil, event}) else tRet[23] = npc({"Gold Trophies", "G"}) end end if event == "" and (bData[4] and bData[4] ~= "") or(bData[5] and bData[5] ~= "") then tRet[24] = "\n| nowrap|" local tokens = (bData[4] or "") if enchLvl == "1" then tokens = (bData[4] or "") .. "$" .. (bData[5] or "") elseif enchLvl == "2" then tokens = (bData[4] or "") .. "$" .. (bData[5] or "") .. "$" .. (bData[6] or "") elseif enchLvl == "3" then tokens = (bData[4] or "") .. "$" .. (bData[5] or "") .. "$" .. (bData[6] or "") .. "$" .. (bData[7] or "") elseif enchLvl == "4" or enchLvl == "5" then tokens = (bData[4] or "") .. "$" .. (bData[5] or "") .. "$" .. (bData[6] or "") .. "$" .. (bData[7] or "") .. "$" .. (bData[8] or "") end tRet[25] = TOK({tokens, "", "B"}) end return table.concat(tRet) end, }	return tFunc[outType] end

function p.getBuildinginfo(frame) local tArgs = util.getArgs(frame) local buildName = tArgs[1] or mw.title.getCurrentTitle.text buildName = buildName:gsub("^%s*(.-)%s*$", "%1") or '' local VL = mw.ext.VariablesLua local data = {}

if attrData[buildName] then data = attrData[buildName] else data = { ["A"] = "?", ["R"] = { ["magic"] = {"?h", "?", "?"}, }		}	end

local activity = data["A"] if data["W"] then activity = npc({"Happiness"}) .. " " .. activity end VL.vardefine("activity", activity)

local reward = "magic" if not data["R"]["magic"] then for k, v in pairs(data["R"]) do			if k ~= "after" then reward = k				VL.vardefine("ltename", lte({k, nil, "K"})) break end end end

local time = "" local rewards = "" local chancerewards = ""

if data["R"][reward][1] ~= "" then time = data["R"][reward][1] if data["R"][reward][2] ~= 0 then rewards = EC({"XP"}) .. data["R"][reward][2] .. ", "		end rewards = rewards .. EC({reward}) .. data["R"][reward][3] if data["R"][reward]["T"] then rewards = rewards .. ", " .. npc({"Gold Trophies", "G"}) end

local tokens = (data["R"][reward][4] or "") .. "$" .. (data["R"][reward][5] or "") .. "$" .. (data["R"][reward][6] or "") .. "$" .. (data["R"][reward][7] or "") .. "$" .. (data["R"][reward][8] or "") chancerewards = TOK({tokens, "I", "B"}) end

VL.vardefine("time", time) VL.vardefine("rewards", rewards) VL.vardefine("chancerewards", chancerewards)

local eventinfo = {}

for k, v in pairs(data["R"]) do		if k ~= "magic" then table.insert(eventinfo, {(v["E"] or 1), k, v}) end end

table.sort(eventinfo, function(a,b) return a[1] < b[1] end)

for _, data in pairs(eventinfo) do		if reward ~= data[2] then VL.vardefine("ltename" .. data[1], lte({data[2], nil, "K"})) VL.vardefine("eventtime" .. data[1], data[3][1]) if data[3][2] ~= 0 then eventrewards = EC({"XP"}) .. data[3][2] .. ", "			end eventrewards = eventrewards .. EC({data[2]}) .. data[3][3] if data[3]["T"] then eventrewards = eventrewards .. ", " .. npc({"Gold Trophies", nil, nil, nil, data[2]}) end VL.vardefine("eventrewards" .. data[1], eventrewards) if data[3][4] and data[3][4] ~= "" then local eventchancerewards = data[3][4] .. "$" .. (data[3][5] or "") .. "$" .. (data[3][6] or "") .. "$" .. (data[3][7] or "") .. "$" .. (data[3][8] or "") VL.vardefine("eventchancerewards" .. data[1], TOK({eventchancerewards, "I", "B"})) end end end

return "" end

return p