>OmegaK2 |
|
(42 intermediate revisions by 4 users not shown) |
Line 1: |
Line 1: |
| local p = {}
| | -- This is not an actual module. Do not add code. |
| | |
| local g_frame, g_args
| |
| | |
| local getArgs = require('Module:Arguments').getArgs
| |
| local show_reward = require('Module:QuestReward').show_reward
| |
| local util = require('Module:Util')
| |
| | |
| --
| |
| -- For Template:Quest
| |
| -- | |
| function p.quest(frame)
| |
| g_args = getArgs(frame, {
| |
| parentFirst = true
| |
| })
| |
| if frame == nil or type(frame) == 'table' then
| |
| frame = mw.getCurrentFrame()
| |
| end
| |
|
| |
| g_frame = frame
| |
|
| |
| --
| |
| -- Args
| |
| --
| |
|
| |
| if g_args.name == nil or string.len(g_args.name) == 0 then
| |
| error('Name is required')
| |
| end
| |
|
| |
| g_args.icon = g_args.icon or g_args.name .. ' Quest icon.png'
| |
| g_args.boss = g_args.boss
| |
| if g_args.boss then
| |
| local n = tonumber(g_args.boss)
| |
| -- The number of bosses were given
| |
| if n then
| |
| g_args.boss = n
| |
| for i=1, n do
| |
| args_format_boss(tostring(i))
| |
| end
| |
| else
| |
| args_format_boss('')
| |
| end
| |
| end
| |
| g_args.key_item = g_args.key_item
| |
| g_args.required = util.cast.boolean(g_args.required)
| |
| g_args.start = g_args.start
| |
| g_args.objective = g_args.objective
| |
| g_args.completion = g_args.completion
| |
|
| |
| --
| |
| -- Formatting
| |
| --
| |
|
| |
| tbl = mw.html.create('table')
| |
| tbl
| |
| :attr('class', 'quest-table')
| |
| --:attr('style', 'width:300px; color: #bfbfbf; float:right; padding:0.1em; background-color:#1a1812; margin: 0px 0px 5px 5px;')
| |
| :tag('tr')
| |
| :tag('td')
| |
| :attr('colspan', 2)
| |
| --:attr('style', 'text-align:center;font-size:20px;font-weight:bold;')
| |
| :wikitext(g_args.name .. '<br>[[File:' .. g_args.icon .. '|128x128px|alt=' .. g_args.icon .. ']]')
| |
|
| |
| local rtext = ''
| |
| if g_args.required then
| |
| rtext = 'Yes'
| |
| else
| |
| rtext = 'No'
| |
| end
| |
| display_quest_add_row(tbl, 'Required: ', rtext)
| |
|
| |
| for _, v in pairs({'Start', 'Objective', 'Completion'}) do
| |
| display_quest_add_row(tbl, v .. ': ', g_args[string.lower(v)])
| |
| end
| |
|
| |
| if type(g_args.boss) == 'number' then
| |
| local v = {}
| |
| for i=1, g_args.boss do
| |
| v[#v+1] = display_format_boss(tostring(i))
| |
| v[#v+1] = '<br>'
| |
| end
| |
| display_quest_add_row(tbl, 'Boss: ', table.concat(v))
| |
| elseif type(g_args.boss) == 'string' then
| |
| display_quest_add_row(tbl, 'Boss: ', display_format_boss(''))
| |
| end
| |
|
| |
| if g_args.key_item then
| |
| display_quest_add_row(tbl, 'Key Item: ', g_args.key_item)
| |
| end
| |
|
| |
| local quest_rewards = show_reward{data_type='default', show_empty_message=false, filter_by_quest=g_args.name}
| |
| g_frame:callParserFunction('#vardefine', {'quest_rewards', quest_rewards})
| |
|
| |
| local vendor_rewards = show_reward{data_type='vendor', show_empty_message=false, filter_by_quest=g_args.name}
| |
| g_frame:callParserFunction('#vardefine', {'vendor_rewards', vendor_rewards})
| |
|
| |
| return tostring(tbl)
| |
| end
| |
| | |
| function args_format_boss(key)
| |
| local boss_key = 'boss' .. key
| |
| local link_key = boss_key .. '_link'
| |
| local image_key = boss_key .. '_image'
| |
| if g_args[boss_key] == nil then
| |
| error('Multiple bosses, but ' .. boss_key .. ' is empty')
| |
| end
| |
| g_args[link_key] = g_args[link_key] or g_args[boss_key]
| |
| g_args[image_key] = g_args[image_key] or g_args[boss_key] .. '.png'
| |
| end
| |
| | |
| function display_format_boss(key)
| |
| local boss_key = 'boss' .. key
| |
| local v = {}
| |
| -- Format the link
| |
| v[#v+1] = '[['
| |
| v[#v+1] = g_args[boss_key .. '_link']
| |
| v[#v+1] = '|'
| |
| v[#v+1] = g_args[boss_key]
| |
| v[#v+1] = ']]'
| |
| v[#v+1] = '<br>'
| |
| -- Format the image
| |
| v[#v+1] = '[[File:'
| |
| v[#v+1] = g_args[boss_key .. '_image']
| |
| v[#v+1] = '|alt='
| |
| v[#v+1] = g_args[boss_key]
| |
| v[#v+1] = ']]'
| |
|
| |
| return table.concat(v)
| |
| end
| |
| | |
| function display_quest_add_row(tbl, head, content)
| |
| if content == nil then
| |
| content = ''
| |
| end
| |
| tbl
| |
| :tag('tr')
| |
| :tag('th')
| |
| --:attr('style', 'text-align: right; font-weight: bold; background-color: #332f24;')
| |
| :attr('scope', 'row')
| |
| :wikitext(head)
| |
| :done()
| |
| :tag('td')
| |
| --:attr('style', 'text-align: center; background-color: #26231b;')
| |
| :wikitext(content)
| |
| :done()
| |
| end
| |
| | |
| return p
| |