Commit 7f21f75b100ba2998f541ff0ed40c088cb25fd5f
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 |