Module:SourcesQuery: Difference between revisions

From IdleOn MMO Wiki
mNo edit summary
Tag: Manual revert
mNo edit summary
Line 1: Line 1:
local p = {}
local p = {}
local cargo = mw.ext.cargo
local cargo = mw.ext.cargo
local fullList = {}


function p.Main( frame )
function p.Main( frame )
local item = frame.args.item
local item = frame.args.item
local result = ''
local result = ''
local fullresult = ''
SmithingSources(item)
local recipe = ''
DropTableSources(item)
local drops = ''
QuestSources(item)
local quests = ''
VendorSources(item)
local shops = ''
PostOfficeSources(item)
local postoff = ''
CustomSources(item)
local other = ''
recipe  = SmithingSources(item)
drops  = DropTableSources(item)
quests  = QuestSources(item)
shops  = VendorSources(item)
postoff = PostOfficeSources(item)
other  = CustomSources(item)
if (#recipe + #drops + #quests + #shops + #postoff + #other) == 0 then  
if #fullList == 0 then  
result = 'Unobtainable'
result = 'Unobtainable'
fullresult = 'Unobtainable'
else
else
if #recipe > 0 then
result = fullList.concat(', ')
result = result .. recipe
fullresult = fullresult .. recipe
end
if #drops > 0 then
    if #result > 0 then
    result = result .. ', '
    fullresult = fullresult .. ', '
    end -- If there was other sources, then insert divider.
if #drops < 150 then
result = result .. drops
else
result = result .. "Many Drop Tables (Check Item Page)"
end
fullresult = fullresult .. drops
end
if #quests > 0 then
    if #result > 0 then
    result = result .. ', '
    fullresult = fullresult .. ', '
    end -- If there was other sources, then insert divider.
if #quests < 150 then
result = result .. quests
else
result = result .. "Many Quest Rewards (Check Item Page)"
end
fullresult = fullresult .. quests
end
if #shops > 0 then
    if #result > 0 then
    result = result .. ', '
    fullresult = fullresult .. ', '  
    end -- If there was other sources, then insert divider.
result = result .. shops
fullresult = fullresult .. shops
end
if #postoff > 0 then
    if #result > 0 then
    result = result .. ', '
    fullresult = fullresult .. ', '
    end -- If there was other sources, then insert divider.
result = result .. postoff
fullresult = fullresult .. postoff
end
if #other > 0 then
    if #result > 0 then
    result = result .. ', '
    fullresult = fullresult .. ', '
    end -- If there was other sources, then insert divider.
if #other < 200 then
result = result .. other
else
result = result .. "A lot of other sources (Check Item Page)"
end
fullresult = fullresult .. other
end
end
end
mw.ext.VariablesLua.vardefine('Sources', fullresult) -- Set LuaVar variable Sources so that we don't need to re-query on the same page.
mw.ext.VariablesLua.vardefine('Sources', result) -- Set LuaVar variable Sources so that we don't need to re-query on the same page.
return result
return result
Line 88: Line 26:
local tables = 'AnvilCraft'
local tables = 'AnvilCraft'
     local fields = 'RecipeFrom'
     local fields = 'RecipeFrom'
    local temp = ''
    -- _pageName LIKE "{{{1|{{PAGENAME}}}}}"
     local args = {
     local args = {
         where = 'AnvilCraft.Item="'.. item ..'"',
         where = 'AnvilCraft.Item="'.. item ..'"',
Line 95: Line 31:
     }
     }
     local results = cargo.query( tables, fields, args )
     local results = cargo.query( tables, fields, args )
     if #results == 0 then return temp end -- if no results, return original string and continue.
     if #results == 0 then return end -- if no results, return original string and continue.
    local from
     for r = 1, #results do
     for r = 1, #results do
     if r > 1 then temp = temp .. ', ' end
     from = 'Start' ~= result[r].RecipeFrom and string.format(' (%)', results[r].RecipeFrom) or ''
    local from = ' '
         fullList[#fullList+1] = '[[Smithing]]' .. from
        if 'Start' ~= results[r].RecipeFrom then
        from = ' (' .. results[r].RecipeFrom .. ')'
         end
        temp = temp .. '[[Smithing]]' .. from
     end
     end
   
    return temp
end
end


Line 111: Line 42:
local tables = 'DropTables'
local tables = 'DropTables'
     local fields = 'DropSourceEntity'
     local fields = 'DropSourceEntity'
    local temp = ''
    -- DropItem="{{{1|{{PAGENAME}}}}}" AND NOT DropSourceEntity LIKE "%DropTable%"
     local args = {
     local args = {
         where = 'DropTables.DropItem="'.. item ..'" AND NOT DropTables.DropSourceEntity LIKE "%DropTable%"',
         where = 'DropTables.DropItem="'.. item ..'" AND NOT DropTables.DropSourceEntity LIKE "%DropTable%"',
Line 119: Line 48:
     }
     }
     local results = cargo.query( tables, fields, args )
     local results = cargo.query( tables, fields, args )
     if #results == 0 then return temp end -- if no results, return original string and continue.
     if #results == 0 then return end -- if no results, return original string and continue.
    local source = ''
     for r = 1, #results do
     for r = 1, #results do
    if r > 1 then temp = temp .. ', ' end
         source = results[r].DropSourceEntity
         local source = results[r].DropSourceEntity
         fullList[#fullList+1] = string.format('[[%s]]', source)
         temp = temp .. '[[' .. source .. ']]'
     end
     end
   
    return temp
end
end


Line 132: Line 59:
local tables = 'Quests'
local tables = 'Quests'
     local fields = '_pageName'
     local fields = '_pageName'
    local temp = ''
    -- Rewards HOLDS LIKE "%>{{{1|{{PAGENAME}}}}}<%"
     local args = {
     local args = {
         where = 'Quests.Rewards HOLDS LIKE "%>'.. item ..'<%"',
         where = 'Quests.Rewards HOLDS LIKE "%>'.. item ..'<%"',
Line 139: Line 64:
     }
     }
     local results = cargo.query( tables, fields, args )
     local results = cargo.query( tables, fields, args )
     if #results == 0 then return temp end -- if no results, return original string and continue.
     if #results == 0 then return end -- if no results, return original string and continue.
    local source = ''
     for r = 1, #results do
     for r = 1, #results do
     if r > 1 then temp = temp .. ', ' end
     source = results[r]._pageName
        local source = results[r]._pageName
         fullList[#fullList+1] = string.format('[[%s]]', source)
         temp = temp .. '[[' .. source .. ']]'
     end
     end
      
      
    return temp
end
end


Line 152: Line 76:
local tables = 'VendorItems'
local tables = 'VendorItems'
     local fields = 'Vendor'
     local fields = 'Vendor'
    local temp = ''
    -- Item="{{{1|{{PAGENAME}}}}}"
     local args = {
     local args = {
         where = 'VendorItems.Item="'.. item ..'"',
         where = 'VendorItems.Item="'.. item ..'"',
Line 159: Line 81:
     }
     }
     local results = cargo.query( tables, fields, args )
     local results = cargo.query( tables, fields, args )
     if #results == 0 then return temp end -- if no results, return original string and continue.
     if #results == 0 then return end -- if no results, return original string and continue.
    local vendor = ''
     for r = 1, #results do
     for r = 1, #results do
    if r > 1 then temp = temp .. ', ' end
         vendor = results[r].Vendor
         local vendor = results[r].Vendor
         fullList[#fullList+1] = string.format('[[Vendors#%s|%s]] (Shop)', vendor, vendor)
         temp = temp .. '[[Vendors#' .. vendor .. '|' .. vendor .. ']] (Shop)'
     end
     end
   
    return temp
end
end


Line 175: Line 95:
local tables = 'PORewards'
local tables = 'PORewards'
     local fields = 'Company'
     local fields = 'Company'
    local temp = ''
     local args = {
     local args = {
         where = 'PORewards.Item="'.. item ..'"',
         where = 'PORewards.Item="'.. item ..'"',
     }
     }
     local results = cargo.query( tables, fields, args )
     local results = cargo.query( tables, fields, args )
     if #results == 0 then return temp end -- if no results, return original string and continue.
     if #results == 0 then return end -- if no results, return original string and continue.
    local company = ''
     for r = 1, #results do
     for r = 1, #results do
         local company = results[r].Company
         company = results[r].Company
         for c = 1, #companies do
         for c = 1, #companies do
        if company == companies[c] then boolTracker[c] = 1 end
        if company == companies[c] then boolTracker[c] = 1 end
Line 188: Line 108:
     end
     end
     temp = temp .. '[[Post Office#Companies & Rewards|Post Office]] ('
     temp = temp .. '[[Post Office#Companies & Rewards|Post Office]] ('
     local comNum = 0
     local compTable = {}
     for b = 1, #boolTracker do
     for b = 1, #boolTracker do
     if boolTracker[b] == 1 then  
     if boolTracker[b] == 1 then  
     comNum = comNum + 1
     compTable[#compTable+1] = string.format('<span class="simple-tooltip simple-tooltip-inline tooltipstered" style="color: #b847cb;" data-simple-tooltip="%s">[[Post Office#%s|%s]]</span>', companies[b], companies[b], shortNames[b])
    if comNum > 1 then temp = temp .. ', ' end
    temp = temp .. '<span class="simple-tooltip simple-tooltip-inline tooltipstered" style="color: #b847cb;" data-simple-tooltip="'
    .. companies[b] .. '">[[Post Office#' .. companies[b] .. '|' .. shortNames[b] .. ']]</span>'
     end
     end
     end
     end
     temp = temp .. ')'
     fullList[#fullList+1] = string.format('[[Post Office#Companies & Rewards|Post Office]] (%s)', compTable.concat(", "))
   
    return temp
end
end


Line 205: Line 120:
local tables = 'Sources'
local tables = 'Sources'
     local fields = 'Link, SpecialText, EventRules'
     local fields = 'Link, SpecialText, EventRules'
    local temp = ''
    -- Item="{{{1|{{PAGENAME}}}}}"
     local args = {
     local args = {
         where = 'Sources.Item="'.. item ..'"',
         where = 'Sources.Item="'.. item ..'"',
Line 212: Line 125:
     }
     }
     local results = cargo.query( tables, fields, args )
     local results = cargo.query( tables, fields, args )
     if #results == 0 then return temp end -- if no results, return original string and continue.
     if #results == 0 then return end -- if no results, return original string and continue.
     local EventRulesCounter = 0
     local EventRulesCounter = 0
    local link = ''
    local sText = ''
     for r = 1, #results do
     for r = 1, #results do
     if r > 1 then temp = temp .. ', ' end
     link = results[r].Link
        local link = results[r].Link
         sText = results[r].SpecialText
         local sText = results[r].SpecialText
         EventRulesCounter = EventRulesCounter + results[r].EventRules
         EventRulesCounter = EventRulesCounter + results[r].EventRules
         temp = temp .. '[[' .. link .. ']]'
         fullList[#fullList+1] = string.format('[[%s]]%s', link, sText ~= 'None' and string.format(' (%s)', sText) or '')
        if sText ~= 'None' then temp = temp .. ' (' .. sText .. ')' end
     end
     end
     if EventRulesCounter > 0 then temp = temp .. "<br/>''Additional Event drop.''" end
    -- If item is a special drop then append the following to the last entry so it isn't split by commas later.
   
     if EventRulesCounter > 0 then fullList[#fullList] = fullList[#fullList] .. "<br/>''Additional Event drop.''" end
    return temp
end
end



Revision as of 03:27, 19 March 2024

Documentation for this module may be created at Module:SourcesQuery/doc

local p = {}
local cargo = mw.ext.cargo
local fullList = {}

function p.Main( frame )
	local item = frame.args.item
	local result = ''
	SmithingSources(item)
	DropTableSources(item)
	QuestSources(item)
	VendorSources(item)
	PostOfficeSources(item)
	CustomSources(item)
	
	if #fullList == 0 then 
		result = 'Unobtainable'
	else
		result = fullList.concat(', ')
	end
	mw.ext.VariablesLua.vardefine('Sources', result) -- Set LuaVar variable Sources so that we don't need to re-query on the same page.
	
	return result
end

function SmithingSources(item)
	local tables = 'AnvilCraft'
    local fields = 'RecipeFrom'
    local args = {
        where = 'AnvilCraft.Item="'.. item ..'"',
        orderBy = 'AnvilCraft.Item'
    }
    local results = cargo.query( tables, fields, args )
    if #results == 0 then return end -- if no results, return original string and continue.
    local from
    for r = 1, #results do
    	from = 'Start' ~= result[r].RecipeFrom and string.format(' (%)', results[r].RecipeFrom) or ''
        fullList[#fullList+1] = '[[Smithing]]' .. from
    end
end

function DropTableSources(item)
	local tables = 'DropTables'
    local fields = 'DropSourceEntity'
    local args = {
        where = 'DropTables.DropItem="'.. item ..'" AND NOT DropTables.DropSourceEntity LIKE "%DropTable%"',
        groupBy = 'DropTables.DropSourceEntity',
        orderBy = 'DropTables.DropSourceEntity ASC'
    }
    local results = cargo.query( tables, fields, args )
    if #results == 0 then return end -- if no results, return original string and continue.
    local source = ''
    for r = 1, #results do
        source = results[r].DropSourceEntity
        fullList[#fullList+1] = string.format('[[%s]]', source)
    end
end

function QuestSources(item)
	local tables = 'Quests'
    local fields = '_pageName'
    local args = {
        where = 'Quests.Rewards HOLDS LIKE "%>'.. item ..'<%"',
        groupBy = 'Quests._pageName',
    }
    local results = cargo.query( tables, fields, args )
    if #results == 0 then return end -- if no results, return original string and continue.
    local source = ''
    for r = 1, #results do
    	source = results[r]._pageName
        fullList[#fullList+1] = string.format('[[%s]]', source)
    end
    
end

function VendorSources(item)
	local tables = 'VendorItems'
    local fields = 'Vendor'
    local args = {
        where = 'VendorItems.Item="'.. item ..'"',
        orderBy = 'VendorItems.Vendor',
    }
    local results = cargo.query( tables, fields, args )
    if #results == 0 then return end -- if no results, return original string and continue.
    local vendor = ''
    for r = 1, #results do
        vendor = results[r].Vendor
        fullList[#fullList+1] = string.format('[[Vendors#%s|%s]] (Shop)', vendor, vendor)
    end
end

function PostOfficeSources(item)
	local companies = {'Simple Shippin', 'Plan-it Express', 'Dudes Next Door', 'Down Undelivery', 'Alpine Suppliers', 'Cosmic Carrier'}
	local shortNames = {'SS', 'PE', 'DND', 'DU', 'AS', 'CC'} -- Handling it this way so we can control the order.
	local boolTracker = {0, 0, 0, 0, 0, 0} --Used to track which Company offers the same item as a reward.
	local tables = 'PORewards'
    local fields = 'Company'
    local args = {
        where = 'PORewards.Item="'.. item ..'"',
    }
    local results = cargo.query( tables, fields, args )
    if #results == 0 then return end -- if no results, return original string and continue.
    local company = ''
    for r = 1, #results do
        company = results[r].Company
        for c = 1, #companies do
	        if company == companies[c] then boolTracker[c] = 1 end
	    end
    end
    temp = temp .. '[[Post Office#Companies & Rewards|Post Office]] ('
    local compTable = {}
    for b = 1, #boolTracker do
    	if boolTracker[b] == 1 then 
    		compTable[#compTable+1] = string.format('<span class="simple-tooltip simple-tooltip-inline tooltipstered" style="color: #b847cb;" data-simple-tooltip="%s">[[Post Office#%s|%s]]</span>', companies[b], companies[b], shortNames[b])
    	end
    end
    fullList[#fullList+1] = string.format('[[Post Office#Companies & Rewards|Post Office]] (%s)', compTable.concat(", "))
end

function CustomSources(item)
	local tables = 'Sources'
    local fields = 'Link, SpecialText, EventRules'
    local args = {
        where = 'Sources.Item="'.. item ..'"',
        orderBy = 'Sources.Source',
    }
    local results = cargo.query( tables, fields, args )
    if #results == 0 then return end -- if no results, return original string and continue.
    local EventRulesCounter = 0
    local link = ''
    local sText = ''
    for r = 1, #results do
    	link = results[r].Link
        sText = results[r].SpecialText
        EventRulesCounter = EventRulesCounter + results[r].EventRules
        fullList[#fullList+1] = string.format('[[%s]]%s', link, sText ~= 'None' and string.format(' (%s)', sText) or '')
    end
    -- If item is a special drop then append the following to the last entry so it isn't split by commas later.
    if EventRulesCounter > 0 then fullList[#fullList] = fullList[#fullList] .. "<br/>''Additional Event drop.''" end
end

-- This one is just to get the Drop Chance value for an Item.
function p.DropChance(frame)
	local item = frame.args.item
	local result = ''
	local tables = 'DropTables'
    local fields = 'DropItem, DropRate'
    -- DropItem="{{{1|{{PAGENAME}}}}}" AND NOT DropSourceEntity LIKE "%DropTable%"
    local args = {
        where = 'DropTables.DropItem = "'.. item ..'" AND NOT DropSourceEntity LIKE "%DropTable%"',
        orderBy = 'DropTables.DropRate DESC'
    }
    local results = cargo.query( tables, fields, args )
    if #results == 0 then result = 0 else result = '' .. results[1].DropRate end -- Gets the highest drop rate.
    mw.ext.VariablesLua.vardefine('Chance', result)
    
    return result
end

return p