-- Guide: http://herc.ws/board/topic/11668-guide-add-custom-quest-in-any-tab/
-- Tabs:
-- EVENT
-- LOCAL
-- EP
-- NEW
-- RECOMMENDED
-- Please Check the Guide to know how to use this file.
-- Do Not Touch This FILE
-- Tab Tables
__RECOMMENDED_QuestList = {}
__NEW_QuestList = {}
__EVENT_QuestList = {}
__LOCAL_QuestList = {}
__EP_QuestList = {}
-- Full QuestTable
QuestTable = {}
-- Tab ID's
RECOMMENDED_TABID = 2
EP_TABID = 3
LOCAL_TABID = 4
EVENT_TABID = 5
NEW_TABID = 6
-- Custom Function [By Dastgir/Hercules]
function getQuestTable(tab)
if (tabid == EVENT_TABID) then
return __EVENT_QuestList
elseif (tabid == LOCAL_TABID) then
return __LOCAL_QuestList
elseif (tabid == EP_TABID) then
return __EP_QuestList
elseif (tabid == RECOMMENDED_TABID) then
return __RECOMMENDED_QuestList
elseif (tabid == NEW_TABID) then
return __NEW_QuestList
end
end
-- Optimized Function [By Dastgir/Hercules]
function generateQuestList(Quest_list, questListTemp)
for episodeId,episode in ipairs(Quest_list) do
episodeId = getTableSize(questListTemp) + 1
questListTemp[episodeId] = episode
episode.id = episodeId
for chapterId,chapter in ipairs(episode.list) do
questListTemp[episodeId][chapterId] = chapter
chapter.id = chapterId
for questId,quest in ipairs(chapter.list) do
questListTemp[episodeId][chapterId][questId] = quest
quest.id = questId
end
end
end
return questListTemp
end
-- Custom Function [By Dastgir/Hercules]
function makeQuestList(Quest_list, QuestInfo)
if (QuestInfo == "EVENT") then
__EVENT_QuestList = generateQuestList(Quest_list, __EVENT_QuestList)
QuestTable.func_tab_add_pack( QuestTable.tab_event, Quest_list );
elseif (QuestInfo == "LOCAL") then
__LOCAL_QuestList = generateQuestList(Quest_list, __LOCAL_QuestList)
QuestTable.func_tab_add_pack( QuestTable.tab_local, Quest_list );
elseif (QuestInfo == "EP") then
__EP_QuestList = generateQuestList(Quest_list, __EP_QuestList)
QuestTable.func_tab_add_pack( QuestTable.tab_episode, Quest_list );
elseif (QuestInfo == "NEW") then
__NEW_QuestList = generateQuestList(Quest_list, __NEW_QuestList)
QuestTable.func_tab_add_pack( QuestTable.tab_new, Quest_list );
elseif (QuestInfo == "RECOMMENDED") then
__RECOMMENDED_QuestList = generateQuestList(Quest_list, __RECOMMENDED_QuestList)
QuestTable.func_tab_add_pack( QuestTable.tab_recommend, Quest_list );
end
end
-- Optimized Function [By Dastgir/Hercules]
function queryEpisode(tabid,episodeId)
quest_table = getQuestTable(tabid) -- Get Suitable Table
if(quest_table == nil or quest_table[episodeId] == nil) then
return nil,nil,nil,nil
end
return quest_table[episodeId].id,
quest_table[episodeId].name,
quest_table[episodeId].imagefile,
getChapterIterator(quest_table)
end
-- Optimized Function [By Dastgir/Hercules]
function queryChapter(tabid,episodeId,chapterId)
quest_table = getQuestTable(tabid) -- Get Suitable Table
if(quest_table == nil or quest_table[episodeId] == nil) then
return nil,nil,nil,nil
elseif(quest_table[episodeId][chapterId] == nil) then
return nil,nil,nil,nil
end
return quest_table[episodeId].id,
quest_table[episodeId][chapterId].id,
quest_table[episodeId][chapterId].name,
getQuestIterator(episodeId,chapterId,quest_table)
end
-- Optimized Function [By Dastgir/Hercules]
function queryQuest(tabid,episodeId,chapterId,questId)
quest_table = getQuestTable(tabid) -- Get Suitable Table
if(quest_table == nil or quest_table[episodeId] == nil) then
return nil,nil,nil,nil
elseif(quest_table[episodeId][chapterId] == nil) then
return nil,nil,nil,nil
elseif(quest_table[episodeId][chapterId][questId] == nil) then
return nil,nil,nil,nil,nil,nil
end
return quest_table[episodeId].id,
quest_table[episodeId][chapterId].id,
quest_table[episodeId][chapterId][questId].id,
quest_table[episodeId][chapterId][questId].name,
quest_table[episodeId][chapterId][questId].scrfilename,
quest_table[episodeId][chapterId][questId].questID
end
function getEpisodeIterator(__QuestList)
local pos = 1
return {
hasNext = function()
return __QuestList[pos]
end,
value = function()
temp_pos = pos
pos = pos + 1
return __QuestList[temp_pos]
end
}
end
function getChapterIterator(episodeId,__QuestList)
local pos = 1
return {
hasNext = function()
if(__QuestList[episodeId]==nil) then return nil end
return __QuestList[episodeId][pos]
end,
value = function()
temp_pos = pos
pos = pos + 1
return __QuestList[episodeId][temp_pos]
end
}
end
function getQuestIterator(episodeId,chapterId,__QuestList)
local pos = 1
return {
hasNext = function()
if(__QuestList[episodeId][chapterId]==nil) then return nil end
return __QuestList[episodeId][chapterId][pos]
end,
value = function()
temp_pos = pos
pos = pos + 1
return __QuestList[episodeId][chapterId][temp_pos]
end
}
end
function queryQuestID(tableName , questID)
returnTable = QuestTable[tableName]
if(returnTable[questID] == nil) then return nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil end
return returnTable[questID].NPCFromName,
returnTable[questID].NPCFromMap,
returnTable[questID].NPCFromSpr,
returnTable[questID].NPCFromX,
returnTable[questID].NPCFromY,
returnTable[questID].NPCToName,
returnTable[questID].NPCToMap,
returnTable[questID].NPCToSpr,
returnTable[questID].NPCToX,
returnTable[questID].NPCToY,
returnTable[questID].Item,
returnTable[questID].PrizeItem,
returnTable[questID].Title,
returnTable[questID].QuickInfo,
returnTable[questID].Info,
returnTable[questID].Hunt1,
returnTable[questID].Hunt2,
returnTable[questID].Hunt3,
returnTable[questID].Time,
returnTable[questID].Lv
end
QuestTable.quest = {};
QuestTable.tab_recommend = {};
QuestTable.tab_episode = {};
QuestTable.tab_local = {};
QuestTable.tab_event = {};
QuestTable.tab_new = {};
QuestTable.func_tab_add =
function( tbl, summarybook )
summarybookseqId = #tbl + 1
tbl[ summarybookseqId ] = summarybook
summarybook.seqid = summarybookseqId
for chapterseqId, chapter in ipairs( summarybook.list ) do
tbl[ summarybookseqId ][ chapterseqId ] = chapter
chapter.seqid = chapterseqId
for questseqId, summary in ipairs( chapter.list ) do
tbl[ summarybookseqId ][ chapterseqId ][ questseqId ] = summary
summary.seqid = questseqId
end
end
end
QuestTable.func_tab_add_pack = function( tbl, tabpack )
for summarybookseqId, summarybook in ipairs( tabpack ) do
QuestTable.func_tab_add( tbl, summarybook );
end
end
QuestTable.func_quest_lower_exchange_imagetag =
function( msg )
local imagetag_front_startpos, imagetag_front_endpos = string.find( msg, [[<%s*image%s*=%s*"%d*"%s*>]] );
if( nil == imagetag_front_startpos or nil == imagetag_front_endpos ) then return msg; end
local imagetag_front = string.sub( msg, imagetag_front_startpos, imagetag_front_endpos );
local imagetag_rear_startpos, imagetag_rear_endpos = string.find( msg, [[<%s*\end%s*>]], imagetag_front_endpos + 1 );
if( nil == imagetag_rear_startpos or nil == imagetag_rear_endpos ) then return msg; end
local imagetag_rear = string.sub( msg, imagetag_rear_startpos, imagetag_rear_endpos );
local name = string.sub( msg, imagetag_front_endpos + 1, imagetag_rear_startpos - 1 );
local num_startpos, num_endpos = string.find( imagetag_front, [["%d*"]] );
if( nil == num_startpos or nil == num_endpos ) then return msg; end
local itidstr = string.sub( imagetag_front, num_startpos + 1, num_endpos - 1 );
local tagstr = string.format( [[- %s%s
]], name, itidstr );
local final = "";
if( imagetag_front_startpos > 1 ) then final = final .. string.sub( msg, 1, imagetag_front_startpos - 1 ); end
final = final .. tagstr;
if( imagetag_rear_endpos < #msg ) then final = final .. string.sub( msg, imagetag_rear_endpos + 1 ); end
return QuestTable.func_quest_lower_exchange_imagetag( final );
end
QuestTable.func_quest_lower_exchange_linktag =
function ( msg )
local linktag_front_startpos, linktag_front_endpos = string.find( msg, [[<%s*link%s*=%s*".*">]] );
if( nil == linktag_front_startpos or nil == linktag_front_endpos ) then return msg; end
local linktag_front = string.sub( msg, linktag_front_startpos, linktag_front_endpos );
local linktag_rear_startpos, linktag_rear_endpos = string.find( msg, [[<%s*\end%s*>]], linktag_front_endpos + 1 );
if( nil == linktag_rear_startpos or nil == linktag_rear_endpos ) then return msg; end
local linktag_rear = string.sub( msg, linktag_rear_startpos, linktag_rear_endpos );
local name = string.sub( msg, linktag_front_endpos + 1, linktag_rear_startpos - 1 );
local spritename_startpos, spritename_endpos = string.find( linktag_front, [[".*"]] );
if( nil == spritename_startpos or nil == spritename_endpos ) then return msg; end
local spritename = string.sub( linktag_front, spritename_startpos + 1, spritename_endpos - 1 );
local tagstr = string.format( [[%s%s,0,0,3,-222]], name, spritename );
local final = "";
if( linktag_front_startpos > 1 ) then final = final .. string.sub( msg, 1, linktag_front_startpos - 1 ); end
final = final .. tagstr;
if( linktag_rear_endpos < #msg ) then final = final .. string.sub( msg, linktag_rear_endpos +1 ); end
return QuestTable.func_quest_lower_exchange_linktag( final );
end
QuestTable.func_quest_lower_add = function( questPack )
for questId, questDesc in pairs( questPack ) do
if( nil ~= questDesc.Item ) then questDesc.Item = QuestTable.func_quest_lower_exchange_imagetag( QuestTable.func_quest_lower_exchange_linktag( questDesc.Item ) ); end
if( nil ~= questDesc.PrizeItem) then questDesc.PrizeItem = QuestTable.func_quest_lower_exchange_imagetag( QuestTable.func_quest_lower_exchange_linktag( questDesc.PrizeItem ) ); end
if( nil ~= questDesc.Info ) then questDesc.Info = QuestTable.func_quest_lower_exchange_imagetag( QuestTable.func_quest_lower_exchange_linktag( questDesc.Info ) ); end
if( nil ~= questDesc.Hunt1 ) then questDesc.Hunt1 = QuestTable.func_quest_lower_exchange_imagetag( QuestTable.func_quest_lower_exchange_linktag( questDesc.Hunt1 ) ); end
if( nil ~= questDesc.Hunt2 ) then questDesc.Hunt2 = QuestTable.func_quest_lower_exchange_imagetag( QuestTable.func_quest_lower_exchange_linktag( questDesc.Hunt2 ) ); end
if( nil ~= questDesc.Hunt3 ) then questDesc.Hunt3 = QuestTable.func_quest_lower_exchange_imagetag( QuestTable.func_quest_lower_exchange_linktag( questDesc.Hunt3 ) ); end
QuestTable.quest[ questId ] = questDesc
end
end
QuestTable.func_quest_add = function( questPack )
for questId, questDesc in pairs( questPack ) do
QuestTable.quest[ questId ] = questDesc
end
end
function query_quest_desc( questID )
if( QuestTable.quest[ questID ] == nil) then return end
return
QuestTable.quest[ questID ].NPCFromName,
QuestTable.quest[ questID ].NPCFromMap,
QuestTable.quest[ questID ].NPCFromSpr,
QuestTable.quest[ questID ].NPCFromX,
QuestTable.quest[ questID ].NPCFromY,
QuestTable.quest[ questID ].NPCToName,
QuestTable.quest[ questID ].NPCToMap,
QuestTable.quest[ questID ].NPCToSpr,
QuestTable.quest[ questID ].NPCToX,
QuestTable.quest[ questID ].NPCToY,
QuestTable.quest[ questID ].Item,
QuestTable.quest[ questID ].PrizeItem,
QuestTable.quest[ questID ].Title,
QuestTable.quest[ questID ].Info,
QuestTable.quest[ questID ].Hunt1,
QuestTable.quest[ questID ].Hunt2,
QuestTable.quest[ questID ].Hunt3,
QuestTable.quest[ questID ].Time
end
function query_quest_tab_episode( tabname, episodeseqId )
if( nil == QuestTable[ tabname ] ) then return; end
if( nil == QuestTable[ tabname ][ episodeseqId ] ) then return; end
local episode = QuestTable[ tabname ][ episodeseqId ];
return episode.name, episode.imagefile;
end
function query_quest_tab_chapter( tabname, episodeseqId, chapterseqId )
if( nil == QuestTable[ tabname ] ) then return; end
if( nil == QuestTable[ tabname ][ episodeseqId ] ) then return; end
if( nil == QuestTable[ tabname ][ episodeseqId ][ chapterseqId] ) then return; end
local chapter = QuestTable[ tabname ][ episodeseqId ][ chapterseqId];
return chapter.name;
end
function query_quest_tab_summary( tabname, episodeseqId, chapterseqId, questseqId )
if( nil == QuestTable[ tabname ] ) then return; end
if( nil == QuestTable[ tabname ][ episodeseqId ] ) then return; end
if( nil == QuestTable[ tabname ][ episodeseqId ][ chapterseqId] ) then return; end
if( nil == QuestTable[ tabname ][ episodeseqId ][ chapterseqId][ questseqId ] ) then return; end
local summary = QuestTable[ tabname ][ episodeseqId ][ chapterseqId][ questseqId ];
return summary.name, summary.questID;
end
-- Custom Function [By Dastgir/Hercules]
function QuestTable.add(questList, label_name)
makeQuestList(questList, label_name)
end
-- Custom Function [By Dastgir/Hercules]
function QuestTable.addList(name, listTable)
QuestTable[name] = listTable
QuestTable.func_quest_lower_add(listTable)
end
-- Custom Function Calls(Don't Edit Below) [By Dastgir/Hercules]
makeQuestList(LOCAL_MalayaQuest_List, "LOCAL")
makeQuestList(LOCAL_DewataQuest_List, "LOCAL")
makeQuestList(EP_141Quest_List, "EP")
QuestTable.addList("malayaQuest", malayaQuest_List)
QuestTable.addList("epsoid141Quest", epsoid141Quest_List)
QuestTable.addList("DewataQuest", DewataQuest_List)