Update - 1.13.0.124

EN: 1.13.0.124
CN: 1.13.0.124
JP: 1.13.0.128
KR: 1.13.0.130
This commit is contained in:
SL1900
2026-07-21 12:30:00 +09:00
parent a12087abad
commit 8c4bd41668
1334 changed files with 873026 additions and 95164 deletions
@@ -0,0 +1,614 @@
local PenguinLevel = require("Game.UI.Play_PenguinCard.PenguinLevel")
local PenguinLevel_Normal = class("PenguinLevel_Normal", PenguinLevel)
local PenguinCardQuest = require("Game.UI.Play_PenguinCard.PenguinCardQuest")
local PenguinCardUtils = require("Game.UI.Play_PenguinCard.PenguinCardUtils")
local mapEventConfig = {
PenguinCard_ChangeScore = "OnEvent_ChangeScore"
}
function PenguinLevel_Normal:Init(nFloorId, nLevelId, nActId, tbStarScore)
self:ParseServerData(nFloorId, nLevelId, nActId, tbStarScore)
self:ParseConfigData()
self:ParseLocalData()
self:BindEvent()
EventManager.Hit(EventId.OpenPanel, PanelId.PenguinCard, self)
end
function PenguinLevel_Normal:Exit()
self:UnBindEvent()
end
function PenguinLevel_Normal:ParseModeConfigData()
self.nMaxRound = ConfigTable.GetConfigNumber("PenguinCardMaxRound")
self.nMaxSlot = ConfigTable.GetConfigNumber("PenguinCardMaxSlot")
self.nMaxBuyLimit = ConfigTable.GetConfigNumber("PenguinCardHandCardCount")
self.nMaxCheckRound = ConfigTable.GetConfigNumber("PenguinCardMaxCheckRound")
self.tbRoundUpgradeCost = ConfigTable.GetConfigNumberArray("PenguinCardRoundUpgradeCost")
self.tbSlotUpgradeCost = ConfigTable.GetConfigNumberArray("PenguinCardSlotUpgradeCost")
self.tbBuyLimitUpgradeCost = ConfigTable.GetConfigNumberArray("PenguinCardBuyLimitUpgradeCost")
self.tbCheckRoundUpgradeCost = ConfigTable.GetConfigNumberArray("PenguinCardCheckRoundUpgradeCost")
end
function PenguinLevel_Normal:ParseModeLevelData(nFloorId)
local mapLevelCfg = ConfigTable.GetData("PenguinCardFloor", nFloorId)
if not mapLevelCfg then
return
end
self.nMaxTurn = mapLevelCfg.MaxTurn
self.nScore = mapLevelCfg.InitialScore
self.nTotalScore = mapLevelCfg.InitialScore
self.nSlotCount = mapLevelCfg.InitialSlot
self.nRoundLimit = mapLevelCfg.InitialRound
self.nCheckRoundLimit = mapLevelCfg.InitialCheckRound
self.nBuyLimit = mapLevelCfg.InitialBuyLimit
self.nWeightGroupId = mapLevelCfg.WeightGroup
self.nFixedTurnGroupId = mapLevelCfg.FixedTurn
self.sLevelDesc = mapLevelCfg.Floortips
self.bShowWin = mapLevelCfg.ShowWin
self.nQuestTurn = mapLevelCfg.QuestTurn
self.nQuestGroup = mapLevelCfg.QuestGroup
local mapPoolCfg = ConfigTable.GetData("PenguinBaseCardPool", mapLevelCfg.PoolId)
if not mapPoolCfg then
return
end
self.mapBaseCardPool = {
tbId = mapPoolCfg.BaseCardId,
tbWeight = mapPoolCfg.Weight
}
end
function PenguinLevel_Normal:ClearModeLevelData()
self.bPreTurnWin = false
if self.tbQuestPool == nil then
self.tbQuestPool = {}
end
self.mapQuest = nil
end
function PenguinLevel_Normal:CheckNextGameState()
if self.nGameState == nil then
return PenguinCardUtils.GameState.Start
elseif self.nGameState == PenguinCardUtils.GameState.Start then
if self.nQuestTurn >= 0 and self.nCurTurn >= self.nQuestTurn then
return PenguinCardUtils.GameState.Quest
else
return PenguinCardUtils.GameState.Prepare
end
elseif self.nGameState == PenguinCardUtils.GameState.Prepare then
return PenguinCardUtils.GameState.Dealing
elseif self.nGameState == PenguinCardUtils.GameState.Dealing then
return PenguinCardUtils.GameState.Flip
elseif self.nGameState == PenguinCardUtils.GameState.Flip then
return PenguinCardUtils.GameState.Settlement
elseif self.nGameState == PenguinCardUtils.GameState.Settlement then
if self.nCurRound < self:GetRoundLimitInTurn() then
return PenguinCardUtils.GameState.Dealing
end
if self.nCurTurn >= self.nMaxTurn then
return PenguinCardUtils.GameState.Complete
end
if self.mapQuest ~= nil then
return PenguinCardUtils.GameState.Quest
elseif self.nQuestTurn >= 0 and self.nCurTurn >= self.nQuestTurn then
return PenguinCardUtils.GameState.Quest
else
return PenguinCardUtils.GameState.Prepare
end
elseif self.nGameState == PenguinCardUtils.GameState.Quest then
if self.nCurTurn >= self.nMaxTurn or 0 >= self.nHp then
return PenguinCardUtils.GameState.Complete
else
return PenguinCardUtils.GameState.Prepare
end
end
end
function PenguinLevel_Normal:RunState_Start()
EventManager.Hit("PenguinCard_RunState_Start")
end
function PenguinLevel_Normal:QuitState_Start()
EventManager.Hit("PenguinCard_QuitState_Start")
local nWaitTime = 0.167
return nWaitTime
end
function PenguinLevel_Normal:RunState_Quest()
self.tbSelectableQuest = {}
self.bSkipQuestShow = false
self.mapQuestForShow = nil
if self.mapQuest ~= nil then
self.mapQuestForShow = clone(self.mapQuest)
local bComplete = self.mapQuest:CheckComplete()
if bComplete then
self:CompleteQuest()
self:RollQuest()
else
local bExpired = self.mapQuest:CheckExpired()
if bExpired then
self:ChangeHp(-1)
if self.nHp > 0 then
self:RollQuest()
end
else
self.bSkipQuestShow = true
end
end
else
self:RollQuest()
if next(self.tbSelectableQuest) == nil then
self.bSkipQuestShow = true
end
end
EventManager.Hit("PenguinCard_RunState_Quest", self.bSkipQuestShow)
if self.bSkipQuestShow then
self:SwitchGameState()
end
end
function PenguinLevel_Normal:QuitState_Quest(nNextState)
self.tbSelectableQuest = {}
self.bSkipQuestShow = false
self.mapQuestForShow = nil
EventManager.Hit("PenguinCard_QuitState_Quest", nNextState)
local nWaitTime = 0
if nNextState == PenguinCardUtils.GameState.Start then
nWaitTime = 0.6
elseif nNextState == PenguinCardUtils.GameState.Prepare then
nWaitTime = 0.57
elseif nNextState == PenguinCardUtils.GameState.Complete then
nWaitTime = 0.6
end
return nWaitTime
end
function PenguinLevel_Normal:RollQuest()
local tbId = self:GetRollQuestResult()
self:ClearSelectableQuest()
for _, nId in ipairs(tbId) do
local mapCard = self:CreateQuest(nId)
table.insert(self.tbSelectableQuest, mapCard)
end
self.mapQuest = nil
end
function PenguinLevel_Normal:GetRollQuestResult()
local mapWeightCfg = ConfigTable.GetData("PenguinCardQuestWeight", self.nQuestGroup * 100 + self.nCurTurn)
if not mapWeightCfg then
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sSound = "Mode_Card_refresh_falied",
sContent = ConfigTable.GetUIText("PenguinCard_Error_EmptyQuest")
})
return {}
end
local tbId = PenguinCardUtils.WeightedRandom(mapWeightCfg.QuestList, mapWeightCfg.Weight, 3)
return tbId
end
function PenguinLevel_Normal:ClearSelectableQuest()
if next(self.tbSelectableQuest) ~= nil then
for i = #self.tbSelectableQuest, 1, -1 do
local mapCard = table.remove(self.tbSelectableQuest, i)
self:RecycleQuest(mapCard)
end
end
end
function PenguinLevel_Normal:SelectQuest(nIndex)
self.mapQuest = nil
self.mapQuest = self.tbSelectableQuest[nIndex]
table.remove(self.tbSelectableQuest, nIndex)
self:ClearSelectableQuest()
EventManager.Hit("PenguinCard_SelectQuest")
if NovaAPI.IsEditorPlatform() then
printLog("领取任务:" .. " " .. self.mapQuest.nId)
end
end
function PenguinLevel_Normal:CompleteQuest()
local mapData = self:CreateBuff(self.mapQuest.nBuffId)
mapData:ResetAllTrigger()
self:AddBuff(mapData, true)
end
function PenguinLevel_Normal:RecycleQuest(mapQuest)
mapQuest:Clear()
table.insert(self.tbQuestPool, mapQuest)
end
function PenguinLevel_Normal:CreateQuest(nId)
local mapQuest
if next(self.tbQuestPool) == nil then
mapQuest = PenguinCardQuest.new(nId)
else
mapQuest = table.remove(self.tbQuestPool, 1)
mapQuest:Init(nId)
end
return mapQuest
end
function PenguinLevel_Normal:RunState_Prepare()
self.nCurTurn = self.nCurTurn + 1
self.nCurRound = 0
self:ClearStateData_Prepare()
self:ClearTurnData()
for _, v in ipairs(self.tbBuff) do
v:ResetTurnTrigger()
end
for _, v in ipairs(self.tbPenguinCard) do
if v ~= 0 then
v:ResetTurnTrigger()
end
end
self:TriggerEffect(GameEnum.PenguinCardTriggerPhase.Prepare)
self:TriggerEffect(GameEnum.PenguinCardTriggerPhase.BeforeUpgrade)
self:FreeRollPenguinCard()
EventManager.Hit("PenguinCard_RunState_Prepare")
end
function PenguinLevel_Normal:QuitState_Prepare(nNextState)
self:ClearSelectablePenguinCard()
self:ClearStateData_Prepare()
self.bPreTurnWin = false
EventManager.Hit("PenguinCard_QuitState_Prepare", nNextState)
local nWaitTime = 0
if nNextState == PenguinCardUtils.GameState.Start then
nWaitTime = 0.6
elseif nNextState == PenguinCardUtils.GameState.Dealing then
nWaitTime = 0.45
elseif nNextState == PenguinCardUtils.GameState.Complete then
nWaitTime = 0.6
end
return nWaitTime
end
function PenguinLevel_Normal:AddRound()
if self.nRoundLimit == self.nMaxRound then
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sSound = "Mode_Card_refresh_falied",
sContent = ConfigTable.GetUIText("PenguinCard_AddBtnMaxLevel")
})
return
end
local nCost = self.tbRoundUpgradeCost[self.nRoundLimit + 1] * self.nUpgradeDiscount
if nCost > self.nScore then
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sSound = "Mode_Card_refresh_falied",
sContent = ConfigTable.GetUIText("PenguinCard_NotEnoughScoreUpgrade")
})
return
end
self.nRoundLimit = self.nRoundLimit + 1
self:ChangeScore(-1 * nCost)
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sSound = "Mode_Card_buy",
sContent = orderedFormat(ConfigTable.GetUIText("PenguinCard_AddRoundSuccess"), self.nRoundLimit)
})
self:AfterUpgrade(nCost)
EventManager.Hit("PenguinCard_AddRound")
end
function PenguinLevel_Normal:AddSlot()
if self.nSlotCount == self.nMaxSlot then
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sSound = "Mode_Card_refresh_falied",
sContent = ConfigTable.GetUIText("PenguinCard_AddBtnMaxLevel")
})
return
end
local nCost = self.tbSlotUpgradeCost[self.nSlotCount + 1] * self.nUpgradeDiscount
if nCost > self.nScore then
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sSound = "Mode_Card_refresh_falied",
sContent = ConfigTable.GetUIText("PenguinCard_NotEnoughScoreUpgrade")
})
return
end
self.nSlotCount = self.nSlotCount + 1
self:ChangeScore(-1 * nCost)
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sSound = "Mode_Card_buy",
sContent = orderedFormat(ConfigTable.GetUIText("PenguinCard_AddSlotSuccess"), self.nSlotCount)
})
self:AfterUpgrade(nCost)
EventManager.Hit("PenguinCard_AddSlot")
end
function PenguinLevel_Normal:AddRoll()
if self.nBuyLimit == self.nMaxBuyLimit then
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sSound = "Mode_Card_refresh_falied",
sContent = ConfigTable.GetUIText("PenguinCard_AddBtnMaxLevel")
})
return
end
local nCost = self.tbBuyLimitUpgradeCost[self.nBuyLimit + 1] * self.nUpgradeDiscount
if nCost > self.nScore then
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sSound = "Mode_Card_refresh_falied",
sContent = ConfigTable.GetUIText("PenguinCard_NotEnoughScoreUpgrade")
})
return
end
self.nBuyLimit = self.nBuyLimit + 1
self:ChangeScore(-1 * nCost)
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sSound = "Mode_Card_buy",
sContent = orderedFormat(ConfigTable.GetUIText("PenguinCard_AddRollSuccess"), self.nBuyLimit)
})
self:AfterUpgrade(nCost)
EventManager.Hit("PenguinCard_AddRoll")
end
function PenguinLevel_Normal:AddCheckRound()
if self.nCheckRoundLimit == self.nMaxCheckRound then
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sSound = "Mode_Card_refresh_falied",
sContent = ConfigTable.GetUIText("PenguinCard_AddBtnMaxLevel")
})
return
end
local nCost = self.tbCheckRoundUpgradeCost[self.nCheckRoundLimit + 1] * self.nUpgradeDiscount
if nCost > self.nScore then
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sSound = "Mode_Card_refresh_falied",
sContent = ConfigTable.GetUIText("PenguinCard_NotEnoughScoreUpgrade")
})
return
end
self.nCheckRoundLimit = self.nCheckRoundLimit + 1
self:ChangeScore(-1 * nCost)
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sSound = "Mode_Card_buy",
sContent = orderedFormat(ConfigTable.GetUIText("PenguinCard_AddCheckRoundSuccess"), self.nRoundLimit)
})
self:AfterUpgrade(nCost)
EventManager.Hit("PenguinCard_AddCheckRound")
end
function PenguinLevel_Normal:GetPenguinCardWeightLevel()
return self.nCurTurn
end
function PenguinLevel_Normal:RunState_Dealing()
self:SaveSnapshot()
self.bCheckRound = self:GetSnapshotState()
self:AddCheckRoundBuff()
self.nCurRound = self.nCurRound + 1
self.nTotalRound = self.nTotalRound + 1
self:ClearRoundData()
self.mapCalBaseCardPool = clone(self.mapBaseCardPool)
for _, v in ipairs(self.tbBuff) do
v:ResetRoundTrigger()
end
for _, v in ipairs(self.tbPenguinCard) do
if v ~= 0 then
v:ResetRoundTrigger()
end
end
self:TriggerEffect(GameEnum.PenguinCardTriggerPhase.Dealing)
self.tbBaseCardId = PenguinCardUtils.WeightedRandom(self.mapCalBaseCardPool.tbId, self.mapCalBaseCardPool.tbWeight, self.nBaseCardCount, {}, true)
if 0 < self.nFixedTurnGroupId then
local nFixedId = self.nFixedTurnGroupId * 10000 + self.nCurTurn * 100 + self.nCurRound
local mapFixedCfg = ConfigTable.GetData("PenguinCardFixedTurn", nFixedId, true)
if mapFixedCfg then
self.tbBaseCardId = clone(mapFixedCfg.BaseCardId)
end
end
self.tbShowedCard = {}
for i = 1, self.nBaseCardCount do
self.tbShowedCard[i] = false
end
EventManager.Hit("PenguinCard_RunState_Dealing")
self:SwitchGameState()
end
function PenguinLevel_Normal:QuitState_Dealing(nNextState)
EventManager.Hit("PenguinCard_QuitState_Dealing", nNextState)
local nWaitTime = 0
if nNextState == PenguinCardUtils.GameState.Start then
nWaitTime = 0.6
elseif nNextState == PenguinCardUtils.GameState.Flip then
nWaitTime = self.bCheckRound and 1.87 or 0.85
elseif nNextState == PenguinCardUtils.GameState.Complete then
nWaitTime = 0.6
end
return nWaitTime
end
function PenguinLevel_Normal:AddCheckRoundBuff()
if not self.bCheckRound then
return
end
local nBuffId = ConfigTable.GetConfigNumber("PenguinCardCheckRoundBuffId")
local mapData = self:CreateBuff(nBuffId)
mapData:ResetAllTrigger()
self:AddBuff(mapData)
end
function PenguinLevel_Normal:RunState_Flip()
EventManager.Hit("PenguinCard_RunState_Flip")
self:PlayAuto()
end
function PenguinLevel_Normal:QuitState_Flip(nNextState)
self:StopAuto()
EventManager.Hit("PenguinCard_QuitState_Flip", nNextState)
local nWaitTime = 0
if nNextState == PenguinCardUtils.GameState.Start then
nWaitTime = 0.6
elseif nNextState == PenguinCardUtils.GameState.Settlement then
nWaitTime = 1
elseif nNextState == PenguinCardUtils.GameState.Complete then
nWaitTime = 0.6
end
return nWaitTime
end
function PenguinLevel_Normal:AfterShowBaseCard(mapCfg)
if self.mapQuest ~= nil then
for j = 1, 3 do
local nSuit = mapCfg["Suit" .. j]
local nCount = mapCfg["SuitCount" .. j]
if 0 < nSuit and 0 < nCount then
self.mapQuest:AddProgress(GameEnum.PenguinCardQuestType.SuitCount, {nId = nSuit, nCount = nCount})
end
end
end
end
function PenguinLevel_Normal:AfterCheckHandRank()
if self.mapQuest ~= nil then
self.mapQuest:AddProgress(GameEnum.PenguinCardQuestType.HandRank, {
nId = self.nHandRankId,
nCount = 1
})
end
end
function PenguinLevel_Normal:RunState_Settlement()
local HandRankSuitCount = self:AddSettlementHistory()
self:TriggerEffect(GameEnum.PenguinCardTriggerPhase.Settlement, {
HandRankSuitCount = HandRankSuitCount,
SuitCount = self.mapAllSuit,
HandRank = self.nHandRankId,
HandRankCount = self.tbHandRankCount
})
self:AddLog()
EventManager.Hit("PenguinCard_RunState_Settlement")
self:PlayAuto()
end
function PenguinLevel_Normal:QuitState_Settlement(nNextState)
self:StopAuto()
self:ChangeScore(self.nRoundScore)
if self.mapQuest ~= nil then
self.mapQuest:AddProgress(GameEnum.PenguinCardQuestType.Score, {
nCount = self.nRoundScore
})
end
self:EndRound()
if self:GetRoundLimitInTurn() == self.nCurRound then
self:EndTurn()
if self.mapQuest ~= nil then
self.mapQuest:AddTurnCount()
end
end
self.bCheckRound = false
self:ClearRoundData()
EventManager.Hit("PenguinCard_QuitState_Settlement", nNextState)
local nWaitTime = 0
if nNextState == PenguinCardUtils.GameState.Start then
nWaitTime = 0.6
elseif nNextState == PenguinCardUtils.GameState.Dealing then
nWaitTime = 0.57
elseif nNextState == PenguinCardUtils.GameState.Prepare then
nWaitTime = 0.57
elseif nNextState == PenguinCardUtils.GameState.Complete then
nWaitTime = 0.6
end
return nWaitTime
end
function PenguinLevel_Normal:RunState_Complete(mapParam)
self.nStar = self:GetStar()
EventManager.Hit("PenguinCard_RunState_Complete")
if self.nActId then
local tab = {}
table.insert(tab, {
"role_id",
tostring(PlayerData.Base._nPlayerId)
})
table.insert(tab, {
"activity_id",
tostring(self.nActId)
})
table.insert(tab, {
"battle_id",
tostring(self.nLevelId)
})
table.insert(tab, {
"round",
tostring(self.nCurTurn)
})
table.insert(tab, {
"result",
tostring(self.nStar == 0 and 2 or 1)
})
local nEnd = mapParam and mapParam.bManual == true and 2 or 1
table.insert(tab, {
"end_type",
tostring(nEnd)
})
table.insert(tab, {
"score",
tostring(self.nScore)
})
table.insert(tab, {
"star",
tostring(self.nStar)
})
local sId = ""
for i = 1, 6 do
if self.tbPenguinCard[i] ~= 0 then
if sId == "" then
sId = sId .. self.tbPenguinCard[i].nId
else
sId = sId .. "," .. self.tbPenguinCard[i].nId
end
end
end
table.insert(tab, {"card_list", sId})
table.insert(tab, {
"skill_1",
tostring(self.nRoundLimit)
})
table.insert(tab, {
"skill_2",
tostring(self.nSlotCount)
})
table.insert(tab, {
"skill_3",
tostring(self.nBuyLimit)
})
NovaAPI.UserEventUpload("minigame_PenguinCard", tab)
end
end
function PenguinLevel_Normal:QuitState_Complete()
self.nStar = 0
EventManager.Hit("PenguinCard_QuitState_Complete")
return 0
end
function PenguinLevel_Normal:OnEvent_ChangeScore(nBefore)
local nBeforeStar, nStar = 0, 0
for i, v in ipairs(self.tbStarScore) do
if v <= nBefore then
nBeforeStar = i
end
if v <= self.nScore then
nStar = i
end
end
if nBeforeStar == 0 and nStar == 1 and self.nGameState == PenguinCardUtils.GameState.Settlement then
self.bPreTurnWin = true
end
EventManager.Hit("PenguinCard_ChangeStar", nBeforeStar, nStar)
end
function PenguinLevel_Normal:BindEvent()
if type(mapEventConfig) ~= "table" then
return
end
for nEventId, sCallbackName in pairs(mapEventConfig) do
local callback = self[sCallbackName]
if type(callback) == "function" then
EventManager.Add(nEventId, self, callback)
end
end
end
function PenguinLevel_Normal:UnBindEvent()
if type(mapEventConfig) ~= "table" then
return
end
for nEventId, sCallbackName in pairs(mapEventConfig) do
local callback = self[sCallbackName]
if type(callback) == "function" then
EventManager.Remove(nEventId, self, callback)
end
end
end
function PenguinLevel_Normal:SaveModeSnapshot(mapSnapshot)
mapSnapshot.bPreTurnWin = self.bPreTurnWin
local mapQuest = self.mapQuest
if mapQuest ~= nil then
mapSnapshot.mapQuest = mapQuest:Serialize()
end
end
function PenguinLevel_Normal:RestoreModeSnapshot(mapSnapshot)
self.bPreTurnWin = mapSnapshot.bPreTurnWin
self.mapQuest = nil
if mapSnapshot.mapQuest ~= nil then
local mapQuest = self:CreateQuest(mapSnapshot.mapQuest.nId)
mapQuest:Deserialize(mapSnapshot.mapQuest)
self.mapQuest = mapQuest
end
end
return PenguinLevel_Normal
@@ -12,7 +12,12 @@ function PenguinBaseCardCtrl:Refresh(nId, bOpen)
return
end
self:SetSprite(self._mapNode.imgIcon, "UI/Play_PenguinCard/SpriteAtlas/Sprite/" .. mapCfg.Icon)
self.nSuit = mapCfg.Suit1
self.tbSuit = {}
for i = 1, 3 do
if mapCfg["Suit" .. i] > 0 and 0 < mapCfg["SuitCount" .. i] then
table.insert(self.tbSuit, mapCfg["Suit" .. i])
end
end
end
function PenguinBaseCardCtrl:RefreshIcon(bOpen)
self._mapNode.imgBg:SetActive(not bOpen)
@@ -37,12 +42,43 @@ function PenguinBaseCardCtrl:PlayFlipAni()
self._mapNode.imgBg:SetActive(false)
end, true, true, true)
end
function PenguinBaseCardCtrl:PlayReplaceAni()
self.animator:Play("PengUinCard_Base_Double", 0, 0)
function PenguinBaseCardCtrl:PlayFlipBackAni()
if self._mapNode.imgIcon.gameObject.activeSelf == false then
return
end
self._mapNode.imgBg.gameObject:SetActive(true)
self.animator:Play("PengUinCard_Base_TurnBack", 0, 0)
WwiseManger:PostEvent("Mode_Card_trunover")
self.animator.speed = self._panel.mapLevel.nSpeed
local nAnimTime = NovaAPI.GetAnimClipLength(self.animator, {
"PengUinCard_Base_Turn"
})
nAnimTime = nAnimTime / self._panel.mapLevel.nSpeed
self:AddTimer(1, nAnimTime, function()
self._mapNode.imgIcon.gameObject:SetActive(false)
end, true, true, true)
end
function PenguinBaseCardCtrl:PlayReplaceAni(bStone)
if bStone then
self.animator:Play("PengUinCard_Base_Stone", 0, 0)
WwiseManger:PostEvent("Mode_Card_stone")
else
self.animator:Play("PengUinCard_Base_Double", 0, 0)
WwiseManger:PostEvent("Mode_Card_cast")
end
self.animator.speed = self._panel.mapLevel.nSpeed
end
function PenguinBaseCardCtrl:PlayTriggerAni(pos)
if table.indexof(self._panel.mapLevel.tbHandRank, self.nSuit) == 0 then
local bTrigger = false
if not self.tbSuit or #self.tbSuit == 0 then
return
end
for _, nSuit in ipairs(self.tbSuit) do
if 0 < table.indexof(self._panel.mapLevel.tbHandRank, nSuit) then
bTrigger = true
end
end
if not bTrigger then
return
end
self.animator:Play("PengUinCard_Base_Open", 0, 0)
+16 -1
View File
@@ -131,7 +131,7 @@ function PenguinCard:Trigger(nTriggerPhase, mapTriggerSource, callback)
if nTriggerPhase ~= self.nTriggerPhase then
return
end
local bAble = PenguinCardUtils.CheckTriggerAble(self.nTriggerType, self.tbTriggerParam, self.nTriggerProbability, mapTriggerSource)
local bAble = PenguinCardUtils.CheckTriggerAble(self.nTriggerType, self.tbTriggerParam, self.nTriggerProbability, mapTriggerSource, self.nEffectType)
if not bAble then
return
end
@@ -183,4 +183,19 @@ end
function PenguinCard:GetIdByLevel(nGroupId, nLevel)
return nGroupId * 100 + nLevel
end
function PenguinCard:Serialize()
return {
nId = self.nId,
nSlotIndex = self.nSlotIndex,
nTriggerCount = self.nTriggerCount,
nGrowthLayer = self.nGrowthLayer,
bHighLight = self.bHighLight
}
end
function PenguinCard:Deserialize(mapData)
self:Init(mapData.nId, mapData.nGrowthLayer)
self.nSlotIndex = mapData.nSlotIndex
self.nTriggerCount = mapData.nTriggerCount
self.bHighLight = mapData.bHighLight
end
return PenguinCard
@@ -81,6 +81,15 @@ function PenguinCardBuff:AddDuration_Turn()
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
@@ -111,7 +120,7 @@ function PenguinCardBuff:Trigger(nTriggerPhase, mapTriggerSource, callback)
if nTriggerPhase ~= self.nTriggerPhase then
return false
end
local bAble = PenguinCardUtils.CheckTriggerAble(self.nTriggerType, self.tbTriggerParam, self.nTriggerProbability, mapTriggerSource)
local bAble = PenguinCardUtils.CheckTriggerAble(self.nTriggerType, self.tbTriggerParam, self.nTriggerProbability, mapTriggerSource, self.nEffectType)
if not bAble then
return false
end
@@ -140,4 +149,18 @@ function PenguinCardBuff:Trigger(nTriggerPhase, mapTriggerSource, callback)
EventManager.Hit("PenguinCardBuffTriggered", self.nId)
return true
end
function PenguinCardBuff:Serialize()
return {
nId = self.nId,
nTriggerCount = self.nTriggerCount,
nDurationCount = self.nDurationCount,
nGrowthLayer = self.nGrowthLayer
}
end
function PenguinCardBuff:Deserialize(mapData)
self:Init(mapData.nId)
self.nTriggerCount = mapData.nTriggerCount
self.nDurationCount = mapData.nDurationCount
self.nGrowthLayer = mapData.nGrowthLayer
end
return PenguinCardBuff
@@ -22,6 +22,8 @@ function PenguinCardBuffTipsCtrl:Refresh(mapBuff)
sSuffix = orderedFormat(ConfigTable.GetUIText("PenguinCard_BuffDescSuffix_Count"), mapBuff.nDurationParam - mapBuff.nDurationCount)
elseif mapBuff.nDurationType == GameEnum.PenguinCardBuffDuration.Turn then
sSuffix = orderedFormat(ConfigTable.GetUIText("PenguinCard_BuffDescSuffix_Turn"), mapBuff.nDurationParam - mapBuff.nDurationCount)
elseif mapBuff.nDurationType == GameEnum.PenguinCardBuffDuration.Round then
sSuffix = orderedFormat(ConfigTable.GetUIText("PenguinCard_BuffDescSuffix_Round"), mapBuff.nDurationParam - mapBuff.nDurationCount)
end
NovaAPI.SetTMPText(self._mapNode.txtDesc, mapBuff:GetDesc() .. sSuffix)
NovaAPI.SetTMPText(self._mapNode.txtName, mapBuff.sName)
@@ -133,6 +133,7 @@ function PenguinCardCtrl:RunState_Dealing()
self._mapNode.Prepare.gameObject:SetActive(false)
self._mapNode.Flip.gameObject:SetActive(true)
self._mapNode.Flip:Refresh_Dealing()
self._mapNode.Slot:Refresh()
EventManager.Hit("Guide_PassiveCheck_Msg", "Guide_PenguinCard_302")
end
function PenguinCardCtrl:QuitState_Dealing(nNextState)
@@ -180,7 +181,11 @@ function PenguinCardCtrl:QuitState_Settlement(nNextState)
self._mapNode.Flip:PlayOutAni()
WwiseManger:PostEvent("Mode_Card_dissolve")
elseif nNextState == PenguinCardUtils.GameState.Dealing then
self._mapNode.Flip:PlayRoundAni()
if self._panel.mapLevel.bRestoreSnapshot then
self._mapNode.Flip:PlayRoundBackAni()
else
self._mapNode.Flip:PlayRoundAni()
end
elseif nNextState == PenguinCardUtils.GameState.Complete then
self._mapNode.Slot:PlayOutAni()
self._mapNode.Flip:PlayOutAni()
@@ -277,7 +282,7 @@ function PenguinCardCtrl:OnEvent_AddBuff(mapBuff)
end
btn.onClick:AddListener(click)
end
function PenguinCardCtrl:OnEvent_DeleteBuff(nIndex, nDelayTime)
function PenguinCardCtrl:OnEvent_DeleteBuff(nIndex, nDelayTime, bSkipAni)
if not self.tbBuffItem or next(self.tbBuffItem) == nil then
return
end
@@ -291,6 +296,10 @@ function PenguinCardCtrl:OnEvent_DeleteBuff(nIndex, nDelayTime)
end, true, true, true)
end
if goBuff:IsNull() == false then
if bSkipAni then
destroy(goBuff)
return
end
if nDelayTime and 0 < nDelayTime then
self:AddTimer(1, nDelayTime, play, true, true, true)
else
@@ -50,6 +50,17 @@ PenguinCardFlipCtrl._mapNodeConfig = {
sLanguageId = "PenguinCard_Btn_FlipAll"
},
goShowAllOn = {},
imgCheckRound = {},
txtCheckRound = {sComponentName = "TMP_Text"},
btnCheckRound = {
sComponentName = "UIButton",
callback = "OnBtnClick_CheckRound"
},
txtBtnCheckRound = {
sComponentName = "TMP_Text",
sLanguageId = "PenguinCard_Btn_CheckRound"
},
goCheckRoundOff = {},
btnAuto = {
sComponentName = "UIButton",
callback = "OnBtnClick_Auto"
@@ -132,6 +143,8 @@ PenguinCardFlipCtrl._mapEventConfig = {
function PenguinCardFlipCtrl:Refresh_Dealing()
self._mapNode.imgNextRound:SetActive(false)
self._mapNode.btnNextRound.gameObject:SetActive(false)
self._mapNode.imgCheckRound:SetActive(false)
self._mapNode.btnCheckRound.gameObject:SetActive(false)
self._mapNode.imgRoundTitleBg:SetActive(false)
self._mapNode.goNextRoundOn:SetActive(false)
self._mapNode.btnShowAll.gameObject:SetActive(true)
@@ -145,27 +158,27 @@ function PenguinCardFlipCtrl:Refresh_Dealing()
self._mapNode.aniRoundScoreRatioBg.gameObject:SetActive(true)
self._mapNode.aniHandRankBg:Play("PengUinCard_HandRank_Off", 1, 0)
for i = 1, 5 do
self._mapNode.btnShow[i].interactable = true
self._mapNode.btnShow[i].interactable = false
self._mapNode.PenguinBaseCard[i]:Refresh(self._panel.mapLevel.tbBaseCardId[i])
self._mapNode.PenguinBaseCard[i]:PlayInAni()
end
if self._panel.mapLevel.nCurRound == 1 then
self.animator:Play("PengUinCard_Flip_in", 0, 0)
local nAnimTime = NovaAPI.GetAnimClipLength(self.animator, {
"PengUinCard_Flip_in"
})
EventManager.Hit(EventId.TemporaryBlockInput, nAnimTime)
if self._panel.mapLevel.bCheckRound then
self.animator:Play("PengUinCard_Flip_Card_shuffle", 0, 0)
WwiseManger:PostEvent("Mode_Card_re")
else
self.animator:Play("PengUinCard_Flip_Card_in", 0, 0)
local nAnimTime = NovaAPI.GetAnimClipLength(self.animator, {
"PengUinCard_Flip_Card_in"
})
EventManager.Hit(EventId.TemporaryBlockInput, nAnimTime)
if self._panel.mapLevel.nCurRound == 1 then
self.animator:Play("PengUinCard_Flip_in", 0, 0)
else
self.animator:Play("PengUinCard_Flip_Card_in", 0, 0)
end
WwiseManger:PostEvent("Mode_Card_nextround")
end
WwiseManger:PostEvent("Mode_Card_nextround")
end
function PenguinCardFlipCtrl:Refresh_Flip()
self._mapNode.btnShowAll.interactable = true
for i = 1, 5 do
self._mapNode.btnShow[i].interactable = true
end
self:StartShowAllOn()
self.mapHandRankScore = {}
end
@@ -175,12 +188,15 @@ function PenguinCardFlipCtrl:Refresh_Settlement()
end
self._mapNode.btnNextRound.gameObject:SetActive(true)
self._mapNode.btnNextRound.interactable = false
self._mapNode.btnCheckRound.interactable = false
self:AddTimer(1, 2 / self._panel.mapLevel.nSpeed, function()
self._mapNode.btnNextRound.interactable = true
self._mapNode.btnCheckRound.interactable = true
end, true, true, true)
self._mapNode.btnShowAll.gameObject:SetActive(false)
self._mapNode.goShowAllOn:SetActive(false)
self:RefreshRoundCount()
self:RefreshCheckRoundCount()
self._mapNode.aniHandRankBg:Play("PengUinCard_HandRank_On", 0, 0)
self:RefreshHandRank()
for i = 1, 5 do
@@ -199,13 +215,21 @@ function PenguinCardFlipCtrl:RefreshRoundCount()
NovaAPI.SetTMPText(self._mapNode.txtRoundTip, ConfigTable.GetUIText("PenguinCard_NextRoundTip"))
end
end
function PenguinCardFlipCtrl:RefreshCheckRoundCount()
NovaAPI.SetTMPText(self._mapNode.txtCheckRound, orderedFormat(ConfigTable.GetUIText("PenguinCard_LeftCheckRound"), self._panel.mapLevel.nCheckRoundLimit - self._panel.mapLevel.nCheckRoundCount))
self._mapNode.goCheckRoundOff:SetActive(self._panel.mapLevel.bCheckRound or self._panel.mapLevel.nCheckRoundLimit <= self._panel.mapLevel.nCheckRoundCount)
self._mapNode.btnCheckRound.gameObject:SetActive(self._panel.mapLevel.nCheckRoundLimit > 0)
self._mapNode.imgCheckRound:SetActive(self._panel.mapLevel.nCheckRoundLimit > 0)
end
function PenguinCardFlipCtrl:RefreshHandRank()
local nAll = #self._panel.mapLevel.tbHandRank
for i = 1, 6 do
self._mapNode.imgSuitCount[i].gameObject:SetActive(i <= nAll)
if i <= nAll then
local sName = AllEnum.PenguinCardSuitSprite[self._panel.mapLevel.tbHandRank[i]]
self:SetSprite(self._mapNode.imgSuitCount[i], "UI/Play_PenguinCard/SpriteAtlas/Sprite/" .. sName)
if 0 < nAll then
for i = 1, 6 do
self._mapNode.imgSuitCount[i].gameObject:SetActive(i <= nAll)
if i <= nAll then
local sName = AllEnum.PenguinCardSuitSprite[self._panel.mapLevel.tbHandRank[i]]
self:SetSprite(self._mapNode.imgSuitCount[i], "UI/Play_PenguinCard/SpriteAtlas/Sprite/" .. sName)
end
end
end
local mapCfg = ConfigTable.GetData("PenguinCardHandRank", self._panel.mapLevel.nHandRankId)
@@ -298,6 +322,31 @@ function PenguinCardFlipCtrl:PlayRoundAni()
self._mapNode.aniHandRankBg:Play("PengUinCard_HandRank_Off", 0, 0)
self:QuitScoreAni()
end
function PenguinCardFlipCtrl:PlayRoundBackAni()
for i = 1, 5 do
self._mapNode.PenguinBaseCard[i]:PlayFlipBackAni()
end
self._mapNode.aniHandRankBg:Play("PengUinCard_HandRank_Off", 0, 0)
self._mapNode.imgRoundTitleBg:SetActive(false)
if self._panel.mapLevel.mapQuest ~= nil then
local bComplete = self._panel.mapLevel.mapQuest:CheckComplete()
self._mapNode.imgQuestComplete:SetActive(bComplete)
if not bComplete then
local nP = self._panel.mapLevel.mapQuest.nAimCount / self._panel.mapLevel.mapQuest.nMaxAim
if 1 < nP then
nP = 1
end
local nPos = nP * QuestPos
self._mapNode.imgQuestProgress:DOSizeDelta(Vector2(nPos, 24), 0.5):SetEase(Ease.OutQuad)
end
end
self:QuitScoreAni()
self:RefreshRoundScore()
self._mapNode.aniRoundScoreBaseBg.gameObject:SetActive(false)
self._mapNode.aniRoundScoreBaseBg.gameObject:SetActive(true)
self._mapNode.aniRoundScoreRatioBg.gameObject:SetActive(false)
self._mapNode.aniRoundScoreRatioBg.gameObject:SetActive(true)
end
function PenguinCardFlipCtrl:QuitScoreAni()
if self.sequence then
self.sequence:Kill()
@@ -474,15 +523,13 @@ function PenguinCardFlipCtrl:OnBtnClick_ShowAll(btn)
self._panel.mapLevel:ShowBaseCard()
end
function PenguinCardFlipCtrl:OnBtnClick_NextRound(btn)
self._panel.mapLevel:StopAuto()
self._panel.mapLevel:NextRound()
self:QuitScoreAni()
if self._panel.mapLevel:GetRoundLimitInTurn() == self._panel.mapLevel.nCurRound and self._panel.mapLevel.nCurTurn < self._panel.mapLevel.nMaxTurn then
local callback = function()
self._panel.mapLevel:SwitchGameState()
end
EventManager.Hit("PenguinCard_OpenLog", self._panel.mapLevel.nCurTurn, false, callback)
else
self._panel.mapLevel:SwitchGameState()
end
function PenguinCardFlipCtrl:OnBtnClick_CheckRound(btn)
local bAble = self._panel.mapLevel:CheckRound()
if bAble then
self:QuitScoreAni()
end
end
function PenguinCardFlipCtrl:OnBtnClick_Auto(btn)
@@ -560,9 +607,9 @@ function PenguinCardFlipCtrl:OnEvent_ShowBaseCard(nIndex)
self._mapNode.btnShow[nIndex].interactable = false
end
end
function PenguinCardFlipCtrl:OnEvent_ReplaceBaseCard(nIndex)
function PenguinCardFlipCtrl:OnEvent_ReplaceBaseCard(nIndex, bStone)
self._mapNode.PenguinBaseCard[nIndex]:Refresh(self._panel.mapLevel.tbBaseCardId[nIndex], true)
self._mapNode.PenguinBaseCard[nIndex]:PlayReplaceAni()
self._mapNode.PenguinBaseCard[nIndex]:PlayReplaceAni(bStone)
self._mapNode.btnShow[nIndex].interactable = false
end
function PenguinCardFlipCtrl:OnEvent_ChangeHp(nChange)
@@ -584,7 +631,7 @@ end
function PenguinCardFlipCtrl:OnEvent_SelectQuest()
self:RefreshQuest()
end
function PenguinCardFlipCtrl:OnEvent_ChangeScore(nBefore, nBeforeStar, nStar)
function PenguinCardFlipCtrl:OnEvent_ChangeScore(nBefore)
if nBefore < self._panel.mapLevel.nScore and self._panel.mapLevel.nGameState == PenguinCardUtils.GameState.Settlement then
WwiseManger:PostEvent("Mode_Card_coin")
end
@@ -14,11 +14,11 @@ local newDayTime = UTILS.GetDayRefreshTimeOffset()
local LocalData = require("GameCore.Data.LocalData")
PenguinCardPrepareCtrl._mapNodeConfig = {
txtAddMax = {
nCount = 3,
nCount = 4,
sComponentName = "TMP_Text",
sLanguageId = "PenguinCard_AddBtnMax"
},
imgDiscount = {nCount = 3},
imgDiscount = {nCount = 4},
btnAddRound = {
sComponentName = "UIButton",
callback = "OnBtnClick_AddRound"
@@ -52,6 +52,17 @@ PenguinCardPrepareCtrl._mapNodeConfig = {
txtAddRollCost = {sComponentName = "TMP_Text"},
goAddRollOn = {},
goAddRollOff = {},
btnAddCheck = {
sComponentName = "UIButton",
callback = "OnBtnClick_AddCheckRound"
},
txtBtnAddCheck = {
sComponentName = "TMP_Text",
sLanguageId = "PenguinCard_Btn_AddCheckRound"
},
txtAddCheckCost = {sComponentName = "TMP_Text"},
goAddCheckOn = {},
goAddCheckOff = {},
txtScore = {sComponentName = "TMP_Text"},
imgStarOff = {nCount = 3},
imgStarOn = {nCount = 3},
@@ -114,7 +125,9 @@ PenguinCardPrepareCtrl._mapEventConfig = {
PenguinCard_AddRound = "OnEvent_AddRound",
PenguinCard_AddSlot = "OnEvent_AddSlot",
PenguinCard_AddRoll = "OnEvent_AddRoll",
PenguinCard_AddCheckRound = "OnEvent_AddCheckRound",
PenguinCard_ChangeScore = "OnEvent_ChangeScore",
PenguinCard_ChangeStar = "OnEvent_ChangeStar",
PenguinCard_RollPenguinCard = "OnEvent_RollPenguinCard",
PenguinCard_SelectPenguinCard = "OnEvent_SelectPenguinCard",
PenguinCard_SalePenguinCard = "OnEvent_SalePenguinCard",
@@ -126,6 +139,7 @@ function PenguinCardPrepareCtrl:Refresh()
self:RefreshAddRound()
self:RefreshAddSlot()
self:RefreshAddRoll()
self:RefreshAddCheckRound()
self:RefreshScore()
self:RefreshLeftTurn()
self:RefreshRoll()
@@ -207,6 +221,25 @@ function PenguinCardPrepareCtrl:RefreshAddRollCost()
NovaAPI.SetTMPColor(self._mapNode.txtAddRollCost, Black)
end
end
function PenguinCardPrepareCtrl:RefreshAddCheckRound()
self._mapNode.btnAddCheck.gameObject:SetActive(false)
end
function PenguinCardPrepareCtrl:RefreshAddCheckRoundCost()
if self._panel.mapLevel.nCheckRoundLimit < 0 or self._panel.mapLevel.nCheckRoundLimit >= self._panel.mapLevel.nMaxCheckRound then
return
end
local nCost = self._panel.mapLevel.tbCheckRoundUpgradeCost[self._panel.mapLevel.nCheckRoundLimit + 1] * self._panel.mapLevel.nUpgradeDiscount
nCost = math.ceil(nCost)
NovaAPI.SetTMPText(self._mapNode.txtAddCheckCost, self:ThousandsNumber(nCost))
if nCost > self._panel.mapLevel.nScore then
NovaAPI.SetTMPColor(self._mapNode.txtAddCheckCost, Red_Unable)
elseif 1 > self._panel.mapLevel.nUpgradeDiscount then
NovaAPI.SetTMPColor(self._mapNode.txtAddCheckCost, Green)
self._mapNode.imgDiscount[4]:SetActive(true)
else
NovaAPI.SetTMPColor(self._mapNode.txtAddCheckCost, Black)
end
end
function PenguinCardPrepareCtrl:RefreshScore()
local nScore = math.floor(self._panel.mapLevel.nScore)
NovaAPI.SetTMPText(self._mapNode.txtScore, self:ThousandsNumber(nScore))
@@ -384,6 +417,9 @@ end
function PenguinCardPrepareCtrl:OnBtnClick_AddRound(btn)
self._panel.mapLevel:AddRound()
end
function PenguinCardPrepareCtrl:OnBtnClick_AddCheckRound(btn)
self._panel.mapLevel:AddCheckRound()
end
function PenguinCardPrepareCtrl:OnBtnClick_Roll(btn)
self._panel.mapLevel:RollPenguinCard()
end
@@ -433,6 +469,7 @@ function PenguinCardPrepareCtrl:OnEvent_AddRoll()
self:RefreshAddRoll()
self:RefreshAddSlot()
self:RefreshAddRound()
self:RefreshAddCheckRound()
self:RefreshRollDesc()
self:RefreshRollCost()
local ani = self._mapNode.trBtnRoll:Find("AnimRoot"):GetComponent("Animator")
@@ -442,16 +479,25 @@ function PenguinCardPrepareCtrl:OnEvent_AddSlot()
self:RefreshAddRoll()
self:RefreshAddSlot()
self:RefreshAddRound()
self:RefreshAddCheckRound()
end
function PenguinCardPrepareCtrl:OnEvent_AddRound()
self:RefreshAddRoll()
self:RefreshAddSlot()
self:RefreshAddRound()
self:RefreshAddCheckRound()
end
function PenguinCardPrepareCtrl:OnEvent_ChangeScore(nBefore, nBeforeStar, nStar)
function PenguinCardPrepareCtrl:OnEvent_AddCheckRound()
self:RefreshAddRoll()
self:RefreshAddSlot()
self:RefreshAddRound()
self:RefreshAddCheckRound()
end
function PenguinCardPrepareCtrl:OnEvent_ChangeScore(nBefore)
self:RefreshAddRoundCost()
self:RefreshAddSlotCost()
self:RefreshAddRollCost()
self:RefreshAddCheckRoundCost()
self:RefreshRollCost()
if nBefore < self._panel.mapLevel.nScore and self._panel.mapLevel.nGameState == PenguinCardUtils.GameState.Prepare then
WwiseManger:PostEvent("Mode_Card_coin")
@@ -467,6 +513,8 @@ function PenguinCardPrepareCtrl:OnEvent_ChangeScore(nBefore, nBeforeStar, nStar)
local nScore = math.floor(v)
NovaAPI.SetTMPText(self._mapNode.txtScore, self:ThousandsNumber(nScore))
end, self._panel.mapLevel.nScore, 0.5):OnComplete(callback)
end
function PenguinCardPrepareCtrl:OnEvent_ChangeStar(nBeforeStar, nStar)
if self._panel.mapLevel.tbStarScore[3] > 0 then
local nPos = self:GetStarPos(nStar, self._panel.mapLevel.nScore)
self._mapNode.imgStarProgress:DOSizeDelta(Vector2(nPos, 24), 0.5):SetEase(Ease.OutQuad)
@@ -116,4 +116,18 @@ end
function PenguinCardQuest:CheckComplete()
return self.nAimCount >= self.nMaxAim
end
function PenguinCardQuest:Serialize()
return {
nId = self.nId,
nTurnCount = self.nTurnCount,
nAimCount = self.nAimCount,
nBuffId = self.nBuffId
}
end
function PenguinCardQuest:Deserialize(mapData)
self:Init(mapData.nId)
self.nTurnCount = mapData.nTurnCount
self.nAimCount = mapData.nAimCount
self.nBuffId = mapData.nBuffId
end
return PenguinCardQuest
@@ -84,6 +84,13 @@ function PenguinCardQuestCtrl:InitData(nActId)
self.actData = PlayerData.Activity:GetActivityDataById(self.nActId)
self.tbGroup = self.actData:GetQuestGroup()
self.nSelectIndex = 1
for i, v in ipairs(self.tbGroup) do
local bRed = RedDotManager.GetValid(RedDotDefine.Activity_PenguinCard_QuestGroup, {v})
if bRed then
self.nSelectIndex = i
break
end
end
self.nSelecedGroupId = self.tbGroup[self.nSelectIndex]
end
function PenguinCardQuestCtrl:Refresh()
@@ -374,7 +374,7 @@ function PenguinCardQuestSelectCtrl:OnEvent_DeleteBuff(nIndex)
end, true, true, true)
end
end
function PenguinCardQuestSelectCtrl:OnEvent_ChangeScore(nBefore, nBeforeStar, nStar)
function PenguinCardQuestSelectCtrl:OnEvent_ChangeScore(nBefore)
if nBefore < self._panel.mapLevel.nScore and self._panel.mapLevel.nGameState == PenguinCardUtils.GameState.Quest then
WwiseManger:PostEvent("Mode_Card_coin")
end
@@ -27,11 +27,6 @@ PenguinCardSelectCtrl._mapEventConfig = {
PenguinCard_ClickLevel = "OnEvent_Click",
PenguinCard_EnterLevel = "OnEvent_Enter"
}
PenguinCardSelectCtrl._mapRedDotConfig = {
[RedDotDefine.Activity_PenguinCard_AllQuest] = {
sNodeName = "reddotQuest"
}
}
function PenguinCardSelectCtrl:Refresh()
self.goFirstLock = nil
self.tbLevel = self.actData:GetLevelList()
@@ -82,6 +77,29 @@ function PenguinCardSelectCtrl:RefreshNormal(nIndex, nLevelId)
self.goFirstLock = goObj
end
end
function PenguinCardSelectCtrl:RegisterRedDot()
self._mapNode.reddotQuest:SetActive(false)
local mapActivityData = ConfigTable.GetData("Activity", self.nActId)
if mapActivityData == nil then
return
end
local nGroupId = mapActivityData.MidGroupId
if 0 < nGroupId then
local mapGroupData = PlayerData.Activity:GetActivityGroupDataById(nGroupId)
if mapGroupData ~= nil then
local actData = mapGroupData:GetActivityDataByIndex(AllEnum.ActivityThemeFuncIndex.Task)
if actData ~= nil then
RedDotManager.RegisterNode(RedDotDefine.Activity_Group_Task_Group, {
nGroupId,
actData.ActivityId,
mapActivityData.MiniGameRedDot
}, self._mapNode.reddotQuest)
end
end
else
RedDotManager.RegisterNode(RedDotDefine.Activity_PenguinCard_AllQuest, nil, self._mapNode.reddotQuest)
end
end
function PenguinCardSelectCtrl:Awake()
local param = self:GetPanelParam()
if type(param) == "table" then
@@ -92,6 +110,7 @@ function PenguinCardSelectCtrl:Awake()
end
function PenguinCardSelectCtrl:OnEnable()
self:Refresh()
self:RegisterRedDot()
end
function PenguinCardSelectCtrl:OnDisable()
for k, v in pairs(self.tbGridCtrl) do
@@ -105,7 +124,22 @@ end
function PenguinCardSelectCtrl:OnDestroy()
end
function PenguinCardSelectCtrl:OnBtnClick_Quest()
EventManager.Hit(EventId.OpenPanel, PanelId.PenguinCardQuest, self.nActId)
local mapActivityData = ConfigTable.GetData("Activity", self.nActId)
if mapActivityData == nil then
return
end
local nGroupId = mapActivityData.MidGroupId
if 0 < nGroupId then
local mapGroupData = PlayerData.Activity:GetActivityGroupDataById(nGroupId)
if mapGroupData ~= nil then
local actData = mapGroupData:GetActivityDataByIndex(AllEnum.ActivityThemeFuncIndex.Task)
if actData ~= nil then
EventManager.Hit(EventId.OpenPanel, actData.PanelId, actData.ActivityId, 5)
end
end
else
EventManager.Hit(EventId.OpenPanel, PanelId.PenguinCardQuest, self.nActId)
end
end
function PenguinCardSelectCtrl:OnEvent_Click(go)
self._mapNode.sc:ScrollToClick(go)
@@ -13,7 +13,8 @@ PenguinCardUtils.SuitName = {
[GameEnum.PenguinBaseCardSuit.Red] = "<sprite name=\"icon_PengCard_Fire_small\">",
[GameEnum.PenguinBaseCardSuit.Green] = "<sprite name=\"icon_PengCard_Wind_small\">"
}
function PenguinCardUtils.CheckTriggerAble(nTriggerType, tbTriggerParam, nTriggerProbability, mapTriggerSource)
function PenguinCardUtils.CheckTriggerAble(nTriggerType, tbTriggerParam, nTriggerProbability, mapTriggerSource, nEffectType)
local randomValue = math.random(0, 100)
local bAble = false
if nTriggerType == GameEnum.PenguinCardTriggerType.None then
bAble = true
@@ -46,7 +47,19 @@ function PenguinCardUtils.CheckTriggerAble(nTriggerType, tbTriggerParam, nTrigge
end
bAble = true
elseif nTriggerType == GameEnum.PenguinCardTriggerType.BaseCardId and mapTriggerSource.BaseCard then
bAble = mapTriggerSource.BaseCard.nId == tbTriggerParam[1]
for _, v in ipairs(tbTriggerParam) do
if mapTriggerSource.BaseCard.nId == v then
bAble = true
break
end
end
if nEffectType == GameEnum.PenguinCardEffectType.ReplaceBaseCard then
if mapTriggerSource.BaseCard.bReplaced == true then
return false
elseif bAble and nTriggerProbability >= randomValue then
mapTriggerSource.BaseCard.bReplaced = true
end
end
elseif nTriggerType == GameEnum.PenguinCardTriggerType.RepeatHandRank and mapTriggerSource.HandRankCount and mapTriggerSource.HandRank then
bAble = false
for id, count in pairs(mapTriggerSource.HandRankCount) do
@@ -64,7 +77,6 @@ function PenguinCardUtils.CheckTriggerAble(nTriggerType, tbTriggerParam, nTrigge
end
end
end
local randomValue = math.random(0, 100)
return bAble and nTriggerProbability >= randomValue
end
function PenguinCardUtils.CheckGrowthLayer(nGrowthTriggerType, tbGrowthTriggerParam, mapTriggerSource)
@@ -83,8 +95,13 @@ function PenguinCardUtils.CheckGrowthLayer(nGrowthTriggerType, tbGrowthTriggerPa
elseif nGrowthTriggerType == GameEnum.PenguinCardGrowthTriggerType.SuitCountInCard and mapTriggerSource.BaseCard then
local nAimSuit = tbGrowthTriggerParam[1]
local mapCfg = ConfigTable.GetData("PenguinBaseCard", mapTriggerSource.BaseCard.nId)
if mapCfg and nAimSuit == mapCfg.Suit1 then
nAdd = mapCfg.SuitCount1
if mapCfg then
for i = 1, 3 do
if 0 < mapCfg["Suit" .. i] and 0 < mapCfg["SuitCount" .. i] and nAimSuit == mapCfg["Suit" .. i] then
nAdd = mapCfg["SuitCount" .. i]
break
end
end
end
end
return nAdd
@@ -141,7 +158,7 @@ function PenguinCardUtils.SetEffectDesc(mapCfg, nGrowthLayer)
end
end
local ParseEffectParam = function(tbParam, nIndex)
if nEffectType == GameEnum.PenguinCardEffectType.AddBaseCardWeight then
if nEffectType == GameEnum.PenguinCardEffectType.AddBaseCardWeight or nEffectType == GameEnum.PenguinCardEffectType.ReplaceBaseCard then
local tbId = {}
for k, _ in pairs(tbParam) do
local nId = tonumber(k)
@@ -160,15 +177,6 @@ function PenguinCardUtils.SetEffectDesc(mapCfg, nGrowthLayer)
if mapBase then
return mapBase.Title
end
elseif nEffectType == GameEnum.PenguinCardEffectType.ReplaceBaseCard then
local nBaseCardId = tbParam[nIndex]
if nBaseCardId == nil then
return sError
end
local mapBase = ConfigTable.GetData("PenguinBaseCard", nBaseCardId)
if mapBase then
return mapBase.Title
end
elseif nEffectType == GameEnum.PenguinCardEffectType.RollSpecificCard then
local nCardId = tbParam[nIndex]
if nCardId == nil then
File diff suppressed because it is too large Load Diff