Module:SourcesQuery: Difference between revisions
From IdleOn MMO Wiki
Kiokurashi (talk | contribs) mNo edit summary |
Kiokurashi (talk | contribs) mNo edit summary |
||
Line 10: | Line 10: | ||
local quests = '' | local quests = '' | ||
local shops = '' | local shops = '' | ||
local postoff = '' | |||
local other = '' | local other = '' | ||
recipe = SmithingSources(item) | recipe = SmithingSources(item) | ||
drops | drops = DropTableSources(item) | ||
quests = QuestSources(item) | quests = QuestSources(item) | ||
shops | shops = VendorSources(item) | ||
other | postoff = PostOfficeSources(item) | ||
other = CustomSources(item) | |||
if (#recipe + #drops + #quests + #shops + #other) == 0 then | if (#recipe + #drops + #quests + #shops + #postoff + #other) == 0 then | ||
result = 'Unobtainable' | result = 'Unobtainable' | ||
fullresult = 'Unobtainable' | fullresult = 'Unobtainable' | ||
Line 56: | Line 58: | ||
result = result .. shops | result = result .. shops | ||
fullresult = fullresult .. 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 | end | ||
if #other > 0 then | if #other > 0 then | ||
Line 155: | Line 165: | ||
temp = temp .. '[[Vendors#' .. vendor .. '|' .. vendor .. ']]' | temp = temp .. '[[Vendors#' .. vendor .. '|' .. vendor .. ']]' | ||
end | end | ||
return temp | |||
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 temp = '' | |||
local args = { | |||
where = 'PORewards.Item="'.. item ..'"', | |||
} | |||
local results = cargo.query( tables, fields, args ) | |||
if #results == 0 then return temp end -- if no results, return original string and continue. | |||
for r = 1, #results do | |||
local company = results[r].Company | |||
for c = 1, #companies do | |||
if comapny == companies[c] then boolTracker[c] = 1 end | |||
end | |||
end | |||
temp = temp .. 'Post Office (' | |||
for b = 1, #boolTracker do | |||
if b > 1 then temp = temp .. ', ' end | |||
if boolTrackerr[b] == 1 then temp = temp .. '[[Post Office#' .. companies[b] .. '|' .. shortNames[b] .. ']]' end | |||
end | |||
temp = temp .. ')' | |||
return temp | return temp |
Revision as of 19:39, 22 September 2023
Documentation for this module may be created at Module:SourcesQuery/doc
local p = {}
local cargo = mw.ext.cargo
function p.Main( frame )
local item = frame.args.item
local result = ''
local fullresult = ''
local recipe = ''
local drops = ''
local quests = ''
local shops = ''
local postoff = ''
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
result = 'Unobtainable'
fullresult = 'Unobtainable'
else
if #recipe > 0 then
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
mw.ext.VariablesLua.vardefine('Sources', fullresult) -- 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 temp = ''
-- _pageName LIKE "{{{1|{{PAGENAME}}}}}"
local args = {
where = 'AnvilCraft.Item="'.. item ..'"',
orderBy = 'AnvilCraft.Item'
}
local results = cargo.query( tables, fields, args )
if #results == 0 then return temp end -- if no results, return original string and continue.
for r = 1, #results do
if r > 1 then temp = temp .. ', ' end
local from = ' '
if 'Start' ~= results[r].RecipeFrom then
from = ' (' .. results[r].RecipeFrom .. ')'
end
temp = temp .. '[[Smithing]]' .. from
end
return temp
end
function DropTableSources(item)
local tables = 'DropTables'
local fields = 'DropSourceEntity'
local temp = ''
-- DropItem="{{{1|{{PAGENAME}}}}}" AND NOT DropSourceEntity LIKE "%DropTable%"
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 temp end -- if no results, return original string and continue.
for r = 1, #results do
if r > 1 then temp = temp .. ', ' end
local source = results[r].DropSourceEntity
temp = temp .. '[[' .. source .. ']]'
end
return temp
end
function QuestSources(item)
local tables = 'Quests'
local fields = '_pageName'
local temp = ''
-- Rewards HOLDS LIKE "%>{{{1|{{PAGENAME}}}}}<%"
local args = {
where = 'Quests.Rewards HOLDS LIKE "%>'.. item ..'<%"',
groupBy = 'Quests._pageName',
}
local results = cargo.query( tables, fields, args )
if #results == 0 then return temp end -- if no results, return original string and continue.
for r = 1, #results do
if r > 1 then temp = temp .. ', ' end
local source = results[r]._pageName
temp = temp .. '[[' .. source .. ']]'
end
return temp
end
function VendorSources(item)
local tables = 'VendorItems'
local fields = 'Vendor'
local temp = ''
-- Item="{{{1|{{PAGENAME}}}}}"
local args = {
where = 'VendorItems.Item="'.. item ..'"',
orderBy = 'VendorItems.Vendor',
}
local results = cargo.query( tables, fields, args )
if #results == 0 then return temp end -- if no results, return original string and continue.
for r = 1, #results do
if r > 1 then temp = temp .. ', ' end
local vendor = results[r].Vendor
temp = temp .. '[[Vendors#' .. vendor .. '|' .. vendor .. ']]'
end
return temp
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 temp = ''
local args = {
where = 'PORewards.Item="'.. item ..'"',
}
local results = cargo.query( tables, fields, args )
if #results == 0 then return temp end -- if no results, return original string and continue.
for r = 1, #results do
local company = results[r].Company
for c = 1, #companies do
if comapny == companies[c] then boolTracker[c] = 1 end
end
end
temp = temp .. 'Post Office ('
for b = 1, #boolTracker do
if b > 1 then temp = temp .. ', ' end
if boolTrackerr[b] == 1 then temp = temp .. '[[Post Office#' .. companies[b] .. '|' .. shortNames[b] .. ']]' end
end
temp = temp .. ')'
return temp
end
function CustomSources(item)
local tables = 'Sources'
local fields = 'Link, SpecialText, EventRules'
local temp = ''
-- Item="{{{1|{{PAGENAME}}}}}"
local args = {
where = 'Sources.Item="'.. item ..'"',
orderBy = 'Sources.Source',
}
local results = cargo.query( tables, fields, args )
if #results == 0 then return temp end -- if no results, return original string and continue.
local EventRulesCounter = 0
for r = 1, #results do
if r > 1 then temp = temp .. ', ' end
local link = results[r].Link
local sText = results[r].SpecialText
EventRulesCounter = EventRulesCounter + results[r].EventRules
temp = temp .. '[[' .. link .. ']]'
if sText ~= 'None' then temp = temp .. ' (' .. sText .. ')' end
end
if EventRulesCounter > 0 then temp = temp .. "<br/>''Additional Event drop.''" end
return temp
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