| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521 |
- local TrunWheeActivtylDataMgr = class("TrunWheeActivtylDataMgr",require("DataBase"))
- local TrunWheelData = require("SeasonTurnWheel/TrunWheelData")
- function TrunWheeActivtylDataMgr:ctor()
- self.tbPrizeInfoList = {}
- self.nNextStopIndex = 0 --停止位置
- self.nCurState = 1 --当前转盘状态
- self.tbLog = {}
- self.MaxLogNum = 20
- self.State =
- {
- ["ReadyTurn"] = 1, --刷新奖励 开始本轮
- ["StartTurn"] = 2, --转1次 转8次
- ["RunOnceTrun"] = 3, --转1次 结束本轮
- ["RunAllTrun"] = 4, --结束本轮
- ["FinishedTrun"] = 5, --结束本轮
- }
- self.ActivityItemId =
- {
- ["61Item"] = 220, --棒棒糖
- }
- self.CurActivityItem = self.ActivityItemId["61Item"]
- end
- function TrunWheeActivtylDataMgr:SetCurActivity(ActivityItem)
- if ActivityItem then
- self.activeitem = ActivityItem
- end
- end
- function TrunWheeActivtylDataMgr:Clear()
- self.refreshNum = 0
- end
- function TrunWheeActivtylDataMgr:RegisterNetEvents()
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ACTIVITY_WHEEL_REFRESH_ACK,self.OnRefreshAck, self)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ACTIVITY_WHEEL_OPEN_REWARD_ACK,self.OnOpenRewardAck, self)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ACTIVITY_WHEEL_REWARD_ACK,self.OnRewardAck, self)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ACTIVITY_WHEEL_CLOSE_REWARD_ACK,self.OnCloseRewardAck, self)
- end
- -------------------------------------sever
- --收到刷新道具
- function TrunWheeActivtylDataMgr:OnRefreshAck(data)
- --LogError("OnRefreshAck" .. Inspect(data))
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.TRUNWHELL_EVENT_REFRESH_ACK,data)
- end
- --收到本轮开始
- function TrunWheeActivtylDataMgr:OnOpenRewardAck(data)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.TRUNWHELL_EVENT_OPEN_REWARD_ACK,data)
- end
- --收到奖励
- function TrunWheeActivtylDataMgr:OnRewardAck(data)
- --LogError("OnRewardAck"..Inspect(data))
- if data.error == Enum.NetErrorCode.ERROR_OK then
- self:SetReceivePrizeInfo(data)
- end
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.TRUNWHELL_EVENT_REWARD_ACK,data)
- end
- --收到关闭本轮
- function TrunWheeActivtylDataMgr:OnCloseRewardAck(data)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.TRUNWHELL_EVENT_CLOSE_REWARD,data)
- end
- --------------------------------------------
- function TrunWheeActivtylDataMgr:UnRegisterNetEvents()
- --ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_CLIMBING_TOWER_INFO_ACK)
- end
- function TrunWheeActivtylDataMgr:GetData(nIndex)
- return self.tbPrizeInfoList[nIndex]
- end
- function TrunWheeActivtylDataMgr:GetAutoNextStopItem()
- local nStopIndex = self:GetNextStopItem() + 2;
- nStopIndex = (nStopIndex + 8) % 8
- if nStopIndex == 0 then
- nStopIndex = 8
- end
- return nStopIndex
- end
- function TrunWheeActivtylDataMgr:SetStopItem(nIndex)
- self.StopIndex = nIndex
- end
- function TrunWheeActivtylDataMgr:GetNextStopItem()
- return self.StopIndex
- end
- --设置获取到奖品
- function TrunWheeActivtylDataMgr:SetReceivePrizeInfo(Info)
- self.reward_list = Info.reward_list
- end
- --获取大奖下一个索引开始
- function TrunWheeActivtylDataMgr:GetBigPreizeNextIdx()
- for i=1, #self.reward_list do
- if self.reward_list[i].reward_type == 4 then
- local nStopIndex = i + 1
- nStopIndex = (nStopIndex + 8) % 8
- if nStopIndex == 0 then
- nStopIndex = 8
- end
- return nStopIndex
- end
- end
- end
- function TrunWheeActivtylDataMgr:ReceivePrizeInfo(nIndex)
- self.tbPrizeInfoList[nIndex].hasReceive = true
- end
- --是否全部领取完毕
- function TrunWheeActivtylDataMgr:IsReceiverOver()
- if self:GetReceivePrizeInfoCount() >= 8 then
- return true
- end
- return false
- end
- function TrunWheeActivtylDataMgr:SetState(strState)
- self.nCurState = self.State[strState]
- end
- function TrunWheeActivtylDataMgr:IsState(strState)
- return self.nCurState == self.State[strState]
- end
- function TrunWheeActivtylDataMgr:GetCurState()
- return self.nCurState
- end
- --获取本轮领奖次数
- function TrunWheeActivtylDataMgr:GetReceivePrizeInfoCount()
- --return self.wheel_num
- local nCount = 0
- for i=1, #self.tbPrizeInfoList do
- if self.tbPrizeInfoList[i].hasReceive then
- nCount = nCount +1
- end
- end
- return nCount
- end
- function TrunWheeActivtylDataMgr:GetRefreshCount()
- return self.refreshNum
- end
- function TrunWheeActivtylDataMgr:FindItemIdx(nIdx)
- for i=1,#self.tbPrizeInfoList do
- if self.tbPrizeInfoList[i].nIndex == nIdx then
- return i
- end
- end
- return 0
- end
- function TrunWheeActivtylDataMgr:OnResetState()
- if not self.IsOpen then
- self:SetState("ReadyTurn") --准备阶段
- else
- self:SetState("StartTurn") --开始阶段
- end
- end
- function TrunWheeActivtylDataMgr:GetLastWhellAngle()
- if not self.wheel_idx or self.wheel_idx <= 0 then
- return 0
- end
- local nIndex = self:FindItemIdx(self.wheel_idx)
- local Angle = 360 / 8 * (nIndex-1)
- return -Angle
- end
- function TrunWheeActivtylDataMgr:GetActiveItem()
- return self.activeitem
- end
- function TrunWheeActivtylDataMgr:OnDataChangeNtf(data)
- LogError("ChangeNtf"..Inspect(data))
- local wheeldata = data
- if data then
- if data.ntf_data then
- wheeldata = data.ntf_data
- end
- end
- if wheeldata then
- self.itemlist = wheeldata.wheel_reward_item_list --奖励物品
- self.IsOpen = wheeldata.wheel_open --是否开启本轮,false表示关闭
- self.refreshNum = wheeldata.wheel_refresh_num --每轮的第几次刷新
- self.templateidx = wheeldata.template_idx --模板id
- self.wheel_num = wheeldata.wheel_num --抽取次数
- self.wheel_idx = wheeldata.wheel_idx --指针停止位置
- --self:OnResetState()
- if self.itemlist then
- self.tbPrizeInfoList = {}
- for i = 1, #self.itemlist do
- local item = self.itemlist[i]
- if item then
- local TrunWheelInfo = TrunWheelData:new()
- TrunWheelInfo.nIndex = item.item_idx
- TrunWheelInfo.nItemId = item.item_id
- TrunWheelInfo.nItemNum = item.item_num
- TrunWheelInfo.bIsGrandPrize = item.reward_type == 4
- TrunWheelInfo.hasReceive = item.has_reward
- local itemCfgData = ManagerContainer.CfgMgr:GetItemById(TrunWheelInfo.nItemId)
- if not itemCfgData then
- LogError(tostring(TrunWheelInfo.nItemId) .. " 道具ID不存在")
- else
- TrunWheelInfo.strItemIcon = itemCfgData.Icon
- self.tbPrizeInfoList[#self.tbPrizeInfoList+1] = TrunWheelInfo
- end
- end
- end
- end
- end
- end
- function TrunWheeActivtylDataMgr:GetLogCount()
- return #self.tbLog
- end
- function TrunWheeActivtylDataMgr:GetLogData(nCount)
- if #self.tbLog > self.MaxLogNum then --保留最后最大条数
- local nDelCount = #self.tbLog - self.MaxLogNum
- for i = 1,nDelCount do
- table.remove(self.tbLog,1)
- end
- end
- local nIndex = (#self.tbLog + nCount) % #self.tbLog
- if nIndex == 0 then
- nIndex = #self.tbLog
- end
- return self.tbLog[nIndex]
- end
- function TrunWheeActivtylDataMgr:AddLogData(data)
- if nil == data.log_list then
- return
- end
- for i = 1, #data.log_list do
- local itemlist = data.log_list[i].item_list
- if itemlist then
- for j = 1, #itemlist do
- local itemCfgData = ManagerContainer.CfgMgr:GetItemById(itemlist[j].key)
- if not itemCfgData then
- LogError(tostring(itemlist[j].key) .. " 道具ID不存在")
- else
- local strName = data.log_list[i].nick_name
- local nickName = CommonUtil.GetVaildNickName(strName)
- local Info = string.formatbykey('PrizeWheelBroad', nickName,itemCfgData.Name.." x "..tostring(itemlist[j].value))
- self.tbLog[#self.tbLog+1] = Info
- end
- end
- end
- end
- end
- function TrunWheeActivtylDataMgr:SetLogData(data)
- self.tbLog = {}
- self:AddLogData(data)
- end
- --获取刷新所需金币
- function TrunWheeActivtylDataMgr:GetRefreshCostGold()
- local refreshNum = self:GetRefreshCount() + 1
- local CostGold = self:GetRefreshPrizeWheelGold(1,refreshNum)
- return CostGold
- end
- --金币是否可以刷新
- function TrunWheeActivtylDataMgr:IsRefreshCostGold()
- local refreshNum = self:GetRefreshCount() + 1
- local CostGold = self:GetRefreshPrizeWheelGold(1,refreshNum)
- local Goldcount = CommonUtil.GetOwnResCountByItemId(Enum.ItemType.Diamond)
- if Goldcount >= CostGold then
- return true
- end
- return false
- end
- --获取单次抽奖道具
- function TrunWheeActivtylDataMgr:GetUseItemTrun(Once)
- if self:IsReceiverOver() then
- return 0
- end
- local nWheelCount = self:GetReceivePrizeInfoCount()+1
- local CostGold = self:GetPrizeWheelItem(1,nWheelCount)
- if not Once then
- CostGold = self:GetAllPrizeWheelItem(1)
- end
- return CostGold
- end
- --活动是否到期
- function TrunWheeActivtylDataMgr:IsActivityOver()
- if self.activeitem and self.activeitem:LeftTime() > 0 then
- return false
- end
- return true
- end
- --活动ID
- function TrunWheeActivtylDataMgr:GetActiveId()
- if self.activeitem.actId then
- return self.activeitem.actId
- end
- return 0
- end
- --获取单次抽奖金币
- function TrunWheeActivtylDataMgr:GetUseGoldTrun(Once)
- if self:IsReceiverOver() then
- return 0
- end
- local nWheelCount = self:GetReceivePrizeInfoCount()+1
- local CostGold = self:GetPrizeWheelGold(1,nWheelCount) --单次消耗金币
- if not Once then
- CostGold = self:GetAllPrizeWheelGold(1)
- end
- return CostGold
- end
- --活动消耗道具ID
- function TrunWheeActivtylDataMgr:GetCostItemId()
- --目前只有61 活动
- return self.ActivityItemId["61Item"]
- end
- --是否可以用道具抽奖
- function TrunWheeActivtylDataMgr:IsCanUseItemTrun(Once)
- if self:IsReceiverOver() then
- return false
- end
- local nWheelCount = self:GetReceivePrizeInfoCount()+1
- local Goldcount = CommonUtil.GetOwnResCountByItemId(self:GetCostItemId())
- local CostGold = self:GetPrizeWheelItem(1,nWheelCount)
- if not Once then
- CostGold = self:GetAllPrizeWheelItem(1)
- end
- if tonumber(Goldcount) >= tonumber(CostGold) then
- return true
- end
- return false
- end
- --是否可以用金币抽奖
- function TrunWheeActivtylDataMgr:IsCanUseGoldTrun(Once)
- if self:IsReceiverOver() then
- return false
- end
- local nWheelCount = self:GetReceivePrizeInfoCount()+1
- local Goldcount = CommonUtil.GetOwnResCountByItemId(Enum.ItemType.Diamond)
- local CostGold = self:GetPrizeWheelGold(1,nWheelCount) --单次消耗金币
- if not Once then
- CostGold = self:GetAllPrizeWheelGold(1)
- end
- if tonumber(Goldcount) >= CostGold then
- return true
- end
- return false
- end
- --本轮剩余刷新次数
- function TrunWheeActivtylDataMgr:GetOverRefreshCount()
- local refreshNum = self:GetRefreshCount()
- local refreshAllNum = self:GetRefreshPrizeWheelGoldCount(1) --总刷新次数
- local CostNum = refreshAllNum - refreshNum
- if CostNum < 0 then
- CostNum = 0
- end
- return CostNum
- end
- --金币转钱
- function TrunWheeActivtylDataMgr:GoldToItem(goldNum)
- local ratio = self:GetChangeItemToGoldNum(1)
- return goldNum / ratio
- end
- --获取抽一次 差价金币
- function TrunWheeActivtylDataMgr:CalNeedGold()
- local Info = {}
- Info.CostItemNum = -1
- Info.CosGoldmNum = -1
- local ratio = self:GetChangeItemToGoldNum(1)
- if self:IsReceiverOver() then
- return Info
- end
- --当前道具
- local Itemcount = CommonUtil.GetOwnResCountByItemId(self:GetCostItemId())
- --当前需要花费道具
- local NeeddItem = self:GetUseItemTrun(true)
- --计算花费
- if Itemcount >= NeeddItem then
- Info.CostItemNum = NeeddItem
- Info.CosGoldmNum = 0
- return Info
- else--不足
- local costItem = NeeddItem - Itemcount
- local costgold = costItem * ratio
- Info.CostItemNum = Itemcount
- Info.CosGoldmNum = costgold
- return Info
- end
- end
- --获取抽多次 是否可以使用道具(多次 不转换 道具不足用金币)
- function TrunWheeActivtylDataMgr:CalNeedAllGold()
- local Info = {}
- Info.CostItemNum = -1
- Info.CosGoldmNum = -1
- local ratio = self:GetChangeItemToGoldNum(1)
- if self:IsReceiverOver() then --本轮结束
- return Info
- end
- --当前道具
- local Itemcount = CommonUtil.GetOwnResCountByItemId(self:GetCostItemId())
- --当前金币
- local Goldcount = CommonUtil.GetOwnResCountByItemId(Enum.ItemType.Diamond)
- --当前需要花费道具
- local NeeddItem = self:GetUseItemTrun(false)
- local NeddGold = self:GetUseGoldTrun(false)
- --计算花费
- if Itemcount >= NeeddItem then
- Info.CostItemNum = NeeddItem
- Info.CosGoldmNum = 0
- return Info
- else --不足
- Info.CostItemNum = 0
- Info.CosGoldmNum = NeddGold
- return Info
- end
- end
- --结束回合 剩余数
- function TrunWheeActivtylDataMgr:GetOverTrunCount()
- local nCount = self:GetReceivePrizeInfoCount()
- local MaxCount = self:GetMaxOverWheelCount(1)
- local costCount = MaxCount - nCount
- if costCount < 0 then
- costCount = 0
- end
- return costCount
- end
- --获取道具币名字
- function TrunWheeActivtylDataMgr:GetCostItemName()
- local nWheelCount = self:GetReceivePrizeInfoCount()+1
- local CostItemId = self:GetPrizeWheelItemGoldId(1,nWheelCount)
- local itemCfgData = ManagerContainer.CfgMgr:GetItemById(CostItemId)
- if itemCfgData then
- return itemCfgData.Name
- end
- return ""
- end
- ---------------转盘抽奖表------ID 数据都取第1行
- --抽奖单次消耗金币
- function TrunWheeActivtylDataMgr:GetPrizeWheelGold(id,nCount)
- local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
- return Cfg.RewardOneGold[nCount]
- end
- --抽奖单次消耗道具
- function TrunWheeActivtylDataMgr:GetPrizeWheelItem(id,nCount)
- local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
- if Cfg.RewardOneItem[nCount] then
- return Cfg.RewardOneItem[nCount][2]
- end
- end
- --抽奖全部消耗金币
- function TrunWheeActivtylDataMgr:GetAllPrizeWheelGold(id)
- local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
- return Cfg.RewardAdllGold
- end
- --抽奖全部消耗道具
- function TrunWheeActivtylDataMgr:GetAllPrizeWheelItem(id)
- local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
- return Cfg.RewardAllItem[1][2]
- end
- --获取道具币ID
- function TrunWheeActivtylDataMgr:GetPrizeWheelItemGoldId(id,nCount)
- local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
- return Cfg.RewardOneItem[nCount][1]
- end
- --刷新金币
- function TrunWheeActivtylDataMgr:GetRefreshPrizeWheelGold(id,nCount)
- local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
- return Cfg.RefreshPrice[nCount]
- end
- --刷新次数
- function TrunWheeActivtylDataMgr:GetRefreshPrizeWheelGoldCount(id)
- local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
- return #Cfg.RefreshPrice
- end
- --最大可结束本轮次数
- function TrunWheeActivtylDataMgr:GetMaxOverWheelCount(id)
- local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
- return Cfg.NoRewardNum
- end
- --金币转道具数量
- function TrunWheeActivtylDataMgr:GetChangeItemToGoldNum(id)
- local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
- return Cfg.ItemPrice
- end
- --背景图片
- function TrunWheeActivtylDataMgr:GetBgTitleImg(id)
- local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
- local ActivityneedleImg = Cfg.ActivityBG[1]
- local ActivityTitleImg = Cfg.ActivityBG[2]
- return ActivityneedleImg,ActivityTitleImg
- end
- --------------
- return TrunWheeActivtylDataMgr
|