-- 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)