Module:Loops: Difference between revisions
From IdleOn MMO Wiki
Kiokurashi (talk | contribs) No edit summary |
Kiokurashi (talk | contribs) mNo edit summary |
||
(76 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
local loops = {} | local loops = {} | ||
local NumberFormater = require('Module:NumberFormater') | |||
local Utility = require("Module:Utility") | |||
local VariablesLua = mw.ext.VariablesLua | |||
local | function loops.slabOrderList(frame) | ||
local orderItem = frame.args.Item | |||
local bigList = frame.args.OrderList | |||
local tableList = explode(bigList, ',') | |||
for i = 1, #tableList do | |||
if tableList[i] == orderItem then | |||
VariablesLua.vardefine('Slaborder', i - 1) | |||
return i - 1 | |||
end | |||
end | end | ||
VariablesLua.vardefine('Slaborder', -1) | |||
return -1 .. "[[Category:Using Loops Module - SlabOrderList]]" | |||
end | end | ||
function loops.bitsFormater(frame) | |||
local bitTotal = tonumber(frame.args.Bits) | |||
local bitPart = 0 | |||
local ret = '' | |||
local | -- {{#tip-text:{{formatnum:{{#expr:{{#expr:({{{1}}}) / 1E+15}} round 1}}}} Q| <span class="text-only">{{formatnum:{{{1}}}}}</span> }} | ||
if | if bitTotal > 1e72 then | ||
bitPart = math.floor(bitTotal / 1e72) | |||
ret = ret .. 'Total: ' .. bitTotal .. ', Part: ' .. bitPart .. ', Color: Blue.' | |||
elseif bitTotal > 1e54 then | |||
elseif | bitPart = math.floor(bitTotal / 1e54) | ||
ret = ret .. 'Total: ' .. bitTotal .. ', Part: ' .. bitPart .. ', Color: Purple.' | |||
elseif bitTotal > 1e36 then | |||
bitPart = math.floor(bitTotal / 1e36) | |||
elseif | ret = ret .. 'Total: ' .. bitTotal .. ', Part: ' .. bitPart .. ', Color: Red.' | ||
elseif bitTotal > 1e18 then | |||
bitPart = math.floor(bitTotal / 1e18) | |||
ret = ret .. 'Total: ' .. bitTotal .. ', Part: ' .. bitPart .. ', Color: Green.' | |||
elseif | |||
else | else | ||
bitPart = bitTotal | |||
ret = ret .. 'Total: ' .. bitTotal .. ', Part: ' .. bitPart .. ', Color: White.' | |||
end | end | ||
return string.format("%d", frame.args.Bits) .. "[[Category:Using Loops Module - BitsFormater]]" | |||
end | end | ||
function loops.formatCDC(frame) | function loops.formatCDC(frame) | ||
Line 45: | Line 50: | ||
local ret = "<span style='display: none;'>" .. 1/val .. "</span>" .. | local ret = "<span style='display: none;'>" .. 1/val .. "</span>" .. | ||
"{{#tip-text:1 in " .. string.format("3,3d", n) .. "|<span class='text-only'>" .. (tonumber(val) * 100) .. "%</span>}}" | "{{#tip-text:1 in " .. string.format("3,3d", n) .. "|<span class='text-only'>" .. (tonumber(val) * 100) .. "%</span>}}" | ||
return ret | return ret .. "[[Category:Using Loops Module - FormatCDC]]" | ||
end | end | ||
function loops.bossAttacks(frame) | function loops.bossAttacks(frame) | ||
local frameArgs = frame.args | local frameArgs = frame.args | ||
local attackList = explode(frameArgs.attackList,",") | local attackList = Utility.explode(frameArgs.attackList,",") | ||
local damageList = explode(frameArgs.damageList,",") | local damageList = Utility.explode(frameArgs.damageList,",") | ||
local ret = "" | local ret = "" | ||
Line 85: | Line 70: | ||
end | end | ||
return ret | return ret .. "[[Category:Using Loops Module - BossAttacks]]" | ||
end | end | ||
function loops.bossAttacksInfoBox(frame) | function loops.bossAttacksInfoBox(frame) | ||
local defenseCalc = require("Module:DefenseCalc") | |||
local frameArgs = frame.args | local frameArgs = frame.args | ||
local attackList = explode(frameArgs.attackList,",") | local attackList = Utility.explode(frameArgs.attackList,",") | ||
local damageList = explode(frameArgs.damageList,",") | local damageList = Utility.explode(frameArgs.damageList,",") | ||
local ret = "" | local ret = "" | ||
for i = 1, #attackList do | for i = 1, #attackList do | ||
ret = ret .. "<data><label>" .. attackList[i] .. "</ | ret = ret .. "<div class='pi-item pi-data pi-item-spacing pi-border-color' data-source=''><h3 class='pi-data-label pi-secondary-font' style='width: 80px;'>" .. attackList[i] .. "</h3><div class='pi-data-value pi-font'>" | ||
if(damageList[i]) | if(damageList[i]) | ||
then | then | ||
ret = ret .. "<span class='simple-tooltip simple-tooltip-inline tooltipstered' data-simple-tooltip='<span class='text-only'>" .. damageList[i] .. "</span>'>" .. numFormater(damageList[i]) .. "</span>" | local atkDamage = tonumber(damageList[i]) | ||
local defZero = defenseCalc.calc({ args = { Attack = atkDamage } }) | |||
ret = ret .. "<span class='simple-tooltip simple-tooltip-inline tooltipstered' data-simple-tooltip='<span class='text-only'>" .. damageList[i] .. "</span>'>" .. numFormater(damageList[i]) .. "</span>" .. "<span class='simple-tooltip simple-tooltip-inline tooltipstered' data-simple-tooltip='<span class='text-only'>Required defense for zero damage: " .. defZero .. "</span>'> (" .. numFormater(defZero) .. ")</span></div></div>" | |||
else | else | ||
ret = ret .. "</ | ret = ret .. "N/A</div></div>" | ||
end | end | ||
end | end | ||
return ret | return ret .. "[[Category:Using Loops Module - BossAttacksInfobox]]" | ||
end | end | ||
Line 110: | Line 98: | ||
local ret = "" | local ret = "" | ||
local frameArgs = frame.args | local frameArgs = frame.args | ||
local delimiter | local delimiter, list1, list2, list3, list4, returnDelim | ||
if(frameArgs.delimiter) then delimiter = frameArgs.delimiter else delimiter = "," end | |||
if(frameArgs.list1) then list1 = explode(frameArgs.list1, delimiter) end | if(frameArgs.list1) then list1 = Utility.explode(frameArgs.list1, delimiter) end | ||
if(frameArgs.list2) then list2 = explode(frameArgs.list2, delimiter) end | if(frameArgs.list2) then list2 = Utility.explode(frameArgs.list2, delimiter) end | ||
if(frameArgs.list3) then list3 = explode(frameArgs.list3, delimiter) end | if(frameArgs.list3) then list3 = Utility.explode(frameArgs.list3, delimiter) end | ||
if(frameArgs.list4) then list4 = explode(frameArgs.list4, delimiter) end | if(frameArgs.list4) then list4 = Utility.explode(frameArgs.list4, delimiter) end | ||
if(frameArgs.returnDelimiter) then returnDelim = frameArgs.returnDelimiter end | if(frameArgs.returnDelimiter) then returnDelim = frameArgs.returnDelimiter end | ||
local replaceString = frameArgs.replaceString | local replaceString = frameArgs.replaceString | ||
Line 129: | Line 117: | ||
ret = ret .. tStr | ret = ret .. tStr | ||
end | end | ||
return ret .. "[[Category:Using Loops Module - ParseLoop]]" | |||
return ret | |||
end | end | ||
function loops.portalRowLoop(frame) | |||
function loops. | |||
local ret = "" | local ret = "" | ||
local frameArgs = frame.args | local frameArgs = frame.args | ||
local | local reqs = Utility.explode(frameArgs.reqs, ",") | ||
local | local areas = Utility.explode(frameArgs.areas, ",") | ||
local icon = frameArgs.icon == "Boss" and "Boss Skull" or string.format("%s Skill Icon", frameArgs.icon) | |||
local | local reqsString = [=[<td>[[File:%s.png|30px|link=]] %s</td>]=] | ||
local numFormString = [[<span class="simple-tooltip simple-tooltip-inline tooltipstered" data-simple-tooltip="<p&><span class='text-only'>%s</span></p>">%s</span>]] | |||
for i = 1, # | for i = 1, #reqs do | ||
if( | if(i > 1 ) then ret = ret .. "</tr><tr>" end | ||
local fullformat = NumberFormater.formatwithseperator(reqs[i]) | |||
local shortformat = NumberFormater.formatnumber(reqs[i]) | |||
local numform = reqs[i]:len() > 4 and string.format(numFormString, fullformat, shortformat) or reqs[i] | |||
local tStr = string.format(reqsString, icon, numform) | |||
if(areas[i] == "NULL") then | |||
tStr = tStr .. "<td>This portal connects to nothing, or returns to a random default location.</td>" | |||
else | |||
tStr = tStr .. "<td>[[Worlds#" .. areas[i] .. "|" .. areas[i] .. "]]</td>" | |||
end | end | ||
ret = ret .. tStr | |||
end | end | ||
ret = ret .. "</tr>[[Category:Using Loops Module - PortalRowLoop]]" | |||
return ret | return ret | ||
end | |||
function loops.numberNabber(frame) | |||
return "[[Category:Using Loops Module - NumberNabber]]" | |||
end | end | ||
Line 171: | Line 158: | ||
local frameArgs = frame.args | local frameArgs = frame.args | ||
local delimiter = frameArgs.delimiter | local delimiter = frameArgs.delimiter | ||
local list = explode(frameArgs.list, delimiter) | local list = Utility.explode(frameArgs.list, delimiter) | ||
local cols | local cols | ||
local template = frameArgs.template | local template = frameArgs.template | ||
Line 179: | Line 166: | ||
ret = ret .. frame:expandTemplate{title = template, args = { list[i] } }; | ret = ret .. frame:expandTemplate{title = template, args = { list[i] } }; | ||
end | end | ||
ret = ret .. '</div>' | ret = ret .. '</div>[[Category:Using Loops Module - OneVariableTemplateParser]]' | ||
return ret | return ret | ||
end | end | ||
return loops | return loops |
Latest revision as of 02:26, 15 March 2024
Documentation for this module may be created at Module:Loops/doc
local loops = {}
local NumberFormater = require('Module:NumberFormater')
local Utility = require("Module:Utility")
local VariablesLua = mw.ext.VariablesLua
function loops.slabOrderList(frame)
local orderItem = frame.args.Item
local bigList = frame.args.OrderList
local tableList = explode(bigList, ',')
for i = 1, #tableList do
if tableList[i] == orderItem then
VariablesLua.vardefine('Slaborder', i - 1)
return i - 1
end
end
VariablesLua.vardefine('Slaborder', -1)
return -1 .. "[[Category:Using Loops Module - SlabOrderList]]"
end
function loops.bitsFormater(frame)
local bitTotal = tonumber(frame.args.Bits)
local bitPart = 0
local ret = ''
-- {{#tip-text:{{formatnum:{{#expr:{{#expr:({{{1}}}) / 1E+15}} round 1}}}} Q| <span class="text-only">{{formatnum:{{{1}}}}}</span> }}
if bitTotal > 1e72 then
bitPart = math.floor(bitTotal / 1e72)
ret = ret .. 'Total: ' .. bitTotal .. ', Part: ' .. bitPart .. ', Color: Blue.'
elseif bitTotal > 1e54 then
bitPart = math.floor(bitTotal / 1e54)
ret = ret .. 'Total: ' .. bitTotal .. ', Part: ' .. bitPart .. ', Color: Purple.'
elseif bitTotal > 1e36 then
bitPart = math.floor(bitTotal / 1e36)
ret = ret .. 'Total: ' .. bitTotal .. ', Part: ' .. bitPart .. ', Color: Red.'
elseif bitTotal > 1e18 then
bitPart = math.floor(bitTotal / 1e18)
ret = ret .. 'Total: ' .. bitTotal .. ', Part: ' .. bitPart .. ', Color: Green.'
else
bitPart = bitTotal
ret = ret .. 'Total: ' .. bitTotal .. ', Part: ' .. bitPart .. ', Color: White.'
end
return string.format("%d", frame.args.Bits) .. "[[Category:Using Loops Module - BitsFormater]]"
end
function loops.formatCDC(frame)
local val = frame.args.value
local n = 1/tonumber(val)
local ret = "<span style='display: none;'>" .. 1/val .. "</span>" ..
"{{#tip-text:1 in " .. string.format("3,3d", n) .. "|<span class='text-only'>" .. (tonumber(val) * 100) .. "%</span>}}"
return ret .. "[[Category:Using Loops Module - FormatCDC]]"
end
function loops.bossAttacks(frame)
local frameArgs = frame.args
local attackList = Utility.explode(frameArgs.attackList,",")
local damageList = Utility.explode(frameArgs.damageList,",")
local ret = ""
for i = 1, #attackList do
ret = ret .. "<dt>" .. attackList[i]
if(damageList[i])
then
ret = ret .. "</dt><dd><span class='simple-tooltip simple-tooltip-inline tooltipstered' data-simple-tooltip='<span class='text-only'>"..damageList[i] .. "</span>'>" .. numFormater(damageList[i]) .. "</span></dd>"
else
ret = ret .. "</dt><dd>N.A.</dd>"
end
end
return ret .. "[[Category:Using Loops Module - BossAttacks]]"
end
function loops.bossAttacksInfoBox(frame)
local defenseCalc = require("Module:DefenseCalc")
local frameArgs = frame.args
local attackList = Utility.explode(frameArgs.attackList,",")
local damageList = Utility.explode(frameArgs.damageList,",")
local ret = ""
for i = 1, #attackList do
ret = ret .. "<div class='pi-item pi-data pi-item-spacing pi-border-color' data-source=''><h3 class='pi-data-label pi-secondary-font' style='width: 80px;'>" .. attackList[i] .. "</h3><div class='pi-data-value pi-font'>"
if(damageList[i])
then
local atkDamage = tonumber(damageList[i])
local defZero = defenseCalc.calc({ args = { Attack = atkDamage } })
ret = ret .. "<span class='simple-tooltip simple-tooltip-inline tooltipstered' data-simple-tooltip='<span class='text-only'>" .. damageList[i] .. "</span>'>" .. numFormater(damageList[i]) .. "</span>" .. "<span class='simple-tooltip simple-tooltip-inline tooltipstered' data-simple-tooltip='<span class='text-only'>Required defense for zero damage: " .. defZero .. "</span>'> (" .. numFormater(defZero) .. ")</span></div></div>"
else
ret = ret .. "N/A</div></div>"
end
end
return ret .. "[[Category:Using Loops Module - BossAttacksInfobox]]"
end
function loops.parseLoop(frame)
local ret = ""
local frameArgs = frame.args
local delimiter, list1, list2, list3, list4, returnDelim
if(frameArgs.delimiter) then delimiter = frameArgs.delimiter else delimiter = "," end
if(frameArgs.list1) then list1 = Utility.explode(frameArgs.list1, delimiter) end
if(frameArgs.list2) then list2 = Utility.explode(frameArgs.list2, delimiter) end
if(frameArgs.list3) then list3 = Utility.explode(frameArgs.list3, delimiter) end
if(frameArgs.list4) then list4 = Utility.explode(frameArgs.list4, delimiter) end
if(frameArgs.returnDelimiter) then returnDelim = frameArgs.returnDelimiter end
local replaceString = frameArgs.replaceString
for i = 1, #list1 do
if(i > 1 and returnDelim) then ret = ret .. returnDelim end
local tStr = replaceString
if(list1) then tStr = tStr:gsub("%(1%)", list1[i]) end
if(list2) then tStr = tStr:gsub("%(2%)", list2[i]) end
if(list3) then tStr = tStr:gsub("%(3%)", list3[i]) end
if(list4) then tStr = tStr:gsub("%(4%)", list4[i]) end
ret = ret .. tStr
end
return ret .. "[[Category:Using Loops Module - ParseLoop]]"
end
function loops.portalRowLoop(frame)
local ret = ""
local frameArgs = frame.args
local reqs = Utility.explode(frameArgs.reqs, ",")
local areas = Utility.explode(frameArgs.areas, ",")
local icon = frameArgs.icon == "Boss" and "Boss Skull" or string.format("%s Skill Icon", frameArgs.icon)
local reqsString = [=[<td>[[File:%s.png|30px|link=]] %s</td>]=]
local numFormString = [[<span class="simple-tooltip simple-tooltip-inline tooltipstered" data-simple-tooltip="<p&><span class='text-only'>%s</span></p>">%s</span>]]
for i = 1, #reqs do
if(i > 1 ) then ret = ret .. "</tr><tr>" end
local fullformat = NumberFormater.formatwithseperator(reqs[i])
local shortformat = NumberFormater.formatnumber(reqs[i])
local numform = reqs[i]:len() > 4 and string.format(numFormString, fullformat, shortformat) or reqs[i]
local tStr = string.format(reqsString, icon, numform)
if(areas[i] == "NULL") then
tStr = tStr .. "<td>This portal connects to nothing, or returns to a random default location.</td>"
else
tStr = tStr .. "<td>[[Worlds#" .. areas[i] .. "|" .. areas[i] .. "]]</td>"
end
ret = ret .. tStr
end
ret = ret .. "</tr>[[Category:Using Loops Module - PortalRowLoop]]"
return ret
end
function loops.numberNabber(frame)
return "[[Category:Using Loops Module - NumberNabber]]"
end
function loops.oneVariableTemplateParser(frame)
local ret = ""
local frameArgs = frame.args
local delimiter = frameArgs.delimiter
local list = Utility.explode(frameArgs.list, delimiter)
local cols
local template = frameArgs.template
if(frameArgs.colCount) then cols = frameArgs.colCount else cols = 3 end
if(frameArgs.divClass) then ret = '<div class="' .. frameArgs.divClass .. '">' else ret = '<div class="DetailboxGrid">' end
for i = 1, #list do
ret = ret .. frame:expandTemplate{title = template, args = { list[i] } };
end
ret = ret .. '</div>[[Category:Using Loops Module - OneVariableTemplateParser]]'
return ret
end
return loops