Commit 7f21f75b100ba2998f541ff0ed40c088cb25fd5f

Authored by zhangqijia
1 parent 49df162b

fix: 一番赏 增加rank,刷新机制完善,修复capsuled 55行报错。

Showing 2 changed files with 123 additions and 39 deletions   Show diff stats
src/models/Capsule.lua
@@ -145,6 +145,56 @@ function Capsule:isShow() @@ -145,6 +145,56 @@ function Capsule:isShow()
145 return true 145 return true
146 end 146 end
147 147
  148 +function Capsule:resetTimeOut(curTime, now)
  149 + now = now or skynet.timex()
  150 + local cur4Time = curTime or (specTime({hour = 4},now))
  151 +
  152 + local interval
  153 + if cur4Time > now then
  154 + interval = cur4Time - now
  155 + elseif cur4Time < now then
  156 + local nextTime = dayLater(now)
  157 + interval = nextTime - now
  158 + elseif cur4Time == now then
  159 + self:init()
  160 + self:create()
  161 +
  162 + local nextTime = dayLater(now)
  163 + interval = nextTime - now
  164 + end
  165 + interval = (interval + 1)* 100
  166 + skynet.timeout(interval, handler(self,self.resetTimeOut))
  167 +end
  168 +
  169 +function Capsule:reset4TimeOut(curTime, now)
  170 + now = now or skynet.timex()
  171 + local interval
  172 + if curTime > now then
  173 + interval = curTime - now
  174 + elseif curTime < now then
  175 + local nextTime = dayLater(now)
  176 + interval = nextTime - now
  177 + elseif curTime == now then
  178 + self:init()
  179 + self:create()
  180 +
  181 + return false
  182 + end
  183 + interval = (interval + 1)* 100
  184 + skynet.timeout(interval, handler(self,self.reset4TimeOut))
  185 +end
  186 +
  187 +function Capsule:checkTime(resetArr, now)
  188 + if resetArr[1] == "3" then
  189 + local cur4Time = specTime({hour = 4},now)
  190 + if now == cur4Time then return true end
  191 + self:resetTimeOut(cur4Time, now)
  192 + elseif resetArr[1] == "4" then
  193 + if now == resetArr[2] then return true end
  194 + self:reset4TimeOut(resetArr[2], now)
  195 + end
  196 +end
  197 +
148 function Capsule:refreshing(now) 198 function Capsule:refreshing(now)
149 local id = self:getProperty("id") 199 local id = self:getProperty("id")
150 local room = self:getProperty("room") 200 local room = self:getProperty("room")
@@ -173,11 +223,10 @@ function Capsule:refreshing(now) @@ -173,11 +223,10 @@ function Capsule:refreshing(now)
173 end 223 end
174 return false 224 return false
175 225
176 - elseif resetArr[1] == "3" then  
177 -  
178 - elseif resetArr[1] == "4" then  
179 - if now >= resetArr[2] then return true end 226 + else
  227 + self:checkTime(resetArr, now)
180 end 228 end
  229 +
181 end 230 end
182 231
183 return false 232 return false
@@ -490,17 +539,32 @@ function Capsule:getKing(record,now) @@ -490,17 +539,32 @@ function Capsule:getKing(record,now)
490 539
491 local specials = self:getProperty("specials") or {} 540 local specials = self:getProperty("specials") or {}
492 local specialsRecord = self:getProperty("specialsRecord") or {} 541 local specialsRecord = self:getProperty("specialsRecord") or {}
  542 + local rank = self:getProperty("rank") or {}
  543 + if not next(rank) then return nil end
