TrunWheeActivtylDataMgr.lua 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521
  1. local TrunWheeActivtylDataMgr = class("TrunWheeActivtylDataMgr",require("DataBase"))
  2. local TrunWheelData = require("SeasonTurnWheel/TrunWheelData")
  3. function TrunWheeActivtylDataMgr:ctor()
  4. self.tbPrizeInfoList = {}
  5. self.nNextStopIndex = 0 --停止位置
  6. self.nCurState = 1 --当前转盘状态
  7. self.tbLog = {}
  8. self.MaxLogNum = 20
  9. self.State =
  10. {
  11. ["ReadyTurn"] = 1, --刷新奖励 开始本轮
  12. ["StartTurn"] = 2, --转1次 转8次
  13. ["RunOnceTrun"] = 3, --转1次 结束本轮
  14. ["RunAllTrun"] = 4, --结束本轮
  15. ["FinishedTrun"] = 5, --结束本轮
  16. }
  17. self.ActivityItemId =
  18. {
  19. ["61Item"] = 220, --棒棒糖
  20. }
  21. self.CurActivityItem = self.ActivityItemId["61Item"]
  22. end
  23. function TrunWheeActivtylDataMgr:SetCurActivity(ActivityItem)
  24. if ActivityItem then
  25. self.activeitem = ActivityItem
  26. end
  27. end
  28. function TrunWheeActivtylDataMgr:Clear()
  29. self.refreshNum = 0
  30. end
  31. function TrunWheeActivtylDataMgr:RegisterNetEvents()
  32. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ACTIVITY_WHEEL_REFRESH_ACK,self.OnRefreshAck, self)
  33. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ACTIVITY_WHEEL_OPEN_REWARD_ACK,self.OnOpenRewardAck, self)
  34. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ACTIVITY_WHEEL_REWARD_ACK,self.OnRewardAck, self)
  35. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ACTIVITY_WHEEL_CLOSE_REWARD_ACK,self.OnCloseRewardAck, self)
  36. end
  37. -------------------------------------sever
  38. --收到刷新道具
  39. function TrunWheeActivtylDataMgr:OnRefreshAck(data)
  40. --LogError("OnRefreshAck" .. Inspect(data))
  41. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.TRUNWHELL_EVENT_REFRESH_ACK,data)
  42. end
  43. --收到本轮开始
  44. function TrunWheeActivtylDataMgr:OnOpenRewardAck(data)
  45. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.TRUNWHELL_EVENT_OPEN_REWARD_ACK,data)
  46. end
  47. --收到奖励
  48. function TrunWheeActivtylDataMgr:OnRewardAck(data)
  49. --LogError("OnRewardAck"..Inspect(data))
  50. if data.error == Enum.NetErrorCode.ERROR_OK then
  51. self:SetReceivePrizeInfo(data)
  52. end
  53. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.TRUNWHELL_EVENT_REWARD_ACK,data)
  54. end
  55. --收到关闭本轮
  56. function TrunWheeActivtylDataMgr:OnCloseRewardAck(data)
  57. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.TRUNWHELL_EVENT_CLOSE_REWARD,data)
  58. end
  59. --------------------------------------------
  60. function TrunWheeActivtylDataMgr:UnRegisterNetEvents()
  61. --ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_CLIMBING_TOWER_INFO_ACK)
  62. end
  63. function TrunWheeActivtylDataMgr:GetData(nIndex)
  64. return self.tbPrizeInfoList[nIndex]
  65. end
  66. function TrunWheeActivtylDataMgr:GetAutoNextStopItem()
  67. local nStopIndex = self:GetNextStopItem() + 2;
  68. nStopIndex = (nStopIndex + 8) % 8
  69. if nStopIndex == 0 then
  70. nStopIndex = 8
  71. end
  72. return nStopIndex
  73. end
  74. function TrunWheeActivtylDataMgr:SetStopItem(nIndex)
  75. self.StopIndex = nIndex
  76. end
  77. function TrunWheeActivtylDataMgr:GetNextStopItem()
  78. return self.StopIndex
  79. end
  80. --设置获取到奖品
  81. function TrunWheeActivtylDataMgr:SetReceivePrizeInfo(Info)
  82. self.reward_list = Info.reward_list
  83. end
  84. --获取大奖下一个索引开始
  85. function TrunWheeActivtylDataMgr:GetBigPreizeNextIdx()
  86. for i=1, #self.reward_list do
  87. if self.reward_list[i].reward_type == 4 then
  88. local nStopIndex = i + 1
  89. nStopIndex = (nStopIndex + 8) % 8
  90. if nStopIndex == 0 then
  91. nStopIndex = 8
  92. end
  93. return nStopIndex
  94. end
  95. end
  96. end
  97. function TrunWheeActivtylDataMgr:ReceivePrizeInfo(nIndex)
  98. self.tbPrizeInfoList[nIndex].hasReceive = true
  99. end
  100. --是否全部领取完毕
  101. function TrunWheeActivtylDataMgr:IsReceiverOver()
  102. if self:GetReceivePrizeInfoCount() >= 8 then
  103. return true
  104. end
  105. return false
  106. end
  107. function TrunWheeActivtylDataMgr:SetState(strState)
  108. self.nCurState = self.State[strState]
  109. end
  110. function TrunWheeActivtylDataMgr:IsState(strState)
  111. return self.nCurState == self.State[strState]
  112. end
  113. function TrunWheeActivtylDataMgr:GetCurState()
  114. return self.nCurState
  115. end
  116. --获取本轮领奖次数
  117. function TrunWheeActivtylDataMgr:GetReceivePrizeInfoCount()
  118. --return self.wheel_num
  119. local nCount = 0
  120. for i=1, #self.tbPrizeInfoList do
  121. if self.tbPrizeInfoList[i].hasReceive then
  122. nCount = nCount +1
  123. end
  124. end
  125. return nCount
  126. end
  127. function TrunWheeActivtylDataMgr:GetRefreshCount()
  128. return self.refreshNum
  129. end
  130. function TrunWheeActivtylDataMgr:FindItemIdx(nIdx)
  131. for i=1,#self.tbPrizeInfoList do
  132. if self.tbPrizeInfoList[i].nIndex == nIdx then
  133. return i
  134. end
  135. end
  136. return 0
  137. end
  138. function TrunWheeActivtylDataMgr:OnResetState()
  139. if not self.IsOpen then
  140. self:SetState("ReadyTurn") --准备阶段
  141. else
  142. self:SetState("StartTurn") --开始阶段
  143. end
  144. end
  145. function TrunWheeActivtylDataMgr:GetLastWhellAngle()
  146. if not self.wheel_idx or self.wheel_idx <= 0 then
  147. return 0
  148. end
  149. local nIndex = self:FindItemIdx(self.wheel_idx)
  150. local Angle = 360 / 8 * (nIndex-1)
  151. return -Angle
  152. end
  153. function TrunWheeActivtylDataMgr:GetActiveItem()
  154. return self.activeitem
  155. end
  156. function TrunWheeActivtylDataMgr:OnDataChangeNtf(data)
  157. LogError("ChangeNtf"..Inspect(data))
  158. local wheeldata = data
  159. if data then
  160. if data.ntf_data then
  161. wheeldata = data.ntf_data
  162. end
  163. end
  164. if wheeldata then
  165. self.itemlist = wheeldata.wheel_reward_item_list --奖励物品
  166. self.IsOpen = wheeldata.wheel_open --是否开启本轮,false表示关闭
  167. self.refreshNum = wheeldata.wheel_refresh_num --每轮的第几次刷新
  168. self.templateidx = wheeldata.template_idx --模板id
  169. self.wheel_num = wheeldata.wheel_num --抽取次数
  170. self.wheel_idx = wheeldata.wheel_idx --指针停止位置
  171. --self:OnResetState()
  172. if self.itemlist then
  173. self.tbPrizeInfoList = {}
  174. for i = 1, #self.itemlist do
  175. local item = self.itemlist[i]
  176. if item then
  177. local TrunWheelInfo = TrunWheelData:new()
  178. TrunWheelInfo.nIndex = item.item_idx
  179. TrunWheelInfo.nItemId = item.item_id
  180. TrunWheelInfo.nItemNum = item.item_num
  181. TrunWheelInfo.bIsGrandPrize = item.reward_type == 4
  182. TrunWheelInfo.hasReceive = item.has_reward
  183. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(TrunWheelInfo.nItemId)
  184. if not itemCfgData then
  185. LogError(tostring(TrunWheelInfo.nItemId) .. " 道具ID不存在")
  186. else
  187. TrunWheelInfo.strItemIcon = itemCfgData.Icon
  188. self.tbPrizeInfoList[#self.tbPrizeInfoList+1] = TrunWheelInfo
  189. end
  190. end
  191. end
  192. end
  193. end
  194. end
  195. function TrunWheeActivtylDataMgr:GetLogCount()
  196. return #self.tbLog
  197. end
  198. function TrunWheeActivtylDataMgr:GetLogData(nCount)
  199. if #self.tbLog > self.MaxLogNum then --保留最后最大条数
  200. local nDelCount = #self.tbLog - self.MaxLogNum
  201. for i = 1,nDelCount do
  202. table.remove(self.tbLog,1)
  203. end
  204. end
  205. local nIndex = (#self.tbLog + nCount) % #self.tbLog
  206. if nIndex == 0 then
  207. nIndex = #self.tbLog
  208. end
  209. return self.tbLog[nIndex]
  210. end
  211. function TrunWheeActivtylDataMgr:AddLogData(data)
  212. if nil == data.log_list then
  213. return
  214. end
  215. for i = 1, #data.log_list do
  216. local itemlist = data.log_list[i].item_list
  217. if itemlist then
  218. for j = 1, #itemlist do
  219. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(itemlist[j].key)
  220. if not itemCfgData then
  221. LogError(tostring(itemlist[j].key) .. " 道具ID不存在")
  222. else
  223. local strName = data.log_list[i].nick_name
  224. local nickName = CommonUtil.GetVaildNickName(strName)
  225. local Info = string.formatbykey('PrizeWheelBroad', nickName,itemCfgData.Name.." x "..tostring(itemlist[j].value))
  226. self.tbLog[#self.tbLog+1] = Info
  227. end
  228. end
  229. end
  230. end
  231. end
  232. function TrunWheeActivtylDataMgr:SetLogData(data)
  233. self.tbLog = {}
  234. self:AddLogData(data)
  235. end
  236. --获取刷新所需金币
  237. function TrunWheeActivtylDataMgr:GetRefreshCostGold()
  238. local refreshNum = self:GetRefreshCount() + 1
  239. local CostGold = self:GetRefreshPrizeWheelGold(1,refreshNum)
  240. return CostGold
  241. end
  242. --金币是否可以刷新
  243. function TrunWheeActivtylDataMgr:IsRefreshCostGold()
  244. local refreshNum = self:GetRefreshCount() + 1
  245. local CostGold = self:GetRefreshPrizeWheelGold(1,refreshNum)
  246. local Goldcount = CommonUtil.GetOwnResCountByItemId(Enum.ItemType.Diamond)
  247. if Goldcount >= CostGold then
  248. return true
  249. end
  250. return false
  251. end
  252. --获取单次抽奖道具
  253. function TrunWheeActivtylDataMgr:GetUseItemTrun(Once)
  254. if self:IsReceiverOver() then
  255. return 0
  256. end
  257. local nWheelCount = self:GetReceivePrizeInfoCount()+1
  258. local CostGold = self:GetPrizeWheelItem(1,nWheelCount)
  259. if not Once then
  260. CostGold = self:GetAllPrizeWheelItem(1)
  261. end
  262. return CostGold
  263. end
  264. --活动是否到期
  265. function TrunWheeActivtylDataMgr:IsActivityOver()
  266. if self.activeitem and self.activeitem:LeftTime() > 0 then
  267. return false
  268. end
  269. return true
  270. end
  271. --活动ID
  272. function TrunWheeActivtylDataMgr:GetActiveId()
  273. if self.activeitem.actId then
  274. return self.activeitem.actId
  275. end
  276. return 0
  277. end
  278. --获取单次抽奖金币
  279. function TrunWheeActivtylDataMgr:GetUseGoldTrun(Once)
  280. if self:IsReceiverOver() then
  281. return 0
  282. end
  283. local nWheelCount = self:GetReceivePrizeInfoCount()+1
  284. local CostGold = self:GetPrizeWheelGold(1,nWheelCount) --单次消耗金币
  285. if not Once then
  286. CostGold = self:GetAllPrizeWheelGold(1)
  287. end
  288. return CostGold
  289. end
  290. --活动消耗道具ID
  291. function TrunWheeActivtylDataMgr:GetCostItemId()
  292. --目前只有61 活动
  293. return self.ActivityItemId["61Item"]
  294. end
  295. --是否可以用道具抽奖
  296. function TrunWheeActivtylDataMgr:IsCanUseItemTrun(Once)
  297. if self:IsReceiverOver() then
  298. return false
  299. end
  300. local nWheelCount = self:GetReceivePrizeInfoCount()+1
  301. local Goldcount = CommonUtil.GetOwnResCountByItemId(self:GetCostItemId())
  302. local CostGold = self:GetPrizeWheelItem(1,nWheelCount)
  303. if not Once then
  304. CostGold = self:GetAllPrizeWheelItem(1)
  305. end
  306. if tonumber(Goldcount) >= tonumber(CostGold) then
  307. return true
  308. end
  309. return false
  310. end
  311. --是否可以用金币抽奖
  312. function TrunWheeActivtylDataMgr:IsCanUseGoldTrun(Once)
  313. if self:IsReceiverOver() then
  314. return false
  315. end
  316. local nWheelCount = self:GetReceivePrizeInfoCount()+1
  317. local Goldcount = CommonUtil.GetOwnResCountByItemId(Enum.ItemType.Diamond)
  318. local CostGold = self:GetPrizeWheelGold(1,nWheelCount) --单次消耗金币
  319. if not Once then
  320. CostGold = self:GetAllPrizeWheelGold(1)
  321. end
  322. if tonumber(Goldcount) >= CostGold then
  323. return true
  324. end
  325. return false
  326. end
  327. --本轮剩余刷新次数
  328. function TrunWheeActivtylDataMgr:GetOverRefreshCount()
  329. local refreshNum = self:GetRefreshCount()
  330. local refreshAllNum = self:GetRefreshPrizeWheelGoldCount(1) --总刷新次数
  331. local CostNum = refreshAllNum - refreshNum
  332. if CostNum < 0 then
  333. CostNum = 0
  334. end
  335. return CostNum
  336. end
  337. --金币转钱
  338. function TrunWheeActivtylDataMgr:GoldToItem(goldNum)
  339. local ratio = self:GetChangeItemToGoldNum(1)
  340. return goldNum / ratio
  341. end
  342. --获取抽一次 差价金币
  343. function TrunWheeActivtylDataMgr:CalNeedGold()
  344. local Info = {}
  345. Info.CostItemNum = -1
  346. Info.CosGoldmNum = -1
  347. local ratio = self:GetChangeItemToGoldNum(1)
  348. if self:IsReceiverOver() then
  349. return Info
  350. end
  351. --当前道具
  352. local Itemcount = CommonUtil.GetOwnResCountByItemId(self:GetCostItemId())
  353. --当前需要花费道具
  354. local NeeddItem = self:GetUseItemTrun(true)
  355. --计算花费
  356. if Itemcount >= NeeddItem then
  357. Info.CostItemNum = NeeddItem
  358. Info.CosGoldmNum = 0
  359. return Info
  360. else--不足
  361. local costItem = NeeddItem - Itemcount
  362. local costgold = costItem * ratio
  363. Info.CostItemNum = Itemcount
  364. Info.CosGoldmNum = costgold
  365. return Info
  366. end
  367. end
  368. --获取抽多次 是否可以使用道具(多次 不转换 道具不足用金币)
  369. function TrunWheeActivtylDataMgr:CalNeedAllGold()
  370. local Info = {}
  371. Info.CostItemNum = -1
  372. Info.CosGoldmNum = -1
  373. local ratio = self:GetChangeItemToGoldNum(1)
  374. if self:IsReceiverOver() then --本轮结束
  375. return Info
  376. end
  377. --当前道具
  378. local Itemcount = CommonUtil.GetOwnResCountByItemId(self:GetCostItemId())
  379. --当前金币
  380. local Goldcount = CommonUtil.GetOwnResCountByItemId(Enum.ItemType.Diamond)
  381. --当前需要花费道具
  382. local NeeddItem = self:GetUseItemTrun(false)
  383. local NeddGold = self:GetUseGoldTrun(false)
  384. --计算花费
  385. if Itemcount >= NeeddItem then
  386. Info.CostItemNum = NeeddItem
  387. Info.CosGoldmNum = 0
  388. return Info
  389. else --不足
  390. Info.CostItemNum = 0
  391. Info.CosGoldmNum = NeddGold
  392. return Info
  393. end
  394. end
  395. --结束回合 剩余数
  396. function TrunWheeActivtylDataMgr:GetOverTrunCount()
  397. local nCount = self:GetReceivePrizeInfoCount()
  398. local MaxCount = self:GetMaxOverWheelCount(1)
  399. local costCount = MaxCount - nCount
  400. if costCount < 0 then
  401. costCount = 0
  402. end
  403. return costCount
  404. end
  405. --获取道具币名字
  406. function TrunWheeActivtylDataMgr:GetCostItemName()
  407. local nWheelCount = self:GetReceivePrizeInfoCount()+1
  408. local CostItemId = self:GetPrizeWheelItemGoldId(1,nWheelCount)
  409. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(CostItemId)
  410. if itemCfgData then
  411. return itemCfgData.Name
  412. end
  413. return ""
  414. end
  415. ---------------转盘抽奖表------ID 数据都取第1行
  416. --抽奖单次消耗金币
  417. function TrunWheeActivtylDataMgr:GetPrizeWheelGold(id,nCount)
  418. local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
  419. return Cfg.RewardOneGold[nCount]
  420. end
  421. --抽奖单次消耗道具
  422. function TrunWheeActivtylDataMgr:GetPrizeWheelItem(id,nCount)
  423. local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
  424. if Cfg.RewardOneItem[nCount] then
  425. return Cfg.RewardOneItem[nCount][2]
  426. end
  427. end
  428. --抽奖全部消耗金币
  429. function TrunWheeActivtylDataMgr:GetAllPrizeWheelGold(id)
  430. local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
  431. return Cfg.RewardAdllGold
  432. end
  433. --抽奖全部消耗道具
  434. function TrunWheeActivtylDataMgr:GetAllPrizeWheelItem(id)
  435. local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
  436. return Cfg.RewardAllItem[1][2]
  437. end
  438. --获取道具币ID
  439. function TrunWheeActivtylDataMgr:GetPrizeWheelItemGoldId(id,nCount)
  440. local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
  441. return Cfg.RewardOneItem[nCount][1]
  442. end
  443. --刷新金币
  444. function TrunWheeActivtylDataMgr:GetRefreshPrizeWheelGold(id,nCount)
  445. local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
  446. return Cfg.RefreshPrice[nCount]
  447. end
  448. --刷新次数
  449. function TrunWheeActivtylDataMgr:GetRefreshPrizeWheelGoldCount(id)
  450. local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
  451. return #Cfg.RefreshPrice
  452. end
  453. --最大可结束本轮次数
  454. function TrunWheeActivtylDataMgr:GetMaxOverWheelCount(id)
  455. local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
  456. return Cfg.NoRewardNum
  457. end
  458. --金币转道具数量
  459. function TrunWheeActivtylDataMgr:GetChangeItemToGoldNum(id)
  460. local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
  461. return Cfg.ItemPrice
  462. end
  463. --背景图片
  464. function TrunWheeActivtylDataMgr:GetBgTitleImg(id)
  465. local Cfg = ManagerContainer.CfgMgr:GetActivityRoulettelCfgById(id)
  466. local ActivityneedleImg = Cfg.ActivityBG[1]
  467. local ActivityTitleImg = Cfg.ActivityBG[2]
  468. return ActivityneedleImg,ActivityTitleImg
  469. end
  470. --------------
  471. return TrunWheeActivtylDataMgr