| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- local Msg = require("core.Msg")
- local Util = require("common.Util")
- local Lang = require("common.Lang")
- local Broadcast = require("broadcast.Broadcast")
- local Grid = require("bag.Grid")
- local BagLogic = require("bag.BagLogic")
- local AbsActLogic = require("absAct.AbsActLogic")
- local AbsActDefine = require("absAct.AbsActDefine")
- local MailManager = require("mail.MailManager")
- local MailExcel = require("excel.mail")
- local AbsActExcel = require("excel.absAct")
- local ItemExcel = require("excel.item").item
- local ItemDefine = require("bag.ItemDefine")
- local YunYingLogic = require("yunying.YunYingLogic")
- local PanelDefine = require("broadcast.PanelDefine")
- --[[
- 占卜轮盘
- 1.actID(活动ID)或开始时间不一样则把DB数据重置
- 2.抽奖规则,每次抽奖获得是策划按顺序配置的固定奖励
- 3.轮盘奖励全部抽完,不刷新.
- 4.活动开启时间,占卜功能中的每次合成和刷新都会获得配置相对应的道具奖励
- 5.活动结束后,剩余的抽奖道具全部转化为其它配置的道具,并通过邮件发送
- DB:
- human.db.absAct[id] = {
- startTime = xxx, --占卜轮盘开始时间
- times = xxx, --占卜轮盘抽奖次数
- }
- local:
- getActID() --获取活动id
- recoveryItem() --活动结束后回收道具
- getInitDB() --初始DB数据
- recovery() --0点后自动执行回收逻辑
- getDrawCnt() --获得下次抽奖需要的道具数量
- public:
- getAndSendMsg() --发送活动数据
- get() --活动抽奖
- isRed() --红点提醒
- isActive() --激活状态
- isOpen() --活动开启
- updateDaily() --0点时回调
- onZhanbuRefresh() --占卜功能刷新时回调
- onZhanbuCompose() --占卜合成时回调
- getZhanbuComposeCnt()--占卜合成时可得到道具数量
- --]]
- local function getActID(human)
- local state, id = AbsActLogic.isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_9)
- if not state then return end
- return id
- end
- local function recoveryItem(human, id)
- local absActConfig = AbsActExcel.absActivity[id]
- if not absActConfig then return end
- local zblpConfig = AbsActExcel.zhanbuLunpan[absActConfig.actId]
- if not zblpConfig then
- zblpConfig = AbsActExcel.zhanbuLunpan[absActConfig.turns[1]]
- if not zblpConfig then return end
- end
- local cnt = BagLogic.getItemCnt(human, zblpConfig.itemID)
- if cnt > 0 then
- BagLogic.delItem(human, zblpConfig.itemID, cnt, "zhanbulunpan_recovery")
- local mailConfig = MailExcel.mail[zblpConfig.mailID]
- local title = mailConfig.title
- local senderName = mailConfig.senderName
- local content = mailConfig.content
- local itemName = ItemExcel[zblpConfig.recoveryItemId].name
- local itemCnt = math.ceil(cnt / zblpConfig.recoveryProb[1]) * zblpConfig.recoveryProb[2]
- local items = { {zblpConfig.recoveryItemId, itemCnt} }
- MailManager.add(MailManager.SYSTEM, human.db._id, title, Util.format(content, itemName), items, senderName)
- end
- end
- local function getInitDB(human, id, isRecovery)
- if not id then
- id = getActID(human)
- if not id then return end
- end
- local ret, endTime, startTime = AbsActLogic.isStarted(human, id)
- if not ret then
- --活动已结束,回收道具
- if isRecovery then
- recoveryItem(human, id)
- end
- return
- else
- --活动重新开过,回收道具
- local actDB = human.db.absAct[id]
- if actDB then
- actDB.times = actDB.times or 0
- end
- --[[ 不判断开始时间是否相等了 有玩家出现过活动在也回收了,
- 注释掉后,但后面如果配成每期之间没有间隔或在下一期开始后再上线,会出现回收不掉的问题。
- 解决方案思路是存actID,例actDB.actId = absActConfig.actId,后面有配置这种情这样解决。
- if actDB and actDB.startTime ~= startTime then
- actDB.startTime = startTime
- actDB.times = 0
- if isRecovery then
- recoveryItem(human, id)
- end
- end --]]
- return actDB
- end
- end
- local function recovery(human, activityID)
- getInitDB(human, activityID, true)
- end
- local function getDrawCnt(human, times, id)
- local absActConfig = AbsActExcel.absActivity[id]
- if not absActConfig then return end
- local zblpConfig = AbsActExcel.zhanbuLunpan[absActConfig.actId]
- return zblpConfig.itemCnts[times + 1] or zblpConfig.itemCnts[#zblpConfig.itemCnts]
- end
- local init
- function getAndSendMsg(human, id)
- local actDB = getInitDB(human, id)
- if not actDB then return end
- local absActConfig = AbsActExcel.absActivity[id]
- if not absActConfig then return end
- local msgRet = Msg.gc.GC_ABS_ZHAN_BU_LUA_PAN_QUERY
- if not init then
- local zblpConfig = AbsActExcel.zhanbuLunpan[absActConfig.actId]
- Grid.makeItem(msgRet.needItem, zblpConfig.itemID, 1)
- local len = 0
- for _, rewardCf in ipairs(zblpConfig.itemRewards) do
- len = len + 1
- Grid.makeItem(msgRet.list[len], rewardCf[1], rewardCf[2])
- end
- msgRet.list[0] = len
- len = 0
- for _, order in ipairs(zblpConfig.itemRewardOrders) do
- len = len + 1
- msgRet.orderList[len] = order
- end
- msgRet.orderList[0] = len
- len = 0
- for _, cnt in ipairs(zblpConfig.composeItemRewardCnts) do
- len = len + 1
- Grid.makeItem(msgRet.composeItems[len], zblpConfig.itemID, cnt)
- end
- msgRet.composeItems[0] = len
- Grid.makeItem(msgRet.resershItem, zblpConfig.itemID, zblpConfig.refreshItemRewardCnt)
- Grid.makeItem(msgRet.recoveryItem, zblpConfig.recoveryItemId, 1)
- msgRet.recoveryProb = tostring(zblpConfig.recoveryProb[1]) .. ":" .. tostring(zblpConfig.recoveryProb[2])
-
- init = true
- end
- msgRet.times = actDB.times
- msgRet.itemCnt = getDrawCnt(human, actDB.times, id)
- Msg.send(msgRet, human.fd)
- end
- function get(human, id)
- local actDB = getInitDB(human, id)
- if not actDB then return end
- local absActConfig = AbsActExcel.absActivity[id]
- if not absActConfig then return end
- local zblpConfig = AbsActExcel.zhanbuLunpan[absActConfig.actId]
- local nextTimes = actDB.times + 1
-
- local nextOrder = zblpConfig.itemRewardOrders[nextTimes]
- if not nextOrder then
- return Broadcast.sendErr(human, Lang.ABS_ZHANBU_LUNPAN_ERR)
- end
- local drawItemCf = zblpConfig.itemRewards[nextOrder]
- if not drawItemCf then
- return Broadcast.sendErr(human, Lang.ABS_ZHANBU_LUNPAN_ERR)
- end
- local needItemCnt = getDrawCnt(human, actDB.times, id)
- if not BagLogic.checkItemCnt(human, zblpConfig.itemID, needItemCnt) then
- return
- end
- BagLogic.delItem(human, zblpConfig.itemID, needItemCnt, "zhanbulunpan_get")
- actDB.times = nextTimes
- BagLogic.addItem(human, drawItemCf[1], drawItemCf[2], "zhanbulunpan_get")
- local msgRet = Msg.gc.GC_ABS_ZHAN_BU_LUA_PAN_GET
- msgRet.times = nextTimes
- msgRet.itemCnt = getDrawCnt(human, actDB.times, id)
- Msg.send(msgRet, human.fd)
- YunYingLogic.updateIcon(YYInfo[id], human)
- YunYingLogic.sendGroupUpdate(YYInfo[id], human, PanelDefine.PANEL_ID_3308)
- end
- function isRed(human, YYInfo, absActConfig)
- local actDB = getInitDB(human, absActConfig.funcID)
- if not actDB then return end
- local zblpConfig = AbsActExcel.zhanbuLunpan[absActConfig.actId]
- local nextTimes = actDB.times + 1
-
- local nextOrder = zblpConfig.itemRewardOrders[nextTimes]
- if not nextOrder then
- return
- end
- local drawItemCf = zblpConfig.itemRewards[nextOrder]
- if not drawItemCf then
- return
- end
- local needItemCnt = getDrawCnt(human, actDB.times, absActConfig.funcID)
- local zblpConfig = AbsActExcel.zhanbuLunpan[absActConfig.actId]
- if zblpConfig.itemID == ItemDefine.ITEM_ZUANSHI_ID then
- local sum = human.db.zuanshi
- if sum < needItemCnt then
- return
- end
- end
- if BagLogic.getItemCnt(human, zblpConfig.itemID) < needItemCnt then
- return
- end
- return true
- end
- function isActive(human, YYInfo, funcConfig)
- return not isOpen(human, YYInfo, funcConfig)
- end
- function isOpen(human, YYInfo, funcConfig)
- return AbsActLogic.isStarted(human, funcConfig.funcID)
- end
- function updateDaily(human, activityID)
- recovery(human, activityID)
- end
- function onZhanbuRefresh(human)
- local id = getActID(human)
- if not id then return end
- local absActConfig = AbsActExcel.absActivity[id]
- if not absActConfig then return end
- local zblpConfig = AbsActExcel.zhanbuLunpan[absActConfig.actId]
- if not zblpConfig then return end
- local ret = AbsActLogic.isStarted(human, id)
- if ret then
- if zblpConfig.refreshItemRewardCnt <= 0 then return end
- BagLogic.addItem(human, zblpConfig.itemID, zblpConfig.refreshItemRewardCnt, "zhanbulunpan_get")
- end
- end
- function onZhanbuCompose(human, grade)
- local itemID,cnt = getZhanbuComposeCnt(human, grade)
- if cnt <= 0 then return end
- BagLogic.addItem(human, itemID, cnt, "zhanbulunpan_get")
- end
- function getZhanbuComposeCnt(human, grade)
- local id = getActID(human)
- if not id then return 0,0 end
- local absActConfig = AbsActExcel.absActivity[id]
- if not absActConfig then return 0,0 end
- local zblpConfig = AbsActExcel.zhanbuLunpan[absActConfig.actId]
- if not zblpConfig then return 0,0 end
- local ret = AbsActLogic.isStarted(human, id)
- return ret and zblpConfig.itemID,zblpConfig.composeItemRewardCnts[grade] or 0,0
- end
|