miduo_client/Assets/ManagedResources/~Lua/Modules/Recruit/RecruitManager.lua

330 lines
13 KiB
Lua
Raw Normal View History

2021-04-20 13:58:00 +08:00
2020-05-09 13:31:21 +08:00
RecruitManager = {}
local this = RecruitManager
local lotterySetting = ConfigManager.GetConfig(ConfigName.LotterySetting)
local lotteryRewardConfig = ConfigManager.GetConfig(ConfigName.LotteryRewardConfig)
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
local dailyRewardConfig = ConfigManager.GetConfig(ConfigName.DialRewardConfig)
--活动抽卡类型(动态的数据)
local drawtType={
FindFairySingle=0,
FindFairyTen=0
}
2020-05-25 19:16:23 +08:00
this.freeUseTimeList={} --免费抽卡容器
2020-05-09 13:31:21 +08:00
function this.Initialize()
this.randCount = 0 --英雄抽卡已招募次数
this.isCanOpenBox = false
this.boxReward = {}
2020-05-25 19:16:23 +08:00
this.recruitFreeUseTime = 0 --现在只剩下秘盒招募在用了
this.isTenRecruit = 0 --首次十连
2020-05-09 13:31:21 +08:00
this.isFirstEnterElementScroll=true
this.isFirstEnterHeroScroll=true
this.InitPreData()
end
2020-05-25 19:16:23 +08:00
--请求抽卡 1抽卡类型 2回调 3特权id
function this.RecruitRequest(recruitType, func, privilegeId,_itemId,_itemNum)
local itemId = 0
local itemNum = 0
local freeTimesId = ConfigManager.GetConfigData(ConfigName.LotterySetting,RecruitType.LingShowSingle).FreeTimes
if privilegeId == freeTimesId then
itemId = _itemId
itemNum = _itemNum
else
local data=this.GetExpendData(recruitType)
itemId,itemNum=data[1],data[2] --默认
end
2020-06-28 17:48:49 +08:00
--Log("BagManager.GetItemCountById(itemId) ".. BagManager.GetItemCountById(itemId).." itemNum "..itemNum)
--Log(tostring(this.freeUseTimeList[privilegeId]))
if BagManager.GetItemCountById(itemId) >= itemNum or (this.freeUseTimeList[privilegeId] and this.freeUseTimeList[privilegeId] >= 1) then
2020-05-09 13:31:21 +08:00
NetManager.RecruitRequest(recruitType, function(msg)
2020-09-25 14:11:05 +08:00
local data = ConfigManager.GetConfigData(ConfigName.LotterySetting,recruitType)
if (RecruitType.Single == recruitType or RecruitType.NormalSingle==recruitType or (data.LotteryType == 3 and data.PerCount == 1) or(data.LotteryType == 9 and data.PerCount == 1) or
2020-12-23 10:34:47 +08:00
RecruitType.LingShowSingle== recruitType ) or (data.LotteryType == 10 and data.PerCount == 1) or (data.LotteryType == 11 and data.PerCount == 1)then --若某抽卡类型有免费次数
2020-05-25 19:16:23 +08:00
if this.freeUseTimeList[privilegeId] and this.freeUseTimeList[privilegeId] >= 1 then
PrivilegeManager.RefreshPrivilegeUsedTimes(privilegeId, 1)
this.freeUseTimeList[privilegeId] = PrivilegeManager.GetPrivilegeRemainValue(privilegeId)
2020-05-09 13:31:21 +08:00
CheckRedPointStatus(RedPointType.Recruit_Red)
2020-05-25 19:16:23 +08:00
CheckRedPointStatus(RedPointType.Recruit_Normal)
CheckRedPointStatus(RedPointType.TimeLimited)
2020-07-16 09:02:59 +08:00
CheckRedPointStatus(RedPointType.QianKunBox)
CheckRedPointStatus(RedPointType.Pokemon_Recruit)
2020-05-09 13:31:21 +08:00
end
2020-06-03 19:09:01 +08:00
end
2020-05-09 13:31:21 +08:00
if func then
func(msg)
end
end)
end
end
2020-05-25 19:16:23 +08:00
--5点刷新数据
2020-05-09 13:31:21 +08:00
function this.RefreshFreeTime()
2020-05-25 19:16:23 +08:00
this.freeUseTimeList[38] = PrivilegeManager.GetPrivilegeRemainValue(38)
this.freeUseTimeList[14] = PrivilegeManager.GetPrivilegeRemainValue(14)
2020-06-28 17:48:49 +08:00
this.freeUseTimeList[32] = PrivilegeManager.GetPrivilegeRemainValue(32)
2020-07-17 18:04:37 +08:00
this.freeUseTimeList[99] = PrivilegeManager.GetPrivilegeRemainValue(99)
this.freeUseTimeList[2005] = PrivilegeManager.GetPrivilegeRemainValue(2005)
2020-05-09 13:31:21 +08:00
if (ActTimeCtrlManager.SingleFuncState(1)) then
CheckRedPointStatus(RedPointType.Recruit_Red)
2020-05-25 19:16:23 +08:00
CheckRedPointStatus(RedPointType.Recruit_Normal)
CheckRedPointStatus(RedPointType.TimeLimited)
2020-07-16 09:02:59 +08:00
CheckRedPointStatus(RedPointType.QianKunBox)
2020-05-09 13:31:21 +08:00
end
Game.GlobalEvent:DispatchEvent(GameEvent.Recruit.OnRecruitRefreshData)
end
--刷新招募红点
function this.CheckRecuritRedPoint()
2020-08-15 23:46:17 +08:00
if (PrivilegeManager.GetPrivilegeRemainValue(14) >= 1) then--this.freeUseTimeList[14])
2020-05-25 19:16:23 +08:00
return true
else
return false
end
end
2020-06-28 17:48:49 +08:00
2020-05-25 19:16:23 +08:00
--刷新普通招募红点
function this.CheckRecuritNormalPoint()
2020-08-15 23:46:17 +08:00
if (PrivilegeManager.GetPrivilegeRemainValue(38) >= 1) then--this.freeUseTimeList[38]
2020-05-09 13:31:21 +08:00
return true
else
return false
end
end
function this.InitPreData()
this.previewHeroData = {}
2020-05-25 19:16:23 +08:00
this.previewFriendData={}
this.previewNormalData={}
2020-05-09 13:31:21 +08:00
this.previewElementData={}
this.previewLuckData = {} --- 幸运探宝
this.previewLingShou={} --灵兽奖励数据
this.previewGhostFindData = {}
2020-12-23 10:34:47 +08:00
-- this.previewTimeLimitedData = {}--限时招募
-- this.previewTimeLimitedUPData={}
-- this.previewLotterySoulData = {}--乾坤宝囊其他奖励
-- this.previewLotterySoulUPData={}--乾坤宝囊魂印up保底
2020-05-09 13:31:21 +08:00
if(#this.previewHeroData>=1) then
return
end
for i, v in ConfigPairs(lotteryRewardConfig) do
2020-05-25 19:16:23 +08:00
if(v.Pool==1) then--钻石招募
2020-05-09 13:31:21 +08:00
table.insert(this.previewHeroData, v)
2020-09-25 14:11:05 +08:00
elseif v.Pool==2 then--友情
2020-05-25 19:16:23 +08:00
table.insert(this.previewFriendData,v)
2020-09-25 14:11:05 +08:00
elseif v.Pool==3 then --普抽
2020-05-25 19:16:23 +08:00
table.insert(this.previewNormalData,v)
2020-09-25 14:11:05 +08:00
elseif(v.Pool==11 or v.Pool==12 or v.Pool==13 or v.Pool==14) then-- or v.Pool==15 光暗被移除
2020-05-09 13:31:21 +08:00
table.insert(this.previewElementData, v)
elseif v.Pool==5001 then
table.insert(this.previewLingShou,v)
2020-09-25 14:11:05 +08:00
end
2020-05-09 13:31:21 +08:00
end
for key, value in ConfigPairs(dailyRewardConfig) do
if value.ActivityId == 30 then
table.insert( this.previewLuckData, value)
else
table.insert( this.previewGhostFindData, value)
end
2020-05-09 13:31:21 +08:00
end
2020-05-09 13:31:21 +08:00
if #this.previewLuckData > 1 then
table.sort(this.previewLuckData, function(a, b)
return a.Rank < b.Rank
end)
end
if #this.previewGhostFindData > 1 then
table.sort(this.previewGhostFindData, function(a, b)
return a.Rank < b.Rank
2020-05-09 13:31:21 +08:00
end)
end
--灵兽奖品排序
if #this.previewLingShou > 1 then
table.sort(this.previewLingShou, function(a, b)
--判断品质
if itemConfig[a.Reward[1]].Quantity == itemConfig[b.Reward[1]].Quantity then
--判断类型
if itemConfig[a.Reward[1]].ItemType==itemConfig[b.Reward[1]].ItemType then
--判断id
if a.Reward[1] == b.Reward[1] then
return a.Reward[2] < b.Reward[2]
else
return a.Reward[1] < b.Reward[1]
end
else
return itemConfig[a.Reward[1]].ItemType<itemConfig[b.Reward[1]].ItemType
end
else
return itemConfig[a.Reward[1]].Quantity > itemConfig[b.Reward[1]].Quantity
end
end)
end
2020-05-09 13:31:21 +08:00
table.sort(this.previewHeroData, function(a, b)
if itemConfig[a.Reward[1]].HeroStar[2] == itemConfig[b.Reward[1]].HeroStar[2] then
if a.Quality == b.Quality then
return a.Id < b.Id
else
return a.Quality > b.Quality
end
else
return itemConfig[a.Reward[1]].HeroStar[2]>itemConfig[b.Reward[1]].HeroStar[2]
end
end)
2020-05-25 19:16:23 +08:00
--友情
table.sort(this.previewFriendData, function(a, b)
if itemConfig[a.Reward[1]].HeroStar[2] == itemConfig[b.Reward[1]].HeroStar[2] then
if a.Quality == b.Quality then
return a.Id < b.Id
else
return a.Quality > b.Quality
end
else
return itemConfig[a.Reward[1]].HeroStar[2]>itemConfig[b.Reward[1]].HeroStar[2]
end
end)
--普抽
table.sort(this.previewNormalData, function(a, b)
if itemConfig[a.Reward[1]].HeroStar[2] == itemConfig[b.Reward[1]].HeroStar[2] then
if a.Quality == b.Quality then
return a.Id < b.Id
else
return a.Quality > b.Quality
end
else
return itemConfig[a.Reward[1]].HeroStar[2]>itemConfig[b.Reward[1]].HeroStar[2]
end
end)
--元素
2020-12-23 10:34:47 +08:00
LogPink("#this.previewElementData:"..#this.previewElementData)
2020-05-09 13:31:21 +08:00
table.sort(this.previewElementData, function(a, b)
if (itemConfig[a.Reward[1]].Quantity == itemConfig[b.Reward[1]].Quantity) then
if (a.Quality == b.Quality) then
return a.Id > b.Id
else
return a.Quality > b.Quality
end
else
return itemConfig[a.Reward[1]].Quantity > itemConfig[b.Reward[1]].Quantity
end
end)
end
--获取抽卡奖励预览数据
function this.GetRewardPreviewData(type)
2020-12-23 10:34:47 +08:00
if type == PRE_REWARD_POOL_TYPE.RECRUIT then--常驻
2020-05-25 19:16:23 +08:00
return this.previewHeroData
2020-12-23 10:34:47 +08:00
elseif type == PRE_REWARD_POOL_TYPE.ELEMENT_RECRUIT then--常驻
2020-05-25 19:16:23 +08:00
return this.previewElementData
2020-12-23 10:34:47 +08:00
elseif type == PRE_REWARD_POOL_TYPE.LUCK_FIND then--常驻
2020-05-25 19:16:23 +08:00
return this.previewLuckData
elseif type == PRE_REWARD_POOL_TYPE.UPPER_LUCK_FIND then--常驻
return this.previewGhostFindData
2020-12-23 10:34:47 +08:00
elseif type ==PRE_REWARD_POOL_TYPE.FRIEND then--常驻
2020-05-25 19:16:23 +08:00
return this.previewFriendData
2020-12-23 10:34:47 +08:00
elseif type==PRE_REWARD_POOL_TYPE.NORMAL then--常驻
2020-05-25 19:16:23 +08:00
return this.previewNormalData
2020-12-23 10:34:47 +08:00
elseif type==PRE_REWARD_POOL_TYPE.LING_SHOU then--常驻
return this.previewLingShou
elseif type==PRE_REWARD_POOL_TYPE.TIME_LIMITED--限时招募--开启时间有限制的
or type==PRE_REWARD_POOL_TYPE.TIME_LIMITED_UP--限时招募UP
or type==PRE_REWARD_POOL_TYPE.LOTTERY_SOUL--乾坤宝盒
or type==PRE_REWARD_POOL_TYPE.LOTTERY_SOUL_UP--乾坤宝盒UP
or type==PRE_REWARD_POOL_TYPE.LING_SHOU_UP--灵兽宝阁UP
or type==PRE_REWARD_POOL_TYPE.XIANG_YAO_UP then--降妖夺宝UP
return this.GetActivityPreviewData(type)--非常驻抽卡需要检测时间
2021-05-10 20:20:20 +08:00
else
return {}
2020-05-25 19:16:23 +08:00
end
end
2020-12-23 10:34:47 +08:00
function this.GetActivityPreviewData(type)--非常驻抽卡奖池预览
2020-09-25 14:11:05 +08:00
local previewData = {}
-- 根据当前期获取卡池信息
local curActivityId = nil
if type==PRE_REWARD_POOL_TYPE.TIME_LIMITED
or type==PRE_REWARD_POOL_TYPE.TIME_LIMITED_UP then
curActivityId = ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.FindFairy)
2020-12-23 10:34:47 +08:00
elseif type==PRE_REWARD_POOL_TYPE.LOTTERY_SOUL
2020-09-25 14:11:05 +08:00
or type==PRE_REWARD_POOL_TYPE.LOTTERY_SOUL_UP then
curActivityId = ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.QianKunBox)
elseif type==PRE_REWARD_POOL_TYPE.LING_SHOU_UP then
curActivityId = ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.LingShouBaoGe)
2020-12-23 10:34:47 +08:00
elseif type==PRE_REWARD_POOL_TYPE.XIANG_YAO_UP then
curActivityId = ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.XiangYaoDuoBao)
2020-09-25 14:11:05 +08:00
end
local data = nil
if curActivityId ~= nil then --活动招募
--LogGreen("curActivityId:"..curActivityId)
data = ConfigManager.GetConfigDataByDoubleKey(ConfigName.LotterySetting,"ActivityId",curActivityId,"PerCount",1)
else
LogRed("活动没开,你不应该看到这儿"..curActivityId)
end
local poolId = nil
if data ~= nil then
2020-12-23 10:34:47 +08:00
if type == PRE_REWARD_POOL_TYPE.TIME_LIMITED or type == PRE_REWARD_POOL_TYPE.LOTTERY_SOUL then--限时招募,乾坤宝盒
2020-09-25 14:11:05 +08:00
poolId = data.DiamondBoxContain[1][1]
2020-12-23 10:34:47 +08:00
elseif type == PRE_REWARD_POOL_TYPE.TIME_LIMITED_UP or type == PRE_REWARD_POOL_TYPE.LOTTERY_SOUL_UP then--限时招募UP乾坤宝盒UP
2020-09-25 14:11:05 +08:00
data = ConfigManager.GetConfigDataByKey(ConfigName.LotterySpecialConfig,"Type",data.MergePool)
poolId = data.pool_id
2020-12-23 10:34:47 +08:00
elseif type == PRE_REWARD_POOL_TYPE.LING_SHOU_UP or type == PRE_REWARD_POOL_TYPE.XIANG_YAO_UP then--灵兽宝阁,降妖夺宝
poolId = data.DiamondBoxContain[1][1]
2020-09-25 14:11:05 +08:00
end
else
LogRed("lotterySetting表里没有这个活动:"..curActivityId)
end
for i, v in ConfigPairs(lotteryRewardConfig) do
if(v.Pool == poolId) then
table.insert(previewData, v)
end
end
table.sort(previewData, function(a, b)
if itemConfig[a.Reward[1]].Quantity == itemConfig[b.Reward[1]].Quantity then
return a.Weight > b.Weight
else
return itemConfig[a.Reward[1]].Quantity > itemConfig[b.Reward[1]].Quantity
end
end)
return previewData
end
2020-05-25 19:16:23 +08:00
--获取英雄星级数据的最大长度(动态) type 数据类型 star 星级
function this.GetHeroMaxLengthByStar_Dynamic(type,star)
local d={}
for i, v in ipairs(this.GetRewardPreviewData(type)) do
if itemConfig[v.Reward[1]].HeroStar[2]==star then
table.insert(d,v)
end
end
return #d
end
--获取抽卡消耗数据
--根据数据长度遍历;若前者不足 返回后者数据;若都不足 返回最后那组数据;若前者足 显示前者
function this.GetExpendData(type)
local d
local k=0
for i, v in ipairs(lotterySetting[type].CostItem) do
if BagManager.GetItemCountById(v[1])>=v[2] then
d=v
break
else
k=k+1
end
end
local l=#lotterySetting[type].CostItem
if k==l then
return lotterySetting[type].CostItem[l]
2020-05-09 13:31:21 +08:00
end
2020-05-25 19:16:23 +08:00
return d
2020-05-09 13:31:21 +08:00
end
2020-06-23 18:36:24 +08:00
return this