Difference between revisions of "Module:Thought"
Jump to navigation
Jump to search
Arcangelus (talk | contribs) m |
Arcangelus (talk | contribs) m |
||
Line 29: | Line 29: | ||
return p._main(desc, label, duration, stack, multi, valores) | return p._main(desc, label, duration, stack, multi, valores) | ||
else | else | ||
− | return "Missing value | + | return "<big><b>Missing value. Please, define a numerical value to use.</b></big>" |
end | end | ||
end | end | ||
Line 39: | Line 39: | ||
if valores[2] then | if valores[2] then | ||
return p.Thought(valores)..'<abbr title="'..desc..'">'..(label:gsub("^%l", string.upper))..'</abbr>'..final_string | return p.Thought(valores)..'<abbr title="'..desc..'">'..(label:gsub("^%l", string.upper))..'</abbr>'..final_string | ||
− | else --Only | + | else --Only initial value defined |
if stack==1 and multi==1 then | if stack==1 and multi==1 then | ||
local value = valores[1] | local value = valores[1] | ||
Line 56: | Line 56: | ||
--[[ | --[[ | ||
This function returns a string if more than 1 value was defined. | This function returns a string if more than 1 value was defined. | ||
− | 1. It adds all the numbers to a list | + | 1.- It adds all the numbers to a list |
− | 1. | + | 1.1 Red for negatves, Green otherwise |
− | 2. It concatenates all elements of said lists, wth some extras to make sense.]] | + | 2.- It concatenates all elements of said lists, wth some extras to make sense. |
+ | ]] | ||
function p.Thought(valores) | function p.Thought(valores) | ||
Line 88: | Line 89: | ||
2. None for 0. | 2. None for 0. | ||
3. Red for negatives. | 3. Red for negatives. | ||
+ | The retuned value is rounded half-down. (Meaning 0.5 -> 0 ) | ||
+ | string.format("%.2f", number)) | ||
+ | To combat that, I add 0.001 to the number calculated. It should be enough. | ||
]] | ]] | ||
Line 98: | Line 102: | ||
end | end | ||
else | else | ||
− | text = "Stacking "..stack.." times with a "..multi.." multiplier for maximum of "..tostring(value*( 1 - multi^stack)/(1 - multi)) | + | text = "Stacking "..stack.." times with a "..multi.." multiplier for maximum of "..string.format("%.2f", value*( 1 - multi^stack)/(1 - multi) + 0.001) |
+ | -- tostring(value*( 1 - multi^stack)/(1 - multi)) | ||
end | end | ||
else | else | ||
Line 104: | Line 109: | ||
text = "Stacking infinitely" | text = "Stacking infinitely" | ||
else | else | ||
− | text = "Stacking with a "..multi.." multiplier for maximum of ".. | + | text = "Stacking with a "..multi.." multiplier for maximum of "..string.format("%.2f", value*( 1 - multi^100)/(1 - multi) + 0.001) |
end | end | ||
end | end |
Revision as of 01:59, 17 August 2024
Documentation for this module may be created at Module:Thought/doc
--[[ The Preprocessor visited node count was reduced from 969 to 508. ]] local p = {} local getArgs = require('Module:Arguments').getArgs --local valores_ingresados={"value", "value2", "value3", "value4", "value5", "value6", "value7", "value8", "value9" } function p.main(frame) local args = getArgs(frame) local desc = tostring(args["desc"]) local label = tostring(args["label"]) local duration = tonumber(args["duration"]) local stack = tonumber(args["stack"]) local multi = tonumber(args["multi"]) or 1 -- The advantage of adding values to an empty list rather than defining a list is that no -- nil values will get into the list. This means that values don't have to be consecutive. -- EX: value9 is valid w/o defining value7 and value8. local valores = {} valores[#valores+1]=args["value"] valores[#valores+1]=args["value2"] valores[#valores+1]=args["value3"] valores[#valores+1]=args["value4"] valores[#valores+1]=args["value5"] valores[#valores+1]=args["value6"] valores[#valores+1]=args["value7"] valores[#valores+1]=args["value8"] valores[#valores+1]=args["value9"] if tonumber(args["value"]) then return p._main(desc, label, duration, stack, multi, valores) else return "<big><b>Missing value. Please, define a numerical value to use.</b></big>" end end function p._main(desc, label, duration, stack, multi, valores) local final_string = duration and " [[mood]] for "..duration.." [[Time|days]]" or " [[mood]]" -- "valores" is a list of all values given to the function. -- This checks if a second value exist if valores[2] then return p.Thought(valores)..'<abbr title="'..desc..'">'..(label:gsub("^%l", string.upper))..'</abbr>'..final_string else --Only initial value defined if stack==1 and multi==1 then local value = valores[1] if tonumber(value)>0 then return '<b><font color="forestgreen">'..value..'</font></b> '..'<abbr title="'..desc..'">'..(label:gsub("^%l", string.upper))..'</abbr>'..final_string elseif tonumber(value) == 0 then return '<b>'..value..'</b> '..'<abbr title="'..desc..'">'..(label:gsub("^%l", string.upper))..'</abbr>'..final_string else return '<b><font color="firebrick">'..value..'</font></b> '..'<abbr title="'..desc..'">'..(label:gsub("^%l", string.upper))..'</abbr>'..final_string end end return p.stacks(stack, multi, valores[1])..'<abbr title="'..desc..'">'..(label:gsub("^%l", string.upper))..'</abbr>'..final_string end end --[[ This function returns a string if more than 1 value was defined. 1.- It adds all the numbers to a list 1.1 Red for negatves, Green otherwise 2.- It concatenates all elements of said lists, wth some extras to make sense. ]] function p.Thought(valores) local valores_buscados={} for i, j in ipairs(valores) do local vx = valores[i] local vy = "" if tonumber(vx) then -- A number. if tonumber(vx)<0 then vy='<b><font color="firebrick">'..vx.."</font></b>" else vy='<b><font color="forestgreen">'..vx.."</font></b>" end else vy='<b>'..vx.."</b>" --The idea is to prevent a hard to track error end valores_buscados[#valores_buscados+1]=vy end return "<b>"..table.concat(valores_buscados,"<b>/</b>").."</b> " end --[[ This function return a string for the case that only 1 value was defined. 1. If a stack value was defined: 1.1 Is stack equal to 1 1.2 Any other case. 2. If a stack was not defined, then check the multiplier 2.1 If the multiplier is equal or above one 2.2 If the multiplier is below 1. Finally, some final code to decide what color to use. 1. Green for positive. 2. None for 0. 3. Red for negatives. The retuned value is rounded half-down. (Meaning 0.5 -> 0 ) string.format("%.2f", number)) To combat that, I add 0.001 to the number calculated. It should be enough. ]] function p.stacks(stack, multi, value) local text="" if stack then if multi == 1 then if stack ~= 1 then text = "Stacking "..stack.." times for a maximum of "..tostring(value*stack) end else text = "Stacking "..stack.." times with a "..multi.." multiplier for maximum of "..string.format("%.2f", value*( 1 - multi^stack)/(1 - multi) + 0.001) -- tostring(value*( 1 - multi^stack)/(1 - multi)) end else if multi >= 1 then --I want to avoid the case of really large numbers. text = "Stacking infinitely" else text = "Stacking with a "..multi.." multiplier for maximum of "..string.format("%.2f", value*( 1 - multi^100)/(1 - multi) + 0.001) end end if tonumber(value)>0 then return '<abbr title="'..text..'"><b><font color="forestgreen">'..value..'</font></b></abbr> ' elseif tonumber(value) == 0 then return '<abbr title="'..text..'"><b>'..value..'</b></abbr> ' else return '<abbr title="'..text..'"><b><font color="firebrick">'..value..'</font></b></abbr> ' end end return p