e01012cbcc
EN: 1.7.0.89 CN: 1.7.0.91 JP: 1.7.0.92 KR: 1.7.0.95
1452 lines
51 KiB
Lua
1452 lines
51 KiB
Lua
local GachaCtrl = class("GachaCtrl", BaseCtrl)
|
|
local LocalData = require("GameCore.Data.LocalData")
|
|
local newDayTime = UTILS.GetDayRefreshTimeOffset()
|
|
local WwiseManger = CS.WwiseAudioManager
|
|
local coverScript = {
|
|
[GameEnum.gachaStorageType.CharacterCardPool] = "Game.UI.GachaEx.GachaCover.GachaCoverCtrl_PermanentCharUp",
|
|
[GameEnum.gachaStorageType.DiscCardPool] = "Game.UI.GachaEx.GachaCover.GachaCoverCtrl_PermanentDiscUp",
|
|
[GameEnum.gachaStorageType.CharacterUpCardPool] = "Game.UI.GachaEx.GachaCover.GachaCoverCtrl_CharUp",
|
|
[GameEnum.gachaStorageType.DiscUpCardPool] = "Game.UI.GachaEx.GachaCover.GachaCoverCtrl_DiscUp",
|
|
[GameEnum.gachaStorageType.BeginnerCardPool] = "Game.UI.GachaEx.GachaCover.GachaCoverCtrl_NewBie"
|
|
}
|
|
GachaCtrl._mapNodeConfig = {
|
|
coverRoot = {
|
|
sNodeName = "----BGRoot----",
|
|
sComponentName = "Transform"
|
|
},
|
|
PoolContent = {sComponentName = "Transform"},
|
|
PoolTabTemplete = {},
|
|
btn_GachaOne = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_One"
|
|
},
|
|
btn_GachaTen = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Ten"
|
|
},
|
|
txtBtnpoolDetail = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Recruit_info"
|
|
},
|
|
txtBtnpoolHistory = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "GachaHistory_Guarantee"
|
|
},
|
|
txtBtnshop = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Mall_Tog_Exchange"
|
|
},
|
|
txt_NewBieJump = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Gacha_NewBieRecord"
|
|
},
|
|
txt_NewBieCount = {sComponentName = "TMP_Text"},
|
|
TMP_gachaNewBieTitle = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Gacha_NewBieSummonTitle"
|
|
},
|
|
TMP_gachaNewBieCost = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Gacha_NewBieSummonCost"
|
|
},
|
|
TMP_gachaOneTitle = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Recruit_one"
|
|
},
|
|
TMP_gachaTenTitle = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Recruit_ten"
|
|
},
|
|
TMP_GachaTimes = {sComponentName = "TMP_Text"},
|
|
imgItemOne = {sComponentName = "Image"},
|
|
imgItemTen = {sComponentName = "Image"},
|
|
imgNewBieItemTen = {sComponentName = "Image"},
|
|
TMP_gachaOneCost = {sComponentName = "TMP_Text"},
|
|
TMP_gachaTenCost = {sComponentName = "TMP_Text"},
|
|
imgBtnTip = {sComponentName = "Image"},
|
|
TopBar = {
|
|
sNodeName = "TopBarPanel",
|
|
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
|
},
|
|
btn_poolDetail = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_GachaDetail"
|
|
},
|
|
btn_poolHistory = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_GachaHistory"
|
|
},
|
|
btn_shop = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_shop"
|
|
},
|
|
btn_NewBieJump = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_NewBieJump"
|
|
},
|
|
btn_NewBieJumpRecord = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_NewBieJumpRecord"
|
|
},
|
|
rootAnim = {
|
|
sNodeName = "----SafeAreaRoot----",
|
|
sComponentName = "Animator"
|
|
},
|
|
GachaOpenDoor = {},
|
|
GachaShow = {
|
|
sCtrlName = "Game.UI.GachaEx.GachaShowCtrl"
|
|
},
|
|
GachaShowResult = {
|
|
sCtrlName = "Game.UI.GachaEx.GachaShowResultCtrl"
|
|
},
|
|
GachaInfo = {
|
|
sNodeName = "----PoolInfo---- ",
|
|
sCtrlName = "Game.UI.GachaEx.GachaInfoCtrl"
|
|
},
|
|
GachaHistory = {
|
|
sNodeName = "----GachaHistory----",
|
|
sCtrlName = "Game.UI.GachaEx.GachaHistotyCtrl"
|
|
},
|
|
GachaProb = {
|
|
sNodeName = "----ProbInfo----",
|
|
sCtrlName = "Game.UI.GachaEx.GachaProbInfoCtrl"
|
|
},
|
|
GachaNewBieShowRecord = {
|
|
sNodeName = "GachaNewBieShowRecord",
|
|
sCtrlName = "Game.UI.GachaEx.GachaNewBieShowRecordCtrl"
|
|
},
|
|
GachaNewBieShowResult = {
|
|
sNodeName = "GachaNewBieShowResult",
|
|
sCtrlName = "Game.UI.GachaEx.GachaNewBieShowResultCtrl"
|
|
},
|
|
GachaNewBieSaveRecord = {
|
|
sNodeName = "GachaNewBieSaveRecord",
|
|
sCtrlName = "Game.UI.GachaEx.GachaNewBieSaveRecordCtrl"
|
|
},
|
|
GachaNewBieReplaceResult = {
|
|
sNodeName = "GachaNewBieReplaceResult",
|
|
sCtrlName = "Game.UI.GachaEx.GachaNewBieReplaceResultCtrl"
|
|
},
|
|
GachaNewBieObtainResult = {
|
|
sNodeName = "GachaNewBieObtainResult",
|
|
sCtrlName = "Game.UI.GachaEx.GachaNewBieObtainResultCtrl"
|
|
}
|
|
}
|
|
GachaCtrl._mapEventConfig = {
|
|
GachaPoolDetail = "OnEvent_GachaPoolDetail",
|
|
GachaOpenPoolInfo = "OnBtnClick_GachaDetail",
|
|
GachaOpenProbInfo = "OnBtnClick_ProbDetail",
|
|
GachaNewbieSpin = "OnEvent_GachaNewbieSpin",
|
|
GachaNewbieRecord = "OnEvent_GachaNewbieRecord",
|
|
GachaNewbieObtainRecord = "OnEvent_GachaNewbieObtainRecord",
|
|
GachaNewbieSaveRecord = "OnEvent_GachaNewbieSaveRecord",
|
|
GachaNewbieReplaceRecord = "OnEvent_GachaNewbieReplaceRecord",
|
|
GachaNewbieReplaceRecordOver = "OnEvent_GachaNewbieReplaceRecordOver",
|
|
GachaNewbieObtainRecordOver = "OnEvent_GachaNewbieObtainRecordOver",
|
|
GachaProcessStart = "OnEvent_GachaProcessStart",
|
|
OnBtnClickGachaCoverEntranceGo = "OnEvent_GachaCoverEntranceGo",
|
|
[EventId.UIHomeConfirm] = "OnEvent_Home",
|
|
[EventId.UIBackConfirm] = "OnEvent_Back"
|
|
}
|
|
function GachaCtrl:Awake()
|
|
self.bGachaProcess = false
|
|
end
|
|
function GachaCtrl:FadeIn()
|
|
end
|
|
function GachaCtrl:FadeOut()
|
|
end
|
|
function GachaCtrl:OnEnable()
|
|
self._mapMaxAcquireReward = {}
|
|
local forEachAcquireReward = function(mapData)
|
|
if self._mapMaxAcquireReward[mapData.itemStype] == nil then
|
|
self._mapMaxAcquireReward[mapData.itemStype] = {}
|
|
end
|
|
if self._mapMaxAcquireReward[mapData.itemStype][mapData.itemRarity] == nil then
|
|
self._mapMaxAcquireReward[mapData.itemStype][mapData.itemRarity] = mapData.AcquireTimes
|
|
end
|
|
if mapData.AcquireTimes > self._mapMaxAcquireReward[mapData.itemStype][mapData.itemRarity] then
|
|
self._mapMaxAcquireReward[mapData.itemStype][mapData.itemRarity] = mapData.AcquireTimes
|
|
end
|
|
end
|
|
ForEachTableLine(DataTable.AcquireReward, forEachAcquireReward)
|
|
self.nTopBarId = self._mapNode.TopBar.gameObject:GetInstanceID()
|
|
self.curPoolId = 0
|
|
local tbParam = self:GetPanelParam()
|
|
if type(tbParam) == "table" then
|
|
self.curPoolId = tbParam[1]
|
|
end
|
|
local bOpen = true
|
|
if self._panel.nCurPool ~= nil and self._panel.nCurPool ~= 0 then
|
|
self.curPoolId = self._panel.nCurPool
|
|
self._panel.nCurPool = 0
|
|
bOpen = false
|
|
end
|
|
self.mapCover = {}
|
|
local callback = function()
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
self:RefreshAll(bOpen)
|
|
end
|
|
cs_coroutine.start(wait)
|
|
EventManager.Hit("Guide_GachaOpen")
|
|
end
|
|
self._mapNode.TMP_GachaTimes.gameObject:SetActive(false)
|
|
local newbie_callback = function()
|
|
PlayerData.Gacha:GetGachaInfomation(callback)
|
|
end
|
|
PlayerData.Gacha:GetGachaNewbieInfomation(newbie_callback)
|
|
self._mapNode.GachaNewBieShowRecord.gameObject:SetActive(false)
|
|
self._mapNode.GachaNewBieShowResult.gameObject:SetActive(false)
|
|
self._mapNode.GachaNewBieSaveRecord.gameObject:SetActive(false)
|
|
self._mapNode.GachaNewBieReplaceResult.gameObject:SetActive(false)
|
|
self._mapNode.GachaNewBieObtainResult.gameObject:SetActive(false)
|
|
end
|
|
function GachaCtrl:OnDisable()
|
|
for _, mapCtrl in pairs(self.mapCover) do
|
|
self:UnbindCtrlByNode(mapCtrl)
|
|
end
|
|
self._panel.nCurPool = self.curPoolId
|
|
self.mapCover = nil
|
|
self.mapTab = nil
|
|
delChildren(self._mapNode.coverRoot)
|
|
delChildren(self._mapNode.PoolContent)
|
|
CS.WwiseAudioManager.Instance:PostEvent("ui_recuit_cover_all_stop")
|
|
end
|
|
function GachaCtrl:OnDestroy()
|
|
end
|
|
function GachaCtrl:OnRelease()
|
|
end
|
|
function GachaCtrl:RefreshAll(bOpen)
|
|
self.tbOpenedPool = PlayerData.Gacha:GetOpenedPool()
|
|
self:LoadCover()
|
|
self:RefreshTab()
|
|
if type(self.curPoolId) ~= "number" or self.curPoolId <= 0 or table.indexof(self.tbOpenedPool, self.curPoolId) < 1 then
|
|
self.curPoolId = self.tbOpenedPool[1]
|
|
end
|
|
self:SetTabSelect(self.curPoolId, true)
|
|
self:RefreshInfo()
|
|
EventManager.Hit(EventId.SetTransition)
|
|
local wait = function()
|
|
if self.mapCover[self.curPoolId] ~= nil then
|
|
self.mapCover[self.curPoolId].gameObject:SetActive(true)
|
|
local gachaData = ConfigTable.GetData("Gacha", self.curPoolId)
|
|
if gachaData ~= nil then
|
|
CS.WwiseAudioManager.Instance:PostEvent(gachaData.Voice)
|
|
end
|
|
end
|
|
self._mapNode.rootAnim:Play("GachaPanel_in")
|
|
if self.mapCover[self.curPoolId] then
|
|
self.mapCover[self.curPoolId]:PlayInAnim()
|
|
self.mapCover[self.curPoolId]:EnableCover()
|
|
end
|
|
end
|
|
if bOpen == true then
|
|
self:AddTimer(1, 0.3, wait, true, true, true)
|
|
else
|
|
wait()
|
|
end
|
|
end
|
|
function GachaCtrl:RefreshTab()
|
|
self.mapTab = {}
|
|
delChildren(self._mapNode.PoolContent)
|
|
if #self.tbOpenedPool < 1 then
|
|
printError("没有开启的卡池")
|
|
return
|
|
end
|
|
local comp = function(a, b)
|
|
local mapGachaA = ConfigTable.GetData("Gacha", a)
|
|
local mapGachaB = ConfigTable.GetData("Gacha", b)
|
|
return mapGachaA.Sort < mapGachaB.Sort
|
|
end
|
|
table.sort(self.tbOpenedPool, comp)
|
|
for _, nGachaId in ipairs(self.tbOpenedPool) do
|
|
local mapGacha = ConfigTable.GetData("Gacha", nGachaId)
|
|
local goTab = instantiate(self._mapNode.PoolTabTemplete, self._mapNode.PoolContent)
|
|
goTab.transform.localScale = Vector3.one
|
|
self.mapTab[nGachaId] = goTab
|
|
local compBtn = goTab:GetComponent("UIButton")
|
|
local func_Handler = ui_handler(self, self.OnBtnClick_Tab, compBtn, nGachaId)
|
|
compBtn.onClick:AddListener(func_Handler)
|
|
local imgIconTab = goTab.transform:Find("AnimRoot/imgTab"):GetComponent("Image")
|
|
self:SetPngSprite(imgIconTab, mapGacha.Icon)
|
|
goTab.transform:Find("AnimRoot/imgChoose").gameObject:SetActive(false)
|
|
end
|
|
end
|
|
function GachaCtrl:RefreshInfo()
|
|
if self.curPoolId == nil or self.curPoolId == 0 then
|
|
return
|
|
end
|
|
local mapGacha = ConfigTable.GetData("Gacha", self.curPoolId)
|
|
if mapGacha == nil then
|
|
return
|
|
end
|
|
self.isNewBie = mapGacha.StorageId == GameEnum.gachaStorageType.BeginnerCardPool
|
|
self._mapNode.btn_NewBieJump.gameObject:SetActive(self.isNewBie)
|
|
self._mapNode.btn_NewBieJumpRecord.gameObject:SetActive(self.isNewBie)
|
|
self._mapNode.btn_GachaOne.gameObject:SetActive(not self.isNewBie)
|
|
self._mapNode.btn_GachaTen.gameObject:SetActive(not self.isNewBie)
|
|
self._mapNode.btn_poolHistory.gameObject:SetActive(not self.isNewBie)
|
|
self._mapNode.btn_shop.gameObject:SetActive(not self.isNewBie)
|
|
if self.isNewBie then
|
|
local newbie = ConfigTable.GetData("GachaNewbie", self.curPoolId)
|
|
local newbieData = PlayerData.Gacha:GetGachaNewbieData(self.curPoolId)
|
|
local c = 0
|
|
if newbieData ~= nil then
|
|
c = #newbieData.Cards
|
|
end
|
|
if newbie ~= nil then
|
|
NovaAPI.SetTMPText(self._mapNode.txt_NewBieCount, tostring(c) .. "/" .. tostring(newbie.SaveCount))
|
|
end
|
|
end
|
|
self:RefreshCoin(mapGacha)
|
|
self:RefreshCover()
|
|
self._mapNode.GachaInfo:Refresh(self.curPoolId)
|
|
self._mapNode.GachaProb:Refresh(self.curPoolId)
|
|
end
|
|
function GachaCtrl:RefreshCoin(mapGacha)
|
|
if mapGacha == nil then
|
|
return
|
|
end
|
|
local mapGachaStorage = ConfigTable.GetData("GachaStorage", mapGacha.StorageId)
|
|
if mapGachaStorage == nil then
|
|
return
|
|
end
|
|
if self.isNewBie then
|
|
return
|
|
end
|
|
local rapidjson = require("rapidjson")
|
|
if type(mapGachaStorage.OncePreferred) == "string" then
|
|
local tbOne = rapidjson.decode(mapGachaStorage.OncePreferred)
|
|
if tbOne ~= nil then
|
|
mapGachaStorage.OncePreferred = tbOne
|
|
else
|
|
mapGachaStorage.OncePreferred = {}
|
|
printError("单抽消耗配置错误:" .. self.curPoolId)
|
|
return
|
|
end
|
|
end
|
|
if type(mapGachaStorage.TenTimesPreferred) == "string" then
|
|
local tbTen = rapidjson.decode(mapGachaStorage.TenTimesPreferred)
|
|
if tbTen ~= nil then
|
|
mapGachaStorage.TenTimesPreferred = tbTen
|
|
else
|
|
mapGachaStorage.TenTimesPreferred = {}
|
|
printError("十连消耗配置错误:" .. self.curPoolId)
|
|
return
|
|
end
|
|
end
|
|
local bShowSpecialOne = false
|
|
if mapGacha.SpecificTid > 0 then
|
|
local nCurCount = PlayerData.Item:GetItemCountByID(mapGacha.SpecificTid)
|
|
if nCurCount >= mapGacha.SpecificQty then
|
|
bShowSpecialOne = true
|
|
end
|
|
end
|
|
if bShowSpecialOne then
|
|
NovaAPI.SetTMPText(self._mapNode.TMP_gachaOneCost, mapGacha.SpecificQty)
|
|
local mapItemCfgData = ConfigTable.GetData_Item(mapGacha.SpecificTid)
|
|
if mapItemCfgData ~= nil then
|
|
self:SetPngSprite(self._mapNode.imgItemOne, mapItemCfgData.Icon2)
|
|
end
|
|
NovaAPI.SetImageNativeSize(self._mapNode.imgItemOne)
|
|
elseif #mapGachaStorage.OncePreferred > 0 then
|
|
for nIdx, mapCost in ipairs(mapGachaStorage.OncePreferred) do
|
|
local f = pairs(mapCost)
|
|
local sTid, nCount = f(mapCost)
|
|
local nTid = tonumber(sTid)
|
|
local nCurCount = PlayerData.Item:GetItemCountByID(nTid)
|
|
if nCount <= nCurCount then
|
|
NovaAPI.SetTMPText(self._mapNode.TMP_gachaOneCost, nCount)
|
|
local mapItemCfgData = ConfigTable.GetData_Item(nTid)
|
|
self:SetPngSprite(self._mapNode.imgItemOne, mapItemCfgData.Icon2)
|
|
NovaAPI.SetImageNativeSize(self._mapNode.imgItemOne)
|
|
break
|
|
end
|
|
if nIdx == #mapGachaStorage.OncePreferred then
|
|
NovaAPI.SetTMPText(self._mapNode.TMP_gachaOneCost, mapGachaStorage.DefaultQty)
|
|
local mapItemCfgData = ConfigTable.GetData_Item(mapGachaStorage.DefaultId)
|
|
self:SetPngSprite(self._mapNode.imgItemOne, mapItemCfgData.Icon2)
|
|
NovaAPI.SetImageNativeSize(self._mapNode.imgItemOne)
|
|
end
|
|
end
|
|
else
|
|
NovaAPI.SetTMPText(self._mapNode.TMP_gachaOneCost, mapGachaStorage.DefaultQty)
|
|
local mapItemCfgData = ConfigTable.GetData_Item(mapGachaStorage.DefaultId)
|
|
if mapItemCfgData ~= nil then
|
|
self:SetPngSprite(self._mapNode.imgItemOne, mapItemCfgData.Icon2)
|
|
NovaAPI.SetImageNativeSize(self._mapNode.imgItemOne)
|
|
end
|
|
end
|
|
local bShowSpecialTen = false
|
|
if mapGacha.SpecificTid > 0 then
|
|
local nCurCount = PlayerData.Item:GetItemCountByID(mapGacha.SpecificTid)
|
|
if nCurCount >= 10 * mapGacha.SpecificQty then
|
|
bShowSpecialTen = true
|
|
end
|
|
end
|
|
if bShowSpecialTen then
|
|
NovaAPI.SetTMPText(self._mapNode.TMP_gachaTenCost, 10 * mapGacha.SpecificQty)
|
|
local mapItemCfgData = ConfigTable.GetData_Item(mapGacha.SpecificTid)
|
|
if mapItemCfgData ~= nil then
|
|
self:SetPngSprite(self._mapNode.imgItemTen, mapItemCfgData.Icon2)
|
|
end
|
|
NovaAPI.SetImageNativeSize(self._mapNode.imgItemTen)
|
|
elseif #mapGachaStorage.TenTimesPreferred > 0 then
|
|
for nIdx, mapCost in ipairs(mapGachaStorage.TenTimesPreferred) do
|
|
local f = pairs(mapCost)
|
|
local sTid, nCount = f(mapCost)
|
|
local nTid = tonumber(sTid)
|
|
local nCurCount = PlayerData.Item:GetItemCountByID(nTid)
|
|
if nCount <= nCurCount then
|
|
NovaAPI.SetTMPText(self._mapNode.TMP_gachaTenCost, nCount)
|
|
local mapItemCfgData = ConfigTable.GetData_Item(nTid)
|
|
self:SetPngSprite(self._mapNode.imgItemTen, mapItemCfgData.Icon2)
|
|
NovaAPI.SetImageNativeSize(self._mapNode.imgItemTen)
|
|
break
|
|
end
|
|
if nIdx == #mapGachaStorage.TenTimesPreferred then
|
|
NovaAPI.SetTMPText(self._mapNode.TMP_gachaTenCost, mapGachaStorage.DefaultQty * 10)
|
|
local mapItemCfgData = ConfigTable.GetData_Item(mapGachaStorage.DefaultId)
|
|
self:SetPngSprite(self._mapNode.imgItemTen, mapItemCfgData.Icon2)
|
|
NovaAPI.SetImageNativeSize(self._mapNode.imgItemTen)
|
|
end
|
|
end
|
|
else
|
|
NovaAPI.SetTMPText(self._mapNode.TMP_gachaTenCost, mapGachaStorage.DefaultQty * 10)
|
|
local mapItemCfgData = ConfigTable.GetData_Item(mapGachaStorage.DefaultId)
|
|
self:SetPngSprite(self._mapNode.imgItemTen, mapItemCfgData.Icon2)
|
|
NovaAPI.SetImageNativeSize(self._mapNode.imgItemTen)
|
|
end
|
|
end
|
|
function GachaCtrl:RefreshCover()
|
|
for nPoolId, mapCoverCtrl in pairs(self.mapCover) do
|
|
mapCoverCtrl:SetCover(nPoolId)
|
|
end
|
|
end
|
|
function GachaCtrl:LoadCover()
|
|
self.mapCover = {}
|
|
for _, nPoolId in ipairs(self.tbOpenedPool) do
|
|
local mapGacha = ConfigTable.GetData("Gacha", nPoolId)
|
|
if mapGacha ~= nil then
|
|
print(string.format("UI_GachaCover/%s/%s.prefab", mapGacha.Image, mapGacha.Image))
|
|
local coverPrefab = self:LoadAsset(string.format("UI_GachaCover/%s/%s.prefab", mapGacha.Image, mapGacha.Image))
|
|
local goCover = instantiate(coverPrefab, self._mapNode.coverRoot)
|
|
goCover:SetActive(false)
|
|
local sScript = "Game.UI.GachaEx.GachaCoverCtrl"
|
|
if coverScript[mapGacha.StorageId] ~= nil then
|
|
sScript = coverScript[mapGacha.StorageId]
|
|
end
|
|
local goCtrl = self:BindCtrlByNode(goCover, sScript)
|
|
self.mapCover[nPoolId] = goCtrl
|
|
self.mapCover[nPoolId]:SetCover(nPoolId)
|
|
end
|
|
end
|
|
end
|
|
function GachaCtrl:SetTabSelect(nGachaId, bSelect)
|
|
if nGachaId == nil then
|
|
return
|
|
end
|
|
local gachaData = ConfigTable.GetData("Gacha", nGachaId)
|
|
local mapStorage = ConfigTable.GetData("GachaType", gachaData.GachaType)
|
|
if bSelect then
|
|
local tbCoin = clone(mapStorage.CoinItem)
|
|
if gachaData.SpecificTid > 0 then
|
|
table.insert(tbCoin, gachaData.SpecificTid)
|
|
end
|
|
self._mapNode.TopBar:CreateCoin(tbCoin)
|
|
self.tbCurTabCoin = tbCoin
|
|
end
|
|
local go = self.mapTab[nGachaId]
|
|
if go ~= nil then
|
|
go.transform:Find("AnimRoot/imgChoose").gameObject:SetActive(bSelect)
|
|
end
|
|
self._mapNode.btn_NewBieJump.gameObject:SetActive(gachaData.StorageId == GameEnum.gachaStorageType.BeginnerCardPool)
|
|
self._mapNode.btn_shop.gameObject:SetActive(gachaData.StorageId == GameEnum.gachaStorageType.BeginnerCardPool)
|
|
end
|
|
function GachaCtrl:SetCoverOpen(nGachaId, bOpen)
|
|
if nGachaId == nil then
|
|
return
|
|
end
|
|
local go = self.mapCover[nGachaId].gameObject
|
|
if go ~= nil then
|
|
go:SetActive(bOpen)
|
|
if bOpen then
|
|
local gachaData = ConfigTable.GetData("Gacha", nGachaId)
|
|
if gachaData ~= nil then
|
|
CS.WwiseAudioManager.Instance:PostEvent(gachaData.Voice)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
function GachaCtrl:GachaOneExchangeCoin(mapGacha)
|
|
local ConfirmPanel = function(sTip, confirmCallback, againKey)
|
|
if againKey ~= nil then
|
|
local TipsTime = LocalData.GetPlayerLocalData(againKey)
|
|
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 nowD == _tipDay then
|
|
confirmCallback()
|
|
return
|
|
end
|
|
end
|
|
local isSelectAgain = false
|
|
local func_confirm = function()
|
|
if againKey ~= nil and 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(againKey, tostring(_nowD))
|
|
end
|
|
confirmCallback()
|
|
end
|
|
local againCallback = function(isSelect)
|
|
isSelectAgain = isSelect
|
|
end
|
|
local cancelCallback = function()
|
|
end
|
|
local msg = {
|
|
nType = AllEnum.MessageBox.Confirm,
|
|
sContent = sTip,
|
|
callbackConfirmAfterClose = func_confirm,
|
|
callbackCancel = cancelCallback,
|
|
callbackAgain = againKey ~= nil and againCallback or nil,
|
|
bBlur = false
|
|
}
|
|
EventManager.Hit(EventId.OpenMessageBox, msg)
|
|
end
|
|
local GachaCallback = function(mapData)
|
|
self:GetGachaItem(mapData, mapGacha.StorageId)
|
|
self:RefreshCoin(mapGacha)
|
|
end
|
|
local mapGachaStorage = ConfigTable.GetData("GachaStorage", mapGacha.StorageId)
|
|
if mapGachaStorage == nil then
|
|
return
|
|
end
|
|
local bSpecial = false
|
|
if mapGacha.SpecificTid > 0 then
|
|
local nCurCount = PlayerData.Item:GetItemCountByID(mapGacha.SpecificTid)
|
|
if nCurCount >= mapGacha.SpecificQty then
|
|
bSpecial = true
|
|
end
|
|
end
|
|
local nDefaultCount = PlayerData.Item:GetItemCountByID(mapGachaStorage.DefaultId)
|
|
if nDefaultCount >= mapGachaStorage.DefaultQty or bSpecial then
|
|
PlayerData.Gacha:SendGachaReq(self.curPoolId, 1, GachaCallback)
|
|
elseif 0 < mapGachaStorage.CostId then
|
|
local nCostCount = PlayerData.Item:GetItemCountByID(mapGachaStorage.CostId)
|
|
local confirmCallback = function()
|
|
if nCostCount >= mapGachaStorage.CostQty * (mapGachaStorage.DefaultQty - nDefaultCount) then
|
|
PlayerData.Gacha:SendGachaReq(self.curPoolId, 1, GachaCallback)
|
|
elseif mapGachaStorage.CostId == AllEnum.CoinItemId.Jade then
|
|
local nNeedCount = mapGachaStorage.CostQty * (mapGachaStorage.DefaultQty - nDefaultCount)
|
|
local nJadeCount = PlayerData.Item:GetItemCountByID(AllEnum.CoinItemId.Jade)
|
|
nNeedCount = nNeedCount - nJadeCount
|
|
local mapCostCfgData = ConfigTable.GetData_Item(AllEnum.CoinItemId.STONE)
|
|
local mapJadeCfgData = ConfigTable.GetData_Item(AllEnum.CoinItemId.Jade)
|
|
local sTips1 = orderedFormat(ConfigTable.GetUIText("Recruit_ExchangeGemZero"), mapJadeCfgData.Id, nNeedCount, mapCostCfgData.Id)
|
|
local confirmCallbackStone = function()
|
|
local nCurStoneCount = PlayerData.Item:GetItemCountByID(AllEnum.CoinItemId.STONE)
|
|
nCurStoneCount = nCurStoneCount + PlayerData.Item:GetItemCountByID(AllEnum.CoinItemId.FREESTONE)
|
|
if nCurStoneCount >= nNeedCount then
|
|
PlayerData.Coin:SendGemConvertReqReq(nNeedCount, nil)
|
|
else
|
|
local sTips2 = orderedFormat(ConfigTable.GetUIText("Recruit_Charge") or "", mapCostCfgData.Id)
|
|
local confirmCallbackExchange = function()
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.Mall, AllEnum.MallToggle.Gem)
|
|
end
|
|
ConfirmPanel(sTips2, confirmCallbackExchange)
|
|
end
|
|
end
|
|
ConfirmPanel(sTips1, confirmCallbackStone)
|
|
else
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("NotEnoughItem"))
|
|
end
|
|
end
|
|
local nNeedCount = mapGachaStorage.CostQty * (mapGachaStorage.DefaultQty - nDefaultCount)
|
|
local mapCostCfgData = ConfigTable.GetData_Item(mapGachaStorage.CostId)
|
|
local mapDefaultCfgData = ConfigTable.GetData_Item(mapGachaStorage.DefaultId)
|
|
local sTips
|
|
if 0 < nDefaultCount then
|
|
sTips = orderedFormat(ConfigTable.GetUIText("Recruit_ExchangeGem"), nDefaultCount, mapDefaultCfgData.Id, nNeedCount, mapCostCfgData.Id, mapGachaStorage.DefaultQty - nDefaultCount, mapDefaultCfgData.Id)
|
|
else
|
|
sTips = orderedFormat(ConfigTable.GetUIText("Recruit_Exchange"), nNeedCount, mapCostCfgData.Id, mapGachaStorage.DefaultQty - nDefaultCount, mapDefaultCfgData.Id)
|
|
end
|
|
ConfirmPanel(sTips, confirmCallback, "GachaShowTicketExchange")
|
|
else
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("NotEnoughItem"))
|
|
end
|
|
end
|
|
function GachaCtrl:GachaTenExchangeCoin(mapGacha)
|
|
local ConfirmPanel = function(sTip, confirmCallback, againKey)
|
|
if againKey ~= nil then
|
|
local TipsTime = LocalData.GetPlayerLocalData(againKey)
|
|
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 nowD == _tipDay then
|
|
confirmCallback()
|
|
return
|
|
end
|
|
end
|
|
local isSelectAgain = false
|
|
local func_confirm = function()
|
|
if againKey ~= nil and 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(againKey, tostring(_nowD))
|
|
end
|
|
confirmCallback()
|
|
end
|
|
local againCallback = function(isSelect)
|
|
isSelectAgain = isSelect
|
|
end
|
|
local cancelCallback = function()
|
|
end
|
|
local msg = {
|
|
nType = AllEnum.MessageBox.Confirm,
|
|
sContent = sTip,
|
|
callbackConfirmAfterClose = func_confirm,
|
|
callbackCancel = cancelCallback,
|
|
callbackAgain = againKey ~= nil and againCallback or nil,
|
|
bBlur = false
|
|
}
|
|
EventManager.Hit(EventId.OpenMessageBox, msg)
|
|
end
|
|
local bGetFirstTenReward = PlayerData.Gacha:GetRecvFirstTenReward(self.curPoolId)
|
|
local GachaCallback = function(mapData)
|
|
self:GetGachaItem(mapData, mapGacha.StorageId, bGetFirstTenReward)
|
|
self:RefreshCoin(mapGacha)
|
|
end
|
|
local mapGachaStorage = ConfigTable.GetData("GachaStorage", mapGacha.StorageId)
|
|
if mapGachaStorage == nil then
|
|
return
|
|
end
|
|
local bSpecial = false
|
|
local nSpecificCount = 0
|
|
local nSpecificGachaCount = 0
|
|
local nDefaultCount = PlayerData.Item:GetItemCountByID(mapGachaStorage.DefaultId)
|
|
if 0 < mapGacha.SpecificTid then
|
|
nSpecificCount = PlayerData.Item:GetItemCountByID(mapGacha.SpecificTid)
|
|
if nSpecificCount >= 10 * mapGacha.SpecificQty then
|
|
bSpecial = true
|
|
else
|
|
nSpecificGachaCount = math.floor(nSpecificCount / mapGacha.SpecificQty)
|
|
local nDefaultGachaCount = math.floor(nDefaultCount / mapGachaStorage.DefaultQty)
|
|
if 10 <= nSpecificGachaCount + nDefaultGachaCount then
|
|
bSpecial = true
|
|
end
|
|
end
|
|
end
|
|
if nDefaultCount >= mapGachaStorage.DefaultQty * 10 or bSpecial then
|
|
PlayerData.Gacha:SendGachaReq(self.curPoolId, 2, GachaCallback)
|
|
elseif 0 < mapGachaStorage.CostId then
|
|
local nCostCount = PlayerData.Item:GetItemCountByID(mapGachaStorage.CostId)
|
|
local confirmCallback = function()
|
|
if nCostCount >= mapGachaStorage.CostQty * (mapGachaStorage.DefaultQty * (10 - nSpecificGachaCount) - nDefaultCount) then
|
|
PlayerData.Gacha:SendGachaReq(self.curPoolId, 2, GachaCallback)
|
|
elseif mapGachaStorage.CostId == AllEnum.CoinItemId.Jade then
|
|
local nNeedCount = mapGachaStorage.CostQty * (mapGachaStorage.DefaultQty * (10 - nSpecificGachaCount) - nDefaultCount)
|
|
local nJadeCount = PlayerData.Item:GetItemCountByID(AllEnum.CoinItemId.Jade)
|
|
nNeedCount = nNeedCount - nJadeCount
|
|
local mapCostCfgData = ConfigTable.GetData_Item(AllEnum.CoinItemId.STONE)
|
|
local mapJadeCfgData = ConfigTable.GetData_Item(AllEnum.CoinItemId.Jade)
|
|
local sTips1 = orderedFormat(ConfigTable.GetUIText("Recruit_ExchangeGemZero"), mapJadeCfgData.Id, nNeedCount, mapCostCfgData.Id)
|
|
local confirmCallbackStone = function()
|
|
local nCurStoneCount = PlayerData.Item:GetItemCountByID(AllEnum.CoinItemId.STONE)
|
|
nCurStoneCount = nCurStoneCount + PlayerData.Item:GetItemCountByID(AllEnum.CoinItemId.FREESTONE)
|
|
if nCurStoneCount >= nNeedCount then
|
|
PlayerData.Coin:SendGemConvertReqReq(nNeedCount, nil)
|
|
else
|
|
local sTips2 = orderedFormat(ConfigTable.GetUIText("Recruit_Charge") or "", mapCostCfgData.Id)
|
|
local confirmCallbackExchange = function()
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.Mall, AllEnum.MallToggle.Gem)
|
|
end
|
|
ConfirmPanel(sTips2, confirmCallbackExchange)
|
|
end
|
|
end
|
|
ConfirmPanel(sTips1, confirmCallbackStone)
|
|
else
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("NotEnoughItem"))
|
|
end
|
|
end
|
|
local nNeedCount = mapGachaStorage.CostQty * (mapGachaStorage.DefaultQty * (10 - nSpecificGachaCount) - nDefaultCount)
|
|
local mapCostCfgData = ConfigTable.GetData_Item(mapGachaStorage.CostId)
|
|
local mapDefaultCfgData = ConfigTable.GetData_Item(mapGachaStorage.DefaultId)
|
|
local sTips
|
|
if 0 < nDefaultCount and 0 < nSpecificCount then
|
|
sTips = orderedFormat(ConfigTable.GetUIText("Recruit_ExchangeGem2"), nDefaultCount, mapDefaultCfgData.Id, nSpecificCount, mapGacha.SpecificTid, nNeedCount, mapCostCfgData.Id, mapGachaStorage.DefaultQty * (10 - nSpecificGachaCount) - nDefaultCount, mapDefaultCfgData.Id)
|
|
elseif 0 < nDefaultCount then
|
|
sTips = orderedFormat(ConfigTable.GetUIText("Recruit_ExchangeGem"), nDefaultCount, mapDefaultCfgData.Id, nNeedCount, mapCostCfgData.Id, mapGachaStorage.DefaultQty * (10 - nSpecificGachaCount) - nDefaultCount, mapDefaultCfgData.Id)
|
|
elseif 0 < nSpecificCount then
|
|
sTips = orderedFormat(ConfigTable.GetUIText("Recruit_ExchangeGem"), nSpecificCount, mapGacha.SpecificTid, nNeedCount, mapCostCfgData.Id, mapGachaStorage.DefaultQty * (10 - nSpecificGachaCount) - nDefaultCount, mapDefaultCfgData.Id)
|
|
else
|
|
sTips = orderedFormat(ConfigTable.GetUIText("Recruit_Exchange"), nNeedCount, mapCostCfgData.Id, mapGachaStorage.DefaultQty * (10 - nSpecificGachaCount) - nDefaultCount, mapDefaultCfgData.Id)
|
|
end
|
|
ConfirmPanel(sTips, confirmCallback, "GachaShowTicketExchange")
|
|
else
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("NotEnoughItem"))
|
|
end
|
|
end
|
|
function GachaCtrl:OnBtnClick_Tab(goBtn, nGachaId)
|
|
CS.WwiseAudioManager.Instance:PostEvent("ui_recuit_cover_all_stop")
|
|
if self.curPoolId == nGachaId then
|
|
return
|
|
end
|
|
self:SetTabSelect(self.curPoolId, false)
|
|
self:SetTabSelect(nGachaId, true)
|
|
self:SetCoverOpen(self.curPoolId, false)
|
|
self:SetCoverOpen(nGachaId, true)
|
|
self.curPoolId = nGachaId
|
|
self:RefreshInfo()
|
|
self.mapCover[self.curPoolId]:PlayInAnim()
|
|
end
|
|
function GachaCtrl:OnBtnClick_One()
|
|
if self.bGachaProcess then
|
|
return
|
|
end
|
|
CS.WwiseAudioManager.Instance:PostEvent("ui_recuit_cover_all_stop")
|
|
local GachaCallback = function(mapData)
|
|
local mapGacha = ConfigTable.GetData("Gacha", self.curPoolId)
|
|
if mapGacha == nil then
|
|
return
|
|
end
|
|
self:RefreshCoin(mapGacha)
|
|
self:GetGachaItem(mapData, mapGacha.StorageId)
|
|
end
|
|
if self.curPoolId == nil or self.curPoolId == 0 then
|
|
return
|
|
end
|
|
local mapGacha = ConfigTable.GetData("Gacha", self.curPoolId)
|
|
if mapGacha == nil then
|
|
return
|
|
end
|
|
local mapGachaStorage = ConfigTable.GetData("GachaStorage", mapGacha.StorageId)
|
|
if mapGachaStorage == nil then
|
|
return
|
|
end
|
|
local rapidjson = require("rapidjson")
|
|
if type(mapGachaStorage.OncePreferred) == "string" then
|
|
local tbOne = rapidjson.decode(mapGachaStorage.OncePreferred)
|
|
if tbOne ~= nil then
|
|
mapGachaStorage.OncePreferred = tbOne
|
|
else
|
|
mapGachaStorage.OncePreferred = {}
|
|
printError("单抽消耗配置错误:" .. self.curPoolId)
|
|
return
|
|
end
|
|
end
|
|
local bSpecialOne = false
|
|
if 0 < mapGacha.SpecificTid then
|
|
local nCurCount = PlayerData.Item:GetItemCountByID(mapGacha.SpecificTid)
|
|
if 0 < nCurCount then
|
|
bSpecialOne = true
|
|
end
|
|
end
|
|
if bSpecialOne then
|
|
PlayerData.Gacha:SendGachaReq(self.curPoolId, 1, GachaCallback)
|
|
elseif 0 < #mapGachaStorage.OncePreferred then
|
|
for nIdx, mapCost in ipairs(mapGachaStorage.OncePreferred) do
|
|
local f = pairs(mapCost)
|
|
local sTid, nCount = f(mapCost)
|
|
local nTid = tonumber(sTid)
|
|
local nCurCount = PlayerData.Item:GetItemCountByID(nTid)
|
|
if nCount <= nCurCount then
|
|
PlayerData.Gacha:SendGachaReq(self.curPoolId, 1, GachaCallback)
|
|
break
|
|
end
|
|
if nIdx == #mapGachaStorage.OncePreferred then
|
|
self:GachaOneExchangeCoin(mapGacha)
|
|
end
|
|
end
|
|
else
|
|
self:GachaOneExchangeCoin(mapGacha)
|
|
end
|
|
end
|
|
function GachaCtrl:OnBtnClick_Ten()
|
|
if self.bGachaProcess then
|
|
return
|
|
end
|
|
if self.curPoolId == nil or self.curPoolId == 0 then
|
|
return
|
|
end
|
|
local bGetFirstTenReward = PlayerData.Gacha:GetRecvFirstTenReward(self.curPoolId)
|
|
local mapGacha = ConfigTable.GetData("Gacha", self.curPoolId)
|
|
if mapGacha == nil then
|
|
return
|
|
end
|
|
CS.WwiseAudioManager.Instance:PostEvent("ui_recuit_cover_all_stop")
|
|
local GachaCallback = function(mapData)
|
|
local mapGacha = ConfigTable.GetData("Gacha", self.curPoolId)
|
|
if mapGacha == nil then
|
|
return
|
|
end
|
|
self:RefreshCoin(mapGacha)
|
|
self:GetGachaItem(mapData, mapGacha.StorageId, bGetFirstTenReward)
|
|
end
|
|
local mapGachaStorage = ConfigTable.GetData("GachaStorage", mapGacha.StorageId)
|
|
if mapGachaStorage == nil then
|
|
return
|
|
end
|
|
local rapidjson = require("rapidjson")
|
|
if type(mapGachaStorage.TenTimesPreferred) == "string" then
|
|
local tbTen = rapidjson.decode(mapGachaStorage.TenTimesPreferred)
|
|
if tbTen ~= nil then
|
|
mapGachaStorage.TenTimesPreferred = tbTen
|
|
else
|
|
mapGachaStorage.TenTimesPreferred = {}
|
|
printError("十连消耗配置错误:" .. self.curPoolId)
|
|
return
|
|
end
|
|
end
|
|
local nSpecialCount = 0
|
|
local nDefaultCurCount = PlayerData.Item:GetItemCountByID(mapGachaStorage.DefaultId)
|
|
local nDefaultGachaCount = math.floor(nDefaultCurCount / mapGachaStorage.DefaultQty)
|
|
if 0 < mapGacha.SpecificTid then
|
|
local nCurCount = PlayerData.Item:GetItemCountByID(mapGacha.SpecificTid)
|
|
nSpecialCount = math.floor(nCurCount / mapGacha.SpecificQty)
|
|
end
|
|
local specialGachaHint = function(Tid1, Tid2, nCount1, nCount2, againKey)
|
|
local confirmCallback = function()
|
|
PlayerData.Gacha:SendGachaReq(self.curPoolId, 2, GachaCallback)
|
|
end
|
|
if againKey ~= nil then
|
|
local TipsTime = LocalData.GetPlayerLocalData(againKey)
|
|
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 nowD == _tipDay then
|
|
confirmCallback()
|
|
return
|
|
end
|
|
end
|
|
local isSelectAgain = false
|
|
local func_confirm = function()
|
|
if againKey ~= nil and 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(againKey, tostring(_nowD))
|
|
end
|
|
confirmCallback()
|
|
end
|
|
local againCallback = function(isSelect)
|
|
isSelectAgain = isSelect
|
|
end
|
|
local cancelCallback = function()
|
|
end
|
|
local sTips = orderedFormat(ConfigTable.GetUIText("Recruit_ComboDrawTicket"), nCount1, Tid1, nCount2, Tid2)
|
|
local msg = {
|
|
nType = AllEnum.MessageBox.Confirm,
|
|
sContent = sTips,
|
|
callbackConfirmAfterClose = func_confirm,
|
|
callbackCancel = cancelCallback,
|
|
callbackAgain = againKey ~= nil and againCallback or nil,
|
|
bBlur = false
|
|
}
|
|
EventManager.Hit(EventId.OpenMessageBox, msg)
|
|
end
|
|
if 10 <= nSpecialCount then
|
|
PlayerData.Gacha:SendGachaReq(self.curPoolId, 2, GachaCallback)
|
|
elseif 0 < nSpecialCount and 10 <= nDefaultGachaCount + nSpecialCount then
|
|
specialGachaHint(mapGacha.SpecificTid, mapGachaStorage.DefaultId, nSpecialCount * mapGacha.SpecificQty, (10 - nSpecialCount) * mapGachaStorage.DefaultQty, "RecruitComboDrawTicketHint")
|
|
elseif #mapGachaStorage.TenTimesPreferred > 0 then
|
|
for nIdx, mapCost in ipairs(mapGachaStorage.TenTimesPreferred) do
|
|
local f = pairs(mapCost)
|
|
local sTid, nCount = f(mapCost)
|
|
local nTid = tonumber(sTid)
|
|
local nCurCount = PlayerData.Item:GetItemCountByID(nTid)
|
|
if nCount <= nCurCount then
|
|
PlayerData.Gacha:SendGachaReq(self.curPoolId, 2, GachaCallback)
|
|
break
|
|
end
|
|
if nIdx == #mapGachaStorage.TenTimesPreferred then
|
|
self:GachaTenExchangeCoin(mapGacha)
|
|
end
|
|
end
|
|
else
|
|
self:GachaTenExchangeCoin(mapGacha)
|
|
end
|
|
end
|
|
function GachaCtrl:OnBtnClick_GachaDetail()
|
|
self._mapNode.GachaProb.gameObject:SetActive(false)
|
|
self._mapNode.GachaInfo:OpenInfo()
|
|
end
|
|
function GachaCtrl:OnBtnClick_ProbDetail()
|
|
self._mapNode.GachaInfo.gameObject:SetActive(false)
|
|
self._mapNode.GachaProb:OpenInfo()
|
|
end
|
|
function GachaCtrl:OnBtnClick_GachaHistory()
|
|
local mapGacha = ConfigTable.GetData("Gacha", self.curPoolId)
|
|
if mapGacha ~= nil then
|
|
local GetDataCallback = function(tbData)
|
|
self._mapNode.GachaHistory:OpenPanel(mapGacha.StorageId, self.curPoolId)
|
|
end
|
|
PlayerData.Gacha:GetGachaHistory(mapGacha.StorageId, GetDataCallback)
|
|
end
|
|
end
|
|
function GachaCtrl:OnBtnClick_shop()
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.Mall, AllEnum.MallToggle.Shop)
|
|
end
|
|
function GachaCtrl:OnEvent_GachaPoolDetail(nIdx)
|
|
end
|
|
function GachaCtrl:GetGachaItem(mapData, nStorageId, bGetFirstTenReward)
|
|
local tbReward = {}
|
|
local mapRewardItem = {}
|
|
local rare = 3
|
|
local tbGiveItems = {}
|
|
local nStorage = 0
|
|
local mapGachaData = ConfigTable.GetData("Gacha", self.curPoolId)
|
|
if mapGachaData ~= nil then
|
|
nStorage = mapGachaData.StorageId
|
|
local mapStorage = ConfigTable.GetData("GachaStorage", nStorage)
|
|
if mapStorage ~= nil then
|
|
local sGiveItem = mapStorage.GiveItems
|
|
local mapDecodeItems = decodeJson(sGiveItem)
|
|
for nTid, nCount in pairs(mapDecodeItems) do
|
|
table.insert(tbGiveItems, {
|
|
Tid = tonumber(nTid),
|
|
Qty = tonumber(nCount)
|
|
})
|
|
end
|
|
end
|
|
end
|
|
local mapChangeInfo = UTILS.DecodeChangeInfo(mapData.Change)
|
|
local tbAcquire = mapChangeInfo["proto.Acquire"]
|
|
if tbAcquire ~= nil then
|
|
tbAcquire = tbAcquire[1]
|
|
end
|
|
if tbAcquire == nil then
|
|
tbAcquire = {}
|
|
end
|
|
local GetRewardItem = function(nIdx, nTid)
|
|
local ret = {}
|
|
local nNumber = 0
|
|
for _, mapAcq in ipairs(tbAcquire.List) do
|
|
if mapAcq.Tid == nTid then
|
|
nNumber = mapAcq.Begin
|
|
end
|
|
end
|
|
for i = 1, nIdx do
|
|
if mapData.Cards[i].Card.Tid == nTid then
|
|
nNumber = nNumber + 1
|
|
end
|
|
end
|
|
local mapItemCfgData = ConfigTable.GetData_Item(nTid)
|
|
if mapItemCfgData == nil then
|
|
return ret
|
|
end
|
|
local nMaxCount = self._mapMaxAcquireReward[mapItemCfgData.Stype][mapItemCfgData.Rarity]
|
|
if nMaxCount == nil then
|
|
nMaxCount = 1
|
|
end
|
|
nNumber = math.min(nMaxCount, nNumber)
|
|
local nId = mapItemCfgData.Stype * 1000 + mapItemCfgData.Rarity * 100 + nNumber
|
|
local mapCfg = ConfigTable.GetData("AcquireReward", nId)
|
|
if not mapCfg or mapCfg.ItemNum == 0 then
|
|
return ret
|
|
end
|
|
table.insert(ret, {
|
|
Tid = mapCfg.ItemId,
|
|
Qty = mapCfg.ItemNum
|
|
})
|
|
return ret
|
|
end
|
|
for nIdx, v in ipairs(mapData.Cards) do
|
|
local tbAcReward = GetRewardItem(nIdx, v.Card.Tid)
|
|
for _, mapReward in ipairs(tbAcReward) do
|
|
table.insert(v.Rewards, mapReward)
|
|
end
|
|
table.insert(tbReward, {
|
|
id = v.Card.Tid,
|
|
count = v.Card.Qty,
|
|
rewardItem = v.Rewards,
|
|
bNew = v.Card.bNew,
|
|
exItem = tbGiveItems
|
|
})
|
|
local mapItem = ConfigTable.GetData_Item(v.Card.Tid)
|
|
if mapItem ~= nil then
|
|
if rare > mapItem.Rarity then
|
|
rare = mapItem.Rarity
|
|
end
|
|
if mapItem.Stype == GameEnum.itemStype.Char then
|
|
PlayerData.Talent:UpdateCharTalentRedDot(v.Card.Tid)
|
|
end
|
|
end
|
|
if v.Rewards ~= nil and #v.Rewards > 0 then
|
|
for _, mapItem in ipairs(v.Rewards) do
|
|
if mapRewardItem[mapItem.Tid] == nil then
|
|
mapRewardItem[mapItem.Tid] = 0
|
|
end
|
|
mapRewardItem[mapItem.Tid] = mapRewardItem[mapItem.Tid] + mapItem.Qty
|
|
end
|
|
end
|
|
end
|
|
local OnGachaDragOpenDoor = function()
|
|
WwiseManger.Instance:PostEvent("music_recruit_rarity_3s")
|
|
end
|
|
local function OnShowFinish()
|
|
EventManager.Remove("GaChaShowVideoEnd", self, OnShowFinish)
|
|
EventManager.Remove("GachaDragOpenDoor", self, OnGachaDragOpenDoor)
|
|
self.bGachaProcess = false
|
|
if nStorage == GameEnum.gachaStorageType.DiscCardPool or nStorage == GameEnum.gachaStorageType.DiscUpCardPool then
|
|
WwiseManger.Instance:SetState("recruit_rarity", "diskR")
|
|
else
|
|
WwiseManger.Instance:SetState("recruit_rarity", "R")
|
|
end
|
|
self:RefreshCover()
|
|
self._mapNode.GachaShow:ShowResults(tbReward, tbGiveItems)
|
|
PlayerData.SideBanner:TryOpenSideBanner()
|
|
end
|
|
local function OnShowItemEnd()
|
|
EventManager.Remove("GachaShowItemEnd", self, OnShowItemEnd)
|
|
if #mapData.Cards < 10 then
|
|
CS.WwiseAudioManager.Instance:SetState("recruit_rarity", "None")
|
|
PlayerData.Item:TryOpenFragmentsOverflow(function()
|
|
PlayerData.Phone:CheckNewChat()
|
|
end)
|
|
return
|
|
end
|
|
self._mapNode.GachaShowResult.gameObject:SetActive(true)
|
|
for _, mapItem in ipairs(tbGiveItems) do
|
|
mapItem.Qty = mapItem.Qty * #tbReward
|
|
if bGetFirstTenReward ~= nil and not bGetFirstTenReward and mapGachaData ~= nil then
|
|
local nTimes = mapGachaData.FirstTenShow == 0 and 1 or mapGachaData.FirstTenShow
|
|
mapItem.Qty = mapItem.Qty * nTimes
|
|
end
|
|
end
|
|
self._mapNode.GachaShowResult:ShowResult(tbReward, mapRewardItem, tbGiveItems)
|
|
end
|
|
EventManager.Add("GachaDragOpenDoor", self, OnGachaDragOpenDoor)
|
|
EventManager.Add("GaChaShowVideoEnd", self, OnShowFinish)
|
|
EventManager.Add("GachaShowItemEnd", self, OnShowItemEnd)
|
|
if not self:CheckGachaVideoRes() then
|
|
OnShowFinish()
|
|
else
|
|
WwiseManger.Instance:SetState("recruit_rarity", "transition")
|
|
if nStorage == GameEnum.gachaStorageType.DiscCardPool or nStorage == GameEnum.gachaStorageType.DiscUpCardPool then
|
|
local sup = math.random(0, 2) > 1
|
|
NovaAPI.PlayGachaDisc(self._mapNode.GachaOpenDoor, #mapData.Cards, rare, sup)
|
|
else
|
|
local sup = math.random(0, 100)
|
|
local nType = 3
|
|
if sup <= 5 then
|
|
nType = 0
|
|
elseif sup <= 10 then
|
|
nType = 2
|
|
elseif sup <= 55 then
|
|
nType = 1
|
|
else
|
|
nType = 3
|
|
end
|
|
NovaAPI.PlayGachaOpenDoor(self._mapNode.GachaOpenDoor, rare, nType)
|
|
end
|
|
end
|
|
end
|
|
function GachaCtrl:CheckGachaVideoRes()
|
|
local ProVideoManager = CS.ProVideoManager
|
|
local File = CS.System.IO.File
|
|
local path = ProVideoManager.GetVideoResourcePath("Gacha_001.mp4")
|
|
if not File.Exists(path) then
|
|
return false
|
|
end
|
|
path = ProVideoManager.GetVideoResourcePath("Gacha_002_loop.mp4")
|
|
if not File.Exists(path) then
|
|
return false
|
|
end
|
|
path = ProVideoManager.GetVideoResourcePath("Gacha_003.mp4")
|
|
if not File.Exists(path) then
|
|
return false
|
|
end
|
|
path = ProVideoManager.GetVideoResourcePath("Gacha_003_r.mp4")
|
|
if not File.Exists(path) then
|
|
return false
|
|
end
|
|
path = ProVideoManager.GetVideoResourcePath("Gacha_003_r_1.mp4")
|
|
if not File.Exists(path) then
|
|
return false
|
|
end
|
|
path = ProVideoManager.GetVideoResourcePath("Gacha_car_001.mp4")
|
|
if not File.Exists(path) then
|
|
return false
|
|
end
|
|
path = ProVideoManager.GetVideoResourcePath("Gacha_car_001_r.mp4")
|
|
if not File.Exists(path) then
|
|
return false
|
|
end
|
|
path = ProVideoManager.GetVideoResourcePath("gacha_disc.mp4")
|
|
if not File.Exists(path) then
|
|
return false
|
|
end
|
|
path = ProVideoManager.GetVideoResourcePath("gacha_disc_10_g.mp4")
|
|
if not File.Exists(path) then
|
|
return false
|
|
end
|
|
path = ProVideoManager.GetVideoResourcePath("gacha_disc_10_r.mp4")
|
|
if not File.Exists(path) then
|
|
return false
|
|
end
|
|
path = ProVideoManager.GetVideoResourcePath("gacha_disc_10_r_1.mp4")
|
|
if not File.Exists(path) then
|
|
return false
|
|
end
|
|
path = ProVideoManager.GetVideoResourcePath("gacha_disc_g.mp4")
|
|
if not File.Exists(path) then
|
|
return false
|
|
end
|
|
path = ProVideoManager.GetVideoResourcePath("gacha_disc_r.mp4")
|
|
if not File.Exists(path) then
|
|
return false
|
|
end
|
|
return true
|
|
end
|
|
function GachaCtrl:OnEvent_GachaProcessStart(bStart)
|
|
self.bGachaProcess = bStart
|
|
end
|
|
function GachaCtrl:GetGachaNewbieItem(mapData)
|
|
local tbReward = {}
|
|
local rare = 3
|
|
local CheckNew = function(nTid)
|
|
local mapItemCfgData = ConfigTable.GetData_Item(nTid)
|
|
if mapItemCfgData == nil then
|
|
return false
|
|
end
|
|
if mapItemCfgData.Type == GameEnum.itemType.Char then
|
|
local mapChar = PlayerData.Char:GetCharDataByTid(nTid)
|
|
return mapChar == nil
|
|
elseif mapItemCfgData.Type == GameEnum.itemType.Disc then
|
|
local mapDisc = PlayerData.Disc:GetDiscById(nTid)
|
|
return mapDisc == nil
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
local curItem = {}
|
|
for _, v in ipairs(mapData.Cards) do
|
|
local mapItem = ConfigTable.GetData_Item(v)
|
|
local bForceJump = mapItem == nil or mapItem.Rarity ~= GameEnum.itemRarity.SSR
|
|
table.insert(tbReward, {
|
|
id = v,
|
|
count = 1,
|
|
rewardItem = {},
|
|
bForceJump = bForceJump,
|
|
bNew = CheckNew(v) and 1 > table.indexof(curItem, v),
|
|
exItem = {}
|
|
})
|
|
local mapItem = ConfigTable.GetData_Item(v)
|
|
if mapItem ~= nil and rare > mapItem.Rarity then
|
|
rare = mapItem.Rarity
|
|
end
|
|
table.insert(curItem, v)
|
|
end
|
|
local OnGachaDragOpenDoor = function()
|
|
WwiseManger.Instance:PostEvent("music_recruit_rarity_3s")
|
|
end
|
|
local function OnShowFinish()
|
|
EventManager.Remove("GaChaShowVideoEnd", self, OnShowFinish)
|
|
EventManager.Remove("GachaDragOpenDoor", self, OnGachaDragOpenDoor)
|
|
self.bGachaProcess = false
|
|
self:RefreshCover()
|
|
self._mapNode.GachaShow:ShowResults(tbReward, {})
|
|
PlayerData.SideBanner:TryOpenSideBanner()
|
|
end
|
|
local function OnShowItemEnd()
|
|
EventManager.Remove("GachaShowItemEnd", self, OnShowItemEnd)
|
|
WwiseManger.Instance:SetState("recruit_rarity", "R")
|
|
if #mapData.Cards < 10 then
|
|
CS.WwiseAudioManager.Instance:SetState("recruit_rarity", "None")
|
|
PlayerData.Item:TryOpenFragmentsOverflow(function()
|
|
PlayerData.Phone:CheckNewChat()
|
|
end)
|
|
return
|
|
end
|
|
self._mapNode.GachaNewBieShowResult.gameObject:SetActive(true)
|
|
self._mapNode.GachaNewBieShowResult:ShowResult(tbReward, self.curPoolId)
|
|
end
|
|
EventManager.Add("GachaDragOpenDoor", self, OnGachaDragOpenDoor)
|
|
EventManager.Add("GaChaShowVideoEnd", self, OnShowFinish)
|
|
EventManager.Add("GachaShowItemEnd", self, OnShowItemEnd)
|
|
if not self:CheckGachaVideoRes() then
|
|
OnShowFinish()
|
|
else
|
|
WwiseManger.Instance:SetState("recruit_rarity", "transition")
|
|
local sup = math.random(0, 100)
|
|
local nType = 3
|
|
if sup <= 5 then
|
|
nType = 0
|
|
elseif sup <= 10 then
|
|
nType = 2
|
|
elseif sup <= 55 then
|
|
nType = 1
|
|
else
|
|
nType = 3
|
|
end
|
|
NovaAPI.PlayGachaOpenDoor(self._mapNode.GachaOpenDoor, rare, nType)
|
|
end
|
|
end
|
|
function GachaCtrl:OnEvent_GachaNewbieSpin()
|
|
self:OnBtnClick_NewBieJump()
|
|
end
|
|
function GachaCtrl:OnEvent_GachaNewbieRecord()
|
|
self:OnBtnClick_NewBieJumpRecord()
|
|
end
|
|
function GachaCtrl:OnEvent_GachaNewbieObtainRecord(idx, items)
|
|
self._mapNode.GachaNewBieObtainResult:SetItems(self.curPoolId, idx, items)
|
|
self._mapNode.GachaNewBieObtainResult.gameObject:SetActive(true)
|
|
end
|
|
function GachaCtrl:OnEvent_GachaNewbieSaveRecord()
|
|
local newbie = ConfigTable.GetData("GachaNewbie", self.curPoolId)
|
|
if newbie == nil then
|
|
return
|
|
end
|
|
local newbieData = PlayerData.Gacha:GetGachaNewbieData(self.curPoolId)
|
|
if newbieData == nil then
|
|
return
|
|
end
|
|
if #newbieData.Temp == 0 then
|
|
return
|
|
end
|
|
if #newbieData.Cards < newbie.SaveCount then
|
|
local GachaCallback = function(mapData)
|
|
self:RefreshInfo()
|
|
self._mapNode.GachaNewBieShowResult:RefreshInfo()
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Gacha_NewBieSaveTip"))
|
|
end
|
|
PlayerData.Gacha:SendGachaNewbieSaveReq(self.curPoolId, 0, GachaCallback)
|
|
return
|
|
end
|
|
self._mapNode.GachaNewBieSaveRecord:SetItems(self.curPoolId)
|
|
self._mapNode.GachaNewBieSaveRecord.gameObject:SetActive(true)
|
|
end
|
|
function GachaCtrl:OnEvent_GachaNewbieReplaceRecord(idx)
|
|
self._mapNode.GachaNewBieReplaceResult:SetItems(self.curPoolId, idx)
|
|
self._mapNode.GachaNewBieReplaceResult.gameObject:SetActive(true)
|
|
end
|
|
function GachaCtrl:OnEvent_GachaNewbieReplaceRecordOver()
|
|
self:RefreshInfo()
|
|
self._mapNode.GachaNewBieShowResult:RefreshInfo()
|
|
self._mapNode.GachaNewBieReplaceResult.gameObject:SetActive(false)
|
|
self._mapNode.GachaNewBieSaveRecord.gameObject:SetActive(false)
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Gacha_NewBieSaveTip"))
|
|
end
|
|
function GachaCtrl:OnEvent_GachaNewbieObtainRecordOver(changes, items, tbNew)
|
|
local tbReward = {}
|
|
local mapRewardItem = {}
|
|
local rare = 3
|
|
local tbGiveItems = {}
|
|
if tbNew == nil then
|
|
tbNew = {}
|
|
end
|
|
local mapGachaData = ConfigTable.GetData("Gacha", self.curPoolId)
|
|
if mapGachaData ~= nil then
|
|
local nStorage = mapGachaData.StorageId
|
|
local mapStorage = ConfigTable.GetData("GachaStorage", nStorage)
|
|
if mapStorage ~= nil then
|
|
local sGiveItem = mapStorage.GiveItems
|
|
local mapDecodeItems = decodeJson(sGiveItem)
|
|
for nTid, nCount in pairs(mapDecodeItems) do
|
|
table.insert(tbGiveItems, {
|
|
Tid = tonumber(nTid),
|
|
Qty = tonumber(nCount)
|
|
})
|
|
end
|
|
end
|
|
end
|
|
local mapChangeInfo = UTILS.DecodeChangeInfo(changes)
|
|
local tbAcquire = mapChangeInfo["proto.Acquire"]
|
|
if tbAcquire ~= nil then
|
|
tbAcquire = tbAcquire[1]
|
|
end
|
|
if tbAcquire == nil then
|
|
tbAcquire = {}
|
|
end
|
|
local GetRewardItem = function(nIdx, nTid)
|
|
local ret = {}
|
|
local nNumber = 0
|
|
for _, mapAcq in ipairs(tbAcquire.List) do
|
|
if mapAcq.Tid == nTid then
|
|
nNumber = mapAcq.Begin
|
|
end
|
|
end
|
|
for i = 1, nIdx do
|
|
if items[i] == nTid then
|
|
nNumber = nNumber + 1
|
|
end
|
|
end
|
|
local mapItemCfgData = ConfigTable.GetData_Item(nTid)
|
|
if mapItemCfgData == nil then
|
|
return ret
|
|
end
|
|
local nMaxCount = self._mapMaxAcquireReward[mapItemCfgData.Stype][mapItemCfgData.Rarity]
|
|
if nMaxCount == nil then
|
|
nMaxCount = 1
|
|
end
|
|
nNumber = math.min(nMaxCount, nNumber)
|
|
local nId = mapItemCfgData.Stype * 1000 + mapItemCfgData.Rarity * 100 + nNumber
|
|
local mapCfg = ConfigTable.GetData("AcquireReward", nId)
|
|
if not mapCfg or mapCfg.ItemNum == 0 then
|
|
return ret
|
|
end
|
|
table.insert(ret, {
|
|
Tid = mapCfg.ItemId,
|
|
Qty = mapCfg.ItemNum
|
|
})
|
|
return ret
|
|
end
|
|
for nIdx, v in ipairs(items) do
|
|
local tbAcReward = GetRewardItem(nIdx, v)
|
|
local rewards = {}
|
|
for _, mapReward in ipairs(tbAcReward) do
|
|
table.insert(rewards, mapReward)
|
|
end
|
|
table.insert(tbReward, {
|
|
id = v,
|
|
count = 1,
|
|
rewardItem = rewards,
|
|
bNew = tbNew[nIdx] or false,
|
|
exItem = tbGiveItems
|
|
})
|
|
local mapItem = ConfigTable.GetData_Item(v)
|
|
if mapItem ~= nil and rare > mapItem.Rarity then
|
|
rare = mapItem.Rarity
|
|
end
|
|
if rewards ~= nil and 0 < #rewards then
|
|
for _, mapItem in ipairs(rewards) do
|
|
if mapRewardItem[mapItem.Tid] == nil then
|
|
mapRewardItem[mapItem.Tid] = 0
|
|
end
|
|
mapRewardItem[mapItem.Tid] = mapRewardItem[mapItem.Tid] + mapItem.Qty
|
|
end
|
|
end
|
|
end
|
|
local function OnShowItemEnd()
|
|
EventManager.Remove("GachaShowItemEnd", self, OnShowItemEnd)
|
|
if #items < 10 then
|
|
CS.WwiseAudioManager.Instance:SetState("recruit_rarity", "None")
|
|
PlayerData.Item:TryOpenFragmentsOverflow(function()
|
|
PlayerData.Phone:CheckNewChat()
|
|
end)
|
|
return
|
|
end
|
|
self._mapNode.GachaShowResult.gameObject:SetActive(true)
|
|
for _, mapItem in ipairs(tbGiveItems) do
|
|
mapItem.Qty = mapItem.Qty * #tbReward
|
|
end
|
|
self._mapNode.GachaShowResult:ShowResult(tbReward, mapRewardItem, tbGiveItems)
|
|
self:RefreshAll()
|
|
end
|
|
EventManager.Add("GachaShowItemEnd", self, OnShowItemEnd)
|
|
self._mapNode.GachaNewBieObtainResult.gameObject:SetActive(false)
|
|
self._mapNode.GachaNewBieShowRecord.gameObject:SetActive(false)
|
|
self._mapNode.GachaNewBieShowResult.gameObject:SetActive(false)
|
|
self:RefreshCover()
|
|
self._mapNode.GachaShow:ShowResults(tbReward, tbGiveItems)
|
|
PlayerData.SideBanner:TryOpenSideBanner()
|
|
end
|
|
function GachaCtrl:OnEvent_GachaCoverEntranceGo()
|
|
if self.bGachaProcess then
|
|
return
|
|
end
|
|
local gachaData = ConfigTable.GetData("Gacha", self.curPoolId)
|
|
if gachaData ~= nil then
|
|
local nTrailId = gachaData.TrailId
|
|
if 0 < nTrailId then
|
|
do
|
|
local callback = function()
|
|
local mapTrialCfgData = ConfigTable.GetData("TrialControl", gachaData.TrailId)
|
|
if mapTrialCfgData ~= nil then
|
|
local nIdx = table.indexof(mapTrialCfgData.Gachas, self.curPoolId)
|
|
if 0 < nIdx then
|
|
PlayerData.Trial:SetTrialAct(nTrailId)
|
|
PlayerData.Trial:SetSelectTrialGroup(mapTrialCfgData.GroupIds[nIdx])
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.TrialLevelSelect)
|
|
end
|
|
end
|
|
end
|
|
PlayerData.Activity:SendActivityDetailMsg(callback)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
function GachaCtrl:OnBtnClick_NewBieJump()
|
|
if self.bGachaProcess then
|
|
return
|
|
end
|
|
local GachaCallback = function(mapData)
|
|
self:GetGachaNewbieItem(mapData)
|
|
self:RefreshInfo()
|
|
self:RefreshCover()
|
|
self._mapNode.GachaNewBieShowResult:RefreshInfo()
|
|
end
|
|
local newbieData = PlayerData.Gacha:GetGachaNewbieData(self.curPoolId)
|
|
if newbieData == nil then
|
|
return
|
|
end
|
|
local newbie = ConfigTable.GetData("GachaNewbie", self.curPoolId)
|
|
if newbie == nil then
|
|
return
|
|
end
|
|
if newbieData.Times < newbie.SpinCount then
|
|
PlayerData.Gacha:SendGachaNewbieReq(self.curPoolId, GachaCallback)
|
|
else
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Gacha_NewBieSummonLimit"))
|
|
end
|
|
end
|
|
function GachaCtrl:OnBtnClick_NewBieJumpRecord()
|
|
local newbieData = PlayerData.Gacha:GetGachaNewbieData(self.curPoolId)
|
|
if newbieData ~= nil then
|
|
if #newbieData.Cards == 0 and #newbieData.Temp == 0 then
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Gacha_NewBieNoRecordTip"))
|
|
else
|
|
self._mapNode.GachaNewBieShowRecord:SetPoolId(self.curPoolId)
|
|
self._mapNode.GachaNewBieShowRecord.gameObject:SetActive(true)
|
|
end
|
|
else
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Gacha_NewBieNoRecordTip"))
|
|
end
|
|
end
|
|
function GachaCtrl:OnEvent_Back(nPanelId)
|
|
if self._panel._nPanelId ~= nPanelId or self.bGachaProcess then
|
|
return
|
|
end
|
|
EventManager.Hit(EventId.CloesCurPanel)
|
|
end
|
|
function GachaCtrl:OnEvent_Home(nPanelId)
|
|
if self._panel._nPanelId ~= nPanelId or self.bGachaProcess then
|
|
return
|
|
end
|
|
PanelManager.Home()
|
|
end
|
|
return GachaCtrl
|