Files
StellaSora_DataLua/lua/game/ui/play_penguincard/penguincardbuff.lua
T
SL1900 7363298dc1 Update - 1.15.0.134
EN: 1.15.0.134
CN: 1.15.0.133
JP: 1.15.0.137
KR: 1.15.0.139
2026-09-08 12:00:00 +09:00

184 lines
5.7 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
local PenguinCardBuff = class("PenguinCardBuff")
local PenguinCardUtils = require("Game.UI.Play_PenguinCard.PenguinCardUtils")
function PenguinCardBuff:ctor(nId)
self:Clear()
self:Init(nId)
end
function PenguinCardBuff:Clear()
self.nId = nil
self.bOnly = nil
self.sName = nil
self.sIcon = nil
self.nTriggerPhase = nil
self.nTriggerType = nil
self.tbTriggerParam = nil
self.nTriggerProbability = nil
self.nTriggerLimit = nil
self.tbTriggerLimitParam = nil
self.nEffectType = nil
self.tbEffectParam = nil
self.tbGrowthEffectParam = nil
self.nDurationType = nil
self.nDurationParam = nil
self.nTriggerCount = nil
self.nRoundTriggerCount = nil
self.nDurationCount = nil
self.nGrowthLayer = nil
end
function PenguinCardBuff:Init(nId)
self.nId = nId
self:ParseConfigData(nId)
end
function PenguinCardBuff:ParseConfigData(nId)
local mapCfg = ConfigTable.GetData("PenguinCardBuff", nId)
if nil == mapCfg then
return
end
self.bOnly = mapCfg.ForcedReplacement or mapCfg.Duration ~= GameEnum.PenguinCardBuffDuration.FullGame
self.sName = mapCfg.Title
self.sIcon = mapCfg.Icon
self.nTriggerPhase = mapCfg.TriggerPhase
self.nTriggerType = mapCfg.TriggerType
self.tbTriggerParam = decodeJson(mapCfg.TriggerParam)
self.nTriggerProbability = mapCfg.TriggerProbability
self.nTriggerLimit = mapCfg.TriggerLimit
self.tbTriggerLimitParam = mapCfg.TriggerLimitParam
self.nEffectType = mapCfg.EffectType
self.tbEffectParam = decodeJson(mapCfg.EffectParam)
self.tbGrowthEffectParam = decodeJson(mapCfg.GrowthEffectParam)
self.nDurationType = mapCfg.Duration
self.nDurationParam = mapCfg.DurationParam
self.nDurationCount = 0
self.nGrowthLayer = 0
end
function PenguinCardBuff:GetDesc()
local mapCfg = ConfigTable.GetData("PenguinCardBuff", self.nId)
if nil == mapCfg then
return ""
end
return PenguinCardUtils.SetEffectDesc(mapCfg, self.nGrowthLayer)
end
function PenguinCardBuff:GetDelayTime()
if self.nEffectType == GameEnum.PenguinCardEffectType.BlockFatalDamage then
return 0.7
end
return 0
end
function PenguinCardBuff:AddDuration_Count()
if self.nDurationType == GameEnum.PenguinCardBuffDuration.Count then
self.nDurationCount = self.nDurationCount + 1
if self.nDurationCount >= self.nDurationParam then
return false
end
end
return true
end
function PenguinCardBuff:AddDuration_Turn()
if self.nDurationType == GameEnum.PenguinCardBuffDuration.Turn then
self.nDurationCount = self.nDurationCount + 1
if self.nDurationCount >= self.nDurationParam then
return false
end
end
return true
end
function PenguinCardBuff:AddDuration_Round()
if self.nDurationType == GameEnum.PenguinCardBuffDuration.Round then
self.nDurationCount = self.nDurationCount + 1
if self.nDurationCount >= self.nDurationParam then
return false
end
end
return true
end
function PenguinCardBuff:AddGrowthLayer()
self.nGrowthLayer = self.nGrowthLayer + 1
end
function PenguinCardBuff:ResetAllTrigger()
self:ResetGameTrigger()
self:ResetRoundTrigger()
self:ResetTurnTrigger()
end
function PenguinCardBuff:ResetGameTrigger()
if self.nTriggerLimit == GameEnum.PenguinCardTriggerLimit.Game then
self.nTriggerCount = 0
end
if self.nTriggerLimit == GameEnum.PenguinCardTriggerLimit.TurnAndRound then
self.nTriggerCount = 0
self.nRoundTriggerCount = 0
end
end
function PenguinCardBuff:ResetRoundTrigger()
if self.nTriggerLimit == GameEnum.PenguinCardTriggerLimit.Round then
self.nTriggerCount = 0
end
if self.nTriggerLimit == GameEnum.PenguinCardTriggerLimit.TurnAndRound then
self.nRoundTriggerCount = 0
end
end
function PenguinCardBuff:ResetTurnTrigger()
if self.nTriggerLimit == GameEnum.PenguinCardTriggerLimit.Turn then
self.nTriggerCount = 0
end
if self.nTriggerLimit == GameEnum.PenguinCardTriggerLimit.TurnAndRound then
self.nTriggerCount = 0
self.nRoundTriggerCount = 0
end
end
function PenguinCardBuff:Trigger(nTriggerPhase, mapTriggerSource, callback)
if not PenguinCardUtils.CheckTriggerLimit(self.nTriggerLimit, self.tbTriggerLimitParam, self.nTriggerCount, self.nRoundTriggerCount) then
return false
end
if nTriggerPhase ~= self.nTriggerPhase then
return false
end
local bAble = PenguinCardUtils.CheckTriggerAble(self.nTriggerType, self.tbTriggerParam, self.nTriggerProbability, mapTriggerSource, self.nEffectType)
if not bAble then
return false
end
local mapEffectValue
if PenguinCardUtils.SingleValueEffect[self.nEffectType] then
if self.bOnly == true then
mapEffectValue = self.tbEffectParam[1]
else
mapEffectValue = self.tbEffectParam[1] + self.nGrowthLayer * self.tbGrowthEffectParam[1]
end
else
mapEffectValue = self.tbEffectParam
end
if type(mapEffectValue) == "number" and mapEffectValue == 0 then
return false
end
if self.nTriggerLimit == GameEnum.PenguinCardTriggerLimit.TurnAndRound then
self.nTriggerCount = (self.nTriggerCount or 0) + 1
self.nRoundTriggerCount = (self.nRoundTriggerCount or 0) + 1
elseif self.nTriggerLimit ~= GameEnum.PenguinCardTriggerLimit.None then
self.nTriggerCount = self.nTriggerCount + 1
end
if callback then
if NovaAPI.IsEditorPlatform() then
printLog("Buff:" .. " " .. self.sName .. " " .. self:GetDesc())
end
callback(self.nEffectType, mapEffectValue)
end
EventManager.Hit("PenguinCardBuffTriggered", self.nId)
return true
end
function PenguinCardBuff:Serialize()
return {
nId = self.nId,
nTriggerCount = self.nTriggerCount,
nRoundTriggerCount = self.nRoundTriggerCount,
nDurationCount = self.nDurationCount,
nGrowthLayer = self.nGrowthLayer
}
end
function PenguinCardBuff:Deserialize(mapData)
self:Init(mapData.nId)
self.nTriggerCount = mapData.nTriggerCount
self.nRoundTriggerCount = mapData.nRoundTriggerCount
self.nDurationCount = mapData.nDurationCount
self.nGrowthLayer = mapData.nGrowthLayer
end
return PenguinCardBuff