Files
Main/Assets/GameAssets/Resources/Lua/Logic/YYHD/RollDice/RollDiceData.lua
2025-01-25 04:38:09 +08:00

290 lines
9.1 KiB
Lua

------------------------------------------------
--作者: HJ
--日期: 2020-12-21
--文件: RollDiceData.lua
--模块: RollDiceData
--描述: 掷骰子活动
------------------------------------------------
local BaseData = require("Logic.YYHD.YYHDBaseData")
local ItemData = require("Logic.YYHD.YYHDItemData")
local RollDiceData = {
--格子信息
GridInfoList = nil,
--个人通关次数奖励
PlayerTimesList = nil,
--全服通关次数奖励
ServerTimesList = nil,
--骰子信息
DiceInfo = nil,
--元宝消耗
GoldCost = 0,
CostMoneyType = 1,
--宝箱数据
SpecialBoxItem = nil,
--当前个人通关次数及全服通关次数
CurPlayerTimes = 0,
CurServerTimes = 0,
--当前位置
PlayerIndex = 0,
--已经领取过后的个人通关奖励
ReceiveTimesList = nil,
--骰子点数
JunpNumList = List:New(),
TotalJunpNum = 0,
--标记掷骰子过后通关次数
CrossIndex = 0,
--是否跳过动画
NoEffect = false,
--保底奖励
BaoDiCfgList = nil,
--保底的领取状态
BaoDiGetState = nil,
--保底抽奖的次数
BaoDiAwardCount = 0,
}
function RollDiceData:New(typeId)
local _n = Utils.DeepCopy(self)
local _mn = setmetatable(_n, {__index = BaseData:New(typeId)})
return _mn
end
--解析活动配置数据
function RollDiceData:ParseSelfCfgData(jsonTable)
self.GridInfoList = List:New()
self.PlayerTimesList = List:New()
self.ServerTimesList = List:New()
if jsonTable.cost then
self.DiceInfo = ItemData:New(jsonTable.cost)
end
if jsonTable.costGold then
self.GoldCost = jsonTable.costGold
end
--格子信息
if jsonTable.grids ~= nil then
local _count = #jsonTable.grids
for i = 1, _count - 1 do
local _item = {}
_item.ShowItemList = List:New()
if jsonTable.grids[i] then
for mk, mv in pairs (jsonTable.grids[i]) do
_item.ShowItemList:Add(ItemData:New(mv))
end
end
self.GridInfoList:Add(_item)
end
local _item = {}
_item.ShowItemList = List:New()
if jsonTable.grids[_count] then
for mk, mv in pairs (jsonTable.grids[_count]) do
_item.ShowItemList:Add(ItemData:New(mv))
end
end
self.SpecialBoxItem = _item
end
--玩家通关次数奖励信息
if jsonTable.playerTimes then
for ik, iv in pairs(jsonTable.playerTimes) do
local _item = {}
_item.Num = tonumber(iv.proc)
_item.ShowItemList = List:New()
if iv.items then
for mk, mv in pairs (iv.items) do
_item.ShowItemList:Add(ItemData:New(mv))
end
end
self.PlayerTimesList:Add(_item)
end
end
self.PlayerTimesList:Sort(function(a, b)
return a.Num < b.Num
end)
--全服通关次数奖励信息
if jsonTable.serverTimes then
for ik, iv in pairs(jsonTable.serverTimes) do
local _item = {}
_item.Num = tonumber(iv.proc)
_item.ShowItemList = List:New()
if iv.items then
for mk, mv in pairs (iv.items) do
_item.ShowItemList:Add(ItemData:New(mv))
end
end
self.ServerTimesList:Add(_item)
end
end
self.ServerTimesList:Sort(function(a, b)
return a.Num < b.Num
end)
self.BaoDiCfgList = List:New()
if jsonTable.lowestData ~= nil then
for k, v in pairs(jsonTable.lowestData) do
local _itemList = List:New()
for i = 1, #v.rewardData do
local _item = ItemData:New(v.rewardData[i])
_itemList:Add(_item)
end
self.BaoDiCfgList:Add({
Index = v.index,
Min = v.min,
Max = v.max,
Items = _itemList
})
end
end
self.BaoDiCfgList:Sort(function(x, y)
return x.Index < y.Index
end)
end
--解析活动玩家数据
function RollDiceData:ParsePlayerData(jsonTable)
-- Debug.LogTableYellow(jsonTable)
self.JunpNumList:Clear()
self.TotalJunpNum = 0
self.CrossIndex = 0
--保底领取状态
self.BaoDiGetState = {}
if jsonTable.drawLowestMap ~= nil then
for k, v in pairs(jsonTable.drawLowestMap) do
self.BaoDiGetState[tonumber(k)] = (v ~= 0)
end
end
self.BaoDiAwardCount = jsonTable.drawLowestCount or 0
if jsonTable.playerTimes then
self.CurPlayerTimes = tonumber(jsonTable.playerTimes)
end
if jsonTable.serverTimes then
self.CurServerTimes = tonumber(jsonTable.serverTimes)
end
if jsonTable.jumpGrids then
for mk, mv in pairs (jsonTable.jumpGrids) do
self.PlayerIndex = tonumber(mv)
end
end
self.ReceiveTimesList = List:New()
if jsonTable.rewardHistory then
for mk, mv in pairs (jsonTable.rewardHistory) do
self.ReceiveTimesList:Add(tonumber(mv))
end
end
end
--刷新数据
function RollDiceData:RefreshData()
local _isRed = false
for i = 1, #self.PlayerTimesList do
if self.CurPlayerTimes >= self.PlayerTimesList[i].Num and not self.ReceiveTimesList:Contains(self.PlayerTimesList[i].Num) then
_isRed = true
break
end
end
--检测红点
self:RemoveRedPoint()
self:AddRedPoint(0, nil, nil, nil, _isRed, nil)
if self.DiceInfo then
self:AddRedPoint(1, {{self.DiceInfo.ItemID, self.DiceInfo.ItemCount}}, nil, nil, nil, nil)
end
end
--处理运营活动返回
function RollDiceData:ResActivityDeal(jsonTable)
-- Debug.LogTableYellow(jsonTable)
--保底领取状态
if jsonTable.drawLowestMap ~= nil then
self.BaoDiGetState = {}
for k, v in pairs(jsonTable.drawLowestMap) do
self.BaoDiGetState[tonumber(k)] = (v ~= 0)
end
end
if jsonTable.drawLowestCount then
self.BaoDiAwardCount = jsonTable.drawLowestCount
end
if jsonTable.playerTimes then
local _curNum = tonumber(jsonTable.playerTimes)
if self.CurPlayerTimes then
self.CrossIndex = _curNum - self.CurPlayerTimes
end
self.CurPlayerTimes = _curNum
end
if jsonTable.serverTimes then
self.CurServerTimes = tonumber(jsonTable.serverTimes)
end
if jsonTable.openGrid then
self.PlayerIndex = tonumber(jsonTable.openGrid)
end
if not self.JunpNumList then
self.JunpNumList = List:New()
else
self.JunpNumList:Clear()
end
self.TotalJunpNum = 0
if jsonTable.jump then
for mk, mv in pairs (jsonTable.jump) do
self.JunpNumList:Add(tonumber(mv))
self.TotalJunpNum = self.TotalJunpNum + tonumber(mv)
end
end
if jsonTable.bigRewards then
if not self.BigReward then
self.BigReward = List:New()
else
self.BigReward:Clear()
end
for mk, mv in pairs (jsonTable.bigRewards) do
-- _m.ItemID = itemTable.i
-- _m.ItemCount = itemTable.n
-- _m.Occ = itemTable.c
-- _m.IsBind = itemTable.b ~= 0
self.BigReward:Add(ItemData:New(mv))
end
end
if jsonTable.rewards then
if not self.NormalReward then
self.NormalReward = List:New()
else
self.NormalReward:Clear()
end
for mk, mv in pairs (jsonTable.rewards) do
-- _m.ItemID = itemTable.i
-- _m.ItemCount = itemTable.n
-- _m.Occ = itemTable.c
-- _m.IsBind = itemTable.b ~= 0
self.NormalReward:Add(ItemData:New(mv))
end
end
if jsonTable.selfHistory then
for mk, mv in pairs (jsonTable.selfHistory) do
local _num = tonumber(mv)
if not self.ReceiveTimesList:Contains(_num) then
self.ReceiveTimesList:Add(_num)
end
end
end
self:RefreshData()
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_REFRESH_HDFORM, self.TypeId)
end
--请求领奖
function RollDiceData:ReqGetAward(type, id, num, needNum)
if type == 0 then
if id == 1 then
if GameCenter.ItemContianerSystem:GetItemCountFromCfgId(self.CostMoneyType) < self.GoldCost * needNum then
Utils.ShowMsgBox(function(k)
if k == MsgBoxResultCode.Button2 then
GameCenter.ItemQuickGetSystem:OpenItemQuickGetForm(ItemTypeCode.Gold)
end
end, "C_UI_EQUIPWASH_TIPS3")
end
end
local _json = string.format("{\"opt\":%d,\"isGold\":%d,\"num\":%d}", type, id, num)
GameCenter.Network.Send("MSG_Activity.ReqActivityDeal", {type = self.TypeId, data = _json})
elseif type == 1 then
local _json = string.format("{\"opt\":%d,\"times\":%d}", type, id)
GameCenter.Network.Send("MSG_Activity.ReqActivityDeal", {type = self.TypeId, data = _json})
end
end
return RollDiceData