453 lines
12 KiB
Lua
453 lines
12 KiB
Lua
------------------------------------------------
|
|
-- 作者: 陈锡涵
|
|
-- 日期: 2020-08-14
|
|
-- 文件: JieRiXueYuanData.lua
|
|
-- 模块: JieRiXueYuanData
|
|
-- 描述: 节日许愿
|
|
------------------------------------------------
|
|
local BaseData = require("Logic.YYHD.YYHDBaseData")
|
|
local ItemData = require("Logic.YYHD.YYHDItemData")
|
|
|
|
local JieRiXueYuanData = {
|
|
-- 配置数据
|
|
CfgData = nil,
|
|
PlayerData = nil,
|
|
--保底奖励
|
|
BaoDiCfgList = nil,
|
|
--保底的领取状态
|
|
BaoDiGetState = nil,
|
|
--保底抽奖的次数
|
|
BaoDiAwardCount = 0,
|
|
}
|
|
|
|
function JieRiXueYuanData:New(typeId)
|
|
local _n = Utils.DeepCopy(self)
|
|
local _mn = setmetatable(_n, {
|
|
__index = BaseData:New(typeId)
|
|
})
|
|
--TODO
|
|
-- self:Test();
|
|
return _mn
|
|
end
|
|
|
|
-- 解析活动配置数据
|
|
function JieRiXueYuanData:ParseSelfCfgData(jsonTable)
|
|
self.CfgData = jsonTable;
|
|
self.PlayerData = nil;
|
|
local _occ = GameCenter.GameSceneSystem:GetLocalPlayer().IntOcc
|
|
--积分奖励
|
|
local _rewards = self.CfgData.lowestRewards or {};
|
|
self.ScoreItems = {}
|
|
for i=1, #_rewards do
|
|
local _reward = _rewards[i];
|
|
if _reward.c == 9 or _occ == _reward.c then
|
|
table.insert(self.ScoreItems, _reward)
|
|
end
|
|
end
|
|
|
|
table.sort(self.ScoreItems, function(a,b)
|
|
return a.s < b.s
|
|
end)
|
|
|
|
for i=1, #self.ScoreItems do
|
|
self.ScoreItems[i].index = i;
|
|
end
|
|
--滚动奖励
|
|
_rewards = self.CfgData.rewardPool or {};
|
|
self.BigItemDic = {};
|
|
self.ShowItemList = {};
|
|
for i=1, #_rewards do
|
|
local _reward = _rewards[i];
|
|
if _reward.c == 9 or _occ == _reward.c then
|
|
if _reward.isB == 1 then
|
|
self.BigItemDic[_reward.i] = _reward;
|
|
end
|
|
if _reward.isS == 1 then
|
|
table.insert(self.ShowItemList, _reward)
|
|
end
|
|
end
|
|
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 JieRiXueYuanData:IsBigItem(id)
|
|
if self.BigItemDic then
|
|
return not(not self.BigItemDic[id])
|
|
end
|
|
end
|
|
|
|
-- 解析自定义数据有更新
|
|
function JieRiXueYuanData:ParsePlayerData(jsonTable)
|
|
self.PlayerData = jsonTable;
|
|
local _itemTable = {}
|
|
local _itemList = List:New()
|
|
if jsonTable.store ~= nil then
|
|
for i = 1, #jsonTable.store do
|
|
local _item = jsonTable.store[i]
|
|
local _oriItem = _itemTable[_item.i]
|
|
if _oriItem ~= nil then
|
|
_oriItem.n = _oriItem.n + _item.n
|
|
else
|
|
_itemTable[_item.i] = _item
|
|
_itemList:Add(_item)
|
|
end
|
|
end
|
|
end
|
|
self.Store = _itemList
|
|
self.LastItems = nil;
|
|
|
|
--保底领取状态
|
|
self.BaoDiGetState = {}
|
|
if jsonTable.lowestMap ~= nil then
|
|
for k, v in pairs(jsonTable.lowestMap) do
|
|
self.BaoDiGetState[tonumber(k)] = (v ~= 0)
|
|
end
|
|
end
|
|
self.BaoDiAwardCount = jsonTable.lowestCount or 0
|
|
end
|
|
|
|
-- 该功能是否有小红点
|
|
function JieRiXueYuanData:IsRedpoint()
|
|
if self.PlayerData then
|
|
if #self.Store > 0 then
|
|
return true;
|
|
end
|
|
end
|
|
|
|
if self.ScoreItems then
|
|
for i=1,#self.ScoreItems do
|
|
--有可领取的积分奖励
|
|
if self:GetScoreRewardStateByIndex(self.ScoreItems[i].index) == 1 then
|
|
return true;
|
|
end
|
|
end
|
|
end
|
|
|
|
if self.CfgData then
|
|
local _haveKeyNum = tonumber(GameCenter.ItemContianerSystem:GetItemCountFromCfgId(self.CfgData.keyId))
|
|
if _haveKeyNum >= self.CfgData.oneCostKey or _haveKeyNum >= self.CfgData.tenCostKey then
|
|
return true;
|
|
end
|
|
end
|
|
end
|
|
|
|
--刷新红点
|
|
function JieRiXueYuanData:RereshRedpoint()
|
|
if self:IsRedpoint() then
|
|
self:AddRedPoint(self.TypeId, nil, nil, nil, true, nil)
|
|
else
|
|
self:RemoveRedPoint()
|
|
end
|
|
end
|
|
|
|
-- 刷新数据
|
|
function JieRiXueYuanData:RefreshData()
|
|
self:OnRefresh()
|
|
end
|
|
|
|
-- 运营活动操作返回
|
|
function JieRiXueYuanData:ResActivityDeal(jsonTable)
|
|
self.PlayerData = jsonTable;
|
|
self.LastItems = jsonTable.last;
|
|
if jsonTable.lowestMap ~= nil then
|
|
for k, v in pairs(jsonTable.lowestMap) do
|
|
self.BaoDiGetState[tonumber(k)] = (v ~= 0)
|
|
end
|
|
end
|
|
self.BaoDiAwardCount = jsonTable.lowestCount or 0
|
|
if jsonTable.last ~= nil then
|
|
for i = 1, #jsonTable.last do
|
|
local _item = jsonTable.last[i]
|
|
local _finded = false
|
|
for j = 1, #self.Store do
|
|
local _oriItem = self.Store[j]
|
|
if _oriItem.i == _item.i then
|
|
_oriItem.n = _oriItem.n + _item.n
|
|
_finded = true
|
|
break
|
|
end
|
|
end
|
|
if not _finded then
|
|
self.Store:Add(_item)
|
|
end
|
|
end
|
|
end
|
|
-- 刷新数据
|
|
self:RefreshData()
|
|
-- 刷新活动列表
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_REFRESH_HDLIST)
|
|
-- 刷新某个活动
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_REFRESH_HDFORM, self.TypeId)
|
|
end
|
|
|
|
function JieRiXueYuanData:ReqActivityDeal(count)
|
|
GameCenter.Network.Send("MSG_Activity.ReqActivityDeal", {
|
|
type = self.TypeId,
|
|
data = Json.encode({
|
|
wish = count,
|
|
})
|
|
})
|
|
end
|
|
|
|
--领取积分奖励状态: 0 不可领, 1 可领, 2 已领取
|
|
function JieRiXueYuanData:GetScoreRewardStateByIndex(index)
|
|
if not self.CfgData then
|
|
return false;
|
|
end
|
|
local _curScore = self.PlayerData.score or 0;
|
|
local _reward = self.ScoreItems[index];
|
|
local _boxBin = self.PlayerData.boxBin or 0;
|
|
|
|
-- Debug.LogError(index, _curScore , _reward.s , _boxBin >> (index - 1))
|
|
if _curScore < _reward.s then
|
|
return 0;
|
|
elseif (_boxBin >> (index - 1)) & 1 ~= 1 then
|
|
return 1;
|
|
else
|
|
return 2;
|
|
end
|
|
end
|
|
|
|
function JieRiXueYuanData:OnRefresh()
|
|
if self.LastItems and #self.LastItems > 0 then
|
|
for i=1, #self.LastItems do
|
|
local _item = self.LastItems[i]
|
|
GameCenter.GetNewItemSystem:AddShowItem(ItemChangeReasonName.FestvialWishGet, nil, _item.i, _item.n);
|
|
end
|
|
end
|
|
self:RereshRedpoint()
|
|
end
|
|
|
|
|
|
function JieRiXueYuanData:Test()
|
|
self.CfgData =
|
|
{
|
|
['keyId'] = 1033,
|
|
['lowestRewards'] = {
|
|
[1] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 12003,
|
|
['n'] = 1,
|
|
['s'] = 50,},
|
|
[2] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 12003,
|
|
['n'] = 1,
|
|
['s'] = 200,},
|
|
[3] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 12003,
|
|
['n'] = 1,
|
|
['s'] = 500,},
|
|
[4] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 12003,
|
|
['n'] = 1,
|
|
['s'] = 1000,},
|
|
[5] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 12003,
|
|
['n'] = 1,
|
|
['s'] = 2000,},},
|
|
['oneCostGold'] = 50,
|
|
['rewardPool'] = {
|
|
[1] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10001,
|
|
['isB'] = 1,
|
|
['isS'] = 1,
|
|
['n'] = 1,},
|
|
[2] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10002,
|
|
['isB'] = 1,
|
|
['isS'] = 1,
|
|
['n'] = 1,},
|
|
[3] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10003,
|
|
['isB'] = 1,
|
|
['isS'] = 1,
|
|
['n'] = 1,},
|
|
[4] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10004,
|
|
['isB'] = 1,
|
|
['isS'] = 1,
|
|
['n'] = 1,},
|
|
[5] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10005,
|
|
['isB'] = 1,
|
|
['isS'] = 1,
|
|
['n'] = 1,},
|
|
[6] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10006,
|
|
['isB'] = 1,
|
|
['isS'] = 1,
|
|
['n'] = 1,},
|
|
[7] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10007,
|
|
['isB'] = 1,
|
|
['isS'] = 1,
|
|
['n'] = 1,},
|
|
[8] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10008,
|
|
['isB'] = 1,
|
|
['isS'] = 1,
|
|
['n'] = 1,},
|
|
[9] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10009,
|
|
['isB'] = 1,
|
|
['isS'] = 1,
|
|
['n'] = 1,},
|
|
[10] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10010,
|
|
['isB'] = 1,
|
|
['isS'] = 1,
|
|
['n'] = 1,},
|
|
[11] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10011,
|
|
['isB'] = 1,
|
|
['isS'] = 1,
|
|
['n'] = 1,},
|
|
[12] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10012,
|
|
['isB'] = 1,
|
|
['isS'] = 1,
|
|
['n'] = 1,},
|
|
[13] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10013,
|
|
['isB'] = 1,
|
|
['isS'] = 1,
|
|
['n'] = 1,},
|
|
[14] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10014,
|
|
['isB'] = 1,
|
|
['isS'] = 0,
|
|
['n'] = 1,},
|
|
[15] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10015,
|
|
['isB'] = 1,
|
|
['isS'] = 0,
|
|
['n'] = 1,},
|
|
[16] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10016,
|
|
['isB'] = 1,
|
|
['isS'] = 0,
|
|
['n'] = 1,},
|
|
[17] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10017,
|
|
['isB'] = 1,
|
|
['isS'] = 0,
|
|
['n'] = 1,},
|
|
[18] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10018,
|
|
['isB'] = 1,
|
|
['isS'] = 0,
|
|
['n'] = 1,},},
|
|
['tenCostGold'] = 500,
|
|
['oneCostKey'] = 1,
|
|
['tenCostKey'] = 10,
|
|
}
|
|
|
|
self.PlayerData =
|
|
{
|
|
['wish'] = 360,
|
|
['boxBin'] = 1,
|
|
['score'] = 49,
|
|
['store'] = {
|
|
[1] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10016,
|
|
['n'] = 2,},
|
|
[2] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10017,
|
|
['n'] = 3,},
|
|
[3] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10018,
|
|
['n'] = 5,}
|
|
},
|
|
['last'] = {
|
|
[1] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10016,
|
|
['n'] = 2,},
|
|
[2] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10017,
|
|
['n'] = 3,},
|
|
[3] = {
|
|
['b'] = 0,
|
|
['c'] = 9,
|
|
['i'] = 10018,
|
|
['n'] = 5,}
|
|
},
|
|
}
|
|
|
|
GameCenter.YYHDSystem.DataTable[self.TypeId] = self
|
|
end
|
|
|
|
return JieRiXueYuanData |