Update - 1.15.0.134

EN: 1.15.0.134
CN: 1.15.0.133
JP: 1.15.0.137
KR: 1.15.0.139
This commit is contained in:
SL1900
2026-09-08 12:00:00 +09:00
parent d441c7afdc
commit 7363298dc1
963 changed files with 590901 additions and 5401 deletions
@@ -211,7 +211,7 @@ function NewTutorialsActCtrl:InitActData(actData)
end
function NewTutorialsActCtrl:Init()
self.bAllAdvanceLocked = true
self.bAllBaseComplete = true
self.bAllBaseComplete = false
self.tbCountDownTimers = {}
self.tbCountDownEndTimes = {}
self:RefreshGuideQuset()
@@ -671,7 +671,7 @@ end
function NewTutorialsActCtrl:RefreshAllContent()
printLog("NewTutorialsActCtrl: Refreshing all content...")
self.bAllAdvanceLocked = true
self.bAllBaseComplete = true
self.bAllBaseComplete = false
self.nShortestTime = nil
self.sShortestTime = nil
self:RefreshGuideQuset()
@@ -51,7 +51,7 @@ function BdConvertResultCtrl:RefreshNormal()
local ctrlObj = self:BindCtrlByNode(goItem, "Game.UI.TemplateEx.TemplateItemCtrl")
local mapCfg = ConfigTable.GetData_Item(nItemId)
if mapCfg then
if mapCfg.Type == GameEnum.itemType.Char or mapCfg.Type == GameEnum.itemType.CharacterSkin then
if mapCfg.Type == GameEnum.itemType.Char then
ctrlObj:SetChar(nItemId, v.count, nil, v.rewardType)
else
ctrlObj:SetItem(nItemId, mapCfg.Rarity, v.count, nil, nil, v.rewardType and v.rewardType == AllEnum.RewardType.First, v.rewardType and v.rewardType == AllEnum.RewardType.Three, true, false, false, v.rewardType and v.rewardType == AllEnum.RewardType.Extra)
@@ -0,0 +1,27 @@
local GoldenSpyBuffSelectPanel = class("GoldenSpyBuffSelectPanel", BasePanel)
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
GoldenSpyBuffSelectPanel._bIsMainPanel = false
GoldenSpyBuffSelectPanel._sSortingLayerName = AllEnum.SortingLayerName.UI
GoldenSpyBuffSelectPanel._sUIResRootPath = "UI_Activity/"
GoldenSpyBuffSelectPanel._tbDefine = {
{
sPrefabPath = "_400017/GoldenSpyBuffSelectPanel.prefab",
sCtrlName = "Game.UI.Activity.GoldenSpy.GoldenSpyBuffSelectCtrl"
}
}
function GoldenSpyBuffSelectPanel:Awake()
GamepadUIManager.EnableGamepadUI("GoldenSpyBuffSelect", {})
self.nTipsPanelId = PanelId.GoldenSpyBuffTipsPanel_400017
end
function GoldenSpyBuffSelectPanel:OnEnable()
end
function GoldenSpyBuffSelectPanel:OnAfterEnter()
end
function GoldenSpyBuffSelectPanel:OnDisable()
end
function GoldenSpyBuffSelectPanel:OnDestroy()
GamepadUIManager.DisableGamepadUI("GoldenSpyBuffSelect")
end
function GoldenSpyBuffSelectPanel:OnRelease()
end
return GoldenSpyBuffSelectPanel
@@ -0,0 +1,24 @@
local GoldenSpyBuffTipsPanel = class("GoldenSpyBuffTipsPanel", BasePanel)
GoldenSpyBuffTipsPanel._bIsMainPanel = false
GoldenSpyBuffTipsPanel._bAddToBackHistory = false
GoldenSpyBuffTipsPanel._sSortingLayerName = AllEnum.SortingLayerName.UI_Top
GoldenSpyBuffTipsPanel._sUIResRootPath = "UI_Activity/"
GoldenSpyBuffTipsPanel._tbDefine = {
{
sPrefabPath = "_400017/GoldenSpyBuffTips.prefab",
sCtrlName = "Game.UI.Activity.GoldenSpy.GoldenSpyBuffTipsCtrl"
}
}
function GoldenSpyBuffTipsPanel:Awake()
end
function GoldenSpyBuffTipsPanel:OnEnable()
end
function GoldenSpyBuffTipsPanel:OnAfterEnter()
end
function GoldenSpyBuffTipsPanel:OnDisable()
end
function GoldenSpyBuffTipsPanel:OnDestroy()
end
function GoldenSpyBuffTipsPanel:OnRelease()
end
return GoldenSpyBuffTipsPanel
@@ -0,0 +1,31 @@
local GoldenSpyLevelPanel = class("GoldenSpyLevelPanel", BasePanel)
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
GoldenSpyLevelPanel._bIsMainPanel = true
GoldenSpyLevelPanel._sSortingLayerName = AllEnum.SortingLayerName.UI
GoldenSpyLevelPanel._sUIResRootPath = "UI_Activity/"
GoldenSpyLevelPanel._tbDefine = {
{
sPrefabPath = "_400017/GoldenSpyPanel.prefab",
sCtrlName = "Game.UI.Activity.GoldenSpy.GoldenSpyLevelCtrl"
}
}
function GoldenSpyLevelPanel:Awake()
PlayerData.Base:SetSkipNewDayWindow(true)
self.bFirstInCtrl = true
self.nTipsPanelId = PanelId.GoldenSpyBuffTipsPanel_400017
self.nResultPanelId = PanelId.GoldenSpyResultPanel_400017
self.nBuffSelectPanelId = PanelId.GoldenSpyBuffSelectPanel_400017
end
function GoldenSpyLevelPanel:OnEnable()
end
function GoldenSpyLevelPanel:OnAfterEnter()
end
function GoldenSpyLevelPanel:OnDisable()
end
function GoldenSpyLevelPanel:OnDestroy()
PlayerData.Base:SetSkipNewDayWindow(false)
PlayerData.Base:OnBackToMainMenuModule()
end
function GoldenSpyLevelPanel:OnRelease()
end
return GoldenSpyLevelPanel
@@ -0,0 +1,28 @@
local GoldenSpyLevelSelectPanel = class("GoldenSpyLevelSelectPanel", BasePanel)
GoldenSpyLevelSelectPanel._bIsMainPanel = true
GoldenSpyLevelSelectPanel._bAddToBackHistory = true
GoldenSpyLevelSelectPanel._sSortingLayerName = AllEnum.SortingLayerName.UI
GoldenSpyLevelSelectPanel._sUIResRootPath = "UI_Activity/"
GoldenSpyLevelSelectPanel._tbDefine = {
{
sPrefabPath = "_400017/GoldenSpyLevelSelectPanel.prefab",
sCtrlName = "Game.UI.Activity.GoldenSpy.GoldenSpyLevelSelectCtrl"
}
}
local PanelTab = {Group = 1, Level = 2}
function GoldenSpyLevelSelectPanel:Awake()
self.nPanelTab = PanelTab.Group
self.nSelectGroupId = 0
self.nSelectLevelId = 0
end
function GoldenSpyLevelSelectPanel:OnEnable()
end
function GoldenSpyLevelSelectPanel:OnAfterEnter()
end
function GoldenSpyLevelSelectPanel:OnDisable()
end
function GoldenSpyLevelSelectPanel:OnDestroy()
end
function GoldenSpyLevelSelectPanel:OnRelease()
end
return GoldenSpyLevelSelectPanel
@@ -0,0 +1,24 @@
local GoldenSpyResultPanel = class("GoldenSpyResultPanel", BasePanel)
GoldenSpyResultPanel._bIsMainPanel = true
GoldenSpyResultPanel._sSortingLayerName = AllEnum.SortingLayerName.UI
GoldenSpyResultPanel._nSnapshotPrePanel = 1
GoldenSpyResultPanel._sUIResRootPath = "UI_Activity/"
GoldenSpyResultPanel._tbDefine = {
{
sPrefabPath = "_400017/GoldenSpyResultPanel.prefab",
sCtrlName = "Game.UI.Activity.GoldenSpy.GoldenSpyResultCtrl"
}
}
function GoldenSpyResultPanel:Awake()
end
function GoldenSpyResultPanel:OnEnable()
end
function GoldenSpyResultPanel:OnAfterEnter()
end
function GoldenSpyResultPanel:OnDisable()
end
function GoldenSpyResultPanel:OnDestroy()
end
function GoldenSpyResultPanel:OnRelease()
end
return GoldenSpyResultPanel
@@ -23,6 +23,9 @@ function GoldenSpyBaseTrap:SetData(data, floorCtrl)
self.nTrapId = data.nTrapId
self.floorCtrl = floorCtrl
self.trapCfg = ConfigTable.GetData("GoldenSpyObstacle", self.nTrapId)
if self.trapCfg == nil then
return
end
self:InitData()
end
function GoldenSpyBaseTrap:InitData()
@@ -52,26 +52,26 @@ function GoldenSpyBoomItem:GetBoomArea()
return boomArea
end
function GoldenSpyBoomItem:Boom(callback)
local boomArea = self:GetBoomArea()
local center = boomArea.center
local radius = boomArea.radius
local toHit = {}
for _, v in ipairs(self.floorCtrl.tbItem) do
if v.Ctrl and v.Ctrl ~= self then
local hitArea = v.Ctrl:GetHitArea()
if hitArea and hitArea.center then
local offset = hitArea.center - center
local dist = offset.x * offset.x + offset.y * offset.y
if dist <= radius * radius then
table.insert(toHit, v.Ctrl)
end
end
end
end
local boom = function()
if callback then
callback()
end
local boomArea = self:GetBoomArea()
local center = boomArea.center
local radius = boomArea.radius
local toHit = {}
for _, v in ipairs(self.floorCtrl.tbItem) do
if v.Ctrl and v.Ctrl ~= self then
local hitArea = v.Ctrl:GetHitArea()
if hitArea and hitArea.center then
local offset = hitArea.center - center
local dist = offset.x * offset.x + offset.y * offset.y
if dist <= radius * radius then
table.insert(toHit, v.Ctrl)
end
end
end
end
for _, ctrl in ipairs(toHit) do
if ctrl.gameObject ~= nil and ctrl.gameObject.activeSelf ~= false then
ctrl:OnSkill_Boom(function()
@@ -93,6 +93,7 @@ function GoldenSpyBoomItem:Boom(callback)
end, true, true, true)
table.insert(self.tbTimer, timer2)
WwiseAudioMgr:PostEvent("Mode_steal_boom_big")
return toHit
end
function GoldenSpyBoomItem:OnSkill_Boom(callback)
if callback then
@@ -62,6 +62,8 @@ function GoldenSpyCompanionItem:Init()
self.vVisionPoint = Vector3(visionPoint.x, visionPoint.y, 0)
self.bDirection = self.vEndPoint.x > self.vStartPoint.x
self.bDestination = false
self.trParent = self.gameObject.transform.parent
self.bFrozen = false
end
function GoldenSpyCompanionItem:InitData()
self.nVisionAngle = self.itemCfg.Params[2] or VisionAngle
@@ -379,8 +381,8 @@ function GoldenSpyCompanionItem:_CheckVision()
local removeItem
local hitArea = item.Ctrl:GetHitArea()
if hitArea and self:_HitAreaInSector(hitArea, vx, vy, forwardAngle, halfAngle, radius) then
if item.Ctrl == self.floorCtrl.catchedItem then
goto lbl_176
if table.indexof(self.floorCtrl.tbCatchedItem, item.Ctrl) > 0 then
goto lbl_179
end
if item.Ctrl:GetItemCfg().ItemType == GameEnum.GoldenSpyItem.Boom then
item.Ctrl:Boom(nil)
@@ -410,7 +412,7 @@ function GoldenSpyCompanionItem:_CheckVision()
end
tbRemoveItems = {}
end
::lbl_176::
::lbl_179::
end
end
function GoldenSpyCompanionItem:_StartVisionCheck()
@@ -202,44 +202,54 @@ function GoldenSpyFloorCtrl:ResumeHookSwing()
hookCtrl:ResumeSwing(true)
end
end
function GoldenSpyFloorCtrl:Shoot(nSpeed, nRadius, nFactor, onRetractComplete, onCatched, onCatchedComplete)
function GoldenSpyFloorCtrl:Shoot(nSpeed, nRadius, nFactor, nMinSpeed, onRetractComplete, onCatched, onCatchedComplete)
local hookCtrl = self._mapNode.HookCtrl
if not hookCtrl or not hookCtrl:IsSwinging() then
return
end
hookCtrl:PauseSwing()
self.bInvincible = false
hookCtrl:StartExtend(nSpeed, nRadius, nFactor, function()
hookCtrl:StartExtend(nSpeed, nRadius, nFactor, nMinSpeed, function()
if onRetractComplete then
onRetractComplete()
end
end, function(itemCtrl)
end, function(tbItemCtrl)
if onCatched then
onCatched(itemCtrl)
onCatched(tbItemCtrl)
end
if itemCtrl:GetItemCfg().ItemType == GameEnum.GoldenSpyItem.Boom then
self:RemoveItem(itemCtrl)
return
end
self.catchedItem = itemCtrl
end, function(itemCtrl)
if itemCtrl == nil or itemCtrl:GetItemCfg().ItemType == GameEnum.GoldenSpyItem.Boom then
return
end
for i = #self.tbItem, 1, -1 do
if self.tbItem[i].Ctrl == itemCtrl then
table.insert(self.tbNeedRemoveItem, self.tbItem[i])
table.remove(self.tbItem, i)
break
for _, itemCtrl in ipairs(tbItemCtrl) do
if itemCtrl:GetItemCfg().ItemType == GameEnum.GoldenSpyItem.Boom then
self:RemoveItem(itemCtrl)
end
end
self.catchedItem = nil
self.tbCatchedItem = tbItemCtrl
end, function(tbItemCtrl)
for _, itemCtrl in ipairs(tbItemCtrl) do
if itemCtrl:GetItemCfg().ItemType == GameEnum.GoldenSpyItem.Boom then
self:RemoveItem(itemCtrl)
else
for i = #self.tbItem, 1, -1 do
if self.tbItem[i].Ctrl == itemCtrl then
table.insert(self.tbNeedRemoveItem, self.tbItem[i])
table.remove(self.tbItem, i)
break
end
end
end
end
self.tbCatchedItem = nil
self.bInvincible = false
if onCatchedComplete then
onCatchedComplete(itemCtrl)
onCatchedComplete(tbItemCtrl)
end
end)
end
function GoldenSpyFloorCtrl:SetHookType(nHookType, nFishingHookRadius)
local hookCtrl = self._mapNode.HookCtrl
if hookCtrl and hookCtrl.SetHookType then
hookCtrl:SetHookType(nHookType, nFishingHookRadius)
end
end
function GoldenSpyFloorCtrl:RemoveItem(itemCtrl, bForce)
local bDelSuccess = false
local itemId = itemCtrl:GetItemCfg().Id
@@ -255,15 +265,28 @@ function GoldenSpyFloorCtrl:RemoveItem(itemCtrl, bForce)
self.levelCtrl.GoldenSpyFloorData:DeleteItem(itemId, bForce)
end
end
function GoldenSpyFloorCtrl:CheckCanDropItem()
local hookCtrl = self._mapNode.HookCtrl
if hookCtrl == nil then
return false
end
local hookType = hookCtrl:GetHookType()
if hookType == AllEnum.GoldenSpyHookType.FishingHook then
return false
end
return true
end
function GoldenSpyFloorCtrl:DropItem()
if self.catchedItem == nil then
if self.tbCatchedItem == nil then
return
end
local hookCtrl = self._mapNode.HookCtrl
hookCtrl:DropItem()
self.levelCtrl:DropItem()
self.catchedItem.gameObject.transform.parent = self.catchedItem:GetParent()
self.catchedItem = nil
for _, itemCtrl in ipairs(self.tbCatchedItem) do
itemCtrl.gameObject.transform.parent = itemCtrl:GetParent()
end
self.tbCatchedItem = nil
end
function GoldenSpyFloorCtrl:SetHookIsInvincible(bInvincible)
self.bInvincible = bInvincible
@@ -271,13 +294,6 @@ end
function GoldenSpyFloorCtrl:GetHookIsInvincible()
return self.bInvincible
end
function GoldenSpyFloorCtrl:GetHookHitArea()
local hookCtrl = self._mapNode.HookCtrl
if hookCtrl and hookCtrl.GetHookHitArea then
return hookCtrl:GetHookHitArea()
end
return nil
end
function GoldenSpyFloorCtrl:SubTime(nTime)
self.levelCtrl:SubTime(nTime)
end
@@ -295,19 +311,28 @@ function GoldenSpyFloorCtrl:StartRetract(finishCallback)
end)
end
end
function GoldenSpyFloorCtrl:CheckCanChangeHook()
local hookCtrl = self._mapNode.HookCtrl
if not hookCtrl or not hookCtrl:IsSwinging() then
return false
end
return true
end
function GoldenSpyFloorCtrl:StartBoom(useCallback, finishCallback)
if self.catchedItem == nil then
if self.tbCatchedItem == nil or #self.tbCatchedItem <= 0 then
return false
end
if useCallback then
useCallback()
end
self.catchedItem:OnSkill_Boom(function()
self:RemoveItem(self.catchedItem)
self.catchedItem = nil
self._mapNode.HookCtrl:DropItem()
self:StartRetract(finishCallback)
end)
for _, itemCtrl in ipairs(self.tbCatchedItem) do
itemCtrl:OnSkill_Boom(function()
self:RemoveItem(itemCtrl)
end)
end
self.tbCatchedItem = nil
self._mapNode.HookCtrl:DropItem()
self:StartRetract(finishCallback)
return true
end
function GoldenSpyFloorCtrl:CheckHasFrozenItem()
@@ -324,7 +349,7 @@ function GoldenSpyFloorCtrl:CheckHasFrozenItem()
end
function GoldenSpyFloorCtrl:StartFrozen()
for _, v in ipairs(self.tbItem) do
if v.Ctrl ~= nil and v.Ctrl ~= self.catchedItem then
if v.Ctrl ~= nil and (self.tbCatchedItem == nil or self.tbCatchedItem ~= nil and table.indexof(self.tbCatchedItem, v.Ctrl) <= 0) then
v.Ctrl:OnSkill_Frozen()
end
end
@@ -336,7 +361,7 @@ function GoldenSpyFloorCtrl:StartFrozen()
end
function GoldenSpyFloorCtrl:StopFrozen()
for _, v in ipairs(self.tbItem) do
if v.Ctrl ~= nil and v.Ctrl ~= self.catchedItem then
if v.Ctrl ~= nil and (self.tbCatchedItem == nil or self.tbCatchedItem ~= nil and table.indexof(self.tbCatchedItem, v.Ctrl) <= 0) then
v.Ctrl:OnSkill_Frozen_Resume()
end
end
@@ -34,6 +34,9 @@ function GoldenSpyFloorData:DeleteItem(itemId, bForce)
self.tbItem[itemId] = nil
end
local itemCfg = ConfigTable.GetData("GoldenSpyItem", itemId)
if itemCfg == nil then
return
end
if itemCfg.ItemType == GameEnum.GoldenSpyItem.BuffItem and not bForce then
return
end
@@ -1,5 +1,18 @@
local GoldenSpyHookCtrl = class("GoldenSpyHookCtrl", BaseCtrl)
local LoopType = CS.DG.Tweening.LoopType
local SpineManager = require("Game.Spine.SpineManager")
local MaxOffset = 20
local MinOffset = 10
local OffsetDir = {
[1] = Vector2(0, 0),
[2] = Vector2(1, 0),
[3] = Vector2(1, 1),
[4] = Vector2(0, 1),
[5] = Vector2(-1, 1),
[6] = Vector2(-1, 0),
[7] = Vector2(-1, -1),
[8] = Vector2(0, -1),
[9] = Vector2(1, -1)
}
GoldenSpyHookCtrl._mapNodeConfig = {
trHookPivot = {
sNodeName = "HookPivot",
@@ -21,9 +34,13 @@ GoldenSpyHookCtrl._mapNodeConfig = {
sNodeName = "itemParent",
sComponentName = "RectTransform"
},
hookRoot = {},
hook_open = {},
hook_normal = {},
hook_catched = {}
hook_catched = {},
nethookRoot = {},
nethook_normal = {},
nethook_catched = {}
}
GoldenSpyHookCtrl.DefaultLineSize = 100
GoldenSpyHookCtrl.DefaultHookPosY = -90
@@ -43,6 +60,9 @@ function GoldenSpyHookCtrl:Init(levelId, floorId, floorCtrl, levelData, floorDat
self.floorData = floorData
self:DestroyItemInHook()
local levelCfg = ConfigTable.GetData("GoldenSpyLevel", self.levelId)
if levelCfg == nil then
return
end
local configCfg = ConfigTable.GetData("GoldenSpyConfig", levelCfg.ConfigId)
self.HOOK_SWING_LEFT_ANGLE = -configCfg.MaxAngle
self.HOOK_SWING_RIGHT_ANGLE = configCfg.MaxAngle
@@ -56,13 +76,57 @@ function GoldenSpyHookCtrl:Init(levelId, floorId, floorCtrl, levelData, floorDat
self._onRetractComplete = nil
self._swingGoingRight = true
self._swingAtRight = false
self.curCatchedItem = nil
self.tbCatchedItem = {}
self._mapNode.trHookPivot.localEulerAngles = Vector3(0, 0, 0)
self._mapNode.trHookEnd.localPosition = Vector3(0, self.DefaultHookPosY, 0)
self:ApplyHookLength()
self._mapNode.hook_open:SetActive(false)
self._mapNode.hook_normal:SetActive(true)
self._mapNode.hook_catched:SetActive(false)
if self.tbTimers ~= nil then
for _, v in ipairs(self.tbTimers) do
if v ~= nil then
v:Cancel()
end
end
end
self.tbTimers = {}
if levelCfg.LevelType == GameEnum.GoldenSpyLevelType.FishingHook then
self:SetHookType(AllEnum.GoldenSpyHookType.FishingHook, tonumber(levelCfg.Param1))
else
self:SetHookType(AllEnum.GoldenSpyHookType.Normal, 0)
end
SpineManager.Resume(self._mapNode.nethook_catched)
if self._hookType == AllEnum.GoldenSpyHookType.Normal then
self._mapNode.hookRoot:SetActive(true)
self._mapNode.nethookRoot:SetActive(false)
self._mapNode.hook_open:SetActive(false)
self._mapNode.hook_normal:SetActive(true)
self._mapNode.hook_catched:SetActive(false)
elseif self._hookType == AllEnum.GoldenSpyHookType.FishingHook then
self._mapNode.hookRoot:SetActive(false)
self._mapNode.nethookRoot:SetActive(true)
self._mapNode.nethook_normal:SetActive(true)
self._mapNode.nethook_catched:SetActive(false)
end
end
function GoldenSpyHookCtrl:SetHookType(hookType, fishingHookRadius)
self._hookType = hookType
self._fishingHookRadius = fishingHookRadius or 0
if self._hookType == 0 or self._hookState == HookStage.STATE_SWINGING then
if self._hookType == AllEnum.GoldenSpyHookType.Normal then
self._mapNode.hookRoot:SetActive(true)
self._mapNode.nethookRoot:SetActive(false)
self._mapNode.hook_open:SetActive(false)
self._mapNode.hook_normal:SetActive(true)
self._mapNode.hook_catched:SetActive(false)
elseif self._hookType == AllEnum.GoldenSpyHookType.FishingHook then
self._mapNode.hookRoot:SetActive(false)
self._mapNode.nethookRoot:SetActive(true)
self._mapNode.nethook_normal:SetActive(true)
self._mapNode.nethook_catched:SetActive(false)
end
end
end
function GoldenSpyHookCtrl:GetHookType()
return self._hookType
end
function GoldenSpyHookCtrl:DestroyItemInHook()
local itemParent = self._mapNode.itemParent
@@ -94,9 +158,18 @@ function GoldenSpyHookCtrl:_DoSwingPhase(fromAngle, toAngle, onPhaseComplete)
if pivot == nil or onPhaseComplete == nil then
return
end
self._mapNode.hook_open:SetActive(false)
self._mapNode.hook_normal:SetActive(true)
self._mapNode.hook_catched:SetActive(false)
if self._hookType == AllEnum.GoldenSpyHookType.Normal then
self._mapNode.hookRoot:SetActive(true)
self._mapNode.nethookRoot:SetActive(false)
self._mapNode.hook_open:SetActive(false)
self._mapNode.hook_normal:SetActive(true)
self._mapNode.hook_catched:SetActive(false)
elseif self._hookType == AllEnum.GoldenSpyHookType.FishingHook then
self._mapNode.hookRoot:SetActive(false)
self._mapNode.nethookRoot:SetActive(true)
self._mapNode.nethook_normal:SetActive(true)
self._mapNode.nethook_catched:SetActive(false)
end
self._swingGoingRight = toAngle == self.HOOK_SWING_RIGHT_ANGLE
pivot.localEulerAngles = Vector3(0, 0, fromAngle)
local realAngle = math.abs(toAngle - fromAngle)
@@ -137,9 +210,18 @@ function GoldenSpyHookCtrl:StartSwing(leftAngle, rightAngle)
self:StopSwing()
self:StopExtend()
self:StopRetract()
self._mapNode.hook_open:SetActive(false)
self._mapNode.hook_normal:SetActive(true)
self._mapNode.hook_catched:SetActive(false)
if self._hookType == AllEnum.GoldenSpyHookType.Normal then
self._mapNode.hookRoot:SetActive(true)
self._mapNode.nethookRoot:SetActive(false)
self._mapNode.hook_open:SetActive(false)
self._mapNode.hook_normal:SetActive(true)
self._mapNode.hook_catched:SetActive(false)
elseif self._hookType == AllEnum.GoldenSpyHookType.FishingHook then
self._mapNode.hookRoot:SetActive(false)
self._mapNode.nethookRoot:SetActive(true)
self._mapNode.nethook_normal:SetActive(true)
self._mapNode.nethook_catched:SetActive(false)
end
local pivot = self._mapNode.trHookPivot
if pivot == nil then
return
@@ -211,7 +293,7 @@ function GoldenSpyHookCtrl:StopSwing()
self._swingTweener = nil
end
end
function GoldenSpyHookCtrl:StartExtend(speed, radius, factor, onComplete, onCatched, onCatchedComplete)
function GoldenSpyHookCtrl:StartExtend(speed, radius, factor, nMinSpeed, onComplete, onCatched, onCatchedComplete)
self:StopSwing()
self:StopExtend()
self:StopRetract()
@@ -247,11 +329,13 @@ function GoldenSpyHookCtrl:StartExtend(speed, radius, factor, onComplete, onCatc
for _, item in ipairs(items) do
local worldPos = self:GetHookEndWorldPosition()
if self:CheckCatchIntersect(worldPos, radius, item.Ctrl) then
if onCatched then
onCatched(item.Ctrl)
end
local itemCfg = item.Ctrl:GetItemCfg()
if itemCfg.ItemType == GameEnum.GoldenSpyItem.Boom then
if onCatched then
local tbCatchItems = {}
table.insert(tbCatchItems, item.Ctrl)
onCatched(tbCatchItems)
end
item.Ctrl:Boom(nil)
self:StartRetract(speed, function()
self:ResumeSwing(true)
@@ -261,35 +345,135 @@ function GoldenSpyHookCtrl:StartExtend(speed, radius, factor, onComplete, onCatc
end)
return
end
self.curCatchedItem = item.Ctrl
if itemCfg.ItemType == GameEnum.GoldenSpyItem.Companion or itemCfg.ItemType == GameEnum.GoldenSpyItem.Patrol then
item.Ctrl:onCatch()
end
self.curCatchedItem.gameObject.transform:SetParent(self._mapNode.itemParent)
self.curCatchedItem.gameObject.transform.localPosition = Vector3.zero
local itemNormalWeight = item.Ctrl:GetWeight()
for _, v in ipairs(self:GetBuffData()) do
local buffCfg = ConfigTable.GetData("GoldenSpyBuffCard", v.buffId)
if buffCfg ~= nil and buffCfg.EffectType == GameEnum.GoldenSpyBuffEffect.ReduceItemWeight and self.levelData:CheckBuffActive(v) then
itemNormalWeight = itemNormalWeight - buffCfg.Params[2]
if self._hookType == AllEnum.GoldenSpyHookType.Normal then
do
local tbCatchItems = {}
table.insert(tbCatchItems, item.Ctrl)
if onCatched then
onCatched(tbCatchItems)
end
self.tbCatchedItem = tbCatchItems
if itemCfg.ItemType == GameEnum.GoldenSpyItem.Companion or itemCfg.ItemType == GameEnum.GoldenSpyItem.Patrol then
item.Ctrl:onCatch()
end
for _, item in ipairs(self.tbCatchedItem) do
item.gameObject.transform:SetParent(self._mapNode.itemParent)
item.gameObject.transform.localPosition = Vector3.zero
end
local itemNormalWeight = item.Ctrl:GetWeight()
for _, v in ipairs(self:GetBuffData()) do
local buffCfg = ConfigTable.GetData("GoldenSpyBuffCard", v.buffId)
if buffCfg ~= nil and buffCfg.EffectType == GameEnum.GoldenSpyBuffEffect.ReduceItemWeight and self.levelData:CheckBuffActive(v) then
itemNormalWeight = itemNormalWeight - buffCfg.Params[2]
end
end
itemNormalWeight = math.max(0, itemNormalWeight)
local nbackSpeed = (speed - nMinSpeed) / (1 + -factor / 100 * itemNormalWeight) + nMinSpeed
if NovaAPI.IsEditorPlatform() then
print("GoldenSpyLevelCtrl:backSpeed=", nbackSpeed)
end
nbackSpeed = math.max(nMinSpeed, nbackSpeed)
self:StartRetract(nbackSpeed, function()
self._mapNode.hookRoot:SetActive(true)
self._mapNode.nethookRoot:SetActive(false)
self._mapNode.hook_open:SetActive(false)
self._mapNode.hook_normal:SetActive(true)
self._mapNode.hook_catched:SetActive(false)
if onCatchedComplete then
onCatchedComplete(self.tbCatchedItem)
end
for _, item in ipairs(self.tbCatchedItem) do
item.gameObject:SetActive(false)
end
self.tbCatchedItem = {}
end)
self:StopExtend()
end
break
end
itemNormalWeight = math.max(0, itemNormalWeight)
local nbackSpeed = speed + factor * itemNormalWeight
if NovaAPI.IsEditorPlatform() then
print("GoldenSpyLevelCtrl:backSpeed=", nbackSpeed)
end
self:StartRetract(nbackSpeed, function()
self._mapNode.hook_open:SetActive(false)
self._mapNode.hook_normal:SetActive(true)
self._mapNode.hook_catched:SetActive(false)
if onCatchedComplete then
onCatchedComplete(self.curCatchedItem)
if self._hookType == AllEnum.GoldenSpyHookType.FishingHook then
self._mapNode.hookRoot:SetActive(false)
self._mapNode.nethookRoot:SetActive(true)
self._mapNode.nethook_normal:SetActive(false)
self._mapNode.nethook_catched:SetActive(true)
SpineManager.PlayAnim(self._mapNode.nethook_catched, "open", false)
local tbCatchItems = self:GetCatchItems()
local tbBoomItems = {}
for _, item in ipairs(tbCatchItems) do
local itemCfg = item:GetItemCfg()
if itemCfg.ItemType == GameEnum.GoldenSpyItem.Boom then
local tbRemoveBoomItems = item:Boom(nil)
for _, v in ipairs(tbRemoveBoomItems) do
table.insert(tbBoomItems, v)
end
self.floorCtrl:RemoveItem(item)
end
end
self.curCatchedItem.gameObject:SetActive(false)
self.curCatchedItem = nil
end)
self:StopExtend()
tbCatchItems = self:GetCatchItems()
for _, item in ipairs(tbBoomItems) do
if 0 < table.indexof(tbCatchItems, item) then
table.remove(tbCatchItems, table.indexof(tbCatchItems, item))
end
end
if onCatched and 0 < #tbCatchItems then
onCatched(tbCatchItems)
end
local bIsBig = false
for _, item in ipairs(tbCatchItems) do
local itemCfg = item:GetItemCfg()
if itemCfg.IsBig then
bIsBig = true
break
end
end
local timer = self:AddTimer(1, 0.23, function()
local nTotalWeight = 0
for index, itemCtrl in ipairs(tbCatchItems) do
local itemCfg = itemCtrl:GetItemCfg()
if itemCfg.ItemType == GameEnum.GoldenSpyItem.Companion or itemCfg.ItemType == GameEnum.GoldenSpyItem.Patrol then
itemCtrl:onCatch()
end
local nIndex = (index - 1) % 9 + 1
local vOffset = OffsetDir[nIndex]
itemCtrl.gameObject.transform:SetParent(self._mapNode.itemParent)
itemCtrl.gameObject.transform.localPosition = Vector3(vOffset.x * math.random(MinOffset, MaxOffset), vOffset.y * math.random(MinOffset, MaxOffset) - 150, 0)
local itemNormalWeight = itemCtrl:GetWeight()
for _, v in ipairs(self:GetBuffData()) do
local buffCfg = ConfigTable.GetData("GoldenSpyBuffCard", v.buffId)
if buffCfg ~= nil and buffCfg.EffectType == GameEnum.GoldenSpyBuffEffect.ReduceItemWeight and self.levelData:CheckBuffActive(v) then
itemNormalWeight = itemNormalWeight - buffCfg.Params[2]
end
end
nTotalWeight = nTotalWeight + itemNormalWeight
end
local nbackSpeed = (speed - nMinSpeed) / (1 + -factor / 100 * nTotalWeight) + nMinSpeed
if NovaAPI.IsEditorPlatform() then
print("GoldenSpyLevelCtrl:backSpeed=", nbackSpeed)
end
local sSpineAnim = "catched2"
if bIsBig then
sSpineAnim = "catched1"
end
SpineManager.PlayAnim(self._mapNode.nethook_catched, sSpineAnim, false)
local timer2 = self:AddTimer(1, 0.16, function()
self:StartRetract(nbackSpeed, function()
self._mapNode.hookRoot:SetActive(false)
self._mapNode.nethookRoot:SetActive(true)
self._mapNode.nethook_normal:SetActive(true)
self._mapNode.nethook_catched:SetActive(false)
if onCatchedComplete then
onCatchedComplete(tbCatchItems)
end
for _, item in ipairs(tbCatchItems) do
item.gameObject:SetActive(false)
end
end, true)
end)
table.insert(self.tbTimers, timer2)
end, true, true, true)
table.insert(self.tbTimers, timer)
self:StopExtend()
end
break
end
end
@@ -299,9 +483,9 @@ function GoldenSpyHookCtrl:StartExtend(speed, radius, factor, onComplete, onCatc
self:StartRetract(speed, function()
self:ResumeSwing(true)
if onCatchedComplete then
onCatchedComplete(self.curCatchedItem)
onCatchedComplete(self.tbCatchedItem)
end
self.curCatchedItem = nil
self.tbCatchedItem = {}
end)
if self._onExtendComplete then
self._onExtendComplete()
@@ -309,10 +493,23 @@ function GoldenSpyHookCtrl:StartExtend(speed, radius, factor, onComplete, onCatc
end
end)
end
function GoldenSpyHookCtrl:GetCatchItems()
local tbCatchItems = {}
local items = self.floorCtrl.tbItem
for _, item in ipairs(items) do
if self:CheckCatchIntersect(self:GetHookEndWorldPosition(), self._fishingHookRadius, item.Ctrl) then
table.insert(tbCatchItems, item.Ctrl)
end
end
return tbCatchItems
end
function GoldenSpyHookCtrl:GetHookEndWorldPosition()
local rootTr = self.gameObject.transform
local trEnd = self._mapNode.trHookEnd
local localPt = rootTr:InverseTransformPoint(trEnd.position)
if self.nHookType == AllEnum.GoldenSpyHookType.FishingHook then
localPt.y = localPt.y - 100
end
return Vector3(localPt.x, localPt.y, 0)
end
function GoldenSpyHookCtrl:StopExtend()
@@ -339,7 +536,8 @@ function GoldenSpyHookCtrl:ResumeExtend()
if self._hookState == HookStage.STATE_EXTENDING then
end
end
function GoldenSpyHookCtrl:StartRetract(speed, onComplete)
function GoldenSpyHookCtrl:StartRetract(speed, onComplete, bIsCatched)
bIsCatched = bIsCatched or false
self:StopSwing()
self:StopExtend()
self:StopRetract()
@@ -350,9 +548,18 @@ function GoldenSpyHookCtrl:StartRetract(speed, onComplete)
end
return
end
self._mapNode.hook_open:SetActive(false)
self._mapNode.hook_normal:SetActive(false)
self._mapNode.hook_catched:SetActive(true)
if self._hookType == AllEnum.GoldenSpyHookType.Normal then
self._mapNode.hookRoot:SetActive(true)
self._mapNode.nethookRoot:SetActive(false)
self._mapNode.hook_open:SetActive(false)
self._mapNode.hook_normal:SetActive(false)
self._mapNode.hook_catched:SetActive(true)
elseif self._hookType == AllEnum.GoldenSpyHookType.FishingHook then
self._mapNode.hookRoot:SetActive(false)
self._mapNode.nethookRoot:SetActive(true)
self._mapNode.nethook_normal:SetActive(not bIsCatched)
self._mapNode.nethook_catched:SetActive(bIsCatched)
end
self._onRetractComplete = onComplete
self._hookState = HookStage.STATE_RETRACTING
local fromLen = self._hookLength
@@ -552,7 +759,7 @@ function GoldenSpyHookCtrl:IsRetracting()
return self._hookState == HookStage.STATE_RETRACTING
end
function GoldenSpyHookCtrl:DropItem()
self.curCatchedItem = nil
self.tbCatchedItem = {}
end
function GoldenSpyHookCtrl:OnDestroy()
self:StopSwing()
@@ -572,6 +779,12 @@ function GoldenSpyHookCtrl:Pause()
if self:IsRetracting() then
self:PauseRetract()
end
for _, v in ipairs(self.tbTimers) do
if v ~= nil then
v:Pause(true)
end
end
SpineManager.Pause(self._mapNode.nethook_catched)
end
function GoldenSpyHookCtrl:Continue()
if self:IsSwinging() then
@@ -583,6 +796,12 @@ function GoldenSpyHookCtrl:Continue()
if self:IsRetracting() then
self:ResumeRetract()
end
for _, v in ipairs(self.tbTimers) do
if v ~= nil then
v:Pause(false)
end
end
SpineManager.Resume(self._mapNode.nethook_catched)
end
function GoldenSpyHookCtrl:Exit()
self:StopSwing()
@@ -166,9 +166,11 @@ function GoldenSpyLaserTrap:_OnTriggerCheck()
local localPos = self.floorCtrl:GetHookEndPosInRectLocal(self._mapNode.TriggerArea)
local hookRadius = self.floorCtrl:GetHookRadius()
if self:_IsHookInTriggerArea(localPos, hookRadius) and self.bTrigger then
self.floorCtrl:DropItem()
if self.floorCtrl:CheckCanDropItem() then
self.floorCtrl:DropItem()
self.floorCtrl:DoStartRetract()
end
WwiseAudioMgr:PostEvent("Mode_steal_error")
self.floorCtrl:DoStartRetract()
self.floorCtrl:SubTime(self.SUBTIME)
self.bTrigger = false
end
@@ -47,17 +47,17 @@ GoldenSpyLevelCtrl._mapNodeConfig = {
callback = "OnBtnClick_Hook",
sAction = "GoldenSpy_Hook"
},
btn_Boom = {
img_hook = {sComponentName = "Image"},
btn_Skill1 = {
sComponentName = "NaviButton",
callback = "OnBtnClick_Boom",
callback = "OnBtnClick_Skill1",
sAction = "GoldenSpy_Boom"
},
btn_Frozen = {
btn_Skill2 = {
sComponentName = "NaviButton",
callback = "OnBtnClick_Frozen",
callback = "OnBtnClick_Skill2",
sAction = "GoldenSpy_Frozen"
},
img_frozenCD = {sComponentName = "Image"},
btn_ToolBox = {
sComponentName = "NaviButton",
callback = "OnBtnClick_ToolBox",
@@ -182,15 +182,24 @@ function GoldenSpyLevelCtrl:Init()
self.nLevelType = self.levelCfg.LevelType
if self.nLevelType == GameEnum.GoldenSpyLevelType.Normal then
self._mapNode.go_Task:SetActive(false)
self._mapNode.floorCtrl:SetHookType(AllEnum.GoldenSpyHookType.Normal, 0)
self:SetPngSprite(self._mapNode.img_hook, string.format(SpritePath, self.nActId) .. "btn_goldenspy_game_01")
elseif self.nLevelType == GameEnum.GoldenSpyLevelType.Quest then
self._mapNode.go_Task:SetActive(true)
self._mapNode.floorCtrl:SetHookType(AllEnum.GoldenSpyHookType.Normal, 0)
self:SetPngSprite(self._mapNode.img_hook, string.format(SpritePath, self.nActId) .. "btn_goldenspy_game_01")
elseif self.nLevelType == GameEnum.GoldenSpyLevelType.Random then
self._mapNode.go_Task:SetActive(true)
self._mapNode.floorCtrl:SetHookType(AllEnum.GoldenSpyHookType.Normal, 0)
self:SetPngSprite(self._mapNode.img_hook, string.format(SpritePath, self.nActId) .. "btn_goldenspy_game_01")
elseif self.nLevelType == GameEnum.GoldenSpyLevelType.FishingHook then
self._mapNode.go_Task:SetActive(false)
self._mapNode.floorCtrl:SetHookType(AllEnum.GoldenSpyHookType.FishingHook, self.levelCfg.Param1)
self:SetPngSprite(self._mapNode.img_hook, string.format(SpritePath, self.nActId) .. "btn_goldenspy_level_task_02")
end
for _, v in ipairs(self.tbTimer) do
if v ~= nil then
v:Cancel()
v = nil
end
end
if self.addTween ~= nil then
@@ -208,28 +217,41 @@ function GoldenSpyLevelCtrl:Init()
self.bStartFloor = false
self.bChangeTime = false
self.bInFrozen = false
self.bInFishingHook = false
self:ResetEffect()
end
function GoldenSpyLevelCtrl:InitSkill(bNewLevel)
local skillData = self.GoldenSpyLevelData:GetSkillData()
if skillData[BoomSkillId] == nil or skillData[BoomSkillId] <= 0 and bNewLevel then
self._mapNode.btn_Boom.gameObject:SetActive(false)
if bNewLevel then
for i = 1, 2 do
local btn_Skill = self._mapNode["btn_Skill" .. i]
btn_Skill.gameObject:SetActive(false)
end
self.skillList = {}
for k, v in pairs(skillData) do
table.insert(self.skillList, k)
end
table.sort(self.skillList, function(a, b)
return a < b
end)
else
local txt_count = self._mapNode.btn_Boom.transform:Find("AnimRoot/db_skillCount/txt_skillCount"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txt_count, string.format("%d", skillData[BoomSkillId]))
local mask = self._mapNode.btn_Boom.transform:Find("AnimRoot/mask"):GetComponent("Image")
mask.gameObject:SetActive(skillData[BoomSkillId] <= 0)
self._mapNode.btn_Boom.gameObject:SetActive(true)
end
if skillData[FrozenSkillId] == nil or skillData[FrozenSkillId] <= 0 and bNewLevel then
self._mapNode.btn_Frozen.gameObject:SetActive(false)
else
local txt_count = self._mapNode.btn_Frozen.transform:Find("AnimRoot/db_skillCount/txt_skillCount"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txt_count, string.format("%d", skillData[FrozenSkillId]))
local mask = self._mapNode.btn_Frozen.transform:Find("AnimRoot/mask"):GetComponent("Image")
mask.gameObject:SetActive(skillData[FrozenSkillId] <= 0)
self._mapNode.img_frozenCD.gameObject:SetActive(false)
self._mapNode.btn_Frozen.gameObject:SetActive(true)
for i = 1, #self.skillList do
local skillId = self.skillList[i]
local skillCfg = ConfigTable.GetData("GoldenSpySkill", skillId)
if skillCfg ~= nil then
local btn_Skill = self._mapNode["btn_Skill" .. i]
local img_icon = btn_Skill.transform:Find("AnimRoot/icon"):GetComponent("Image")
self:SetPngSprite(img_icon, string.format(SpritePath, self.nActId) .. skillCfg.icon)
local btn_Skill = self._mapNode["btn_Skill" .. i]
local txt_count = btn_Skill.transform:Find("AnimRoot/db_skillCount/txt_skillCount"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txt_count, string.format("%d", skillData[skillId]))
local mask = btn_Skill.transform:Find("AnimRoot/mask"):GetComponent("Image")
mask.gameObject:SetActive(skillData[skillId] <= 0)
local img_cd = btn_Skill.transform:Find("AnimRoot/img_CD"):GetComponent("Image")
img_cd.gameObject:SetActive(false)
btn_Skill.gameObject:SetActive(true)
end
end
self._mapNode.skill_Boom:SetActive(false)
self._mapNode.skill_Boom.transform:SetParent(self._mapNode.rtEffectRoot.transform)
@@ -242,7 +264,15 @@ function GoldenSpyLevelCtrl:ResetEffect()
self.FrozenTweener:Kill()
self.FrozenTweener = nil
end
self._mapNode.img_frozenCD.gameObject:SetActive(false)
if self.FishingHookTweener ~= nil then
self.FishingHookTweener:Kill()
self.FishingHookTweener = nil
end
for i = 1, 2 do
local btn_Skill = self._mapNode["btn_Skill" .. i]
local img_cd = btn_Skill.transform:Find("AnimRoot/img_CD"):GetComponent("Image")
img_cd.gameObject:SetActive(false)
end
local hookMask = self._mapNode.btn_Hook.transform:Find("AnimRoot/mask"):GetComponent("Image")
hookMask.gameObject:SetActive(false)
self._mapNode.skill_Boom:GetComponent("RectTransform").anchoredPosition = Vector2.zero
@@ -336,7 +366,6 @@ function GoldenSpyLevelCtrl:FinishFloor()
finishCallback = finishCallback,
goNextCallback = goNextCallback,
bSuccess = bSuccess,
bCanGoNextLevel = bCanGoNextLevel,
goNextLevelCallback = goNextLevelCallback
}
if not self.GoldenSpyActData:CheckActivityOpen() then
@@ -379,23 +408,16 @@ function GoldenSpyLevelCtrl:UpdateScoreText()
self.nCurScore = math.floor(self.nCurScore)
NovaAPI.SetTMPText(self._mapNode.txt_curScore, self.nCurScore)
end
function GoldenSpyLevelCtrl:CatchedItem(itemCtrl)
local nItemId = itemCtrl.nItemId
local itemCfg = ConfigTable.GetData("GoldenSpyItem", nItemId)
if itemCfg == nil then
function GoldenSpyLevelCtrl:CatchedItem(tbItemCtrl)
if tbItemCtrl == nil or #tbItemCtrl == 0 then
return
end
self.bCanBoom = true
end
function GoldenSpyLevelCtrl:CatchedComplete(itemCtrl)
local nItemId = itemCtrl.nItemId
local itemCfg = ConfigTable.GetData("GoldenSpyItem", nItemId)
if itemCfg == nil then
return nil
end
function GoldenSpyLevelCtrl:CatchedComplete(tbItemCtrl)
WwiseAudioMgr:PostEvent("Mode_steal_coin")
local oldScore = self.nCurScore
local bFinishTask, addScore = self.GoldenSpyLevelData:CatchedItem(nItemId, itemCtrl)
local bFinishTask, addScore = self.GoldenSpyLevelData:CatchedItem(tbItemCtrl)
addScore = math.floor(addScore or 0)
if NovaAPI.IsEditorPlatform() then
print("GoldenSpyLevelCtrl:抓到的道具分", addScore)
@@ -430,7 +452,33 @@ function GoldenSpyLevelCtrl:CatchedComplete(itemCtrl)
table.insert(self.tbTimer, timer)
self.AddScoreTimer = nil
end, true, true, true)
local callback = function()
local tbTempItemCtrl = clone(tbItemCtrl)
self:CatchedItemProcess(tbTempItemCtrl, bFinishTask)
end
function GoldenSpyLevelCtrl:CatchedItemProcess(tbTempItemCtrl, bFinishTask)
if #tbTempItemCtrl <= 0 then
return
end
local tempItemCtrl = tbTempItemCtrl[1]
table.remove(tbTempItemCtrl, 1)
local itemCfg = tempItemCtrl:GetItemCfg()
if itemCfg.ItemType == GameEnum.GoldenSpyItem.BuffItem then
local buffId = itemCfg.Params[1]
if buffId == 0 then
self:AddRandomBuff(self.levelCfg.BuffCardPoolId, function()
self:CatchedItemProcessCallback(tbTempItemCtrl, tempItemCtrl, bFinishTask)
end)
else
self:AddRandomBuff(buffId, function()
self:CatchedItemProcessCallback(tbTempItemCtrl, tempItemCtrl, bFinishTask)
end)
end
else
self:CatchedItemProcessCallback(tbTempItemCtrl, tempItemCtrl, bFinishTask)
end
end
function GoldenSpyLevelCtrl:CatchedItemProcessCallback(tbTempItemCtrl, itemCtrl, bFinishTask)
if #tbTempItemCtrl <= 0 then
if bFinishTask then
local taskAnimator = self._mapNode.go_Task.transform:Find("AnimRoot"):GetComponent("Animator")
self:UpdateScoreText()
@@ -447,29 +495,20 @@ function GoldenSpyLevelCtrl:CatchedComplete(itemCtrl)
self:UpdateTaskUI()
end
self.bCanBoom = false
if itemCfg.ItemType == GameEnum.GoldenSpyItem.BuffItem then
local nCount = 0
local items = self.GoldenSpyFloorData:GetItems()
for k, v in pairs(items) do
local itemCfg = ConfigTable.GetData("GoldenSpyItem", k)
if itemCfg ~= nil and itemCfg.ItemType ~= GameEnum.GoldenSpyItem.Boom then
nCount = nCount + v.itemCount
end
end
if items == nil or nCount <= 0 then
self:FinishFloor()
end
end
end
local itemCfg = itemCtrl:GetItemCfg()
if itemCfg.ItemType == GameEnum.GoldenSpyItem.BuffItem then
local buffId = itemCfg.Params[1]
if buffId == 0 then
self:AddRandomBuff(self.levelCfg.BuffCardPoolId, callback)
else
self:AddRandomBuff(buffId, callback)
local nCount = 0
local items = self.GoldenSpyFloorData:GetItems()
for k, v in pairs(items) do
local itemCfg = ConfigTable.GetData("GoldenSpyItem", k)
if itemCfg ~= nil and itemCfg.ItemType ~= GameEnum.GoldenSpyItem.Boom then
nCount = nCount + v.itemCount
end
end
if items == nil or nCount <= 0 then
self:FinishFloor()
end
else
callback()
end
end
function GoldenSpyLevelCtrl:UpdateTaskIcon()
@@ -659,6 +698,9 @@ function GoldenSpyLevelCtrl:Pause()
if self.FrozenTweener ~= nil then
self.FrozenTweener:Pause()
end
if self.FishingHookTweener ~= nil then
self.FishingHookTweener:Pause()
end
end
function GoldenSpyLevelCtrl:Resume()
WwiseAudioMgr:PostEvent("Mode_steal_go")
@@ -671,6 +713,9 @@ function GoldenSpyLevelCtrl:Resume()
if self.FrozenTweener ~= nil then
self.FrozenTweener:Play()
end
if self.FishingHookTweener ~= nil then
self.FishingHookTweener:Play()
end
end
function GoldenSpyLevelCtrl:DropItem()
WwiseAudioMgr:PostEvent("Mode_steal_get_stop")
@@ -772,6 +817,22 @@ function GoldenSpyLevelCtrl:StartRetract()
self._mapNode.ActorAnimRoot:Play("ActorPanel_Pull_end")
end)
end
function GoldenSpyLevelCtrl:UseSkill(skillId)
if skillId == nil then
return
end
local skillCfg = ConfigTable.GetData("GoldenSpySkill", skillId)
if skillCfg == nil then
return
end
if skillCfg.SkillType == GameEnum.GoldenSpySkillType.Boom then
self:OnBtnClick_Boom()
elseif skillCfg.SkillType == GameEnum.GoldenSpySkillType.Frozen then
self:OnBtnClick_Frozen()
elseif skillCfg.SkillType == GameEnum.GoldenSpySkillType.FishingHook then
self:OnBtnClick_FishingHook()
end
end
function GoldenSpyLevelCtrl:OnBtnClick_Pause()
if not self.bStartFloor then
return
@@ -798,6 +859,7 @@ function GoldenSpyLevelCtrl:OnBtnClick_Hook()
local nSpeed = cfg.BaseSpeed
local nRadius = cfg.BaseRadius
local nFactor = cfg.BaseFactor
local nMinSpeed = cfg.MinSpeed
for _, v in ipairs(self.GoldenSpyLevelData:GetBuffData()) do
local buffCfg = ConfigTable.GetData("GoldenSpyBuffCard", v.buffId)
if buffCfg ~= nil and self.GoldenSpyLevelData:CheckBuffActive(v) then
@@ -814,61 +876,78 @@ function GoldenSpyLevelCtrl:OnBtnClick_Hook()
end
local finishCallback = function()
end
local catchedCallback = function(itemCtrl)
if itemCtrl == nil then
return
end
local itemCfg = itemCtrl:GetItemCfg()
if itemCfg.ItemType == GameEnum.GoldenSpyItem.Boom then
local catchedCallback = function(tbItemCtrl)
if tbItemCtrl == nil or #tbItemCtrl == 0 then
WwiseAudioMgr:PostEvent("Mode_steal_get_stop")
return
end
self:CatchedItem(itemCtrl)
if tbItemCtrl[1]:GetItemCfg().ItemType == GameEnum.GoldenSpyItem.Boom then
WwiseAudioMgr:PostEvent("Mode_steal_get_stop")
return
end
self:CatchedItem(tbItemCtrl)
WwiseAudioMgr:PostEvent("Mode_steal_get")
local itemNormalWeight = itemCtrl:GetWeight()
for _, v in ipairs(self.GoldenSpyLevelData:GetBuffData()) do
local buffCfg = ConfigTable.GetData("GoldenSpyBuffCard", v.buffId)
if buffCfg ~= nil and buffCfg.EffectType == GameEnum.GoldenSpyBuffEffect.ReduceItemWeight and self.GoldenSpyLevelData:CheckBuffActive(v) and itemCtrl.nItemId == buffCfg.Params[1] then
itemNormalWeight = itemNormalWeight - buffCfg.Params[2]
local nTotalWeight = 0
for _, itemCtrl in ipairs(tbItemCtrl) do
local itemNormalWeight = itemCtrl:GetWeight()
for _, v in ipairs(self.GoldenSpyLevelData:GetBuffData()) do
local buffCfg = ConfigTable.GetData("GoldenSpyBuffCard", v.buffId)
if buffCfg ~= nil and buffCfg.EffectType == GameEnum.GoldenSpyBuffEffect.ReduceItemWeight then
if self.GoldenSpyLevelData:CheckBuffActive(v) and itemCtrl.nItemId == buffCfg.Params[1] then
itemNormalWeight = itemNormalWeight - buffCfg.Params[2]
end
nTotalWeight = nTotalWeight + itemNormalWeight
end
end
end
itemNormalWeight = math.max(0, itemNormalWeight)
local cfg = ConfigTable.GetData("GoldenSpyConfig", self.levelCfg.ConfigId)
if cfg ~= nil then
self._mapNode.ActorAnimRoot:SetBool("Is_PullSlow", itemNormalWeight > cfg.PullSlowWeight)
self._mapNode.ActorAnimRoot:SetBool("Is_PullSlow", nTotalWeight > cfg.PullSlowWeight)
end
self._mapNode.ActorAnimRoot:Play("ActorPanel_Pull_start")
end
local catchedCompleteCallback = function(itemCtrl)
if itemCtrl == nil or itemCtrl:GetItemCfg().ItemType == GameEnum.GoldenSpyItem.Boom then
local catchedCompleteCallback = function(tbItemCtrl)
if tbItemCtrl == nil or #tbItemCtrl == 0 then
self._mapNode.floorCtrl:ResumeHookSwing()
self._mapNode.ActorAnimRoot:Play("ActorPanel_Pull_end")
return
end
if tbItemCtrl[1]:GetItemCfg().ItemType == GameEnum.GoldenSpyItem.Boom then
self._mapNode.ActorAnimRoot:Play("ActorPanel_Pull_end")
return
end
local cfg = ConfigTable.GetData("GoldenSpyConfig", self.levelCfg.ConfigId)
if cfg ~= nil then
if cfg == nil then
return
end
local nTotalScore = 0
for _, itemCtrl in ipairs(tbItemCtrl) do
local itemCfg = itemCtrl:GetItemCfg()
local nScore = itemCfg.Score
for _, v in ipairs(self.GoldenSpyLevelData:GetBuffData()) do
local buffCfg = ConfigTable.GetData("GoldenSpyBuffCard", v.buffId)
if buffCfg ~= nil and buffCfg.EffectType == GameEnum.GoldenSpyBuffEffect.AddScore and buffCfg.Params[1] == itemCfg.ItemType and self.GoldenSpyLevelData:CheckBuffActive(v) then
nScore = nScore + buffCfg.Params[2]
if buffCfg ~= nil and buffCfg.EffectType == GameEnum.GoldenSpyBuffEffect.AddScore and buffCfg.Params[1] == itemCfg.ItemType then
if self.GoldenSpyLevelData:CheckBuffActive(v) then
nScore = nScore + buffCfg.Params[2]
end
nTotalScore = nTotalScore + nScore
end
end
if nScore >= cfg.GetHighValue then
self._mapNode.ActorAnimRoot:Play("ActorPanel_Win")
WwiseAudioMgr:PostEvent("Mode_steal_nice")
self.bInCharAnimator = true
local timer = self:AddTimer(1, 0.7, function()
self._mapNode.floorCtrl:ResumeHookSwing()
self.bInCharAnimator = false
self:CatchedComplete(itemCtrl)
end, true, true, true)
table.insert(self.tbTimer, timer)
else
self._mapNode.ActorAnimRoot:Play("ActorPanel_Pull_end")
end
if nTotalScore >= cfg.GetHighValue then
self._mapNode.ActorAnimRoot:Play("ActorPanel_Win")
WwiseAudioMgr:PostEvent("Mode_steal_nice")
self.bInCharAnimator = true
local timer = self:AddTimer(1, 0.7, function()
self._mapNode.floorCtrl:ResumeHookSwing()
self:CatchedComplete(itemCtrl)
end
self.bInCharAnimator = false
self:CatchedComplete(tbItemCtrl)
end, true, true, true)
table.insert(self.tbTimer, timer)
else
self._mapNode.ActorAnimRoot:Play("ActorPanel_Pull_end")
self._mapNode.floorCtrl:ResumeHookSwing()
self:CatchedComplete(tbItemCtrl)
end
WwiseAudioMgr:PostEvent("Mode_steal_get_stop")
end
@@ -876,8 +955,21 @@ function GoldenSpyLevelCtrl:OnBtnClick_Hook()
print("GoldenSpyLevelCtrl:nSpeed=", nSpeed)
print("GoldenSpyLevelCtrl:nRadius=", nRadius)
print("GoldenSpyLevelCtrl:nFactor=", nFactor)
print("GoldenSpyLevelCtrl:nMinSpeed=", nMinSpeed)
end
self._mapNode.floorCtrl:Shoot(nSpeed, nRadius, nFactor, finishCallback, catchedCallback, catchedCompleteCallback)
self._mapNode.floorCtrl:Shoot(nSpeed, nRadius, nFactor, nMinSpeed, finishCallback, catchedCallback, catchedCompleteCallback)
end
function GoldenSpyLevelCtrl:OnBtnClick_Skill1()
if #self.skillList < 1 then
return
end
self:UseSkill(self.skillList[1])
end
function GoldenSpyLevelCtrl:OnBtnClick_Skill2()
if #self.skillList < 2 then
return
end
self:UseSkill(self.skillList[2])
end
function GoldenSpyLevelCtrl:OnBtnClick_Boom()
if self.bInCharAnimator then
@@ -897,16 +989,30 @@ function GoldenSpyLevelCtrl:OnBtnClick_Boom()
self._mapNode.ActorAnimRoot:Play("ActorPanel_Pull_end")
end)
if bUsed then
local BoomSkillId = 0
local btn_Skill
for i = 1, #self.skillList do
local skillId = self.skillList[i]
local skillCfg = ConfigTable.GetData("GoldenSpySkill", skillId)
if skillCfg ~= nil and skillCfg.SkillType == GameEnum.GoldenSpySkillType.Boom then
BoomSkillId = skillId
btn_Skill = self._mapNode["btn_Skill" .. i]
break
end
end
if BoomSkillId == 0 or btn_Skill == nil then
return
end
self.GoldenSpyLevelData:UseSkill(BoomSkillId)
local newSkillData = self.GoldenSpyLevelData:GetSkillData()
local mask = self._mapNode.btn_Boom.transform:Find("AnimRoot/mask"):GetComponent("Image")
local mask = btn_Skill.transform:Find("AnimRoot/mask"):GetComponent("Image")
if newSkillData[BoomSkillId] == nil or newSkillData[BoomSkillId] <= 0 then
mask.gameObject:SetActive(true)
local txt_count = self._mapNode.btn_Boom.transform:Find("AnimRoot/db_skillCount/txt_skillCount"):GetComponent("TMP_Text")
local txt_count = btn_Skill.transform:Find("AnimRoot/db_skillCount/txt_skillCount"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txt_count, 0)
else
mask.gameObject:SetActive(false)
local txt_count = self._mapNode.btn_Boom.transform:Find("AnimRoot/db_skillCount/txt_skillCount"):GetComponent("TMP_Text")
local txt_count = btn_Skill.transform:Find("AnimRoot/db_skillCount/txt_skillCount"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txt_count, string.format("%d", newSkillData[BoomSkillId]))
end
self._mapNode.skill_Boom:SetActive(true)
@@ -954,16 +1060,31 @@ function GoldenSpyLevelCtrl:OnBtnClick_Frozen()
WwiseAudioMgr:PostEvent("Mode_steal_ice_boom")
self._mapNode.floorCtrl:StartFrozen()
self.bInFrozen = true
local FrozenSkillId = 0
local btn_Skill
for i = 1, #self.skillList do
local skillId = self.skillList[i]
local skillCfg = ConfigTable.GetData("GoldenSpySkill", skillId)
if skillCfg ~= nil and skillCfg.SkillType == GameEnum.GoldenSpySkillType.Frozen then
FrozenSkillId = skillId
btn_Skill = self._mapNode["btn_Skill" .. i]
break
end
end
if FrozenSkillId == 0 or btn_Skill == nil then
self.bInFrozen = false
return
end
self.GoldenSpyLevelData:UseSkill(FrozenSkillId)
local newSkillData = self.GoldenSpyLevelData:GetSkillData()
local mask = self._mapNode.btn_Frozen.transform:Find("AnimRoot/mask"):GetComponent("Image")
local mask = btn_Skill.transform:Find("AnimRoot/mask"):GetComponent("Image")
if newSkillData[FrozenSkillId] == nil or newSkillData[FrozenSkillId] <= 0 then
mask.gameObject:SetActive(true)
local txt_count = self._mapNode.btn_Frozen.transform:Find("AnimRoot/db_skillCount/txt_skillCount"):GetComponent("TMP_Text")
local txt_count = btn_Skill.transform:Find("AnimRoot/db_skillCount/txt_skillCount"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txt_count, 0)
else
mask.gameObject:SetActive(false)
local txt_count = self._mapNode.btn_Frozen.transform:Find("AnimRoot/db_skillCount/txt_skillCount"):GetComponent("TMP_Text")
local txt_count = btn_Skill.transform:Find("AnimRoot/db_skillCount/txt_skillCount"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txt_count, string.format("%d", newSkillData[FrozenSkillId]))
end
local skillcfg = ConfigTable.GetData("GoldenSpySkill", FrozenSkillId)
@@ -980,7 +1101,7 @@ function GoldenSpyLevelCtrl:OnBtnClick_Frozen()
end
end, true, true, true)
table.insert(self.tbTimer, timer)
local img_frozenCD = self._mapNode.img_frozenCD
local img_frozenCD = btn_Skill.transform:Find("AnimRoot/img_CD"):GetComponent("Image")
img_frozenCD.fillAmount = 1
img_frozenCD.gameObject:SetActive(true)
self.FrozenTweener = DOTween.To(function()
@@ -991,6 +1112,68 @@ function GoldenSpyLevelCtrl:OnBtnClick_Frozen()
img_frozenCD.gameObject:SetActive(false)
end)
end
function GoldenSpyLevelCtrl:OnBtnClick_FishingHook()
if self.bInCharAnimator then
return
end
if not self.bStartFloor then
return
end
if not self._mapNode.floorCtrl:CheckCanChangeHook() then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("GoldenSpy_CanNotChangeHook"))
return
end
self.bInFishingHook = true
local FishingHookSkillId = 0
local btn_Skill
for i = 1, #self.skillList do
local skillId = self.skillList[i]
local skillCfg = ConfigTable.GetData("GoldenSpySkill", skillId)
if skillCfg ~= nil and skillCfg.SkillType == GameEnum.GoldenSpySkillType.FishingHook then
FishingHookSkillId = skillId
btn_Skill = self._mapNode["btn_Skill" .. i]
break
end
end
if FishingHookSkillId == 0 or btn_Skill == nil then
self.bInFishingHook = false
return
end
self.GoldenSpyLevelData:UseSkill(FishingHookSkillId)
local newSkillData = self.GoldenSpyLevelData:GetSkillData()
local mask = btn_Skill.transform:Find("AnimRoot/mask"):GetComponent("Image")
if newSkillData[FishingHookSkillId] == nil or newSkillData[FishingHookSkillId] <= 0 then
mask.gameObject:SetActive(true)
local txt_count = btn_Skill.transform:Find("AnimRoot/db_skillCount/txt_skillCount"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txt_count, 0)
else
mask.gameObject:SetActive(false)
local txt_count = btn_Skill.transform:Find("AnimRoot/db_skillCount/txt_skillCount"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txt_count, string.format("%d", newSkillData[FishingHookSkillId]))
end
local skillcfg = ConfigTable.GetData("GoldenSpySkill", FishingHookSkillId)
self._mapNode.floorCtrl:SetHookType(AllEnum.GoldenSpyHookType.FishingHook, tonumber(skillcfg.Params[1]))
local nTime = skillcfg.Params[2]
if nTime <= 0 then
self.bInFishingHook = false
return
end
local timer = self:AddTimer(1, nTime, function()
self._mapNode.floorCtrl:SetHookType(AllEnum.GoldenSpyHookType.Normal, 0)
self.bInFishingHook = false
end, true, true, true)
table.insert(self.tbTimer, timer)
local img_FishingHookCD = btn_Skill.transform:Find("AnimRoot/img_CD"):GetComponent("Image")
img_FishingHookCD.fillAmount = 1
img_FishingHookCD.gameObject:SetActive(true)
self.FishingHookTweener = DOTween.To(function()
return img_FishingHookCD.fillAmount
end, function(value)
img_FishingHookCD.fillAmount = value
end, 0, nTime):OnComplete(function()
img_FishingHookCD.gameObject:SetActive(false)
end)
end
function GoldenSpyLevelCtrl:OnBtnClick_ToolBox()
self:Pause()
local tbShowItem = {}
@@ -1066,6 +1249,10 @@ function GoldenSpyLevelCtrl:ClearTimer()
self.FrozenTweener:Kill()
self.FrozenTweener = nil
end
if self.FishingHookTweener ~= nil then
self.FishingHookTweener:Kill()
self.FishingHookTweener = nil
end
for _, v in ipairs(self.tbTimer) do
if v ~= nil then
v:Cancel()
@@ -1080,16 +1267,15 @@ end
function GoldenSpyLevelCtrl:OnEvent_UpdateSkillCount(nSkillId, nCount)
nCount = nCount or 0
nCount = math.floor(nCount)
if nSkillId == BoomSkillId then
local txt_count = self._mapNode.btn_Boom.transform:Find("AnimRoot/db_skillCount/txt_skillCount"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txt_count, string.format("%d", nCount))
local mask = self._mapNode.btn_Boom.transform:Find("AnimRoot/mask"):GetComponent("Image")
mask.gameObject:SetActive(nCount == 0)
elseif nSkillId == FrozenSkillId then
local txt_count = self._mapNode.btn_Frozen.transform:Find("AnimRoot/db_skillCount/txt_skillCount"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txt_count, string.format("%d", nCount))
local mask = self._mapNode.btn_Frozen.transform:Find("AnimRoot/mask"):GetComponent("Image")
mask.gameObject:SetActive(nCount == 0)
for i = 1, #self.skillList do
local skillId = self.skillList[i]
if skillId == nSkillId then
local txt_count = self._mapNode["btn_Skill" .. i].transform:Find("AnimRoot/db_skillCount/txt_skillCount"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txt_count, string.format("%d", nCount))
local mask = self._mapNode["btn_Skill" .. i].transform:Find("AnimRoot/mask"):GetComponent("Image")
mask.gameObject:SetActive(nCount == 0)
break
end
end
end
function GoldenSpyLevelCtrl:OnEvent_FinishFloor()
@@ -46,11 +46,34 @@ function GoldenSpyLevelData:RestartCurrentFloor()
self:StartLevel(self.levelId)
return
end
local tbCatchItem = {}
for k, v in pairs(self.tempPointData.tbCatchItem) do
tbCatchItem[k] = {
itemId = k,
itemCount = v.itemCount
}
end
local tbBuff = {}
for k, v in pairs(self.tempPointData.tbBuff) do
tbBuff[k] = {
buffId = v.buffId,
tbActiveFloor = v.tbActiveFloor,
bActive = v.bActive
}
end
local tbUsedSkill = {}
for k, v in pairs(self.tempPointData.tbUsedSkill) do
tbUsedSkill[k] = v
end
local tbSkillData = {}
for k, v in pairs(self.tempPointData.tbSkillData) do
tbSkillData[k] = v
end
self.nCurScore = self.tempPointData.nCurScore
self.tbCatchItem = self.tempPointData.tbCatchItem
self.tbBuff = self.tempPointData.tbBuff
self.tbUsedSkill = self.tempPointData.tbUsedSkill
self.tbSkillData = self.tempPointData.tbSkillData
self.tbCatchItem = tbCatchItem
self.tbBuff = tbBuff
self.tbUsedSkill = tbUsedSkill
self.tbSkillData = tbSkillData
self.nCompleteTaskCount = self.tempPointData.nCompleteTaskCount
self.nBuffRefreshCount = self.tempPointData.nBuffRefreshCount
local tbList = {}
@@ -145,37 +168,45 @@ function GoldenSpyLevelData:GetLevelPrefabName()
end
return nPrefabName
end
function GoldenSpyLevelData:CatchedItem(nItemId, itemCtrl)
local itemCfg = ConfigTable.GetData("GoldenSpyItem", nItemId)
if itemCfg == nil then
return
end
local nScore = itemCfg.Score
if itemCtrl ~= nil then
if itemCtrl:GetItemCfg().ItemType == GameEnum.GoldenSpyItem.SafeBox then
nScore = itemCtrl:GetScore()
end
if itemCtrl:GetItemCfg().ItemType == GameEnum.GoldenSpyItem.Companion then
nScore = nScore + itemCtrl:GetBagItemPrice()
function GoldenSpyLevelData:CatchedItem(tbItemCtrl)
local nTotalScore = 0
for _, itemCtrl in ipairs(tbItemCtrl) do
local itemCfg = itemCtrl:GetItemCfg()
if itemCfg ~= nil then
local nScore = itemCfg.Score
if itemCfg.ItemType == GameEnum.GoldenSpyItem.SafeBox then
nScore = itemCtrl:GetScore()
end
if itemCfg.ItemType == GameEnum.GoldenSpyItem.Companion then
nScore = nScore + itemCtrl:GetBagItemPrice()
end
for _, v in ipairs(self.tbBuff) do
local buffCfg = ConfigTable.GetData("GoldenSpyBuffCard", v.buffId)
if buffCfg ~= nil and buffCfg.EffectType == GameEnum.GoldenSpyBuffEffect.AddScore and buffCfg.Params[1] == itemCfg.ItemType and self:CheckBuffActive(v) then
nScore = nScore + buffCfg.Params[2]
end
end
nTotalScore = nTotalScore + nScore
end
end
for _, v in ipairs(self.tbBuff) do
local buffCfg = ConfigTable.GetData("GoldenSpyBuffCard", v.buffId)
if buffCfg ~= nil and buffCfg.EffectType == GameEnum.GoldenSpyBuffEffect.AddScore and buffCfg.Params[1] == itemCfg.ItemType and self:CheckBuffActive(v) then
nScore = nScore + buffCfg.Params[2]
self.nCurScore = self.nCurScore + nTotalScore
local bFinishTask = false
for _, itemCtrl in ipairs(tbItemCtrl) do
local itemCfg = itemCtrl:GetItemCfg()
if itemCfg ~= nil then
local nItemId = itemCfg.Id
if self.tbCatchItem[nItemId] == nil then
self.tbCatchItem[nItemId] = {itemId = nItemId, itemCount = 0}
end
self.tbCatchItem[nItemId].itemCount = self.tbCatchItem[nItemId].itemCount + 1
self.floorData:DeleteItem(nItemId)
bFinishTask = self:UpdateTask(nItemId) or bFinishTask
end
end
self.nCurScore = self.nCurScore + nScore
if self.tbCatchItem[nItemId] == nil then
self.tbCatchItem[nItemId] = {itemId = nItemId, itemCount = 0}
end
self.tbCatchItem[nItemId].itemCount = self.tbCatchItem[nItemId].itemCount + 1
self.floorData:DeleteItem(nItemId)
local bFinishTask = self:UpdateTask(nItemId)
if bFinishTask then
self:RefreshTask()
end
return bFinishTask, nScore
return bFinishTask, nTotalScore
end
function GoldenSpyLevelData:GetCatchItemData()
return self.tbCatchItem
@@ -67,7 +67,7 @@ function GoldenSpyLevelSelectCtrl:Awake()
if type(param) == "table" then
self.nActivityId = param[1]
end
EventManager.Add(EventId.TemporaryBlockInput, 1.5)
EventManager.Hit(EventId.TemporaryBlockInput, 1.5)
end
function GoldenSpyLevelSelectCtrl:OnEnable()
self.animator = self.gameObject:GetComponent("Animator")
@@ -124,7 +124,7 @@ function GoldenSpyLevelSelectCtrl:SwitchPanelTab(nTab)
self._mapNode.LevelDetalRoot.gameObject:SetActive(false)
elseif nTab == PanelTab.Level then
self.animator:Play("GoldenSpyLevelSelectPanel_switch")
EventManager.Add(EventId.TemporaryBlockInput, 1.2)
EventManager.Hit(EventId.TemporaryBlockInput, 1.2)
for i = 1, 2 do
local levelCount = #ConfigTable.GetData("GoldenSpyLevelGroup", self._panel.nSelectGroupId).LevelList
self._mapNode.btn_level[i].gameObject:SetActive(i <= levelCount)
@@ -269,9 +269,11 @@ function GoldenSpyLevelSelectCtrl:InitLevelData()
local bCanGoNextGroup = false
if nextGroupId ~= nil then
local groupData = self.GoldenSpyActData:GetLevelGroupDataById(nextGroupId)
local time = CS.ClientManager.Instance.serverTimeStamp
if time >= groupData.nStartTime and self.GoldenSpyActData:CheckPreGroupPassByGroupId(nextGroupId) then
bCanGoNextGroup = true
if groupData ~= nil then
local time = CS.ClientManager.Instance.serverTimeStamp
if time >= groupData.nStartTime and self.GoldenSpyActData:CheckPreGroupPassByGroupId(nextGroupId) then
bCanGoNextGroup = true
end
end
end
self._mapNode.btnRight.gameObject:SetActive(nextGroupId ~= nil and bCanGoNextGroup)
@@ -317,7 +319,7 @@ function GoldenSpyLevelSelectCtrl:OnBtnClick_Task()
if mapGroupData ~= nil then
local actData = mapGroupData:GetActivityDataByIndex(AllEnum.ActivityThemeFuncIndex.Task)
if actData ~= nil then
EventManager.Hit(EventId.OpenPanel, PanelId.Task_10109, actData.ActivityId, 4)
EventManager.Hit(EventId.OpenPanel, PanelId.Task_10112, actData.ActivityId, 4)
end
end
end
@@ -68,6 +68,8 @@ function GoldenSpyPatrolItem:Init()
self.vVisionPoint = Vector3(visionPoint.x, visionPoint.y, 0)
self.bDirection = self.vEndPoint.x > self.vStartPoint.x
self.bDestination = false
self.trParent = self.gameObject.transform.parent
self.bFrozen = false
end
function GoldenSpyPatrolItem:InitData()
self.nVisionAngle = self.itemCfg.Params[3] or VisionAngle
@@ -344,8 +346,10 @@ function GoldenSpyPatrolItem:_CheckVision()
radius = self.floorCtrl:GetHookRadius()
}
if hitArea and self:_HitAreaInSector(hitArea, vx, vy, forwardAngle, halfAngle, radius) and self.bTrigger then
self.floorCtrl:DropItem()
self.floorCtrl:DoStartRetract()
if self.floorCtrl:CheckCanDropItem() then
self.floorCtrl:DropItem()
self.floorCtrl:DoStartRetract()
end
WwiseAudioMgr:PostEvent("Mode_steal_error")
self.floorCtrl:SubTime(self.itemCfg.Params[2])
self._mapNode.img_normal:SetActive(false)
@@ -67,7 +67,6 @@ function GoldenSpyResultCtrl:Awake()
self.finishCallback = self.data.finishCallback
self.goNextCallback = self.data.goNextCallback
self.bSuccess = self.data.bSuccess
self.bCanGoNextLevel = self.data.bCanGoNextLevel
self.goNextLevelCallback = self.data.goNextLevelCallback
self.levelCfg = ConfigTable.GetData("GoldenSpyLevel", self.nLevelId)
self.floorCfg = ConfigTable.GetData("GoldenSpyFloor", self.nCurFloorId)
@@ -176,7 +175,7 @@ function GoldenSpyResultCtrl:OnBtnClick_GoNext()
end
function GoldenSpyResultCtrl:OnBtnClick_GoNext2()
EventManager.Hit(EventId.ClosePanel, self._panel._nPanelId)
if self.goNextCallback ~= nil then
if self.goNextLevelCallback ~= nil then
self.goNextLevelCallback(self.nextGroupId, self.nextLevelId)
end
end
@@ -0,0 +1,127 @@
local LoginRewardPopUpCtrl_01 = class("LoginRewardPopUpCtrl_01", BaseCtrl)
local ClientManager = CS.ClientManager.Instance
LoginRewardPopUpCtrl_01._mapNodeConfig = {
goActTime = {
sNodeName = "imgRemaineTime"
},
txtActivityTime = {sNodeName = "txtTime", sComponentName = "TMP_Text"},
btnActivity = {
sComponentName = "Button",
callback = "OnBtnClick_Activity"
},
txtTips = {sComponentName = "TMP_Text"},
btnReward = {
sComponentName = "Button",
callback = "OnBtnClick_Activity"
},
txtBtnReward = {
sComponentName = "TMP_Text",
sLanguageId = "Quest_Receive"
}
}
LoginRewardPopUpCtrl_01._mapEventConfig = {}
LoginRewardPopUpCtrl_01._mapRedDotConfig = {}
function LoginRewardPopUpCtrl_01:RefreshRemainTime()
local endTime = self.actData:GetActEndTime()
local curTime = ClientManager.serverTimeStamp
local remainTime = endTime - curTime
if remainTime < 0 then
self._mapNode.goActTime.gameObject:SetActive(false)
return
end
local sTimeStr = ""
if remainTime <= 60 then
local sec = math.floor(remainTime)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
elseif 60 < remainTime and remainTime <= 3600 then
local min = math.floor(remainTime / 60)
local sec = math.floor(remainTime - min * 60)
if sec == 0 then
min = min - 1
sec = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
elseif 3600 < remainTime and remainTime <= 86400 then
local hour = math.floor(remainTime / 3600)
local min = math.floor((remainTime - hour * 3600) / 60)
if min == 0 then
hour = hour - 1
min = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
elseif 86400 < remainTime then
local day = math.floor(remainTime / 86400)
local hour = math.floor((remainTime - day * 86400) / 3600)
if hour == 0 then
day = day - 1
hour = 24
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
end
NovaAPI.SetTMPText(self._mapNode.txtActivityTime, sTimeStr)
end
function LoginRewardPopUpCtrl_01:RefreshActData()
self.nActId = self._panel.nActId
self.actData = self._panel.actData
self.remainTimer = nil
local actCfg = self.actData:GetActCfgData()
if actCfg.EndType == GameEnum.activityEndType.NoLimit then
self._mapNode.goActTime.gameObject:SetActive(false)
else
self._mapNode.goActTime.gameObject:SetActive(true)
self:RefreshRemainTime()
end
local sTips = ConfigTable.GetUIText("LoginSkinRewardTips1_301053") .. ConfigTable.GetUIText("LoginSkinRewardTips2_301053")
NovaAPI.SetTMPText(self._mapNode.txtTips, sTips)
end
function LoginRewardPopUpCtrl_01:PlayOutAnim()
local nAnimLength = 0
if self.animRoot ~= nil then
nAnimLength = NovaAPI.GetAnimClipLength(self.animRoot, {
"LoginReward_01_out"
})
self.animRoot:Play("LoginReward_01_out")
EventManager.Hit(EventId.TemporaryBlockInput, nAnimLength)
end
return nAnimLength
end
function LoginRewardPopUpCtrl_01:Awake()
self.animRoot = self.gameObject:GetComponent("Animator")
end
function LoginRewardPopUpCtrl_01:OnEnable()
if self.animRoot ~= nil then
local nAnimLength = NovaAPI.GetAnimClipLength(self.animRoot, {
"LoginReward_01_in"
})
self.animRoot:Play("LoginReward_01_in")
EventManager.Hit(EventId.TemporaryBlockInput, nAnimLength)
end
end
function LoginRewardPopUpCtrl_01:OnDisable()
end
function LoginRewardPopUpCtrl_01:OnDestroy()
end
function LoginRewardPopUpCtrl_01:OnBtnClick_Activity()
local bOpen = self.actData:CheckActivityOpen()
if not bOpen then
local callback = function()
EventManager.Hit("RefreshLoginRewardPanel")
end
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Alert,
sContent = ConfigTable.GetUIText("Activity_PopUp_Time_Out"),
callbackConfirm = callback
})
return
end
local canReceive = self.actData:CheckCanReceive()
if not canReceive then
EventManager.Hit("RefreshLoginRewardPanel")
return
end
local callback = function()
EventManager.Hit("RefreshLoginRewardPanel")
end
PlayerData.Activity:SendReceiveLoginRewardMsg(301042, callback)
end
return LoginRewardPopUpCtrl_01
@@ -0,0 +1,147 @@
local LoginSkinRewardCtrl_01 = class("LoginSkinRewardCtrl_01", BaseCtrl)
local ClientManager = CS.ClientManager.Instance
LoginSkinRewardCtrl_01._mapNodeConfig = {
btnDetail = {
sNodeName = "btnActDetail",
sComponentName = "UIButton",
callback = "OnBtnClick_Detail"
},
txtBtnActDetail = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Btn_Detail"
},
goActTime = {
sNodeName = "imgRemaineTime"
},
imgEnd = {},
txtActivityTime = {sNodeName = "txtTime", sComponentName = "TMP_Text"},
btnReward = {
sComponentName = "UIButton",
callback = "OnBtnClick_Activity"
},
btnUnReward = {
sComponentName = "UIButton",
callback = "OnBtnClick_Activity"
},
txtAdvanceMat = {sComponentName = "TMP_Text"},
txtBtnReward = {
sComponentName = "TMP_Text",
sLanguageId = "Quest_Receive"
},
txtBtnUnReward = {
sComponentName = "TMP_Text",
sLanguageId = "Quest_Received"
}
}
LoginSkinRewardCtrl_01._mapEventConfig = {
ClickLoginRewardTips = "OnEvent_ClickLoginRewardTips"
}
function LoginSkinRewardCtrl_01:UnbindCtrl()
end
function LoginSkinRewardCtrl_01:InitActData(actData)
self.actData = actData
self.nActId = actData:GetActId()
self.nNpcId = nil
self.bPlayVoice = false
self:RefreshDetail()
local canReceive = self.actData:CheckCanReceive()
self._mapNode.btnReward.gameObject:SetActive(canReceive)
self._mapNode.btnUnReward.gameObject:SetActive(not canReceive)
local actCfg = self.actData:GetActCfgData()
if actCfg.EndType == GameEnum.activityEndType.NoLimit then
self._mapNode.goActTime.gameObject:SetActive(false)
else
self._mapNode.goActTime.gameObject:SetActive(true)
self:RefreshRemainTime()
if nil == self.remainTimer then
self.remainTimer = self:AddTimer(0, 1, "RefreshRemainTime", true, true, false)
end
end
end
function LoginSkinRewardCtrl_01:RefreshRemainTime()
local endTime = self.actData:GetActEndTime()
local curTime = ClientManager.serverTimeStamp
local remainTime = endTime - curTime
self._mapNode.goActTime:SetActive(0 < remainTime)
self._mapNode.imgEnd:SetActive(remainTime <= 0)
if remainTime < 0 then
TimerManager.Remove(self.remainTimer)
self.remainTimer = nil
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Alert,
sContent = ConfigTable.GetUIText("Activity_Invalid_Tip_1"),
callbackConfirm = function()
EventManager.Hit(EventId.ClosePanel, PanelId.ActivityList)
end
})
return
end
local sTimeStr = ""
if remainTime <= 60 then
local sec = math.floor(remainTime)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
elseif 60 < remainTime and remainTime <= 3600 then
local min = math.floor(remainTime / 60)
local sec = math.floor(remainTime - min * 60)
if sec == 0 then
min = min - 1
sec = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
elseif 3600 < remainTime and remainTime <= 86400 then
local hour = math.floor(remainTime / 3600)
local min = math.floor((remainTime - hour * 3600) / 60)
if min == 0 then
hour = hour - 1
min = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
elseif 86400 < remainTime then
local day = math.floor(remainTime / 86400)
local hour = math.floor((remainTime - day * 86400) / 3600)
if hour == 0 then
day = day - 1
hour = 24
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
end
NovaAPI.SetTMPText(self._mapNode.txtActivityTime, sTimeStr)
end
function LoginSkinRewardCtrl_01:RefreshDetail()
local mapActCfg = self.actData:GetLoginRewardControlCfg()
local bEmpty = mapActCfg.DesText == ""
self._mapNode.btnDetail.gameObject:SetActive(not bEmpty)
local sTips = ConfigTable.GetUIText("LoginSkinRewardTips1_301053") .. "\n" .. ConfigTable.GetUIText("LoginSkinRewardTips2_301053")
NovaAPI.SetTMPText(self._mapNode.txtAdvanceMat, sTips)
end
function LoginSkinRewardCtrl_01:ClearActivity()
end
function LoginSkinRewardCtrl_01:OnBtnClick_Detail()
local mapActCfg = self.actData:GetLoginRewardControlCfg()
local msg = {
nType = AllEnum.MessageBox.Desc,
sContent = mapActCfg.DesText,
sTitle = ConfigTable.GetUIText("Activity_Btn_Detail")
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
function LoginSkinRewardCtrl_01:OnBtnClick_Activity()
local callback = function()
self._mapNode.btnReward.gameObject:SetActive(false)
local actData = PlayerData.Activity:GetActivityDataById(self.actData:GetActId())
self:InitActData(actData)
end
local canReceive = self.actData:CheckCanReceive()
if not canReceive then
return
end
PlayerData.Activity:SendReceiveLoginRewardMsg(self.actData:GetActId(), callback)
end
function LoginSkinRewardCtrl_01:OnEvent_ClickLoginRewardTips(callback, index)
callback()
end
function LoginSkinRewardCtrl_01:OnBtnClick_Reward()
end
function LoginSkinRewardCtrl_01:OnDisable()
end
return LoginSkinRewardCtrl_01
@@ -0,0 +1,90 @@
local ReengagementBDPreviewCtrl = class("ReengagementBDPreviewCtrl", BaseCtrl)
ReengagementBDPreviewCtrl._mapNodeConfig = {
window = {},
animRoot = {sNodeName = "window", sComponentName = "Animator"},
goBlur = {},
btnShortcutClose = {sComponentName = "NaviButton", callback = "ClosePanel"},
btnClose = {sComponentName = "UIButton", callback = "ClosePanel"},
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_BDTrialPreview_Title"
},
txtLevelInterval = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_BDTrialPreview_LevelInterval"
},
txtTip = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_BDTrialPreview_Tip"
},
txtCurLevel = {
sComponentName = "TMP_Text",
sLanguageId = "TD_TitleCurLevel"
},
txtLevelCn = {
sComponentName = "TMP_Text",
sLanguageId = "Quest_WorldClass_Level"
},
svAll = {
sComponentName = "LoopScrollView"
}
}
ReengagementBDPreviewCtrl._mapEventConfig = {}
function ReengagementBDPreviewCtrl:OpenPanel()
self.gameObject:SetActive(true)
self._mapNode.window:SetActive(false)
local wait = function()
self._mapNode.goBlur:SetActive(true)
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self._mapNode.window:SetActive(true)
self._mapNode.btnShortcutClose.gameObject:SetActive(true)
self:InitPanel()
self._mapNode.animRoot:Play("t_window_04_t_in")
end
end
function ReengagementBDPreviewCtrl:InitPanel()
self.tbLevelInterval = {}
local foreachData = function(mapData)
table.insert(self.tbLevelInterval, mapData)
end
ForEachTableLine(ConfigTable.GetData("ReengagementBDTrial"), foreachData)
self.nWorldLevel = PlayerData.Base:GetWorldClass()
NovaAPI.SetTMPText(self._mapNode.txtLevel, self.nWorldLevel)
self._mapNode.svAll:Init(#self.tbLevelInterval, self, self.OnGridRefresh)
end
function ReengagementBDPreviewCtrl:OnGridRefresh(goGrid, nGridIndex)
local nIndex = nGridIndex + 1
local mapData = self.tbLevelInterval[nIndex]
local imgOnBg = goGrid.transform:Find("imgOnBg").gameObject
local imgOffBg = goGrid.transform:Find("imgOffBg").gameObject
local imgSelect = goGrid.transform:Find("imgSelect").gameObject
if self.nWorldLevel >= mapData.MinLevel and self.nWorldLevel <= mapData.MaxLevel then
imgOnBg:SetActive(true)
imgOffBg:SetActive(false)
imgSelect:SetActive(true)
else
imgOnBg:SetActive(false)
imgOffBg:SetActive(true)
imgSelect:SetActive(false)
end
local txtDesc = goGrid.transform:Find("txtDesc"):GetComponent("TMP_Text")
if txtDesc ~= nil then
local sText = ConfigTable.GetUIText("Reengagement_BDTrialPreview_WorldClass")
sText = sText .. mapData.MinLevel .. "~" .. mapData.MaxLevel
NovaAPI.SetTMPText(txtDesc, sText)
end
local imgIcon = goGrid.transform:Find("imgIcon"):GetComponent("Image")
if imgIcon ~= nil then
self:SetPngSprite(imgIcon, mapData.Icon)
end
end
function ReengagementBDPreviewCtrl:ClosePanel()
self._mapNode.animRoot:Play("t_window_04_t_out")
local animLength = NovaAPI.GetAnimClipLength(self._mapNode.animRoot, {
"t_window_04_t_out"
})
self:AddTimer(1, animLength, function()
self.gameObject:SetActive(false)
end, true, true, true)
end
return ReengagementBDPreviewCtrl
@@ -0,0 +1,83 @@
local ReengagementBDPreviewItemCtrl = class("ReengagementBDPreviewItemCtrl", BaseCtrl)
ReengagementBDPreviewItemCtrl._mapNodeConfig = {
btnItem = {
sComponentName = "UIButton",
callback = "OnClickItem"
},
txtLeaderCn = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Build_Leader"
},
txtSubCn = {
nCount = 2,
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Build_Sub"
},
imgCharIcon = {nCount = 3, sComponentName = "Image"},
imgCharFrame = {nCount = 3, sComponentName = "Image"},
txtPotentialCount = {nCount = 3, sComponentName = "TMP_Text"},
imgCharElement = {nCount = 3, sComponentName = "Image"},
txtChar = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Build_Char_Title"
},
imgIcon = {sComponentName = "Image"},
txtRating = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Build_Rating"
}
}
ReengagementBDPreviewItemCtrl._mapEventConfig = {}
function ReengagementBDPreviewItemCtrl:Refresh(nTrialBuildId)
self.mapBuildData = PlayerData.Build:GetTrialBuild(nTrialBuildId)
if self.mapBuildData == nil then
self.gameObject:SetActive(false)
return
end
self.gameObject:SetActive(true)
self:RefreshInfo()
self:RefreshChar()
end
function ReengagementBDPreviewItemCtrl:RefreshInfo()
local mapRank = self.mapBuildData.mapRank
if mapRank == nil then
mapRank = PlayerData.Build:CalBuildRank(self.mapBuildData.nScore or 0)
self.mapBuildData.mapRank = mapRank
end
if mapRank ~= nil then
local sScore = "Icon/BuildRank/BuildRank_" .. mapRank.Id
self:SetPngSprite(self._mapNode.imgIcon, sScore)
end
end
function ReengagementBDPreviewItemCtrl:RefreshChar()
for i = 1, 3 do
local mapCharData = self.mapBuildData.tbChar[i]
local nCharTid = mapCharData ~= nil and mapCharData.nTid or 0
local mapCharCfg = 0 < nCharTid and ConfigTable.GetData_Character(nCharTid) or nil
local nCharSkinId = 0 < nCharTid and PlayerData.Char:GetCharSkinId(nCharTid) or 0
local mapCharSkin = 0 < nCharSkinId and ConfigTable.GetData_CharacterSkin(nCharSkinId) or nil
local bShowChar = mapCharCfg ~= nil and mapCharSkin ~= nil
self._mapNode.imgCharIcon[i].gameObject:SetActive(bShowChar)
self._mapNode.imgCharFrame[i].gameObject:SetActive(bShowChar)
self._mapNode.txtPotentialCount[i].gameObject:SetActive(bShowChar)
self._mapNode.imgCharElement[i].gameObject:SetActive(bShowChar)
if bShowChar then
local sFrame = AllEnum.FrameType_New.BoardFrame .. AllEnum.BoardFrameColor[mapCharCfg.Grade]
self:SetPngSprite(self._mapNode.imgCharIcon[i], mapCharSkin.Icon, AllEnum.CharHeadIconSurfix.XXL)
self:SetAtlasSprite(self._mapNode.imgCharFrame[i], "12_rare", sFrame)
NovaAPI.SetTMPText(self._mapNode.txtPotentialCount[i], mapCharData.nPotentialCount or 0)
self:SetAtlasSprite(self._mapNode.imgCharElement[i], "12_rare", AllEnum.Char_Element[mapCharCfg.EET].icon)
end
end
end
function ReengagementBDPreviewItemCtrl:OnClickItem()
if self.mapBuildData == nil then
return
end
self.mapBuildData = PlayerData.Build:GetTrialBuild(self.mapBuildData.nBuildId)
if self.mapBuildData == nil then
return
end
EventManager.Hit(EventId.OpenPanel, PanelId.StarTowerBuildDetailPreview, self.mapBuildData)
end
return ReengagementBDPreviewItemCtrl
@@ -0,0 +1,44 @@
local ReengagementBDTrialCtrl = class("ReengagementBDTrialCtrl", BaseCtrl)
ReengagementBDTrialCtrl._mapNodeConfig = {
txtActName = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_BDTrial_Title"
},
txtActValue = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_BDTrial_TimeLimit"
},
txtBtnTriaDetail = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_BDTrial_Title"
},
goInstanceItem = {
nCount = 6,
sCtrlName = "Game.UI.Activity.Reengagement.ReengagementBDPreviewItemCtrl"
}
}
ReengagementBDTrialCtrl._mapEventConfig = {}
function ReengagementBDTrialCtrl:Refresh(nCurTog)
if nCurTog ~= AllEnum.ReengagementTog.BDTrial then
return
end
end
function ReengagementBDTrialCtrl:RefreshTrialItems()
self.nWorldLevel = PlayerData.Base:GetWorldClass()
self.mapTrialBuildData = {}
local foreachMapData = function(mapData)
if self.nWorldLevel >= mapData.MinLevel and self.nWorldLevel <= mapData.MaxLevel then
self.mapTrialBuildData = mapData
end
end
ForEachTableLine(ConfigTable.Get("ReengagementBDTrial"), foreachMapData)
if self.mapTrialBuildData == {} then
return
end
self.tbBuildIds = self.mapTrialBuildData.BuildIds
for k, nBuildId in ipairs(self.tbBuildIds) do
local itemCtrl = self.goInstanceItem[k]
itemCtrl:Refresh(nBuildId)
end
end
return ReengagementBDTrialCtrl
@@ -0,0 +1,137 @@
local ReengagementCtrl = class("ReengagementCtrl", BaseCtrl)
local TimerManager = require("GameCore.Timer.TimerManager")
ReengagementCtrl._mapNodeConfig = {
svTog = {
sComponentName = "LoopScrollView"
},
trSvTog = {sNodeName = "svTog", sComponentName = "Transform"},
rtSignin = {
sComponentName = "RectTransform"
},
ctrlSignin = {
sNodeName = "rtSignin",
sCtrlName = "Game.UI.Activity.Reengagement.ReengagementSigninCtrl"
},
rtTask = {
sComponentName = "RectTransform"
},
ctrlTask = {
sNodeName = "rtTask",
sCtrlName = "Game.UI.Activity.Reengagement.ReengagementTaskCtrl"
},
rtDoubleDrop = {
sComponentName = "RectTransform"
},
ctrlDoubleDrop = {
sNodeName = "rtDoubleDrop",
sCtrlName = "Game.UI.Activity.Reengagement.ReengagementDoubleDropCtrl"
},
rtShopMall = {
sComponentName = "RectTransform"
},
ctrlShopMall = {
sNodeName = "rtShopMall",
sCtrlName = "Game.UI.Activity.Reengagement.ReengagementMallCtrl"
},
rtBDTrial = {
sComponentName = "RectTransform"
},
ctrlBDTrial = {
sNodeName = "rtBDTrial",
sCtrlName = "Game.UI.Activity.Reengagement.ReengagementBDTrialCtrl"
},
txtEnergyTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Battery_Title"
},
txtProgress = {sComponentName = "TMP_Text"},
imgEnergyBarFill = {
sComponentName = "RectTransform"
},
btnTrialDetail = {
sComponentName = "UIButton",
callback = "OnClickTrialDetail"
},
ReengagementPreviewPanel = {
sCtrlName = "Game.UI.Activity.Reengagement.ReengagementBDPreviewCtrl"
}
}
ReengagementCtrl._mapEventConfig = {}
function ReengagementCtrl:InitTog()
self._mapNode.svTog:Init(5, self, self.OnGridRefresh, self.OnGridBtnClick)
end
function ReengagementCtrl:OnGridRefresh(goGrid, gridIndex)
local nIndex = gridIndex + 1
local nInstanceID = goGrid:GetInstanceID()
if not self.ctrlTog[nInstanceID] then
self.ctrlTog[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.TemplateEx.TemplateToggleCtrl")
end
local mapCfg = ConfigTable.GetUIText("ReengagementTog_" .. nIndex)
if mapCfg then
self.ctrlTog[nInstanceID]:SetText(mapCfg)
end
self.ctrlTog[nInstanceID]:SetDefault(nIndex == self.nCurTog)
end
function ReengagementCtrl:OnGridBtnClick(goGrid, gridIndex)
local nIndex = gridIndex + 1
local nInstanceID = goGrid:GetInstanceID()
if nIndex == self.nCurTog then
return
end
self.ctrlTog[nInstanceID]:SetTrigger(true)
if self.nCurTog then
local goSelect = self._mapNode.trSvTog:Find("Viewport/Content/" .. self.nCurTog - 1)
if goSelect then
self.ctrlTog[goSelect.gameObject:GetInstanceID()]:SetTrigger(false)
end
end
self.nCurTog = nIndex
self:SwitchTog()
end
function ReengagementCtrl:SwitchTog()
self._mapNode.rtSignin:SetActive(self.nCurTog == 1)
self._mapNode.rtTask:SetActive(self.nCurTog == 2)
self._mapNode.rtDoubleDrop:SetActive(self.nCurTog == 3)
self._mapNode.rtShopMall:SetActive(self.nCurTog == 4)
self._mapNode.rtBDTrial:SetActive(self.nCurTog == 5)
self.ctrlSignin:Refresh(self.nCurTog)
self.ctrlTask:Refresh(self.nCurTog)
self.ctrlDoubleDrop:Refresh(self.nCurTog)
self.ctrlShopMall:Refresh(self.nCurTog)
self.ctrlBDTrial:Refresh(self.nCurTog)
end
local nMaxEnergyBatteryFillerLength = 252
local nMinEnergyBatteryFillerLength = 15
function ReengagementCtrl:RefreshEnergyBattery()
local nEnergyBattery = PlayerData.Base:GetCurEnergyBattery().nEnergyBattery
local nMaxEnergyBattery = ConfigTable.GetConfigNumber("EnergyBatteryMax")
NovaAPI.SetTMPText(self._mapNode.txtProgress, nEnergyBattery .. "/" .. nMaxEnergyBattery)
local nFillerLength = nEnergyBattery / nMaxEnergyBattery * nMaxEnergyBatteryFillerLength
if nFillerLength > nMaxEnergyBatteryFillerLength then
nFillerLength = nMaxEnergyBatteryFillerLength
elseif nFillerLength < nMinEnergyBatteryFillerLength then
nFillerLength = nMinEnergyBatteryFillerLength
end
self._mapNode.imgEnergyBarFill.sizeDelta = Vector2(nFillerLength, self._mapNode.imgEnergyBarFill.sizeDelta.y)
end
function ReengagementCtrl:Awake()
end
function ReengagementCtrl:FadeIn()
end
function ReengagementCtrl:FadeOut()
end
function ReengagementCtrl:OnEnable()
self.nCurTog = 1
self:SwitchTog()
self:RefreshEnergyBattery()
end
function ReengagementCtrl:OnDisable()
end
function ReengagementCtrl:OnDestroy()
end
function ReengagementCtrl:OnRelease()
end
function ReengagementCtrl:OnClickTrialDetail()
self.ReengagementPreviewPanel:OpenPanel()
end
return ReengagementCtrl
@@ -0,0 +1,146 @@
local ReengagementDoubleDropCtrl = class("ReengagementDoubleDropCtrl", BaseCtrl)
ReengagementDoubleDropCtrl._mapNodeConfig = {
txtActName = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_DoubleDrop_Title"
},
btnActDetail = {
sComponentName = "UIButton",
callback = "OnBtnClick_Detail"
},
txtBtnActDetail = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Btn_Detail"
},
txtTime = {sComponentName = "TMP_Text"},
txtDoubleCount = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_DoubleDrop_Count"
},
goInstanceItem = {
nCount = 4,
sCtrlName = "Game.UI.Activity.DoubleDrop.DoubleDropInsItemCtrl"
},
btnGoto = {
nCount = 4,
sComponentName = "UIButton",
callback = "OnBtnClick_Goto"
},
txtBtnGoto = {
nCount = 4,
sComponentName = "TMP_Text",
sLanguageId = "Double_Drops_Goto_Instance"
},
redDotQuest = {}
}
ReengagementDoubleDropCtrl._mapEventConfig = {}
function ReengagementDoubleDropCtrl:Refresh(nCurTog)
if nCurTog ~= AllEnum.ReengagementTog.DoubleDrop then
return
end
self:InitActData()
end
function ReengagementDoubleDropCtrl:InitActData()
self.actData = {}
self.nActId = 0
self.tbFuncType = self.actData:GetDoubleFuncType()
if self.tbFuncType == nil then
return
end
self:StartActTimer()
for k, v in ipairs(self._mapNode.goInstanceItem) do
v.gameObject:SetActive(self.tbFuncType[k] ~= nil)
if self.tbFuncType[k] ~= nil then
v:InitItem(self.tbFuncType[k])
local bUnlock = PlayerData.Base:CheckFunctionUnlock(self.tbFuncType[k])
self._mapNode.btnGoto[k].gameObject:SetActive(bUnlock)
end
end
NovaAPI.SetTMPText(self._mapNode.txtDoubleCount, self.actData:GetDropActString())
RedDotManager.RegisterNode(RedDotDefine.Activity_DoubleDrop_Quest, self.nActId, self._mapNode.redDotQuest)
end
function ReengagementDoubleDropCtrl:GetTimeStr(nRemainTime)
local sTimeStr = ""
if nRemainTime <= 60 then
local sec = math.floor(nRemainTime)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
elseif 60 < nRemainTime and nRemainTime <= 3600 then
local min = math.floor(nRemainTime / 60)
local sec = math.floor(nRemainTime - min * 60)
if sec == 0 then
min = min - 1
sec = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
elseif 3600 < nRemainTime and nRemainTime <= 86400 then
local hour = math.floor(nRemainTime / 3600)
local min = math.floor((nRemainTime - hour * 3600) / 60)
if min == 0 then
hour = hour - 1
min = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
elseif 86400 < nRemainTime then
local day = math.floor(nRemainTime / 86400)
local hour = math.floor((nRemainTime - day * 86400) / 3600)
if hour == 0 then
day = day - 1
hour = 24
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
end
return sTimeStr
end
function ReengagementDoubleDropCtrl:StartActTimer()
if self.timer ~= nil then
self.timer:Cancel()
self.timer = nil
end
local nOpenTime = self.actData:GetActOpenTime()
local nCloseTime = self.actData:GetActEndTime()
local refreshTime = function()
local nCurTime = ClientManager.serverTimeStamp
local sTime = ""
local nRemainTime = math.max(nCloseTime - nCurTime, 0)
if nCurTime >= nCloseTime then
sTime = ConfigTable.GetUIText("Activity_End")
elseif nCurTime >= nOpenTime then
sTime = self:GetTimeStr(nRemainTime)
end
if nRemainTime <= 0 and self.timer ~= nil then
self.timer:Cancel()
self.timer = nil
end
NovaAPI.SetTMPText(self._mapNode.txtTime, sTime)
end
refreshTime()
self.timer = self:AddTimer(0, 1, refreshTime, true, true, true)
end
function ReengagementDoubleDropCtrl:OnBtnClick_Detail()
local mapActCfg = ConfigTable.GetData("ActivityDouble", self.nActId)
if mapActCfg == nil then
return
end
local msg = {
nType = AllEnum.MessageBox.Desc,
sContent = mapActCfg.DesText,
sTitle = ConfigTable.GetUIText("Activity_Btn_Detail")
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
function ReengagementDoubleDropCtrl:OnBtnClick_Goto(btn, nIndex)
local nType = self.tbFuncType[nIndex]
if nType == nil then
return
end
if nType == GameEnum.OpenFuncType.DailyInstance then
EventManager.Hit(EventId.OpenPanel, PanelId.DailyInstanceLevelSelect, 0, 0, true)
elseif nType == GameEnum.OpenFuncType.RegionBoss then
EventManager.Hit(EventId.OpenPanel, PanelId.RogueBossLevel, 0, 0, true)
elseif nType == GameEnum.OpenFuncType.SkillInstance then
EventManager.Hit(EventId.OpenPanel, PanelId.SkillInstanceLevelSelect)
elseif nType == GameEnum.OpenFuncType.CharGemInstance then
EventManager.Hit(EventId.OpenPanel, PanelId.EquipmentInstanceLevelSelect)
end
end
return ReengagementDoubleDropCtrl
@@ -0,0 +1,589 @@
local ReengagementMallCtrl = class("ReengagementMallCtrl", BaseCtrl)
local JumpUtil = require("Game.Common.Utils.JumpUtil")
local SDKManager = CS.SDKManager.Instance
ReengagementMallCtrl._mapNodeConfig = {
txtReMallEndTip = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_Mall_EndTip"
},
txtLabelValue = {sComponentName = "TMP_Text"},
txtRemainDay = {sComponentName = "TMP_Text"},
txtWeeklyCardName = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_WeeklyCardName"
},
txtWeeklyCardDesc = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_WeeklyCardDesc"
},
txtGetNow = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_GetNow"
},
txtGetDaily = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_GetDaily"
},
txtBtnBuy = {sComponentName = "TMP_Text"},
txtAlreadyReceived = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_AlreadyReceived"
},
btnReceiveWeeklyCard = {
sComponentName = "UIButton",
callback = "OnBtnClick_ReceiveWeeklyCard"
},
btnAlreadyReceived = {
sComponentName = "UIButton",
callback = "OnBtnClick_AlreadyReceived"
},
MallItem = {
nCount = 3,
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
},
txtBannerTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_Mall_BannerTitle"
},
goActivityBanner = {},
goActBannerList = {
sComponentName = "RectTransform"
},
btnActBanner = {
sNodeName = "goActBannerList",
sComponentName = "UIButton",
callback = "OnBtnClick_btnActBanner"
},
eventActBannerDrag = {
sNodeName = "goActBannerList",
sComponentName = "UIDrag",
callback = "OnDrag_ActBanner"
},
activityBannerItem = {
nCount = 3,
sComponentName = "RectTransform"
},
imgActBanner = {nCount = 3, sComponentName = "Image"},
goBannerDot = {
sComponentName = "RectTransform"
},
imgPointBg = {nCount = 10},
PkgItem = {
nCount = 3,
sCtrlName = "Game.UI.Mall.MallPackageItemCtrl"
}
}
ReengagementMallCtrl._mapEventConfig = {}
function ReengagementMallCtrl:OnEnable()
self.tbPackagePage = {}
self.actData = {}
end
function ReengagementMallCtrl:OnDisable()
self:ResetTimer()
end
function ReengagementMallCtrl:Refresh(nCurTog)
if nCurTog ~= AllEnum.ReengagementTog.ShopMall then
return
end
self:SetBanner()
self:RefreshWeeklyCard()
self:RefreshPkgItem()
end
function ReengagementMallCtrl:RefreshWeeklyCard()
local mapWeeklyCardCfg = self.actData:GetWeeklyCardData()
local mapWeeklyCardData = {}
NovaAPI.SetTMPText(self._mapNode.txtLabelValue, "")
NovaAPI.SetTMPText(self._mapNode.txtWeeklyCardDesc, "")
self._mapNode.btnReceiveWeeklyCard.gameObject:SetActive(true)
self._mapNode.btnAlreadyReceived.gameObject:SetActive(true)
self._mapNode.MallItem[1]:SetItem()
self._mapNode.MallItem[2]:SetItem()
self._mapNode.MallItem[3]:SetItem()
end
function ReengagementMallCtrl:RefreshPkgItem()
for i = 1, 3 do
local mapData = self.tbPackagePage[i]
if mapData ~= nil then
self._mapNode.PkgItem[i].gameObject:SetActive(true)
self._mapNode.PkgItem[i]:Refresh(mapData)
else
self._mapNode.PkgItem[i].gameObject:SetActive(false)
end
end
end
function ReengagementMallCtrl:SetBanner()
self.bannerRefreshTimer = nil
self.tbBannerList = {}
self:AddGachaBanner()
if nil == self.tbBannerList or nil == next(self.tbBannerList) then
self._mapNode.goActivityBanner.gameObject:SetActive(false)
else
self._mapNode.goActivityBanner:SetActive(true)
for _, v in ipairs(self._mapNode.imgPointBg) do
v.gameObject:SetActive(false)
end
for k, v in ipairs(self.tbBannerList) do
if nil ~= self._mapNode.imgPointBg[k] then
self._mapNode.imgPointBg[k]:SetActive(true)
self._mapNode.imgPointBg[k].transform:Find("imgPoint").gameObject:SetActive(false)
end
end
self.nActBannerIdx = 1
self.nLastActBannerIdx = 1
self:RefreshActivityBanner()
end
self:StartActBannerTimer()
self._mapNode.eventActBannerDrag.enabled = #self.tbBannerList > 1
end
function ReengagementMallCtrl:AddActivityBanner()
local tb_activityBanner = PlayerData.Activity:GetActivityBannerList()
for _, value in ipairs(tb_activityBanner) do
table.insert(self.tbBannerList, {
nId = value:GetActId(),
nType = GameEnum.bannerType.Activity,
actData = value,
nFuncType = GameEnum.OpenFuncType.Activity
})
end
end
function ReengagementMallCtrl:AddOtherBanner()
local nNextOpenTime = 0
local nNextCloseTime = 0
local nCurTime = CS.ClientManager.Instance.serverTimeStamp
local forEachMap = function(mapLineData)
if mapLineData.BannerType == GameEnum.bannerType.OpenFunc then
local funcNum = tonumber(mapLineData.Param1)
if funcNum == nil then
return
end
local bUnlock = PlayerData.Base:CheckFunctionUnlock(funcNum, false)
if bUnlock then
local jumpToNum = tonumber(mapLineData.Param2)
if jumpToNum == nil then
return
end
table.insert(self.tbBannerList, {
nId = mapLineData.Id,
nType = GameEnum.bannerType.OpenFunc,
sBanner = mapLineData.bannerName,
nJumpTo = jumpToNum,
nFuncType = funcNum
})
end
elseif mapLineData.BannerType == GameEnum.bannerType.Community then
local clientPublishRegion = CS.ClientConfig.ClientPublishRegion
local channelName = CS.ClientConfig.ClientPublishChannelName
if SDKManager:IsSDKInit() and clientPublishRegion == CS.ClientPublishRegion.CN and (channelName == "Official" or channelName == "TEST_1" or channelName == "Taptap") then
table.insert(self.tbBannerList, {
nId = mapLineData.Id,
nType = GameEnum.bannerType.Community,
sBanner = mapLineData.bannerName
})
end
elseif mapLineData.BannerType == GameEnum.bannerType.Payment then
if not NovaAPI.IsReviewServerEnv() then
local clientPublishRegion = CS.ClientConfig.ClientPublishRegion
local channelName = CS.ClientConfig.ClientPublishChannelName
if SDKManager:IsSDKInit() and clientPublishRegion == CS.ClientPublishRegion.CN and (channelName == "Official" or channelName == "TEST_1" or channelName == "Taptap" or channelName == "TEST_2") then
table.insert(self.tbBannerList, {
nId = mapLineData.Id,
nType = GameEnum.bannerType.Payment,
sBanner = mapLineData.bannerName
})
end
end
elseif mapLineData.BannerType == GameEnum.bannerType.Mall or mapLineData.BannerType == GameEnum.bannerType.MallSkin then
local nOpenTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(mapLineData.Param1)
local nCloseTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(mapLineData.Param2)
if nOpenTime <= nCurTime and nCloseTime >= nCurTime then
table.insert(self.tbBannerList, {
nId = mapLineData.Id,
nType = mapLineData.BannerType,
sBanner = mapLineData.bannerName,
sParam = mapLineData.Param3
})
if nCloseTime < nNextCloseTime or nNextCloseTime == 0 then
nNextCloseTime = nCloseTime
end
elseif nOpenTime > nCurTime and (nOpenTime < nNextOpenTime or nNextOpenTime == 0) then
nNextOpenTime = nOpenTime
end
elseif mapLineData.BannerType == GameEnum.bannerType.TimeLimit_Func then
local nOpenTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(mapLineData.Param1)
local nCloseTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(mapLineData.Param2)
local nJumpToId = tonumber(mapLineData.Param3)
local nFuncType = tonumber(mapLineData.Param4)
if nFuncType == nil or nJumpToId == nil then
return
end
local bUnlock = PlayerData.Base:CheckFunctionUnlock(nFuncType, false)
if bUnlock and nOpenTime <= nCurTime and nCloseTime >= nCurTime then
table.insert(self.tbBannerList, {
nId = mapLineData.Id,
nType = GameEnum.bannerType.TimeLimit_Func,
sBanner = mapLineData.bannerName,
nJumpTo = nJumpToId,
nFuncType = nFuncType
})
if nCloseTime < nNextCloseTime or nNextCloseTime == 0 then
nNextCloseTime = nCloseTime
end
elseif nOpenTime > nCurTime and (nOpenTime < nNextOpenTime or nNextOpenTime == 0) then
nNextOpenTime = nOpenTime
end
elseif mapLineData.BannerType == GameEnum.bannerType.JumpToUrl then
if NovaAPI.IsReviewServerEnv() and mapLineData.Param6 == "1" then
return
end
local sUrl = mapLineData.Param3
if sUrl == nil or sUrl == "" then
return
end
local sPlatform = mapLineData.Param4
local sOption = mapLineData.Param5
local curPlatform = CS.ClientManager.Instance.Platform
local bUseOpenUrl = mapLineData.Param7 == "1"
if mapLineData.Param1 == "" then
if sPlatform == "" then
table.insert(self.tbBannerList, {
nId = mapLineData.Id,
nType = GameEnum.bannerType.JumpToUrl,
sBanner = mapLineData.bannerName,
sUrl = sUrl,
bInside = true,
bUseOpenUrl = bUseOpenUrl
})
else
local tbPlatformList = string.split(sPlatform, ",")
local tbOptionList = string.split(sOption, ",")
local nIndex = table.indexof(tbPlatformList, curPlatform)
if nIndex ~= nil and 0 < nIndex then
local sOptionType = tbOptionList[nIndex]
local bInside = sOptionType == "0"
table.insert(self.tbBannerList, {
nId = mapLineData.Id,
nType = GameEnum.bannerType.JumpToUrl,
sBanner = mapLineData.bannerName,
sUrl = sUrl,
bInside = bInside,
bUseOpenUrl = bUseOpenUrl
})
end
end
else
local nOpenTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(mapLineData.Param1)
local nCloseTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(mapLineData.Param2)
if nOpenTime <= nCurTime and nCloseTime >= nCurTime then
if sPlatform == "" then
table.insert(self.tbBannerList, {
nId = mapLineData.Id,
nType = GameEnum.bannerType.JumpToUrl,
sBanner = mapLineData.bannerName,
sUrl = sUrl,
bInside = true,
bUseOpenUrl = bUseOpenUrl
})
else
local tbPlatformList = string.split(sPlatform, ",")
local tbOptionList = string.split(sOption, ",")
local nIndex = table.indexof(tbPlatformList, curPlatform)
if nIndex ~= nil and 0 < nIndex then
local sOptionType = tbOptionList[nIndex]
local bInside = sOptionType == "0"
table.insert(self.tbBannerList, {
nId = mapLineData.Id,
nType = GameEnum.bannerType.JumpToUrl,
sBanner = mapLineData.bannerName,
sUrl = sUrl,
bInside = bInside,
bUseOpenUrl = bUseOpenUrl
})
end
end
if nCloseTime < nNextCloseTime or nNextCloseTime == 0 then
nNextCloseTime = nCloseTime
end
elseif nOpenTime > nCurTime and (nOpenTime < nNextOpenTime or nNextOpenTime == 0) then
nNextOpenTime = nOpenTime
end
end
elseif mapLineData.BannerType == GameEnum.bannerType.SeaPayment and not NovaAPI.IsReviewServerEnv() then
local sUrl = mapLineData.Param3
if sUrl == nil or sUrl == "" then
return
end
local nOpenTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(mapLineData.Param1)
local nCloseTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(mapLineData.Param2)
if nOpenTime <= nCurTime and nCloseTime >= nCurTime then
local sPlatform = mapLineData.Param4
local sOption = mapLineData.Param5
local curPlatform = CS.ClientManager.Instance.Platform
local tbPlatformList = string.split(sPlatform, ",")
local tbOptionList = string.split(sOption, ",")
local nIndex = table.indexof(tbPlatformList, curPlatform)
local sPid = mapLineData.Param6
if nIndex ~= nil and 0 < nIndex then
local sOptionType = tbOptionList[nIndex]
local bInside = sOptionType == "0"
if SDKManager:IsSDKInit() then
table.insert(self.tbBannerList, {
nId = mapLineData.Id,
nType = GameEnum.bannerType.SeaPayment,
sBanner = mapLineData.bannerName,
sUrl = sUrl,
bInside = bInside,
sPid = sPid
})
end
end
end
end
end
ForEachTableLine(DataTable.Banner, forEachMap)
local nRefreshTime = math.min(math.max(nNextOpenTime, 0), math.max(nNextCloseTime, 0))
if 0 < nRefreshTime and nCurTime < nRefreshTime then
self.bannerRefreshTimer = self:AddTimer(1, nRefreshTime - nCurTime, "SetBanner", true, true, true)
end
end
function ReengagementMallCtrl:AddGachaBanner()
local tbOpenedPool = PlayerData.Gacha:GetOpenedPool()
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(tbOpenedPool, comp)
for _, nPoolId in ipairs(tbOpenedPool) do
local mapPoolCfgData = ConfigTable.GetData("Gacha", nPoolId)
if mapPoolCfgData ~= nil and mapPoolCfgData.BannerRes ~= nil and mapPoolCfgData.BannerRes ~= "" then
table.insert(self.tbBannerList, {
nId = nPoolId,
nType = GameEnum.bannerType.Gacha,
sBanner = mapPoolCfgData.BannerRes,
nJumpTo = nPoolId,
nFuncType = GameEnum.OpenFuncType.Gacha
})
end
end
end
function ReengagementMallCtrl:RefreshActivityBanner()
local lastIndex = self.nActBannerIdx - 1 <= 0 and #self.tbBannerList or self.nActBannerIdx - 1
local nextIndex = self.nActBannerIdx + 1 > #self.tbBannerList and 1 or self.nActBannerIdx + 1
local tbCurBannerList = {}
table.insert(tbCurBannerList, self.tbBannerList[lastIndex])
table.insert(tbCurBannerList, self.tbBannerList[self.nActBannerIdx])
table.insert(tbCurBannerList, self.tbBannerList[nextIndex])
for k, v in ipairs(self._mapNode.imgActBanner) do
local bannerData = tbCurBannerList[k]
if bannerData ~= nil then
if bannerData.nType == GameEnum.bannerType.Activity then
if nil ~= bannerData.actData then
self:SetPngSprite(v, "Icon/Banner/" .. bannerData.actData:GetBannerPng())
end
else
self:SetPngSprite(v, "Icon/Banner/" .. bannerData.sBanner)
end
end
end
self._mapNode.imgPointBg[self.nLastActBannerIdx].transform:Find("imgPoint").gameObject:SetActive(false)
self.nLastActBannerIdx = self.nActBannerIdx
self._mapNode.imgPointBg[self.nActBannerIdx].transform:Find("imgPoint").gameObject:SetActive(true)
end
function ReengagementMallCtrl:StartActBannerTimer()
if nil == self.actBannerTimer and #self.tbBannerList > 1 then
self.actBannerTimer = self:AddTimer(0, self.nBannerInterval, "PlayActBannerAnim", true, true, false)
end
end
function ReengagementMallCtrl:ResetActBannerTimer()
if nil ~= self.actBannerTimer then
self.actBannerTimer:Cancel(false)
end
self.actBannerTimer = nil
end
function ReengagementMallCtrl:PlayActBannerAnim()
local onCompleteCb = function()
self:BannerTweenerEnd()
end
for k, v in ipairs(self._mapNode.activityBannerItem) do
if k == #self._mapNode.activityBannerItem then
v:DOAnchorPosX(self.tbBannerInitPos[k].x - self.nBannerWidth, 0.5):SetUpdate(true):OnComplete(onCompleteCb)
else
v:DOAnchorPosX(self.tbBannerInitPos[k].x - self.nBannerWidth, 0.5):SetUpdate(true)
end
end
end
function ReengagementMallCtrl:BannerTweenerEnd()
for k, v in ipairs(self._mapNode.activityBannerItem) do
v.anchoredPosition = self.tbBannerInitPos[k]
end
self.nActBannerIdx = self.nActBannerIdx + 1
if self.nActBannerIdx > #self.tbBannerList then
self.nActBannerIdx = 1
end
self:RefreshActivityBanner()
end
function ReengagementMallCtrl:OnBtnClick_btnActBanner()
local bannerData = self.tbBannerList[self.nActBannerIdx]
if bannerData.nType == GameEnum.bannerType.Activity then
local openCallback = function()
if nil ~= bannerData.actData then
PlayerData.Activity:OpenActivityPanel(bannerData.actData:GetActId())
end
end
PlayerData.Base:CheckFunctionBtn(bannerData.nFuncType, openCallback)
elseif bannerData.nType == GameEnum.bannerType.OpenFunc or bannerData.nType == GameEnum.bannerType.TimeLimit_Func then
local openCallback = function()
JumpUtil.JumpTo(bannerData.nJumpTo)
end
PlayerData.Base:CheckFunctionBtn(bannerData.nFuncType, openCallback)
elseif bannerData.nType == GameEnum.bannerType.Gacha then
local openCallback = function()
local getInfoCallback = function()
local func = function()
EventManager.Hit(EventId.OpenPanel, PanelId.GachaSpin, bannerData.nJumpTo)
end
EventManager.Hit(EventId.SetTransition, 6, func, AllEnum.MainViewCorner.Recruit)
end
PlayerData.Gacha:GetGachaInfomation(getInfoCallback)
end
PlayerData.Base:CheckFunctionBtn(bannerData.nFuncType, openCallback)
elseif bannerData.nType == GameEnum.bannerType.Community then
local clientPublishRegion = CS.ClientConfig.ClientPublishRegion
local channelName = CS.ClientConfig.ClientPublishChannelName
if SDKManager:IsSDKInit() and clientPublishRegion == CS.ClientPublishRegion.CN and (channelName == "Official" or channelName == "TEST_1" or channelName == "Taptap") then
local hasUrl, url = UTILS.GetBBSUrl()
if hasUrl then
local bbsTitle = ConfigTable.GetUIText("BBSTitle")
SDKManager:ShowBBS(false, bbsTitle, url, "CN-BBS", false, 2)
else
printLog(NovaAPI.GetClientChannel() .. "——平台取不到地址")
end
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
elseif bannerData.nType == GameEnum.bannerType.Payment then
local clientPublishRegion = CS.ClientConfig.ClientPublishRegion
local channelName = CS.ClientConfig.ClientPublishChannelName
if SDKManager:IsSDKInit() and clientPublishRegion == CS.ClientPublishRegion.CN and (channelName == "Official" or channelName == "TEST_1" or channelName == "Taptap" or channelName == "TEST_2") then
SDKManager:ShowWebView(false, "", "https://payment.yostar.cn/", 1, 1, false, "CN-PAYMENT")
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
elseif bannerData.nType == GameEnum.bannerType.Mall then
local nJumpId = tonumber(bannerData.sParam)
JumpUtil.JumpTo(nJumpId)
elseif bannerData.nType == GameEnum.bannerType.MallSkin then
local sMallPackageId = bannerData.sParam
local mapCfg = ConfigTable.GetData("MallPackage", sMallPackageId)
if mapCfg == nil then
return
end
local callback = function(tbList, nTime)
local bInMall = false
for _, v in ipairs(tbList) do
if v.sId == sMallPackageId then
bInMall = true
break
end
end
if not bInMall then
return
end
local tbMallList = {}
table.insert(tbMallList, {sId = sMallPackageId})
local func = function()
EventManager.Hit(EventId.OpenPanel, PanelId.MallSkinPreview, tbMallList)
end
EventManager.Hit(EventId.SetTransition, 5, func)
end
PlayerData.Mall:SendMallPackageListReq(callback)
elseif bannerData.nType == GameEnum.bannerType.JumpToUrl then
local sUrl = bannerData.sUrl
local bInside = bannerData.bInside
local bUseOpenUrl = bannerData.bUseOpenUrl
if bUseOpenUrl then
NovaAPI.OpenURL(sUrl)
elseif SDKManager:IsSDKInit() then
if bInside then
SDKManager:ShowWebView(false, "", sUrl, 1, 0, true)
else
SDKManager:ShowWebView(false, "", sUrl, 1, 1, true)
end
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
elseif bannerData.nType == GameEnum.bannerType.SeaPayment then
local sUrl = bannerData.sUrl
local bInside = bannerData.bInside
local sPid = bannerData.sPid
if SDKManager:IsSDKInit() then
if bInside then
SDKManager:ShowWebView(false, "", sUrl, 1, 0, false, sPid)
else
SDKManager:ShowWebView(false, "", sUrl, 1, 1, false, sPid)
end
end
end
local tab = {}
table.insert(tab, {
"role_id",
tostring(PlayerData.Base._nPlayerId)
})
table.insert(tab, {
"banner_type",
tostring(bannerData.nType)
})
table.insert(tab, {
"banner_id",
tostring(bannerData.nId)
})
NovaAPI.UserEventUpload("scrolling_banner_click", tab)
end
function ReengagementMallCtrl:OnDrag_ActBanner(mDrag)
if mDrag.DragEventType == AllEnum.UIDragType.DragStart then
self.nBannerDragPosX = 0
self:ResetActBannerTimer()
elseif mDrag.DragEventType == AllEnum.UIDragType.Drag then
self.nBannerDragPosX = self.nBannerDragPosX + mDrag.EventData.delta.x
for k, v in ipairs(self._mapNode.activityBannerItem) do
v.anchoredPosition = Vector2(self.tbBannerInitPos[k].x + self.nBannerDragPosX, self.tbBannerInitPos[k].y)
end
elseif mDrag.DragEventType == AllEnum.UIDragType.DragEnd then
local nPos = 0
if self.nBannerDragPosX > 0 then
nPos = self.nBannerWidth
self.nActBannerIdx = 0 >= self.nActBannerIdx - 1 and #self.tbBannerList or self.nActBannerIdx - 1
elseif self.nBannerDragPosX < 0 then
nPos = -self.nBannerWidth
self.nActBannerIdx = self.nActBannerIdx + 1 > #self.tbBannerList and 1 or self.nActBannerIdx + 1
end
local tweener
for k, v in ipairs(self._mapNode.activityBannerItem) do
tweener = v:DOAnchorPosX(self.tbBannerInitPos[k].x + nPos, 0.5):SetUpdate(true)
end
local _cb = function()
for k, v in ipairs(self._mapNode.activityBannerItem) do
v.anchoredPosition = self.tbBannerInitPos[k]
end
self:RefreshActivityBanner()
self:StartActBannerTimer()
end
tweener.onComplete = dotween_callback_handler(self, _cb)
self.nBannerDragPosX = 0
end
end
function ReengagementMallCtrl:ResetTimer()
if self.actBannerTimer ~= nil then
self.actBannerTimer:Cancel(false)
self.actBannerTimer = nil
end
if self.actBannerRefreshTimer ~= nil then
self.actBannerRefreshTimer:Cancel(false)
self.actBannerRefreshTimer = nil
end
if self.bannerRefreshTimer ~= nil then
self.bannerRefreshTimer:Cancel(false)
self.bannerRefreshTimer = nil
end
end
return ReengagementMallCtrl
@@ -0,0 +1,20 @@
local BasePanel = require("GameCore.UI.BasePanel")
local ReengagementPanel = class("ReengagementPanel", BasePanel)
ReengagementPanel._sUIResRootPath = "UI_Activity/"
ReengagementPanel._tbDefine = {
{
sPrefabPath = "_101004/ReengagementPanel.prefab",
sCtrlName = "Game.UI.Activity.Reengagement.ReengagementCtrl"
}
}
function ReengagementPanel:Awake()
end
function ReengagementPanel:OnEnable()
end
function ReengagementPanel:OnDisable()
end
function ReengagementPanel:OnDestroy()
end
function ReengagementPanel:OnRelease()
end
return ReengagementPanel
@@ -0,0 +1,179 @@
local ReengagementSigninCtrl = class("ReengagementSigninCtrl", BaseCtrl)
local TimerManager = require("GameCore.Timer.TimerManager")
local ClientManager = CS.ClientManager.Instance
ReengagementSigninCtrl._mapNodeConfig = {
txtActName = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_Signin_Title"
},
btnRewardDetail = {
sComponentName = "UIButton",
callback = "OnBtnClick_Detail"
},
txtReward = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_Signin_OnceReward"
},
imgRemaineTime = {},
txtTime = {sComponentName = "TMP_Text"},
goRewardItem = {
nCount = 7,
sCtrlName = "Game.UI.Activity.LoginReward.LoginRewardItemCtrl"
},
btnItem = {
nCount = 7,
sComponentName = "UIButton",
callback = "OnBtnClick_Item"
},
btnPlay = {
sComponentName = "Button",
callback = "OnBtnClick_Play"
},
btnActivity = {
sComponentName = "Button",
callback = "OnBtnClick_Activity"
},
txtReplay = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_Signin_Replay"
}
}
ReengagementSigninCtrl._mapEventConfig = {}
function ReengagementSigninCtrl:Refresh(nCurTog)
if nCurTog ~= AllEnum.ReengagementTog.ShopMall then
return
end
self:InitActData()
end
function ReengagementSigninCtrl:RefreshRemainTime()
local endTime = self.actData:GetActEndTime()
local curTime = ClientManager.serverTimeStamp
local remainTime = endTime - curTime
if remainTime < 0 then
TimerManager.Remove(self.remainTimer)
self.remainTimer = nil
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Alert,
sContent = ConfigTable.GetUIText("Activity_Invalid_Tip_1"),
callbackConfirm = function()
EventManager.Hit(EventId.ClosePanel, PanelId.ActivityList)
end
})
return
end
local sTimeStr = ""
if remainTime <= 60 then
local sec = math.floor(remainTime)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
elseif 60 < remainTime and remainTime <= 3600 then
local min = math.floor(remainTime / 60)
local sec = math.floor(remainTime - min * 60)
if sec == 0 then
min = min - 1
sec = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
elseif 3600 < remainTime and remainTime <= 86400 then
local hour = math.floor(remainTime / 3600)
local min = math.floor((remainTime - hour * 3600) / 60)
if min == 0 then
hour = hour - 1
min = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
elseif 86400 < remainTime then
local day = math.floor(remainTime / 86400)
local hour = math.floor((remainTime - day * 86400) / 3600)
if hour == 0 then
day = day - 1
hour = 24
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
end
NovaAPI.SetTMPText(self._mapNode.txtTime, sTimeStr)
end
function ReengagementSigninCtrl:RefreshRewardList()
self.tbRewardList = {}
local tbRewardList = self.actData:GetActLoginRewardList()
if nil ~= tbRewardList then
local nMaxDay = #tbRewardList
local nReceiveDay = self.actData:GetCanReceive()
local nActual = self.actData:GetReceived()
for k, v in ipairs(self._mapNode.goRewardItem) do
self.tbRewardList[k] = {}
local mapReward = tbRewardList[k]
v.gameObject:SetActive(mapReward ~= nil)
if mapReward ~= nil then
v:SetRewardItem(k, mapReward, k == nMaxDay, nReceiveDay == nActual and k == nActual + 1)
for i = 1, 3 do
local nTid = mapReward["RewardId" .. i]
local nCount = mapReward["Qty" .. i]
if nTid ~= 0 then
table.insert(self.tbRewardList[k], {nTid = nTid, nCount = nCount})
end
end
end
end
end
end
function ReengagementSigninCtrl:InitActData()
local actData = {}
self.actData = actData
self:RefreshRewardList()
local canReceive = self.actData:CheckCanReceive()
self._mapNode.btnActivity.gameObject:SetActive(canReceive)
self._mapNode.imgRemaineTime.gameObject:SetActive(true)
self:RefreshRemainTime()
if nil == self.remainTimer then
self.remainTimer = self:AddTimer(0, 1, "RefreshRemainTime", true, true, false)
end
end
function ReengagementSigninCtrl:Awake()
end
function ReengagementSigninCtrl:OnEnable()
end
function ReengagementSigninCtrl:OnDisable()
end
function ReengagementSigninCtrl:OnDestroy()
end
function ReengagementSigninCtrl:OnBtnClick_Detail()
local mapActCfg = self.actData:GetLoginRewardControlCfg()
local msg = {
nType = AllEnum.MessageBox.Desc,
sContent = mapActCfg.DesText,
sTitle = ConfigTable.GetUIText("Activity_Btn_Detail")
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
function ReengagementSigninCtrl:OnBtnClick_Item(btn, nIndex)
if self.tbRewardList[nIndex] ~= nil then
if #self.tbRewardList[nIndex] == 1 then
local nTid = self.tbRewardList[nIndex][1].nTid
UTILS.ClickItemGridWithTips(nTid, btn.gameObject.transform, true, true, false)
else
local tbReward = {}
for _, v in ipairs(self.tbRewardList[nIndex]) do
local rewardData = {
[1] = v.nTid,
[5] = v.nCount
}
table.insert(tbReward, rewardData)
end
EventManager.Hit("ShowActRewardList", tbReward)
end
end
end
function ReengagementSigninCtrl:OnBtnClick_Activity()
local callback = function()
self._mapNode.btnActivity.gameObject:SetActive(false)
local actData = PlayerData.Activity:GetActivityDataById(self.actData:GetActId())
self:InitActData(actData)
end
local canReceive = self.actData:CheckCanReceive()
if not canReceive then
callback()
return
end
PlayerData.Activity:SendReceiveLoginRewardMsg(self.actData:GetActId(), callback)
end
return ReengagementSigninCtrl
@@ -0,0 +1,330 @@
local ReengagementTaskCtrl = class("ReengagementTaskCtrl", BaseCtrl)
local TimerManager = require("GameCore.Timer.TimerManager")
ReengagementTaskCtrl._mapNodeConfig = {
txtActName = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_Task_Title"
},
loopSv = {
sNodeName = "srGuideQuest",
sComponentName = "LoopScrollView"
},
rtDays = {},
PerActGroupItem = {
nCount = 7,
sCtrlName = "Game.UI.Activity.Reengagement.ReengagementTaskGroupCtrl"
},
btnGroup = {
sNodeName = "PerActGroupItem",
nCount = 7,
sComponentName = "UIButton",
callback = "OnBtnClick_Group"
},
btnGroupLock = {
sNodeName = "btnGroupLock",
nCount = 7,
sComponentName = "UIButton",
callback = "OnBtnClick_GroupLock"
},
btnActDetail = {
sComponentName = "UIButton",
callback = "OnBtnClick_Detail"
},
txtBtnActDetail = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Btn_Detail"
},
btnQuickRec = {
sComponentName = "UIButton",
callback = "OnBtnClick_QuickRec"
},
txtBtnQuickRec = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Btn_Quick_Receive"
},
goActTime = {},
txtActivityTime = {sComponentName = "TMP_Text"},
txtActValue = {sComponentName = "TMP_Text"},
rtActProgressFill = {
sComponentName = "RectTransform"
},
btnNodeItem = {
nCount = 7,
sComponentName = "UIButton",
callback = "OnBtnClick_NodeItem"
}
}
ReengagementTaskCtrl._mapEventConfig = {}
function ReengagementTaskCtrl:Refresh(nCurTog)
if nCurTog ~= AllEnum.ReengagementTog.Task then
return
end
self:RefreshQuestList()
end
function ReengagementTaskCtrl:RefreshRemainTime()
local endTime = self.actData:GetActEndTime()
local curTime = CS.ClientManager.Instance.serverTimeStamp
local remainTime = endTime - curTime
if remainTime < 0 then
TimerManager.Remove(self.remainTimer)
self.remainTimer = nil
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Alert,
sContent = ConfigTable.GetUIText("Activity_Invalid_Tip_1"),
callbackConfirm = function()
EventManager.Hit(EventId.ClosePanel, PanelId.ActivityList)
end
})
return
end
local sTimeStr = ""
if remainTime <= 60 then
local sec = math.floor(remainTime)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
elseif 60 < remainTime and remainTime <= 3600 then
local min = math.floor(remainTime / 60)
local sec = math.floor(remainTime - min * 60)
if sec == 0 then
min = min - 1
sec = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
elseif 3600 < remainTime and remainTime <= 86400 then
local hour = math.floor(remainTime / 3600)
local min = math.floor((remainTime - hour * 3600) / 60)
if min == 0 then
hour = hour - 1
min = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
elseif 86400 < remainTime then
local day = math.floor(remainTime / 86400)
local hour = math.floor((remainTime - day * 86400) / 3600)
if hour == 0 then
day = day - 1
hour = 24
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
end
NovaAPI.SetTMPText(self._mapNode.txtActivityTime, orderedFormat(ConfigTable.GetUIText("PerActivity_Remain_Time") or "", sTimeStr))
end
function ReengagementTaskCtrl:RefreshQuestList()
self.tbAllQuestList = self.actData:GetQuestListByGroup()
if nil == self.tbAllQuestList[self._panel.nSelectGroup] then
printLog(string.format("任务列表为空!!!actId = %s, group = %s", self.nActId, self._panel.nSelectGroup))
return
end
self.tbQuestList = self.tbAllQuestList[self._panel.nSelectGroup]
table.sort(self.tbQuestList, function(a, b)
if a.nStatus == b.nStatus then
return a.Id < b.Id
end
return a.nStatus < b.nStatus
end)
for k, v in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(v)
self.tbGridCtrl[k] = nil
end
if nil ~= self.tbQuestList then
self.nPageCount = 0
self._mapNode.loopSv:SetAnim(0.06)
self._mapNode.loopSv:Init(#self.tbQuestList, self, self.OnGridRefresh, nil, false, self.GetGridPageCount)
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
end
local _, _, canReceive = self.actData:GetQuestProgress()
self._mapNode.btnQuickRec.gameObject:SetActive(0 < canReceive)
for k, v in ipairs(self._mapNode.PerActGroupItem) do
local nAllQuest, nReceivedQuest = self.actData:GetDayQuestStatus(k)
v:RefreshStatus(nAllQuest <= nReceivedQuest and 0 < nReceivedQuest)
end
end
function ReengagementTaskCtrl:GetGridPageCount(pageCount)
self.nPageCount = pageCount > #self.tbQuestList and #self.tbQuestList or pageCount
end
function ReengagementTaskCtrl:InitGroupList()
local nCurDay = self.actData:GetCurOpenDay()
self.nMaxOpenGroup = 0
local tbNextOpenGroupList = {}
if nil ~= CacheTable.GetData("_PeriodicQuestGroup", self.nActId) then
local tbGroup = CacheTable.GetData("_PeriodicQuestGroup", self.nActId)[nCurDay]
if nil ~= tbGroup then
for _, v in ipairs(tbGroup) do
if v > self.nMaxOpenGroup then
self.nMaxOpenGroup = v
end
end
end
if nil ~= CacheTable.GetData("_PeriodicQuestGroup", self.nActId)[nCurDay + 1] then
for _, v in ipairs(CacheTable.GetData("_PeriodicQuestGroup", self.nActId)[nCurDay + 1]) do
tbNextOpenGroupList[v] = 1
end
end
end
local nSelectGroup = self.actData:GetCanReceiveRewardGroup()
if 0 == nSelectGroup then
nSelectGroup = self.nMaxOpenGroup
end
for k, v in ipairs(self._mapNode.PerActGroupItem) do
v:Init(self.nActId, k, self.nMaxOpenGroup)
if nil ~= tbNextOpenGroupList[k] then
local nHour = self.actData:GetNextDayOpenTime()
if nHour < 1 then
v:SetTime(orderedFormat(ConfigTable.GetUIText("PerActivity_Quest_Open_Time_2") or "", 1))
else
v:SetTime(orderedFormat(ConfigTable.GetUIText("PerActivity_Quest_Open_Time_1") or "", nHour))
end
end
end
if nil == self._panel.nSelectGroup then
self._panel.nSelectGroup = nSelectGroup
end
self._mapNode.PerActGroupItem[self._panel.nSelectGroup]:SetSelect(true)
end
function ReengagementTaskCtrl:OnGridRefresh(goGrid, gridIndex)
local nIndex = gridIndex + 1
local nInstanceId = goGrid:GetInstanceID()
if not self.tbGridCtrl[nInstanceId] then
self.tbGridCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.Activity.PeriodicQuest.PeriodicQuestItemCtrl")
end
self.tbGridCtrl[nInstanceId]:SetData(self.nActId, self.tbQuestList[nIndex])
end
local totalLength = 816
local totalNodeLength = 136
local actNodeItemHeight = 152
local totalHeight = 20
function ReengagementTaskCtrl:RefreshActivityNode()
NovaAPI.SetTMPText(self._mapNode.txtActValue, self.nActiveCount)
local bAllComplete = self.nActiveCount >= self.nTotalActiveCount
self.tbQuestActive = {}
local ForeachActivity = function(mapData)
table.insert(self.tbQuestActive, mapData)
end
ForEachTableLine(ConfigTable.Get("DailyQuestActive"), ForeachActivity)
table.sort(self.tbQuestActive, function(a, b)
return a.Active < b.Active
end)
local nMaxAct = self.tbQuestActive[#self.tbQuestActive].Active
self.tbCanReceiveAct = {}
for k, v in ipairs(self.tbQuestActive) do
if self._mapNode.btnNodeItem[k] ~= nil then
local node = self._mapNode.btnNodeItem[k]
local nPosX = math.min(k / #self.tbQuestActive * totalNodeLength, totalNodeLength)
node.transform:GetComponent("RectTransform").anchoredPosition = Vector2(nPosX, actNodeItemHeight)
node.gameObject:SetActive(true)
local txtNodeAct = node.transform:Find("AnimRoot/goNodeItem/txtNodeAct"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txtNodeAct, v.Active)
local anim = node.transform:Find("AnimRoot"):GetComponent("Animator")
local imgGift = node.transform:Find("AnimRoot/goNodeItem/imgGift")
local imgComplete = node.transform:Find("AnimRoot/goNodeItem/imgComplete")
local goParticle1 = node.transform:Find("AnimRoot/goNodeItem/UIParticle1")
local goParticle2 = node.transform:Find("AnimRoot/goNodeItem/UIParticle2")
local bReceived = PlayerData.Quest:CheckDailyActiveReceive(v.Id)
local bComplete = v.Active <= self.nActiveCount
imgGift.gameObject:SetActive(not bReceived)
imgComplete.gameObject:SetActive(bReceived)
goParticle1.gameObject:SetActive(not bReceived and bComplete)
goParticle2.gameObject:SetActive(not bReceived and bComplete)
if bComplete and not bReceived then
table.insert(self.tbCanReceiveAct, k)
end
if not bReceived and bComplete then
anim:Play("Quest_btnNodeComplete_loop", 0, 0)
else
anim:Play("Empty")
end
end
end
self._mapNode.btnActReceive.gameObject:SetActive(#self.tbCanReceiveAct > 0)
self._mapNode.txtActComplete.gameObject:SetActive(bAllComplete and not (#self.tbCanReceiveAct > 0))
self._mapNode.btnActReceiveGray.gameObject:SetActive(not bAllComplete and not (#self.tbCanReceiveAct > 0))
local nWidth = math.min(self.nActiveCount / nMaxAct * totalLength, totalLength)
self._mapNode.rtActProgressFill.sizeDelta = Vector2(nWidth, totalHeight)
end
function ReengagementTaskCtrl:InitActData(actData, bResetGroup)
self.actData = actData
if bResetGroup then
self._panel.nSelectGroup = nil
end
self.nActId = actData:GetActId()
self.bQuestAnim = false
self:InitGroupList()
local tbAllQuestList = self.actData:GetQuestListByGroup()
if nil == tbAllQuestList[self._panel.nSelectGroup] then
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sContent = ConfigTable.GetUIText("Activity_Invalid_Tip_1")
})
EventManager.Hit(EventId.ClosePanel, PanelId.ActivityList)
return
end
local actCfg = self.actData:GetActCfgData()
if actCfg.EndType == GameEnum.activityEndType.NoLimit then
self._mapNode.goActTime.gameObject:SetActive(false)
else
self._mapNode.goActTime.gameObject:SetActive(true)
self:RefreshRemainTime()
if nil == self.remainTimer then
self.remainTimer = self:AddTimer(0, 1, "RefreshRemainTime", true, true, false)
end
end
end
function ReengagementTaskCtrl:Awake()
self.tbGridCtrl = {}
self.tbSequences = {}
end
function ReengagementTaskCtrl:FadeIn()
end
function ReengagementTaskCtrl:FadeOut()
end
function ReengagementTaskCtrl:OnEnable()
end
function ReengagementTaskCtrl:OnDisable()
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGridCtrl[nInstanceId] = nil
end
self.tbGridCtrl = {}
end
function ReengagementTaskCtrl:OnDestroy()
end
function ReengagementTaskCtrl:OnRelease()
end
function ReengagementTaskCtrl:OnBtnClick_Group(_, nIndex)
if self._panel.nSelectGroup == nIndex then
return
end
if nIndex > self.nMaxOpenGroup then
return
end
if nil == self.tbAllQuestList[nIndex] or nil == next(self.tbAllQuestList[nIndex]) then
printError(string.format("当前任务组下没有任务!!! 活动id = %d, 任务组 = %s", self.nActId, nIndex))
return
end
self._mapNode.PerActGroupItem[self._panel.nSelectGroup]:SetSelect(false)
if nil ~= self._mapNode.PerActGroupItem[nIndex] then
self._mapNode.PerActGroupItem[nIndex]:SetSelect(true)
end
self._panel.nSelectGroup = nIndex
self.bQuestAnim = true
self:RefreshQuestList()
end
function ReengagementTaskCtrl:OnBtnClick_GroupLock()
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("PerActivity_Not_Open"))
end
function ReengagementTaskCtrl:OnBtnClick_Detail()
local perQuestActCfg = self.actData:GetPerQuestCfg()
local msg = {
nType = AllEnum.MessageBox.Desc,
sContent = perQuestActCfg.DesText,
sTitle = ConfigTable.GetUIText("Activity_Btn_Detail")
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
function ReengagementTaskCtrl:OnBtnClick_QuickRec()
local callback = function()
EventManager.Hit("RefreshPeriodicAct", self.nActId)
PlayerData.Base:TryOpenWorldClassUpgrade()
end
PlayerData.Activity:SendReceivePerQuest(self.nActId, 0, callback)
end
return ReengagementTaskCtrl
@@ -0,0 +1,56 @@
local ReengagementTaskGroupCtrl = class("ReengagementTaskGroupCtrl", BaseCtrl)
ReengagementTaskGroupCtrl._mapNodeConfig = {
goNormal = {},
goSelect = {},
goLock = {},
txt_Group = {sComponentName = "TMP_Text", nCount = 3},
goTime = {},
txtOpenTime = {sComponentName = "TMP_Text"},
redDotGroup = {},
imgComplete = {}
}
ReengagementTaskGroupCtrl._mapEventConfig = {}
function ReengagementTaskGroupCtrl:Init(nActId, nGroup, nCurGroup)
self.nActId = nActId
self.nGroup = nGroup
for _, v in ipairs(self._mapNode.txt_Group) do
NovaAPI.SetTMPText(v, self.nGroup)
end
self._mapNode.goNormal.gameObject:SetActive(true)
self._mapNode.goSelect.gameObject:SetActive(false)
self._mapNode.goLock.gameObject:SetActive(false)
self._mapNode.goTime.gameObject:SetActive(false)
self._mapNode.redDotGroup.gameObject:SetActive(false)
self.bUnlock = nGroup <= nCurGroup
self:SetSelect(false)
self._mapNode.goNormal.gameObject:SetActive(nGroup <= nCurGroup)
self._mapNode.goLock.gameObject:SetActive(nCurGroup < nGroup)
self:RegisterRedDot()
end
function ReengagementTaskGroupCtrl:RegisterRedDot()
RedDotManager.RegisterNode(RedDotDefine.Activity_Reengagement_Task_Group, {
self.nActId,
self.nGroup
}, self._mapNode.redDotGroup)
end
function ReengagementTaskGroupCtrl:SetTime(sTime)
self._mapNode.goTime.gameObject:SetActive(true)
NovaAPI.SetTMPText(self._mapNode.txtOpenTime, sTime)
end
function ReengagementTaskGroupCtrl:SetSelect(bSelect)
self.bSelect = bSelect
self._mapNode.goNormal.gameObject:SetActive(not self.bSelect)
self._mapNode.goSelect.gameObject:SetActive(self.bSelect)
end
function ReengagementTaskGroupCtrl:RefreshStatus(bAllReceived)
self._mapNode.imgComplete.gameObject:SetActive(bAllReceived and self.bUnlock)
end
function ReengagementTaskGroupCtrl:Awake()
end
function ReengagementTaskGroupCtrl:OnDisable()
end
function ReengagementTaskGroupCtrl:OnDestroy()
end
function ReengagementTaskGroupCtrl:OnRelease()
end
return ReengagementTaskGroupCtrl
+11 -12
View File
@@ -67,12 +67,12 @@ function ActivityListCtrl:InitActivityList(nCurActId)
})
end
if nil ~= self.tbActList then
if nil ~= self.nSelectActId and nil ~= self.nSelectActMainType then
if nil ~= self._panel.nSelectActId and nil ~= self.nSelectActMainType then
local actData
if self.nSelectActMainType == AllEnum.ActivityMainType.Activity then
actData = PlayerData.Activity:GetActivityDataById(self.nSelectActId)
actData = PlayerData.Activity:GetActivityDataById(self._panel.nSelectActId)
elseif self.nSelectActMainType == AllEnum.ActivityMainType.ActivityGroup then
actData = PlayerData.Activity:GetActivityGroupDataById(self.nSelectActId)
actData = PlayerData.Activity:GetActivityGroupDataById(self._panel.nSelectActId)
end
local bOpen = false
if nil ~= actData then
@@ -87,12 +87,12 @@ function ActivityListCtrl:InitActivityList(nCurActId)
nType = AllEnum.MessageBox.Alert,
sContent = ConfigTable.GetUIText("Activity_Invalid_Tip_2")
})
self.nSelectActId = nil
self._panel.nSelectActId = nil
end
end
self.nSelectIndex = 1
if self.nSelectActId ~= nil or nCurActId ~= nil then
local nActId = self.nSelectActId == nil and nCurActId or self.nSelectActId
if self._panel.nSelectActId ~= nil or nCurActId ~= nil then
local nActId = self._panel.nSelectActId == nil and nCurActId or self._panel.nSelectActId
for k, actData in ipairs(self.tbActList) do
local actId = actData.nType == AllEnum.ActivityMainType.Activity and actData.actData:GetActId() or actData.actData:GetActGroupId()
if nil ~= nActId and actId == nActId then
@@ -453,7 +453,7 @@ function ActivityListCtrl:RefreshSelectActivity(bResetDay)
end
self.nSelectActMainType = actData.nType
if actData.nType == AllEnum.ActivityMainType.Activity then
self.nSelectActId = actData.actData:GetActId()
self._panel.nSelectActId = actData.actData:GetActId()
local actType = actData.actData:GetActType()
if actType == GameEnum.activityType.PeriodicQuest then
self:AddPeriodicActivityCtrl(actData.actData, bResetDay)
@@ -485,12 +485,12 @@ function ActivityListCtrl:RefreshSelectActivity(bResetDay)
self:AddSoldierActivityCtrl(actData.actData)
end
elseif actData.nType == AllEnum.ActivityMainType.ActivityGroup then
self.nSelectActId = actData.actData:GetActGroupId()
self._panel.nSelectActId = actData.actData:GetActGroupId()
self:AddActivityGroupCtrl(actData.actData)
end
if self.nSelectActId ~= nil then
LocalData.SetPlayerLocalData("Activity_Tab_New_" .. self.nSelectActId, 1)
RedDotManager.SetValid(RedDotDefine.Activity_New_Tab, self.nSelectActId, false)
if self._panel.nSelectActId ~= nil then
LocalData.SetPlayerLocalData("Activity_Tab_New_" .. self._panel.nSelectActId, 1)
RedDotManager.SetValid(RedDotDefine.Activity_New_Tab, self._panel.nSelectActId, false)
end
end
function ActivityListCtrl:FadeIn()
@@ -499,7 +499,6 @@ function ActivityListCtrl:FadeIn()
end
function ActivityListCtrl:Awake()
self.nSelectIndex = nil
self.nSelectActId = nil
self.nInitActId = nil
self.bPlayAnim = true
self.tbInitActIds = {}
@@ -6,6 +6,7 @@ ActivityListPanel._tbDefine = {
}
}
function ActivityListPanel:Awake()
self.nSelectActId = nil
end
function ActivityListPanel:OnEnable()
end
@@ -0,0 +1,162 @@
local ActivityCultivationManual_10111PopUpCtrl = class("ActivityCultivationManual_10111PopUpCtrl", BaseCtrl)
local TimerManager = require("GameCore.Timer.TimerManager")
local LocalData = require("GameCore.Data.LocalData")
local ClientManager = CS.ClientManager.Instance
ActivityCultivationManual_10111PopUpCtrl._mapNodeConfig = {
goContent = {
sNodeName = "---Common---"
},
btnGo = {
sComponentName = "UIButton",
callback = "OnBtnClick_Goto"
},
txtBtnGo = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_PopUp_Goto"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
btnCloseFullscreen = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
txtDate = {sComponentName = "TMP_Text"},
txtTime = {sComponentName = "TMP_Text"},
btnDontShow = {
sComponentName = "UIButton",
callback = "OnBtnClick_DontShowAgain"
},
imgDontShow1 = {},
imgDontShow2 = {},
txtDontShow = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_DontShow_PopUp_Again"
}
}
ActivityCultivationManual_10111PopUpCtrl._mapEventConfig = {}
function ActivityCultivationManual_10111PopUpCtrl:ShowPopUp(actId, callback, index)
self.popUpIndex = index
self.dontShowAgain = false
self.nCurActId = actId
self.callback = callback
self.actGroupCfg = ConfigTable.GetData("ActivityGroup", self.nCurActId)
self.nOpenTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(self.actGroupCfg.StartTime)
self.nEndTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(self.actGroupCfg.EndTime)
self:RefreshTimeout()
self:RefreshDate()
if nil == self.remainTimer then
self.remainTimer = self:AddTimer(0, 1, "RefreshTimeout", true, true, true)
end
self._mapNode.imgDontShow1:SetActive(not self.dontShowAgain)
self._mapNode.imgDontShow2:SetActive(self.dontShowAgain)
self.anim = self.gameObject:GetComponent("Animator")
self:PlayOpenAnim()
end
function ActivityCultivationManual_10111PopUpCtrl:PlayOpenAnim()
if self.anim then
self.anim:Play("open", 0, 0)
end
end
function ActivityCultivationManual_10111PopUpCtrl:RefreshDate()
local nOpenMonth = tonumber(os.date("%m", self.nOpenTime))
local nOpenDay = tonumber(os.date("%d", self.nOpenTime))
local nOpenYear = tonumber(os.date("%Y", self.nOpenTime))
local nEndMonth = tonumber(os.date("%m", self.nEndTime))
local nEndDay = tonumber(os.date("%d", self.nEndTime))
local nEndYear = tonumber(os.date("%Y", self.nEndTime))
local strOpenDay = string.format("%d", nOpenDay)
local strEndDay = string.format("%d", nEndDay)
local dateStr = string.format("%s/%s/%s ~ %s/%s/%s", nOpenYear, nOpenMonth, strOpenDay, nEndYear, nEndMonth, strEndDay)
NovaAPI.SetTMPText(self._mapNode.txtDate, dateStr)
end
function ActivityCultivationManual_10111PopUpCtrl:RefreshTimeout()
local endTime = self.nEndTime
local curTime = ClientManager.serverTimeStamp
local remainTime = endTime - curTime
if remainTime < 0 then
if self.remainTimer ~= nil then
self.remainTimer:Cancel()
self.remainTimer = nil
end
return
end
local sTimeStr = ""
if remainTime <= 60 then
local sec = math.floor(remainTime)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
elseif 60 < remainTime and remainTime <= 3600 then
local min = math.floor(remainTime / 60)
local sec = math.floor(remainTime - min * 60)
if sec == 0 then
min = min - 1
sec = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
elseif 3600 < remainTime and remainTime <= 86400 then
local hour = math.floor(remainTime / 3600)
local min = math.floor((remainTime - hour * 3600) / 60)
if min == 0 then
hour = hour - 1
min = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
elseif 86400 < remainTime then
local day = math.floor(remainTime / 86400)
local hour = math.floor((remainTime - day * 86400) / 3600)
if hour == 0 then
day = day - 1
hour = 24
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
end
NovaAPI.SetTMPText(self._mapNode.txtTime, sTimeStr)
end
function ActivityCultivationManual_10111PopUpCtrl:OnBtnClick_DontShowAgain()
self.dontShowAgain = not self.dontShowAgain
self._mapNode.imgDontShow1:SetActive(not self.dontShowAgain)
self._mapNode.imgDontShow2:SetActive(self.dontShowAgain)
LocalData.SetPlayerLocalData("Act_PopUp_DontShow" .. self.nCurActId, self.dontShowAgain)
end
function ActivityCultivationManual_10111PopUpCtrl:OnBtnClick_Close()
if self.callback ~= nil then
if self.anim then
self.anim:Play("close")
self:AddTimer(1, 0.2, function()
self.callback()
end, true, true, true)
else
self.callback()
end
end
end
function ActivityCultivationManual_10111PopUpCtrl:OnBtnClick_Goto()
if nil ~= self.nCurActId then
PopUpManager.InterruptPopUp(self.popUpIndex)
PlayerData.Activity:SendActivityDetailMsg()
self.anim:Play("close")
self:AddTimer(1, 0.2, function()
local endTime = self.nEndTime
local curTime = ClientManager.serverTimeStamp
local remainTime = endTime - curTime
if remainTime <= 0 then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_Invalid_Tip_3"))
if self.callback ~= nil then
self.callback()
end
return
end
EventManager.Hit(EventId.ClosePanel, PanelId.ActivityPopUp)
if self.actGroupCfg.TransitionId ~= nil and 0 < self.actGroupCfg.TransitionId then
local callback = function()
EventManager.Hit(EventId.OpenPanel, self.actGroupCfg.PanelId, self.actGroupCfg.Id, true)
end
EventManager.Hit(EventId.SetTransition, self.actGroupCfg.TransitionId, callback)
else
EventManager.Hit(EventId.OpenPanel, self.actGroupCfg.PanelId, self.actGroupCfg.Id, true)
end
end, true, true, true)
end
end
return ActivityCultivationManual_10111PopUpCtrl
@@ -47,7 +47,8 @@ function ActivityJointDrillPopUpCtrl:ShowPopUp(actId, callback, index)
return
end
self.nOpenTime = actData:GetChallengeStartTime()
self.nEndTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(self.actCfg.EndTime)
self.nEndTime = actData:GetChallengeEndTime()
self.nActEndTime = actData:GetActEndTime()
self:RefreshTimeout()
self:RefreshDate()
if nil == self.remainTimer then
@@ -64,10 +65,11 @@ function ActivityJointDrillPopUpCtrl:PlayOpenAnim()
end
end
function ActivityJointDrillPopUpCtrl:RefreshDate()
local nOpenMonth = tonumber(os.date("%m", self.nOpenTime))
local nOpenDay = tonumber(os.date("%d", self.nOpenTime))
local nEndMonth = tonumber(os.date("%m", self.nEndTime))
local nEndDay = tonumber(os.date("%d", self.nEndTime))
local nOffset = ClientManager.serverTimeZone * 3600
local nOpenMonth = tonumber(os.date("!%m", self.nOpenTime + nOffset))
local nOpenDay = tonumber(os.date("!%d", self.nOpenTime + nOffset))
local nEndMonth = tonumber(os.date("!%m", self.nEndTime + nOffset))
local nEndDay = tonumber(os.date("!%d", self.nEndTime + nOffset))
local strOpenDay = string.format("%d", nOpenDay)
local strEndDay = string.format("%d", nEndDay)
local dateStr = string.format("%s/%s ~ %s/%s", nOpenMonth, strOpenDay, nEndMonth, strEndDay)
@@ -77,11 +79,12 @@ function ActivityJointDrillPopUpCtrl:RefreshTimeout()
local endTime = self.nEndTime
local curTime = ClientManager.serverTimeStamp
local remainTime = endTime - curTime
if remainTime < 0 then
if remainTime <= 0 then
if self.remainTimer ~= nil then
self.remainTimer:Cancel()
self.remainTimer = nil
end
NovaAPI.SetTMPText(self._mapNode.txtTime, ConfigTable.GetUIText("JointDrill_Act_Challenge_End"))
return
end
local sTimeStr = ""
@@ -142,7 +145,7 @@ function ActivityJointDrillPopUpCtrl:OnBtnClick_Goto()
if nil ~= self.nCurActId then
PopUpManager.InterruptPopUp(self.popUpIndex)
PlayerData.Activity:SendActivityDetailMsg()
local endTime = self.nEndTime
local endTime = self.nActEndTime
local curTime = ClientManager.serverTimeStamp
local remainTime = endTime - curTime
if remainTime <= 0 then
@@ -0,0 +1,160 @@
local ActivityLongestDay_10112PopUpCtrl = class("ActivityLongestDay_10112PopUpCtrl", BaseCtrl)
local TimerManager = require("GameCore.Timer.TimerManager")
local LocalData = require("GameCore.Data.LocalData")
local ClientManager = CS.ClientManager.Instance
ActivityLongestDay_10112PopUpCtrl._mapNodeConfig = {
goContent = {
sNodeName = "---Common---"
},
btnGo = {
sComponentName = "UIButton",
callback = "OnBtnClick_Goto"
},
txtBtnGo = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_PopUp_Goto"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
btnCloseFullscreen = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
txtDate = {sComponentName = "TMP_Text"},
txtTime = {sComponentName = "TMP_Text"},
btnDontShow = {
sComponentName = "UIButton",
callback = "OnBtnClick_DontShowAgain"
},
imgDontShow1 = {},
imgDontShow2 = {},
txtDontShow = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_DontShow_PopUp_Again"
}
}
ActivityLongestDay_10112PopUpCtrl._mapEventConfig = {}
function ActivityLongestDay_10112PopUpCtrl:ShowPopUp(actId, callback, index)
self.popUpIndex = index
self.dontShowAgain = false
self.nCurActId = actId
self.callback = callback
self.actGroupCfg = ConfigTable.GetData("ActivityGroup", self.nCurActId)
self.nOpenTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(self.actGroupCfg.StartTime)
self.nEndTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(self.actGroupCfg.EndTime)
self:RefreshTimeout()
self:RefreshDate()
if nil == self.remainTimer then
self.remainTimer = self:AddTimer(0, 1, "RefreshTimeout", true, true, true)
end
self._mapNode.imgDontShow1:SetActive(not self.dontShowAgain)
self._mapNode.imgDontShow2:SetActive(self.dontShowAgain)
self.anim = self.gameObject:GetComponent("Animator")
self:PlayOpenAnim()
end
function ActivityLongestDay_10112PopUpCtrl:PlayOpenAnim()
if self.anim then
self.anim:Play("open", 0, 0)
end
end
function ActivityLongestDay_10112PopUpCtrl:RefreshDate()
local nOpenMonth = tonumber(os.date("%m", self.nOpenTime))
local nOpenDay = tonumber(os.date("%d", self.nOpenTime))
local nEndMonth = tonumber(os.date("%m", self.nEndTime))
local nEndDay = tonumber(os.date("%d", self.nEndTime))
local strOpenDay = string.format("%d", nOpenDay)
local strEndDay = string.format("%d", nEndDay)
local dateStr = string.format("%s/%s ~ %s/%s", nOpenMonth, strOpenDay, nEndMonth, strEndDay)
NovaAPI.SetTMPText(self._mapNode.txtDate, dateStr)
end
function ActivityLongestDay_10112PopUpCtrl:RefreshTimeout()
local endTime = self.nEndTime
local curTime = ClientManager.serverTimeStamp
local remainTime = endTime - curTime
if remainTime < 0 then
if self.remainTimer ~= nil then
self.remainTimer:Cancel()
self.remainTimer = nil
end
return
end
local sTimeStr = ""
if remainTime <= 60 then
local sec = math.floor(remainTime)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
elseif 60 < remainTime and remainTime <= 3600 then
local min = math.floor(remainTime / 60)
local sec = math.floor(remainTime - min * 60)
if sec == 0 then
min = min - 1
sec = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
elseif 3600 < remainTime and remainTime <= 86400 then
local hour = math.floor(remainTime / 3600)
local min = math.floor((remainTime - hour * 3600) / 60)
if min == 0 then
hour = hour - 1
min = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
elseif 86400 < remainTime then
local day = math.floor(remainTime / 86400)
local hour = math.floor((remainTime - day * 86400) / 3600)
if hour == 0 then
day = day - 1
hour = 24
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
end
NovaAPI.SetTMPText(self._mapNode.txtTime, sTimeStr)
end
function ActivityLongestDay_10112PopUpCtrl:OnBtnClick_DontShowAgain()
self.dontShowAgain = not self.dontShowAgain
self._mapNode.imgDontShow1:SetActive(not self.dontShowAgain)
self._mapNode.imgDontShow2:SetActive(self.dontShowAgain)
LocalData.SetPlayerLocalData("Act_PopUp_DontShow" .. self.nCurActId, self.dontShowAgain)
end
function ActivityLongestDay_10112PopUpCtrl:OnBtnClick_Close()
if self.callback ~= nil then
if self.anim then
self.anim:Play("close")
self:AddTimer(1, 0.2, function()
self.callback()
end, true, true, true)
else
self.callback()
end
end
end
function ActivityLongestDay_10112PopUpCtrl:OnBtnClick_Goto()
if nil ~= self.nCurActId then
PopUpManager.InterruptPopUp(self.popUpIndex)
PlayerData.Activity:SendActivityDetailMsg()
self.anim:Play("close")
self:AddTimer(1, 0.2, function()
local endTime = self.nEndTime
local curTime = ClientManager.serverTimeStamp
local remainTime = endTime - curTime
if remainTime <= 0 then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_Invalid_Tip_3"))
if self.callback ~= nil then
self.callback()
end
return
end
EventManager.Hit(EventId.ClosePanel, PanelId.ActivityPopUp)
if self.actGroupCfg.TransitionId ~= nil and 0 < self.actGroupCfg.TransitionId then
local callback = function()
EventManager.Hit(EventId.OpenPanel, self.actGroupCfg.PanelId, self.actGroupCfg.Id, true)
end
EventManager.Hit(EventId.SetTransition, self.actGroupCfg.TransitionId, callback)
else
EventManager.Hit(EventId.OpenPanel, self.actGroupCfg.PanelId, self.actGroupCfg.Id, true)
end
end, true, true, true)
end
end
return ActivityLongestDay_10112PopUpCtrl
@@ -0,0 +1,103 @@
local ActivityReengagement_101004PopUpCtrl = class("ActivityReengagement_101004PopUpCtrl", BaseCtrl)
local LocalData = require("GameCore.Data.LocalData")
local ClientManager = CS.ClientManager.Instance
ActivityReengagement_101004PopUpCtrl._mapNodeConfig = {
txtTips = {
sComponentName = "TMP_Text",
sLanguageId = "Reengagement_Popup_Tip"
},
btnActivity = {
sComponentName = "Button",
callback = "OnBtnClick_Goto"
},
goContent = {
sNodeName = "---Common---"
},
btnGo = {
sComponentName = "UIButton",
callback = "OnBtnClick_Goto"
},
txtBtnGo = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_PopUp_Goto_1"
},
goRewardItem = {
nCount = 4,
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
},
btnRewardItem = {
nCount = 4,
sNodeName = "goRewardItem",
sComponentName = "UIButton",
callback = "OnClickBtnRewardItem"
},
rtBtn = {}
}
ActivityReengagement_101004PopUpCtrl._mapEventConfig = {}
function ActivityReengagement_101004PopUpCtrl:ShowPopUp(actId, callback, index)
self.popUpIndex = index
self.dontShowAgain = false
self.nCurActId = actId
self.callback = callback
self.actCfg = ConfigTable.GetData("Activity", self.nCurActId)
local actData = PlayerData.Activity:GetActivityDataById(self.nCurActId)
if actData == nil then
return
end
self._mapNode.rtBtn:SetActive(false)
self.tbItemReward = {}
for i = 1, #self._mapNode.goRewardItem do
local item = self._mapNode.goRewardItem[i]
item:SetItem(self.actCfg.reward[i])
end
self._mapNode.imgDontShow1:SetActive(not self.dontShowAgain)
self._mapNode.imgDontShow2:SetActive(self.dontShowAgain)
self.anim = self.gameObject:GetComponent("Animator")
self:PlayOpenAnim()
end
function ActivityReengagement_101004PopUpCtrl:PlayOpenAnim()
if self.anim then
self.anim:Play("open", 0, 0)
end
end
function ActivityReengagement_101004PopUpCtrl:ClosePopUp(callback)
if self.anim ~= nil then
self.anim:Play("close", 0, 0)
self:AddTimer(1, 0.1, function()
if callback ~= nil then
callback()
end
end, true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, 0.1)
elseif callback ~= nil then
callback()
end
end
function ActivityReengagement_101004PopUpCtrl:OnBtnClick_Close()
self:ClosePopUp(self.callback)
end
function ActivityReengagement_101004PopUpCtrl:OnBtnClick_Goto()
local callback = function()
if nil ~= self.nCurActId then
PopUpManager.InterruptPopUp(self.popUpIndex)
PlayerData.Activity:SendActivityDetailMsg()
local endTime = self.nEndTime
local curTime = ClientManager.serverTimeStamp
local remainTime = endTime - curTime
if remainTime <= 0 then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_Invalid_Tip_3"))
if self.callback ~= nil then
self.callback()
end
return
end
EventManager.Hit(EventId.ClosePanel, PanelId.ActivityPopUp)
EventManager.Hit(EventId.OpenPanel, PanelId.ActivityList, self.nCurActId)
end
end
self:ClosePopUp(callback)
end
function ActivityReengagement_101004PopUpCtrl:OnClickBtnRewardItem(btn, index)
UTILS.ClickItemGridWithTips(self.tbItemReward[index], self._mapNode.goRewardItem[index].transform, true, true, false)
end
return ActivityReengagement_101004PopUpCtrl
@@ -3,7 +3,14 @@ OurRegimentTaskPanel._sUIResRootPath = "UI_Activity/"
OurRegimentTaskPanel._tbDefine = {
{
sPrefabPath = "10101/Task.prefab",
sCtrlName = "Game.UI.ActivityTheme.10101.Task.OurRegimentTaskCtrl"
sCtrlName = "Game.UI.ActivityTheme.TaskCommon.TaskCommonCtrl_01"
}
}
local tbImgDbType = {SizeDelta = 1, FillAmount = 2}
function OurRegimentTaskPanel:Awake()
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" and tbParam[3] == nil then
tbParam[3] = tbImgDbType.SizeDelta
end
end
return OurRegimentTaskPanel
@@ -3,7 +3,14 @@ DreamTaskPanel._sUIResRootPath = "UI_Activity/"
DreamTaskPanel._tbDefine = {
{
sPrefabPath = "10102/Task.prefab",
sCtrlName = "Game.UI.ActivityTheme.10102.Task.DreamTaskCtrl"
sCtrlName = "Game.UI.ActivityTheme.TaskCommon.TaskCommonCtrl_01"
}
}
local tbImgDbType = {SizeDelta = 1, FillAmount = 2}
function DreamTaskPanel:Awake()
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" and tbParam[3] == nil then
tbParam[3] = tbImgDbType.SizeDelta
end
end
return DreamTaskPanel
@@ -3,7 +3,14 @@ MiracleTaskPanel._sUIResRootPath = "UI_Activity/"
MiracleTaskPanel._tbDefine = {
{
sPrefabPath = "10103/Task.prefab",
sCtrlName = "Game.UI.ActivityTheme.10103.Task.MiracleTaskCtrl"
sCtrlName = "Game.UI.ActivityTheme.TaskCommon.TaskCommonCtrl_01"
}
}
local tbImgDbType = {SizeDelta = 1, FillAmount = 2}
function MiracleTaskPanel:Awake()
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" and tbParam[3] == nil then
tbParam[3] = tbImgDbType.SizeDelta
end
end
return MiracleTaskPanel
@@ -3,7 +3,14 @@ SpringTaskPanel._sUIResRootPath = "UI_Activity/"
SpringTaskPanel._tbDefine = {
{
sPrefabPath = "10104/Task.prefab",
sCtrlName = "Game.UI.ActivityTheme.10104.Task.SpringTaskCtrl"
sCtrlName = "Game.UI.ActivityTheme.TaskCommon.TaskCommonCtrl_01"
}
}
local tbImgDbType = {SizeDelta = 1, FillAmount = 2}
function SpringTaskPanel:Awake()
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" and tbParam[3] == nil then
tbParam[3] = tbImgDbType.SizeDelta
end
end
return SpringTaskPanel
@@ -3,7 +3,14 @@ WinterNightTaskPanel._sUIResRootPath = "UI_Activity/"
WinterNightTaskPanel._tbDefine = {
{
sPrefabPath = "10105/Task.prefab",
sCtrlName = "Game.UI.ActivityTheme.10105.Task.WinterNightTaskCtrl"
sCtrlName = "Game.UI.ActivityTheme.TaskCommon.TaskCommonCtrl_01"
}
}
local tbImgDbType = {SizeDelta = 1, FillAmount = 2}
function WinterNightTaskPanel:Awake()
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" and tbParam[3] == nil then
tbParam[3] = tbImgDbType.SizeDelta
end
end
return WinterNightTaskPanel
@@ -3,7 +3,14 @@ PostalTaskPanel._sUIResRootPath = "UI_Activity/"
PostalTaskPanel._tbDefine = {
{
sPrefabPath = "10106/Task.prefab",
sCtrlName = "Game.UI.ActivityTheme.10106.Task.PostalTaskCtrl"
sCtrlName = "Game.UI.ActivityTheme.TaskCommon.TaskCommonCtrl_01"
}
}
local tbImgDbType = {SizeDelta = 1, FillAmount = 2}
function PostalTaskPanel:Awake()
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" and tbParam[3] == nil then
tbParam[3] = tbImgDbType.SizeDelta
end
end
return PostalTaskPanel
@@ -139,7 +139,7 @@ function GunStormTaskCtrl:BuildData(nActivityId)
nStatus = taskData.nStatus,
sDesc = mapData.Desc,
nRarity = mapData.Rarity,
nJumpTo = mapData.JumpTo,
tbJumpTo = mapData.JumpTo,
nCur = taskData.nCur,
nMax = taskData.nMax,
tbTaskRewardId = {},
@@ -318,11 +318,11 @@ function GunStormTaskCtrl:onGridRefresh_Task(go)
_tr.localScale = Vector3.zero
end
end
tr:Find("tmpUndone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 >= mapTask.nJumpTo and Vector3.one or Vector3.zero
tr:Find("tmpUndone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 >= #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Complete and Vector3.one or Vector3.zero
tr:Find("btnDone"):GetChild(0).name = tostring(mapTask.nTaskId)
tr:Find("btnJump").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 < mapTask.nJumpTo and Vector3.one or Vector3.zero
tr:Find("btnJump"):GetChild(0).name = tostring(mapTask.nJumpTo)
tr:Find("btnJump").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 < #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnJump"):GetChild(0).name = tostring(nIndex)
tr:Find("goDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Received and Vector3.one or Vector3.zero
end
function GunStormTaskCtrl:onEvent_ClickRewardItem(goBtn)
@@ -345,9 +345,12 @@ function GunStormTaskCtrl:onEvent_ClickTaskDone(goBtn)
end
end
function GunStormTaskCtrl:onEvent_ClickTaskJump(goBtn)
local nJumpId = tonumber(goBtn.transform:GetChild(0).name)
if nJumpId ~= nil and 0 < nJumpId then
JumpUtil.JumpTo(nJumpId)
local nIndex = tonumber(goBtn.transform:GetChild(0).name)
local mapData = self.tbData[self.nCurGroupIndex]
local mapTask = mapData.tbTaskData[nIndex]
local JumpToData = mapTask.tbJumpTo
if JumpToData ~= nil and 0 < #JumpToData then
JumpUtil.JumpToActivity(JumpToData)
end
end
function GunStormTaskCtrl:refresh_Group()
@@ -615,7 +615,7 @@ function SummerAdvCtrl:OnBtn_ClickActivityEntrance(btn, nIndex)
local func = function()
EventManager.Hit(EventId.OpenPanel, actData.PanelId, actData.ActivityId, self.nActId)
end
EventManager.Hit(EventId.SetTransition, 37, func)
EventManager.Hit(EventId.SetTransition, 52, func)
elseif self.ActivityGroupCfg.TransitionId ~= nil and self.ActivityGroupCfg.TransitionId > 0 then
EventManager.Hit(EventId.SetTransition, self.ActivityGroupCfg.TransitionId, function()
EventManager.Hit(EventId.OpenPanel, actData.PanelId, actData.ActivityId)
@@ -0,0 +1,173 @@
local ActivityCultivationManualCtrl = class("ActivityCultivationManualCtrl", BaseCtrl)
local TimerManager = require("GameCore.Timer.TimerManager")
local ClientManager = CS.ClientManager.Instance
ActivityCultivationManualCtrl._mapNodeConfig = {
btnGo = {
sComponentName = "UIButton",
callback = "OnBtnClick_Go"
},
txtTime = {sComponentName = "TMP_Text"},
svReward = {
sNodeName = "PreviewUpgradeMaterial",
sComponentName = "LoopScrollView"
},
txtAdvanceMat = {
sComponentName = "TMP_Text",
sLanguageId = "MessageBox_Reward"
},
txtDate = {sComponentName = "TMP_Text"},
imgLock = {},
txtLock = {sComponentName = "TMP_Text"},
imgEnd = {},
txtActivityEnd = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_End"
},
imgRemaineTime = {},
txtBtnGo = {
sComponentName = "TMP_Text",
sLanguageId = "TowerDef_EnterActivity"
},
txtBtnActDetail = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Btn_Detail"
},
btnActDetail = {
sComponentName = "UIButton",
callback = "OnBtnClick_Detail"
}
}
function ActivityCultivationManualCtrl:Awake()
self.tbGridCtrl = {}
end
function ActivityCultivationManualCtrl:OnDisable()
self:UnbindCtrl()
end
function ActivityCultivationManualCtrl:InitActData(actData)
self.actData = actData
self:RefreshLockState()
self:RefreshDate()
self:RefreshTimeout()
self:RefreshReward()
end
function ActivityCultivationManualCtrl:UnInit()
self:UnbindCtrl()
end
function ActivityCultivationManualCtrl:UnbindCtrl()
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGridCtrl[nInstanceId] = nil
end
self.tbGridCtrl = {}
end
function ActivityCultivationManualCtrl:RefreshLockState()
local IsUnlock, txtLock = self.actData:IsUnlock()
self._mapNode.imgLock.gameObject:SetActive(not IsUnlock)
self._mapNode.btnGo.gameObject:SetActive(IsUnlock)
if not IsUnlock then
NovaAPI.SetTMPText(self._mapNode.txtLock, txtLock)
end
end
function ActivityCultivationManualCtrl:RefreshTimeout()
local endTime = self.actData:GetActGroupEndTime()
local curTime = ClientManager.serverTimeStamp
local remainTime = endTime - curTime
self._mapNode.imgRemaineTime:SetActive(0 < remainTime)
self._mapNode.imgEnd:SetActive(remainTime <= 0)
if remainTime < 0 and self.remainTimer ~= nil then
TimerManager.Remove(self.remainTimer)
self.remainTimer = nil
return
end
local sTimeStr = ""
if remainTime <= 60 then
local sec = math.floor(remainTime)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
elseif 60 < remainTime and remainTime <= 3600 then
local min = math.floor(remainTime / 60)
local sec = math.floor(remainTime - min * 60)
if sec == 0 then
min = min - 1
sec = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
elseif 3600 < remainTime and remainTime <= 86400 then
local hour = math.floor(remainTime / 3600)
local min = math.floor((remainTime - hour * 3600) / 60)
if min == 0 then
hour = hour - 1
min = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
elseif 86400 < remainTime then
local day = math.floor(remainTime / 86400)
local hour = math.floor((remainTime - day * 86400) / 3600)
if hour == 0 then
day = day - 1
hour = 24
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
end
NovaAPI.SetTMPText(self._mapNode.txtTime, sTimeStr)
end
function ActivityCultivationManualCtrl:RefreshDate()
local nOpenMonth, nOpenDay, nEndMonth, nEndDay, nOpenYear, nEndYear = self.actData:GetActGroupDate()
local strOpenDay = string.format("%d", nOpenDay)
local strEndDay = string.format("%d", nEndDay)
local dateStr = string.format("%s/%s/%s ~ %s/%s/%s", nOpenYear, nOpenMonth, strOpenDay, nEndYear, nEndMonth, strEndDay)
NovaAPI.SetTMPText(self._mapNode.txtDate, dateStr)
end
function ActivityCultivationManualCtrl:RefreshReward()
local actGroupCfg = self.actData:GetActGroupCfgData()
local rewardData = actGroupCfg.RewardsShow
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGridCtrl[nInstanceId] = nil
end
self._mapNode.svReward:Init(#rewardData, self, self.RefreshRewardGridItem, self.BtnRewardGridClick)
end
function ActivityCultivationManualCtrl:RefreshRewardGridItem(go, index)
local actGroupCfg = self.actData:GetActGroupCfgData()
local rewardData = actGroupCfg.RewardsShow
local rewardId = rewardData[index + 1]
local nInstanceID = go:GetInstanceID()
if not self.tbGridCtrl[nInstanceID] then
self.tbGridCtrl[nInstanceID] = self:BindCtrlByNode(go, "Game.UI.TemplateEx.TemplateItemCtrl")
end
self.tbGridCtrl[nInstanceID]:SetItem(rewardId)
end
function ActivityCultivationManualCtrl:BtnRewardGridClick(goGrid, gridIndex)
local nIndex = gridIndex + 1
local actGroupCfg = self.actData:GetActGroupCfgData()
local rewardData = actGroupCfg.RewardsShow
local item = goGrid.transform:Find("AnimRoot/item")
UTILS.ClickItemGridWithTips(rewardData[nIndex], item.transform, true, true, false)
end
function ActivityCultivationManualCtrl:OnBtnClick_Go()
local actGroupCfg = self.actData:GetActGroupCfgData()
if actGroupCfg ~= nil and actGroupCfg ~= nil and actGroupCfg.PanelId ~= nil and actGroupCfg.PanelId > 0 then
if actGroupCfg.TransitionId ~= nil and 0 < actGroupCfg.TransitionId then
local callback = function()
EventManager.Hit(EventId.OpenPanel, actGroupCfg.PanelId, actGroupCfg.Id, true)
end
EventManager.Hit(EventId.SetTransition, actGroupCfg.TransitionId, callback)
else
EventManager.Hit(EventId.OpenPanel, actGroupCfg.PanelId, actGroupCfg.Id, true)
end
end
end
function ActivityCultivationManualCtrl:OnBtnClick_Detail()
local actGroupCfg = self.actData:GetActGroupCfgData()
if actGroupCfg == nil then
return
end
local msg = {
nType = AllEnum.MessageBox.Desc,
sContent = actGroupCfg.DesText,
sTitle = ConfigTable.GetUIText("Activity_Btn_Detail")
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
function ActivityCultivationManualCtrl:ClearActivity()
end
return ActivityCultivationManualCtrl
@@ -0,0 +1,159 @@
local ActivityLevelsLvCtrl = class("ActivityLevelsLvCtrl", BaseCtrl)
local lvIndexTitle = "{0}-{1}"
local colorLockSelectImage = Color(0.23921568627450981, 0.27450980392156865, 0.3843137254901961, 1)
local colorLockUnSelectImage = Color(0.4, 0.48627450980392156, 0.5647058823529412, 1)
ActivityLevelsLvCtrl._mapNodeConfig = {
tog = {sComponentName = "UIButton"},
Select = {},
SelectAni = {sNodeName = "Select", sComponentName = "Animator"},
unSelect = {},
txt_Select = {sComponentName = "TMP_Text"},
txt_unSelect = {sComponentName = "TMP_Text"},
rt_Targets = {},
btnTarget = {sComponentName = "Button", nCount = 3},
rtLockInfo = {},
rtLockInfoDay = {sComponentName = "Image"},
imgLockMask = {},
bgCondition = {},
rtLockPreLv = {},
rtLockPreLvSelect = {sComponentName = "Image"},
redH = {},
AnimSwitch = {sComponentName = "Animator"},
imgSlc = {},
imgDeco4 = {},
imgDeco5 = {},
imgDeco6 = {},
imgDeco7 = {}
}
function ActivityLevelsLvCtrl:InitData(parent, nType, activityData, data, isOpen, isLevelUnLock)
self._mapNode.imgSlc:SetActive(false)
local txtLockConditionTime = self._mapNode.bgCondition.transform:Find("txtLockCondition"):GetComponent("TMP_Text")
if self.timerRun ~= nil then
self.timerRun:Pause(true)
self.timerRun = nil
end
self._mapNode.Select:SetActive(false)
self.lvLock = false
self._mapNode.rtLockInfoDay.gameObject:SetActive(false)
self.isShowTexLv = false
self.isOpen = isOpen
if isOpen and isLevelUnLock then
self.isShowTexLv = true
self._mapNode.rt_Targets:SetActive(true)
for i = 1, 3 do
self._mapNode.btnTarget[i].interactable = i <= data.Star
end
self._mapNode.rtLockInfo:SetActive(false)
self._mapNode.rtLockPreLv:SetActive(false)
self._mapNode.bgCondition:SetActive(false)
elseif isOpen and not isLevelUnLock then
self._mapNode.rt_Targets:SetActive(false)
self._mapNode.rtLockInfo:SetActive(true)
self._mapNode.imgLockMask:SetActive(false)
self._mapNode.rtLockPreLv:SetActive(true)
self._mapNode.bgCondition:SetActive(false)
elseif not isOpen then
self._mapNode.rt_Targets:SetActive(false)
self._mapNode.rtLockInfo:SetActive(true)
self._mapNode.imgLockMask:SetActive(true)
self._mapNode.rtLockInfoDay.gameObject:SetActive(true)
self._mapNode.rtLockPreLv:SetActive(false)
self._mapNode.bgCondition:SetActive(true)
local day = activityData:GetUnLockDay(nType, data.baseData.Id)
if day == 0 then
local timerCount = function()
local hour, min, sec = parent.activityLevelsData:GetUnLockHour(nType, data.baseData.Id)
if 0 < hour then
NovaAPI.SetTMPText(txtLockConditionTime, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Hour_Color_Common"), "ff96b7", hour))
elseif 0 < min then
NovaAPI.SetTMPText(txtLockConditionTime, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Min_Color_Common"), "ff96b7", min))
elseif 0 < sec then
NovaAPI.SetTMPText(txtLockConditionTime, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Sec_Color_Common"), "ff96b7", sec))
end
end
timerCount()
self.timerRun = self:AddTimer(0, 1, function()
timerCount()
end, true, true, false)
else
NovaAPI.SetTMPText(txtLockConditionTime, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Day_Color_Common"), "ff96b7", day))
end
self.lvLock = true
end
local strTitle = ""
if nType == GameEnum.ActivityLevelType.Explore then
strTitle = orderedFormat(lvIndexTitle, 1, data.baseData.Difficulty)
elseif nType == GameEnum.ActivityLevelType.Adventure then
strTitle = orderedFormat(lvIndexTitle, 2, data.baseData.Difficulty)
elseif nType == GameEnum.ActivityLevelType.HARD then
strTitle = orderedFormat(lvIndexTitle, 3, data.baseData.Difficulty)
end
NovaAPI.SetTMPText(self._mapNode.txt_Select, strTitle)
NovaAPI.SetTMPText(self._mapNode.txt_unSelect, strTitle)
self._mapNode.tog.onClick:RemoveAllListeners()
local clickCb = function()
if self._mapNode.Select.activeSelf == true then
return
end
self:SetDefault(true)
parent:SetSelectObj(self)
parent:RefreshInstanceInfo(nType, data.baseData.Difficulty, false)
parent.activityLevelsData:ChangeRedDot(nType, data.baseData.Id)
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
end
self._mapNode.tog.onClick:AddListener(clickCb)
local bInActGroup, nActGroupId = PlayerData.Activity:IsActivityInActivityGroup(parent.nActId)
if bInActGroup then
if nType == GameEnum.ActivityLevelType.Explore then
RedDotManager.RegisterNode(RedDotDefine.ActivityLevel_Explore_Level, {
nActGroupId,
data.baseData.Id
}, self._mapNode.redH)
elseif nType == GameEnum.ActivityLevelType.Adventure then
RedDotManager.RegisterNode(RedDotDefine.ActivityLevel_Adventure_Level, {
nActGroupId,
data.baseData.Id
}, self._mapNode.redH)
elseif nType == GameEnum.ActivityLevelType.HARD then
RedDotManager.RegisterNode(RedDotDefine.ActivityLevel_Hard_Level, {
nActGroupId,
data.baseData.Id
}, self._mapNode.redH)
end
end
end
function ActivityLevelsLvCtrl:SetDefault(isOn)
if self._mapNode.AnimSwitch.enabled == true then
self._mapNode.AnimSwitch.enabled = false
end
if not isOn then
self:ShowArrowAni(false)
end
self._mapNode.Select:SetActive(isOn)
self._mapNode.imgSlc:SetActive(isOn)
if isOn then
self._mapNode.SelectAni:Play("10111_ActitvityLevels_Select")
end
if self.lvLock then
NovaAPI.CtrlDotweenAnimation(self._mapNode.imgDeco4, 2)
NovaAPI.CtrlDotweenAnimation(self._mapNode.imgDeco5, 2)
NovaAPI.CtrlDotweenAnimation(self._mapNode.imgDeco6, 2)
NovaAPI.CtrlDotweenAnimation(self._mapNode.imgDeco7, 2)
end
NovaAPI.CtrlDotweenAnimation(self._mapNode.imgDeco4, not (not isOn or self.lvLock) and 1 or 0)
NovaAPI.CtrlDotweenAnimation(self._mapNode.imgDeco5, not (not isOn or self.lvLock) and 1 or 0)
NovaAPI.CtrlDotweenAnimation(self._mapNode.imgDeco6, not (not isOn or self.lvLock) and 1 or 0)
NovaAPI.CtrlDotweenAnimation(self._mapNode.imgDeco7, not (not isOn or self.lvLock) and 1 or 0)
end
function ActivityLevelsLvCtrl:ShowArrowAni(isShow)
end
function ActivityLevelsLvCtrl:FadeIn()
EventManager.Hit(EventId.SetTransition)
end
function ActivityLevelsLvCtrl:OnDisable()
if self.timerRun ~= nil then
self.timerRun:Pause(true)
self.timerRun = nil
end
end
return ActivityLevelsLvCtrl
@@ -0,0 +1,790 @@
local ActivityLevelsSelectCtrl = class("ActivityLevelsSelectCtrl", BaseCtrl)
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
local mapToggle = {
[1] = GameEnum.diffculty.Diffculty_1,
[2] = GameEnum.diffculty.Diffculty_2,
[3] = GameEnum.diffculty.Diffculty_3,
[4] = GameEnum.diffculty.Diffculty_4,
[5] = GameEnum.diffculty.Diffculty_5,
[6] = GameEnum.diffculty.Diffculty_6,
[7] = GameEnum.diffculty.Diffculty_7,
[8] = GameEnum.diffculty.Diffculty_8,
[9] = GameEnum.diffculty.Diffculty_9,
[10] = GameEnum.diffculty.Diffculty_10
}
local colorSelect = Color(1.0, 0.9882352941176471, 0.9568627450980393, 1)
local colorUnSelect = Color(0.4, 0.13333333333333333, 0.15294117647058825, 1)
local colorSelectLock = Color(0.11764705882352941, 0.12549019607843137, 0.17254901960784313, 1)
local colorUnSelectLock = Color(0.4823529411764706, 0.5333333333333333, 0.6509803921568628, 1)
local timeUnLockColor = "fff7ca"
local colorLockSelectImage = Color(1, 1, 1, 1)
local colorLockUnSelectImage = Color(0.23921568627450981, 0.27450980392156865, 0.3843137254901961, 1)
local colorConditionsUnLock = Color(0.23921568627450981, 0.27450980392156865, 0.3843137254901961, 0.5)
local colorConditionsLock = Color(0.23921568627450981, 0.27450980392156865, 0.3843137254901961, 1)
local lvIndexTitle = "{0}-{1}"
local twelveLvGroupPadding = {
205,
80,
48,
0
}
local twelveLvGroupPaddingOpen = {
205,
850,
48,
0
}
local fourLvGroupPadding = {
400,
50,
48,
0
}
local fourLvGroupPaddingOpen = {
205,
800,
48,
0
}
ActivityLevelsSelectCtrl._mapNodeConfig = {
TopBar = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
goEnemyInfo = {
sCtrlName = "Game.UI.MainlineEx.MainlineMonsterInfoCtrl"
},
togTypeExplore = {
sComponentName = "UIButton",
callback = "OnBtnClick_TogTypeExplore"
},
togTypeExploreCtrl = {
sNodeName = "togTypeExplore",
sCtrlName = "Game.UI.TemplateEx.TemplateToggleCtrl"
},
lockExplore = {
sComponentName = "UIButton",
callback = "OnClick_BtnLockExplore"
},
redExplore = {},
togTypeAdventure = {
sComponentName = "UIButton",
callback = "OnBtnClick_TogTypeAdventure"
},
togTypeAdventureCtrl = {
sNodeName = "togTypeAdventure",
sCtrlName = "Game.UI.TemplateEx.TemplateToggleCtrl"
},
lockAdventure = {
sComponentName = "UIButton",
callback = "OnClick_BtnLockAdventure"
},
redAdventure = {},
togTypeHard = {
sComponentName = "UIButton",
callback = "OnBtnClick_TogTypeHard"
},
togTypeHardCtrl = {
sNodeName = "togTypeHard",
sCtrlName = "Game.UI.TemplateEx.TemplateToggleCtrl"
},
lockHard = {
sComponentName = "UIButton",
callback = "OnClick_BtnLockHard"
},
redHard = {},
rtToggles = {
sNodeName = "srToggle",
sComponentName = "UIScrollRect"
},
rtTogglesTmp = {
sNodeName = "rt_ToggleTmp",
sComponentName = "Transform"
},
togRoot = {
nCount = 12,
sCtrlName = "Game.UI.ActivityTheme.10111.ActivityLevels.ActivityLevelsLvCtrl"
},
rt_Toggle = {},
rt_ToggleTrans = {sNodeName = "rt_Toggle", sComponentName = "Transform"},
btnCloseBg = {
sComponentName = "UIButton",
callback = "OnBtnClick_CloseBossInfo"
},
rtBoss = {},
rtBossAni = {sNodeName = "rtBoss", sComponentName = "Animator"},
txtRecommendLevel = {
sNodeName = "txtSuggestLevel",
sComponentName = "TMP_Text"
},
txtTitle = {
sComponentName = "TMP_Text",
sLanguageId = "InfinityTower_Recommend_Lv"
},
txtBuildTitle = {
sComponentName = "TMP_Text",
sLanguageId = "InfinityTower_Recommend_Construct"
},
imgBuild = {sComponentName = "Image"},
TMPName = {sComponentName = "TMP_Text"},
TMPLevel = {sComponentName = "TMP_Text"},
detailDescSc = {sComponentName = "Transform"},
detailDesc = {sComponentName = "TMP_Text"},
btnEnemyInfo = {
sComponentName = "UIButton",
callback = "OnBtnClick_EnemyInfo"
},
tex_EnemyInfo = {
sComponentName = "TMP_Text",
sLanguageId = "Equipment_Instance_EnemyInfo"
},
txtTitleTarget = {
sComponentName = "TMP_Text",
sLanguageId = "RogueBoss_Pause_Target"
},
txtReward = {
sComponentName = "TMP_Text",
sLanguageId = "Level_Award"
},
Task = {sComponentName = "Transform", nCount = 3},
rewardRoot = {sComponentName = "Transform"},
btn_itemTemp = {},
btnListRoot = {},
btnRaid = {
sComponentName = "UIButton",
callback = "OnClickBtnRaid"
},
txtBtnRaid = {
sComponentName = "TMP_Text",
sLanguageId = "Raid_Title_Raid"
},
btnGo = {
sComponentName = "UIButton",
callback = "OnClickBtnGo"
},
txtBtnGoRaidUnlock = {
sComponentName = "TMP_Text",
sLanguageId = "Maninline_Btn_Go"
},
txtBtnGo = {
sComponentName = "TMP_Text",
sLanguageId = "Maninline_Btn_Go"
},
goCoin = {},
txtTicketsCount = {sComponentName = "TMP_Text"},
btnRaidUnlock = {
sComponentName = "UIButton",
callback = "OnClickBtnGo"
},
goCoinRaidUnlock = {},
txtTicketsCountRaidUnlock = {sComponentName = "TMP_Text"},
grpRaidUnlock = {},
TMPRaidUnlockHint = {
sComponentName = "TMP_Text",
sLanguageId = "Raid_Btn_CondStar"
},
ListConditions = {},
ListConditionsObj = {
sNodeName = "Conditions_",
nCount = 2
}
}
ActivityLevelsSelectCtrl._mapEventConfig = {
[EventId.UpdateEnergy] = "OnEvent_UpdateEnergy",
[EventId.ClosePanel] = "OnEvent_ClosePanel"
}
ActivityLevelsSelectCtrl._mapRedDotConfig = {}
function ActivityLevelsSelectCtrl:Awake()
self.detailDescContent = self._mapNode.detailDescSc:Find("Viewport/Content").transform
self.curRequireEnergy = 0
local param = self:GetPanelParam()
if type(param) == "table" then
self.nActId = param[1]
end
self.nLevelType = GameEnum.ActivityLevelType.Explore
self.tabRewardList = {}
self.AniRoot = self.gameObject:GetComponent("Animator")
local bInActGroup, nActGroupId = PlayerData.Activity:IsActivityInActivityGroup(self.nActId)
if bInActGroup then
RedDotManager.RegisterNode(RedDotDefine.ActivityLevel_Explore, {nActGroupId}, self._mapNode.redExplore)
RedDotManager.RegisterNode(RedDotDefine.ActivityLevel_Adventure, {nActGroupId}, self._mapNode.redAdventure)
RedDotManager.RegisterNode(RedDotDefine.ActivityLevel_Hard, {nActGroupId}, self._mapNode.redHard)
end
end
function ActivityLevelsSelectCtrl:OnEnable()
self.isOpenLvMsg = false
self:ShowBossInfo(false, true)
self.timeTab = {}
EventManager.Hit(EventId.SetTransition)
self.SelectTogPreLvLock = nil
self.AniRoot:Play("ActivityLevelsSelect_in")
self:Init()
function self.onScrollValueChanged(value)
self._mapNode.rtTogglesTmp.localPosition = self._mapNode.rt_ToggleTrans.localPosition
end
self._mapNode.rtToggles.onValueChanged:AddListener(self.onScrollValueChanged)
end
function ActivityLevelsSelectCtrl:OnDisable()
self.timeTab = {}
for i = 1, #self.tabRewardList do
local go = self.tabRewardList[i].gameObject
local btnSelect = self.tabRewardList[i].gameObject:GetComponent("UIButton")
btnSelect.onClick:RemoveAllListeners()
self:UnbindCtrlByNode(self.tabRewardList[i])
destroy(go)
end
self.tabRewardList = {}
self.SelectTogPreLvLock = nil
self.SelectObj = nil
if self.onScrollValueChanged ~= nil then
self._mapNode.rtToggles.onValueChanged:RemoveListener(self.onScrollValueChanged)
self.onScrollValueChanged = nil
end
end
function ActivityLevelsSelectCtrl:OnDestroy(...)
end
function ActivityLevelsSelectCtrl:Init()
self.activityLevelsData = PlayerData.Activity:GetActivityDataById(self.nActId)
self:RefreshTogTypeCount()
self:Refresh()
end
function ActivityLevelsSelectCtrl:Refresh()
self.nLevelType = self.activityLevelsData:GetDefaultSelectionType()
self:RefreshTogType(self.nLevelType)
local nDifficulty = self.activityLevelsData:GetDefaultSelectionDifficulty(self.nLevelType)
self:RefreshTogList(self.nLevelType, nDifficulty)
end
function ActivityLevelsSelectCtrl:RefreshTogTypeCount()
self._mapNode.togTypeExploreCtrl:SetText(ConfigTable.GetUIText("ActivityLevels_Explore"))
self._mapNode.togTypeAdventureCtrl:SetText(ConfigTable.GetUIText("ActivityLevels_Adventure"))
self._mapNode.togTypeHardCtrl:SetText(ConfigTable.GetUIText("ActivityLevels_Hard"))
self._mapNode.togTypeExploreCtrl:SetDefaultActivity(self.nLevelType == GameEnum.ActivityLevelType.Explore)
self._mapNode.togTypeAdventureCtrl:SetDefaultActivity(self.nLevelType == GameEnum.ActivityLevelType.Adventure)
self._mapNode.togTypeHardCtrl:SetDefaultActivity(self.nLevelType == GameEnum.ActivityLevelType.HARD)
local objExploreCert = self._mapNode.togTypeExplore.gameObject.transform:Find("AnimRoot/AnimSwitch/iconCert").gameObject
local objAdventureCert = self._mapNode.togTypeAdventure.gameObject.transform:Find("AnimRoot/AnimSwitch/iconCert").gameObject
local objHardCert = self._mapNode.togTypeHard.gameObject.transform:Find("AnimRoot/AnimSwitch/iconCert").gameObject
self.firstExploreLevel = self.activityLevelsData.levelTabExploreDifficulty[1]
local isOpenExplore = self.activityLevelsData:GetLevelDayOpen(GameEnum.ActivityLevelType.Explore, self.firstExploreLevel)
self._mapNode.lockExplore.gameObject:SetActive(not isOpenExplore)
self.firstAdventureLevel = self.activityLevelsData.levelTabAdventureDifficulty[1]
local isOpenAdventure = self.activityLevelsData:GetLevelDayOpen(GameEnum.ActivityLevelType.Adventure, self.firstAdventureLevel)
self._mapNode.lockAdventure.gameObject:SetActive(not isOpenAdventure)
local txt_SelectAdventure = self._mapNode.togTypeAdventure.gameObject.transform:Find("AnimRoot/AnimSwitch/txt_Select").gameObject
local txt_unSelectAdventure = self._mapNode.togTypeAdventure.gameObject.transform:Find("AnimRoot/AnimSwitch/txt_unSelect").gameObject
txt_SelectAdventure.transform.localScale = isOpenAdventure == true and Vector3.one or Vector3.zero
txt_unSelectAdventure.transform.localScale = isOpenAdventure == true and Vector3.one or Vector3.zero
self.firstHardLevel = self.activityLevelsData.levelTabHardDifficulty[1]
local isOpenHard = self.activityLevelsData:GetLevelDayOpen(GameEnum.ActivityLevelType.HARD, self.firstHardLevel)
self._mapNode.lockHard.gameObject:SetActive(not isOpenHard)
local txt_SelectHard = self._mapNode.togTypeHard.gameObject.transform:Find("AnimRoot/AnimSwitch/txt_Select").gameObject
local txt_unSelectHard = self._mapNode.togTypeHard.gameObject.transform:Find("AnimRoot/AnimSwitch/txt_unSelect").gameObject
txt_SelectHard.transform.localScale = isOpenHard == true and Vector3.one or Vector3.zero
txt_unSelectHard.transform.localScale = isOpenHard == true and Vector3.one or Vector3.zero
objExploreCert:SetActive(true)
for i, v in pairs(self.activityLevelsData.levelTabExplore) do
if v.Star < 3 then
objExploreCert:SetActive(false)
break
end
end
objAdventureCert:SetActive(true)
for i, v in pairs(self.activityLevelsData.levelTabAdventure) do
if v.Star < 3 then
objAdventureCert:SetActive(false)
break
end
end
objHardCert:SetActive(true)
for i, v in pairs(self.activityLevelsData.levelTabHard) do
if v.Star < 3 then
objHardCert:SetActive(false)
break
end
end
end
function ActivityLevelsSelectCtrl:OnClick_BtnLockExplore()
self:FirstLevelLockTips(GameEnum.ActivityLevelType.Explore, self.firstExploreLevel)
end
function ActivityLevelsSelectCtrl:OnClick_BtnLockAdventure()
self:FirstLevelLockTips(GameEnum.ActivityLevelType.Adventure, self.firstAdventureLevel)
end
function ActivityLevelsSelectCtrl:OnClick_BtnLockHard()
self:FirstLevelLockTips(GameEnum.ActivityLevelType.HARD, self.firstHardLevel)
end
function ActivityLevelsSelectCtrl:FirstLevelLockTips(nType, nLevel)
local day = self.activityLevelsData:GetUnLockDay(nType, nLevel)
local strTips = ""
if day == 0 then
local hour, min, sec = self.activityLevelsData:GetUnLockHour(nType, nLevel)
if 0 < hour then
strTips = orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Hour"), hour)
elseif 0 < min then
strTips = orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Min"), min)
elseif 0 < sec then
strTips = orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Sec"), sec)
end
else
strTips = orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_DayOpen"), day)
end
EventManager.Hit(EventId.OpenMessageBox, strTips)
end
function ActivityLevelsSelectCtrl:OnBtnClick_TogTypeExplore()
if self.nLevelType == GameEnum.ActivityLevelType.Explore then
return
end
self:CloseAllTimer()
self.AniRoot:Play("ActivityLevelsSelect_in1")
self.nLevelType = GameEnum.ActivityLevelType.Explore
self:RefreshTogType(self.nLevelType)
local nDifficulty = self.activityLevelsData:GetDefaultSelectionDifficulty(self.nLevelType)
self:RefreshTogList(self.nLevelType, nDifficulty)
end
function ActivityLevelsSelectCtrl:OnBtnClick_TogTypeAdventure()
if self.nLevelType == GameEnum.ActivityLevelType.Adventure then
return
end
self:CloseAllTimer()
self.AniRoot:Play("ActivityLevelsSelect_in1")
self.nLevelType = GameEnum.ActivityLevelType.Adventure
self:RefreshTogType(self.nLevelType)
local nDifficulty = self.activityLevelsData:GetDefaultSelectionDifficulty(self.nLevelType)
self:RefreshTogList(self.nLevelType, nDifficulty)
end
function ActivityLevelsSelectCtrl:OnBtnClick_TogTypeHard()
if self.nLevelType == GameEnum.ActivityLevelType.HARD then
return
end
self:CloseAllTimer()
self.AniRoot:Play("ActivityLevelsSelect_in1")
self.nLevelType = GameEnum.ActivityLevelType.HARD
self:RefreshTogType(self.nLevelType)
local nDifficulty = self.activityLevelsData:GetDefaultSelectionDifficulty(self.nLevelType)
self:RefreshTogList(self.nLevelType, nDifficulty)
end
function ActivityLevelsSelectCtrl:CloseAllTimer()
for i, v in pairs(self.timeTab) do
v:Pause(true)
end
self.timeTab = {}
end
function ActivityLevelsSelectCtrl:RefreshTogType(nType)
self._mapNode.togTypeExploreCtrl:SetTrigger(nType == GameEnum.ActivityLevelType.Explore)
self._mapNode.togTypeAdventureCtrl:SetTrigger(nType == GameEnum.ActivityLevelType.Adventure)
self._mapNode.togTypeHardCtrl:SetTrigger(nType == GameEnum.ActivityLevelType.HARD)
self._mapNode.togTypeExploreCtrl:SetDefaultActivity(nType == GameEnum.ActivityLevelType.Explore)
self._mapNode.togTypeAdventureCtrl:SetDefaultActivity(nType == GameEnum.ActivityLevelType.Adventure)
self._mapNode.togTypeHardCtrl:SetDefaultActivity(nType == GameEnum.ActivityLevelType.HARD)
end
function ActivityLevelsSelectCtrl:RefreshTogList(nType, nDifficulty)
self.SelectObj = nil
local tabLevelInfo, tabLevelInfoDifficulty
self.currentTypeLvCount = 0
local isOpenAdventure = self.activityLevelsData:GetLevelDayOpen(GameEnum.ActivityLevelType.Adventure, self.firstAdventureLevel)
local isOpenHard = self.activityLevelsData:GetLevelDayOpen(GameEnum.ActivityLevelType.HARD, self.firstHardLevel)
local tmpImageAdventure = self._mapNode.lockAdventure.gameObject.transform:Find("Image"):GetComponent("Image")
local tmpImageHard = self._mapNode.lockHard.gameObject.transform:Find("Image"):GetComponent("Image")
if nType == GameEnum.ActivityLevelType.Explore then
tabLevelInfo = self.activityLevelsData.levelTabExplore
tabLevelInfoDifficulty = self.activityLevelsData.levelTabExploreDifficulty
NovaAPI.SetImageColor(tmpImageAdventure, colorLockUnSelectImage)
NovaAPI.SetImageColor(tmpImageHard, colorLockUnSelectImage)
elseif nType == GameEnum.ActivityLevelType.Adventure then
tabLevelInfo = self.activityLevelsData.levelTabAdventure
tabLevelInfoDifficulty = self.activityLevelsData.levelTabAdventureDifficulty
if isOpenAdventure then
NovaAPI.SetImageColor(tmpImageAdventure, colorLockUnSelectImage)
else
NovaAPI.SetImageColor(tmpImageAdventure, colorLockSelectImage)
end
NovaAPI.SetImageColor(tmpImageHard, colorLockUnSelectImage)
else
tabLevelInfo = self.activityLevelsData.levelTabHard
tabLevelInfoDifficulty = self.activityLevelsData.levelTabHardDifficulty
NovaAPI.SetImageColor(tmpImageAdventure, colorLockUnSelectImage)
if isOpenHard then
NovaAPI.SetImageColor(tmpImageHard, colorLockUnSelectImage)
else
NovaAPI.SetImageColor(tmpImageHard, colorLockSelectImage)
end
end
self.currentTypeLvCount = #tabLevelInfoDifficulty
self._mapNode.rtToggles.gameObject:SetActive(true)
local isFour = self.currentTypeLvCount == 4
if self.isOpenLvMsg == false then
local tmpPadding = isFour and fourLvGroupPadding or twelveLvGroupPadding
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, tmpPadding[1], tmpPadding[2], tmpPadding[3], tmpPadding[4])
else
local tmpPadding = isFour and fourLvGroupPaddingOpen or twelveLvGroupPaddingOpen
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, tmpPadding[1], tmpPadding[2], tmpPadding[3], tmpPadding[4])
end
for i = 1, 12 do
self._mapNode.togRoot[i].gameObject:SetActive(i <= self.currentTypeLvCount)
end
for i = 1, self.currentTypeLvCount do
do
local tmpId = tabLevelInfoDifficulty[i]
local tmpData = tabLevelInfo[tmpId]
local isOpen = self.activityLevelsData:GetLevelDayOpen(nType, tmpData.baseData.Id)
local isLevelUnLock = self.activityLevelsData:GetLevelUnLock(nType, tmpData.baseData.Id)
self._mapNode.togRoot[i]:InitData(self, nType, self.activityLevelsData, tmpData, isOpen, isLevelUnLock, self._nSortingOrder)
if nDifficulty == i then
if self.isOpenLvMsg then
self.SelectObj = self._mapNode.togRoot[i]
self._mapNode.togRoot[i]:SetDefault(true)
self:RefreshInstanceInfo(nType, nDifficulty, true)
else
self._mapNode.togRoot[i]:SetDefault(false)
local wait = function()
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rt_ToggleTrans.gameObject:GetComponent("RectTransform"))
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
if i < 3 then
self._mapNode.rt_ToggleTrans.localPosition = Vector3(0, self._mapNode.rt_ToggleTrans.localPosition.y, 0)
elseif 10 < i then
self._mapNode.rt_ToggleTrans.localPosition = Vector3(-2580, self._mapNode.rt_ToggleTrans.localPosition.y, 0)
else
self._mapNode.rt_ToggleTrans.localPosition = Vector3(-380 * (i - 2), self._mapNode.rt_ToggleTrans.localPosition.y, 0)
end
end
cs_coroutine.start(wait)
end
else
self._mapNode.togRoot[i]:SetDefault(false)
end
end
end
end
function ActivityLevelsSelectCtrl:SetSelectObj(tmpSelectObj)
if self.SelectObj ~= nil then
self.SelectObj:SetDefault(false)
end
self.SelectObj = tmpSelectObj
end
function ActivityLevelsSelectCtrl:OnBtnClick_CloseBossInfo()
self._mapNode.rtBossAni:Play("rtBoss_out")
self:AddTimer(1, 0.2, function()
self:ShowBossInfo(false, false)
end, true, true, true)
end
function ActivityLevelsSelectCtrl:ShowBossInfo(isShow, isOnEnable)
self.isOpenLvMsg = isShow
self._mapNode.rtBoss:SetActive(isShow)
self._mapNode.btnCloseBg.gameObject:SetActive(isShow)
if not isShow and self.SelectObj ~= nil then
self.SelectObj:SetDefault(false)
self.SelectObj = nil
end
if not isShow and not isOnEnable then
local isFour = self.currentTypeLvCount == 4
local tmpPadding = isFour and fourLvGroupPadding or twelveLvGroupPadding
if isFour then
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
local moveTime = 0.2
local layoutGroup = self._mapNode.rt_Toggle:GetComponent("HorizontalLayoutGroup")
local startLeft = layoutGroup ~= nil and layoutGroup.padding.left or tmpPadding[1]
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, startLeft, fourLvGroupPaddingOpen[2], fourLvGroupPaddingOpen[3], fourLvGroupPaddingOpen[4])
CS.DG.Tweening.DOVirtual.Float(startLeft, tmpPadding[1], moveTime, function(v)
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, math.floor(v), tmpPadding[2], tmpPadding[3], tmpPadding[4])
end)
else
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, tmpPadding[1], tmpPadding[2], tmpPadding[3], tmpPadding[4])
end
end
end
function ActivityLevelsSelectCtrl:RefreshInstanceInfo(nType, nHard, isInit)
if self.currentTypeLvCount == 12 then
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, twelveLvGroupPaddingOpen[1], twelveLvGroupPaddingOpen[2], twelveLvGroupPaddingOpen[3], twelveLvGroupPaddingOpen[4])
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
local moveTime = isInit and 0.4 or 0.2
if nHard < 3 then
self._mapNode.rt_ToggleTrans:DOLocalMoveX(0, moveTime)
elseif 10 < nHard then
self._mapNode.rt_ToggleTrans:DOLocalMoveX(-3350, moveTime)
else
self._mapNode.rt_ToggleTrans:DOLocalMoveX(-380 * (nHard - 2), moveTime)
end
end
cs_coroutine.start(wait)
elseif self.currentTypeLvCount == 8 then
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, twelveLvGroupPaddingOpen[1], twelveLvGroupPaddingOpen[2], twelveLvGroupPaddingOpen[3], twelveLvGroupPaddingOpen[4])
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
local moveTime = isInit and 0.4 or 0.2
if nHard < 3 then
self._mapNode.rt_ToggleTrans:DOLocalMoveX(0, moveTime)
elseif 6 < nHard then
self._mapNode.rt_ToggleTrans:DOLocalMoveX(-1850, moveTime)
else
self._mapNode.rt_ToggleTrans:DOLocalMoveX(-380 * (nHard - 2), moveTime)
end
end
cs_coroutine.start(wait)
else
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
local moveTime = isInit and 0.4 or 0.2
EventManager.Hit(EventId.TemporaryBlockInput, moveTime)
local layoutGroup = self._mapNode.rt_Toggle:GetComponent("HorizontalLayoutGroup")
local startLeft = layoutGroup ~= nil and layoutGroup.padding.left or fourLvGroupPadding[1]
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, startLeft, fourLvGroupPaddingOpen[2], fourLvGroupPaddingOpen[3], fourLvGroupPaddingOpen[4])
CS.DG.Tweening.DOVirtual.Float(startLeft, fourLvGroupPaddingOpen[1], moveTime, function(v)
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, math.floor(v), fourLvGroupPaddingOpen[2], fourLvGroupPaddingOpen[3], fourLvGroupPaddingOpen[4])
end)
if nHard < 3 then
self._mapNode.rt_ToggleTrans:DOLocalMoveX(0, moveTime)
elseif 3 < nHard then
self._mapNode.rt_ToggleTrans:DOLocalMoveX(-300, moveTime)
else
self._mapNode.rt_ToggleTrans:DOLocalMoveX(-75 * (nHard - 1), moveTime)
end
end
cs_coroutine.start(wait)
end
self.curSelectHard = nHard
local levelId = 0
self.selectLevelData = nil
if nType == GameEnum.ActivityLevelType.Explore then
levelId = self.activityLevelsData.levelTabExploreDifficulty[nHard]
self.selectLevelData = self.activityLevelsData.levelTabExplore[levelId]
elseif nType == GameEnum.ActivityLevelType.Adventure then
levelId = self.activityLevelsData.levelTabAdventureDifficulty[nHard]
self.selectLevelData = self.activityLevelsData.levelTabAdventure[levelId]
else
levelId = self.activityLevelsData.levelTabHardDifficulty[nHard]
self.selectLevelData = self.activityLevelsData.levelTabHard[levelId]
end
NovaAPI.SetTMPText(self._mapNode.txtRecommendLevel, self.selectLevelData.baseData.SuggestedPower)
local sRank = "Icon/BuildRank/BuildRank_" .. self.selectLevelData.baseData.RecommendBuildRank
self:SetPngSprite(self._mapNode.imgBuild, sRank)
NovaAPI.SetTMPText(self._mapNode.TMPName, self.selectLevelData.baseData.Name)
local strTitle = ""
if nType == GameEnum.ActivityLevelType.Explore then
strTitle = orderedFormat(lvIndexTitle, 1, self.selectLevelData.baseData.Difficulty)
elseif nType == GameEnum.ActivityLevelType.Adventure then
strTitle = orderedFormat(lvIndexTitle, 2, self.selectLevelData.baseData.Difficulty)
elseif nType == GameEnum.ActivityLevelType.HARD then
strTitle = orderedFormat(lvIndexTitle, 3, self.selectLevelData.baseData.Difficulty)
end
NovaAPI.SetTMPText(self._mapNode.TMPLevel, strTitle)
NovaAPI.SetTMPText(self._mapNode.detailDesc, self.selectLevelData.baseData.Desc)
self.detailDescContent:DOLocalMoveY(0, 0)
self.curStar = self.selectLevelData.Star
local tbCond = {
self.selectLevelData.baseData.OneStarDesc,
self.selectLevelData.baseData.TwoStarDesc,
self.selectLevelData.baseData.ThreeStarDesc
}
for i = 1, 3 do
local rtTask = self._mapNode.Task[i]
local goDone = rtTask:Find("imgDone").gameObject
local imgUnDone = rtTask:Find("imgUnDone").gameObject
local Text = rtTask:Find("Text"):GetComponent("TMP_Text")
goDone:SetActive(i <= self.curStar)
imgUnDone:SetActive(i > self.curStar)
local cond = tbCond[i]
if cond == nil then
rtTask.gameObject:SetActive(false)
return
else
rtTask.gameObject:SetActive(true)
NovaAPI.SetTMPText(Text, cond)
end
end
self.PreviewMonsterGroupId = self.selectLevelData.baseData.PreviewMonsterGroupId
local isOpen = self.activityLevelsData:GetLevelDayOpen(nType, self.selectLevelData.baseData.Id)
local isLevelUnLock = self.activityLevelsData:GetLevelUnLock(nType, self.selectLevelData.baseData.Id)
local isNeedEnergyConsume = true
if not self.selectLevelData.baseData.EnergyConsumeOnRetry and 0 < self.selectLevelData.Star then
isNeedEnergyConsume = false
end
if isOpen and isLevelUnLock then
self._mapNode.btnListRoot:SetActive(true)
self._mapNode.ListConditions:SetActive(false)
if self.selectLevelData.baseData.ThreeStarSweep then
if self.selectLevelData.Star == 3 then
self._mapNode.btnRaid.gameObject:SetActive(true)
self._mapNode.btnGo.gameObject:SetActive(true)
self._mapNode.btnRaidUnlock.gameObject:SetActive(false)
else
self._mapNode.btnRaid.gameObject:SetActive(false)
self._mapNode.btnGo.gameObject:SetActive(false)
self._mapNode.btnRaidUnlock.gameObject:SetActive(true)
self._mapNode.grpRaidUnlock:SetActive(true)
end
else
self._mapNode.btnRaid.gameObject:SetActive(false)
self._mapNode.btnGo.gameObject:SetActive(false)
self._mapNode.btnRaidUnlock.gameObject:SetActive(true)
self._mapNode.grpRaidUnlock:SetActive(false)
end
local nHas = PlayerData.Base:GetCurEnergy()
local nRequire = self.selectLevelData.baseData.EnergyConsume
if not isNeedEnergyConsume then
nRequire = 0
end
self.curRequireEnergy = nRequire
NovaAPI.SetTMPText(self._mapNode.txtTicketsCount, nRequire)
NovaAPI.SetTMPColor(self._mapNode.txtTicketsCount, nRequire > nHas.nEnergy and Red_Unable or Blue_Normal)
self._mapNode.goCoin:SetActive(true)
NovaAPI.SetTMPText(self._mapNode.txtTicketsCountRaidUnlock, nRequire)
NovaAPI.SetTMPColor(self._mapNode.txtTicketsCountRaidUnlock, nRequire > nHas.nEnergy and Red_Unable or Blue_Normal)
self._mapNode.goCoinRaidUnlock:SetActive(true)
elseif isOpen and not isLevelUnLock then
self._mapNode.btnListRoot:SetActive(false)
self._mapNode.ListConditions:SetActive(true)
local preLevelId = self.selectLevelData.baseData.PreLevelId
if preLevelId ~= 0 then
local lvPreNeedStar = self.selectLevelData.baseData.PreLevelStar
local lvPreStar = self.activityLevelsData:GetPreLevelStar(nType, self.selectLevelData.baseData.Id)
local imgConditions_Lock_1 = self._mapNode.ListConditionsObj[1].transform:Find("imgConditions_Lock").gameObject
local imgConditions_UnLock_1 = self._mapNode.ListConditionsObj[1].transform:Find("imgConditions_UnLock").gameObject
local txt = self._mapNode.ListConditionsObj[1].transform:Find("tex_ConditionsTips"):GetComponent("TMP_Text")
local tmpData = ConfigTable.GetData("ActivityLevelsLevel", preLevelId)
imgConditions_Lock_1:SetActive(lvPreNeedStar > lvPreStar)
imgConditions_UnLock_1:SetActive(lvPreNeedStar <= lvPreStar)
NovaAPI.SetTMPText(txt, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_PreLevel"), tmpData.Name))
NovaAPI.SetTMPColor(txt, lvPreNeedStar <= lvPreStar and colorConditionsUnLock or colorConditionsLock)
else
local imgConditions_Lock_1 = self._mapNode.ListConditionsObj[1].transform:Find("imgConditions_Lock").gameObject
local imgConditions_UnLock_1 = self._mapNode.ListConditionsObj[1].transform:Find("imgConditions_UnLock").gameObject
local txt = self._mapNode.ListConditionsObj[1].transform:Find("tex_ConditionsTips"):GetComponent("TMP_Text")
imgConditions_Lock_1:SetActive(true)
imgConditions_UnLock_1:SetActive(false)
NovaAPI.SetTMPText(txt, ConfigTable.GetUIText("Unlocked_By_PreLevel"))
NovaAPI.SetTMPColor(txt, colorConditionsUnLock)
end
local preActivityStory = self.selectLevelData.baseData.PreActivityStory
if preActivityStory ~= nil and preActivityStory[1] ~= nil then
local isRead = PlayerData.ActivityAvg:IsStoryReaded(preActivityStory[2])
local imgConditions_Lock_2 = self._mapNode.ListConditionsObj[2].transform:Find("imgConditions_Lock").gameObject
local imgConditions_UnLock_2 = self._mapNode.ListConditionsObj[2].transform:Find("imgConditions_UnLock").gameObject
local txt = self._mapNode.ListConditionsObj[2].transform:Find("tex_ConditionsTips"):GetComponent("TMP_Text")
imgConditions_Lock_2:SetActive(not isRead)
imgConditions_UnLock_2:SetActive(isRead)
local cfgdata = ConfigTable.GetData("ActivityStory", preActivityStory[2])
if cfgdata ~= nil then
NovaAPI.SetTMPText(txt, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Avg"), cfgdata.Title))
self._mapNode.ListConditionsObj[2]:SetActive(true)
NovaAPI.SetTMPColor(txt, isRead and colorConditionsUnLock or colorConditionsLock)
else
self._mapNode.ListConditionsObj[2]:SetActive(false)
end
else
self._mapNode.ListConditionsObj[2]:SetActive(false)
end
elseif not isOpen then
self._mapNode.btnListRoot:SetActive(false)
self._mapNode.ListConditions:SetActive(true)
self._mapNode.ListConditionsObj[2]:SetActive(false)
local imgConditions_Lock_1 = self._mapNode.ListConditionsObj[1].transform:Find("imgConditions_Lock").gameObject
local imgConditions_UnLock_1 = self._mapNode.ListConditionsObj[1].transform:Find("imgConditions_UnLock").gameObject
imgConditions_Lock_1:SetActive(true)
imgConditions_UnLock_1:SetActive(false)
NovaAPI.SetTMPColor(txt, colorConditionsUnLock)
local txt = self._mapNode.ListConditionsObj[1].transform:Find("tex_ConditionsTips"):GetComponent("TMP_Text")
local day = self.activityLevelsData:GetUnLockDay(nType, self.selectLevelData.baseData.Id)
if day == 0 then
local hour, min, sec = self.activityLevelsData:GetUnLockHour(nType, self.selectLevelData.baseData.Id)
if 0 < hour then
NovaAPI.SetTMPText(txt, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Hour"), hour))
elseif 0 < min then
NovaAPI.SetTMPText(txt, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Min"), min))
elseif 0 < sec then
NovaAPI.SetTMPText(txt, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Min"), min))
end
else
local _day, _hour = self.activityLevelsData:GetUnLockDayHour(nType, self.selectLevelData.baseData.Id)
NovaAPI.SetTMPText(txt, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_DayHourOpen"), _day, _hour))
end
end
for i = 1, #self.tabRewardList do
self.tabRewardList[i].gameObject:SetActive(false)
end
local tbReward = decodeJson(self.selectLevelData.baseData.CompleteRewardPreview)
self._mapNode.btn_itemTemp.gameObject:SetActive(false)
for i = 1, #tbReward do
if i > #self.tabRewardList then
local obj = instantiate(self._mapNode.btn_itemTemp, self._mapNode.rewardRoot)
self.tabRewardList[i] = self:BindCtrlByNode(obj, "Game.UI.TemplateEx.TemplateItemCtrl")
end
do
local itemCtrl = self.tabRewardList[i]
itemCtrl.gameObject:SetActive(true)
if tbReward[i] ~= nil then
local bReceived = 0 < self.selectLevelData.Star and tbReward[i][3] == 1
local bFirstPass = tbReward[i][3] == 1
itemCtrl:SetItem(tbReward[i][1], nil, UTILS.ParseRewardItemCount(tbReward[i]), nil, bReceived, bFirstPass, false, true)
local btnItem = itemCtrl.gameObject:GetComponent("UIButton")
btnItem.onClick:RemoveAllListeners()
local clickCb = function()
self:OnBtnClick_RewardItem(tbReward[i][1], btnItem.gameObject)
end
btnItem.onClick:AddListener(clickCb)
end
end
end
if self._mapNode.rtBoss.activeSelf == false then
self:ShowBossInfo(true, false)
self:AddTimer(1, 0.2, function()
self._mapNode.rtBossAni:Play("rtBoss_in")
end, true, true, true)
else
self._mapNode.rtBossAni:Play("rtBoss_Empty")
self:AddTimer(1, 0.1, function()
self._mapNode.rtBossAni:Play("rtBoss_in")
end, true, true, true)
end
end
function ActivityLevelsSelectCtrl:OnBtnClick_RewardItem(nTid, btn)
local rtBtn = btn.transform
UTILS.ClickItemGridWithTips(nTid, rtBtn, false, true, false)
end
function ActivityLevelsSelectCtrl:OnClickBtnGo()
local nEnergy = PlayerData.Base:GetCurEnergy().nEnergy
if nEnergy < self.curRequireEnergy then
local callback = function()
EventManager.Hit(EventId.ClosePanel, PanelId.EnergyBuy)
end
EventManager.Hit(EventId.OpenPanel, PanelId.EnergyBuy, AllEnum.EnergyPanelType.Main, {}, true, callback)
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("MainlineData_Energy"))
return
end
if self.SelectObj ~= nil then
self.SelectObj:ShowArrowAni(true)
end
self:AddTimer(1, 0.2, function()
self.activityLevelsData:ChangeRedDot(self.selectLevelData.baseData.Type, self.selectLevelData.baseData.Id)
PlayerData.Activity:SetActivityLevelActId(self.nActId)
EventManager.Hit(EventId.OpenPanel, PanelId.RegionBossFormation, AllEnum.RegionBossFormationType.ActivityLevels, self.selectLevelData.baseData.Id, {
self.nActId
})
end, true, true, true)
end
function ActivityLevelsSelectCtrl:OnClickBtnRaid()
if self.curStar ~= 3 then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Raid_Lock"))
return
end
if self.SelectObj ~= nil then
self.SelectObj:ShowArrowAni(true)
end
self:AddTimer(1, 0.2, function()
local nNeedEnergy = self.curRequireEnergy
EventManager.Hit(EventId.OpenPanel, PanelId.Raid, self.selectLevelData.baseData.Id, nNeedEnergy, 0, self.nActId)
end, true, true, true)
end
function ActivityLevelsSelectCtrl:OnEvent_ClosePanel(nPanelId)
if type(nPanelId) == "number" and nPanelId == PanelId.Raid and self.SelectObj ~= nil then
self.SelectObj:ShowArrowAni(false)
end
end
function ActivityLevelsSelectCtrl:OnBtnClick_EnemyInfo()
EventManager.Hit("OpenActivityLevelsMonsterInfo", self.PreviewMonsterGroupId)
end
function ActivityLevelsSelectCtrl:OnEvent_UpdateEnergy()
local nHas = PlayerData.Base:GetCurEnergy()
NovaAPI.SetTMPColor(self._mapNode.txtTicketsCount, nHas.nEnergy < self.curRequireEnergy and Red_Unable or Blue_Normal)
NovaAPI.SetTMPColor(self._mapNode.txtTicketsCountRaidUnlock, nHas.nEnergy < self.curRequireEnergy and Red_Unable or Blue_Normal)
end
return ActivityLevelsSelectCtrl
@@ -0,0 +1,21 @@
local ActivityLevelsSelectPanel = class("ActivityLevelsSelectPanel", BasePanel)
ActivityLevelsSelectPanel._sUIResRootPath = "UI_Activity/"
ActivityLevelsSelectPanel._tbDefine = {
{
sPrefabPath = "10111/ActivityLevels/ActivityLevelsSelect.prefab",
sCtrlName = "Game.UI.ActivityTheme.10111.ActivityLevels.ActivityLevelsSelectCtrl"
}
}
function ActivityLevelsSelectPanel:Awake()
end
function ActivityLevelsSelectPanel:OnEnable()
end
function ActivityLevelsSelectPanel:OnAfterEnter()
end
function ActivityLevelsSelectPanel:OnDisable()
end
function ActivityLevelsSelectPanel:OnDestroy()
end
function ActivityLevelsSelectPanel:OnRelease()
end
return ActivityLevelsSelectPanel
@@ -0,0 +1,572 @@
local BaseCtrl = require("GameCore.UI.BaseCtrl")
local CultivationManualCtrl = class("CultivationManualCtrl", BaseCtrl)
local ClientManager = CS.ClientManager.Instance
local TimerManager = require("GameCore.Timer.TimerManager")
local LocalData = require("GameCore.Data.LocalData")
local typeof = typeof
local Animator = CS.UnityEngine.Animator
CultivationManualCtrl._mapNodeConfig = {
goBg = {sNodeName = "---Bg---"},
btnEntrance_ = {
nCount = 5,
sComponentName = "UIButton",
callback = "OnBtn_ClickActivityEntrance"
},
imgRemaineTime = {},
txtActivityTime = {sComponentName = "TMP_Text"},
txtActivityDate = {sComponentName = "TMP_Text"},
imgEnd = {},
txtActivityEnd = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_End"
},
imgMiniGame = {sComponentName = "Image"},
txtMiniGame = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Mini_Game_Cookie"
},
imgMiniGameEnd = {},
txtMiniGameEnd = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Mini_Game_Cookie"
},
txtMiniGame_End = {},
txtTask = {
sComponentName = "TMP_Text",
sLanguageId = "Cookie_Act_QuestTitle"
},
txtTaskProgress = {sComponentName = "TMP_Text"},
imgTaskActivityTime = {},
txtTaskActivityTime = {sComponentName = "TMP_Text"},
imgStory = {sComponentName = "Image"},
txtStory = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Story"
},
txtStory_End = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Story"
},
goStoryEnd = {},
txtStoryEnd = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_End"
},
txtMiniGameEndState = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_End"
},
txtTaskEndState = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_End"
},
txtShopEndState = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_End"
},
txtShop = {
sComponentName = "TMP_Text",
sLanguageId = "JointDrill_Btn_Shop"
},
imgShopActivityTime = {},
txtShopActivityTime = {sComponentName = "TMP_Text"},
txtLevel = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Level"
},
txtLevel_End = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Level"
},
goLevelEnd = {},
txtLevelEnd = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_End"
},
imgLevelActivityUnlockTime = {},
txtLevelActivityUnlockTime = {sComponentName = "TMP_Text"},
imgLevelEnd = {},
TopBar = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
imgMiniGameActivityUnlockTime = {},
txtMiniGameActivityUnlockTime = {sComponentName = "TMP_Text"},
imgTaskEnd = {},
txtTaskEnd = {
sComponentName = "TMP_Text",
sLanguageId = "Cookie_Act_QuestTitle"
},
txtTaskProgress_End = {},
imgTaskActivityUnlockTime = {},
txtTaskActivityUnlockTime = {sComponentName = "TMP_Text"},
imgStoryActivityTime = {},
txtStoryActivityTime = {sComponentName = "TMP_Text"},
imgStoryActivityUnlockTime = {},
txtStoryActivityUnlockTime = {sComponentName = "TMP_Text"},
imgShopActivityUnlockTime = {},
txtShopActivityUnlockTime = {sComponentName = "TMP_Text"},
imgLevelActivityTime = {},
txtLevelActivityTime = {sComponentName = "TMP_Text"},
imgMiniGameActivityTime = {},
txtMiniGameActivityTime = {sComponentName = "TMP_Text"},
imgFateCard = {sComponentName = "Image"},
txtFateCard = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Fate_Card_20102"
},
imgFateCardEnd = {},
txtFateCardEnd = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Fate_Card_20102"
},
txtFateCard_End = {},
goFateCardEnd = {},
imgFateCardActivityUnlockTime = {},
txtFateCardActivityUnlockTime = {sComponentName = "TMP_Text"},
imgFateCardActivityTime = {},
txtFateCardActivityTime = {sComponentName = "TMP_Text"},
txtShopEnd = {
sComponentName = "TMP_Text",
sLanguageId = "JointDrill_Btn_Shop"
},
imgShopEnd = {},
txtShop_End = {},
txtTaskProgressEnd = {sComponentName = "TMP_Text"},
dbTaskEnd = {},
miniGameRedDot = {},
redDotEntrance2 = {},
storyRedDot = {},
reddotLevel = {},
reddotFatecard = {},
goMiniGameEnd = {},
imgStoryEnd = {}
}
CultivationManualCtrl._mapEventConfig = {}
local ActivityState = {
NotOpen = 1,
Open = 2,
Closed = 3
}
function CultivationManualCtrl:Awake()
local param = self:GetPanelParam()
if type(param) == "table" then
self.nActId = param[1]
end
self.ActData = PlayerData.Activity:GetActivityGroupDataById(self.nActId)
if self.ActData ~= nil then
self.ActivityGroupCfg = self.ActData.actGroupConfig
end
end
function CultivationManualCtrl:OnEnable()
self:RefreshPanel()
for i = 1, 5 do
local actData = self.ActData:GetActivityDataByIndex(i)
local nActId = actData ~= nil and actData.ActivityId or 0
local state = self.tbActState[nActId]
if nActId ~= nil and 0 < nActId and state ~= nil then
if i == AllEnum.ActivityThemeFuncIndex.Task then
if state == ActivityState.Closed then
self._mapNode.redDotEntrance2:SetActive(false)
else
RedDotManager.RegisterNode(RedDotDefine.Activity_Group_Task, {
self.nActId,
nActId
}, self._mapNode.redDotEntrance2)
end
elseif i == AllEnum.ActivityThemeFuncIndex.Level then
RedDotManager.RegisterNode(RedDotDefine.ActivityLevel, {
self.nActId,
nActId
}, self._mapNode.reddotLevel)
elseif i == AllEnum.ActivityThemeFuncIndex.Story then
RedDotManager.RegisterNode(RedDotDefine.Activity_GroupNew_Avg_Group, {
self.nActId,
nActId
}, self._mapNode.storyRedDot)
elseif i == AllEnum.ActivityThemeFuncIndex.MiniGame then
local bOld = LocalData.GetPlayerLocalData("Activity_MiniGame_10111_New") or state ~= ActivityState.Open
RedDotManager.SetValid(RedDotDefine.Activity_GroupNew_MiniGame, {
self.nActId
}, not bOld)
RedDotManager.RegisterNode(RedDotDefine.Activity_GroupNew_MiniGame, {
self.nActId
}, self._mapNode.miniGameRedDot)
end
end
end
local sAnimName = "CultivationManualPanel_Full"
local sSoundName = "mode_10111_activity"
if self.animRoot ~= nil then
self.animRoot = self.gameObject:GetComponent(typeof(Animator))
sAnimName = "CultivationManualPanel_Pullback"
sSoundName = "mode_10111_activity_1"
end
self.animRoot = self.gameObject:GetComponent(typeof(Animator))
if self.animRoot ~= nil then
self.animRoot:Play(sAnimName, 0, 0)
end
CS.WwiseAudioManager.Instance:PlaySound(sSoundName)
end
function CultivationManualCtrl:OnDisable()
if nil ~= self.minigameRemainTimer then
TimerManager.Remove(self.minigameRemainTimer)
self.minigameRemainTimer = nil
end
if nil ~= self.remainTimer then
TimerManager.Remove(self.remainTimer)
self.remainTimer = nil
end
if nil ~= self.shopRemainTimer then
TimerManager.Remove(self.shopRemainTimer)
self.shopRemainTimer = nil
end
if nil ~= self.levelRemainTimer then
TimerManager.Remove(self.levelRemainTimer)
self.levelRemainTimer = nil
end
if nil ~= self.avgRemainTimer then
TimerManager.Remove(self.avgRemainTimer)
self.avgRemainTimer = nil
end
if nil ~= self.taskRemainTimer then
TimerManager.Remove(self.taskRemainTimer)
self.taskRemainTimer = nil
end
end
function CultivationManualCtrl:RefreshPanel()
if self.ActData == nil or self.ActivityGroupCfg == nil then
return
end
self:RefreshTime()
self:RefreshButtonState()
end
function CultivationManualCtrl:RefreshTime()
local bOpen = self.ActData:CheckActivityGroupOpen()
if bOpen then
self:RefreshRemainTime(self.ActData:GetActGroupEndTime(), self._mapNode.txtActivityTime)
if nil == self.remainTimer then
self.remainTimer = self:AddTimer(0, 1, function()
local remainTime = self:RefreshRemainTime(self.ActData:GetActGroupEndTime(), self._mapNode.txtActivityTime)
if remainTime <= 0 then
TimerManager.Remove(self.remainTimer)
self.remainTimer = nil
end
end, true, true, false)
end
end
self._mapNode.imgRemaineTime:SetActive(bOpen)
self._mapNode.imgEnd:SetActive(not bOpen)
local nOpenMonth, nOpenDay, nEndMonth, nEndDay, nOpenYear, nEndYear = self.ActData:GetActGroupDate()
local strOpenDay = string.format("%d", nOpenDay)
local strEndDay = string.format("%d", nEndDay)
local dateStr = string.format("%s/%s/%s ~ %s/%s/%s", nOpenYear, nOpenMonth, strOpenDay, nEndYear, nEndMonth, strEndDay)
NovaAPI.SetTMPText(self._mapNode.txtActivityDate, dateStr)
end
function CultivationManualCtrl:RefreshRemainTime(endTime, txtComp)
local curTime = ClientManager.serverTimeStamp
local remainTime = endTime - curTime
local sTimeStr = ""
if remainTime <= 60 then
local sec = math.floor(remainTime)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
elseif 60 < remainTime and remainTime <= 3600 then
local min = math.floor(remainTime / 60)
local sec = math.floor(remainTime - min * 60)
if sec == 0 then
min = min - 1
sec = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
elseif 3600 < remainTime and remainTime <= 86400 then
local hour = math.floor(remainTime / 3600)
local min = math.floor((remainTime - hour * 3600) / 60)
if min == 0 then
hour = hour - 1
min = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
elseif 86400 < remainTime then
local day = math.floor(remainTime / 86400)
local hour = math.floor((remainTime - day * 86400) / 3600)
if hour == 0 then
day = day - 1
hour = 24
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
end
NovaAPI.SetTMPText(txtComp, sTimeStr)
return remainTime
end
function CultivationManualCtrl:RefreshRemainOpenTime(openTime)
local curTime = ClientManager.serverTimeStamp
local remainTime = openTime - curTime
local sTimeStr = ""
if remainTime <= 60 then
local sec = math.floor(remainTime)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Open_Time_Sec") or "", sec)
elseif 60 < remainTime and remainTime <= 3600 then
local min = math.floor(remainTime / 60)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Open_Time_Min") or "", min)
elseif 3600 < remainTime and remainTime <= 86400 then
local hour = math.floor(remainTime / 3600)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Open_Time") or "", hour)
elseif 86400 < remainTime then
local day = math.floor(remainTime / 86400)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Open_Time_Day") or "", day)
end
return sTimeStr
end
function CultivationManualCtrl:RefreshButtonState()
self.tbActState = {}
for i = 1, 5 do
local actData = self.ActData:GetActivityDataByIndex(i)
if i == AllEnum.ActivityThemeFuncIndex.MiniGame then
self:RefreshMiniGameButtonState(actData)
elseif i == AllEnum.ActivityThemeFuncIndex.Task then
self:RefreshTaskButtonState(actData)
elseif i == AllEnum.ActivityThemeFuncIndex.Level then
self:RefreshLevelButtonState(actData)
elseif i == AllEnum.ActivityThemeFuncIndex.Shop then
self:RefreshShopButtonState(actData)
elseif i == AllEnum.ActivityThemeFuncIndex.Story then
self:RefreshStoryButtonState(actData)
end
end
end
function CultivationManualCtrl:RefreshButtonTimer(actData, timer, txtTrans, imgTrans, refreshFunc)
local countDowmTimer
local activityId = actData.ActivityId
local state, bShowCountDown, openTime, endTime = self.ActData:GetActivityEntranceTimerData(activityId)
if state == ActivityState.NotOpen then
if nil == timer and openTime ~= nil then
local fcTimer = function()
local curTime = ClientManager.serverTimeStamp
local remainTime = openTime - curTime
if 0 < remainTime then
local sTimeStr = self:RefreshRemainOpenTime(openTime)
local txtUnlock = imgTrans:GetComponentInChildren(typeof(CS.TMPro.TMP_Text))
if txtUnlock ~= nil then
NovaAPI.SetTMPText(txtUnlock, sTimeStr)
end
else
imgTrans:SetActive(false)
TimerManager.Remove(countDowmTimer)
countDowmTimer = nil
self.tbActState[activityId] = ActivityState.Open
refreshFunc(actData)
self:RefreshActivityData()
end
end
fcTimer()
countDowmTimer = self:AddTimer(0, 1, fcTimer, true, true, false)
end
elseif state == ActivityState.Open and endTime ~= nil and timer == nil and bShowCountDown then
self:RefreshRemainTime(endTime, txtTrans)
local fcTimer = function()
local remainTime = self:RefreshRemainTime(endTime, txtTrans)
if remainTime <= 0 then
TimerManager.Remove(countDowmTimer)
countDowmTimer = nil
refreshFunc(actData)
end
end
fcTimer()
countDowmTimer = self:AddTimer(0, 1, fcTimer, true, true, false)
end
return state, bShowCountDown, countDowmTimer
end
function CultivationManualCtrl:RefreshMiniGameButtonState(actData)
local activityId = actData.ActivityId
local activityData = ConfigTable.GetData("Activity", activityId)
if activityData ~= nil then
local refreshFunc = function(actData)
self:RefreshMiniGameButtonState(actData)
end
local state, bShowCountDown, countDowmTimer = self:RefreshButtonTimer(actData, self.minigameRemainTimer, self._mapNode.txtMiniGameActivityTime, self._mapNode.imgMiniGameActivityUnlockTime, refreshFunc)
if self.minigameRemainTimer == nil then
self.minigameRemainTimer = countDowmTimer
end
self._mapNode.imgMiniGameActivityUnlockTime:SetActive(state == ActivityState.NotOpen)
self._mapNode.imgMiniGameActivityTime.gameObject:SetActive(state == ActivityState.Open and bShowCountDown)
self._mapNode.imgMiniGameEnd:SetActive(state == ActivityState.Closed)
self._mapNode.txtMiniGame_End:SetActive(state == ActivityState.Closed)
self._mapNode.txtMiniGameEnd.gameObject:SetActive(state == ActivityState.Closed)
self._mapNode.goMiniGameEnd.gameObject:SetActive(state == ActivityState.Closed)
if state ~= ActivityState.Open then
end
self.tbActState[activityId] = state
end
end
function CultivationManualCtrl:RefreshTaskButtonState(actData)
local activityId = actData.ActivityId
local actInsData = PlayerData.Activity:GetActivityDataById(activityId)
local activityData = ConfigTable.GetData("Activity", activityId)
if activityData ~= nil then
local refreshFunc = function(actData)
if actInsData ~= nil then
actInsData:RefreshTaskRedDot()
end
self:RefreshTaskButtonState(actData)
end
local state, bShowCountDown, countDowmTimer = self:RefreshButtonTimer(actData, self.taskRemainTimer, self._mapNode.txtTaskActivityTime, self._mapNode.imgTaskActivityUnlockTime, refreshFunc)
if self.taskRemainTimer == nil then
self.taskRemainTimer = countDowmTimer
end
if state == ActivityState.Closed and actInsData ~= nil then
actInsData:RefreshTaskRedDot()
end
self._mapNode.imgTaskActivityTime:SetActive(state == ActivityState.Open and bShowCountDown)
self._mapNode.txtTaskProgress_End:SetActive(state == ActivityState.Closed)
self._mapNode.imgTaskEnd.gameObject:SetActive(state == ActivityState.Closed)
self._mapNode.txtTaskEnd.gameObject:SetActive(state == ActivityState.Closed)
self._mapNode.imgTaskActivityUnlockTime:SetActive(state == ActivityState.NotOpen)
self.tbActState[activityId] = state
local ActivityTaskData = PlayerData.Activity:GetActivityDataById(activityId)
local nDone, nTotal = 0, 0
if ActivityTaskData ~= nil then
nDone, nTotal = ActivityTaskData:CalcTotalProgress()
end
local progress = string.format("%d/%d", nDone, nTotal)
NovaAPI.SetTMPText(self._mapNode.txtTaskProgress, progress)
NovaAPI.SetTMPText(self._mapNode.txtTaskProgressEnd, progress)
end
end
function CultivationManualCtrl:RefreshStoryButtonState(actData)
local activityId = actData.ActivityId
local activityData = ConfigTable.GetData("Activity", activityId)
if activityData ~= nil then
local refreshFunc = function(actData)
local avgData = PlayerData.Activity:GetActivityDataById(activityId)
if nil ~= avgData then
avgData:RefreshAvgRedDot()
end
self:RefreshStoryButtonState(actData)
end
local state, bShowCountDown, countDowmTimer = self:RefreshButtonTimer(actData, self.avgRemainTimer, self._mapNode.txtStoryActivityTime, self._mapNode.imgStoryActivityTime, refreshFunc)
if self.avgRemainTimer == nil then
self.avgRemainTimer = countDowmTimer
end
if state == ActivityState.Closed then
local avgData = PlayerData.Activity:GetActivityDataById(activityId)
if nil ~= avgData then
avgData:RefreshAvgRedDot()
end
end
local nDotweenStatus = state == ActivityState.Closed and 0 or 1
NovaAPI.CtrlDotweenAnimation(self._mapNode.btnEntrance_[AllEnum.ActivityThemeFuncIndex.Story].gameObject, nDotweenStatus)
self._mapNode.imgStoryActivityTime:SetActive(state == ActivityState.Open and bShowCountDown)
self._mapNode.imgStoryActivityUnlockTime:SetActive(state == ActivityState.NotOpen)
self._mapNode.goStoryEnd:SetActive(state == ActivityState.Closed)
self._mapNode.imgStoryEnd:SetActive(state == ActivityState.Closed)
self._mapNode.txtStory_End.gameObject:SetActive(state == ActivityState.Closed)
self.tbActState[activityId] = state
end
end
function CultivationManualCtrl:RefreshLevelButtonState(actData)
local activityId = actData.ActivityId
local activityData = ConfigTable.GetData("Activity", activityId)
if activityData ~= nil then
local refreshFunc = function(actData)
local activityLevelsData = PlayerData.Activity:GetActivityDataById(activityId)
if nil ~= activityLevelsData then
activityLevelsData:ChangeAllRedHot()
end
self:RefreshLevelButtonState(actData)
end
local state, bShowCountDown, countDowmTimer = self:RefreshButtonTimer(actData, self.levelRemainTimer, self._mapNode.txtLevelActivityTime, self._mapNode.imgLevelActivityUnlockTime, refreshFunc)
if self.levelRemainTimer == nil then
self.levelRemainTimer = countDowmTimer
end
if state == ActivityState.Closed then
local activityLevelsData = PlayerData.Activity:GetActivityDataById(activityId)
if nil ~= activityLevelsData then
activityLevelsData:ChangeAllRedHot()
end
end
local nDotweenStatus = state == ActivityState.Closed and 0 or 1
NovaAPI.CtrlDotweenAnimation(self._mapNode.btnEntrance_[AllEnum.ActivityThemeFuncIndex.Level].gameObject, nDotweenStatus)
self._mapNode.imgLevelActivityTime:SetActive(state == ActivityState.Open and bShowCountDown)
self._mapNode.imgLevelActivityUnlockTime:SetActive(state == ActivityState.NotOpen)
self._mapNode.imgLevelEnd:SetActive(state == ActivityState.Closed)
self._mapNode.goLevelEnd:SetActive(state == ActivityState.Closed)
self._mapNode.txtLevel_End.gameObject:SetActive(state == ActivityState.Closed)
self.tbActState[activityId] = state
end
end
function CultivationManualCtrl:RefreshShopButtonState(actData)
local activityId = actData.ActivityId
local activityData = ConfigTable.GetData("Activity", activityId)
if activityData ~= nil then
local refreshFunc = function(actData)
self:RefreshShopButtonState(actData)
end
local state, bShowCountDown, countDowmTimer = self:RefreshButtonTimer(actData, self.shopRemainTimer, self._mapNode.txtShopActivityTime, self._mapNode.imgShopActivityUnlockTime, refreshFunc)
if self.shopRemainTimer == nil then
self.shopRemainTimer = countDowmTimer
end
self._mapNode.imgShopActivityTime:SetActive(state == ActivityState.Open and bShowCountDown)
self._mapNode.imgShopActivityUnlockTime:SetActive(state == ActivityState.NotOpen)
self._mapNode.txtShopEnd.gameObject:SetActive(state == ActivityState.Closed)
self._mapNode.imgShopEnd:SetActive(state == ActivityState.Closed)
self._mapNode.txtShop_End:SetActive(state == ActivityState.Closed)
self.tbActState[activityId] = state
end
end
function CultivationManualCtrl:RefreshFateCardButtonState(actData)
local activityId = actData.ActivityId
local activityData = ConfigTable.GetData("Activity", activityId)
if activityData ~= nil then
local refreshFunc = function(actData)
self:RefreshFateCardButtonState(actData)
end
local state, bShowCountDown, countDowmTimer = self:RefreshButtonTimer(actData, self.fateCardRemainTimer, self._mapNode.txtFateCardActivityTime, self._mapNode.imgFateCardActivityUnlockTime, refreshFunc)
if self.fateCardRemainTimer == nil then
self.fateCardRemainTimer = countDowmTimer
end
self._mapNode.imgFateCardActivityUnlockTime:SetActive(state == ActivityState.NotOpen)
self._mapNode.imgFateCardActivityTime.gameObject:SetActive(state == ActivityState.Open and bShowCountDown)
self._mapNode.imgFateCardEnd:SetActive(state == ActivityState.Closed)
self._mapNode.txtFateCard_End:SetActive(state == ActivityState.Closed)
self._mapNode.txtFateCardEnd.gameObject:SetActive(state == ActivityState.Closed)
self._mapNode.goFateCardEnd.gameObject:SetActive(state == ActivityState.Closed)
self._mapNode.dbFateCardEnd:SetActive(state == ActivityState.Closed)
self.tbActState[activityId] = state
end
end
function CultivationManualCtrl:RequireActiviyData()
if self.bRequiredActData then
return
end
local callFunc = function()
self.bRequireSucc = true
self:RefreshPanel()
end
HttpNetHandler.SendMsg(NetMsgId.Id.activity_detail_req, {}, nil, callFunc)
self.bRequiredActData = true
self:AddTimer(1, 1, function()
self.bRequiredActData = false
end, true, true, true)
end
function CultivationManualCtrl:RefreshActivityData()
if self.bRequiredActData then
return
end
self:AddTimer(1, 3, self.RequireActiviyData, true, true, true)
end
function CultivationManualCtrl:OnBtn_ClickActivityEntrance(btn, nIndex)
local actData = self.ActData:GetActivityDataByIndex(nIndex)
if actData == nil then
return
end
local bOpen, _state, _sTips, bNeedRefreshData = self.ActData:CheckActivityEntranceOpen(actData.ActivityId, actData.PanelId, true, self.bRequiredActData)
if not bOpen then
if bNeedRefreshData then
self:RequireActiviyData()
end
return
end
local nRandomTransitionId = math.random(50, 51)
self.ActData:OpenActivityEntrance(actData.ActivityId, actData.PanelId, nRandomTransitionId)
end
return CultivationManualCtrl
@@ -0,0 +1,20 @@
local BasePanel = require("GameCore.UI.BasePanel")
local CultivationManualPanel = class("CultivationManualPanel", BasePanel)
CultivationManualPanel._sUIResRootPath = "UI_Activity/"
CultivationManualPanel._tbDefine = {
{
sPrefabPath = "10111/CultivationManualPanel.prefab",
sCtrlName = "Game.UI.ActivityTheme.10111.CultivationManualCtrl"
}
}
function CultivationManualPanel:Awake()
end
function CultivationManualPanel:OnEnable()
end
function CultivationManualPanel:OnDisable()
end
function CultivationManualPanel:OnDestroy()
end
function CultivationManualPanel:OnRelease()
end
return CultivationManualPanel
@@ -0,0 +1,134 @@
local ActivityShopGoodsItemCtrl = class("ActivityShopGoodsItemCtrl", BaseCtrl)
ActivityShopGoodsItemCtrl._mapNodeConfig = {
imgRare = {sComponentName = "Image"},
imgLeft = {},
txtLeft = {sComponentName = "TMP_Text"},
imgTime = {},
txtLeftTime = {sComponentName = "TMP_Text"},
txtName = {sComponentName = "TMP_Text"},
imgIcon = {sComponentName = "Image"},
imgElement = {sComponentName = "Image"},
goStar = {
sCtrlName = "Game.UI.TemplateEx.TemplateStarCtrl"
},
imgExpire = {sComponentName = "Image"},
txtCount = {sComponentName = "TMP_Text"},
imgCoin = {sComponentName = "Image"},
txtPrice = {sComponentName = "TMP_Text"},
imgMask = {},
goRestock = {},
txtRestock = {
sComponentName = "TMP_Text",
sLanguageId = "Mall_Package_SoldOut"
},
goCondition = {},
txtCondition = {sComponentName = "TMP_Text"}
}
ActivityShopGoodsItemCtrl._mapEventConfig = {}
function ActivityShopGoodsItemCtrl:Refresh(mapData, nCurrencyItemId)
self.mapData = mapData
self.mapGoodsCfg = ConfigTable.GetData("ActivityGoods", mapData.nId)
if not self.mapGoodsCfg then
return
end
self:RefreshInfo()
self:RefreshPrice(nCurrencyItemId)
self:RefreshTime()
self:RefreshLimit()
end
function ActivityShopGoodsItemCtrl:RefreshInfo()
local mapItemCfg = ConfigTable.GetData_Item(self.mapGoodsCfg.ItemId)
if not mapItemCfg then
return
end
NovaAPI.SetTMPText(self._mapNode.txtName, self.mapGoodsCfg.Name)
if mapItemCfg.Type == GameEnum.itemType.Disc then
self:SetPngSprite(self._mapNode.imgIcon, mapItemCfg.Icon .. AllEnum.OutfitIconSurfix.Item)
self._mapNode.imgElement.gameObject:SetActive(true)
self._mapNode.goStar.gameObject:SetActive(true)
local mapDiscCfgData = ConfigTable.GetData("Disc", self.mapGoodsCfg.ItemId)
if mapDiscCfgData then
self:SetAtlasSprite(self._mapNode.imgElement, "12_rare", AllEnum.Star_Element[mapDiscCfgData.EET].icon)
end
local nStar = 6 - mapItemCfg.Rarity
self._mapNode.goStar:SetStar(nStar, nStar)
else
self:SetPngSprite(self._mapNode.imgIcon, mapItemCfg.Icon)
self._mapNode.imgElement.gameObject:SetActive(false)
self._mapNode.goStar.gameObject:SetActive(false)
end
self._mapNode.imgExpire.gameObject:SetActive(mapItemCfg.ExpireType > 0)
local sPath = "db_cultivationmanual_shop_" .. AllEnum.FrameColor_New[mapItemCfg.Rarity]
self:SetActivityAtlasSprite_New(self._mapNode.imgRare, "10111/SpriteAtlas/10111" .. "04", sPath)
local bLimit = 0 < self.mapData.nMaximumLimit
if bLimit then
NovaAPI.SetTMPText(self._mapNode.txtLeft, orderedFormat(ConfigTable.GetUIText("Shop_Left"), self.mapData.nMaximumLimit - self.mapData.nBoughtCount))
else
NovaAPI.SetTMPText(self._mapNode.txtLeft, orderedFormat(ConfigTable.GetUIText("Shop_Left"), ConfigTable.GetUIText("Shop_Unlimited")))
end
NovaAPI.SetTMPText(self._mapNode.txtCount, orderedFormat(ConfigTable.GetUIText("Shop_GoodsItem_Count"), self.mapGoodsCfg.ItemQuantity))
end
function ActivityShopGoodsItemCtrl:RefreshPrice(nCurrencyItemId)
self:SetSprite_Coin(self._mapNode.imgCoin, nCurrencyItemId)
NovaAPI.SetTMPText(self._mapNode.txtPrice, self.mapGoodsCfg.Price)
end
function ActivityShopGoodsItemCtrl:RefreshTime()
local bTime = self.mapData.bPurchasTime and self.mapData.nNextRefreshTime > 0
self._mapNode.imgTime:SetActive(bTime)
if not bTime then
return
end
local sTime = ""
local nRemaining = self.mapData.nNextRefreshTime - CS.ClientManager.Instance.serverTimeStamp
if nRemaining <= 3600 and 0 < nRemaining then
sTime = ConfigTable.GetUIText("Shop_WithinHour")
elseif 3600 < nRemaining and nRemaining <= 86400 then
sTime = orderedFormat(ConfigTable.GetUIText("Shop_Hour"), math.floor(nRemaining / 3600))
elseif 86400 < nRemaining then
sTime = orderedFormat(ConfigTable.GetUIText("Shop_Day"), math.floor(nRemaining / 86400))
end
NovaAPI.SetTMPText(self._mapNode.txtLeftTime, sTime)
end
function ActivityShopGoodsItemCtrl:RefreshLimit()
local bMask = not self.mapData.bPurchasable or not self.mapData.bPurchasTime or self.mapData.bSoldOut
self._mapNode.imgMask:SetActive(bMask)
if self.mapData.bSoldOut then
self._mapNode.goRestock:SetActive(true)
self._mapNode.goCondition:SetActive(false)
return
end
self._mapNode.goRestock:SetActive(false)
self._mapNode.goCondition:SetActive(true)
if self.mapData.nUnlockPurchaseTime > 0 and self.mapData.nUnlockPurchaseTime == self.mapData.nNextRefreshTime then
local sTime = ""
local nRemaining = self.mapData.nNextRefreshTime - CS.ClientManager.Instance.serverTimeStamp
if nRemaining <= 3600 and 0 < nRemaining then
sTime = ConfigTable.GetUIText("Shop_WithinHourUnLock")
elseif 3600 < nRemaining and nRemaining <= 86400 then
sTime = orderedFormat(ConfigTable.GetUIText("Shop_HourUnLock"), math.floor(nRemaining / 3600))
elseif 86400 < nRemaining then
sTime = orderedFormat(ConfigTable.GetUIText("Shop_DayUnLock"), math.floor(nRemaining / 86400))
end
NovaAPI.SetTMPText(self._mapNode.txtCondition, sTime)
return
end
if not self.mapData.bPurchasable then
local sCond = ""
if self.mapData.nPurchaseCondType == GameEnum.shopCond.WorldClassSpecific then
sCond = orderedFormat(ConfigTable.GetUIText("Shop_Cond_WorldClass"), self.mapData.tbPurchaseCondParams[1])
elseif self.mapData.nPurchaseCondType == GameEnum.shopCond.ShopPreGoodsSellOut or self.mapData.nPurchaseCondType == GameEnum.shopCond.ActivityShopPreGoodsSellOut then
sCond = ConfigTable.GetUIText("Shop_Cond_PreGoodsSellOut")
end
NovaAPI.SetTMPText(self._mapNode.txtCondition, sCond)
return
end
end
function ActivityShopGoodsItemCtrl:Awake()
end
function ActivityShopGoodsItemCtrl:OnEnable()
end
function ActivityShopGoodsItemCtrl:OnDisable()
end
function ActivityShopGoodsItemCtrl:OnDestroy()
end
return ActivityShopGoodsItemCtrl
@@ -0,0 +1,24 @@
local ActivityShopPanel = class("ActivityShopPanel", BasePanel)
ActivityShopPanel._sUIResRootPath = "UI_Activity/"
ActivityShopPanel._tbDefine = {
{
sPrefabPath = "10111/Shop/ActivityShopPanel.prefab",
sCtrlName = "Game.UI.ActivityTheme.ShopCommon.ActivityShopCtrl"
}
}
function ActivityShopPanel:Awake()
self.nDefaultId = nil
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" then
self.nActId = tbParam[1]
self.nDefaultId = tbParam[2]
end
self.actShopData = PlayerData.Activity:GetActivityDataById(self.nActId)
end
function ActivityShopPanel:OnEnable()
end
function ActivityShopPanel:OnDisable()
end
function ActivityShopPanel:OnDestroy()
end
return ActivityShopPanel
@@ -0,0 +1,377 @@
local BaseCtrl = require("GameCore.UI.BaseCtrl")
local LocalData = require("GameCore.Data.LocalData")
local CultivationManualStoryCtrl = class("CultivationManualStoryCtrl", BaseCtrl)
local ActivityAvgData = PlayerData.ActivityAvg
CultivationManualStoryCtrl._mapNodeConfig = {
svStory = {
sComponentName = "LoopScrollView"
},
ctlAvgRoot = {
sNodeName = "goAvgInfoRoot",
sCtrlName = "Game.UI.ActivityTheme.ActivityAvgInfoExCtrl"
},
t_fullscreen_blur_black = {},
btnsnapshot = {
sNodeName = "snapshot",
sComponentName = "Button",
callback = "OnBtn_ClickCloseLevelInfoPanel"
},
TopBar = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
goChapterComplete = {},
snapshot_complete = {
sComponentName = "UIButton",
callback = "OnBtn_ClickCloseCompete"
},
ctlgoEnemyInfo = {
sNodeName = "goEnemyInfo",
sCtrlName = "Game.UI.MainlineEx.MainlineMonsterInfoCtrl"
}
}
CultivationManualStoryCtrl._mapEventConfig = {
Story_Done = "OnEvent_Story_Done",
SelectMainlineBattle = "OnEvent_SelectMainlineBattle",
Story_RewardClosed = "OnEvent_Activity_Story_RewardClosed"
}
local UnlockConditionPriority = {
[1] = "MustStoryIds",
[2] = "OneofStoryIds",
[3] = "MustEvIds",
[4] = "OneofEvIds",
[5] = "WorldLevel",
[6] = "MustAchievementIds",
[7] = "MustActivityLevel"
}
local BRANCH_GRID_INDEX = 0
local BRANCH_COUNT = 0
function CultivationManualStoryCtrl:Awake()
local param = self:GetPanelParam()
if type(param) == "table" then
self.nActId = param[1]
end
self.storyNodePos = {0, -66.1}
self.tbGridTimer = {}
self.tbPlayedAnim = {}
self.nScrollTime = 0.5
self.bInit = false
end
function CultivationManualStoryCtrl:OnEnable()
self:RefreshPanel()
end
function CultivationManualStoryCtrl:FadeIn()
EventManager.Hit(EventId.SetTransition)
end
function CultivationManualStoryCtrl:OnDisable()
end
function CultivationManualStoryCtrl:RefreshPanel()
self:RefreshStoryList()
end
function CultivationManualStoryCtrl:RefreshStoryList()
self.tbPlayedAnim = {}
self.tbAllStory, self.nChapterId = ActivityAvgData:GetStoryIdListByActivityId(self.nActId)
if self.tbAllStory == nil or #self.tbAllStory <= 0 then
return
end
local recentStoryId = ActivityAvgData:GetRecentStoryId(self.nChapterId)
local recentIndex = 1
for i = 1, #self.tbAllStory do
if self.tbAllStory[i] == recentStoryId then
recentIndex = i
break
end
end
local scrollIndex = recentIndex
if 0 < BRANCH_COUNT then
local branchEnd = BRANCH_GRID_INDEX + BRANCH_COUNT - 1
if recentIndex >= BRANCH_GRID_INDEX and recentIndex <= branchEnd then
scrollIndex = BRANCH_GRID_INDEX
elseif recentIndex > branchEnd then
scrollIndex = recentIndex - (BRANCH_COUNT - 1)
end
end
self.curIndex = recentIndex
self._mapNode.svStory:SetAnim(0.07)
local branchCount = 0 < BRANCH_COUNT and BRANCH_COUNT - 1 or 0
self._mapNode.svStory:Init(#self.tbAllStory - branchCount, self, self.OnRefreshGrid)
local time = self.bInit and 0 or self.nScrollTime
self:AddTimer(1, 0.1, function()
self._mapNode.svStory:SetScrollGridPos(scrollIndex, time, 0)
self.bInit = true
end, true, true, true)
end
function CultivationManualStoryCtrl:RefreshGridInfo(grid, gridIndex, bBranch, nBranchIndex)
local storyId = self.tbAllStory[gridIndex]
local avgcfg = ConfigTable.GetData("ActivityStory", storyId)
local goInstanceID = grid:GetInstanceID()
local btnGrid = grid.transform:Find("btnGrid"):GetComponent("UIButton")
local RootNode = grid.transform:Find("btnGrid/AnimRoot/RootNode")
local imgStory = bBranch and RootNode:Find("imgStory/imgBg2"):GetComponent("Image") or RootNode:Find("imgStory"):GetComponent("Image")
local goNotOpen = RootNode:Find("goNotOpen").gameObject
local txtLevel = RootNode:Find("txtIndex"):GetComponent("TMP_Text")
local imgStoryTitleBg = grid.transform:Find("btnGridText/scale_on_click/imgStoryTitle")
local imgBattleTitleBg = grid.transform:Find("btnGridText/scale_on_click/imgBattleTitle")
local txtBattleTitle = imgBattleTitleBg:Find("txtPlot"):GetComponent("TMP_Text")
local txtStoryTitle = imgStoryTitleBg:Find("txtPlot"):GetComponent("TMP_Text")
local RedDot = RootNode:Find("RedDot").gameObject
local goLock = RootNode:Find("goLockState").gameObject
local goComplete = grid.transform:Find("btnGridText/scale_on_click/grpTitle/goComplete").gameObject
local goImgTime = grid.transform:Find("btnGridText/scale_on_click/imgTime")
local txtTime = goImgTime:Find("txtTime"):GetComponent("TMP_Text")
local txtTitle = bBranch and RootNode:Find("tmpGroupDone"):GetComponent("TMP_Text") or grid.transform:Find("btnGridText/scale_on_click/grpTitle/tmpGroupDone"):GetComponent("TMP_Text")
local txtComplete = goComplete.transform:Find("imgBg/txtComplete"):GetComponent("TMP_Text")
local btnGridText = grid.transform:Find("btnGridText")
local imgDb = btnGridText:Find("scale_on_click/grpTitle/imgDb")
local grpTitle = btnGridText:Find("scale_on_click/grpTitle")
NovaAPI.SetTMPText(txtComplete, ConfigTable.GetUIText("RoguelikeBuild_Manage_FilterPass"))
if avgcfg.IsBattle then
NovaAPI.SetTMPText(txtBattleTitle, ConfigTable.GetUIText("Story_BattleTitle"))
else
NovaAPI.SetTMPText(txtStoryTitle, ConfigTable.GetUIText("Story_StoryTitle"))
end
local isUnlock, tbResult = ActivityAvgData:IsUnlock(avgcfg.ConditionId)
local isReaded = ActivityAvgData:IsStoryReaded(storyId)
local bOpen, nOpenTime = ActivityAvgData:IsOpen(avgcfg.StoryId, self.nActId)
local nIndex = 0
if isUnlock then
nIndex = bBranch and BRANCH_GRID_INDEX or gridIndex
if nIndex > BRANCH_GRID_INDEX then
nIndex = nIndex - (BRANCH_COUNT - 1)
end
end
local branchSuffix = bBranch and string.char(string.byte("a") + nBranchIndex - 1) or ""
local bShowImgStory = not bBranch or not not isUnlock
imgStory.gameObject:SetActive(bShowImgStory)
if bShowImgStory then
if bOpen and isUnlock then
self:SetPngSprite(imgStory, avgcfg.Icon .. branchSuffix)
else
self:SetPngSprite(imgStory, string.format("Icon/ActivityStory/ep_event12_00"))
end
end
NovaAPI.SetTMPText(txtTitle, avgcfg.Title)
NovaAPI.SetTMPText(txtLevel, avgcfg.Index)
txtLevel.gameObject:SetActive(not bBranch or not not isUnlock)
txtTitle.gameObject:SetActive(isUnlock and bOpen)
goImgTime.gameObject:SetActive(not bOpen)
goComplete.gameObject:SetActive(isUnlock and isReaded and bOpen)
goLock.gameObject:SetActive(not isUnlock and bOpen)
goNotOpen.gameObject:SetActive(not bOpen or bBranch and not isUnlock)
imgBattleTitleBg.gameObject:SetActive(avgcfg.IsBattle and isUnlock and bOpen)
imgStoryTitleBg.gameObject:SetActive(not avgcfg.IsBattle and isUnlock and bOpen)
imgDb.gameObject:SetActive(bOpen)
grpTitle.gameObject:SetActive(bOpen and isUnlock)
if not bOpen then
local strTime = self:GetRemainTimeStr(nOpenTime, avgcfg.DayOpen)
if self.tbGridTimer[goInstanceID] ~= nil then
self.tbGridTimer[goInstanceID]:Cancel()
self.tbGridTimer[goInstanceID] = nil
end
self.tbGridTimer[goInstanceID] = self:AddTimer(0, 1, function()
local strTimeNew, bLock = self:GetRemainTimeStr(nOpenTime, avgcfg.DayOpen)
if bLock then
NovaAPI.SetTMPText(txtTime, strTimeNew)
else
self:RefreshStoryList()
end
end, true, true, true)
NovaAPI.SetTMPText(txtTime, strTime)
end
local _bInActGroup, nActGroupId = PlayerData.Activity:IsActivityInActivityGroup(self.nActId)
RedDotManager.RegisterNode(RedDotDefine.Activity_GroupNew_Avg_Group, {
nActGroupId,
self.nActId,
avgcfg.Id
}, RedDot, nil, nil, true)
local clickFuc = function()
if not bOpen or self.bCantClick then
return
end
if isUnlock then
local bNew = not isReaded
self.avgId = avgcfg.StoryId
self._mapNode.ctlAvgRoot.gameObject:SetActive(true)
self._mapNode.ctlAvgRoot:OpenLevelInfo(avgcfg.StoryId, self.nActId, bNew)
self.curIndex = gridIndex
LocalData.SetPlayerLocalData("Act_Story_New" .. self.nActId .. avgcfg.Id, true)
ActivityAvgData:RefreshAvgRedDot()
elseif tbResult ~= nil then
local lockTxt = ""
for i = 1, #tbResult do
local value = tbResult[i]
if value[1] == false then
if UnlockConditionPriority[i] == "MustStoryIds" then
do
local tbStoryIds = value[2]
for k, v in pairs(tbStoryIds) do
if v == false then
local storyData = ConfigTable.GetData("ActivityStory", k)
lockTxt = orderedFormat(ConfigTable.GetUIText("Story_UnlockPreId") or "", storyData.Title)
break
end
end
end
break
end
if UnlockConditionPriority[i] == "OneofStoryIds" then
do
local tbStoryIds = value[2]
for k, v in pairs(tbStoryIds) do
if v == false then
local storyData = ConfigTable.GetData("ActivityStory", k)
if ActivityAvgData:IsUnlock(storyData.ConditionId) then
lockTxt = orderedFormat(ConfigTable.GetUIText("Story_UnlockPreId") or "", storyData.Title)
break
end
end
end
if lockTxt == "" then
for k, _v in pairs(tbStoryIds) do
local storyData = ConfigTable.GetData("ActivityStory", k)
lockTxt = orderedFormat(ConfigTable.GetUIText("Story_UnlockPreId") or "", storyData.Title)
break
end
end
end
break
end
if UnlockConditionPriority[i] == "MustEvIds" then
lockTxt = ConfigTable.GetUIText("Story_UnlockClueCondition")
break
end
if UnlockConditionPriority[i] == "OneofEvIds" then
lockTxt = ConfigTable.GetUIText("Story_UnlockClueCondition")
break
end
if UnlockConditionPriority[i] == "WorldLevel" then
do
local level = value[2]
lockTxt = orderedFormat(ConfigTable.GetUIText("Story_UnlockWorldLv") or "", level)
end
break
end
if UnlockConditionPriority[i] == "MustAchievementIds" then
if self.bHasAchievementData == true then
local tbAchievementList = value[2]
for k, v in pairs(tbAchievementList) do
if v == false then
local achievementId = k
local achievement = ConfigTable.GetData("Achievement", achievementId)
lockTxt = orderedFormat(ConfigTable.GetUIText("Story_UnlockAchievement") or "", achievement.Title) .. "\n" .. "(" .. achievement.Desc .. ")"
break
end
end
end
break
end
if UnlockConditionPriority[i] == "MustActivityLevel" then
local levelId = value[2]
if 0 < levelId then
local levelData = ConfigTable.GetData("ActivityLevelsLevel", levelId)
if levelData then
lockTxt = orderedFormat(ConfigTable.GetUIText("ActivityStory_UnlockActivityLevel"), levelData.Name)
end
end
end
break
end
end
local msg = {
nType = AllEnum.MessageBox.Alert,
sContent = lockTxt
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
end
btnGrid.onClick:RemoveAllListeners()
btnGrid.onClick:AddListener(clickFuc)
local anim = grid:GetComponent("Animator")
if anim ~= nil then
if isUnlock and bOpen then
anim:Play("svStory_in")
else
anim:Play("svStoryNotOpen_in")
end
end
for i = 1, 3 do
local imgFlower = RootNode:Find("imgFlower" .. i .. "/imgFlower" .. i)
local state = bOpen and isUnlock and 1 or 0
NovaAPI.CtrlDotweenAnimation(imgFlower.gameObject, state)
end
end
function CultivationManualStoryCtrl:OnRefreshGrid(grid, index)
local gridIndex = index + 1
local normalRoot = grid.transform:Find("Normal")
local branchRoot = grid.transform:Find("Branch")
if 0 < BRANCH_GRID_INDEX and gridIndex == BRANCH_GRID_INDEX then
for i = 1, BRANCH_COUNT do
local branchGrid = branchRoot:Find("tog" .. i)
self:RefreshGridInfo(branchGrid.gameObject, gridIndex + i - 1, true, i)
end
normalRoot.gameObject:SetActive(false)
branchRoot.gameObject:SetActive(true)
else
if 0 < BRANCH_COUNT and gridIndex > BRANCH_GRID_INDEX then
gridIndex = gridIndex + (BRANCH_COUNT - 1)
end
self:RefreshGridInfo(normalRoot.gameObject, gridIndex, false)
normalRoot.gameObject:SetActive(true)
branchRoot.gameObject:SetActive(false)
end
end
function CultivationManualStoryCtrl:GetRemainTimeStr(nOpenTime, openDay)
local timeStr = ""
local curTime = CS.ClientManager.Instance.serverTimeStamp
local openTime = CS.ClientManager.Instance:GetNextRefreshTime(nOpenTime) - 86400
local nRemainTime = openTime + openDay * 86400 - curTime
local day = math.floor(nRemainTime / 86400)
local hour = math.floor(nRemainTime / 3600)
local min = math.floor((nRemainTime - hour * 3600) / 60)
local sec = nRemainTime - hour * 3600 - min * 60
if 0 < day then
timeStr = orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Day_Color_Common"), "FFF0DB", day)
elseif 0 < hour then
timeStr = orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Hour_Color_Common"), "FFF0DB", hour)
elseif 0 < min then
timeStr = orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Min_Color_Common"), "FFF0DB", min)
elseif 0 < sec then
timeStr = orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Sec_Color_Common"), "FFF0DB", sec)
end
return timeStr, 0 < nRemainTime
end
function CultivationManualStoryCtrl:OnBtn_ClickBack()
EventManager.Hit(EventId.ClosePanel, PanelId.CultivationManualStory_10111)
end
function CultivationManualStoryCtrl:OnBtn_ClickHome()
PanelManager.Home()
end
function CultivationManualStoryCtrl:OnBtn_ClickCloseLevelInfoPanel()
self._mapNode.t_fullscreen_blur_black:SetActive(false)
self._mapNode.ctlAvgRoot.gameObject:SetActive(false)
self._mapNode.goChapterComplete:SetActive(false)
end
function CultivationManualStoryCtrl:OnEvent_Story_Done(bHasReward)
self:RefreshPanel()
if bHasReward then
self.bCantClick = true
end
end
function CultivationManualStoryCtrl:OnEvent_SelectMainlineBattle(bConfirm)
local OpenPanel = function()
EventManager.Hit(EventId.OpenPanel, PanelId.RegionBossFormation, AllEnum.RegionBossFormationType.ActivityStory, 0, self.avgId, self.nActId)
end
if bConfirm then
EventManager.Hit(EventId.SetTransition, 2, OpenPanel)
end
end
function CultivationManualStoryCtrl:OnEvent_Activity_Story_RewardClosed()
self.bCantClick = false
if self.curIndex == #self.tbAllStory then
self._mapNode.goChapterComplete:SetActive(true)
end
end
function CultivationManualStoryCtrl:OnBtn_ClickCloseCompete()
self._mapNode.goChapterComplete:SetActive(false)
end
return CultivationManualStoryCtrl
@@ -0,0 +1,20 @@
local BasePanel = require("GameCore.UI.BasePanel")
local CultivationManualStoryPanel = class("CultivationManualStoryPanel", BasePanel)
CultivationManualStoryPanel._sUIResRootPath = "UI_Activity/"
CultivationManualStoryPanel._tbDefine = {
{
sPrefabPath = "10111/Story/CultivationManualStoryPanel.prefab",
sCtrlName = "Game.UI.ActivityTheme.10111.Story.CultivationManualStoryCtrl"
}
}
function CultivationManualStoryPanel:Awake()
end
function CultivationManualStoryPanel:OnEnable()
end
function CultivationManualStoryPanel:OnDisable()
end
function CultivationManualStoryPanel:OnDestroy()
end
function CultivationManualStoryPanel:OnRelease()
end
return CultivationManualStoryPanel
@@ -0,0 +1,16 @@
local CultivationManualTaskPanel = class("CultivationManualTaskPanel", BasePanel)
CultivationManualTaskPanel._sUIResRootPath = "UI_Activity/"
CultivationManualTaskPanel._tbDefine = {
{
sPrefabPath = "10111/Task.prefab",
sCtrlName = "Game.UI.ActivityTheme.TaskCommon.TaskCommonCtrl_01"
}
}
local tbImgDbType = {SizeDelta = 1, FillAmount = 2}
function CultivationManualTaskPanel:Awake()
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" and tbParam[3] == nil then
tbParam[3] = tbImgDbType.FillAmount
end
end
return CultivationManualTaskPanel
@@ -0,0 +1,151 @@
local ActivityLevelsLvCtrl = class("ActivityLevelsLvCtrl", BaseCtrl)
local lvIndexTitle = "{0}-{1}"
local colorLockSelectImage = Color(0.9803921568627451, 0.9803921568627451, 0.9803921568627451, 1)
local colorLockUnSelectImage = Color(0.9803921568627451, 0.9803921568627451, 0.9803921568627451, 1)
ActivityLevelsLvCtrl._mapNodeConfig = {
tog = {sComponentName = "UIButton"},
Select = {},
SelectAni = {sNodeName = "Select", sComponentName = "Animator"},
unSelect = {},
txt_Select = {sComponentName = "TMP_Text"},
txt_unSelect = {sComponentName = "TMP_Text"},
rt_Targets = {},
btnTarget = {sComponentName = "Button", nCount = 3},
rtLockInfo = {},
rtLockInfoDay = {sComponentName = "Image"},
imgLockMask = {},
bgCondition = {},
rtLockPreLv = {},
rtLockPreLvSelect = {sComponentName = "Image"},
redH = {}
}
function ActivityLevelsLvCtrl:InitData(parent, nType, activityData, data, isOpen, isLevelUnLock)
local txtLockConditionTime = self._mapNode.bgCondition.transform:Find("txtLockCondition"):GetComponent("TMP_Text")
if self.timerRun ~= nil then
self.timerRun:Pause(true)
self.timerRun = nil
end
self._mapNode.Select:SetActive(false)
self.lvLock = false
self._mapNode.rtLockInfoDay.gameObject:SetActive(false)
self.isShowTexLv = false
self.isOpen = isOpen
if isOpen and isLevelUnLock then
self.isShowTexLv = true
self._mapNode.rt_Targets:SetActive(true)
for i = 1, 3 do
self._mapNode.btnTarget[i].interactable = i <= data.Star
end
self._mapNode.rtLockInfo:SetActive(false)
self._mapNode.rtLockPreLv:SetActive(false)
self._mapNode.bgCondition:SetActive(false)
elseif isOpen and not isLevelUnLock then
self._mapNode.rt_Targets:SetActive(false)
self._mapNode.rtLockInfo:SetActive(true)
self._mapNode.imgLockMask:SetActive(false)
self._mapNode.rtLockPreLv:SetActive(true)
self._mapNode.bgCondition:SetActive(false)
elseif not isOpen then
self._mapNode.rt_Targets:SetActive(false)
self._mapNode.rtLockInfo:SetActive(true)
self._mapNode.imgLockMask:SetActive(true)
self._mapNode.rtLockInfoDay.gameObject:SetActive(true)
self._mapNode.rtLockPreLv:SetActive(false)
self._mapNode.bgCondition:SetActive(true)
local day = activityData:GetUnLockDay(nType, data.baseData.Id)
if day == 0 then
local timerCount = function()
local hour, min, sec = parent.activityLevelsData:GetUnLockHour(nType, data.baseData.Id)
if 0 < hour then
NovaAPI.SetTMPText(txtLockConditionTime, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Hour_Color_Common"), "08d3d4", hour))
elseif 0 < min then
NovaAPI.SetTMPText(txtLockConditionTime, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Min_Color_Common"), "08d3d4", min))
elseif 0 < sec then
NovaAPI.SetTMPText(txtLockConditionTime, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Sec_Color_Common"), "08d3d4", sec))
end
end
timerCount()
self.timerRun = self:AddTimer(0, 1, function()
timerCount()
end, true, true, false)
else
NovaAPI.SetTMPText(txtLockConditionTime, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Day_Color_Common"), "08d3d4", day))
end
self.lvLock = true
end
local strTitle = ""
if nType == GameEnum.ActivityLevelType.Explore then
strTitle = orderedFormat(lvIndexTitle, 1, data.baseData.Difficulty)
elseif nType == GameEnum.ActivityLevelType.Adventure then
strTitle = orderedFormat(lvIndexTitle, 2, data.baseData.Difficulty)
elseif nType == GameEnum.ActivityLevelType.HARD then
strTitle = orderedFormat(lvIndexTitle, 3, data.baseData.Difficulty)
end
NovaAPI.SetTMPText(self._mapNode.txt_Select, strTitle)
NovaAPI.SetTMPText(self._mapNode.txt_unSelect, strTitle)
self._mapNode.tog.onClick:RemoveAllListeners()
local clickCb = function()
if self._mapNode.Select.activeSelf == true then
return
end
self:SetDefault(true)
parent:SetSelectObj(self)
parent:RefreshInstanceInfo(nType, data.baseData.Difficulty, false)
parent.activityLevelsData:ChangeRedDot(nType, data.baseData.Id)
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
end
self._mapNode.tog.onClick:AddListener(clickCb)
local bInActGroup, nActGroupId = PlayerData.Activity:IsActivityInActivityGroup(parent.nActId)
if bInActGroup then
if nType == GameEnum.ActivityLevelType.Explore then
RedDotManager.RegisterNode(RedDotDefine.ActivityLevel_Explore_Level, {
nActGroupId,
data.baseData.Id
}, self._mapNode.redH)
elseif nType == GameEnum.ActivityLevelType.Adventure then
RedDotManager.RegisterNode(RedDotDefine.ActivityLevel_Adventure_Level, {
nActGroupId,
data.baseData.Id
}, self._mapNode.redH)
elseif nType == GameEnum.ActivityLevelType.HARD then
RedDotManager.RegisterNode(RedDotDefine.ActivityLevel_Hard_Level, {
nActGroupId,
data.baseData.Id
}, self._mapNode.redH)
end
end
end
function ActivityLevelsLvCtrl:SetDefault(isOn)
if not isOn then
self:ShowArrowAni(false)
end
self._mapNode.Select:SetActive(isOn)
self._mapNode.unSelect:SetActive(not isOn)
self._mapNode.txt_Select.gameObject:SetActive(isOn)
self._mapNode.txt_unSelect.gameObject:SetActive(not isOn)
if isOn then
NovaAPI.SetImageColor(self._mapNode.rtLockInfoDay, colorLockSelectImage)
NovaAPI.SetImageColor(self._mapNode.rtLockPreLvSelect, colorLockSelectImage)
else
NovaAPI.SetImageColor(self._mapNode.rtLockInfoDay, colorLockUnSelectImage)
NovaAPI.SetImageColor(self._mapNode.rtLockPreLvSelect, colorLockUnSelectImage)
end
if not self.isOpen then
self._mapNode.imgLockMask:SetActive(not isOn)
end
if not self.lvLock and isOn then
self._mapNode.SelectAni:Play("10112_ActitvityLevels_Select")
end
end
function ActivityLevelsLvCtrl:ShowArrowAni(isShow)
end
function ActivityLevelsLvCtrl:FadeIn()
EventManager.Hit(EventId.SetTransition)
end
function ActivityLevelsLvCtrl:OnDisable()
if self.timerRun ~= nil then
self.timerRun:Pause(true)
self.timerRun = nil
end
end
return ActivityLevelsLvCtrl
@@ -0,0 +1,790 @@
local ActivityLevelsSelectCtrl = class("ActivityLevelsSelectCtrl", BaseCtrl)
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
local mapToggle = {
[1] = GameEnum.diffculty.Diffculty_1,
[2] = GameEnum.diffculty.Diffculty_2,
[3] = GameEnum.diffculty.Diffculty_3,
[4] = GameEnum.diffculty.Diffculty_4,
[5] = GameEnum.diffculty.Diffculty_5,
[6] = GameEnum.diffculty.Diffculty_6,
[7] = GameEnum.diffculty.Diffculty_7,
[8] = GameEnum.diffculty.Diffculty_8,
[9] = GameEnum.diffculty.Diffculty_9,
[10] = GameEnum.diffculty.Diffculty_10
}
local colorSelect = Color(1.0, 0.9882352941176471, 0.9568627450980393, 1)
local colorUnSelect = Color(0.4, 0.13333333333333333, 0.15294117647058825, 1)
local colorSelectLock = Color(0.11764705882352941, 0.12549019607843137, 0.17254901960784313, 1)
local colorUnSelectLock = Color(0.4823529411764706, 0.5333333333333333, 0.6509803921568628, 1)
local timeUnLockColor = "fff7ca"
local colorLockSelectImage = Color(0.054901960784313725, 0.054901960784313725, 0.054901960784313725, 1)
local colorLockUnSelectImage = Color(0.9803921568627451, 0.9803921568627451, 0.9803921568627451, 1)
local colorConditionsUnLock = Color(0.9803921568627451, 0.9803921568627451, 0.9803921568627451, 0.5)
local colorConditionsLock = Color(0.9803921568627451, 0.9803921568627451, 0.9803921568627451, 1)
local lvIndexTitle = "{0}-{1}"
local twelveLvGroupPadding = {
86,
50,
50,
0
}
local twelveLvGroupPaddingOpen = {
86,
818,
50,
0
}
local fourLvGroupPadding = {
300,
88,
50,
0
}
local fourLvGroupPaddingOpen = {
86,
818,
50,
0
}
ActivityLevelsSelectCtrl._mapNodeConfig = {
TopBar = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
goEnemyInfo = {
sCtrlName = "Game.UI.MainlineEx.MainlineMonsterInfoCtrl"
},
togTypeExplore = {
sComponentName = "UIButton",
callback = "OnBtnClick_TogTypeExplore"
},
togTypeExploreCtrl = {
sNodeName = "togTypeExplore",
sCtrlName = "Game.UI.ActivityTheme.10112.ActivityLevels.TemplateToggleCtrl10112"
},
lockExplore = {
sComponentName = "UIButton",
callback = "OnClick_BtnLockExplore"
},
redExplore = {},
togTypeAdventure = {
sComponentName = "UIButton",
callback = "OnBtnClick_TogTypeAdventure"
},
togTypeAdventureCtrl = {
sNodeName = "togTypeAdventure",
sCtrlName = "Game.UI.ActivityTheme.10112.ActivityLevels.TemplateToggleCtrl10112"
},
lockAdventure = {
sComponentName = "UIButton",
callback = "OnClick_BtnLockAdventure"
},
redAdventure = {},
togTypeHard = {
sComponentName = "UIButton",
callback = "OnBtnClick_TogTypeHard"
},
togTypeHardCtrl = {
sNodeName = "togTypeHard",
sCtrlName = "Game.UI.ActivityTheme.10112.ActivityLevels.TemplateToggleCtrl10112"
},
lockHard = {
sComponentName = "UIButton",
callback = "OnClick_BtnLockHard"
},
redHard = {},
rtToggles = {
sNodeName = "srToggle",
sComponentName = "UIScrollRect"
},
rtTogglesTmp = {
sNodeName = "rt_ToggleTmp",
sComponentName = "Transform"
},
togRoot = {
nCount = 12,
sCtrlName = "Game.UI.ActivityTheme.10112.ActivityLevels.ActivityLevelsLvCtrl"
},
rt_Toggle = {},
rt_ToggleTrans = {sNodeName = "rt_Toggle", sComponentName = "Transform"},
btnCloseBg = {
sComponentName = "UIButton",
callback = "OnBtnClick_CloseBossInfo"
},
rtBoss = {},
rtBossAni = {sNodeName = "rtBoss", sComponentName = "Animator"},
txtRecommendLevel = {
sNodeName = "txtSuggestLevel",
sComponentName = "TMP_Text"
},
txtTitle = {
sComponentName = "TMP_Text",
sLanguageId = "InfinityTower_Recommend_Lv"
},
txtBuildTitle = {
sComponentName = "TMP_Text",
sLanguageId = "InfinityTower_Recommend_Construct"
},
imgBuild = {sComponentName = "Image"},
TMPName = {sComponentName = "TMP_Text"},
TMPLevel = {sComponentName = "TMP_Text"},
detailDescSc = {sComponentName = "Transform"},
detailDesc = {sComponentName = "TMP_Text"},
btnEnemyInfo = {
sComponentName = "UIButton",
callback = "OnBtnClick_EnemyInfo"
},
tex_EnemyInfo = {
sComponentName = "TMP_Text",
sLanguageId = "Equipment_Instance_EnemyInfo"
},
txtTitleTarget = {
sComponentName = "TMP_Text",
sLanguageId = "RogueBoss_Pause_Target"
},
txtReward = {
sComponentName = "TMP_Text",
sLanguageId = "Level_Award"
},
Task = {sComponentName = "Transform", nCount = 3},
rewardRoot = {sComponentName = "Transform"},
btn_itemTemp = {},
btnListRoot = {},
btnRaid = {
sComponentName = "UIButton",
callback = "OnClickBtnRaid"
},
txtBtnRaid = {
sComponentName = "TMP_Text",
sLanguageId = "Raid_Title_Raid"
},
btnGo = {
sComponentName = "UIButton",
callback = "OnClickBtnGo"
},
txtBtnGoRaidUnlock = {
sComponentName = "TMP_Text",
sLanguageId = "Maninline_Btn_Go"
},
txtBtnGo = {
sComponentName = "TMP_Text",
sLanguageId = "Maninline_Btn_Go"
},
goCoin = {},
txtTicketsCount = {sComponentName = "TMP_Text"},
btnRaidUnlock = {
sComponentName = "UIButton",
callback = "OnClickBtnGo"
},
goCoinRaidUnlock = {},
txtTicketsCountRaidUnlock = {sComponentName = "TMP_Text"},
grpRaidUnlock = {},
TMPRaidUnlockHint = {
sComponentName = "TMP_Text",
sLanguageId = "Raid_Btn_CondStar"
},
ListConditions = {},
ListConditionsObj = {
sNodeName = "Conditions_",
nCount = 2
}
}
ActivityLevelsSelectCtrl._mapEventConfig = {
[EventId.UpdateEnergy] = "OnEvent_UpdateEnergy",
[EventId.ClosePanel] = "OnEvent_ClosePanel"
}
ActivityLevelsSelectCtrl._mapRedDotConfig = {}
function ActivityLevelsSelectCtrl:Awake()
self.detailDescContent = self._mapNode.detailDescSc:Find("Viewport/Content").transform
self.curRequireEnergy = 0
local param = self:GetPanelParam()
if type(param) == "table" then
self.nActId = param[1]
end
self.nLevelType = GameEnum.ActivityLevelType.Explore
self.tabRewardList = {}
self.AniRoot = self.gameObject:GetComponent("Animator")
local bInActGroup, nActGroupId = PlayerData.Activity:IsActivityInActivityGroup(self.nActId)
if bInActGroup then
RedDotManager.RegisterNode(RedDotDefine.ActivityLevel_Explore, {nActGroupId}, self._mapNode.redExplore)
RedDotManager.RegisterNode(RedDotDefine.ActivityLevel_Adventure, {nActGroupId}, self._mapNode.redAdventure)
RedDotManager.RegisterNode(RedDotDefine.ActivityLevel_Hard, {nActGroupId}, self._mapNode.redHard)
end
end
function ActivityLevelsSelectCtrl:OnEnable()
self.isOpenLvMsg = false
self:ShowBossInfo(false, true)
self.timeTab = {}
EventManager.Hit(EventId.SetTransition)
self.SelectTogPreLvLock = nil
self.AniRoot:Play("ActivityLevelsSelect_in")
self:Init()
function self.onScrollValueChanged(value)
self._mapNode.rtTogglesTmp.localPosition = self._mapNode.rt_ToggleTrans.localPosition
end
self._mapNode.rtToggles.onValueChanged:AddListener(self.onScrollValueChanged)
end
function ActivityLevelsSelectCtrl:OnDisable()
self.timeTab = {}
for i = 1, #self.tabRewardList do
local go = self.tabRewardList[i].gameObject
local btnSelect = self.tabRewardList[i].gameObject:GetComponent("UIButton")
btnSelect.onClick:RemoveAllListeners()
self:UnbindCtrlByNode(self.tabRewardList[i])
destroy(go)
end
self.tabRewardList = {}
self.SelectTogPreLvLock = nil
self.SelectObj = nil
if self.onScrollValueChanged ~= nil then
self._mapNode.rtToggles.onValueChanged:RemoveListener(self.onScrollValueChanged)
self.onScrollValueChanged = nil
end
end
function ActivityLevelsSelectCtrl:OnDestroy(...)
end
function ActivityLevelsSelectCtrl:Init()
self.activityLevelsData = PlayerData.Activity:GetActivityDataById(self.nActId)
self:RefreshTogTypeCount()
self:Refresh()
end
function ActivityLevelsSelectCtrl:Refresh()
self.nLevelType = self.activityLevelsData:GetDefaultSelectionType()
self:RefreshTogType(self.nLevelType)
local nDifficulty = self.activityLevelsData:GetDefaultSelectionDifficulty(self.nLevelType)
self:RefreshTogList(self.nLevelType, nDifficulty)
end
function ActivityLevelsSelectCtrl:RefreshTogTypeCount()
self._mapNode.togTypeExploreCtrl:SetText(ConfigTable.GetUIText("ActivityLevels_Explore"))
self._mapNode.togTypeAdventureCtrl:SetText(ConfigTable.GetUIText("ActivityLevels_Adventure"))
self._mapNode.togTypeHardCtrl:SetText(ConfigTable.GetUIText("ActivityLevels_Hard"))
self._mapNode.togTypeExploreCtrl:SetDefaultActivity(self.nLevelType == GameEnum.ActivityLevelType.Explore)
self._mapNode.togTypeAdventureCtrl:SetDefaultActivity(self.nLevelType == GameEnum.ActivityLevelType.Adventure)
self._mapNode.togTypeHardCtrl:SetDefaultActivity(self.nLevelType == GameEnum.ActivityLevelType.HARD)
local objExploreCert = self._mapNode.togTypeExplore.gameObject.transform:Find("AnimRoot/AnimSwitch/iconCert").gameObject
local objAdventureCert = self._mapNode.togTypeAdventure.gameObject.transform:Find("AnimRoot/AnimSwitch/iconCert").gameObject
local objHardCert = self._mapNode.togTypeHard.gameObject.transform:Find("AnimRoot/AnimSwitch/iconCert").gameObject
self.firstExploreLevel = self.activityLevelsData.levelTabExploreDifficulty[1]
local isOpenExplore = self.activityLevelsData:GetLevelDayOpen(GameEnum.ActivityLevelType.Explore, self.firstExploreLevel)
self._mapNode.lockExplore.gameObject:SetActive(not isOpenExplore)
self.firstAdventureLevel = self.activityLevelsData.levelTabAdventureDifficulty[1]
local isOpenAdventure = self.activityLevelsData:GetLevelDayOpen(GameEnum.ActivityLevelType.Adventure, self.firstAdventureLevel)
self._mapNode.lockAdventure.gameObject:SetActive(not isOpenAdventure)
local txt_SelectAdventure = self._mapNode.togTypeAdventure.gameObject.transform:Find("AnimRoot/AnimSwitch/txt_Select").gameObject
local txt_unSelectAdventure = self._mapNode.togTypeAdventure.gameObject.transform:Find("AnimRoot/AnimSwitch/txt_unSelect").gameObject
txt_SelectAdventure.transform.localScale = isOpenAdventure == true and Vector3.one or Vector3.zero
txt_unSelectAdventure.transform.localScale = isOpenAdventure == true and Vector3.one or Vector3.zero
self.firstHardLevel = self.activityLevelsData.levelTabHardDifficulty[1]
local isOpenHard = self.activityLevelsData:GetLevelDayOpen(GameEnum.ActivityLevelType.HARD, self.firstHardLevel)
self._mapNode.lockHard.gameObject:SetActive(not isOpenHard)
local txt_SelectHard = self._mapNode.togTypeHard.gameObject.transform:Find("AnimRoot/AnimSwitch/txt_Select").gameObject
local txt_unSelectHard = self._mapNode.togTypeHard.gameObject.transform:Find("AnimRoot/AnimSwitch/txt_unSelect").gameObject
txt_SelectHard.transform.localScale = isOpenHard == true and Vector3.one or Vector3.zero
txt_unSelectHard.transform.localScale = isOpenHard == true and Vector3.one or Vector3.zero
objExploreCert:SetActive(true)
for i, v in pairs(self.activityLevelsData.levelTabExplore) do
if v.Star < 3 then
objExploreCert:SetActive(false)
break
end
end
objAdventureCert:SetActive(true)
for i, v in pairs(self.activityLevelsData.levelTabAdventure) do
if v.Star < 3 then
objAdventureCert:SetActive(false)
break
end
end
objHardCert:SetActive(true)
for i, v in pairs(self.activityLevelsData.levelTabHard) do
if v.Star < 3 then
objHardCert:SetActive(false)
break
end
end
end
function ActivityLevelsSelectCtrl:OnClick_BtnLockExplore()
self:FirstLevelLockTips(GameEnum.ActivityLevelType.Explore, self.firstExploreLevel)
end
function ActivityLevelsSelectCtrl:OnClick_BtnLockAdventure()
self:FirstLevelLockTips(GameEnum.ActivityLevelType.Adventure, self.firstAdventureLevel)
end
function ActivityLevelsSelectCtrl:OnClick_BtnLockHard()
self:FirstLevelLockTips(GameEnum.ActivityLevelType.HARD, self.firstHardLevel)
end
function ActivityLevelsSelectCtrl:FirstLevelLockTips(nType, nLevel)
local day = self.activityLevelsData:GetUnLockDay(nType, nLevel)
local strTips = ""
if day == 0 then
local hour, min, sec = self.activityLevelsData:GetUnLockHour(nType, nLevel)
if 0 < hour then
strTips = orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Hour"), hour)
elseif 0 < min then
strTips = orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Min"), min)
elseif 0 < sec then
strTips = orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Sec"), sec)
end
else
strTips = orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_DayOpen"), day)
end
EventManager.Hit(EventId.OpenMessageBox, strTips)
end
function ActivityLevelsSelectCtrl:OnBtnClick_TogTypeExplore()
if self.nLevelType == GameEnum.ActivityLevelType.Explore then
return
end
self:CloseAllTimer()
self.AniRoot:Play("ActivityLevelsSelect_in1")
self.nLevelType = GameEnum.ActivityLevelType.Explore
self:RefreshTogType(self.nLevelType)
local nDifficulty = self.activityLevelsData:GetDefaultSelectionDifficulty(self.nLevelType)
self:RefreshTogList(self.nLevelType, nDifficulty)
end
function ActivityLevelsSelectCtrl:OnBtnClick_TogTypeAdventure()
if self.nLevelType == GameEnum.ActivityLevelType.Adventure then
return
end
self:CloseAllTimer()
self.AniRoot:Play("ActivityLevelsSelect_in1")
self.nLevelType = GameEnum.ActivityLevelType.Adventure
self:RefreshTogType(self.nLevelType)
local nDifficulty = self.activityLevelsData:GetDefaultSelectionDifficulty(self.nLevelType)
self:RefreshTogList(self.nLevelType, nDifficulty)
end
function ActivityLevelsSelectCtrl:OnBtnClick_TogTypeHard()
if self.nLevelType == GameEnum.ActivityLevelType.HARD then
return
end
self:CloseAllTimer()
self.AniRoot:Play("ActivityLevelsSelect_in1")
self.nLevelType = GameEnum.ActivityLevelType.HARD
self:RefreshTogType(self.nLevelType)
local nDifficulty = self.activityLevelsData:GetDefaultSelectionDifficulty(self.nLevelType)
self:RefreshTogList(self.nLevelType, nDifficulty)
end
function ActivityLevelsSelectCtrl:CloseAllTimer()
for i, v in pairs(self.timeTab) do
v:Pause(true)
end
self.timeTab = {}
end
function ActivityLevelsSelectCtrl:RefreshTogType(nType)
self._mapNode.togTypeExploreCtrl:SetTrigger(nType == GameEnum.ActivityLevelType.Explore)
self._mapNode.togTypeAdventureCtrl:SetTrigger(nType == GameEnum.ActivityLevelType.Adventure)
self._mapNode.togTypeHardCtrl:SetTrigger(nType == GameEnum.ActivityLevelType.HARD)
self._mapNode.togTypeExploreCtrl:SetDefaultActivity(nType == GameEnum.ActivityLevelType.Explore)
self._mapNode.togTypeAdventureCtrl:SetDefaultActivity(nType == GameEnum.ActivityLevelType.Adventure)
self._mapNode.togTypeHardCtrl:SetDefaultActivity(nType == GameEnum.ActivityLevelType.HARD)
end
function ActivityLevelsSelectCtrl:RefreshTogList(nType, nDifficulty)
self.SelectObj = nil
local tabLevelInfo, tabLevelInfoDifficulty
self.currentTypeLvCount = 0
local isOpenAdventure = self.activityLevelsData:GetLevelDayOpen(GameEnum.ActivityLevelType.Adventure, self.firstAdventureLevel)
local isOpenHard = self.activityLevelsData:GetLevelDayOpen(GameEnum.ActivityLevelType.HARD, self.firstHardLevel)
local tmpImageAdventure = self._mapNode.lockAdventure.gameObject.transform:Find("Image"):GetComponent("Image")
local tmpImageHard = self._mapNode.lockHard.gameObject.transform:Find("Image"):GetComponent("Image")
if nType == GameEnum.ActivityLevelType.Explore then
tabLevelInfo = self.activityLevelsData.levelTabExplore
tabLevelInfoDifficulty = self.activityLevelsData.levelTabExploreDifficulty
NovaAPI.SetImageColor(tmpImageAdventure, colorLockUnSelectImage)
NovaAPI.SetImageColor(tmpImageHard, colorLockUnSelectImage)
elseif nType == GameEnum.ActivityLevelType.Adventure then
tabLevelInfo = self.activityLevelsData.levelTabAdventure
tabLevelInfoDifficulty = self.activityLevelsData.levelTabAdventureDifficulty
if isOpenAdventure then
NovaAPI.SetImageColor(tmpImageAdventure, colorLockUnSelectImage)
else
NovaAPI.SetImageColor(tmpImageAdventure, colorLockSelectImage)
end
NovaAPI.SetImageColor(tmpImageHard, colorLockUnSelectImage)
else
tabLevelInfo = self.activityLevelsData.levelTabHard
tabLevelInfoDifficulty = self.activityLevelsData.levelTabHardDifficulty
NovaAPI.SetImageColor(tmpImageAdventure, colorLockUnSelectImage)
if isOpenHard then
NovaAPI.SetImageColor(tmpImageHard, colorLockUnSelectImage)
else
NovaAPI.SetImageColor(tmpImageHard, colorLockSelectImage)
end
end
self.currentTypeLvCount = #tabLevelInfoDifficulty
self._mapNode.rtToggles.gameObject:SetActive(true)
local isFour = self.currentTypeLvCount == 4
if self.isOpenLvMsg == false then
local tmpPadding = isFour and fourLvGroupPadding or twelveLvGroupPadding
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, tmpPadding[1], tmpPadding[2], tmpPadding[3], tmpPadding[4])
else
local tmpPadding = isFour and fourLvGroupPaddingOpen or twelveLvGroupPaddingOpen
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, tmpPadding[1], tmpPadding[2], tmpPadding[3], tmpPadding[4])
end
for i = 1, 12 do
self._mapNode.togRoot[i].gameObject:SetActive(i <= self.currentTypeLvCount)
end
for i = 1, self.currentTypeLvCount do
do
local tmpId = tabLevelInfoDifficulty[i]
local tmpData = tabLevelInfo[tmpId]
local isOpen = self.activityLevelsData:GetLevelDayOpen(nType, tmpData.baseData.Id)
local isLevelUnLock = self.activityLevelsData:GetLevelUnLock(nType, tmpData.baseData.Id)
self._mapNode.togRoot[i]:InitData(self, nType, self.activityLevelsData, tmpData, isOpen, isLevelUnLock, self._nSortingOrder)
if nDifficulty == i then
if self.isOpenLvMsg then
self.SelectObj = self._mapNode.togRoot[i]
self._mapNode.togRoot[i]:SetDefault(true)
self:RefreshInstanceInfo(nType, nDifficulty, true)
else
self._mapNode.togRoot[i]:SetDefault(false)
local wait = function()
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rt_ToggleTrans.gameObject:GetComponent("RectTransform"))
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
if i < 3 then
self._mapNode.rt_ToggleTrans.localPosition = Vector3(0, self._mapNode.rt_ToggleTrans.localPosition.y, 0)
elseif 10 < i then
self._mapNode.rt_ToggleTrans.localPosition = Vector3(-3758, self._mapNode.rt_ToggleTrans.localPosition.y, 0)
else
self._mapNode.rt_ToggleTrans.localPosition = Vector3(-400 * (i - 2), self._mapNode.rt_ToggleTrans.localPosition.y, 0)
end
end
cs_coroutine.start(wait)
end
else
self._mapNode.togRoot[i]:SetDefault(false)
end
end
end
end
function ActivityLevelsSelectCtrl:SetSelectObj(tmpSelectObj)
if self.SelectObj ~= nil then
self.SelectObj:SetDefault(false)
end
self.SelectObj = tmpSelectObj
end
function ActivityLevelsSelectCtrl:OnBtnClick_CloseBossInfo()
self._mapNode.rtBossAni:Play("rtBoss_out")
self:AddTimer(1, 0.2, function()
self:ShowBossInfo(false, false)
end, true, true, true)
end
function ActivityLevelsSelectCtrl:ShowBossInfo(isShow, isOnEnable)
self.isOpenLvMsg = isShow
self._mapNode.rtBoss:SetActive(isShow)
self._mapNode.btnCloseBg.gameObject:SetActive(isShow)
if not isShow and self.SelectObj ~= nil then
self.SelectObj:SetDefault(false)
self.SelectObj = nil
end
if not isShow and not isOnEnable then
local isFour = self.currentTypeLvCount == 4
local tmpPadding = isFour and fourLvGroupPadding or twelveLvGroupPadding
if isFour then
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
local moveTime = 0.2
local layoutGroup = self._mapNode.rt_Toggle:GetComponent("HorizontalLayoutGroup")
local startLeft = layoutGroup ~= nil and layoutGroup.padding.left or tmpPadding[1]
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, startLeft, fourLvGroupPaddingOpen[2], fourLvGroupPaddingOpen[3], fourLvGroupPaddingOpen[4])
CS.DG.Tweening.DOVirtual.Float(startLeft, tmpPadding[1], moveTime, function(v)
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, math.floor(v), tmpPadding[2], tmpPadding[3], tmpPadding[4])
end)
else
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, tmpPadding[1], tmpPadding[2], tmpPadding[3], tmpPadding[4])
end
end
end
function ActivityLevelsSelectCtrl:RefreshInstanceInfo(nType, nHard, isInit)
if self.currentTypeLvCount == 12 then
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, twelveLvGroupPaddingOpen[1], twelveLvGroupPaddingOpen[2], twelveLvGroupPaddingOpen[3], twelveLvGroupPaddingOpen[4])
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
local moveTime = isInit and 0.4 or 0.2
if nHard < 3 then
self._mapNode.rt_ToggleTrans:DOLocalMoveX(0, moveTime)
elseif 10 < nHard then
self._mapNode.rt_ToggleTrans:DOLocalMoveX(-3758, moveTime)
else
self._mapNode.rt_ToggleTrans:DOLocalMoveX(-400 * (nHard - 2), moveTime)
end
end
cs_coroutine.start(wait)
elseif self.currentTypeLvCount == 8 then
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, twelveLvGroupPaddingOpen[1], twelveLvGroupPaddingOpen[2], twelveLvGroupPaddingOpen[3], twelveLvGroupPaddingOpen[4])
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
local moveTime = isInit and 0.4 or 0.2
if nHard < 3 then
self._mapNode.rt_ToggleTrans:DOLocalMoveX(0, moveTime)
elseif 6 < nHard then
self._mapNode.rt_ToggleTrans:DOLocalMoveX(-2054, moveTime)
else
self._mapNode.rt_ToggleTrans:DOLocalMoveX(-400 * (nHard - 2), moveTime)
end
end
cs_coroutine.start(wait)
else
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
local moveTime = isInit and 0.4 or 0.2
EventManager.Hit(EventId.TemporaryBlockInput, moveTime)
local layoutGroup = self._mapNode.rt_Toggle:GetComponent("HorizontalLayoutGroup")
local startLeft = layoutGroup ~= nil and layoutGroup.padding.left or fourLvGroupPadding[1]
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, startLeft, fourLvGroupPaddingOpen[2], fourLvGroupPaddingOpen[3], fourLvGroupPaddingOpen[4])
CS.DG.Tweening.DOVirtual.Float(startLeft, fourLvGroupPaddingOpen[1], moveTime, function(v)
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, math.floor(v), fourLvGroupPaddingOpen[2], fourLvGroupPaddingOpen[3], fourLvGroupPaddingOpen[4])
end)
if nHard < 2 then
self._mapNode.rt_ToggleTrans:DOLocalMoveX(0, moveTime)
elseif 3 <= nHard then
self._mapNode.rt_ToggleTrans:DOLocalMoveX(-350, moveTime)
else
self._mapNode.rt_ToggleTrans:DOLocalMoveX(-75 * (nHard - 1), moveTime)
end
end
cs_coroutine.start(wait)
end
self.curSelectHard = nHard
local levelId = 0
self.selectLevelData = nil
if nType == GameEnum.ActivityLevelType.Explore then
levelId = self.activityLevelsData.levelTabExploreDifficulty[nHard]
self.selectLevelData = self.activityLevelsData.levelTabExplore[levelId]
elseif nType == GameEnum.ActivityLevelType.Adventure then
levelId = self.activityLevelsData.levelTabAdventureDifficulty[nHard]
self.selectLevelData = self.activityLevelsData.levelTabAdventure[levelId]
else
levelId = self.activityLevelsData.levelTabHardDifficulty[nHard]
self.selectLevelData = self.activityLevelsData.levelTabHard[levelId]
end
NovaAPI.SetTMPText(self._mapNode.txtRecommendLevel, self.selectLevelData.baseData.SuggestedPower)
local sRank = "Icon/BuildRank/BuildRank_" .. self.selectLevelData.baseData.RecommendBuildRank
self:SetPngSprite(self._mapNode.imgBuild, sRank)
NovaAPI.SetTMPText(self._mapNode.TMPName, self.selectLevelData.baseData.Name)
local strTitle = ""
if nType == GameEnum.ActivityLevelType.Explore then
strTitle = orderedFormat(lvIndexTitle, 1, self.selectLevelData.baseData.Difficulty)
elseif nType == GameEnum.ActivityLevelType.Adventure then
strTitle = orderedFormat(lvIndexTitle, 2, self.selectLevelData.baseData.Difficulty)
elseif nType == GameEnum.ActivityLevelType.HARD then
strTitle = orderedFormat(lvIndexTitle, 3, self.selectLevelData.baseData.Difficulty)
end
NovaAPI.SetTMPText(self._mapNode.TMPLevel, strTitle)
NovaAPI.SetTMPText(self._mapNode.detailDesc, self.selectLevelData.baseData.Desc)
self.detailDescContent:DOLocalMoveY(0, 0)
self.curStar = self.selectLevelData.Star
local tbCond = {
self.selectLevelData.baseData.OneStarDesc,
self.selectLevelData.baseData.TwoStarDesc,
self.selectLevelData.baseData.ThreeStarDesc
}
for i = 1, 3 do
local rtTask = self._mapNode.Task[i]
local goDone = rtTask:Find("imgDone").gameObject
local imgUnDone = rtTask:Find("imgUnDone").gameObject
local Text = rtTask:Find("Text"):GetComponent("TMP_Text")
goDone:SetActive(i <= self.curStar)
imgUnDone:SetActive(i > self.curStar)
local cond = tbCond[i]
if cond == nil then
rtTask.gameObject:SetActive(false)
return
else
rtTask.gameObject:SetActive(true)
NovaAPI.SetTMPText(Text, cond)
end
end
self.PreviewMonsterGroupId = self.selectLevelData.baseData.PreviewMonsterGroupId
local isOpen = self.activityLevelsData:GetLevelDayOpen(nType, self.selectLevelData.baseData.Id)
local isLevelUnLock = self.activityLevelsData:GetLevelUnLock(nType, self.selectLevelData.baseData.Id)
local isNeedEnergyConsume = true
if not self.selectLevelData.baseData.EnergyConsumeOnRetry and 0 < self.selectLevelData.Star then
isNeedEnergyConsume = false
end
if isOpen and isLevelUnLock then
self._mapNode.btnListRoot:SetActive(true)
self._mapNode.ListConditions:SetActive(false)
if self.selectLevelData.baseData.ThreeStarSweep then
if self.selectLevelData.Star == 3 then
self._mapNode.btnRaid.gameObject:SetActive(true)
self._mapNode.btnGo.gameObject:SetActive(true)
self._mapNode.btnRaidUnlock.gameObject:SetActive(false)
else
self._mapNode.btnRaid.gameObject:SetActive(false)
self._mapNode.btnGo.gameObject:SetActive(false)
self._mapNode.btnRaidUnlock.gameObject:SetActive(true)
self._mapNode.grpRaidUnlock:SetActive(true)
end
else
self._mapNode.btnRaid.gameObject:SetActive(false)
self._mapNode.btnGo.gameObject:SetActive(false)
self._mapNode.btnRaidUnlock.gameObject:SetActive(true)
self._mapNode.grpRaidUnlock:SetActive(false)
end
local nHas = PlayerData.Base:GetCurEnergy()
local nRequire = self.selectLevelData.baseData.EnergyConsume
if not isNeedEnergyConsume then
nRequire = 0
end
self.curRequireEnergy = nRequire
NovaAPI.SetTMPText(self._mapNode.txtTicketsCount, nRequire)
NovaAPI.SetTMPColor(self._mapNode.txtTicketsCount, nRequire > nHas.nEnergy and Red_Unable or Blue_Normal)
self._mapNode.goCoin:SetActive(true)
NovaAPI.SetTMPText(self._mapNode.txtTicketsCountRaidUnlock, nRequire)
NovaAPI.SetTMPColor(self._mapNode.txtTicketsCountRaidUnlock, nRequire > nHas.nEnergy and Red_Unable or Blue_Normal)
self._mapNode.goCoinRaidUnlock:SetActive(true)
elseif isOpen and not isLevelUnLock then
self._mapNode.btnListRoot:SetActive(false)
self._mapNode.ListConditions:SetActive(true)
local preLevelId = self.selectLevelData.baseData.PreLevelId
if preLevelId ~= 0 then
local lvPreNeedStar = self.selectLevelData.baseData.PreLevelStar
local lvPreStar = self.activityLevelsData:GetPreLevelStar(nType, self.selectLevelData.baseData.Id)
local imgConditions_Lock_1 = self._mapNode.ListConditionsObj[1].transform:Find("imgConditions_Lock").gameObject
local imgConditions_UnLock_1 = self._mapNode.ListConditionsObj[1].transform:Find("imgConditions_UnLock").gameObject
local txt = self._mapNode.ListConditionsObj[1].transform:Find("tex_ConditionsTips"):GetComponent("TMP_Text")
local tmpData = ConfigTable.GetData("ActivityLevelsLevel", preLevelId)
imgConditions_Lock_1:SetActive(lvPreNeedStar > lvPreStar)
imgConditions_UnLock_1:SetActive(lvPreNeedStar <= lvPreStar)
NovaAPI.SetTMPText(txt, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_PreLevel"), tmpData.Name))
NovaAPI.SetTMPColor(txt, lvPreNeedStar <= lvPreStar and colorConditionsUnLock or colorConditionsLock)
else
local imgConditions_Lock_1 = self._mapNode.ListConditionsObj[1].transform:Find("imgConditions_Lock").gameObject
local imgConditions_UnLock_1 = self._mapNode.ListConditionsObj[1].transform:Find("imgConditions_UnLock").gameObject
local txt = self._mapNode.ListConditionsObj[1].transform:Find("tex_ConditionsTips"):GetComponent("TMP_Text")
imgConditions_Lock_1:SetActive(true)
imgConditions_UnLock_1:SetActive(false)
NovaAPI.SetTMPText(txt, ConfigTable.GetUIText("Unlocked_By_PreLevel"))
NovaAPI.SetTMPColor(txt, colorConditionsUnLock)
end
local preActivityStory = self.selectLevelData.baseData.PreActivityStory
if preActivityStory ~= nil and preActivityStory[1] ~= nil then
local isRead = PlayerData.ActivityAvg:IsStoryReaded(preActivityStory[2])
local imgConditions_Lock_2 = self._mapNode.ListConditionsObj[2].transform:Find("imgConditions_Lock").gameObject
local imgConditions_UnLock_2 = self._mapNode.ListConditionsObj[2].transform:Find("imgConditions_UnLock").gameObject
local txt = self._mapNode.ListConditionsObj[2].transform:Find("tex_ConditionsTips"):GetComponent("TMP_Text")
imgConditions_Lock_2:SetActive(not isRead)
imgConditions_UnLock_2:SetActive(isRead)
local cfgdata = ConfigTable.GetData("ActivityStory", preActivityStory[2])
if cfgdata ~= nil then
NovaAPI.SetTMPText(txt, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Avg"), cfgdata.Title))
self._mapNode.ListConditionsObj[2]:SetActive(true)
NovaAPI.SetTMPColor(txt, isRead and colorConditionsUnLock or colorConditionsLock)
else
self._mapNode.ListConditionsObj[2]:SetActive(false)
end
else
self._mapNode.ListConditionsObj[2]:SetActive(false)
end
elseif not isOpen then
self._mapNode.btnListRoot:SetActive(false)
self._mapNode.ListConditions:SetActive(true)
self._mapNode.ListConditionsObj[2]:SetActive(false)
local imgConditions_Lock_1 = self._mapNode.ListConditionsObj[1].transform:Find("imgConditions_Lock").gameObject
local imgConditions_UnLock_1 = self._mapNode.ListConditionsObj[1].transform:Find("imgConditions_UnLock").gameObject
imgConditions_Lock_1:SetActive(true)
imgConditions_UnLock_1:SetActive(false)
NovaAPI.SetTMPColor(txt, colorConditionsUnLock)
local txt = self._mapNode.ListConditionsObj[1].transform:Find("tex_ConditionsTips"):GetComponent("TMP_Text")
local day = self.activityLevelsData:GetUnLockDay(nType, self.selectLevelData.baseData.Id)
if day == 0 then
local hour, min, sec = self.activityLevelsData:GetUnLockHour(nType, self.selectLevelData.baseData.Id)
if 0 < hour then
NovaAPI.SetTMPText(txt, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Hour"), hour))
elseif 0 < min then
NovaAPI.SetTMPText(txt, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Min"), min))
elseif 0 < sec then
NovaAPI.SetTMPText(txt, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_Min"), min))
end
else
local _day, _hour = self.activityLevelsData:GetUnLockDayHour(nType, self.selectLevelData.baseData.Id)
NovaAPI.SetTMPText(txt, orderedFormat(ConfigTable.GetUIText("ActivityLevels_Lock_DayHourOpen"), _day, _hour))
end
end
for i = 1, #self.tabRewardList do
self.tabRewardList[i].gameObject:SetActive(false)
end
local tbReward = decodeJson(self.selectLevelData.baseData.CompleteRewardPreview)
self._mapNode.btn_itemTemp.gameObject:SetActive(false)
for i = 1, #tbReward do
if i > #self.tabRewardList then
local obj = instantiate(self._mapNode.btn_itemTemp, self._mapNode.rewardRoot)
self.tabRewardList[i] = self:BindCtrlByNode(obj, "Game.UI.TemplateEx.TemplateItemCtrl")
end
do
local itemCtrl = self.tabRewardList[i]
itemCtrl.gameObject:SetActive(true)
if tbReward[i] ~= nil then
local bReceived = 0 < self.selectLevelData.Star and tbReward[i][3] == 1
local bFirstPass = tbReward[i][3] == 1
itemCtrl:SetItem(tbReward[i][1], nil, UTILS.ParseRewardItemCount(tbReward[i]), nil, bReceived, bFirstPass, false, true)
local btnItem = itemCtrl.gameObject:GetComponent("UIButton")
btnItem.onClick:RemoveAllListeners()
local clickCb = function()
self:OnBtnClick_RewardItem(tbReward[i][1], btnItem.gameObject)
end
btnItem.onClick:AddListener(clickCb)
end
end
end
if self._mapNode.rtBoss.activeSelf == false then
self:ShowBossInfo(true, false)
self:AddTimer(1, 0.2, function()
self._mapNode.rtBossAni:Play("rtBoss_in")
end, true, true, true)
else
self._mapNode.rtBossAni:Play("rtBoss_Empty")
self:AddTimer(1, 0.1, function()
self._mapNode.rtBossAni:Play("rtBoss_in")
end, true, true, true)
end
end
function ActivityLevelsSelectCtrl:OnBtnClick_RewardItem(nTid, btn)
local rtBtn = btn.transform
UTILS.ClickItemGridWithTips(nTid, rtBtn, false, true, false)
end
function ActivityLevelsSelectCtrl:OnClickBtnGo()
local nEnergy = PlayerData.Base:GetCurEnergy().nEnergy
if nEnergy < self.curRequireEnergy then
local callback = function()
EventManager.Hit(EventId.ClosePanel, PanelId.EnergyBuy)
end
EventManager.Hit(EventId.OpenPanel, PanelId.EnergyBuy, AllEnum.EnergyPanelType.Main, {}, true, callback)
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("MainlineData_Energy"))
return
end
if self.SelectObj ~= nil then
self.SelectObj:ShowArrowAni(true)
end
self:AddTimer(1, 0.2, function()
self.activityLevelsData:ChangeRedDot(self.selectLevelData.baseData.Type, self.selectLevelData.baseData.Id)
PlayerData.Activity:SetActivityLevelActId(self.nActId)
EventManager.Hit(EventId.OpenPanel, PanelId.RegionBossFormation, AllEnum.RegionBossFormationType.ActivityLevels, self.selectLevelData.baseData.Id, {
self.nActId
})
end, true, true, true)
end
function ActivityLevelsSelectCtrl:OnClickBtnRaid()
if self.curStar ~= 3 then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Raid_Lock"))
return
end
if self.SelectObj ~= nil then
self.SelectObj:ShowArrowAni(true)
end
self:AddTimer(1, 0.2, function()
local nNeedEnergy = self.curRequireEnergy
EventManager.Hit(EventId.OpenPanel, PanelId.Raid, self.selectLevelData.baseData.Id, nNeedEnergy, 0, self.nActId)
end, true, true, true)
end
function ActivityLevelsSelectCtrl:OnEvent_ClosePanel(nPanelId)
if type(nPanelId) == "number" and nPanelId == PanelId.Raid and self.SelectObj ~= nil then
self.SelectObj:ShowArrowAni(false)
end
end
function ActivityLevelsSelectCtrl:OnBtnClick_EnemyInfo()
EventManager.Hit("OpenActivityLevelsMonsterInfo", self.PreviewMonsterGroupId)
end
function ActivityLevelsSelectCtrl:OnEvent_UpdateEnergy()
local nHas = PlayerData.Base:GetCurEnergy()
NovaAPI.SetTMPColor(self._mapNode.txtTicketsCount, nHas.nEnergy < self.curRequireEnergy and Red_Unable or Blue_Normal)
NovaAPI.SetTMPColor(self._mapNode.txtTicketsCountRaidUnlock, nHas.nEnergy < self.curRequireEnergy and Red_Unable or Blue_Normal)
end
return ActivityLevelsSelectCtrl
@@ -0,0 +1,21 @@
local ActivityLevelsSelectPanel = class("ActivityLevelsSelectPanel", BasePanel)
ActivityLevelsSelectPanel._sUIResRootPath = "UI_Activity/"
ActivityLevelsSelectPanel._tbDefine = {
{
sPrefabPath = "10112/ActivityLevels/ActivityLevelsSelect.prefab",
sCtrlName = "Game.UI.ActivityTheme.10112.ActivityLevels.ActivityLevelsSelectCtrl"
}
}
function ActivityLevelsSelectPanel:Awake()
end
function ActivityLevelsSelectPanel:OnEnable()
end
function ActivityLevelsSelectPanel:OnAfterEnter()
end
function ActivityLevelsSelectPanel:OnDisable()
end
function ActivityLevelsSelectPanel:OnDestroy()
end
function ActivityLevelsSelectPanel:OnRelease()
end
return ActivityLevelsSelectPanel
@@ -0,0 +1,68 @@
local TemplateToggleCtrl10112 = class("TemplateToggleCtrl10112", BaseCtrl)
TemplateToggleCtrl10112._mapNodeConfig = {
AnimSwitch = {sComponentName = "Animator"},
txt_Select = {sComponentName = "TMP_Text"},
txt_unSelect = {sComponentName = "TMP_Text"},
Select = {},
unSelect = {},
SelectLine = {}
}
TemplateToggleCtrl10112._mapEventConfig = {}
function TemplateToggleCtrl10112:SetText(sText)
NovaAPI.SetTMPText(self._mapNode.txt_Select, sText)
NovaAPI.SetTMPText(self._mapNode.txt_unSelect, sText)
end
function TemplateToggleCtrl10112:SetDefault(bOn)
if self._mapNode.AnimSwitch.enabled == true then
self._mapNode.AnimSwitch.enabled = false
end
self._mapNode.Select:SetActive(bOn)
self._mapNode.unSelect:SetActive(not bOn)
self._mapNode.SelectLine:SetActive(bOn)
self._mapNode.txt_Select.gameObject:SetActive(bOn)
self._mapNode.txt_unSelect.gameObject:SetActive(not bOn)
NovaAPI.SetTMPColor(self._mapNode.txt_Select, White_Normal)
NovaAPI.SetTMPColor(self._mapNode.txt_unSelect, Blue_Normal)
end
function TemplateToggleCtrl10112:SetDefaultAct10101(bOn)
if self._mapNode.AnimSwitch.enabled == true then
self._mapNode.AnimSwitch.enabled = false
end
self._mapNode.Select:SetActive(bOn)
self._mapNode.unSelect:SetActive(not bOn)
self._mapNode.txt_Select.gameObject:SetActive(bOn)
self._mapNode.txt_unSelect.gameObject:SetActive(not bOn)
NovaAPI.SetTMPColor(self._mapNode.txt_Select, Color(1, 1, 1, 1))
NovaAPI.SetTMPColor(self._mapNode.txt_unSelect, Color(0.2196078431372549, 0.1803921568627451, 0.1450980392156863, 1))
end
function TemplateToggleCtrl10112:SetDefaultActivity(bOn, colorSelect, colorUnSelect)
if self._mapNode.AnimSwitch.enabled == true then
self._mapNode.AnimSwitch.enabled = false
end
self._mapNode.Select:SetActive(bOn)
self._mapNode.unSelect:SetActive(not bOn)
self._mapNode.SelectLine:SetActive(bOn)
self._mapNode.txt_Select.gameObject:SetActive(bOn)
self._mapNode.txt_unSelect.gameObject:SetActive(not bOn)
if colorSelect ~= nil then
NovaAPI.SetTMPColor(self._mapNode.txt_Select, colorSelect)
NovaAPI.SetTMPColor(self._mapNode.txt_unSelect, colorUnSelect)
end
end
function TemplateToggleCtrl10112:SetTrigger(bOn)
if self._mapNode.AnimSwitch.enabled == false then
self._mapNode.AnimSwitch.enabled = true
end
if bOn then
self._mapNode.AnimSwitch:SetTrigger("tOn")
else
self._mapNode.AnimSwitch:SetTrigger("tOff")
end
end
function TemplateToggleCtrl10112:ResetTrigger()
if self._mapNode.AnimSwitch.enabled == false then
self._mapNode.AnimSwitch.enabled = true
end
self._mapNode.AnimSwitch:ResetTrigger("tOff")
end
return TemplateToggleCtrl10112
@@ -0,0 +1,173 @@
local ActivityLongestDayCtrl = class("ActivityLongestDayCtrl", BaseCtrl)
local TimerManager = require("GameCore.Timer.TimerManager")
local ClientManager = CS.ClientManager.Instance
ActivityLongestDayCtrl._mapNodeConfig = {
btnGo = {
sComponentName = "UIButton",
callback = "OnBtnClick_Go"
},
txtTime = {sComponentName = "TMP_Text"},
svReward = {
sNodeName = "PreviewUpgradeMaterial",
sComponentName = "LoopScrollView"
},
txtAdvanceMat = {
sComponentName = "TMP_Text",
sLanguageId = "MessageBox_Reward"
},
txtDate = {sComponentName = "TMP_Text"},
imgLock = {},
txtLock = {sComponentName = "TMP_Text"},
imgEnd = {},
txtActivityEnd = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_End"
},
imgRemaineTime = {},
txtBtnGo = {
sComponentName = "TMP_Text",
sLanguageId = "TowerDef_EnterActivity"
},
txtBtnActDetail = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Btn_Detail"
},
btnActDetail = {
sComponentName = "UIButton",
callback = "OnBtnClick_Detail"
}
}
function ActivityLongestDayCtrl:Awake()
self.tbGridCtrl = {}
end
function ActivityLongestDayCtrl:OnDisable()
self:UnbindCtrl()
end
function ActivityLongestDayCtrl:InitActData(actData)
self.actData = actData
self:RefreshLockState()
self:RefreshDate()
self:RefreshTimeout()
self:RefreshReward()
end
function ActivityLongestDayCtrl:UnInit()
self:UnbindCtrl()
end
function ActivityLongestDayCtrl:UnbindCtrl()
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGridCtrl[nInstanceId] = nil
end
self.tbGridCtrl = {}
end
function ActivityLongestDayCtrl:RefreshLockState()
local IsUnlock, txtLock = self.actData:IsUnlock()
self._mapNode.imgLock.gameObject:SetActive(not IsUnlock)
self._mapNode.btnGo.gameObject:SetActive(IsUnlock)
if not IsUnlock then
NovaAPI.SetTMPText(self._mapNode.txtLock, txtLock)
end
end
function ActivityLongestDayCtrl:RefreshTimeout()
local endTime = self.actData:GetActGroupEndTime()
local curTime = ClientManager.serverTimeStamp
local remainTime = endTime - curTime
self._mapNode.imgRemaineTime:SetActive(0 < remainTime)
self._mapNode.imgEnd:SetActive(remainTime <= 0)
if remainTime < 0 and self.remainTimer ~= nil then
TimerManager.Remove(self.remainTimer)
self.remainTimer = nil
return
end
local sTimeStr = ""
if remainTime <= 60 then
local sec = math.floor(remainTime)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
elseif 60 < remainTime and remainTime <= 3600 then
local min = math.floor(remainTime / 60)
local sec = math.floor(remainTime - min * 60)
if sec == 0 then
min = min - 1
sec = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
elseif 3600 < remainTime and remainTime <= 86400 then
local hour = math.floor(remainTime / 3600)
local min = math.floor((remainTime - hour * 3600) / 60)
if min == 0 then
hour = hour - 1
min = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
elseif 86400 < remainTime then
local day = math.floor(remainTime / 86400)
local hour = math.floor((remainTime - day * 86400) / 3600)
if hour == 0 then
day = day - 1
hour = 24
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
end
NovaAPI.SetTMPText(self._mapNode.txtTime, sTimeStr)
end
function ActivityLongestDayCtrl:RefreshDate()
local nOpenMonth, nOpenDay, nEndMonth, nEndDay, nOpenYear, nEndYear = self.actData:GetActGroupDate()
local strOpenDay = string.format("%d", nOpenDay)
local strEndDay = string.format("%d", nEndDay)
local dateStr = string.format("%s/%s/%s ~ %s/%s/%s", nOpenYear, nOpenMonth, strOpenDay, nEndYear, nEndMonth, strEndDay)
NovaAPI.SetTMPText(self._mapNode.txtDate, dateStr)
end
function ActivityLongestDayCtrl:RefreshReward()
local actGroupCfg = self.actData:GetActGroupCfgData()
local rewardData = actGroupCfg.RewardsShow
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGridCtrl[nInstanceId] = nil
end
self._mapNode.svReward:Init(#rewardData, self, self.RefreshRewardGridItem, self.BtnRewardGridClick)
end
function ActivityLongestDayCtrl:RefreshRewardGridItem(go, index)
local actGroupCfg = self.actData:GetActGroupCfgData()
local rewardData = actGroupCfg.RewardsShow
local rewardId = rewardData[index + 1]
local nInstanceID = go:GetInstanceID()
if not self.tbGridCtrl[nInstanceID] then
self.tbGridCtrl[nInstanceID] = self:BindCtrlByNode(go, "Game.UI.TemplateEx.TemplateItemCtrl")
end
self.tbGridCtrl[nInstanceID]:SetItem(rewardId)
end
function ActivityLongestDayCtrl:BtnRewardGridClick(goGrid, gridIndex)
local nIndex = gridIndex + 1
local actGroupCfg = self.actData:GetActGroupCfgData()
local rewardData = actGroupCfg.RewardsShow
local item = goGrid.transform:Find("AnimRoot/item")
UTILS.ClickItemGridWithTips(rewardData[nIndex], item.transform, true, true, false)
end
function ActivityLongestDayCtrl:OnBtnClick_Go()
local actGroupCfg = self.actData:GetActGroupCfgData()
if actGroupCfg ~= nil and actGroupCfg ~= nil and actGroupCfg.PanelId ~= nil and actGroupCfg.PanelId > 0 then
if actGroupCfg.TransitionId ~= nil and 0 < actGroupCfg.TransitionId then
local callback = function()
EventManager.Hit(EventId.OpenPanel, actGroupCfg.PanelId, actGroupCfg.Id, true)
end
EventManager.Hit(EventId.SetTransition, actGroupCfg.TransitionId, callback)
else
EventManager.Hit(EventId.OpenPanel, actGroupCfg.PanelId, actGroupCfg.Id, true)
end
end
end
function ActivityLongestDayCtrl:OnBtnClick_Detail()
local actGroupCfg = self.actData:GetActGroupCfgData()
if actGroupCfg == nil then
return
end
local msg = {
nType = AllEnum.MessageBox.Desc,
sContent = actGroupCfg.DesText,
sTitle = ConfigTable.GetUIText("Activity_Btn_Detail")
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
function ActivityLongestDayCtrl:ClearActivity()
end
return ActivityLongestDayCtrl
@@ -0,0 +1,546 @@
local BaseCtrl = require("GameCore.UI.BaseCtrl")
local LongestDayCtrl = class("LongestDayCtrl", BaseCtrl)
local ClientManager = CS.ClientManager.Instance
local TimerManager = require("GameCore.Timer.TimerManager")
local LocalData = require("GameCore.Data.LocalData")
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
LongestDayCtrl._mapNodeConfig = {
TopBar = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
goBg = {sNodeName = "---Bg---"},
btnEntrance_ = {
nCount = 5,
sComponentName = "UIButton",
callback = "OnBtn_ClickActivityEntrance"
},
imgRemaineTime = {},
txtActivityTime = {sComponentName = "TMP_Text"},
txtActivityDate = {sComponentName = "TMP_Text"},
imgEnd = {},
txtActivityEnd = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_End"
},
imgMiniGame = {sComponentName = "Image"},
imgMiniGameEnd = {},
txtMiniGame = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Mini_Game_10112"
},
txtMiniGameEnd = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Mini_Game_10112"
},
txtMiniGame_End = {},
txtMiniGameEndState = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_End"
},
imgMiniGameActivityUnlockTime = {},
txtMiniGameActivityUnlockTime = {sComponentName = "TMP_Text"},
imgMiniGameActivityTime = {},
txtMiniGameActivityTime = {sComponentName = "TMP_Text"},
dbMiniGame = {},
dbMiniGameEnd = {},
txtTask = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Task"
},
txtTaskProgress = {sComponentName = "TMP_Text"},
imgTaskActivityTime = {},
txtTaskActivityTime = {sComponentName = "TMP_Text"},
txtTaskEndState = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_End"
},
imgTaskEnd = {},
txtTaskEnd = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Task"
},
txtTaskProgress_End = {},
imgTaskActivityUnlockTime = {},
txtTaskActivityUnlockTime = {sComponentName = "TMP_Text"},
dbTaskEnd = {},
txtTaskProgressEnd = {sComponentName = "TMP_Text"},
dbTask = {},
dbTaskEnd = {},
txtStory1 = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Story1_10112"
},
txtStory1_End = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Story1_10112"
},
txtStory2 = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Story2_10112"
},
txtStory2_End = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Story2_10112"
},
goStoryEnd = {},
txtStoryEnd = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_End"
},
imgStoryActivityTime = {},
txtStoryActivityTime = {sComponentName = "TMP_Text"},
imgStoryActivityUnlockTime = {},
txtStoryActivityUnlockTime = {sComponentName = "TMP_Text"},
dbStory = {},
dbStoryEnd = {},
txtShopEndState = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_End"
},
txtShop = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Shop"
},
txtShopEnd = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Shop"
},
imgShopEnd = {},
txtShop_End = {},
imgShopActivityTime = {},
txtShopActivityTime = {sComponentName = "TMP_Text"},
imgShopActivityUnlockTime = {},
txtShopActivityUnlockTime = {sComponentName = "TMP_Text"},
dbShop = {},
dbShopEnd = {},
txtLevel = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Level"
},
txtLevelShadow = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Level"
},
txtLevel_End = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Level"
},
goLevelEnd = {},
txtLevelEnd = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_End"
},
imgLevelActivityUnlockTime = {},
txtLevelActivityUnlockTime = {sComponentName = "TMP_Text"},
imgLevelActivityTime = {},
txtLevelActivityTime = {sComponentName = "TMP_Text"},
grpBg = {},
imgLevelEnd = {},
miniGameRedDot = {},
redDotEntrance2 = {},
storyRedDot = {},
reddotLevel = {},
goMiniGameEnd = {},
imgStoryEnd = {}
}
LongestDayCtrl._mapEventConfig = {}
local ActivityState = {
NotOpen = 1,
Open = 2,
Closed = 3
}
function LongestDayCtrl:Awake()
local param = self:GetPanelParam()
if type(param) == "table" then
self.nActId = param[1]
end
self.ActData = PlayerData.Activity:GetActivityGroupDataById(self.nActId)
if self.ActData ~= nil then
self.ActivityGroupCfg = self.ActData.actGroupConfig
end
end
function LongestDayCtrl:OnEnable()
self:RefreshPanel()
for i = 1, 6 do
local actData = self.ActData:GetActivityDataByIndex(i)
local nActId = actData ~= nil and actData.ActivityId or 0
local state = self.tbActState[nActId]
if nActId ~= nil and 0 < nActId and state ~= nil then
if i == AllEnum.ActivityThemeFuncIndex.Task then
if state == ActivityState.Closed then
self._mapNode.redDotEntrance2:SetActive(false)
else
RedDotManager.RegisterNode(RedDotDefine.Activity_Group_Task, {
self.nActId,
nActId
}, self._mapNode.redDotEntrance2)
end
elseif i == AllEnum.ActivityThemeFuncIndex.Level then
RedDotManager.RegisterNode(RedDotDefine.ActivityLevel, {
self.nActId,
nActId
}, self._mapNode.reddotLevel)
elseif i == AllEnum.ActivityThemeFuncIndex.FateCard then
RedDotManager.RegisterNode(RedDotDefine.Activity_Group_PenguinCard_Level, {
self.nActId
}, self._mapNode.reddotFatecard)
elseif i == AllEnum.ActivityThemeFuncIndex.MiniGame then
local bOld = LocalData.GetPlayerLocalData("Activity_MiniGame_10112_New") or state ~= ActivityState.Open
RedDotManager.SetValid(RedDotDefine.Activity_GroupNew_MiniGame, {
self.nActId
}, not bOld)
RedDotManager.RegisterNode(RedDotDefine.Activity_GroupNew_MiniGame, {
self.nActId
}, self._mapNode.miniGameRedDot)
end
end
end
local sAnimName = "LongestDayPanel_Full"
local sAudioName = "Mode_10112_activity"
if self.animRoot ~= nil then
self.animRoot = self.gameObject:GetComponent("Animator")
sAnimName = "LongestDayPanel_Pullback"
sAudioName = "Mode_10112_activity_01"
end
self.animRoot = self.gameObject:GetComponent("Animator")
self.animRoot:Play(sAnimName, 0, 0)
WwiseAudioMgr:PostEvent(sAudioName)
end
function LongestDayCtrl:OnDisable()
if nil ~= self.minigameRemainTimer then
TimerManager.Remove(self.minigameRemainTimer)
self.minigameRemainTimer = nil
end
if nil ~= self.remainTimer then
TimerManager.Remove(self.remainTimer)
self.remainTimer = nil
end
if nil ~= self.shopRemainTimer then
TimerManager.Remove(self.shopRemainTimer)
self.shopRemainTimer = nil
end
if nil ~= self.levelRemainTimer then
TimerManager.Remove(self.levelRemainTimer)
self.levelRemainTimer = nil
end
if nil ~= self.avgRemainTimer then
TimerManager.Remove(self.avgRemainTimer)
self.avgRemainTimer = nil
end
if nil ~= self.taskRemainTimer then
TimerManager.Remove(self.taskRemainTimer)
self.taskRemainTimer = nil
end
end
function LongestDayCtrl:RefreshPanel()
if self.ActData == nil or self.ActivityGroupCfg == nil then
return
end
self:RefreshTime()
self:RefreshButtonState()
end
function LongestDayCtrl:RefreshTime()
local bOpen = self.ActData:CheckActivityGroupOpen()
if bOpen then
self:RefreshRemainTime(self.ActData:GetActGroupEndTime(), self._mapNode.txtActivityTime)
if nil == self.remainTimer then
self.remainTimer = self:AddTimer(0, 1, function()
local remainTime = self:RefreshRemainTime(self.ActData:GetActGroupEndTime(), self._mapNode.txtActivityTime)
if remainTime <= 0 then
TimerManager.Remove(self.remainTimer)
self.remainTimer = nil
end
end, true, true, false)
end
end
self._mapNode.imgRemaineTime:SetActive(bOpen)
self._mapNode.imgEnd:SetActive(not bOpen)
local nOpenMonth, nOpenDay, nEndMonth, nEndDay, nOpenYear, nEndYear = self.ActData:GetActGroupDate()
local strOpenDay = string.format("%d", nOpenDay)
local strEndDay = string.format("%d", nEndDay)
local dateStr = string.format("%s/%s/%s ~ %s/%s/%s", nOpenYear, nOpenMonth, strOpenDay, nEndYear, nEndMonth, strEndDay)
NovaAPI.SetTMPText(self._mapNode.txtActivityDate, dateStr)
end
function LongestDayCtrl:RefreshRemainTime(endTime, txtComp)
local curTime = ClientManager.serverTimeStamp
local remainTime = endTime - curTime
local sTimeStr = ""
if remainTime <= 60 then
local sec = math.floor(remainTime)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
elseif 60 < remainTime and remainTime <= 3600 then
local min = math.floor(remainTime / 60)
local sec = math.floor(remainTime - min * 60)
if sec == 0 then
min = min - 1
sec = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
elseif 3600 < remainTime and remainTime <= 86400 then
local hour = math.floor(remainTime / 3600)
local min = math.floor((remainTime - hour * 3600) / 60)
if min == 0 then
hour = hour - 1
min = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
elseif 86400 < remainTime then
local day = math.floor(remainTime / 86400)
local hour = math.floor((remainTime - day * 86400) / 3600)
if hour == 0 then
day = day - 1
hour = 24
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
end
NovaAPI.SetTMPText(txtComp, sTimeStr)
return remainTime
end
function LongestDayCtrl:RefreshRemainOpenTime(openTime)
local curTime = ClientManager.serverTimeStamp
local remainTime = openTime - curTime
local sTimeStr = ""
if remainTime <= 60 then
local sec = math.floor(remainTime)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Open_Time_Sec") or "", sec)
elseif 60 < remainTime and remainTime <= 3600 then
local min = math.floor(remainTime / 60)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Open_Time_Min") or "", min)
elseif 3600 < remainTime and remainTime <= 86400 then
local hour = math.floor(remainTime / 3600)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Open_Time") or "", hour)
elseif 86400 < remainTime then
local day = math.floor(remainTime / 86400)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Open_Time_Day") or "", day)
end
return sTimeStr
end
function LongestDayCtrl:RefreshButtonState()
self.tbActState = {}
for i = 1, 5 do
local actData = self.ActData:GetActivityDataByIndex(i)
if i == AllEnum.ActivityThemeFuncIndex.MiniGame then
self:RefreshMiniGameButtonState(actData)
elseif i == AllEnum.ActivityThemeFuncIndex.Task then
self:RefreshTaskButtonState(actData)
elseif i == AllEnum.ActivityThemeFuncIndex.Level then
self:RefreshLevelButtonState(actData)
elseif i == AllEnum.ActivityThemeFuncIndex.Shop then
self:RefreshShopButtonState(actData)
end
end
self:RefreshStoryButtonState()
end
function LongestDayCtrl:RefreshButtonTimer(actData, timer, txtTrans, imgTrans, refreshFunc)
local countDowmTimer
local activityId = actData.ActivityId
local state, bShowCountDown, openTime, endTime = self.ActData:GetActivityEntranceTimerData(activityId)
if state == ActivityState.NotOpen then
if nil == timer and openTime ~= nil then
local fcTimer = function()
local curTime = ClientManager.serverTimeStamp
local remainTime = openTime - curTime
if 0 < remainTime then
local sTimeStr = self:RefreshRemainOpenTime(openTime)
local txtUnlock = imgTrans:GetComponentInChildren(typeof(CS.TMPro.TMP_Text))
if txtUnlock ~= nil then
NovaAPI.SetTMPText(txtUnlock, sTimeStr)
end
else
imgTrans:SetActive(false)
TimerManager.Remove(countDowmTimer)
countDowmTimer = nil
self.tbActState[activityId] = ActivityState.Open
refreshFunc(actData)
self:RefreshActivityData()
end
end
fcTimer()
countDowmTimer = self:AddTimer(0, 1, fcTimer, true, true, false)
end
elseif state == ActivityState.Open and endTime ~= nil and timer == nil and bShowCountDown then
self:RefreshRemainTime(endTime, txtTrans)
local fcTimer = function()
local remainTime = self:RefreshRemainTime(endTime, txtTrans)
if remainTime <= 0 then
TimerManager.Remove(countDowmTimer)
countDowmTimer = nil
refreshFunc(actData)
end
end
fcTimer()
countDowmTimer = self:AddTimer(0, 1, fcTimer, true, true, false)
end
return state, bShowCountDown, countDowmTimer
end
function LongestDayCtrl:RefreshMiniGameButtonState(actData)
local activityId = actData.ActivityId
local activityData = ConfigTable.GetData("Activity", activityId)
if activityData ~= nil then
local refreshFunc = function(actData)
self:RefreshMiniGameButtonState(actData)
end
local state, bShowCountDown, countDowmTimer = self:RefreshButtonTimer(actData, self.minigameRemainTimer, self._mapNode.txtMiniGameActivityTime, self._mapNode.imgMiniGameActivityUnlockTime, refreshFunc)
if self.minigameRemainTimer == nil then
self.minigameRemainTimer = countDowmTimer
end
self._mapNode.imgMiniGameActivityUnlockTime:SetActive(state == ActivityState.NotOpen)
self._mapNode.imgMiniGameActivityTime.gameObject:SetActive(state == ActivityState.Open and bShowCountDown)
self._mapNode.imgMiniGameEnd:SetActive(state == ActivityState.Closed)
self._mapNode.txtMiniGame_End:SetActive(state == ActivityState.Closed)
self._mapNode.txtMiniGameEnd.gameObject:SetActive(state == ActivityState.Closed)
self._mapNode.goMiniGameEnd.gameObject:SetActive(state == ActivityState.Closed)
self._mapNode.dbMiniGame.gameObject:SetActive(state ~= ActivityState.Closed)
self._mapNode.dbMiniGameEnd.gameObject:SetActive(state == ActivityState.Closed)
if state ~= ActivityState.Open then
end
self.tbActState[activityId] = state
end
end
function LongestDayCtrl:RefreshTaskButtonState(actData)
local activityId = actData.ActivityId
local actInsData = PlayerData.Activity:GetActivityDataById(activityId)
local activityData = ConfigTable.GetData("Activity", activityId)
if activityData ~= nil then
local refreshFunc = function(actData)
if actInsData ~= nil then
actInsData:RefreshTaskRedDot()
end
self:RefreshTaskButtonState(actData)
end
local state, bShowCountDown, countDowmTimer = self:RefreshButtonTimer(actData, self.taskRemainTimer, self._mapNode.txtTaskActivityTime, self._mapNode.imgTaskActivityUnlockTime, refreshFunc)
if self.taskRemainTimer == nil then
self.taskRemainTimer = countDowmTimer
end
if state == ActivityState.Closed and actInsData ~= nil then
actInsData:RefreshTaskRedDot()
end
self._mapNode.imgTaskActivityTime:SetActive(state == ActivityState.Open and bShowCountDown)
self._mapNode.txtTaskProgress_End:SetActive(state == ActivityState.Closed)
self._mapNode.imgTaskEnd.gameObject:SetActive(state == ActivityState.Closed)
self._mapNode.txtTaskEnd.gameObject:SetActive(state == ActivityState.Closed)
self._mapNode.imgTaskActivityUnlockTime:SetActive(state == ActivityState.NotOpen)
self._mapNode.dbTask.gameObject:SetActive(state ~= ActivityState.Closed)
self._mapNode.dbTaskEnd.gameObject:SetActive(state == ActivityState.Closed)
self._mapNode.txtTaskProgressEnd.gameObject:SetActive(state == ActivityState.Closed)
self.tbActState[activityId] = state
local ActivityTaskData = PlayerData.Activity:GetActivityDataById(activityId)
local nDone, nTotal = 0, 0
if ActivityTaskData ~= nil then
nDone, nTotal = ActivityTaskData:CalcTotalProgress()
end
local progress = string.format("%d/%d", nDone, nTotal)
NovaAPI.SetTMPText(self._mapNode.txtTaskProgress, progress)
NovaAPI.SetTMPText(self._mapNode.txtTaskProgressEnd, progress)
end
end
function LongestDayCtrl:RefreshLevelButtonState(actData)
local activityId = actData.ActivityId
local activityData = ConfigTable.GetData("Activity", activityId)
if activityData ~= nil then
local refreshFunc = function(actData)
local activityLevelsData = PlayerData.Activity:GetActivityDataById(activityId)
if nil ~= activityLevelsData then
activityLevelsData:ChangeAllRedHot()
end
self:RefreshLevelButtonState(actData)
end
local state, bShowCountDown, countDowmTimer = self:RefreshButtonTimer(actData, self.levelRemainTimer, self._mapNode.txtLevelActivityTime, self._mapNode.imgLevelActivityUnlockTime, refreshFunc)
if self.levelRemainTimer == nil then
self.levelRemainTimer = countDowmTimer
end
if state == ActivityState.Closed then
local activityLevelsData = PlayerData.Activity:GetActivityDataById(activityId)
if nil ~= activityLevelsData then
activityLevelsData:ChangeAllRedHot()
end
end
self._mapNode.imgLevelActivityTime:SetActive(state == ActivityState.Open and bShowCountDown)
self._mapNode.imgLevelActivityUnlockTime:SetActive(state == ActivityState.NotOpen)
self._mapNode.goLevelEnd:SetActive(state == ActivityState.Closed)
self._mapNode.txtLevel_End.gameObject:SetActive(state == ActivityState.Closed)
self._mapNode.grpBg:SetActive(state ~= ActivityState.Closed)
self._mapNode.imgLevelEnd:SetActive(state == ActivityState.Closed)
self.tbActState[activityId] = state
local anim = self._mapNode.btnEntrance_[AllEnum.ActivityThemeFuncIndex.Level].transform:GetChild(0):GetComponent("Animator")
anim.enabled = state == ActivityState.Open
end
end
function LongestDayCtrl:RefreshShopButtonState(actData)
local activityId = actData.ActivityId
local activityData = ConfigTable.GetData("Activity", activityId)
if activityData ~= nil then
local refreshFunc = function(actData)
self:RefreshShopButtonState(actData)
end
local state, bShowCountDown, countDowmTimer = self:RefreshButtonTimer(actData, self.shopRemainTimer, self._mapNode.txtShopActivityTime, self._mapNode.imgShopActivityUnlockTime, refreshFunc)
if self.shopRemainTimer == nil then
self.shopRemainTimer = countDowmTimer
end
self._mapNode.imgShopActivityTime:SetActive(state == ActivityState.Open and bShowCountDown)
self._mapNode.imgShopActivityUnlockTime:SetActive(state == ActivityState.NotOpen)
self._mapNode.txtShopEnd.gameObject:SetActive(state == ActivityState.Closed)
self._mapNode.imgShopEnd:SetActive(state == ActivityState.Closed)
self._mapNode.txtShop_End:SetActive(state == ActivityState.Closed)
self._mapNode.dbShop:SetActive(state ~= ActivityState.Closed)
self._mapNode.dbShopEnd:SetActive(state == ActivityState.Closed)
self.tbActState[activityId] = state
end
end
function LongestDayCtrl:RefreshStoryButtonState()
self._mapNode.storyRedDot:SetActive(false)
self._mapNode.imgStoryActivityTime:SetActive(false)
self._mapNode.imgStoryActivityUnlockTime:SetActive(false)
self._mapNode.goStoryEnd:SetActive(false)
self._mapNode.imgStoryEnd:SetActive(false)
self._mapNode.txtStory1_End.gameObject:SetActive(false)
self._mapNode.txtStory2_End.gameObject:SetActive(false)
self._mapNode.dbStory.gameObject:SetActive(true)
self._mapNode.dbStoryEnd.gameObject:SetActive(false)
end
function LongestDayCtrl:RequireActiviyData()
if self.bRequiredActData then
return
end
local callFunc = function()
self.bRequireSucc = true
self:RefreshPanel()
end
HttpNetHandler.SendMsg(NetMsgId.Id.activity_detail_req, {}, nil, callFunc)
self.bRequiredActData = true
self:AddTimer(1, 1, function()
self.bRequiredActData = false
end, true, true, true)
end
function LongestDayCtrl:RefreshActivityData()
if self.bRequiredActData then
return
end
self:AddTimer(1, 3, self.RequireActiviyData, true, true, true)
end
function LongestDayCtrl:OnBtn_ClickActivityEntrance(btn, nIndex)
if nIndex == AllEnum.ActivityThemeFuncIndex.Story then
local chapterId = 10
local isUnlock = PlayerData.Avg:IsStoryChapterUnlock(chapterId)
if isUnlock then
EventManager.Hit(EventId.OpenPanel, PanelId.MainlineEx, chapterId)
else
EventManager.Hit(EventId.OpenPanel, PanelId.StoryChapter)
end
return
end
local actData = self.ActData:GetActivityDataByIndex(nIndex)
if actData == nil then
return
end
local bOpen, _state, _sTips, bNeedRefreshData = self.ActData:CheckActivityEntranceOpen(actData.ActivityId, actData.PanelId, true, self.bRequiredActData)
if not bOpen then
if bNeedRefreshData then
self:RequireActiviyData()
end
return
end
self.ActData:OpenActivityEntrance(actData.ActivityId, actData.PanelId)
end
return LongestDayCtrl
@@ -0,0 +1,20 @@
local BasePanel = require("GameCore.UI.BasePanel")
local LongestDayPanel = class("LongestDayPanel", BasePanel)
LongestDayPanel._sUIResRootPath = "UI_Activity/"
LongestDayPanel._tbDefine = {
{
sPrefabPath = "10112/LongestDayPanel.prefab",
sCtrlName = "Game.UI.ActivityTheme.10112.LongestDayCtrl"
}
}
function LongestDayPanel:Awake()
end
function LongestDayPanel:OnEnable()
end
function LongestDayPanel:OnDisable()
end
function LongestDayPanel:OnDestroy()
end
function LongestDayPanel:OnRelease()
end
return LongestDayPanel
@@ -0,0 +1,134 @@
local ActivityShopGoodsItemCtrl = class("ActivityShopGoodsItemCtrl", BaseCtrl)
ActivityShopGoodsItemCtrl._mapNodeConfig = {
imgRare = {sComponentName = "Image"},
imgLeft = {},
txtLeft = {sComponentName = "TMP_Text"},
imgTime = {},
txtLeftTime = {sComponentName = "TMP_Text"},
txtName = {sComponentName = "TMP_Text"},
imgIcon = {sComponentName = "Image"},
imgElement = {sComponentName = "Image"},
goStar = {
sCtrlName = "Game.UI.TemplateEx.TemplateStarCtrl"
},
imgExpire = {sComponentName = "Image"},
txtCount = {sComponentName = "TMP_Text"},
imgCoin = {sComponentName = "Image"},
txtPrice = {sComponentName = "TMP_Text"},
imgMask = {},
goRestock = {},
txtRestock = {
sComponentName = "TMP_Text",
sLanguageId = "Mall_Package_SoldOut"
},
goCondition = {},
txtCondition = {sComponentName = "TMP_Text"}
}
ActivityShopGoodsItemCtrl._mapEventConfig = {}
function ActivityShopGoodsItemCtrl:Refresh(mapData, nCurrencyItemId)
self.mapData = mapData
self.mapGoodsCfg = ConfigTable.GetData("ActivityGoods", mapData.nId)
if not self.mapGoodsCfg then
return
end
self:RefreshInfo()
self:RefreshPrice(nCurrencyItemId)
self:RefreshTime()
self:RefreshLimit()
end
function ActivityShopGoodsItemCtrl:RefreshInfo()
local mapItemCfg = ConfigTable.GetData_Item(self.mapGoodsCfg.ItemId)
if not mapItemCfg then
return
end
NovaAPI.SetTMPText(self._mapNode.txtName, self.mapGoodsCfg.Name)
if mapItemCfg.Type == GameEnum.itemType.Disc then
self:SetPngSprite(self._mapNode.imgIcon, mapItemCfg.Icon .. AllEnum.OutfitIconSurfix.Item)
self._mapNode.imgElement.gameObject:SetActive(true)
self._mapNode.goStar.gameObject:SetActive(true)
local mapDiscCfgData = ConfigTable.GetData("Disc", self.mapGoodsCfg.ItemId)
if mapDiscCfgData then
self:SetAtlasSprite(self._mapNode.imgElement, "12_rare", AllEnum.Star_Element[mapDiscCfgData.EET].icon)
end
local nStar = 6 - mapItemCfg.Rarity
self._mapNode.goStar:SetStar(nStar, nStar)
else
self:SetPngSprite(self._mapNode.imgIcon, mapItemCfg.Icon)
self._mapNode.imgElement.gameObject:SetActive(false)
self._mapNode.goStar.gameObject:SetActive(false)
end
self._mapNode.imgExpire.gameObject:SetActive(mapItemCfg.ExpireType > 0)
local sPath = "db_longestday_shop_" .. AllEnum.FrameColor_New[mapItemCfg.Rarity]
self:SetActivityAtlasSprite_New(self._mapNode.imgRare, "10112/SpriteAtlas/10112" .. "04", sPath)
local bLimit = 0 < self.mapData.nMaximumLimit
if bLimit then
NovaAPI.SetTMPText(self._mapNode.txtLeft, orderedFormat(ConfigTable.GetUIText("Shop_Left"), self.mapData.nMaximumLimit - self.mapData.nBoughtCount))
else
NovaAPI.SetTMPText(self._mapNode.txtLeft, orderedFormat(ConfigTable.GetUIText("Shop_Left"), ConfigTable.GetUIText("Shop_Unlimited")))
end
NovaAPI.SetTMPText(self._mapNode.txtCount, orderedFormat(ConfigTable.GetUIText("Shop_GoodsItem_Count"), self.mapGoodsCfg.ItemQuantity))
end
function ActivityShopGoodsItemCtrl:RefreshPrice(nCurrencyItemId)
self:SetSprite_Coin(self._mapNode.imgCoin, nCurrencyItemId)
NovaAPI.SetTMPText(self._mapNode.txtPrice, self.mapGoodsCfg.Price)
end
function ActivityShopGoodsItemCtrl:RefreshTime()
local bTime = self.mapData.bPurchasTime and self.mapData.nNextRefreshTime > 0
self._mapNode.imgTime:SetActive(bTime)
if not bTime then
return
end
local sTime = ""
local nRemaining = self.mapData.nNextRefreshTime - CS.ClientManager.Instance.serverTimeStamp
if nRemaining <= 3600 and 0 < nRemaining then
sTime = ConfigTable.GetUIText("Shop_WithinHour")
elseif 3600 < nRemaining and nRemaining <= 86400 then
sTime = orderedFormat(ConfigTable.GetUIText("Shop_Hour"), math.floor(nRemaining / 3600))
elseif 86400 < nRemaining then
sTime = orderedFormat(ConfigTable.GetUIText("Shop_Day"), math.floor(nRemaining / 86400))
end
NovaAPI.SetTMPText(self._mapNode.txtLeftTime, sTime)
end
function ActivityShopGoodsItemCtrl:RefreshLimit()
local bMask = not self.mapData.bPurchasable or not self.mapData.bPurchasTime or self.mapData.bSoldOut
self._mapNode.imgMask:SetActive(bMask)
if self.mapData.bSoldOut then
self._mapNode.goRestock:SetActive(true)
self._mapNode.goCondition:SetActive(false)
return
end
self._mapNode.goRestock:SetActive(false)
self._mapNode.goCondition:SetActive(true)
if self.mapData.nUnlockPurchaseTime > 0 and self.mapData.nUnlockPurchaseTime == self.mapData.nNextRefreshTime then
local sTime = ""
local nRemaining = self.mapData.nNextRefreshTime - CS.ClientManager.Instance.serverTimeStamp
if nRemaining <= 3600 and 0 < nRemaining then
sTime = ConfigTable.GetUIText("Shop_WithinHourUnLock")
elseif 3600 < nRemaining and nRemaining <= 86400 then
sTime = orderedFormat(ConfigTable.GetUIText("Shop_HourUnLock"), math.floor(nRemaining / 3600))
elseif 86400 < nRemaining then
sTime = orderedFormat(ConfigTable.GetUIText("Shop_DayUnLock"), math.floor(nRemaining / 86400))
end
NovaAPI.SetTMPText(self._mapNode.txtCondition, sTime)
return
end
if not self.mapData.bPurchasable then
local sCond = ""
if self.mapData.nPurchaseCondType == GameEnum.shopCond.WorldClassSpecific then
sCond = orderedFormat(ConfigTable.GetUIText("Shop_Cond_WorldClass"), self.mapData.tbPurchaseCondParams[1])
elseif self.mapData.nPurchaseCondType == GameEnum.shopCond.ShopPreGoodsSellOut or self.mapData.nPurchaseCondType == GameEnum.shopCond.ActivityShopPreGoodsSellOut then
sCond = ConfigTable.GetUIText("Shop_Cond_PreGoodsSellOut")
end
NovaAPI.SetTMPText(self._mapNode.txtCondition, sCond)
return
end
end
function ActivityShopGoodsItemCtrl:Awake()
end
function ActivityShopGoodsItemCtrl:OnEnable()
end
function ActivityShopGoodsItemCtrl:OnDisable()
end
function ActivityShopGoodsItemCtrl:OnDestroy()
end
return ActivityShopGoodsItemCtrl
@@ -0,0 +1,24 @@
local ActivityShopPanel = class("ActivityShopPanel", BasePanel)
ActivityShopPanel._sUIResRootPath = "UI_Activity/"
ActivityShopPanel._tbDefine = {
{
sPrefabPath = "10112/Shop/ActivityShopPanel.prefab",
sCtrlName = "Game.UI.ActivityTheme.ShopCommon.ActivityShopCtrl"
}
}
function ActivityShopPanel:Awake()
self.nDefaultId = nil
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" then
self.nActId = tbParam[1]
self.nDefaultId = tbParam[2]
end
self.actShopData = PlayerData.Activity:GetActivityDataById(self.nActId)
end
function ActivityShopPanel:OnEnable()
end
function ActivityShopPanel:OnDisable()
end
function ActivityShopPanel:OnDestroy()
end
return ActivityShopPanel
@@ -0,0 +1,16 @@
local LongestDayTaskPanel = class("LongestDayTaskPanel", BasePanel)
LongestDayTaskPanel._sUIResRootPath = "UI_Activity/"
LongestDayTaskPanel._tbDefine = {
{
sPrefabPath = "10112/Task.prefab",
sCtrlName = "Game.UI.ActivityTheme.TaskCommon.TaskCommonCtrl_01"
}
}
local tbImgDbType = {SizeDelta = 1, FillAmount = 2}
function LongestDayTaskPanel:Awake()
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" and tbParam[3] == nil then
tbParam[3] = tbImgDbType.SizeDelta
end
end
return LongestDayTaskPanel
@@ -139,7 +139,7 @@ function ChristmasTaskCtrl:BuildData(nActivityId)
nStatus = taskData.nStatus,
sDesc = mapData.Desc,
nRarity = mapData.Rarity,
nJumpTo = mapData.JumpTo,
tbJumpTo = mapData.JumpTo,
nCur = taskData.nCur,
nMax = taskData.nMax,
tbTaskRewardId = {},
@@ -334,11 +334,11 @@ function ChristmasTaskCtrl:onGridRefresh_Task(go)
_tr.localScale = Vector3.zero
end
end
tr:Find("tmpUndone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 >= mapTask.nJumpTo and Vector3.one or Vector3.zero
tr:Find("tmpUndone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 >= #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Complete and Vector3.one or Vector3.zero
tr:Find("btnDone"):GetChild(0).name = tostring(mapTask.nTaskId)
tr:Find("btnJump").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 < mapTask.nJumpTo and Vector3.one or Vector3.zero
tr:Find("btnJump"):GetChild(0).name = tostring(mapTask.nJumpTo)
tr:Find("btnJump").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 < #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnJump"):GetChild(0).name = tostring(nIndex)
tr:Find("goDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Received and Vector3.one or Vector3.zero
end
function ChristmasTaskCtrl:onEvent_ClickRewardItem(goBtn)
@@ -361,9 +361,12 @@ function ChristmasTaskCtrl:onEvent_ClickTaskDone(goBtn)
end
end
function ChristmasTaskCtrl:onEvent_ClickTaskJump(goBtn)
local nJumpId = tonumber(goBtn.transform:GetChild(0).name)
if 0 < nJumpId then
JumpUtil.JumpTo(nJumpId)
local nIndex = tonumber(goBtn.transform:GetChild(0).name)
local mapData = self.tbData[self.nCurGroupIndex]
local mapTask = mapData.tbTaskData[nIndex]
local JumpToData = mapTask.tbJumpTo
if JumpToData ~= nil and 0 < #JumpToData then
JumpUtil.JumpToActivity(JumpToData)
end
end
function ChristmasTaskCtrl:refresh_Group()
@@ -142,7 +142,7 @@ function SoloDanceTaskCtrl:BuildData(nActivityId)
nStatus = taskData.nStatus,
sDesc = mapData.Desc,
nRarity = mapData.Rarity,
nJumpTo = mapData.JumpTo,
tbJumpTo = mapData.JumpTo,
nCur = taskData.nCur,
nMax = taskData.nMax,
tbTaskRewardId = {},
@@ -327,11 +327,11 @@ function SoloDanceTaskCtrl:onGridRefresh_Task(go)
_tr.localScale = Vector3.zero
end
end
tr:Find("tmpUndone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 >= mapTask.nJumpTo and Vector3.one or Vector3.zero
tr:Find("tmpUndone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 >= #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Complete and Vector3.one or Vector3.zero
tr:Find("btnDone"):GetChild(0).name = tostring(mapTask.nTaskId)
tr:Find("btnJump").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 < mapTask.nJumpTo and Vector3.one or Vector3.zero
tr:Find("btnJump"):GetChild(0).name = tostring(mapTask.nJumpTo)
tr:Find("btnJump").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 < #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnJump"):GetChild(0).name = tostring(nIndex)
tr:Find("goDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Received and Vector3.one or Vector3.zero
end
function SoloDanceTaskCtrl:onEvent_ClickRewardItem(goBtn)
@@ -354,9 +354,12 @@ function SoloDanceTaskCtrl:onEvent_ClickTaskDone(goBtn)
end
end
function SoloDanceTaskCtrl:onEvent_ClickTaskJump(goBtn)
local nJumpId = tonumber(goBtn.transform:GetChild(0).name)
if 0 < nJumpId then
JumpUtil.JumpTo(nJumpId)
local nIndex = tonumber(goBtn.transform:GetChild(0).name)
local mapData = self.tbData[self.nCurGroupIndex]
local mapTask = mapData.tbTaskData[nIndex]
local JumpToData = mapTask.tbJumpTo
if JumpToData ~= nil and 0 < #JumpToData then
JumpUtil.JumpToActivity(JumpToData)
end
end
function SoloDanceTaskCtrl:refresh_Group()
@@ -276,11 +276,12 @@ function SummerCheckinThemeCtrl:RegisterReddot()
local nNeedWorldLevel = tonumber(activityData.LimitParam) or 0
if nNeedWorldLevel > PlayerData.Base:GetWorldClass() then
self._mapNode.reddotShow:SetActive(false)
else
RedDotManager.RegisterNode(RedDotDefine.TrekkerVersus, {
self.nActId,
nActId
}, self._mapNode.reddotShow)
end
RedDotManager.RegisterNode(RedDotDefine.TrekkerVersus, {
self.nActId,
nActId
}, self._mapNode.reddotShow)
elseif i == AllEnum.ActivityThemeFuncIndex.FateCard then
RedDotManager.RegisterNode(RedDotDefine.Activity_Group_PenguinCard_Level, {
self.nActId
@@ -139,7 +139,7 @@ function SummerCheckinTaskCtrl:BuildData(nActivityId)
nStatus = taskData.nStatus,
sDesc = mapData.Desc,
nRarity = mapData.Rarity,
nJumpTo = mapData.JumpTo,
tbJumpTo = mapData.JumpTo,
nCur = taskData.nCur,
nMax = taskData.nMax,
tbTaskRewardId = {},
@@ -328,11 +328,11 @@ function SummerCheckinTaskCtrl:onGridRefresh_Task(go)
_tr.localScale = Vector3.zero
end
end
tr:Find("tmpUndone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 >= mapTask.nJumpTo and Vector3.one or Vector3.zero
tr:Find("tmpUndone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 >= #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Complete and Vector3.one or Vector3.zero
tr:Find("btnDone"):GetChild(0).name = tostring(mapTask.nTaskId)
tr:Find("btnJump").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 < mapTask.nJumpTo and Vector3.one or Vector3.zero
tr:Find("btnJump"):GetChild(0).name = tostring(mapTask.nJumpTo)
tr:Find("btnJump").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 < #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnJump"):GetChild(0).name = tostring(nIndex)
tr:Find("goDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Received and Vector3.one or Vector3.zero
end
function SummerCheckinTaskCtrl:onEvent_ClickRewardItem(goBtn)
@@ -355,9 +355,12 @@ function SummerCheckinTaskCtrl:onEvent_ClickTaskDone(goBtn)
end
end
function SummerCheckinTaskCtrl:onEvent_ClickTaskJump(goBtn)
local nJumpId = tonumber(goBtn.transform:GetChild(0).name)
if 0 < nJumpId then
JumpUtil.JumpTo(nJumpId)
local nIndex = tonumber(goBtn.transform:GetChild(0).name)
local mapData = self.tbData[self.nCurGroupIndex]
local mapTask = mapData.tbTaskData[nIndex]
local JumpToData = mapTask.tbJumpTo
if JumpToData ~= nil and 0 < #JumpToData then
JumpUtil.JumpToActivity(JumpToData)
end
end
function SummerCheckinTaskCtrl:refresh_Group()
@@ -120,7 +120,7 @@ function BreakOutTaskCtrl:BuildData(nActivityId)
nStatus = taskData.nStatus,
sDesc = mapData.Desc,
nRarity = mapData.Rarity,
nJumpTo = mapData.JumpTo,
tbJumpTo = mapData.JumpTo,
nCur = taskData.nCur,
nMax = taskData.nMax,
tbTaskRewardId = {},
@@ -311,11 +311,11 @@ function BreakOutTaskCtrl:onGridRefresh_Task(go)
_tr.gameObject:SetActive(false)
end
end
tr:Find("tmpUndone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 >= mapTask.nJumpTo and Vector3.one or Vector3.zero
tr:Find("tmpUndone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 >= #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Complete and Vector3.one or Vector3.zero
tr:Find("btnDone"):GetChild(0).name = tostring(mapTask.nTaskId)
tr:Find("btnJump").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 < mapTask.nJumpTo and Vector3.one or Vector3.zero
tr:Find("btnJump"):GetChild(0).name = tostring(mapTask.nJumpTo)
tr:Find("btnJump").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 < #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnJump"):GetChild(0).name = tostring(nIndex)
tr:Find("goDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Received and Vector3.one or Vector3.zero
end
function BreakOutTaskCtrl:onEvent_ClickRewardItem(goBtn)
@@ -337,9 +337,12 @@ function BreakOutTaskCtrl:onEvent_ClickTaskDone(goBtn)
end
end
function BreakOutTaskCtrl:onEvent_ClickTaskJump(goBtn)
local nJumpId = tonumber(goBtn.transform:GetChild(0).name)
if 0 < nJumpId then
JumpUtil.JumpTo(nJumpId)
local nIndex = tonumber(goBtn.transform:GetChild(0).name)
local mapData = self.tbData[self.nCurGroupIndex]
local mapTask = mapData.tbTaskData[nIndex]
local JumpToData = mapTask.tbJumpTo
if JumpToData ~= nil and 0 < #JumpToData then
JumpUtil.JumpToActivity(JumpToData)
end
end
return BreakOutTaskCtrl
@@ -120,7 +120,7 @@ function BreakOutTaskCtrl:BuildData(nActivityId)
nStatus = taskData.nStatus,
sDesc = mapData.Desc,
nRarity = mapData.Rarity,
nJumpTo = mapData.JumpTo,
tbJumpTo = mapData.JumpTo,
nCur = taskData.nCur,
nMax = taskData.nMax,
tbTaskRewardId = {},
@@ -311,11 +311,11 @@ function BreakOutTaskCtrl:onGridRefresh_Task(go)
_tr.gameObject:SetActive(false)
end
end
tr:Find("tmpUndone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 >= mapTask.nJumpTo and Vector3.one or Vector3.zero
tr:Find("tmpUndone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 >= #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Complete and Vector3.one or Vector3.zero
tr:Find("btnDone"):GetChild(0).name = tostring(mapTask.nTaskId)
tr:Find("btnJump").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 < mapTask.nJumpTo and Vector3.one or Vector3.zero
tr:Find("btnJump"):GetChild(0).name = tostring(mapTask.nJumpTo)
tr:Find("btnJump").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 < #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnJump"):GetChild(0).name = tostring(nIndex)
tr:Find("goDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Received and Vector3.one or Vector3.zero
end
function BreakOutTaskCtrl:onEvent_ClickRewardItem(goBtn)
@@ -337,9 +337,12 @@ function BreakOutTaskCtrl:onEvent_ClickTaskDone(goBtn)
end
end
function BreakOutTaskCtrl:onEvent_ClickTaskJump(goBtn)
local nJumpId = tonumber(goBtn.transform:GetChild(0).name)
if 0 < nJumpId then
JumpUtil.JumpTo(nJumpId)
local nIndex = tonumber(goBtn.transform:GetChild(0).name)
local mapData = self.tbData[self.nCurGroupIndex]
local mapTask = mapData.tbTaskData[nIndex]
local JumpToData = mapTask.tbJumpTo
if JumpToData ~= nil and 0 < #JumpToData then
JumpUtil.JumpToActivity(JumpToData)
end
end
return BreakOutTaskCtrl
@@ -120,7 +120,7 @@ function BreakOutTaskCtrl:BuildData(nActivityId)
nStatus = taskData.nStatus,
sDesc = mapData.Desc,
nRarity = mapData.Rarity,
nJumpTo = mapData.JumpTo,
tbJumpTo = mapData.JumpTo,
nCur = taskData.nCur,
nMax = taskData.nMax,
tbTaskRewardId = {},
@@ -311,11 +311,11 @@ function BreakOutTaskCtrl:onGridRefresh_Task(go)
_tr.gameObject:SetActive(false)
end
end
tr:Find("tmpUndone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 >= mapTask.nJumpTo and Vector3.one or Vector3.zero
tr:Find("tmpUndone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 >= #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Complete and Vector3.one or Vector3.zero
tr:Find("btnDone"):GetChild(0).name = tostring(mapTask.nTaskId)
tr:Find("btnJump").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 < mapTask.nJumpTo and Vector3.one or Vector3.zero
tr:Find("btnJump"):GetChild(0).name = tostring(mapTask.nJumpTo)
tr:Find("btnJump").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 < #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnJump"):GetChild(0).name = tostring(nIndex)
tr:Find("goDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Received and Vector3.one or Vector3.zero
end
function BreakOutTaskCtrl:onEvent_ClickRewardItem(goBtn)
@@ -337,9 +337,12 @@ function BreakOutTaskCtrl:onEvent_ClickTaskDone(goBtn)
end
end
function BreakOutTaskCtrl:onEvent_ClickTaskJump(goBtn)
local nJumpId = tonumber(goBtn.transform:GetChild(0).name)
if 0 < nJumpId then
JumpUtil.JumpTo(nJumpId)
local nIndex = tonumber(goBtn.transform:GetChild(0).name)
local mapData = self.tbData[self.nCurGroupIndex]
local mapTask = mapData.tbTaskData[nIndex]
local JumpToData = mapTask.tbJumpTo
if JumpToData ~= nil and 0 < #JumpToData then
JumpUtil.JumpToActivity(JumpToData)
end
end
return BreakOutTaskCtrl
@@ -0,0 +1,186 @@
local ActivityBreakOutCtrl = class("ActivityBreakOutCtrl", BaseCtrl)
local TimerManager = require("GameCore.Timer.TimerManager")
local ClientManager = CS.ClientManager.Instance
ActivityBreakOutCtrl._mapNodeConfig = {
btnGo = {
sComponentName = "UIButton",
callback = "OnBtnClick_Go"
},
txtTime = {sComponentName = "TMP_Text"},
svReward = {
sNodeName = "PreviewUpgradeMaterial",
sComponentName = "LoopScrollView"
},
txtAdvanceMat = {
sComponentName = "TMP_Text",
sLanguageId = "MessageBox_Reward"
},
txtDate = {sComponentName = "TMP_Text"},
imgLock = {},
txtLock = {sComponentName = "TMP_Text"},
btnDetail = {
sComponentName = "UIButton",
callback = "OnBtnClick_Detail"
},
txtBtnDetail = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_Btn_Detail"
},
imgEnd = {},
txtActivityEnd = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_End"
},
imgRemaineTime = {},
txtBtnGo = {
sComponentName = "TMP_Text",
sLanguageId = "GoToChallenge"
},
imgProgressBg = {
sNodeName = "imgProgressBg"
},
imgFill = {sNodeName = "imgFill"},
txt_Target = {
sNodeName = "txt_Target",
sComponentName = "TMP_Text",
sLanguageId = "ChallengingGoals"
},
txtProgress = {
sNodeName = "txtProgress",
sComponentName = "TMP_Text"
},
btn_goTaskPanel = {
sComponentName = "UIButton",
callback = "OnBtnClick_GoTaskPanel"
}
}
function ActivityBreakOutCtrl:Awake()
self.tbGridCtrl = {}
end
function ActivityBreakOutCtrl:OnDisable()
self:UnbindCtrl()
end
function ActivityBreakOutCtrl:InitActData(actData)
self.actData = actData
self:RefreshLockState()
self:RefreshDate()
self:RefreshTimeout()
self:RefreshReward()
end
function ActivityBreakOutCtrl:UnInit()
self:UnbindCtrl()
end
function ActivityBreakOutCtrl:UnbindCtrl()
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGridCtrl[nInstanceId] = nil
end
self.tbGridCtrl = {}
end
function ActivityBreakOutCtrl:RefreshLockState()
local IsUnlock, txtLock = self.actData:IsUnlock()
self._mapNode.imgLock.gameObject:SetActive(not IsUnlock)
self._mapNode.btnGo.gameObject:SetActive(IsUnlock)
if not IsUnlock then
NovaAPI.SetTMPText(self._mapNode.txtLock, txtLock)
end
end
function ActivityBreakOutCtrl:RefreshTimeout()
local endTime = self.actData:GetActGroupEndTime()
local curTime = ClientManager.serverTimeStamp
local remainTime = endTime - curTime
self._mapNode.imgRemaineTime:SetActive(0 < remainTime)
self._mapNode.imgEnd:SetActive(remainTime <= 0)
if remainTime < 0 then
TimerManager.Remove(self.remainTimer)
self.remainTimer = nil
return
end
local sTimeStr = ""
if remainTime <= 60 then
local sec = math.floor(remainTime)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
elseif 60 < remainTime and remainTime <= 3600 then
local min = math.floor(remainTime / 60)
local sec = math.floor(remainTime - min * 60)
if sec == 0 then
min = min - 1
sec = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
elseif 3600 < remainTime and remainTime <= 86400 then
local hour = math.floor(remainTime / 3600)
local min = math.floor((remainTime - hour * 3600) / 60)
if min == 0 then
hour = hour - 1
min = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
elseif 86400 < remainTime then
local day = math.floor(remainTime / 86400)
local hour = math.floor((remainTime - day * 86400) / 3600)
if hour == 0 then
day = day - 1
hour = 24
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
end
NovaAPI.SetTMPText(self._mapNode.txtTime, sTimeStr)
end
function ActivityBreakOutCtrl:RefreshDate()
local nOpenMonth, nOpenDay, nEndMonth, nEndDay, nOpenYear, nEndYear = self.actData:GetActGroupDate()
local strOpenDay = string.format("%d", nOpenDay)
local strEndDay = string.format("%d", nEndDay)
local dateStr = string.format("%s/%s/%s ~ %s/%s/%s", nOpenYear, nOpenMonth, strOpenDay, nEndYear, nEndMonth, strEndDay)
NovaAPI.SetTMPText(self._mapNode.txtDate, dateStr)
end
function ActivityBreakOutCtrl:RefreshReward()
local actGroupCfg = self.actData:GetActGroupCfgData()
local rewardData = actGroupCfg.RewardsShow
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGridCtrl[nInstanceId] = nil
end
self._mapNode.svReward:Init(#rewardData, self, self.RefreshRewardGridItem, self.BtnRewardGridClick)
end
function ActivityBreakOutCtrl:RefreshRewardGridItem(go, index)
local actGroupCfg = self.actData:GetActGroupCfgData()
local rewardData = actGroupCfg.RewardsShow
local rewardId = rewardData[index + 1]
local nInstanceID = go:GetInstanceID()
if not self.tbGridCtrl[nInstanceID] then
self.tbGridCtrl[nInstanceID] = self:BindCtrlByNode(go, "Game.UI.TemplateEx.TemplateItemCtrl")
end
self.tbGridCtrl[nInstanceID]:SetItem(rewardId)
end
function ActivityBreakOutCtrl:BtnRewardGridClick(goGrid, gridIndex)
local nIndex = gridIndex + 1
local actGroupCfg = self.actData:GetActGroupCfgData()
local rewardData = actGroupCfg.RewardsShow
local item = goGrid.transform:Find("AnimRoot/item")
UTILS.ClickItemGridWithTips(rewardData[nIndex], item.transform, true, true, false)
end
function ActivityBreakOutCtrl:OnBtnClick_Go()
local actGroupCfg = self.actData:GetActGroupCfgData()
if actGroupCfg ~= nil then
EventManager.Hit(EventId.OpenPanel, PanelId.BreakOutThemePanel_S4, actGroupCfg.Id)
end
end
function ActivityBreakOutCtrl:OnBtnClick_GoTaskPanel()
EventManager.Hit(EventId.OpenPanel, PanelId.Task_30104, self.nActTaskId)
end
function ActivityBreakOutCtrl:OnBtnClick_Detail()
local actGroupCfg = self.actData:GetActGroupCfgData()
if actGroupCfg == nil then
return
end
local msg = {
nType = AllEnum.MessageBox.Desc,
sContent = actGroupCfg.DesText,
sTitle = ConfigTable.GetUIText("Activity_Btn_Detail")
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
function ActivityBreakOutCtrl:ClearActivity()
end
return ActivityBreakOutCtrl
@@ -0,0 +1,405 @@
local BaseCtrl = require("GameCore.UI.BaseCtrl")
local BreakOutThemeCtrl = class("BreakOutThemeCtrl", BaseCtrl)
local ClientManager = CS.ClientManager.Instance
local TimerManager = require("GameCore.Timer.TimerManager")
BreakOutThemeCtrl._mapNodeConfig = {
TopBar = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
BreakOutLevelSelectPanel = {
sNodeName = "----BreakOutLevelSelect----",
sCtrlName = "Game.UI.Play_BreakOut_30101.LevelSelectCtrl"
},
imgProgressBg = {
sNodeName = "imgProgressBg"
},
txt_Target = {
sNodeName = "txt_Target",
sComponentName = "TMP_Text",
sLanguageId = "ChallengingGoals"
},
imgFill = {sNodeName = "imgFill"},
txtProgress = {
sNodeName = "txtProgress",
sComponentName = "TMP_Text"
},
TaskActivityTime = {},
txtTaskActivityTime = {
sNodeName = "txtTaskActivityTime",
sComponentName = "TMP_Text"
},
TaskMask = {},
txt_TaskEnd = {
sComponentName = "TMP_Text",
sLanguageId = "Activity_End"
},
ShopActivityTime = {},
txt_Shop = {
sComponentName = "TMP_Text",
sLanguageId = "ExchangeShop"
},
txtShopActivityTime = {
sNodeName = "txtShopActivityTime",
sComponentName = "TMP_Text"
},
btnEntrance_ = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtn_ClickActivityEntrance"
},
redDotEntrance2 = {}
}
BreakOutThemeCtrl._mapEventConfig = {
JumpToLevelDetail = "JumpTo_LevelDetail",
SetAnimatorState = "SetAnimatorState"
}
BreakOutThemeCtrl._mapRedDotConfig = {}
local ActivityState = {
NotOpen = 1,
Open = 2,
Closed = 3
}
function BreakOutThemeCtrl:Awake()
local param = self:GetPanelParam()
if type(param) == "table" then
self.nActId = param[1]
end
self.BreakOut_30101Data = PlayerData.Activity:GetActivityGroupDataById(self.nActId)
if self.BreakOut_30101Data == nil then
printError("活动组 id:" .. self.nActId .. " 数据为空")
return
else
self.ActivityGroupCfg = self.BreakOut_30101Data.actGroupConfig
end
self.isLevelEnd = false
end
function BreakOutThemeCtrl:OnEnable()
self.BreakOutTheme_Animator = self.gameObject:GetComponent("Animator")
if self.BreakOut_30101Data == nil then
printError("活动组 id:" .. self.nActId .. " 数据为空")
return
end
self:RefreshPanel()
for i = 1, 5 do
local actData = self.BreakOut_30101Data:GetActivityDataByIndex(i)
if actData ~= nil and i == AllEnum.ActivityThemeFuncIndex.Task then
local nActId = actData.ActivityId
RedDotManager.RegisterNode(RedDotDefine.Activity_Group_Task, {
self.nActId,
nActId
}, self._mapNode.redDotEntrance2)
end
end
self:SetAnimatorState()
end
function BreakOutThemeCtrl:OnDisable()
if nil ~= self.remainTimer then
TimerManager.Remove(self.remainTimer)
self.remainTimer = nil
end
if nil ~= self.shopRemainTimer then
TimerManager.Remove(self.shopRemainTimer)
self.shopRemainTimer = nil
end
if nil ~= self.avgRemainTimer then
TimerManager.Remove(self.avgRemainTimer)
self.avgRemainTimer = nil
end
if nil ~= self.taskRemainTimer then
TimerManager.Remove(self.taskRemainTimer)
self.taskRemainTimer = nil
end
end
function BreakOutThemeCtrl:RefreshPanel()
if self.BreakOut_30101Data == nil or self.ActivityGroupCfg == nil then
return
end
self:RefreshTime()
self:RefreshButtonState()
end
function BreakOutThemeCtrl:RefreshTime()
local bOpen = self.BreakOut_30101Data:CheckActivityGroupOpen()
if bOpen then
self:RefreshRemainTime(self.BreakOut_30101Data:GetActGroupEndTime(), self._mapNode.txtActivityTime)
if nil == self.remainTimer then
self.remainTimer = self:AddTimer(0, 1, function()
local remainTime = self:RefreshRemainTime(self.BreakOut_30101Data:GetActGroupEndTime(), self._mapNode.txtActivityTime)
if remainTime <= 0 then
TimerManager.Remove(self.remainTimer)
self.remainTimer = nil
end
end, true, true, false)
end
end
end
function BreakOutThemeCtrl:RefreshRemainTime(endTime, txtComp)
local curTime = ClientManager.serverTimeStamp
local remainTime = endTime - curTime
local sTimeStr = ""
if remainTime <= 60 then
local sec = math.floor(remainTime)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
elseif 60 < remainTime and remainTime <= 3600 then
local min = math.floor(remainTime / 60)
local sec = math.floor(remainTime - min * 60)
if sec == 0 then
min = min - 1
sec = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
elseif 3600 < remainTime and remainTime <= 86400 then
local hour = math.floor(remainTime / 3600)
local min = math.floor((remainTime - hour * 3600) / 60)
if min == 0 then
hour = hour - 1
min = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
elseif 86400 < remainTime then
local day = math.floor(remainTime / 86400)
local hour = math.floor((remainTime - day * 86400) / 3600)
if hour == 0 then
day = day - 1
hour = 24
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
end
NovaAPI.SetTMPText(txtComp, sTimeStr)
return remainTime
end
function BreakOutThemeCtrl:RefreshRemainOpenTime(openTime)
local curTime = ClientManager.serverTimeStamp
local remainTime = openTime - curTime
local sTimeStr = ""
if remainTime <= 60 then
local sec = math.floor(remainTime)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Open_Time_Sec") or "", sec)
elseif 60 < remainTime and remainTime <= 3600 then
local min = math.floor(remainTime / 60)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Open_Time_Min") or "", min)
elseif 3600 < remainTime and remainTime <= 86400 then
local hour = math.floor(remainTime / 3600)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Open_Time") or "", hour)
elseif 86400 < remainTime then
local day = math.floor(remainTime / 86400)
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Open_Time_Day") or "", day)
end
return sTimeStr
end
function BreakOutThemeCtrl:RefreshButtonState()
self.tbActState = {}
for i = 1, 5 do
local actData = self.BreakOut_30101Data:GetActivityDataByIndex(i)
if actData ~= nil then
if i == AllEnum.ActivityThemeFuncIndex.Task then
self:RefreshTaskButtonState(actData)
elseif i == AllEnum.ActivityThemeFuncIndex.Shop then
self:RefreshShopButtonState(actData)
end
end
end
end
function BreakOutThemeCtrl:RefreshButtonTimer(actData, timer, txtTrans, imgTrans, refreshFunc)
local countDownTimer
local activityId = actData.ActivityId
local activityData = ConfigTable.GetData("Activity", activityId)
local state = ActivityState.NotOpen
local bShowCountDown = false
if activityData ~= nil then
local curTime = ClientManager.serverTimeStamp
if activityData.StartTime ~= "" and activityData.EndTime ~= "" then
local openTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(activityData.StartTime)
local endTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(activityData.EndTime)
if curTime < openTime then
state = ActivityState.NotOpen
elseif curTime >= openTime and curTime <= endTime then
state = ActivityState.Open
else
state = ActivityState.Closed
end
elseif activityData.EndType == GameEnum.activityEndType.NoLimit then
state = ActivityState.Open
if activityData.StartTime ~= "" then
local openTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(activityData.StartTime)
if curTime < openTime then
state = ActivityState.NotOpen
end
end
end
if state == ActivityState.NotOpen then
if nil == timer and activityData.StartTime ~= "" and activityData.EndTime ~= "" then
local openTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(activityData.StartTime)
local fcTimer = function()
curTime = ClientManager.serverTimeStamp
local remainTime = openTime - curTime
if imgTrans == nil then
return
end
if 0 < remainTime then
local sTimeStr = self:RefreshRemainOpenTime(openTime)
local txtUnlock = imgTrans:GetComponentInChildren(typeof(CS.TMPro.TMP_Text))
if txtUnlock ~= nil then
NovaAPI.SetTMPText(txtUnlock, sTimeStr)
end
else
imgTrans:SetActive(false)
TimerManager.Remove(timer)
countDownTimer = nil
self.tbActState[activityId] = ActivityState.Open
refreshFunc(actData)
self:RefreshActivityData()
end
end
fcTimer()
countDownTimer = self:AddTimer(0, 1, fcTimer, true, true, false)
end
elseif state == ActivityState.Open and activityData.StartTime ~= "" and activityData.EndTime ~= "" then
do
local endTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(activityData.EndTime)
if endTime > self.BreakOut_30101Data:GetActGroupEndTime() then
bShowCountDown = true
elseif endTime < self.BreakOut_30101Data:GetActGroupEndTime() then
bShowCountDown = endTime - curTime <= 259200
end
if timer == nil and bShowCountDown then
self:RefreshRemainTime(endTime, txtTrans)
do
local fcTimer = function()
local remainTime = self:RefreshRemainTime(endTime, txtTrans)
if remainTime <= 0 then
TimerManager.Remove(timer)
countDownTimer = nil
refreshFunc(actData)
end
end
fcTimer()
countDownTimer = self:AddTimer(0, 1, fcTimer, true, true, false)
end
end
end
end
end
return state, bShowCountDown, countDownTimer
end
function BreakOutThemeCtrl:RefreshTaskButtonState(actData)
local activityId = actData.ActivityId
local actInsData = PlayerData.Activity:GetActivityDataById(activityId)
local activityData = ConfigTable.GetData("Activity", activityId)
if activityData ~= nil then
local refreshFunc = function(actData)
if actInsData ~= nil then
actInsData:RefreshTaskRedDot()
end
self:RefreshTaskButtonState(actData)
end
local state, bShowCountDown, countDownTimer = self:RefreshButtonTimer(actData, self.taskRemainTimer, self._mapNode.txtTaskActivityTime, nil, refreshFunc)
if self.taskRemainTimer == nil then
self.taskRemainTimer = countDownTimer
end
if state == ActivityState.Closed and actInsData ~= nil then
actInsData:RefreshTaskRedDot()
end
self._mapNode.TaskActivityTime:SetActive(state == ActivityState.Open and bShowCountDown)
self._mapNode.TaskMask:SetActive(state == ActivityState.Closed)
self.tbActState[activityId] = state
local ActivityTaskData = PlayerData.Activity:GetActivityDataById(activityId)
local nDone, nTotal = 0, 0
if ActivityTaskData ~= nil then
nDone, nTotal = ActivityTaskData:CalcTotalProgress()
end
local progress = string.format("%d/%d", nDone, nTotal)
local rt = self._mapNode.imgProgressBg:GetComponent("RectTransform")
local nWidth = 0 < nTotal and nDone / nTotal * rt.rect.width or 0
self._mapNode.imgFill:GetComponent("RectTransform").sizeDelta = Vector2(nWidth, rt.rect.height)
NovaAPI.SetTMPText(self._mapNode.txtProgress, progress)
end
end
function BreakOutThemeCtrl:RefreshShopButtonState(actData)
local activityId = actData.ActivityId
local activityData = ConfigTable.GetData("Activity", activityId)
if activityData ~= nil then
local refreshFunc = function(actData)
self:RefreshShopButtonState(actData)
end
local state, bShowCountDown, countDownTimer = self:RefreshButtonTimer(actData, self.shopRemainTimer, self._mapNode.txtShopActivityTime, nil, refreshFunc)
if self.shopRemainTimer == nil then
self.shopRemainTimer = countDownTimer
end
self._mapNode.ShopActivityTime:SetActive(state == ActivityState.Open and bShowCountDown)
self.tbActState[activityId] = state
end
end
function BreakOutThemeCtrl:RequireActivityData()
if self.bRequiredActData then
return
end
local callFunc = function()
self.bRequireSucc = true
self:RefreshPanel()
end
HttpNetHandler.SendMsg(NetMsgId.Id.activity_detail_req, {}, nil, callFunc)
self.bRequiredActData = true
self:AddTimer(1, 1, function()
self.bRequiredActData = false
end, true, true, true)
end
function BreakOutThemeCtrl:RefreshActivityData()
if self.bRequiredActData then
return
end
self:AddTimer(1, 3, self.RequireActivityData, true, true, true)
end
function BreakOutThemeCtrl:OnBtn_ClickActivityEntrance(btn, nIndex)
local actData
if nIndex == 1 then
nIndex = AllEnum.ActivityThemeFuncIndex.Shop
actData = self.BreakOut_30101Data:GetActivityDataByIndex(nIndex)
elseif nIndex == 2 then
nIndex = AllEnum.ActivityThemeFuncIndex.Task
actData = self.BreakOut_30101Data:GetActivityDataByIndex(nIndex)
end
local state = self.tbActState[actData.ActivityId]
if nil == state then
return
end
if state == ActivityState.Closed then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_End_Notice"))
return
elseif state == ActivityState.NotOpen then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_Not_Open"))
return
elseif state == ActivityState.Open then
local activityData = PlayerData.Activity:GetActivityDataById(actData.ActivityId)
if activityData == nil then
local bHint = true
if self.bRequiredActData and bHint then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_Data_Refreshing"))
return
end
if bHint then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_Not_Open"))
self:RequireActivityData()
return
end
end
end
if actData.PanelId ~= nil and ActivityState.Open == state then
EventManager.Hit(EventId.OpenPanel, actData.PanelId, actData.ActivityId)
end
end
function BreakOutThemeCtrl:JumpTo_LevelDetail(nActId, nLevelId)
local OpenPanel = function()
EventManager.Hit(EventId.OpenPanel, PanelId.BreakOutLevelDetailPanelS4, nActId, nLevelId)
end
EventManager.Hit(EventId.SetTransition, 3, OpenPanel)
end
function BreakOutThemeCtrl:SetAnimatorState()
self.BreakOutTheme_Animator:Play("BreakOutThemePanel_idle", 0, 0)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForSeconds(0.02))
self.BreakOutTheme_Animator:Play("BreakOutThemePanel_in", 0, 0)
end
cs_coroutine.start(wait)
end
return BreakOutThemeCtrl
@@ -0,0 +1,20 @@
local BasePanel = require("GameCore.UI.BasePanel")
local BreakOutThemePanel = class("BreakOutThemePanel", BasePanel)
BreakOutThemePanel._sUIResRootPath = "UI_Activity/"
BreakOutThemePanel._tbDefine = {
{
sPrefabPath = "30104/BreakOutThemePanel.prefab",
sCtrlName = "Game.UI.ActivityTheme.30104.BreakOutThemeCtrl"
}
}
function BreakOutThemePanel:Awake()
end
function BreakOutThemePanel:OnEnable()
end
function BreakOutThemePanel:OnDisable()
end
function BreakOutThemePanel:OnDestroy()
end
function BreakOutThemePanel:OnRelease()
end
return BreakOutThemePanel
@@ -0,0 +1,125 @@
local ActivityShopGoodsItemCtrl = class("ActivityShopGoodsItemCtrl", BaseCtrl)
ActivityShopGoodsItemCtrl._mapNodeConfig = {
imgRare = {sComponentName = "Image"},
imgLeft = {},
txtLeft = {sComponentName = "TMP_Text"},
imgTime = {},
txtLeftTime = {sComponentName = "TMP_Text"},
txtName = {sComponentName = "TMP_Text"},
imgIcon = {sComponentName = "Image"},
imgElement = {sComponentName = "Image"},
imgExpire = {sComponentName = "Image"},
txtCount = {sComponentName = "TMP_Text"},
imgCoin = {sComponentName = "Image"},
txtPrice = {sComponentName = "TMP_Text"},
imgMask = {},
goRestock = {},
txtRestock = {
sComponentName = "TMP_Text",
sLanguageId = "Mall_Package_SoldOut"
},
goCondition = {},
txtCondition = {sComponentName = "TMP_Text"}
}
ActivityShopGoodsItemCtrl._mapEventConfig = {}
function ActivityShopGoodsItemCtrl:Refresh(mapData, nCurrencyItemId)
self.mapData = mapData
self.mapGoodsCfg = ConfigTable.GetData("ActivityGoods", mapData.nId)
if not self.mapGoodsCfg then
return
end
self:RefreshInfo()
self:RefreshPrice(nCurrencyItemId)
self:RefreshTime()
self:RefreshLimit()
end
function ActivityShopGoodsItemCtrl:RefreshInfo()
local mapItemCfg = ConfigTable.GetData_Item(self.mapGoodsCfg.ItemId)
if not mapItemCfg then
return
end
NovaAPI.SetTMPText(self._mapNode.txtName, self.mapGoodsCfg.Name)
if mapItemCfg.Type == GameEnum.itemType.Disc then
self:SetPngSprite(self._mapNode.imgIcon, mapItemCfg.Icon .. AllEnum.OutfitIconSurfix.Item)
self._mapNode.imgElement.gameObject:SetActive(true)
local mapDiscCfgData = ConfigTable.GetData("Disc", self.mapGoodsCfg.ItemId)
self:SetAtlasSprite(self._mapNode.imgElement, "12_rare", AllEnum.Star_Element[mapDiscCfgData.EET].icon)
else
self:SetPngSprite(self._mapNode.imgIcon, mapItemCfg.Icon)
self._mapNode.imgElement.gameObject:SetActive(false)
end
self._mapNode.imgExpire.gameObject:SetActive(mapItemCfg.ExpireType > 0)
local sPath = "db_arkanoid_shop_" .. AllEnum.FrameColor_New[mapItemCfg.Rarity]
self:SetActivityAtlasSprite_New(self._mapNode.imgRare, "30104/SpriteAtlas/3010403", sPath)
local bLimit = 0 < self.mapData.nMaximumLimit
if bLimit then
NovaAPI.SetTMPText(self._mapNode.txtLeft, orderedFormat(ConfigTable.GetUIText("Shop_Left"), self.mapData.nMaximumLimit - self.mapData.nBoughtCount))
else
NovaAPI.SetTMPText(self._mapNode.txtLeft, orderedFormat(ConfigTable.GetUIText("Shop_Left"), ConfigTable.GetUIText("Shop_Unlimited")))
end
NovaAPI.SetTMPText(self._mapNode.txtCount, orderedFormat(ConfigTable.GetUIText("Shop_GoodsItem_Count"), self.mapGoodsCfg.ItemQuantity))
end
function ActivityShopGoodsItemCtrl:RefreshPrice(nCurrencyItemId)
self:SetSprite_Coin(self._mapNode.imgCoin, nCurrencyItemId)
NovaAPI.SetTMPText(self._mapNode.txtPrice, self.mapGoodsCfg.Price)
end
function ActivityShopGoodsItemCtrl:RefreshTime()
local bTime = self.mapData.bPurchasTime and self.mapData.nNextRefreshTime > 0
self._mapNode.imgTime:SetActive(bTime)
if not bTime then
return
end
local sTime = ""
local nRemaining = self.mapData.nNextRefreshTime - CS.ClientManager.Instance.serverTimeStamp
if nRemaining <= 3600 and 0 < nRemaining then
sTime = ConfigTable.GetUIText("Shop_WithinHour")
elseif 3600 < nRemaining and nRemaining <= 86400 then
sTime = orderedFormat(ConfigTable.GetUIText("Shop_Hour"), math.floor(nRemaining / 3600))
elseif 86400 < nRemaining then
sTime = orderedFormat(ConfigTable.GetUIText("Shop_Day"), math.floor(nRemaining / 86400))
end
NovaAPI.SetTMPText(self._mapNode.txtLeftTime, sTime)
end
function ActivityShopGoodsItemCtrl:RefreshLimit()
local bMask = not self.mapData.bPurchasable or not self.mapData.bPurchasTime or self.mapData.bSoldOut
self._mapNode.imgMask:SetActive(bMask)
if self.mapData.bSoldOut then
self._mapNode.goRestock:SetActive(true)
self._mapNode.goCondition:SetActive(false)
return
end
self._mapNode.goRestock:SetActive(false)
self._mapNode.goCondition:SetActive(true)
if self.mapData.nUnlockPurchaseTime > 0 and self.mapData.nUnlockPurchaseTime == self.mapData.nNextRefreshTime then
local sTime = ""
local nRemaining = self.mapData.nNextRefreshTime - CS.ClientManager.Instance.serverTimeStamp
if nRemaining <= 3600 and 0 < nRemaining then
sTime = ConfigTable.GetUIText("Shop_WithinHourUnLock")
elseif 3600 < nRemaining and nRemaining <= 86400 then
sTime = orderedFormat(ConfigTable.GetUIText("Shop_HourUnLock"), math.floor(nRemaining / 3600))
elseif 86400 < nRemaining then
sTime = orderedFormat(ConfigTable.GetUIText("Shop_DayUnLock"), math.floor(nRemaining / 86400))
end
NovaAPI.SetTMPText(self._mapNode.txtCondition, sTime)
return
end
if not self.mapData.bPurchasable then
local sCond = ""
if self.mapData.nPurchaseCondType == GameEnum.shopCond.WorldClassSpecific then
sCond = orderedFormat(ConfigTable.GetUIText("Shop_Cond_WorldClass"), self.mapData.tbPurchaseCondParams[1])
elseif self.mapData.nPurchaseCondType == GameEnum.shopCond.ShopPreGoodsSellOut or self.mapData.nPurchaseCondType == GameEnum.shopCond.ActivityShopPreGoodsSellOut then
sCond = ConfigTable.GetUIText("Shop_Cond_PreGoodsSellOut")
end
NovaAPI.SetTMPText(self._mapNode.txtCondition, sCond)
return
end
end
function ActivityShopGoodsItemCtrl:Awake()
end
function ActivityShopGoodsItemCtrl:OnEnable()
end
function ActivityShopGoodsItemCtrl:OnDisable()
end
function ActivityShopGoodsItemCtrl:OnDestroy()
end
return ActivityShopGoodsItemCtrl
@@ -0,0 +1,24 @@
local ActivityShopPanel = class("ActivityShopPanel", BasePanel)
ActivityShopPanel._sUIResRootPath = "UI_Activity/"
ActivityShopPanel._tbDefine = {
{
sPrefabPath = "30104/Shop/ActivityShopPanel.prefab",
sCtrlName = "Game.UI.ActivityTheme.ShopCommon.ActivityShopCtrl"
}
}
function ActivityShopPanel:Awake()
self.nDefaultId = nil
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" then
self.nActId = tbParam[1]
self.nDefaultId = tbParam[2]
end
self.actShopData = PlayerData.Activity:GetActivityDataById(self.nActId)
end
function ActivityShopPanel:OnEnable()
end
function ActivityShopPanel:OnDisable()
end
function ActivityShopPanel:OnDestroy()
end
return ActivityShopPanel
@@ -0,0 +1,348 @@
local BreakOutTaskCtrl = class("BreakOutTaskCtrl", BaseCtrl)
local JumpUtil = require("Game.Common.Utils.JumpUtil")
local PlayerActivityData = PlayerData.Activity
local TabType = GameEnum.ActivityTaskTabType
local ItemType = GameEnum.itemType
BreakOutTaskCtrl._mapNodeConfig = {
TopBarPanel = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
svList_Tab = {
sComponentName = "LoopScrollView"
},
svList_Task = {
sComponentName = "LoopScrollView"
},
svList_GroupReward = {
sComponentName = "LoopScrollView"
},
tb_tmpReceived = {
nCount = 3,
sNodeName = "tmpReceived_",
sComponentName = "TMP_Text",
sLanguageId = "PerActivity_Quest_Received"
},
tmpUndone = {
sComponentName = "TMP_Text",
sLanguageId = "PerActivity_Quest_UnComplete"
},
tmpDone = {
sComponentName = "TMP_Text",
sLanguageId = "PerActivity_Quest_Receive"
},
tmpJump = {
sComponentName = "TMP_Text",
sLanguageId = "PerActivity_Quest_Jump"
},
tmpGroupDone = {
sComponentName = "TMP_Text",
sLanguageId = "PerActivity_Quest_Receive"
}
}
BreakOutTaskCtrl._mapEventConfig = {
onClick_RewardItem = "onEvent_ClickRewardItem",
onClick_TaskDone = "onEvent_ClickTaskDone",
onClick_TaskJump = "onEvent_ClickTaskJump"
}
BreakOutTaskCtrl._mapRedDotConfig = {}
function BreakOutTaskCtrl:OnEnable()
local tbParam = self:GetPanelParam()
self.nActivityId = type(tbParam) == "table" and tbParam[1] or nil
self.nCurGroupIndex = tbParam[2]
if type(self.nActivityId) ~= "number" then
self.nActivityId = nil
end
self:BuildData(self.nActivityId)
self:refresh_Tab()
self:refresh_Task()
end
function BreakOutTaskCtrl:BuildData(nActivityId)
if self.tbData == nil then
self.tbData = {}
end
if self.tbGroupId == nil then
self.tbGroupId = {}
end
if type(nActivityId) ~= "number" then
return
end
self.ins_ActivityTaskData = PlayerActivityData:GetActivityDataById(nActivityId)
if self.ins_ActivityTaskData == nil then
return
end
local func_Parse_ActivityTaskGroup = function(mapData)
if mapData.ActivityId == nActivityId then
local _nGroupId = mapData.Id
local nIdx = table.indexof(self.tbGroupId, _nGroupId)
if nIdx <= 0 then
local _mapData = {
nGroupId = _nGroupId,
nGroupOrder = mapData.Order,
nTabType = mapData.TaskTabType,
tbGroupRewardId = {},
tbGroupRewardNum = {},
tbTaskId = {},
tbTaskData = {},
nTaskDoneNum = 0,
nTaskOKNum = 0
}
for i = 1, 6 do
local nRewardId = mapData["Reward" .. tostring(i)]
local nRewardNum = mapData["RewardQty" .. tostring(i)]
if 0 < nRewardId and 0 < nRewardNum then
table.insert(_mapData.tbGroupRewardId, nRewardId)
table.insert(_mapData.tbGroupRewardNum, nRewardNum)
end
end
table.insert(self.tbData, _mapData)
table.insert(self.tbGroupId, _nGroupId)
else
local _mapData = self.tbData[nIdx]
_mapData.nTaskDoneNum = 0
_mapData.nTaskOKNum = 0
end
end
end
ForEachTableLine(DataTable.ActivityTaskGroup, func_Parse_ActivityTaskGroup)
local func_Parse_ActivityTask = function(mapData)
local nIdx = table.indexof(self.tbGroupId, mapData.ActivityTaskGroupId)
if 0 < nIdx then
local _mapData = self.tbData[nIdx]
local _tbTaskId = _mapData.tbTaskId
local _tbTaskData = _mapData.tbTaskData
local _nTaskId = mapData.Id
local taskData = self.ins_ActivityTaskData.mapActivityTaskDatas[_nTaskId]
local nIndex = table.indexof(_tbTaskId, _nTaskId)
if nIndex <= 0 then
local _mapTaskData = {
nTaskId = _nTaskId,
nStatus = taskData.nStatus,
sDesc = mapData.Desc,
nRarity = mapData.Rarity,
tbJumpTo = mapData.JumpTo,
nCur = taskData.nCur,
nMax = taskData.nMax,
tbTaskRewardId = {},
tbTaskRewardNum = {}
}
if taskData.nStatus == AllEnum.ActQuestStatus.Received then
_mapData.nTaskDoneNum = _mapData.nTaskDoneNum + 1
end
if taskData.nStatus ~= AllEnum.ActQuestStatus.UnComplete then
_mapData.nTaskOKNum = _mapData.nTaskOKNum + 1
end
for i = 1, 2 do
local nRewardId = mapData["Tid" .. tostring(i)]
local nRewardNum = mapData["Qty" .. tostring(i)]
if 0 < nRewardId and 0 < nRewardNum then
table.insert(_mapTaskData.tbTaskRewardId, nRewardId)
table.insert(_mapTaskData.tbTaskRewardNum, nRewardNum)
end
end
table.insert(_tbTaskId, _nTaskId)
table.insert(_tbTaskData, _mapTaskData)
else
local _mapTaskData = _tbTaskData[nIndex]
_mapTaskData.nStatus = taskData.nStatus
_mapTaskData.nCur = taskData.nCur
_mapTaskData.nMax = taskData.nMax
if taskData.nStatus == AllEnum.ActQuestStatus.Received then
_mapData.nTaskDoneNum = _mapData.nTaskDoneNum + 1
end
if taskData.nStatus ~= AllEnum.ActQuestStatus.UnComplete then
_mapData.nTaskOKNum = _mapData.nTaskOKNum + 1
end
end
end
end
ForEachTableLine(DataTable.ActivityTask, func_Parse_ActivityTask)
table.sort(self.tbData, function(a, b)
return a.nGroupOrder < b.nGroupOrder
end)
for i, v in ipairs(self.tbData) do
self.tbGroupId[i] = v.nGroupId
end
for i, mapData in ipairs(self.tbData) do
local tbTaskData = mapData.tbTaskData
table.sort(tbTaskData, function(a, b)
if a.nStatus == b.nStatus then
return a.nTaskId < b.nTaskId
else
return a.nStatus < b.nStatus
end
end)
for ii, vv in ipairs(tbTaskData) do
mapData.tbTaskId[ii] = vv.nTaskId
end
end
if self.nCurGroupIndex == nil then
local bInActGroup, nActGroupId = PlayerData.Activity:IsActivityInActivityGroup(self.nActivityId)
local nFirstReddot = 1
for i, v in ipairs(self.tbData) do
local bRed = false
if bInActGroup == false then
bRed = RedDotManager.GetValid(RedDotDefine.Activity_Group_Task_Group, {
self.nActivityId,
v.nGroupId
})
else
bRed = RedDotManager.GetValid(RedDotDefine.Activity_Group_Task_Group, {
nActGroupId,
self.nActivityId,
v.nGroupId
})
end
if bRed then
nFirstReddot = i
break
end
end
self.nCurGroupIndex = nFirstReddot
end
end
function BreakOutTaskCtrl:refresh_Tab()
self._mapNode.svList_Tab:Init(#self.tbData, self, self.onGridRefresh_Tab, self.onGridBtnClick_Tab)
end
function BreakOutTaskCtrl:onGridRefresh_Tab(go)
local nIndex = tonumber(go.name) + 1
local mapData = self.tbData[nIndex]
local mapCfgData_ActivityTaskGroup = ConfigTable.GetData("ActivityTaskGroup", mapData.nGroupId)
local nDone = mapData.nTaskDoneNum
local nTotal = #mapData.tbTaskData
local sProgress = string.format("%s/%s", tostring(nDone), tostring(nTotal))
local tr = go.transform
local canvasGroupOn = tr:Find("scale_on_click/imgDb_on"):GetComponent("CanvasGroup")
local canvasGroupOff = tr:Find("scale_on_click/imgDb_off"):GetComponent("CanvasGroup")
self:RefreshScaleOnClick_State(tr, nIndex, mapCfgData_ActivityTaskGroup, sProgress)
local goRedDot = tr:Find("scale_on_click/redDotTab")
local bInActGroup, nActGroupId = PlayerData.Activity:IsActivityInActivityGroup(self.nActivityId)
if bInActGroup == false then
RedDotManager.RegisterNode(RedDotDefine.Activity_Group_Task_Group, {
self.nActivityId,
mapData.nGroupId
}, goRedDot, nil, nil, true)
else
RedDotManager.RegisterNode(RedDotDefine.Activity_Group_Task_Group, {
nActGroupId,
self.nActivityId,
mapData.nGroupId
}, goRedDot, nil, nil, true)
end
end
function BreakOutTaskCtrl:onGridBtnClick_Tab(go)
local nIndex = tonumber(go.name) + 1
if self.nCurGroupIndex ~= nIndex then
local canvasGroupOn = go.transform.parent:GetChild(self.nCurGroupIndex - 1):Find("scale_on_click/imgDb_on"):GetComponent("CanvasGroup")
local canvasGroupOff = go.transform.parent:GetChild(self.nCurGroupIndex - 1):Find("scale_on_click/imgDb_off"):GetComponent("CanvasGroup")
NovaAPI.SetCanvasGroupAlpha(canvasGroupOn, 0)
NovaAPI.SetCanvasGroupAlpha(canvasGroupOff, 1)
self.nCurGroupIndex = nIndex
self:refresh_Tab()
self:refresh_Task(true)
end
end
function BreakOutTaskCtrl:RefreshScaleOnClick_State(tr, nIndex, mapCfgData_ActivityTaskGroup, sProgress)
local canvasGroupOn = tr:Find("scale_on_click/imgDb_on"):GetComponent("CanvasGroup")
local canvasGroupOff = tr:Find("scale_on_click/imgDb_off"):GetComponent("CanvasGroup")
if self.nCurGroupIndex == nIndex then
NovaAPI.SetCanvasGroupAlpha(canvasGroupOn, 1)
NovaAPI.SetCanvasGroupAlpha(canvasGroupOff, 0)
NovaAPI.SetTMPText(tr:Find("scale_on_click/imgDb_on/tmpTabName_on"):GetComponent("TMP_Text"), mapCfgData_ActivityTaskGroup.TabText)
NovaAPI.SetTMPText(tr:Find("scale_on_click/imgDb_on/tmpTabProgress_on"):GetComponent("TMP_Text"), sProgress)
else
NovaAPI.SetCanvasGroupAlpha(canvasGroupOn, 0)
NovaAPI.SetCanvasGroupAlpha(canvasGroupOff, 1)
NovaAPI.SetTMPText(tr:Find("scale_on_click/imgDb_off/tmpTabName_off"):GetComponent("TMP_Text"), mapCfgData_ActivityTaskGroup.TabText)
NovaAPI.SetTMPText(tr:Find("scale_on_click/imgDb_off/tmpTabProgress_off"):GetComponent("TMP_Text"), sProgress)
end
end
function BreakOutTaskCtrl:refresh_Task(bPlayAnim)
local mapData = self.tbData[self.nCurGroupIndex]
if bPlayAnim == true then
self._mapNode.svList_Task:SetAnim(0.05)
end
self._mapNode.svList_Task:Init(#mapData.tbTaskData, self, self.onGridRefresh_Task, nil)
end
function BreakOutTaskCtrl:onGridRefresh_Task(go)
local nIndex = tonumber(go.name) + 1
local mapData = self.tbData[self.nCurGroupIndex]
local mapTask = mapData.tbTaskData[nIndex]
local tr = go.transform:GetChild(0)
for i = 1, 5 do
tr:Find("imgRare_" .. tostring(i)).localScale = i == mapTask.nRarity and Vector3.one or Vector3.zero
end
local nCur = mapTask.nCur
local nMax = mapTask.nMax
if nMax <= 0 then
nMax = 0 < nCur and nCur or 1
end
if nCur > nMax then
nCur = nMax
end
if mapTask.nStatus == AllEnum.ActQuestStatus.Complete or mapTask.nStatus == AllEnum.ActQuestStatus.Received then
nCur = nMax
end
local rt = tr:Find("imgProgessDb"):GetComponent("RectTransform")
local nWidth = nCur / nMax * rt.rect.width
if 0 < nWidth and nWidth < 40 then
nWidth = 40
end
tr:Find("imgProgessBar"):GetComponent("RectTransform").sizeDelta = Vector2(nWidth, tr:Find("imgProgessBar"):GetComponent("RectTransform").rect.height)
NovaAPI.SetTMPText(tr:Find("tmpTaskDesc"):GetComponent("TMP_Text"), mapTask.sDesc)
NovaAPI.SetTMPText(tr:Find("tmpTaskProgress"):GetComponent("TMP_Text"), string.format("%s/%s", tostring(nCur), tostring(nMax)))
local nCount = #mapTask.tbTaskRewardId
for i = 1, 2 do
local _tr = tr:Find("TaskRewards/goTaskReward" .. tostring(i))
if i <= nCount then
_tr.localScale = Vector3.one
local nId = mapTask.tbTaskRewardId[i]
local mapCfgData_Item = ConfigTable.GetData("Item", nId)
self:SetSprite_FrameColor(_tr:Find("scale_on_click/imgRare").gameObject:GetComponent("Image"), mapCfgData_Item.Rarity, AllEnum.FrameType_New.Item, false)
self:SetPngSprite(_tr:Find("scale_on_click/imgIcon").gameObject:GetComponent("Image"), mapCfgData_Item.Icon)
_tr:Find("scale_on_click/goReceived").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Received and Vector3.one or Vector3.zero
local nNum = mapTask.tbTaskRewardNum[i]
local sNum = mapCfgData_Item.Type ~= ItemType.Char and mapCfgData_Item.Type ~= ItemType.Disc and "×" .. tostring(nNum) or ""
NovaAPI.SetTMPText(_tr:Find("scale_on_click/tmpCount").gameObject:GetComponent("TMP_Text"), sNum)
_tr:GetChild(0).name = tostring(nId)
_tr:Find("scale_on_click/goTimeLimit").localScale = 0 < mapCfgData_Item.ExpireType and Vector3.one or Vector3.zero
else
_tr.localScale = Vector3.zero
_tr.gameObject:SetActive(false)
end
end
tr:Find("tmpUndone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 >= #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Complete and Vector3.one or Vector3.zero
tr:Find("btnDone"):GetChild(0).name = tostring(mapTask.nTaskId)
tr:Find("btnJump").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 < #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnJump"):GetChild(0).name = tostring(nIndex)
tr:Find("goDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Received and Vector3.one or Vector3.zero
end
function BreakOutTaskCtrl:onEvent_ClickRewardItem(goBtn)
local nItemId = tonumber(goBtn.transform:GetChild(0).name)
if nItemId ~= nil then
UTILS.ClickItemGridWithTips(nItemId, goBtn.transform, true, true, true)
end
end
function BreakOutTaskCtrl:onEvent_ClickTaskDone(goBtn)
local nTaskId = tonumber(goBtn.transform:GetChild(0).name)
if nTaskId ~= nil then
local cb = function()
self:BuildData(self.nActivityId)
self:refresh_Tab()
self:refresh_Task(true)
end
local mapData = self.tbData[self.nCurGroupIndex]
self.ins_ActivityTaskData:SendMsg_ActivityTaskRewardReceiveReq(mapData.nGroupId, 0, mapData.nTabType, cb)
end
end
function BreakOutTaskCtrl:onEvent_ClickTaskJump(goBtn)
local nIndex = tonumber(goBtn.transform:GetChild(0).name)
local mapData = self.tbData[self.nCurGroupIndex]
local mapTask = mapData.tbTaskData[nIndex]
local JumpToData = mapTask.tbJumpTo
if JumpToData ~= nil and 0 < #JumpToData then
JumpUtil.JumpToActivity(JumpToData)
end
end
return BreakOutTaskCtrl
@@ -0,0 +1,9 @@
local BreakOutTaskPanel = class("BreakOutTaskPanel", BasePanel)
BreakOutTaskPanel._sUIResRootPath = "UI_Activity/"
BreakOutTaskPanel._tbDefine = {
{
sPrefabPath = "30104/Task.prefab",
sCtrlName = "Game.UI.ActivityTheme.30104.Task.BreakOutTaskCtrl"
}
}
return BreakOutTaskPanel
@@ -140,7 +140,7 @@ function TaskCommonCtrl_01:BuildData(nActivityId)
nStatus = taskData.nStatus,
sDesc = mapData.Desc,
nRarity = mapData.Rarity,
nJumpTo = mapData.JumpTo,
tbJumpTo = mapData.JumpTo,
nCur = taskData.nCur,
nMax = taskData.nMax,
tbTaskRewardId = {},
@@ -315,11 +315,11 @@ function TaskCommonCtrl_01:onGridRefresh_Task(go)
_tr.localScale = Vector3.zero
end
end
tr:Find("tmpUndone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 >= mapTask.nJumpTo and Vector3.one or Vector3.zero
tr:Find("tmpUndone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 >= #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Complete and Vector3.one or Vector3.zero
tr:Find("btnDone"):GetChild(0).name = tostring(mapTask.nTaskId)
tr:Find("btnJump").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 < mapTask.nJumpTo and Vector3.one or Vector3.zero
tr:Find("btnJump"):GetChild(0).name = tostring(mapTask.nJumpTo)
tr:Find("btnJump").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.UnComplete and 0 < #mapTask.tbJumpTo and Vector3.one or Vector3.zero
tr:Find("btnJump"):GetChild(0).name = tostring(nIndex)
tr:Find("goDone").localScale = mapTask.nStatus == AllEnum.ActQuestStatus.Received and Vector3.one or Vector3.zero
end
function TaskCommonCtrl_01:onEvent_ClickRewardItem(goBtn)
@@ -342,9 +342,12 @@ function TaskCommonCtrl_01:onEvent_ClickTaskDone(goBtn)
end
end
function TaskCommonCtrl_01:onEvent_ClickTaskJump(goBtn)
local nJumpId = tonumber(goBtn.transform:GetChild(0).name)
if nJumpId ~= nil and 0 < nJumpId then
JumpUtil.JumpTo(nJumpId)
local nIndex = tonumber(goBtn.transform:GetChild(0).name)
local mapData = self.tbData[self.nCurGroupIndex]
local mapTask = mapData.tbTaskData[nIndex]
local JumpToData = mapTask.tbJumpTo
if JumpToData ~= nil and 0 < #JumpToData then
JumpUtil.JumpToActivity(JumpToData)
end
end
function TaskCommonCtrl_01:refresh_Group()
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+837
View File
@@ -0,0 +1,837 @@
return {
{
cmd = "SetGroupId",
param = {"1"}
},
{
cmd = "SetCharL2D",
param = {
"avg1_155",
5,
"none",
"",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_157",
1,
"none",
"",
1
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_157",
0,
"none",
"presents_a",
0
}
},
{
cmd = "SetTalk",
param = {
6,
"avg1_157",
"希娅希娅,这次收获好多!",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_155",
0,
"none",
"presents_a",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_155",
0,
"avg_emoji_happy",
"",
0
}
},
{
cmd = "SetTalk",
param = {
7,
"avg1_155",
"今天运气不错~",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_157",
2,
"none",
"",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_155",
6,
"none",
"",
1
}
},
{
cmd = "SetGroupId",
param = {"2"}
},
{
cmd = "SetCharL2D",
param = {
"avg1_116",
1,
"none",
"",
1
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_110",
5,
"none",
"",
1
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_116",
0,
"none",
"shy_a",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_116",
0,
"avg_emoji_attention",
"",
0
}
},
{
cmd = "SetTalk",
param = {
6,
"avg1_116",
"啊……领导好!",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_110",
0,
"none",
"chat_a",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_110",
0,
"avg_emoji_happy",
"",
0
}
},
{
cmd = "SetTalk",
param = {
7,
"avg1_110",
"不必慌张,我只是路过来看一眼。",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_110",
6,
"none",
"",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_116",
2,
"none",
"",
1
}
},
{
cmd = "SetGroupId",
param = {"3"}
},
{
cmd = "SetCharL2D",
param = {
"avg1_159",
1,
"none",
"",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_141",
5,
"none",
"",
1
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_159",
0,
"none",
"presents_b",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_159",
0,
"avg_emoji_question",
"",
0
}
},
{
cmd = "SetTalk",
param = {
6,
"avg1_159",
"你是说,把这种纸贴在患处可以有效缓解肌肉酸痛?",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_141",
0,
"none",
"presents_b",
0
}
},
{
cmd = "SetTalk",
param = {
7,
"avg1_141",
"那当然,这可是祖传秘方!",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_159",
0,
"none",
"presents_a",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_159",
0,
"avg_emoji_speechless",
"",
0
}
},
{
cmd = "SetTalk",
param = {
6,
"avg1_159",
"想不到这犬型的符文竟有这种疗效……",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_141",
0,
"avg_emoji_awkward",
"",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_141",
0,
"none",
"shy_a",
0
}
},
{
cmd = "SetTalk",
param = {
7,
"avg1_141",
"我说的是背面的药膏啦!",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_159",
2,
"none",
"",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_141",
6,
"none",
"",
1
}
},
{
cmd = "SetGroupId",
param = {"4"}
},
{
cmd = "SetCharL2D",
param = {
"avg1_115",
1,
"none",
"",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_156",
5,
"none",
"",
1
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_115",
0,
"none",
"think_a",
0
}
},
{
cmd = "SetTalk",
param = {
6,
"avg1_115",
"毛茸茸,带来了吗?",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_156",
0,
"none",
"chat_a",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_156",
0,
"avg_emoji_happy",
"",
0
}
},
{
cmd = "SetTalk",
param = {
7,
"avg1_156",
"放心吧,这可是我从星塔里弄来的尖货~",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_115",
2,
"none",
"",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_156",
6,
"none",
"",
1
}
},
{
cmd = "SetGroupId",
param = {"5"}
},
{
cmd = "SetCharL2D",
param = {
"avg1_140",
5,
"none",
"",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_160",
1,
"none",
"",
1
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_140",
0,
"none",
"think_a",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_140",
0,
"avg_emoji_sweaty",
"",
0
}
},
{
cmd = "SetTalk",
param = {
7,
"avg1_140",
"哼。",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_140",
6,
"none",
"",
1
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_160",
0,
"none",
"chat_b",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_160",
0,
"avg_emoji_speechless",
"",
0
}
},
{
cmd = "SetTalk",
param = {
6,
"avg1_160",
"唉……",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_160",
2,
"none",
"",
1
}
},
{
cmd = "SetGroupId",
param = {"6"}
},
{
cmd = "SetCharL2D",
param = {
"avg1_114",
1,
"none",
"",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_108",
5,
"none",
"",
1
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_114",
0,
"none",
"chat_a",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_114",
0,
"avg_emoji_attention",
"",
0
}
},
{
cmd = "SetTalk",
param = {
6,
"avg1_114",
"任务完成!",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_114",
0,
"none",
"presents_a",
0
}
},
{
cmd = "SetTalk",
param = {
6,
"avg1_114",
"卡西米拉,现在去电玩厅吗?",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_108",
0,
"none",
"chat_b",
0
}
},
{
cmd = "SetTalk",
param = {
7,
"avg1_108",
"好啊。",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_114",
2,
"none",
"",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_108",
6,
"none",
"",
1
}
},
{
cmd = "SetGroupId",
param = {"7"}
},
{
cmd = "SetCharL2D",
param = {
"avg1_137",
1,
"none",
"",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_132",
5,
"none",
"",
1
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_132",
0,
"none",
"chat_b",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_132",
0,
"avg_emoji_attention",
"",
0
}
},
{
cmd = "SetTalk",
param = {
6,
"avg1_132",
"嘿,又见面了!",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_137",
0,
"none",
"presents_a",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_137",
0,
"avg_emoji_star",
"",
0
}
},
{
cmd = "SetTalk",
param = {
7,
"avg1_137",
"请再教我一些格斗技巧吧,密涅瓦。",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_132",
0,
"none",
"presents_a",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_132",
0,
"avg_emoji_happy",
"",
0
}
},
{
cmd = "SetTalk",
param = {
6,
"avg1_132",
"当然没问题。",
0,
"",
false,
""
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_137",
2,
"none",
"",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_132",
6,
"none",
"",
1
}
},
{cmd = "End"}
}
+127
View File
@@ -0,0 +1,127 @@
return {
{
cmd = "SetGroupId",
param = {"13701"}
},
{
cmd = "SetCharL2D",
param = {
"avg1_137",
3,
"none",
"",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_137",
0,
"avg_emoji_happy",
"",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_137",
0,
"none",
"present_a",
0
}
},
{
cmd = "SetTalk",
param = {
0,
"avg1_137",
"前辈我回来啦!",
0,
"",
false,
"",
"",
""
}
},
{
cmd = "SetTalk",
param = {
0,
"avg1_137",
"很高兴能帮上前辈的忙,下次要是打算去哪里冒险,也请记得叫上我!",
0,
"",
false,
"",
"",
""
}
},
{
cmd = "SetGroupId",
param = {"13702"}
},
{
cmd = "SetCharL2D",
param = {
"avg1_137",
3,
"none",
"",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_137",
0,
"avg_emoji_shy",
"",
0
}
},
{
cmd = "SetCharL2D",
param = {
"avg1_137",
0,
"none",
"present_b",
0
}
},
{
cmd = "SetTalk",
param = {
0,
"avg1_137",
"前辈,我有个不情之请……",
0,
"",
false,
"",
"",
""
}
},
{
cmd = "SetTalk",
param = {
0,
"avg1_137",
"这次带回来的东西里有我想要的,我可以买下来吗?",
0,
"",
false,
"",
"",
""
}
},
{cmd = "End"}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -8247,7 +8247,7 @@ return {
cmd = "SetTalk",
param = {
0,
"avg1_132",
"avg1_112",
"==PLAYER_NAME==,来一下。",
0,
"",
+2 -2
View File
@@ -168,7 +168,7 @@ return {
param = {
"12:30",
"雾月",
"14日",
"17日",
"米拉什",
"尤里卡水吧"
}
@@ -15275,7 +15275,7 @@ return {
param = {
"15:30",
"雾月",
"14日",
"17日",
"米拉什",
"尤里卡水吧"
}
+2 -2
View File
@@ -27,7 +27,7 @@ return {
cmd = "SetBg",
param = {
0,
"ruin_travellers_home_inside",
"travellers_home_inside",
"0",
"Linear",
0.0,
@@ -1050,7 +1050,7 @@ return {
cmd = "SetBg",
param = {
0,
"ruin_travellers_home_inside",
"travellers_home_inside",
"0",
"Linear",
1.0,

Some files were not shown because too many files have changed in this diff Show More