Update - 1.9.0.107

EN: 1.9.0.107
CN: 1.9.0.108
JP: 1.9.0.112
KR: 1.9.0.112
This commit is contained in:
SL1900
2026-05-14 16:00:00 +09:00
parent 4b880806ef
commit eafd8f4088
1034 changed files with 809589 additions and 23067 deletions
@@ -25,6 +25,8 @@ function PenguinCard:Clear()
self.nLevel = nil
self.nMaxLevel = nil
self.nSoldPrice = nil
self.nTendencyGroup = nil
self.nTendencyScore = nil
self.nTriggerPhase = nil
self.nTriggerType = nil
self.tbTriggerParam = nil
@@ -41,6 +43,7 @@ function PenguinCard:Clear()
self.tbGrowthEffectParam = nil
self.nTriggerCount = nil
self.nGrowthLayer = nil
self.bHighLight = nil
end
function PenguinCard:Init(nId, nGrowthLayer)
self.nId = nId
@@ -59,6 +62,8 @@ function PenguinCard:ParseConfigData(nId)
self.nLevel = mapCfg.Level
self.nMaxLevel = mapCfg.MaxLevel
self.nSoldPrice = mapCfg.SoldPrice
self.nTendencyGroup = mapCfg.TendencyGroup
self.nTendencyScore = mapCfg.TendencyScore
self.nTriggerPhase = mapCfg.TriggerPhase
self.nTriggerType = mapCfg.TriggerType
self.tbTriggerParam = decodeJson(mapCfg.TriggerParam)
@@ -77,6 +82,9 @@ end
function PenguinCard:SetSlotIndex(nSlotIndex)
self.nSlotIndex = nSlotIndex
end
function PenguinCard:SetHighLight(bHighLight)
self.bHighLight = bHighLight
end
function PenguinCard:GetDesc()
local mapCfg = ConfigTable.GetData("PenguinCard", self.nId)
if nil == mapCfg then
@@ -84,6 +92,15 @@ function PenguinCard:GetDesc()
end
return PenguinCardUtils.SetEffectDesc(mapCfg, self.nGrowthLayer)
end
function PenguinCard:GetActiveState()
if self.nGrowthType == GameEnum.PenguinCardGrowthType.FullGame and self.tbGrowthEffectParam[1] < 0 then
local nEffectValue = self.tbEffectParam[1] + self.nGrowthLayer * self.tbGrowthEffectParam[1]
if nEffectValue <= 0 then
return false
end
end
return true
end
function PenguinCard:ResetAllTrigger()
self:ResetGameTrigger()
self:ResetRoundTrigger()
@@ -116,7 +116,7 @@ function PenguinCardBuff:Trigger(nTriggerPhase, mapTriggerSource, callback)
return false
end
local mapEffectValue
if self.nEffectType == GameEnum.PenguinCardEffectType.IncreaseBasicChips or self.nEffectType == GameEnum.PenguinCardEffectType.IncreaseMultiplier or self.nEffectType == GameEnum.PenguinCardEffectType.MultiMultiplier or self.nEffectType == GameEnum.PenguinCardEffectType.UpgradeDiscount or self.nEffectType == GameEnum.PenguinCardEffectType.AddRound or self.nEffectType == GameEnum.PenguinCardEffectType.UpgradeRebate then
if self.nEffectType == GameEnum.PenguinCardEffectType.IncreaseBasicChips or self.nEffectType == GameEnum.PenguinCardEffectType.IncreaseMultiplier or self.nEffectType == GameEnum.PenguinCardEffectType.MultiMultiplier or self.nEffectType == GameEnum.PenguinCardEffectType.UpgradeDiscount or self.nEffectType == GameEnum.PenguinCardEffectType.AddRound or self.nEffectType == GameEnum.PenguinCardEffectType.AddCardRollCount or self.nEffectType == GameEnum.PenguinCardEffectType.UpgradeRebate then
if self.bOnly == true then
mapEffectValue = self.tbEffectParam[1]
else
@@ -126,7 +126,7 @@ function PenguinCardBuff:Trigger(nTriggerPhase, mapTriggerSource, callback)
mapEffectValue = self.tbEffectParam
end
if type(mapEffectValue) == "number" and mapEffectValue == 0 then
return
return false
end
if self.nTriggerLimit ~= GameEnum.PenguinCardTriggerLimit.None then
self.nTriggerCount = self.nTriggerCount + 1
@@ -46,7 +46,7 @@ PenguinCardConfirmCtrl._mapNodeConfig = {
againSelect = {},
texAgainTip = {
sComponentName = "TMP_Text",
sLanguageId = "PenguinCard_SkipTips"
sLanguageId = "MessageBox_TodayWarning"
},
goAgain = {}
}
@@ -458,7 +458,7 @@ function PenguinCardFlipCtrl:PlayFireAni()
end
function PenguinCardFlipCtrl:Awake()
self.animator = self.gameObject:GetComponent("Animator")
self.nFireScore = ConfigTable.GetConfigNumber("PenguinCardFeverScore")
self.nFireScore = ConfigTable.GetConfigNumber("PenguinCardFeverScore") or 0
end
function PenguinCardFlipCtrl:OnEnable()
end
@@ -89,7 +89,7 @@ function PenguinCardInfoCtrl:Refresh()
local mapUpgradeCard = self._panel.mapLevel.tbPenguinCard[nAimIndex]
local nAfter = mapUpgradeCard.nLevel + mapSelectCard.nLevel
nAfter = nAfter > mapUpgradeCard.nMaxLevel and mapUpgradeCard.nMaxLevel or nAfter
NovaAPI.SetTMPText(self._mapNode.txtLevel, orderedFormat(ConfigTable.GetUIText("PenguinCard_CardLevel"), nAfter))
NovaAPI.SetTMPText(self._mapNode.txtLevel, orderedFormat(ConfigTable.GetUIText(nAfter == mapUpgradeCard.nMaxLevel and "PenguinCard_CardLevelMax" or "PenguinCard_CardLevel"), nAfter))
NovaAPI.SetTMPColor(self._mapNode.txtLevel, nAfter == mapUpgradeCard.nMaxLevel and MaxLevel or NotMaxLevel)
local nId = mapUpgradeCard:GetIdByLevel(mapUpgradeCard.nGroupId, nAfter)
local mapCfg = ConfigTable.GetData("PenguinCard", nId)
@@ -105,13 +105,13 @@ function PenguinCardInfoCtrl:Refresh()
NovaAPI.SetTMPText(self._mapNode.txtBtnSelect, ConfigTable.GetUIText("PenguinCard_Btn_Upgrade"))
else
self._mapNode.imgUp:SetActive(false)
NovaAPI.SetTMPText(self._mapNode.txtLevel, orderedFormat(ConfigTable.GetUIText("PenguinCard_CardLevel"), self.mapCard.nLevel))
NovaAPI.SetTMPText(self._mapNode.txtLevel, orderedFormat(ConfigTable.GetUIText(self.mapCard.nLevel == self.mapCard.nMaxLevel and "PenguinCard_CardLevelMax" or "PenguinCard_CardLevel"), self.mapCard.nLevel))
NovaAPI.SetTMPColor(self._mapNode.txtLevel, self.mapCard.nLevel == self.mapCard.nMaxLevel and MaxLevel or NotMaxLevel)
NovaAPI.SetTMPText(self._mapNode.txtDesc, self.mapCard:GetDesc())
NovaAPI.SetTMPText(self._mapNode.txtBtnSelect, ConfigTable.GetUIText("PenguinCard_Btn_Select"))
end
else
NovaAPI.SetTMPText(self._mapNode.txtLevel, orderedFormat(ConfigTable.GetUIText("PenguinCard_CardLevel"), self.mapCard.nLevel))
NovaAPI.SetTMPText(self._mapNode.txtLevel, orderedFormat(ConfigTable.GetUIText(self.mapCard.nLevel == self.mapCard.nMaxLevel and "PenguinCard_CardLevelMax" or "PenguinCard_CardLevel"), self.mapCard.nLevel))
NovaAPI.SetTMPColor(self._mapNode.txtLevel, self.mapCard.nLevel == self.mapCard.nMaxLevel and MaxLevel or NotMaxLevel)
NovaAPI.SetTMPText(self._mapNode.txtDesc, self.mapCard:GetDesc())
end
@@ -182,6 +182,9 @@ function PenguinCardInfoCtrl:OnBtnClick_Right()
else
nIndex = 1
end
if self._panel.mapLevel.tbPenguinCard[self.tbHasIndex[nIndex]] == 0 then
return
end
self.mapCard = self._panel.mapLevel.tbPenguinCard[self.tbHasIndex[nIndex]]
self:Refresh()
end
@@ -220,6 +223,9 @@ function PenguinCardInfoCtrl:OnBtnClick_Left()
else
nIndex = nMax
end
if self._panel.mapLevel.tbPenguinCard[self.tbHasIndex[nIndex]] == 0 then
return
end
self.mapCard = self._panel.mapLevel.tbPenguinCard[self.tbHasIndex[nIndex]]
self:Refresh()
end
@@ -2,11 +2,14 @@ local PenguinCardItemCtrl = class("PenguinCardItemCtrl", BaseCtrl)
local WwiseManger = CS.WwiseAudioManager.Instance
local _, NotMaxLevel = ColorUtility.TryParseHtmlString("#FFF7EA")
local _, MaxLevel = ColorUtility.TryParseHtmlString("#ffe075")
local _, NotMaxLevel_Gray = ColorUtility.TryParseHtmlString("#D1C8D0")
local _, MaxLevel_Gray = ColorUtility.TryParseHtmlString("#a78f70")
PenguinCardItemCtrl._mapNodeConfig = {
AnimRoot = {sComponentName = "Animator"},
imgBg = {},
imgIcon = {sComponentName = "Image"},
txtLevel = {sComponentName = "TMP_Text"},
txtDisableLevel = {sComponentName = "TMP_Text"},
txtName = {sComponentName = "TMP_Text"},
imgUp = {},
txtTrigger = {nCount = 2, sComponentName = "TMP_Text"},
@@ -16,6 +19,8 @@ PenguinCardItemCtrl._mapNodeConfig = {
sComponentName = "Animator"
},
goTrigger = {},
goDisable = {},
imgHighLight = {},
btnOpenInfo = {
sComponentName = "UIButton",
callback = "OnBtnClick_OpenInfo"
@@ -23,7 +28,8 @@ PenguinCardItemCtrl._mapNodeConfig = {
}
PenguinCardItemCtrl._mapEventConfig = {
PenguinCardTriggered = "OnEvent_Triggered",
PenguinCardWaitPlay = "OnEvent_WaitPlay"
PenguinCardWaitPlay = "OnEvent_WaitPlay",
PenguinCardGrowth = "OnEvent_Growth"
}
function PenguinCardItemCtrl:Refresh_Select(mapCard, nSelectIndex, bRoll)
self.mapCard = mapCard
@@ -33,6 +39,11 @@ function PenguinCardItemCtrl:Refresh_Select(mapCard, nSelectIndex, bRoll)
self._mapNode.imgBg:SetActive(bRoll)
self._mapNode.imgIcon.gameObject:SetActive(true)
self._mapNode.goTrigger:SetActive(false)
self._mapNode.goDisable:SetActive(false)
self._mapNode.imgHighLight:SetActive(false)
if mapCard.bHighLight then
self._mapNode.imgHighLight:SetActive(true)
end
self:SetSprite(self._mapNode.imgIcon, "UI/Play_PenguinCard/SpriteAtlas/Sprite/" .. mapCard.sIcon)
NovaAPI.SetTMPText(self._mapNode.txtName, mapCard.sName)
local bUpgrade = self._panel.mapLevel:CheckUpgradePenguinCard(mapCard)
@@ -43,17 +54,25 @@ function PenguinCardItemCtrl:Refresh_Slot(mapCard)
self.mapCard = mapCard
self.nEffectCount = 0
self.bWaitPlay = false
self._mapNode.txtLevel.gameObject:SetActive(true)
local bAble = self.mapCard:GetActiveState()
self._mapNode.txtLevel.gameObject:SetActive(bAble)
self._mapNode.txtName.gameObject:SetActive(false)
self._mapNode.imgBg:SetActive(false)
self._mapNode.imgUp:SetActive(false)
self._mapNode.goTrigger:SetActive(false)
self._mapNode.goDisable:SetActive(not bAble)
self._mapNode.imgHighLight:SetActive(false)
self:SetSprite(self._mapNode.imgIcon, "UI/Play_PenguinCard/SpriteAtlas/Sprite/" .. mapCard.sIcon)
NovaAPI.SetTMPText(self._mapNode.txtLevel, orderedFormat(ConfigTable.GetUIText("PenguinCard_CardLevel"), mapCard.nLevel))
if mapCard.nLevel == mapCard.nMaxLevel then
NovaAPI.SetTMPColor(self._mapNode.txtLevel, MaxLevel)
NovaAPI.SetTMPColor(self._mapNode.txtDisableLevel, MaxLevel_Gray)
NovaAPI.SetTMPText(self._mapNode.txtLevel, orderedFormat(ConfigTable.GetUIText("PenguinCard_CardLevelMax"), mapCard.nLevel))
NovaAPI.SetTMPText(self._mapNode.txtDisableLevel, orderedFormat(ConfigTable.GetUIText("PenguinCard_CardLevelMax"), mapCard.nLevel))
else
NovaAPI.SetTMPColor(self._mapNode.txtLevel, NotMaxLevel)
NovaAPI.SetTMPColor(self._mapNode.txtDisableLevel, MaxLevel_Gray)
NovaAPI.SetTMPText(self._mapNode.txtLevel, orderedFormat(ConfigTable.GetUIText("PenguinCard_CardLevel"), mapCard.nLevel))
NovaAPI.SetTMPText(self._mapNode.txtDisableLevel, orderedFormat(ConfigTable.GetUIText("PenguinCard_CardLevel"), mapCard.nLevel))
end
end
function PenguinCardItemCtrl:RefreshUpgrade(nGroupId)
@@ -64,6 +83,7 @@ end
function PenguinCardItemCtrl:PlayFlipAni()
self._mapNode.imgBg:SetActive(true)
self._mapNode.txtName.gameObject:SetActive(false)
self._mapNode.imgHighLight:SetActive(false)
self._mapNode.AnimRoot:Play("PengUinCard_Bd_Shopturn", 0, 0)
local nAnimTime = NovaAPI.GetAnimClipLength(self._mapNode.AnimRoot, {
"PengUinCard_Bd_Shopturn"
@@ -188,6 +208,14 @@ function PenguinCardItemCtrl:OnEvent_Triggered(nSlotIndex)
end
self:PlayTriggerAni()
end
function PenguinCardItemCtrl:OnEvent_Growth(nSlotIndex)
if not (self.mapCard and self.mapCard ~= 0 and self.mapCard.nSlotIndex) or nSlotIndex ~= self.mapCard.nSlotIndex then
return
end
local bAble = self.mapCard:GetActiveState()
self._mapNode.goDisable:SetActive(not bAble)
self._mapNode.txtLevel.gameObject:SetActive(bAble)
end
function PenguinCardItemCtrl:OnEvent_WaitPlay()
if self.bWaitPlay == true then
self.bWaitPlay = false
@@ -10,6 +10,8 @@ local StarPos1 = 144
local StarPos2 = 218
local StarPos3 = 277
local QuestPos = 172
local newDayTime = UTILS.GetDayRefreshTimeOffset()
local LocalData = require("GameCore.Data.LocalData")
PenguinCardPrepareCtrl._mapNodeConfig = {
txtAddMax = {
nCount = 3,
@@ -62,7 +64,7 @@ PenguinCardPrepareCtrl._mapNodeConfig = {
txtLevelDesc = {sComponentName = "TMP_Text"},
txtSelectTip = {sComponentName = "TMP_Text"},
PenguinCardItem = {
nCount = 3,
nCount = 4,
sCtrlName = "Game.UI.Play_PenguinCard.PenguinCardItemCtrl"
},
btnRoll = {
@@ -297,7 +299,7 @@ function PenguinCardPrepareCtrl:RefreshRoll(bRoll)
end
function PenguinCardPrepareCtrl:RefreshRollCard(bRoll)
local nMax = #self._panel.mapLevel.tbSelectablePenguinCard
for i = 1, 3 do
for i = 1, 4 do
self._mapNode.PenguinCardItem[i].gameObject:SetActive(i <= nMax)
if i <= nMax then
self._mapNode.PenguinCardItem[i]:Refresh_Select(self._panel.mapLevel.tbSelectablePenguinCard[i], i, bRoll)
@@ -360,7 +362,7 @@ function PenguinCardPrepareCtrl:RefreshWin()
end
function PenguinCardPrepareCtrl:PlayOutAni()
self.animator:Play("PengUinCard_Prepare_out", 0, 0)
for i = 1, 3 do
for i = 1, 4 do
if self._mapNode.PenguinCardItem[i].gameObject.activeSelf == true then
self._mapNode.PenguinCardItem[i]:PlayHideAni()
end
@@ -389,11 +391,29 @@ function PenguinCardPrepareCtrl:OnBtnClick_Win(btn)
self._panel.mapLevel:CompleteGame()
end
function PenguinCardPrepareCtrl:OnBtnClick_StartTurn(btn)
local bWarn = self._panel.mapLevel.bWarning
if not self._panel.mapLevel.bSelectedPenguinCard and bWarn then
local TipsTime = LocalData.GetPlayerLocalData("PenguinCardSelectTips")
local _tipDay = 0
if TipsTime ~= nil then
_tipDay = tonumber(TipsTime)
end
local curTimeStamp = CS.ClientManager.Instance.serverTimeStampWithTimeZone
local fixedTimeStamp = curTimeStamp + newDayTime * 3600
local nYear = tonumber(os.date("!%Y", fixedTimeStamp))
local nMonth = tonumber(os.date("!%m", fixedTimeStamp))
local nDay = tonumber(os.date("!%d", fixedTimeStamp))
local nowD = nYear * 366 + nMonth * 31 + nDay
if not self._panel.mapLevel.bSelectedPenguinCard and nowD ~= _tipDay then
local isSelectAgain = false
local confirmCallback = function()
self._panel.mapLevel:SetWarning(not isSelectAgain)
if isSelectAgain then
local _curTimeStamp = CS.ClientManager.Instance.serverTimeStampWithTimeZone
local _fixedTimeStamp = _curTimeStamp + newDayTime * 3600
local _nYear = tonumber(os.date("!%Y", _fixedTimeStamp))
local _nMonth = tonumber(os.date("!%m", _fixedTimeStamp))
local _nDay = tonumber(os.date("!%d", _fixedTimeStamp))
local _nowD = _nYear * 366 + _nMonth * 31 + _nDay
LocalData.SetPlayerLocalData("PenguinCardSelectTips", tostring(_nowD))
end
self._panel.mapLevel:SwitchGameState()
end
local againCallback = function(isSelect)
@@ -492,7 +512,7 @@ function PenguinCardPrepareCtrl:OnEvent_SelectPenguinCard()
self:RefreshRollDesc()
end
function PenguinCardPrepareCtrl:OnEvent_SalePenguinCard(_, nGroupId)
for i = 1, 3 do
for i = 1, 4 do
if self._mapNode.PenguinCardItem[i].gameObject.activeSelf == true then
self._mapNode.PenguinCardItem[i]:RefreshUpgrade(nGroupId)
end
@@ -58,13 +58,17 @@ function PenguinCardQuestCellCtrl:Refresh(nActId, mapQuest)
return
end
NovaAPI.SetTMPText(self._mapNode.TMPTitle, mapCfg.Desc)
self._mapNode.imgBarFill.sizeDelta = Vector2(mapQuest.nCur / mapQuest.nMax * 508, 27)
if mapQuest.nMax > 0 then
self._mapNode.imgBarFill.sizeDelta = Vector2(mapQuest.nCur / mapQuest.nMax * 508, 27)
else
self._mapNode.imgBarFill.sizeDelta = Vector2(508, 27)
end
NovaAPI.SetTMPText(self._mapNode.txt_process, mapQuest.nCur .. "/" .. mapQuest.nMax)
self._mapNode.imgComplete:SetActive(self.mapQuest.nStatus == AllEnum.ActQuestStatus.Received)
self._mapNode.imgCompleteMask:SetActive(self.mapQuest.nStatus == AllEnum.ActQuestStatus.Received)
self._mapNode.go_UnComplete:SetActive(self.mapQuest.nStatus == AllEnum.ActQuestStatus.UnComplete)
self._mapNode.btnReceive.gameObject:SetActive(self.mapQuest.nStatus == AllEnum.ActQuestStatus.Complete)
if mapCfg.Item1 > 0 then
if 0 < mapCfg.Item1 then
self._mapNode.btnReward.gameObject:SetActive(true)
self._mapNode.rtReward:SetItem(mapCfg.Item1, nil, mapCfg.Qty1, nil, self.mapQuest.nStatus == AllEnum.ActQuestStatus.Received)
else
@@ -11,6 +11,11 @@ PenguinCardQuestSelectCtrl._mapNodeConfig = {
sNodeName = "t_fullscreen_blur_blue",
sComponentName = "Animator"
},
btnCloseBg = {
sNodeName = "snapshot",
sComponentName = "UIButton",
callback = "OnBtnClick_Back"
},
Select = {sNodeName = "--Select--"},
txtQuestTitle = {
sComponentName = "TMP_Text",
@@ -74,6 +79,7 @@ function PenguinCardQuestSelectCtrl:Open(bCur)
NovaAPI.SetTMPText(self._mapNode.txtScore, self:ThousandsNumber(nScore))
self.bCur = bCur
self:PlayInAni()
NovaAPI.SetButtonInteractable(self._mapNode.btnCloseBg, self.bCur)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self._mapNode.goInfo:SetActive(true)
@@ -27,7 +27,11 @@ PenguinCardSelectCtrl._mapEventConfig = {
PenguinCard_ClickLevel = "OnEvent_Click",
PenguinCard_EnterLevel = "OnEvent_Enter"
}
PenguinCardSelectCtrl._mapRedDotConfig = {}
PenguinCardSelectCtrl._mapRedDotConfig = {
[RedDotDefine.Activity_PenguinCard_AllQuest] = {
sNodeName = "reddotQuest"
}
}
function PenguinCardSelectCtrl:Refresh()
self.goFirstLock = nil
self.tbLevel = self.actData:GetLevelList()
@@ -122,17 +126,7 @@ end
function PenguinCardSelectCtrl:OnDestroy()
end
function PenguinCardSelectCtrl:OnBtnClick_Quest()
local mapActivityData = ConfigTable.GetData("Activity", self.nActId)
if mapActivityData ~= nil then
local nGroupId = mapActivityData.MidGroupId
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, PanelId.Task_20102, actData.ActivityId, 5)
end
end
end
EventManager.Hit(EventId.OpenPanel, PanelId.PenguinCardQuest, self.nActId)
end
function PenguinCardSelectCtrl:OnEvent_Click(go)
self._mapNode.sc:ScrollToClick(go)
@@ -169,6 +169,15 @@ function PenguinCardUtils.SetEffectDesc(mapCfg, nGrowthLayer)
if mapBase then
return mapBase.Title
end
elseif nEffectType == GameEnum.PenguinCardEffectType.RollSpecificCard then
local nCardId = tbParam[nIndex]
if nCardId == nil then
return sError
end
local mapCard = ConfigTable.GetData("PenguinCard", nCardId)
if mapCard then
return mapCard.Title
end
elseif nEffectType == GameEnum.PenguinCardEffectType.IncreaseBasicChips or nEffectType == GameEnum.PenguinCardEffectType.IncreaseMultiplier or nEffectType == GameEnum.PenguinCardEffectType.MultiMultiplier or nEffectType == GameEnum.PenguinCardEffectType.UpgradeDiscount or nEffectType == GameEnum.PenguinCardEffectType.AddRound or nEffectType == GameEnum.PenguinCardEffectType.BlockFatalDamage or nEffectType == GameEnum.PenguinCardEffectType.UpgradeRebate then
if tbParam[nIndex] == nil then
return sError
+110 -5
View File
@@ -15,7 +15,6 @@ function PenguinLevel:Init(nFloorId, nLevelId, nActId, tbStarScore)
}
self.nLevelId = nLevelId
self.nActId = nActId
self.bWarning = true
self:ParseConfigData()
self:ParseLocalData()
EventManager.Hit(EventId.OpenPanel, PanelId.PenguinCard, self)
@@ -29,6 +28,7 @@ function PenguinLevel:ParseConfigData()
self.tbSlotUpgradeCost = ConfigTable.GetConfigNumberArray("PenguinCardSlotUpgradeCost")
self.tbBuyLimitUpgradeCost = ConfigTable.GetConfigNumberArray("PenguinCardBuyLimitUpgradeCost")
self.nFireScore = ConfigTable.GetConfigNumber("PenguinCardFeverScore")
self.nPenguinCardRollCount = ConfigTable.GetConfigNumber("PenguinCardRollCount")
self.mapBuyCost = {}
local func_ForEach_Line = function(mapData)
self.mapBuyCost[mapData.Count] = {
@@ -47,6 +47,17 @@ function PenguinLevel:ParseConfigData()
}
end
ForEachTableLine(DataTable.PenguinCardHandRank, func_ForEach_Rank)
self.mapTendencyScore = {}
local func_ForEach_Tendency = function(mapData)
if not self.mapTendencyScore[mapData.GroupId] then
self.mapTendencyScore[mapData.GroupId] = {}
end
table.insert(self.mapTendencyScore[mapData.GroupId], mapData.Score)
end
ForEachTableLine(DataTable.PenguinCardTendency, func_ForEach_Tendency)
for _, v in pairs(self.mapTendencyScore) do
table.sort(v)
end
end
function PenguinLevel:ParseLocalData()
local bAuto = LocalData.GetPlayerLocalData("PenguinCardAuto")
@@ -444,6 +455,7 @@ function PenguinLevel:RunState_Prepare()
self.bSelectedPenguinCard = false
self.nUpgradeDiscount = 1
self.nTempAddRound = 0
self.nTempAddRollCount = 0
for _, v in ipairs(self.tbBuff) do
v:ResetTurnTrigger()
end
@@ -618,6 +630,7 @@ function PenguinLevel:RollPenguinCard()
table.insert(self.tbSelectablePenguinCard, mapCard)
end
self.bSelectedPenguinCard = false
self:TriggerEffect(GameEnum.PenguinCardTriggerPhase.ManualRoll)
EventManager.Hit("PenguinCard_RollPenguinCard")
end
function PenguinLevel:SelectPenguinCard(nIndex)
@@ -714,10 +727,63 @@ function PenguinLevel:GetRollPenguinCardResult()
if not mapWeightCfg then
return {}
end
local tbWeight = clone(mapWeightCfg.Weight)
self:AddPenguinCardWeightByTendency(tbWeight, mapWeightCfg.CardList)
local tbMaxGroupId = self:GetMaxLevelPenguinCard()
local tbId = PenguinCardUtils.WeightedRandom(mapWeightCfg.CardList, mapWeightCfg.Weight, 3, tbMaxGroupId)
local nRoll = self.nPenguinCardRollCount + self.nTempAddRollCount
local tbId = PenguinCardUtils.WeightedRandom(mapWeightCfg.CardList, tbWeight, nRoll, tbMaxGroupId)
return tbId
end
function PenguinLevel:AddPenguinCardWeightByTendency(tbWeight, tbCardList)
local tbCardAdd = {}
local tbTendencyId = self:GetRollPenguinCardTendency()
for _, nTendencyId in pairs(tbTendencyId) do
local mapTendencyCfg = ConfigTable.GetData("PenguinCardTendency", nTendencyId)
if mapTendencyCfg then
local mapAddWeight = {}
for i, v in ipairs(mapTendencyCfg.CardGroup) do
mapAddWeight[v] = mapTendencyCfg.AddWeight[i]
end
for i, v in ipairs(tbCardList) do
local mapCardCfg = ConfigTable.GetData("PenguinCard", v)
if mapCardCfg and mapAddWeight[mapCardCfg.GroupId] then
tbWeight[i] = tbWeight[i] + mapAddWeight[mapCardCfg.GroupId]
if not tbCardAdd[v] then
tbCardAdd[v] = 0
end
tbCardAdd[v] = tbCardAdd[v] + mapAddWeight[mapCardCfg.GroupId]
end
end
end
end
return tbCardAdd
end
function PenguinLevel:GetRollPenguinCardTendency()
local mapTendency = {}
for _, v in ipairs(self.tbPenguinCard) do
if v ~= 0 and 0 < v.nTendencyGroup then
if not mapTendency[v.nTendencyGroup] then
mapTendency[v.nTendencyGroup] = 0
end
mapTendency[v.nTendencyGroup] = mapTendency[v.nTendencyGroup] + v.nTendencyScore
end
end
local tbTendencyId = {}
for nGroup, nScore in pairs(mapTendency) do
local tbScore = self.mapTendencyScore[nGroup]
local nLevel = 0
for k, v in ipairs(tbScore) do
if v <= nScore then
nLevel = k
end
end
if 0 < nLevel then
local nTendencyId = nGroup * 100 + nLevel
table.insert(tbTendencyId, nTendencyId)
end
end
return tbTendencyId
end
function PenguinLevel:GetMaxLevelPenguinCard()
local tbGroupId = {}
for _, v in ipairs(self.tbPenguinCard) do
@@ -727,6 +793,44 @@ function PenguinLevel:GetMaxLevelPenguinCard()
end
return tbGroupId
end
function PenguinLevel:ChangeSpecificCard(tbAimId)
if next(self.tbSelectablePenguinCard) == nil then
return
end
local tbMaxGroupId = self:GetMaxLevelPenguinCard()
for i = #tbAimId, 1, -1 do
local mapCardCfg = ConfigTable.GetData("PenguinCard", tbAimId[i])
if mapCardCfg and table.indexof(tbMaxGroupId, mapCardCfg.GroupId) > 0 then
table.remove(tbAimId, i)
end
end
if next(tbAimId) == nil then
return
end
local nHasIndex = 0
for i, v in ipairs(self.tbSelectablePenguinCard) do
if 0 < table.indexof(tbAimId, v.nId) then
nHasIndex = i
v:SetHighLight(true)
break
end
end
if nHasIndex == 0 then
local nAimId = tbAimId[math.random(#tbAimId)]
local tbAimIndex = {}
for i, v in ipairs(self.tbSelectablePenguinCard) do
if not v.bHighLight then
table.insert(tbAimIndex, i)
end
end
if next(tbAimIndex) == nil then
return
end
local nAimIndex = tbAimIndex[math.random(#tbAimIndex)]
self.tbSelectablePenguinCard[nAimIndex]:Init(nAimId)
self.tbSelectablePenguinCard[nAimIndex]:SetHighLight(true)
end
end
function PenguinLevel:RecyclePenguinCard(mapCard)
mapCard:Clear()
table.insert(self.tbPenguinCardPool, mapCard)
@@ -1268,9 +1372,6 @@ function PenguinLevel:GetStar()
end
return nStar
end
function PenguinLevel:SetWarning(bAble)
self.bWarning = bAble
end
function PenguinLevel:GetOwnPenguinCardCount()
local nCount = 0
for i = 1, 6 do
@@ -1295,11 +1396,15 @@ function PenguinLevel:ExecuteEffect(nEffectType, mapEffectValue, mapTriggerSourc
self.nUpgradeDiscount = mapEffectValue / 100
elseif nEffectType == GameEnum.PenguinCardEffectType.AddRound then
self.nTempAddRound = self.nTempAddRound + mapEffectValue
elseif nEffectType == GameEnum.PenguinCardEffectType.AddCardRollCount then
self.nTempAddRollCount = self.nTempAddRollCount + mapEffectValue
elseif nEffectType == GameEnum.PenguinCardEffectType.BlockFatalDamage then
self:ChangeHp(-1 * mapTriggerSource.nHpChange)
EventManager.Hit("PenguinCard_BlockFatalDamage")
elseif nEffectType == GameEnum.PenguinCardEffectType.UpgradeRebate then
self:ChangeScore(mapTriggerSource.nUpgradeCost * mapEffectValue / 100)
elseif nEffectType == GameEnum.PenguinCardEffectType.RollSpecificCard then
self:ChangeSpecificCard(mapEffectValue)
end
end
function PenguinLevel:TriggerEffect(nTriggerPhase, mapTriggerSource)