Module:Item spawns: Difference between revisions

From The Cycle: Frontier Wiki
mNo edit summary
mNo edit summary
Line 22: Line 22:
  :addClass( "plainlinks")
  :addClass( "plainlinks")
   
   
local tab = "<table class=\"wikitable\"><caption>Spawn chance per container</caption><tr><th>Container</th><th>Spawn chance</th></tr>"
local tab = "<table class=\"wikitable sortable\"><caption>Spawn chance per container</caption><tr><th>Container</th><th>Spawn chance</th></tr>"


for container, pools in pairs(p.containers) do
for container, pools in pairs(p.containers) do
local firstOccuranceOfContainer = true
for _, pool in ipairs(pools) do
for _, pool in ipairs(pools) do
local curPools = p.lootPools[pool]
local curPools = p.lootPools[pool]
Line 30: Line 31:
-- check if this item (the key) is in the spawns
-- check if this item (the key) is in the spawns
if curPools["items"][p.item] ~= nil then
if curPools["items"][p.item] ~= nil then
tab = tab .. "<tr><td>" .. container .. " Tier " .. tonumber(curPools["tier"]) .. "</td><td>" .. tostring(round(curPools["items"][p.item]["chance"] / curPools["items"][p.item]["amount"], 2)) .. "% </td></tr>"
local nameOfContainer = ''
if firstOccuranceOfContainer == true then
nameOfContainer = "[[" .. tostring(container) .. "]]"
else
nameOfContainer = container
end
tab = tab .. "<tr><td>" .. nameOfContainer .. " Tier " .. tonumber(curPools["tier"]) .. "</td><td>" .. tostring(round(curPools["items"][p.item]["chance"] / curPools["items"][p.item]["amount"], 2)) .. "% </td></tr>"
firstOccuranceOfContainer = false
end
end
end
end

Revision as of 17:56, 12 April 2023

This module spits out the containers that specific item can spawn in, including chances. Does not show other special spawns or ground spawns.

Parameters

Must always call the main function. The second argument must be the exact name of an item.

Example

{{#invoke:Item spawns|main|Pure Veltecite}}

local p = {} --p stands for package

p.items = mw.loadJsonData( "User:VeryGreatFrog/sandbox2" )
p.lootPools = mw.loadJsonData( "User:VeryGreatFrog/sandbox3" )
p.containers = mw.loadJsonData( "User:VeryGreatFrog/sandbox4" )

local args = mw.getCurrentFrame().args

for k, v in pairs(p.items) do
    if args[1] == v["inGameName"] then
        p.item = k
        break
    end
end

function p.main( frame )
	local encodedName = mw.uri.encode(p.items[p.item]["inGameName"])
	local output =  p.items[p.item]["inGameName"] .. "<br>"
	local par = mw.html.create( "p" )
	
	par:wikitext("\'\'\'" .. p.items[p.item]["inGameName"] .. "\'\'\' can be found on many places on [[Fortuna III]]. Find all of its spawns on our Interactive Map: " .. mw.text.nowiki( "[" ) .. "[https://tools.thecyclefrontier.wiki/map?map=1&item="..encodedName.." BS]" ..mw.text.nowiki( "] [" ) .."[https://tools.thecyclefrontier.wiki/map?map=2&item="..encodedName.." CF]".. mw.text.nowiki( "] [" ) .. "[https://tools.thecyclefrontier.wiki/map?map=3&item="..encodedName.." TI]" .. mw.text.nowiki( "]") .. ".<br> Additionally, it can be found in the following [[Loot Container]]s, depending on the tier. This list does not include non-container or special spawns." )
	   :addClass( "plainlinks")
	   
	local tab = "<table class=\"wikitable sortable\"><caption>Spawn chance per container</caption><tr><th>Container</th><th>Spawn chance</th></tr>"

	for container, pools in pairs(p.containers) do
		local firstOccuranceOfContainer = true
		for _, pool in ipairs(pools) do
			local curPools = p.lootPools[pool]
			if curPools then
				-- check if this item (the key) is in the spawns
				if curPools["items"][p.item] ~= nil then
					local nameOfContainer = ''
					if firstOccuranceOfContainer == true then
						nameOfContainer = "[[" .. tostring(container) .. "]]"
					else
						nameOfContainer = container
					end
					tab = tab .. "<tr><td>" .. nameOfContainer .. " Tier " .. tonumber(curPools["tier"]) .. "</td><td>" .. tostring(round(curPools["items"][p.item]["chance"] / curPools["items"][p.item]["amount"], 2)) .. "% </td></tr>"
					firstOccuranceOfContainer = false
				end
			end
		end

	end
	tab = tab .. "</table>"
	return tostring(par) .. tostring (tab) 
end

-- thanks http://lua-users.org/wiki/SimpleRound
function round(num, numDecimalPlaces)
  local mult = 10^(numDecimalPlaces or 0)
  return math.floor(num * mult + 0.5) / mult
end

return p
Cookies help us deliver our services. By using our services, you agree to our use of cookies.