305 lines
8.8 KiB
Lua
305 lines
8.8 KiB
Lua
local SummonData = class("SummonData", BaseData)
|
|
local DEFAULT_FACTOR = GConst.BattleConst.DEFAULT_FACTOR
|
|
|
|
local SummonCfg = ConfigManager:getConfig("summon")
|
|
|
|
function SummonData:ctor()
|
|
self:clear()
|
|
end
|
|
|
|
function SummonData:clear()
|
|
self.summonDataMap = nil
|
|
self.data.isDirty = false
|
|
DataManager:unregisterCrossDayFunc("SummonData")
|
|
end
|
|
|
|
function SummonData:setDirty()
|
|
self.data.isDirty = not self.data.isDirty
|
|
end
|
|
|
|
function SummonData:init(data)
|
|
data = data or {}
|
|
if EDITOR_MODE then
|
|
Logger.logHighlight("抽奖数据")
|
|
Logger.printTable(data)
|
|
end
|
|
self:initData(data)
|
|
self:setDirty()
|
|
if not self.isInit then
|
|
self.isInit = true
|
|
-- 跨天
|
|
-- DataManager:registerCrossDayFunc("SummonData", function()
|
|
-- self:setDirty()
|
|
-- end)
|
|
end
|
|
end
|
|
|
|
function SummonData:initData(data)
|
|
self.summonDataMap = {}
|
|
for i = 1, 2 do
|
|
self.summonDataMap[i] = {}
|
|
if data[i] then
|
|
self.summonDataMap[i].freeCount = data[i].free_count
|
|
self.summonDataMap[i].adCount = data[i].ad_count
|
|
self.summonDataMap[i].statCount = data[i].stat_count
|
|
self.summonDataMap[i].triggerCount = data[i].trigger_count
|
|
self.summonDataMap[i].wishId = data[i].wish_id
|
|
self.summonDataMap[i].wishCount = data[i].wish_count
|
|
else
|
|
self.summonDataMap[i].freeCount = 0
|
|
self.summonDataMap[i].adCount = 0
|
|
self.summonDataMap[i].statCount = 0
|
|
self.summonDataMap[i].triggerCount = 0
|
|
self.summonDataMap[i].wishId = 0
|
|
self.summonDataMap[i].wishCount = 0
|
|
end
|
|
end
|
|
-- int64 free_count = 1; // 今日免费次数
|
|
-- int64 ad_count = 2; // 今日广告免费次数
|
|
-- int64 stat_count = 3; // 总抽取次数
|
|
-- int64 trigger_count = 4; // 保底累计次数
|
|
-- int32 wish_id = 5; // 心愿英雄 ID
|
|
-- int64 wish_count = 6; // 心愿累计次数
|
|
end
|
|
|
|
function SummonData:getIsOpen(showToast)
|
|
if not ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.SUMMON_FORCE, not showToast) then
|
|
return false
|
|
end
|
|
return true
|
|
end
|
|
|
|
--@region 抽奖数据
|
|
--是否有免费抽奖
|
|
function SummonData:hasSummonFree(summonType)
|
|
local freeCount = self:getSummonFreeCount(summonType)
|
|
if freeCount > 0 then
|
|
return true
|
|
end
|
|
local adCount = self:getSummonAdCount(summonType)
|
|
if adCount > 0 then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
-- 心愿次数
|
|
function SummonData:getSummonWishCount(summonType)
|
|
if self.summonDataMap[summonType] then
|
|
return self.summonDataMap[summonType].wishCount or 0
|
|
end
|
|
return 0
|
|
end
|
|
|
|
-- 获取心愿英雄id
|
|
function SummonData:getSummonWishHeroId(summonType)
|
|
if self.summonDataMap[summonType] then
|
|
return self.summonDataMap[summonType].wishId
|
|
end
|
|
return 0
|
|
end
|
|
|
|
-- 获取免费抽取次数
|
|
function SummonData:getSummonFreeCount(summonType)
|
|
local freeCount = self:getSummonFreeNum(summonType)
|
|
local useCount = 0
|
|
if self.summonDataMap[summonType] then
|
|
useCount = self.summonDataMap[summonType].freeCount or 0
|
|
end
|
|
return freeCount - useCount
|
|
end
|
|
|
|
-- 获取免费广告抽取次数
|
|
function SummonData:getSummonAdCount(summonType)
|
|
local freeCount = self:getSummonAdNum(summonType)
|
|
local useCount = 0
|
|
if self.summonDataMap[summonType] then
|
|
useCount = self.summonDataMap[summonType].adCount or 0
|
|
end
|
|
return freeCount - useCount
|
|
end
|
|
|
|
-- 保底累计次数
|
|
function SummonData:getSummonTriggerCount(summonType)
|
|
if self.summonDataMap[summonType] then
|
|
return self.summonDataMap[summonType].triggerCount or 0
|
|
end
|
|
return 0
|
|
end
|
|
|
|
-- 获取抽奖总次数
|
|
function SummonData:getSummonCount(summonType)
|
|
if self.summonDataMap[summonType] then
|
|
return self.summonDataMap[summonType].statCount or 0
|
|
end
|
|
return 0
|
|
end
|
|
|
|
-- 重新设置英雄成功过
|
|
function SummonData:updateSummonWishHeroId(summonType, id)
|
|
if self.summonDataMap[summonType] then
|
|
if self.summonDataMap[summonType].wishId == id then
|
|
self.summonDataMap[summonType].wishId = nil
|
|
else
|
|
self.summonDataMap[summonType].wishId = id
|
|
end
|
|
self:setDirty()
|
|
end
|
|
end
|
|
|
|
function SummonData:summonWishClaim(summonType)
|
|
if self.summonDataMap[summonType] then
|
|
self.summonDataMap[summonType].wishCount = self.summonDataMap[summonType].wishCount - 100
|
|
self:setDirty()
|
|
end
|
|
end
|
|
|
|
-- 刷新抽奖次数
|
|
function SummonData:updateSummonCount(summonType, times, free)
|
|
if self.summonDataMap[summonType] then
|
|
local unlockTimes = self:getSummonWishUnlock(summonType)
|
|
if unlockTimes and self.summonDataMap[summonType].statCount + times >= unlockTimes then
|
|
if self.summonDataMap[summonType].statCount < unlockTimes then
|
|
self.summonDataMap[summonType].wishCount = self.summonDataMap[summonType].wishCount + times -
|
|
(unlockTimes - self.summonDataMap[summonType].statCount)
|
|
else
|
|
self.summonDataMap[summonType].wishCount = self.summonDataMap[summonType].wishCount + times
|
|
end
|
|
end
|
|
self.summonDataMap[summonType].statCount = self.summonDataMap[summonType].statCount + times
|
|
if free and free == 1 then
|
|
self.summonDataMap[summonType].adCount = self.summonDataMap[summonType].adCount + 1
|
|
elseif free and free == 2 then
|
|
self.summonDataMap[summonType].freeCount = self.summonDataMap[summonType].freeCount + 1
|
|
end
|
|
end
|
|
self:setDirty()
|
|
end
|
|
|
|
function SummonData:setSummonTrigger(summonType, isReset)
|
|
if isReset then
|
|
self.summonDataMap[summonType].triggerCount = 0
|
|
else
|
|
self.summonDataMap[summonType].triggerCount = self.summonDataMap[summonType].triggerCount + 1
|
|
local max = SummonCfg[summonType].guarantee1
|
|
if self.summonDataMap[summonType].triggerCount >= max then
|
|
self.summonDataMap[summonType].triggerCount = self.summonDataMap[summonType].triggerCount - max
|
|
end
|
|
end
|
|
end
|
|
--@endregion
|
|
|
|
--@region 红点
|
|
function SummonData:hasSummonCostRedPoint()
|
|
return self:hasSummonFree(1) or self:hasSummonFree(2) or self:hasSummonCost1() or self:hasSummonCost2()
|
|
end
|
|
|
|
function SummonData:hasSummonCost1()
|
|
return DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_SUMMON_1) > 0
|
|
end
|
|
|
|
function SummonData:hasSummonCost2()
|
|
return DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_SUMMON_2) > 0
|
|
end
|
|
--@endregion
|
|
|
|
--@region 获取消耗
|
|
-- 获取当前所需的抽卡消耗
|
|
function SummonData:getSummonCosts(summonType, count)
|
|
local costs = {}
|
|
local costItem = self:getSummonItemCost(summonType)
|
|
local costItemId = costItem.id
|
|
local costItemNum = costItem.num -- 单抽消耗道具数量
|
|
local costItemHas = DataManager.BagData.ItemData:getItemNumById(costItemId) --拥有的道具数量
|
|
local costGem = self:getSummonGemCost(summonType)
|
|
-- if self:getIsActivity() then
|
|
-- table.insert(costs, {type = GConst.REWARD_TYPE.ITEM, id = costItemId, num = costItemNum * count })
|
|
-- else
|
|
if costItemHas < costItemNum then -- 道具不足以单抽 全用宝石
|
|
if not costGem then
|
|
table.insert(costs, {type = GConst.REWARD_TYPE.ITEM, id = costItemId, num = costItemNum * count})
|
|
else
|
|
local costGemId = costGem.id
|
|
local costGemNum = costGem.num
|
|
table.insert(costs, {type = GConst.REWARD_TYPE.ITEM, id = costGemId, num = costGemNum * count})
|
|
end
|
|
elseif costItemHas < costItemNum * count then -- 有道具但是不足 道具和宝石混合
|
|
--道具
|
|
local meetCount = math.floor(costItemHas / costItemNum)
|
|
table.insert(costs, {type = GConst.REWARD_TYPE.ITEM, id = costItemId, num = meetCount * costItemNum})
|
|
if costGem then
|
|
--钻石
|
|
local costGemId = costGem.id
|
|
local costGemNum = costGem.num
|
|
local diffNum = count - meetCount
|
|
table.insert(costs, {type = GConst.REWARD_TYPE.ITEM, id = costGemId, num = costGemNum * diffNum})
|
|
end
|
|
else -- 道具满足
|
|
table.insert(costs, {type = GConst.REWARD_TYPE.ITEM, id = costItemId, num = costItemNum * count})
|
|
end
|
|
-- end
|
|
return costs
|
|
end
|
|
--@endregion
|
|
|
|
--@region 配置
|
|
function SummonData:getSummonConfig(id)
|
|
if id then
|
|
return SummonCfg[id]
|
|
else
|
|
return SummonCfg
|
|
end
|
|
end
|
|
|
|
----- 获取概率
|
|
function SummonData:getSummonShow(summonType)
|
|
return SummonCfg[summonType].show
|
|
end
|
|
|
|
-- 获取单抽消耗
|
|
function SummonData:getSummonItemCost(summonType)
|
|
return SummonCfg[summonType].item_cost
|
|
end
|
|
|
|
-- 获取单抽钻石消耗
|
|
function SummonData:getSummonGemCost(summonType)
|
|
return SummonCfg[summonType].cost
|
|
end
|
|
|
|
function SummonData:getSummonWishUnlock(summonType)
|
|
return SummonCfg[summonType].guarantee3
|
|
end
|
|
|
|
-- 心愿英雄列表
|
|
function SummonData:getSummonWishConfig(summonType)
|
|
return SummonCfg[summonType].love
|
|
end
|
|
|
|
-- 心愿保底次数
|
|
function SummonData:getSummonWishGuarantee2(summonType)
|
|
return SummonCfg[summonType].guarantee2
|
|
end
|
|
|
|
-- 小保底次数
|
|
function SummonData:getSummonWishGuarantee1(summonType)
|
|
return SummonCfg[summonType].guarantee1
|
|
end
|
|
|
|
function SummonData:getSummonFreeCd(summonType)
|
|
return SummonCfg[summonType].ad_time
|
|
end
|
|
|
|
function SummonData:getSummonWeight(summonType)
|
|
return SummonCfg[summonType].summon
|
|
end
|
|
|
|
function SummonData:getSummonAdNum(summonType)
|
|
return SummonCfg[summonType].ad_num
|
|
end
|
|
|
|
function SummonData:getSummonFreeNum(summonType)
|
|
return SummonCfg[summonType].free_num
|
|
end
|
|
--@endregion
|
|
|
|
return SummonData |