493 544
494 local roleRecord = {} 545 local roleRecord = {}
495 - for _, v in ipairs(record) do  
496 - if not roleRecord[v.roleId]then  
497 - roleRecord[v.roleId] = {amount = v.amount }  
498 - else  
499 - roleRecord[v.roleId] = {amount = (roleRecord[v.roleId]["amount"] or 0) + v.amount}  
500 - end 546 +
  547 + for roleId, count in pairs(rank) do
  548 + table.insert(roleRecord, {roleId = roleId, count = count})
  549 + end
  550 + table.sort(roleRecord, function(a, b) return a.count > b.count end)
  551 +
  552 + --tmp[spKey] = {name = name, good_id = spKey, typ = RewardType.SPECIAL, award = award, amount = 1, quality = typ, create_time= now}
  553 +
  554 + local count = math.min(special["amount"], #roleRecord)
  555 +
  556 + local rewardByRole = {}
  557 + local index = 1
  558 + while (count > 0 ) do
  559 + count = count - 1
  560 + local tmp = roleRecord[index]
  561 + if not tmp then break end
  562 + index = index + 1
  563 +
  564 + local name = getNameByRoleId(tmp.roleId)
  565 + rewardByRole[tmp.roleId][spKey] = {name = name, good_id = spKey, typ = RewardType.SPECIAL, award = special["award"], amount = 1, SpecialType.KING, create_time= now}
501 end 566 end
502 567
503 - local rewardByRole, count = getSpecialRoleNotify(roleRecord, special["amount"], special["award"], spKey, SpecialType.KING,now)  
504 special["amount"] = count 568 special["amount"] = count
505 specials[spKey] = special 569 specials[spKey] = special
506 570
@@ -614,6 +678,8 @@ function Capsule:drawByCount(roleId, count) @@ -614,6 +678,8 @@ function Capsule:drawByCount(roleId, count)
614 678
615 local goods = self:getProperty("goods") or {} 679 local goods = self:getProperty("goods") or {}
616 local record = self:getProperty("record") or {} 680 local record = self:getProperty("record") or {}
  681 + local rank = self:getProperty("rank") or {}
  682 + local rankRole = rank[roleId] or 0
617 local recordByRole = self:getProperty("recordByRole") or {} 683 local recordByRole = self:getProperty("recordByRole") or {}
618 local roleRecord = recordByRole[roleId] or {} 684 local roleRecord = recordByRole[roleId] or {}
619 685
@@ -636,6 +702,9 @@ function Capsule:drawByCount(roleId, count) @@ -636,6 +702,9 @@ function Capsule:drawByCount(roleId, count)
636 if good and good.amount > 0 then 702 if good and good.amount > 0 then
637 good.amount = good.amount - 1 703 good.amount = good.amount - 1
638 704
  705 + --插入rank
  706 + rankRole = rankRole + 1
  707 +
639 --插入记录 708 --插入记录
640 local tmpNotify = {roleId = roleId, name= name, good_id = good_id, typ = RewardType.GOODS, award = good.award, amount = 1, quality = good.quality, create_time= now} 709 local tmpNotify = {roleId = roleId, name= name, good_id = good_id, typ = RewardType.GOODS, award = good.award, amount = 1, quality = good.quality, create_time= now}
641 table.insert(record, tmpNotify) 710 table.insert(record, tmpNotify)
@@ -659,8 +728,9 @@ function Capsule:drawByCount(roleId, count) @@ -659,8 +728,9 @@ function Capsule:drawByCount(roleId, count)
659 end 728 end
660 729
661 end 730 end
  731 + rank[roleId] = rankRole
662 recordByRole[roleId] = roleRecord 732 recordByRole[roleId] = roleRecord
663 - self:setProperties({recordByRole = recordByRole, record = record, goods = goods}) 733 + self:setProperties({recordByRole = recordByRole, record = record, goods = goods, rank = rank})
664 734
665 local tmpNotify = self:checkIncentive(roleId, name, now) 735 local tmpNotify = self:checkIncentive(roleId, name, now)
666 for k, v in pairs(tmpNotify) do 736 for k, v in pairs(tmpNotify) do
@@ -692,6 +762,8 @@ end @@ -692,6 +762,8 @@ end
692 function Capsule:drawAll(roleId) 762 function Capsule:drawAll(roleId)
693 local goods = self:getProperty("goods") or {} 763 local goods = self:getProperty("goods") or {}
694 local record = self:getProperty("record") or {} 764 local record = self:getProperty("record") or {}
  765 + local rank = self:getProperty("rank") or {}
  766 + local rankRole = rank[roleId] or 0
695 local recordByRole = self:getProperty("recordByRole") or {} 767 local recordByRole = self:getProperty("recordByRole") or {}
696 local roleRecord = recordByRole[roleId] or {} 768 local roleRecord = recordByRole[roleId] or {}
697 local now = skynet.timex() 769 local now = skynet.timex()
@@ -701,6 +773,9 @@ function Capsule:drawAll(roleId) @@ -701,6 +773,9 @@ function Capsule:drawAll(roleId)
701 notify[roleId] = {} 773 notify[roleId] = {}
702 for good_id, good in pairs(goods) do 774 for good_id, good in pairs(goods) do
703 if good.amount > 0 then 775 if good.amount > 0 then
  776 + --插入rank
  777 + rankRole = rankRole + good.amount
  778 +
704 --插入记录 779 --插入记录
705 local tmpNotify = {roleId = roleId, name= name, good_id = good_id, typ = RewardType.GOODS, award = good.award, amount = good.amount, quality = good.quality, create_time = now} 780 local tmpNotify = {roleId = roleId, name= name, good_id = good_id, typ = RewardType.GOODS, award = good.award, amount = good.amount, quality = good.quality, create_time = now}
706 for i = 1, good.amount do 781 for i = 1, good.amount do
@@ -725,8 +800,9 @@ function Capsule:drawAll(roleId) @@ -725,8 +800,9 @@ function Capsule:drawAll(roleId)
725 end 800 end
726 801
727 end 802 end
  803 + rank[roleId] = rankRole
728 recordByRole[roleId] = roleRecord 804 recordByRole[roleId] = roleRecord
729 - self:setProperties({recordByRole = recordByRole, record = record, goods = goods}) 805 + self:setProperties({recordByRole = recordByRole, record = record, goods = goods, rank = rank})
730 806
731 local tmpNotify = self:checkIncentive(roleId, name, now) 807 local tmpNotify = self:checkIncentive(roleId, name, now)
732 for k, v in pairs(tmpNotify) do 808 for k, v in pairs(tmpNotify) do
src/services/capsuled.lua
@@ -51,7 +51,9 @@ function getNameByRoleId(roleId) @@ -51,7 +51,9 @@ function getNameByRoleId(roleId)
51 end 51 end
52 52
53 function broadCastCapsule(roleId, capsuleId, broadInfo) 53 function broadCastCapsule(roleId, capsuleId, broadInfo)
54 - local capsule = capsules[capsuleId] or {} 54 + local capsule = capsules[capsuleId]
  55 + if not capsule then print("not capsule :" .. capsuleId) return end
  56 +
55 local register = capsule:getProperty("register") or {} 57 local register = capsule:getProperty("register") or {}
56 if next(capsule) then 58 if next(capsule) then
57 for id, _ in pairs(register) do 59 for id, _ in pairs(register) do
@@ -63,21 +65,22 @@ function broadCastCapsule(roleId, capsuleId, broadInfo) @@ -63,21 +65,22 @@ function broadCastCapsule(roleId, capsuleId, broadInfo)
63 end 65 end
64 66
65 function broadCastSpecial(roleId, capsuleId, broadInfo) 67 function broadCastSpecial(roleId, capsuleId, broadInfo)
66 - local capsule = capsules[capsuleId] or {} 68 + local capsule = capsules[capsuleId]
  69 + if not capsule then skynet.error("not capsule: " .. capsuleId) return end
  70 +
67 local register = capsule:getProperty("register") or {} 71 local register = capsule:getProperty("register") or {}
68 - if next(capsule) then  
69 - for id, _ in pairs(register) do  
70 - if id ~= roleId then  
71 - if broadInfo[id] then  
72 - rpcRole(id, "paySpecialReward", id, broadInfo[id])  
73 - end 72 + for id, _ in pairs(register) do
  73 + if id ~= roleId then
  74 + if broadInfo[id] then
  75 + rpcRole(id, "paySpecialReward", id, broadInfo[id])
74 end 76 end
75 end 77 end
76 end 78 end
77 end 79 end
78 80
79 local function add(roleId, capsuleId) 81 local function add(roleId, capsuleId)
80 - local capsule = capsules[capsuleId] or {} 82 + local capsule = capsules[capsuleId]
  83 + if not capsule then skynet.error("not capsule: " .. capsuleId) return end
81 if next(capsule) then 84 if next(capsule) then
82 capsule:join(roleId) 85 capsule:join(roleId)
83 broadCastCapsule(roleId, capsuleId, {notifyType= NotifyChangeType.JOIN, roleId = roleId}) 86 broadCastCapsule(roleId, capsuleId, {notifyType= NotifyChangeType.JOIN, roleId = roleId})
@@ -183,11 +186,11 @@ end @@ -183,11 +186,11 @@ end
183 186
184 function CMD.exit(roleId, capsuleId) 187 function CMD.exit(roleId, capsuleId)
185 if capsuleId then 188 if capsuleId then
186 - local capsule = capsules[capsuleId] or {}  
187 - if next(capsule) then  
188 - capsule:exit(roleId)  
189 - broadCastCapsule(roleId, capsuleId, {notifyType = NotifyChangeType.EXIT, roleId = roleId})  
190 - end 189 + local capsule = capsules[capsuleId]
  190 + if not capsule then skynet.error("not capsule: " .. capsuleId) return end
  191 +
  192 + capsule:exit(roleId)
  193 + broadCastCapsule(roleId, capsuleId, {notifyType = NotifyChangeType.EXIT, roleId = roleId})
191 else 194 else
192 for _, capsule in pairs(capsules) do 195 for _, capsule in pairs(capsules) do
193 if next(capsule) then 196 if next(capsule) then
@@ -199,30 +202,35 @@ function CMD.exit(roleId, capsuleId) @@ -199,30 +202,35 @@ function CMD.exit(roleId, capsuleId)
199 end 202 end
200 203
201 function CMD.draw_capsule(roleId, capsuleId, full, drawsNum, cares) 204 function CMD.draw_capsule(roleId, capsuleId, full, drawsNum, cares)
202 - local capsule = capsules[capsuleId] or {}  
203 - if next(capsule) then  
204 - local ret, reward, rewardByGoods, notify = capsule:draw(roleId, full, drawsNum, cares)  
205 - if ret > 5 then  
206 - --broadCastCapsule(roleId, capsuleId, {notifyType = NotifyChangeType.DRAW, notify = notify})  
207 - broadCastSpecial(roleId, capsuleId, notify)  
208 - end  
209 - return ret, reward, rewardByGoods, capsule:data(roleId) 205 + local capsule = capsules[capsuleId]
  206 + if not capsule then skynet.error("not capsule: " .. capsuleId) return 2 end
  207 +
  208 + local ret, reward, rewardByGoods, notify = capsule:draw(roleId, full, drawsNum, cares)
  209 + if ret > 5 then
  210 + --broadCastCapsule(roleId, capsuleId, {notifyType = NotifyChangeType.DRAW, notify = notify})
  211 + broadCastSpecial(roleId, capsuleId, notify)
210 end 212 end
211 - return 2 213 + return ret, reward, rewardByGoods, capsule:data(roleId)
212 end 214 end
213 215
214 function CMD.register(roleId, capsuleId) 216 function CMD.register(roleId, capsuleId)
215 - local capsule = capsules[capsuleId] or {} 217 + local capsule = capsules[capsuleId]
  218 + if not capsule then skynet.error("not capsule: " .. capsuleId) return nil end
  219 +
216 return capsule:register(roleId) 220 return capsule:register(roleId)
217 end 221 end
218 222
219 function CMD.goods_stock(capsuleId) 223 function CMD.goods_stock(capsuleId)
220 - local capsule = capsules[capsuleId] or {} 224 + local capsule = capsules[capsuleId]
  225 + if not capsule then skynet.error("not capsule: " .. capsuleId) return 0 end
  226 +
221 return capsule:getGoodsAmount(), capsule:getProperty("token") 227 return capsule:getGoodsAmount(), capsule:getProperty("token")
222 end 228 end
223 229
224 function CMD.capsule_data(roleId, capsuleId) 230 function CMD.capsule_data(roleId, capsuleId)
225 - local capsule = capsules[capsuleId] or {} 231 + local capsule = capsules[capsuleId]
  232 + if not capsule then skynet.error("not capsule: " .. capsuleId) return nil end
  233 +
226 return capsule:data(roleId) 234 return capsule:data(roleId)
227 end 235 end
228 236