<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>http://wiki.ragnarok.plus/index.php?action=history&amp;feed=atom&amp;title=Module%3AQuest_Info_Dynamic</id>
	<title>Module:Quest Info Dynamic - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.ragnarok.plus/index.php?action=history&amp;feed=atom&amp;title=Module%3AQuest_Info_Dynamic"/>
	<link rel="alternate" type="text/html" href="http://wiki.ragnarok.plus/index.php?title=Module:Quest_Info_Dynamic&amp;action=history"/>
	<updated>2026-04-29T07:57:28Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>http://wiki.ragnarok.plus/index.php?title=Module:Quest_Info_Dynamic&amp;diff=1832&amp;oldid=prev</id>
		<title>Riunia: Quest Info Dynamic Module</title>
		<link rel="alternate" type="text/html" href="http://wiki.ragnarok.plus/index.php?title=Module:Quest_Info_Dynamic&amp;diff=1832&amp;oldid=prev"/>
		<updated>2026-02-15T22:54:06Z</updated>

		<summary type="html">&lt;p&gt;Quest Info Dynamic Module&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local function getArgs(frame)&lt;br /&gt;
	local args = {}&lt;br /&gt;
	local function normalize(source)&lt;br /&gt;
		for k, v in pairs(source) do&lt;br /&gt;
			if type(k) == &amp;quot;string&amp;quot; and v and v ~= &amp;quot;&amp;quot; then&lt;br /&gt;
				args[string.lower(k)] = v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	normalize(frame:getParent().args or {})&lt;br /&gt;
	normalize(frame.args or {})&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isBlank(val)&lt;br /&gt;
	if not val then return true end&lt;br /&gt;
	val = mw.text.trim(val)&lt;br /&gt;
