421 lines
12 KiB
Plaintext
421 lines
12 KiB
Plaintext
|
|
QuestDataUtil = {}
|
|
|
|
QuestDataUtil.KeyValuePair = {
|
|
{name = "id",type = "string",stepType = "illustration"},
|
|
{name = "type",type = "string",stepType = "carrier"},
|
|
{name = "button",type = "number",stepType = "guide"},
|
|
{name = "pos",type = "table"},
|
|
{name = "tarpos",type = "table"},
|
|
{name = "dialog",type = "table"},
|
|
{name = "method",type = "string"},
|
|
{name = "GM",type = "string"},
|
|
{name = "attention",type = "string"},
|
|
{name = "itemIcon",type = "string"},
|
|
{name = "name",type = "string"},
|
|
{name = "button",type = "string"},
|
|
{name = "text",type = "string"},
|
|
{name = "guide_quest_symbol",type = "string"},
|
|
{name = "teleMap",type = "table"},
|
|
}
|
|
function QuestDataUtil.getTypeBykeyAndStepType(key,stepType )
|
|
-- body
|
|
-- LogUtility.InfoFormat("FunctionLogin:requestGetUrlHost address url:{0}:{1}",key,stepType)
|
|
|
|
for i=1,#QuestDataUtil.KeyValuePair do
|
|
local single = QuestDataUtil.KeyValuePair[i]
|
|
if(single.stepType and stepType == single.stepType and single.name == key)then
|
|
return single.type
|
|
elseif(key == single.name and single.stepType == nil)then
|
|
return single.type
|
|
end
|
|
end
|
|
end
|
|
|
|
--ITem
|
|
function QuestDataUtil.getMethod( valueType )
|
|
if(valueType == "string")then
|
|
return tostring
|
|
elseif(valueType == "number")then
|
|
return tonumber
|
|
end
|
|
end
|
|
|
|
function QuestDataUtil.parseParams( params,stepType )
|
|
local param = {}
|
|
if(params and #params>0)then
|
|
for i=1,#params do
|
|
local key = params[i].key
|
|
local valueType = QuestDataUtil.getTypeBykeyAndStepType(key,stepType)
|
|
local valueMethod = QuestDataUtil.getMethod(valueType)
|
|
local value = params[i].value
|
|
local items = params[i].items
|
|
if(key == "npc")then
|
|
if(items and #items > 0)then
|
|
local table = QuestDataUtil.getLuaNumTable(items[1].items)
|
|
param.npc = table
|
|
else
|
|
param.npc = tonumber(value)
|
|
end
|
|
elseif(key == "item" or key == "telePath")then
|
|
if(items and items[1] and items[1].items and items[1].items[1] and items[1].items[1].items)then
|
|
local data = {}
|
|
local tempTb = items[1].items
|
|
for j= 1,#tempTb do
|
|
local item = tempTb[j]
|
|
|
|
local childKey = item.key
|
|
local childValues = item.items
|
|
local table = {}
|
|
for k=1,#childValues do
|
|
local childchildKey = childValues[k].key
|
|
local childchildValue = childValues[k].value
|
|
table[childchildKey] = tonumber(childchildValue)
|
|
end
|
|
data[tonumber(childKey)] = table
|
|
end
|
|
param.item = data
|
|
end
|
|
elseif(valueType and valueMethod)then
|
|
if(value)then
|
|
param[key] = valueMethod(value)
|
|
end
|
|
elseif(valueType)then
|
|
if(items and items[1] and items[1].items)then
|
|
local table = QuestDataUtil.getLuaNumTable(items[1].items)
|
|
param[key] = table
|
|
end
|
|
else
|
|
if(value)then
|
|
param[key] = tonumber(value)
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
return param
|
|
end
|
|
|
|
|
|
|
|
function QuestDataUtil.getLuaNumTable(items)
|
|
local table = {}
|
|
for j=1,#items do
|
|
local single = items[j]
|
|
local key = single.key
|
|
local value = single.value
|
|
table[tonumber(key)] = tonumber(value)
|
|
end
|
|
return table
|
|
end
|
|
|
|
function QuestDataUtil.getLuaStringTable(items)
|
|
local table = {}
|
|
for j=1,#items do
|
|
local single = items[j]
|
|
local key = single.key
|
|
local value = single.value
|
|
table[tonumber(key)] = tostring(value)
|
|
end
|
|
return table
|
|
end
|
|
|
|
function QuestDataUtil.getTranceInfoTable(questData,data,questType,process)
|
|
-- body
|
|
local table = {}
|
|
if(data == nil)then
|
|
return table
|
|
end
|
|
local process = process and process or questData.process
|
|
local questType = questType or questData.questDataStepType
|
|
if( questType == QuestDataStepType.QuestDataStepType_VISIT)then
|
|
local npc = data.npc
|
|
local id = 0
|
|
if(type(npc) == "table")then
|
|
id = npc[1]
|
|
else
|
|
id = npc
|
|
end
|
|
local infoTable = Table_Npc[id]
|
|
if(infoTable == nil)then
|
|
infoTable = Table_Monster[id]
|
|
end
|
|
|
|
if(infoTable ~= nil)then
|
|
table = {
|
|
param2 = nil,
|
|
npcName = infoTable.NameZh,
|
|
}
|
|
-- table = {
|
|
-- param2 = nil,
|
|
-- npcName = '[32cd32]'..infoTable.NameZh..'[-]',
|
|
-- }
|
|
else
|
|
errorLog("invalid visit questType:. npcId:")
|
|
errorLog(id)
|
|
end
|
|
if(questData.names)then
|
|
local itemName = questData.names[1]
|
|
table.itemName = itemName
|
|
end
|
|
elseif(questType == QuestDataStepType.QuestDataStepType_KILL)then
|
|
local id = data.monster
|
|
local groupId = data.groupId
|
|
local totalNum = data.num
|
|
local infoTable = Table_Monster[id]
|
|
if(infoTable == nil)then
|
|
infoTable = Table_Npc[id]
|
|
end
|
|
if(infoTable ~= nil)then
|
|
table = {
|
|
num = process..'/'..totalNum,
|
|
monsterName = infoTable.NameZh,
|
|
}
|
|
elseif(groupId)then
|
|
table = {
|
|
num = process..'/'..totalNum,
|
|
}
|
|
else
|
|
errorLog("invalid kill or collect questType:. id:"..questData.id)
|
|
end
|
|
elseif(questType == QuestDataStepType.QuestDataStepType_COLLECT)then
|
|
local id = data.monster
|
|
local totalNum = data.num
|
|
local infoTable = Table_Monster[id]
|
|
if(infoTable == nil)then
|
|
infoTable = Table_Npc[id]
|
|
end
|
|
if(infoTable ~= nil)then
|
|
table = {
|
|
num = process..'/'..totalNum,
|
|
monsterName = infoTable.NameZh,
|
|
}
|
|
else
|
|
errorLog("invalid kill or collect questType:. id:"..questData.id)
|
|
end
|
|
elseif(questType == QuestDataStepType.QuestDataStepType_GATHER)then
|
|
|
|
local items = ItemUtil.GetRewardItemIdsByTeamId(data.reward)
|
|
if(not items or not items[1])then
|
|
helplog("questId:"..questData.id.."rewardId:"..(data.reward or 0).." 該獎勵任務不存在此獎勵")
|
|
return
|
|
end
|
|
|
|
local itemId = items[1].id
|
|
local totalNum = data.num
|
|
local infoTable = Table_Item[tonumber(itemId)]
|
|
if(infoTable ~= nil)then
|
|
table = {
|
|
num = process..'/'..totalNum,
|
|
itemName = infoTable.NameZh,
|
|
}
|
|
else
|
|
helplog("invalid itemId:"..itemId)
|
|
end
|
|
elseif(questType == QuestDataStepType.QuestDataStepType_ITEM)then
|
|
|
|
-- local id = data.monster
|
|
-- local groupId = data.groupId
|
|
local item = data.item and data.item[1]
|
|
local itemId = item and item.id or 0
|
|
local totalNum = item and item.num or 0
|
|
|
|
local infoTable = Table_Item[tonumber(itemId)]
|
|
if(infoTable and infoTable.Type == 160)then
|
|
process = BagProxy.Instance:GetItemNumByStaticID(itemId,BagProxy.BagType.Quest) or 0
|
|
else
|
|
process = BagProxy.Instance:GetItemNumByStaticID(itemId) or 0
|
|
end
|
|
|
|
itemName = infoTable and infoTable.NameZh or nil
|
|
table = {
|
|
num = process..'/'..totalNum,
|
|
itemName = itemName,
|
|
}
|
|
|
|
elseif(questType == QuestDataStepType.QuestDataStepType_ADVENTURE)then
|
|
local totalNum = data.num and data.num or 0
|
|
-- local manual_type = data.manual_type
|
|
-- local status = data.status
|
|
-- if(manual_type == SceneManual_pb.EMANUALTYPE_MONSTER)then
|
|
-- local monster_type = data.monster_type
|
|
-- local process = AdventureDataProxy.Instance:getUnLockMonsterByType(QuestData.MonsterType[monster_type],status)
|
|
table = {
|
|
num = process..'/'..totalNum
|
|
}
|
|
-- else
|
|
-- table = {}
|
|
-- end
|
|
elseif(questType == QuestDataStepType.QuestDataStepType_CHECKPROGRESS)then
|
|
local id = data.monster
|
|
local groupId = data.groupId
|
|
local totalNum = data.num and data.num or 0
|
|
local infoTable = Table_Monster[id]
|
|
if(infoTable == nil)then
|
|
infoTable = Table_Npc[id]
|
|
end
|
|
if(infoTable ~= nil)then
|
|
table = {
|
|
num = process..'/'..totalNum,
|
|
monsterName = infoTable.NameZh,
|
|
}
|
|
elseif(groupId)then
|
|
table = {
|
|
num = process..'/'..totalNum,
|
|
}
|
|
else
|
|
errorLog("invalid check_progress questType:. id:"..questData.id)
|
|
end
|
|
elseif(questType == QuestDataStepType.QuestDataStepType_MONEY)then
|
|
|
|
-- local id = data.monster
|
|
-- local groupId = data.groupId
|
|
local itemType = data.moneytype
|
|
local totalNum = data.num
|
|
if(itemType == ProtoCommon_pb.EMONEYTYPE_FRIENDSHIP)then
|
|
process = BagProxy.Instance:GetItemNumByStaticID(itemType)
|
|
elseif( itemType == ProtoCommon_pb.EMONEYTYPE_GARDEN)then
|
|
process = BagProxy.Instance:GetItemNumByStaticID(GameConfig.MoneyId.Happy)
|
|
else
|
|
local enum = QuestDataUtil.getUserDataEnum(itemType)
|
|
process = Game.Myself.data.userdata:Get(enum)
|
|
end
|
|
process = process and process or 0
|
|
table = {
|
|
num = process..'/'..totalNum,
|
|
}
|
|
elseif(questType == QuestDataStepType.QuestDataStepType_ITEM_USE or
|
|
questType == QuestDataStepType.QuestDataStepType_MUSIC or
|
|
questType == QuestDataStepType.QuestDataStepType_HAND or
|
|
questType == QuestDataStepType.QuestDataStepType_PHOTO or
|
|
questType == QuestDataStepType.QuestDataStepType_CARRIER )then
|
|
|
|
process = process and process or 0
|
|
|
|
table = {
|
|
num = process,
|
|
}
|
|
if(questData.names)then
|
|
local name = questData.names[1]
|
|
table.name = name
|
|
end
|
|
elseif(questType == QuestDataStepType.QuestDataStepType_BATTLE) then
|
|
process = process and process or 0
|
|
local monsterName
|
|
local id = data.monster
|
|
|
|
local infoTable = Table_Monster[id]
|
|
if(infoTable == nil)then
|
|
infoTable = Table_Npc[id]
|
|
end
|
|
if(infoTable ~= nil)then
|
|
monsterName = infoTable.NameZh
|
|
end
|
|
table = {
|
|
num = process,
|
|
monsterName = monsterName
|
|
}
|
|
if(questData.names)then
|
|
local name = questData.names[1]
|
|
table.name = name
|
|
end
|
|
else
|
|
table = {}
|
|
end
|
|
return table
|
|
end
|
|
|
|
function QuestDataUtil.getUserDataEnum( moneyType)
|
|
-- body
|
|
if(moneyType==ProtoCommon_pb.EMONEYTYPE_DIAMOND)then
|
|
--todo
|
|
return UDEnum.DIAMOND
|
|
elseif(moneyType==ProtoCommon_pb.EMONEYTYPE_SILVER)then
|
|
return UDEnum.SILVER
|
|
elseif(moneyType==ProtoCommon_pb.EMONEYTYPE_GOLD)then
|
|
return UDEnum.GOLD
|
|
elseif(moneyType==ProtoCommon_pb.EMONEYTYPE_GARDEN)then
|
|
return UDEnum.GARDEN
|
|
elseif(moneyType==ProtoCommon_pb.EMONEYTYPE_FRIENDSHIP)then
|
|
return UDEnum.FRIENDSHIP
|
|
elseif(moneyType==ProtoCommon_pb.EMONEYTYPE_DEADCOIN)then
|
|
return UDEnum.DEADCOIN
|
|
end
|
|
end
|
|
|
|
|
|
function QuestDataUtil.parseWantedQuestTranceInfo( questData,wantedData )
|
|
-- body
|
|
local params = wantedData.Params
|
|
local tableValue = QuestDataUtil.getTranceInfoTable(questData,params,wantedData.Content)
|
|
if(tableValue == nil)then
|
|
return "parse table text is nil:"..wantedData.Target
|
|
end
|
|
-- printRed(wantedData.Target)
|
|
local result = string.gsub(wantedData.Target,'%[(%w+)]',tableValue)
|
|
|
|
local index = 1
|
|
result = string.gsub(result,'%[(%w+)]',function ( str )
|
|
-- body
|
|
local value = self.names[index]
|
|
index = index + 1
|
|
return value
|
|
end)
|
|
return result
|
|
end
|
|
|
|
QuestDataUtil.BossKeyValuePair =
|
|
{
|
|
{name = "id",type = "string"},
|
|
{name = "npcid",type = "number"},
|
|
{name = "num",type = "number"},
|
|
{name = "monsterid",type = "number"},
|
|
{name = "monsternum",type = "number"},
|
|
{name = "dialog_select",type "number"},
|
|
{name = "yes_dialogs",type = "table"},
|
|
{name = "no_dialogs",type = "table"},
|
|
}
|
|
|
|
function QuestDataUtil.getTypeBykeyAndContent(key,bossStepType)
|
|
for i=1,#QuestDataUtil.BossKeyValuePair do
|
|
local single = QuestDataUtil.BossKeyValuePair[i]
|
|
if(single.bossStepType and bossStepType == single.content and single.name == key)then
|
|
return single.type
|
|
elseif(key == single.name and single.bossStepType == nil)then
|
|
return single.type
|
|
end
|
|
end
|
|
end
|
|
|
|
function QuestDataUtil.parseBossStepParams( params,bossStepType )
|
|
local param = {}
|
|
if(params and #params>0)then
|
|
redlog("#params",#params)
|
|
for i=1,#params do
|
|
local key = params[i].key
|
|
local valueType = QuestDataUtil.getTypeBykeyAndContent(key,bossStepType)
|
|
local valueMethod = QuestDataUtil.getMethod(valueType)
|
|
local value = params[i].value
|
|
local items = params[i].items
|
|
if(valueType and valueMethod)then
|
|
if(value)then
|
|
param[key] = valueMethod(value)
|
|
redlog("key value",key,param[key])
|
|
end
|
|
elseif(valueType)then
|
|
if(items and items[1] and items[1].items)then
|
|
local table = QuestDataUtil.getLuaNumTable(items[1].items)
|
|
param[key] = table
|
|
redlog("key value",key,param[key])
|
|
end
|
|
else
|
|
if(value)then
|
|
param[key] = tonumber(value)
|
|
redlog("key value",key,param[key])
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
return param
|
|
end |