__LOCAL_QuestList = {}
__EP_QuestList = {}
QuestTable = {}
function makeLocalQuestList(Quest_list)
for episodeId, episode in ipairs(Quest_list) do
episodeId = getTableSize(__LOCAL_QuestList) + 1
__LOCAL_QuestList[episodeId] = episode
episode.id = episodeId
for chapterId, chapter in ipairs(episode.list) do
__LOCAL_QuestList[episodeId][chapterId] = chapter
chapter.id = chapterId
for questId, quest in ipairs(chapter.list) do
__LOCAL_QuestList[episodeId][chapterId][questId] = quest
quest.id = questId
end
end
end
end
function makeEPQuestList(Quest_list)
for episodeId, episode in ipairs(Quest_list) do
episodeId = getTableSize(__EP_QuestList) + 1
__EP_QuestList[episodeId] = episode
episode.id = episodeId
for chapterId, chapter in ipairs(episode.list) do
__EP_QuestList[episodeId][chapterId] = chapter
chapter.id = chapterId
for questId, quest in ipairs(chapter.list) do
__EP_QuestList[episodeId][chapterId][questId] = quest
quest.id = questId
end
end
end
end
function queryEpisode(tabid, episodeId)
if tabid == 4 then
if __LOCAL_QuestList[episodeId] == nil then
return nil, nil, nil, nil
end
return __LOCAL_QuestList[episodeId].id, __LOCAL_QuestList[episodeId].name, __LOCAL_QuestList[episodeId].imagefile, getChapterIterator(episodeId, __LOCAL_QuestList)
elseif tabid == 3 then
if __EP_QuestList[episodeId] == nil then
return nil, nil, nil, nil
end
return __EP_QuestList[episodeId].id, __EP_QuestList[episodeId].name, __EP_QuestList[episodeId].imagefile, getChapterIterator(episodeId, __EP_QuestList)
end
end
function queryChapter(tabid, episodeId, chapterId)
if tabid == 4 then
if __LOCAL_QuestList[episodeId] == nil then
return nil, nil, nil, nil
end
if __LOCAL_QuestList[episodeId][chapterId] == nil then
return nil, nil, nil, nil
end
return __LOCAL_QuestList[episodeId].id, __LOCAL_QuestList[episodeId][chapterId].id, __LOCAL_QuestList[episodeId][chapterId].name, getQuestIterator(episodeId, chapterId, __LOCAL_QuestList)
elseif tabid == 3 then
if __EP_QuestList[episodeId] == nil then
return nil, nil, nil, nil
end
if __EP_QuestList[episodeId][chapterId] == nil then
return nil, nil, nil, nil
end
return __EP_QuestList[episodeId].id, __EP_QuestList[episodeId][chapterId].id, __EP_QuestList[episodeId][chapterId].name, getQuestIterator(episodeId, chapterId, __EP_QuestList)
end
end
function queryQuest(tabid, episodeId, chapterId, questId)
if tabid == 4 then
if __LOCAL_QuestList[episodeId] == nil then
return nil, nil, nil, nil, nil, nil
end
if __LOCAL_QuestList[episodeId][chapterId] == nil then
return nil, nil, nil, nil, nil, nil
end
if __LOCAL_QuestList[episodeId][chapterId][questId] == nil then
return nil, nil, nil, nil, nil, nil
end
return __LOCAL_QuestList[episodeId].id, __LOCAL_QuestList[episodeId][chapterId].id, __LOCAL_QuestList[episodeId][chapterId][questId].id, __LOCAL_QuestList[episodeId][chapterId][questId].name, __LOCAL_QuestList[episodeId][chapterId][questId].scrfilename, __LOCAL_QuestList[episodeId][chapterId][questId].questID
elseif tabid == 3 then
if __EP_QuestList[episodeId] == nil then
return nil, nil, nil, nil, nil, nil
end
if __EP_QuestList[episodeId][chapterId] == nil then
return nil, nil, nil, nil, nil, nil
end
if __EP_QuestList[episodeId][chapterId][questId] == nil then
return nil, nil, nil, nil, nil, nil
end
return __EP_QuestList[episodeId].id, __EP_QuestList[episodeId][chapterId].id, __EP_QuestList[episodeId][chapterId][questId].id, __EP_QuestList[episodeId][chapterId][questId].name, __EP_QuestList[episodeId][chapterId][questId].scrfilename, __EP_QuestList[episodeId][chapterId][questId].questID
end
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
makeLocalQuestList(LOCAL_MalayaQuest_List)
makeLocalQuestList(LOCAL_DewataQuest_List)
makeEPQuestList(EP_141Quest_List)
QuestTable.malayaQuest = malayaQuest_List
QuestTable.epsoid141Quest = epsoid141Quest_List
QuestTable.DewataQuest = DewataQuest_List
QuestTable.quest = {}
QuestTable.tab_recommend = {}
QuestTable.tab_episode = {}
QuestTable.tab_local = {}
QuestTable.tab_event = {}
QuestTable.tab_new = {}
function QuestTable.func_tab_add(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
function QuestTable.func_tab_add_pack(tbl, tabpack)
for summarybookseqId, summarybook in ipairs(tabpack) do
QuestTable.func_tab_add(tbl, summarybook)
end
end
function QuestTable.func_quest_lower_exchange_imagetag(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
function QuestTable.func_quest_lower_exchange_linktag(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
function QuestTable.func_quest_lower_add(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
function QuestTable.func_quest_add(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