| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- local Msg = require("core.Msg")
- local PanelDefine = require("broadcast.PanelDefine")
- local UnionDBLogic = require("union.UnionDBLogic")
- local UnionDefine = require("union.UnionDefine")
- local UnionExcel = require("excel.union")
- local Grid = require("bag.Grid")
- local BagLogic = require("bag.BagLogic")
- local RoleLogic = require("role.RoleLogic")
- local BuyLogic = require("topup.BuyLogic")
- local ChatPaoMaLogic = require("chat.ChatPaoMaLogic")
- local ChatUnion = require("chat.ChatUnion")
- local LiLianLogic = require("dailyTask.LiLianLogic")
- local UnionLivenessLogic = require("union.UnionLivenessLogic")
- -- 红包记录查询
- function unionRedBagQuery(human)
- -- 判断玩家是否有公会
- local union = UnionDBLogic.getUnion(human.db.unionUuid)
- if union == nil then
- return
- end
- local now = os.time()
- local msgRet = Msg.gc.GC_UNION_RED_BAG_QUERY
-
- if union.redBag == nil then
- -- 无公会红包记录
- msgRet.redBagList[0] = 0
- else
- -- 有公会红包记录
- local cnt = 0
- for k,v in pairs(union.redBag) do
- cnt = cnt + 1
- local net = msgRet.redBagList[cnt]
- local config = v.index and UnionExcel.redBag[v.index]
- net.id = k
- net.name = v.name
- net.type = v.type
- RoleLogic.makeRoleBase(v.sender,net.sender)
- net.senderPost = v.senderPost
- net.bagCnt = v.bagCnt
- net.nowCnt = v.nowCnt
- net.time = v.time - now
- -- 已过期
- if now > v.time then
- net.statu = 3
- else
- if v.record ~= nil and v.record[human.db._id] ~= nil then
- net.statu = 2 -- 已领取
- elseif v.nowCnt >= v.bagCnt then
- net.statu = 4 -- 已领完
- else
- net.statu = 1 -- 可领
- end
- end
- net.desc = config and config.desc or ""
- net.item[0] = config and #config.content or 0
- for i = 1, net.item[0] do
- local itemID = config.content[i][1]
- local itemCnt = config.content[i][2]
- Grid.makeItem(net.item[i], itemID, itemCnt)
- end
- end
- msgRet.redBagList[0] = cnt
- end
- Msg.send(msgRet,human.fd)
- end
- -- 单个红包查询
- function singleRedBag(human,id)
- -- 判断玩家是否有公会
- local union = UnionDBLogic.getUnion(human.db.unionUuid)
- if union == nil then
- return
- end
-
- -- 校验红包是否存在
- if id == nil or union.redBag[id] == nil then
- return
- end
- local msgRet = Msg.gc.GC_UNION_SINGLE_RED_BAG_QUERY
- if union.redBag[id].record == nil then
- msgRet.getRedBagList[0] = 0
- else
- local cnt = 0
- for k,v in pairs(union.redBag[id].record) do
- cnt = cnt + 1
- local net = msgRet.getRedBagList[cnt]
- RoleLogic.getRoleBaseByUuid(k,net.role)
- net.time = v.time
- Grid.makeItem(net.item,v.itemID,v.itemCnt)
- end
- msgRet.getRedBagList[0] = cnt
- end
- Msg.send(msgRet,human.fd)
- end
- -- 单个红包手气最佳
- function mostLucky(human,id)
- -- 判断玩家是否有公会
- local union = UnionDBLogic.getUnion(human.db.unionUuid)
- if union == nil then
- return
- end
-
- -- 校验红包是否存在
- if id == nil or union.redBag[id] == nil then
- return
- end
- local uuid = nil
- local luckCnt = 0
- if union.redBag[id].record == nil then
- return
- else
- for k,v in pairs(union.redBag[id].record) do
- cnt = cnt + 1
- if luckCnt == 0 or luckCnt < v.itemCnt then
- luckCnt = v.itemCnt
- uuid = k
- end
- end
- end
- return uuid,luckCnt
- end
- -- 发红包查询
- function sendRedBagQuery(human)
- -- 判断玩家是否有公会
- local union = UnionDBLogic.getUnion(human.db.unionUuid)
- if union == nil then
- return
- end
- local msgRet = Msg.gc.GC_UNION_SEND_RED_BAG_QUERY
- local config = UnionExcel.redBag
- local len = #config
- for i = 1,len do
- local net = msgRet.redBag[i]
- local v = config[i]
- net.type = v.type
- net.index = i
- net.name = v.name
- if human.db.redBagCnt == nil or human.db.redBagCnt[v.type] == nil then
- net.maxSendCnt = v.maxSendCnt
- else
- net.maxSendCnt = v.maxSendCnt - human.db.redBagCnt[v.type]
- end
- net.bagCnt = v.bagCnt
- net.desc = v.desc
- net.buttonTxt = v.buttonTxt
- net.rewardTxt = v.rewardTxt
-
- -- 红包发送奖励
- local rewardLen = #v.reward
- for j = 1,rewardLen do
- Grid.makeItem(net.reward[j],v.reward[j][1],v.reward[j][2])
- end
- net.reward[0] = rewardLen
- -- 红包内容
- local contentLen = #v.content
- for j = 1,contentLen do
- Grid.makeItem(net.item[j],v.content[j][1],v.content[j][2])
- end
- net.item[0] = contentLen
- -- 红包buyMsg
- BuyLogic.fontBuyItem(human, net.buyItem, v.buyID)
- end
- msgRet.redBag[0] = len
- Msg.send(msgRet,human.fd)
- end
- -- 发红包回调
- function sendRedBagCallBack(human,index)
- -- 判断玩家是否有公会
- local union = UnionDBLogic.getUnion(human.db.unionUuid)
- if union == nil then
- return
- end
-
- local config = UnionExcel.redBag[index]
- -- 发送失败 次数上限
- if human.db.redBagCnt ~= nil
- and human.db.redBagCnt[config.type] ~= nil
- and human.db.redBagCnt[config.type] + config.cnt > config.maxSendCnt then
- return
- end
- -- 发送成功
- -- 写数据库
- human.db.redBagCnt = human.db.redBagCnt or {}
- human.db.redBagCnt[config.type] = human.db.redBagCnt[config.type] or 0
- human.db.redBagCnt[config.type] = human.db.redBagCnt[config.type] + config.cnt
- local roleBase = {}
- RoleLogic.getRoleBase(human,roleBase)
- local member = UnionDBLogic.getUnionMember(union, human.db._id)
- if not member then return end
- local redBagID = union.redBagID and union.redBagID + 1 or 1
- local txtID = config.type..redBagID -- 由于用数字做id,在刷新公会信息时,会使数据库红包数据由object 变为Array ,id会被改变
- UnionDBLogic.insertSendRedBag(union._id,txtID,config.name,roleBase,member.post,config,index)
-
- -- 发送发红包者奖励
- BagLogic.addItemList(human, config.reward, "send_redbag")
- -- 发送公会通知
- ChatUnion.chatUnionRedBag(human)
- -- 跑马灯
- -- todo
- ChatPaoMaLogic.broadcast(human, ChatPaoMaLogic.PAOMA_TYPE_BROAD_TYPE24,PanelDefine.PANEL_ID_201)
- -- 查询
- unionRedBagQuery(human)
- local price = config.price
- LiLianLogic.onCallback(human,LiLianLogic.LILIAN_OUTID32,price)
-
- UnionLivenessLogic.touchLiveness(human,UnionDefine.UNION_LIVENESS_RED_BAG,1)
- end
- function getRedBag(human,id)
- -- 判断玩家是否有公会
- local union = UnionDBLogic.getUnion(human.db.unionUuid)
- if union == nil then
- return
- end
- -- 校验红包是否存在
- if id == nil or union.redBag[id] == nil then
- return
- end
-
- -- 判断是否能抢
- local now = os.time()
- local net = union.redBag[id]
- -- 已超时
- if now > union.redBag[id].time then
- return
- end
- -- 已领取
- if net.record ~= nil and net.record[human.db._id] ~= nil then
- return
- end
- -- 已领完
- if net.nowCnt >= net.bagCnt then
- return
- end
- -- 计算抢到多少
- local leftCnt = net.bagCnt - net.nowCnt
- local leftItem = net.leftCnt
- local getCnt = 0
- if leftCnt == 1 then
- getCnt = leftItem
- else
- getCnt = math.random(1,leftItem)
- end
- -- 防止某人手气太好,剩余数量不足以发剩余红包
- local temoLeftItem = leftItem - getCnt
-
- if temoLeftItem < leftCnt - 1 then
- temoLeftItem = leftCnt - 1
- getCnt = leftItem - temoLeftItem
- leftItem = temoLeftItem
- end
- -- 写数据库
- UnionDBLogic.updateRedBagRecord(human.db.unionUuid,human.db._id,id,net.itemID,getCnt)
- -- 发送物品
- -- BagLogic.addItem(human,net.itemID,getCnt,"get_redbag")
- BagLogic.cleanMomentItemList()
- BagLogic.updateMomentItem(1, net.itemID,getCnt)
- BagLogic.addMomentItemList(human, "get_redbag")
- -- 查询
- singleRedBag(human,id)
- union = UnionDBLogic.getUnion(human.db.unionUuid)
- local net = union.redBag[id]
- if net.nowCnt >= net.bagCnt then
- local mostUuid = mostLucky(human,id)
- if mostUuid then
- LiLianLogic.onCallbackByUuid(mostUuid,LiLianLogic.LILIAN_OUTID31,1)
- end
- end
- end
- --红包榜查询
- function redBagBillboardQuery(human)
- -- 判断玩家是否有公会
- local union = UnionDBLogic.getUnion(human.db.unionUuid)
- if union == nil then
- return
- end
- local msgRet = Msg.gc.GC_UNION_RED_BAG_BILLBOARD
-
- if union.redBagRank == nil then
- msgRet.redBagRank[0] = 0
- else
- local rankTb = union.redBagRank
- table.sort(rankTb,function (a,b)
- return a.totalMoney > b.totalMoney
- end)
- local cnt = 0
- for uuid,v in pairs(rankTb) do
- cnt = cnt + 1
- local net = msgRet.redBagRank[cnt]
- local member = UnionDBLogic.getUnionMember(union, uuid)
- RoleLogic.getRoleBaseByUuid(uuid,net.role)
- net.totalMoney = v.totalMoney
- net.bagCnt = v.bagCnt
- net.post = member and member.post or UnionDefine.POST_MEMBER
- end
- msgRet.redBagRank[0] = cnt
- end
- Msg.send(msgRet,human.fd)
- end
- -- 每日更新红包次数
- function updateDaily(human)
- UnionDBLogic.cleanRedBagCnt(human)
- end
|