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 |