290 lines
9.1 KiB
Lua
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 |