&lt;br /&gt;
	-- Remove known &amp;quot;empty&amp;quot; HTML/wikitext outputs&lt;br /&gt;
	val = val:gsub(&amp;quot;&amp;lt;p&amp;gt;%s*&amp;lt;/p&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	val = val:gsub(&amp;quot;&amp;lt;p&amp;gt;&amp;lt;br ?/?&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	val = val:gsub(&amp;quot;&amp;lt;br ?/?&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	val = mw.text.trim(val)&lt;br /&gt;
&lt;br /&gt;
	return val == &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeRow(label, value)&lt;br /&gt;
	if not isBlank(value) then&lt;br /&gt;
		return string.format(&lt;br /&gt;
			&amp;#039;&amp;lt;tr class=&amp;quot;skill-info-row&amp;quot;&amp;gt;&amp;lt;td class=&amp;quot;skill-info-label  skill-info-quest-label&amp;quot;&amp;gt;%s&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;skill-info-value&amp;quot;&amp;gt;%s&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;,&lt;br /&gt;
			label, value&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function insertRow(out, label, value)&lt;br /&gt;
	local row = makeRow(label, value)&lt;br /&gt;
	if row ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		table.insert(out, row)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSection(title, class)&lt;br /&gt;
	return string.format(&lt;br /&gt;
		&amp;#039;&amp;lt;tr&amp;gt;&amp;lt;th colspan=&amp;quot;2&amp;quot; class=&amp;quot;skill-info-subheader&amp;quot;&amp;gt;%s&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;,&lt;br /&gt;
		title&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addCategory(cat)&lt;br /&gt;
	if not cat or cat == &amp;quot;&amp;quot; then return &amp;quot;&amp;quot; end&lt;br /&gt;
	return string.format(&amp;quot;[[Category:%s]]&amp;quot;, cat)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	local out = {}&lt;br /&gt;
&lt;br /&gt;
	local questClass = &amp;quot;skill-info-quest-window&amp;quot;&lt;br /&gt;
	local pagename = args.pagename or mw.title.getCurrentTitle().text&lt;br /&gt;
&lt;br /&gt;
	if not args.cat then&lt;br /&gt;
		if args.window then table.insert(out, &amp;quot;[[Category:Quest Window Quests]]&amp;quot;) end&lt;br /&gt;
		if args.jobexpreward then table.insert(out, &amp;quot;[[Category:Job Experience Reward]]&amp;quot;) end&lt;br /&gt;
		if args.baseexpreward then table.insert(out, &amp;quot;[[Category:Base Experience Reward]]&amp;quot;) end&lt;br /&gt;
		if args.classreq then table.insert(out, addCategory(args.classreq)) end&lt;br /&gt;
		if args.classreq2 then table.insert(out, addCategory(args.classreq2)) end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;table class=&amp;quot;infobox skill-info-table skill-info-quest&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	table.insert(out, string.format(&lt;br /&gt;
		&amp;#039;&amp;lt;tr&amp;gt;&amp;lt;th colspan=&amp;quot;2&amp;quot; class=&amp;quot;skill-info-header %s&amp;quot;&amp;gt;%s&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;,&lt;br /&gt;
		questClass, pagename&lt;br /&gt;
	))&lt;br /&gt;
&lt;br /&gt;
	-- Requirements section&lt;br /&gt;
	table.insert(out, makeSection(&amp;quot;Requirements&amp;quot;, questClass))&lt;br /&gt;
	insertRow(out, &amp;quot;Base Level:&amp;quot;, args.levelreq)&lt;br /&gt;
	insertRow(out, &amp;quot;Job Level:&amp;quot;, args.joblevelreq)&lt;br /&gt;
&lt;br /&gt;
	if args.classreq then&lt;br /&gt;
		local classText = string.format(&amp;quot;[[%s]]&amp;quot;, args.classreq)&lt;br /&gt;
		if args.classreq2 then&lt;br /&gt;
			classText = classText .. string.format(&amp;quot; or [[%s]]&amp;quot;, args.classreq2)&lt;br /&gt;
		end&lt;br /&gt;
		insertRow(out, &amp;quot;Job Class:&amp;quot;, classText)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	insertRow(out, &amp;quot;Skill Requirements:&amp;quot;, args.skillreq)&lt;br /&gt;
	insertRow(out, &amp;quot;Party:&amp;quot;, args.partyreq)&lt;br /&gt;
	insertRow(out, &amp;quot;Item(s) (Consumed):&amp;quot;, args.itemreq)&lt;br /&gt;
	insertRow(out, &amp;quot;Item(s) (Not Consumed):&amp;quot;, args.nitemreq)&lt;br /&gt;
	insertRow(out, &amp;quot;Zeny:&amp;quot;, args.zenyreq)&lt;br /&gt;
	insertRow(out, &amp;quot;Hunting:&amp;quot;, args.hunting)&lt;br /&gt;
	insertRow(out, &amp;quot;Quest Prerequisite(s):&amp;quot;, args.questsreq)&lt;br /&gt;
	insertRow(out, &amp;quot;Quest Corequisite(s):&amp;quot;, args.questscoreq)&lt;br /&gt;
&lt;br /&gt;
	-- Rewards section&lt;br /&gt;
	table.insert(out, makeSection(&amp;quot;Rewards&amp;quot;, questClass))&lt;br /&gt;
	insertRow(out, &amp;quot;Base Experience:&amp;quot;, args.baseexpreward)&lt;br /&gt;
	insertRow(out, &amp;quot;Job Experience:&amp;quot;, args.jobexpreward)&lt;br /&gt;
	insertRow(out, &amp;quot;Item(s):&amp;quot;, args.itemreward)&lt;br /&gt;
	insertRow(out, &amp;quot;Quest Reward(s):&amp;quot;, args.qreward)&lt;br /&gt;
&lt;br /&gt;
	-- External link row&lt;br /&gt;
	if args.external then&lt;br /&gt;
		table.insert(out, string.format(&lt;br /&gt;
			&amp;#039;&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;2&amp;quot; class=&amp;quot;skill-info-center&amp;quot;&amp;gt;\&amp;#039;\&amp;#039;\&amp;#039;[%s Event Notice]\&amp;#039;\&amp;#039;\&amp;#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;,&lt;br /&gt;
			args.external&lt;br /&gt;
		))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;/table&amp;gt;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Riunia</name></author>
	</entry>
</feed>