Módulo:Treasure Trails reward points calculator

De RuneScape Wiki
Ir para: navegação, pesquisa
Documentação do módulo
Esta documentação é transcluída de Predefinição:Sem documentação/doc. [editar] [atualizar]
Este módulo não possui nenhuma documentação. Por favor, considere adicionar uma documentação em Módulo:Treasure Trails reward points calculator/doc. [editar]
Módulo:Treasure Trails reward points calculator requer Módulo:Yesno.

-- <pre>
local p = {}

local yesno = require("Módulo:Yesno")
local lang = mw.getContentLanguage()

function p.main(frame)
    local args = frame:getParent().args

    local easyCounter = tonumber(args.easy) or 0
    local mediumCounter = tonumber(args.medium) or 0
    local hardCounter = tonumber(args.hard) or 0
    local eliteCounter = tonumber(args.elite) or 0
    local masterCounter = tonumber(args.master) or 0
    local nPointsRequested = tonumber(args.pointsDesired) or 0
    local unlockGlobetrotter = yesno(args.unlockGlobetrotter) or false
    local unlockAllAtShop = yesno(args.unlockAll) or false
    
    --Counters must be 0 or positive
    easyCounter = math.max(0,easyCounter)
    mediumCounter = math.max(0,mediumCounter)
    hardCounter = math.max(0,hardCounter)
    eliteCounter = math.max(0,eliteCounter)
    masterCounter = math.max(0,masterCounter)
    
    local pointTotal = 0
    local clueCounter = {easyCounter, mediumCounter, hardCounter, eliteCounter, masterCounter}
    local clue = {"fácil", "médio", "díficil", "elite", "mestre"}
	local fClueCounter = {}
	for i,v in ipairs(clueCounter) do
		if v < 0 then
			v = 0
			clueCounter[i] = 0
		end
		table.insert(fClueCounter, lang:formatNum(v))
	end

    local res = ""

    -- Calc current points
    for clueTier = 1,5 do
        pointTotal = pointTotal + math.pow(2, clueTier - 1) * 
            ( (math.floor(clueCounter[clueTier]/500) * math.pow(2,5)) + 
            (math.floor(clueCounter[clueTier]/250) - math.floor(clueCounter[clueTier]/500)) * math.pow(2,4) + 
			(math.floor(clueCounter[clueTier]/100) - math.floor(clueCounter[clueTier]/500)) * math.pow(2,3) + 
			(math.floor(clueCounter[clueTier]/50) - math.floor(clueCounter[clueTier]/100) - math.floor(clueCounter[clueTier]/250) + math.floor(clueCounter[clueTier]/500)) * math.pow(2,2) + 
			(math.floor(clueCounter[clueTier]/10) - math.floor(clueCounter[clueTier]/50)) * math.pow(2,1) + 
			(clueCounter[clueTier]-math.floor(clueCounter[clueTier]/10)) * math.pow(2,0) )
	end

	table.insert(fClueCounter, lang:formatNum(pointTotal) )
    res = { string.format("A quantidade total de pontos proveniente de ([[Arquivo:Pergaminho lacrado (fácil).png|link=Pergaminho lacrado (fácil)]] %s, [[Arquivo:Pergaminho lacrado (médio).png|link=Pergaminho lacrado (médio)]] %s, [[Arquivo:Pergaminho lacrado (difícil).png|link=Pergaminho lacrado (difícil)]] %s, [[Arquivo:Pergaminho lacrado (elite).png|link=Pergaminho lacrado (elite)]] %s, [[Arquivo:Pergaminho lacrado (mestre).png|link=Pergaminho lacrado (mestre)]] %s) é : %s<br/>", unpack(fClueCounter) ) }

    -- Calc #needed clues for requested points
    if unlockGlobetrotter then
    	nPointsRequested = 4950 - pointTotal
    end
    if unlockAllAtShop then
        nPointsRequested = 10950 - pointTotal
    end
    if nPointsRequested > 0 then
        for clueTier = 1,5 do
            local nClue = clueCounter[clueTier]
            local currentPointTotal = pointTotal
            while (currentPointTotal < pointTotal+nPointsRequested) do
				nClue = nClue + 1
				if(nClue%500 == 0) then
					currentPointTotal = currentPointTotal + math.pow(2,clueTier - 1) * math.pow(2,5);
				elseif(nClue%250 == 0) then
					currentPointTotal = currentPointTotal + math.pow(2,clueTier - 1) * math.pow(2,4);
				elseif(nClue%100 == 0) then
					currentPointTotal = currentPointTotal + math.pow(2,clueTier - 1) * math.pow(2,3);
				elseif(nClue%50 == 0) then
					currentPointTotal = currentPointTotal + math.pow(2,clueTier - 1) * math.pow(2,2);
				elseif(nClue%10 == 0) then
					currentPointTotal = currentPointTotal + math.pow(2,clueTier - 1) * math.pow(2,1);
				else
                    currentPointTotal = currentPointTotal + math.pow(2,clueTier - 1) * math.pow(2,0);
                end
            end

            table.insert(res,  string.format( "Para obter %s pontos adicionais, outros %s pergaminhos de dicas de classe %s precisam ser completados.<br/>", lang:formatNum(nPointsRequested), lang:formatNum(nClue-clueCounter[clueTier]), clue[clueTier] ))
        end
    end

    return table.concat(res, '')
end

return p