Files
SL1900 e0549005e1 Update - 1.9.0.103
EN: 1.9.0.103
CN: 1.9.0.104
JP: 1.9.0.106
KR: 1.9.0.108
2026-04-18 00:15:00 +09:00

120 lines
3.5 KiB
Lua

local PenguinCardQuest = class("PenguinCardQuest")
local PenguinCardUtils = require("Game.UI.Play_PenguinCard.PenguinCardUtils")
function PenguinCardQuest:ctor(nId)
self:Clear()
self:Init(nId)
end
function PenguinCardQuest:Clear()
self.nId = nil
self.nLevel = nil
self.nTurnLimit = nil
self.nBuffGroup = nil
self.nType = nil
self.tbParam = nil
self.sDesc = nil
self.nTurnCount = nil
self.nAimCount = nil
self.nMaxAim = nil
self.nBuffId = nil
end
function PenguinCardQuest:Init(nId)
self.nId = nId
self:ParseConfigData(nId)
end
function PenguinCardQuest:ParseConfigData(nId)
local mapCfg = ConfigTable.GetData("PenguinCardQuest", nId)
if nil == mapCfg then
return
end
self.nLevel = mapCfg.Level
self.nTurnLimit = mapCfg.TurnLimit
self.nBuffGroup = mapCfg.BuffGroup
self.nType = mapCfg.Type
self.tbParam = {}
for i = 1, 4 do
table.insert(self.tbParam, mapCfg["Param" .. i])
end
self.sDesc = self:SetDesc(mapCfg)
self.nTurnCount = 0
self.nAimCount = 0
self.nMaxAim = self.tbParam[1]
self:CreateBuffId()
end
function PenguinCardQuest:SetDesc(mapCfg)
local ParseParam = function(tbParam, nIndex)
if nIndex == 0 then
return self.nTurnLimit
end
local nParam = tbParam[nIndex]
if self.nType == GameEnum.PenguinCardQuestType.SuitCount and nIndex == 2 then
return PenguinCardUtils.SuitName[nParam]
elseif self.nType == GameEnum.PenguinCardQuestType.HandRank and nIndex == 2 then
local mapHandRankCfg = ConfigTable.GetData("PenguinCardHandRank", nParam)
if mapHandRankCfg then
return mapHandRankCfg.Title
end
end
return nParam
end
local result = string.gsub(mapCfg.Desc, "%b{}", function(token)
local content = string.match(token, "^{(.-)}$")
local sParameterKey, lang, langIdx = ParseLanguageParam(content)
if lang ~= nil then
token = string.format("{%s}", sParameterKey)
end
local trigIdx = string.match(token, "^{(%d+)}$")
if trigIdx then
local idx = tonumber(trigIdx)
local str = ParseParam(self.tbParam, idx)
str = LanguagePost(lang, langIdx, str)
return str
end
return token
end)
return result
end
function PenguinCardQuest:CreateBuffId()
local mapCfg = ConfigTable.GetData("PenguinCardBuffWeight", self.nBuffGroup)
if not mapCfg then
return
end
local tbBuffId = PenguinCardUtils.WeightedRandom(mapCfg.BuffList, mapCfg.Weight, 1)
self.nBuffId = tbBuffId[1]
end
function PenguinCardQuest:AddTurnCount()
self.nTurnCount = self.nTurnCount + 1
end
function PenguinCardQuest:AddProgress(nType, mapData)
if nType ~= self.nType then
return
end
if self.nType == GameEnum.PenguinCardQuestType.Score then
self:ChangeAimCount(mapData.nCount)
elseif self.nType == GameEnum.PenguinCardQuestType.HandRank then
local nAimId = self.tbParam[2]
if mapData.nId == nAimId then
self:ChangeAimCount(mapData.nCount)
end
elseif self.nType == GameEnum.PenguinCardQuestType.SuitCount then
local nAimId = self.tbParam[2]
if mapData.nId == nAimId then
self:ChangeAimCount(mapData.nCount)
end
end
end
function PenguinCardQuest:ChangeAimCount(nChange)
local nBefore = self.nAimCount
self.nAimCount = self.nAimCount + nChange
if NovaAPI.IsEditorPlatform() and nBefore ~= self.nAimCount then
printLog("任务进度变化:" .. " " .. self.nAimCount .. "/" .. self.nMaxAim)
end
EventManager.Hit("PenguinCard_ChangeQuestProcess", nChange)
end
function PenguinCardQuest:CheckExpired()
return self.nTurnCount >= self.nTurnLimit
end
function PenguinCardQuest:CheckComplete()
return self.nAimCount >= self.nMaxAim
end
return PenguinCardQuest