Commit 078bdb2fca0739af145cd47af2257ec40d93e93e
1 parent
f66891be
fix: 一番赏 特殊赏的抽奖记录的数据结构修改
1. 修改特殊赏抽奖记录的数据结构 {1={},2={}} key=触发特殊赏的 抽奖次数, v=特殊赏商品
table
方便客户端把特殊赏的抽奖记录给加入到普通商品的抽奖记录里
2. 修复reset_capsule指令无效的bug
Showing
2 changed files
with
59 additions
and
79 deletions
Show diff stats
src/models/Capsule.lua
| @@ -44,8 +44,8 @@ Capsule.schema = { | @@ -44,8 +44,8 @@ Capsule.schema = { | ||
| 44 | goods = {"table", {}}, --奖励池 | 44 | goods = {"table", {}}, --奖励池 |
| 45 | specials = {"table", {}}, --特殊赏 | 45 | specials = {"table", {}}, --特殊赏 |
| 46 | incentive = {"table", {}}, --激励奖 | 46 | incentive = {"table", {}}, --激励奖 |
| 47 | - incentiveRecord = {"table", {}}, --激励奖记录 | ||
| 48 | - specialsRecord= {"table", {}}, --特殊赏领取记录 | 47 | + incentiveRecord = {"table", {}}, --激励奖记录 {roleId = {}, roleId={}} |
| 48 | + specialsRecord= {"table", {}}, --特殊赏领取记录 {1={},2={}} key=触发特殊赏的 抽奖次数, v=特殊赏商品 table | ||
| 49 | resetTimes = {"number", 0}, --每日一次手动重置的机会 | 49 | resetTimes = {"number", 0}, --每日一次手动重置的机会 |
| 50 | hideTime = {"number", 0} , --隐藏时间 | 50 | hideTime = {"number", 0} , --隐藏时间 |
| 51 | drawEndTime = {"number", 0}, --抽完时间 | 51 | drawEndTime = {"number", 0}, --抽完时间 |
| @@ -323,7 +323,7 @@ function Capsule:checkSpecialFlag(typ) | @@ -323,7 +323,7 @@ function Capsule:checkSpecialFlag(typ) | ||
| 323 | return spKey, special | 323 | return spKey, special |
| 324 | end | 324 | end |
| 325 | 325 | ||
| 326 | -local function getSpecialRoleNotify(rewardRecord, count, award, spKey, typ, now) | 326 | +local function getSpecialReward(rewardRecord, count, award, spKey, typ, now) |
| 327 | local rewardByRole = {} | 327 | local rewardByRole = {} |
| 328 | while(count > 0 and next(rewardRecord)) do | 328 | while(count > 0 and next(rewardRecord)) do |
| 329 | local roleId = math.randWeight(rewardRecord, "amount") | 329 | local roleId = math.randWeight(rewardRecord, "amount") |
| @@ -334,19 +334,9 @@ local function getSpecialRoleNotify(rewardRecord, count, award, spKey, typ, now) | @@ -334,19 +334,9 @@ local function getSpecialRoleNotify(rewardRecord, count, award, spKey, typ, now) | ||
| 334 | 334 | ||
| 335 | if tmp["amount"] <= 0 then rewardRecord[roleId] = nil end | 335 | if tmp["amount"] <= 0 then rewardRecord[roleId] = nil end |
| 336 | 336 | ||
| 337 | - tmp = rewardByRole[roleId] or {} | ||
| 338 | - if not next(tmp) then | ||
| 339 | - local name = getNameByRoleId(roleId) | ||
| 340 | - tmp[spKey] = {name = name, good_id = spKey, typ = RewardType.SPECIAL, award = award, amount = 1, quality = typ, create_time= now} | ||
| 341 | - else | ||
| 342 | - if not tmp[spKey] then | ||
| 343 | - local name = getNameByRoleId(roleId) | ||
| 344 | - tmp[spKey] = {name = name, good_id = spKey, typ = RewardType.SPECIAL, award = award, amount = 1, quality = typ, create_time= now} | ||
| 345 | - else | ||
| 346 | - tmp[spKey].amount = tmp[spKey].amount + 1 | ||
| 347 | - end | ||
| 348 | - end | ||
| 349 | - rewardByRole[roleId] = tmp | 337 | + local name = getNameByRoleId(roleId) |
| 338 | + tmp = {name = name, good_id = spKey, typ = RewardType.SPECIAL, award = award, amount = 1, quality = typ, create_time= now} | ||
| 339 | + table.insert(rewardByRole, tmp) | ||
| 350 | 340 | ||
| 351 | count = count - 1 | 341 | count = count - 1 |
| 352 | end | 342 | end |
| @@ -355,20 +345,11 @@ local function getSpecialRoleNotify(rewardRecord, count, award, spKey, typ, now) | @@ -355,20 +345,11 @@ local function getSpecialRoleNotify(rewardRecord, count, award, spKey, typ, now) | ||
| 355 | end | 345 | end |
| 356 | 346 | ||
| 357 | 347 | ||
| 358 | -local rewardToNtyFunc = function(notify, tmpReward) | ||
| 359 | - for key, val in pairs(tmpReward or {}) do | ||
| 360 | - if not notify[key] then | ||
| 361 | - notify[key] = clone(val) | ||
| 362 | - else | ||
| 363 | - for k, v in pairs(val) do | ||
| 364 | - if not notify[key][k] then | ||
| 365 | - notify[key][k] = v | ||
| 366 | - else | ||
| 367 | - notify[key][k] = notify[key][k].amount + v.amount | ||
| 368 | - end | ||
| 369 | - end | ||
| 370 | - | ||
| 371 | - end | 348 | +local rewardToRecordFunc = function(specialsRecord, recordAmount, rewardByRole) |
| 349 | + if not specialsRecord[recordAmount] then | ||
| 350 | + specialsRecord[recordAmount] = rewardByRole | ||
| 351 | + else | ||
| 352 | + table.insert(specialsRecord[recordAmount], rewardByRole) | ||
| 372 | end | 353 | end |
| 373 | end | 354 | end |
| 374 | 355 | ||
| @@ -406,12 +387,12 @@ function Capsule:getTop(record, recordAmount,now) | @@ -406,12 +387,12 @@ function Capsule:getTop(record, recordAmount,now) | ||
| 406 | end | 387 | end |
| 407 | end | 388 | end |
| 408 | 389 | ||
| 409 | - local rewardByRole, count = getSpecialRoleNotify(topRecord, special["amount"], special["award"], spKey, SpecialType.TOP,now) | 390 | + local rewardByRole, count = getSpecialReward(topRecord, special["amount"], special["award"], spKey, SpecialType.TOP,now) |
| 410 | 391 | ||
| 411 | special["amount"] = count | 392 | special["amount"] = count |
| 412 | specials[spKey] = special | 393 | specials[spKey] = special |
| 413 | 394 | ||
| 414 | - rewardToNtyFunc(specialsRecord, rewardByRole) | 395 | + rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole) |
| 415 | 396 | ||
| 416 | self:setProperties({specialsRecord = specialsRecord, specials = specials}) | 397 | self:setProperties({specialsRecord = specialsRecord, specials = specials}) |
| 417 | return rewardByRole | 398 | return rewardByRole |
| @@ -455,17 +436,17 @@ function Capsule:getCore(record, recordAmount,now) | @@ -455,17 +436,17 @@ function Capsule:getCore(record, recordAmount,now) | ||
| 455 | 436 | ||
| 456 | end | 437 | end |
| 457 | 438 | ||
| 458 | - local rewardByRole, count = getSpecialRoleNotify(roleRecord, special["amount"], special["award"], spKey, SpecialType.CORE,now) | 439 | + local rewardByRole, count = getSpecialReward(roleRecord, special["amount"], special["award"], spKey, SpecialType.CORE,now) |
| 459 | 440 | ||
| 460 | special["amount"] = count | 441 | special["amount"] = count |
| 461 | specials[spKey] = special | 442 | specials[spKey] = special |
| 462 | 443 | ||
| 463 | - rewardToNtyFunc(specialsRecord, rewardByRole) | 444 | + rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole) |
| 464 | self:setProperties({specialsRecord = specialsRecord, specials = specials}) | 445 | self:setProperties({specialsRecord = specialsRecord, specials = specials}) |
| 465 | return rewardByRole | 446 | return rewardByRole |
| 466 | end | 447 | end |
| 467 | 448 | ||
| 468 | -function Capsule:getLast(record,now) | 449 | +function Capsule:getLast(record, recordAmount, now) |
| 469 | local spKey, special = self:checkSpecialFlag(SpecialType.LAST) | 450 | local spKey, special = self:checkSpecialFlag(SpecialType.LAST) |
| 470 | if not special then return nil end | 451 | if not special then return nil end |
| 471 | 452 | ||
| @@ -495,17 +476,17 @@ function Capsule:getLast(record,now) | @@ -495,17 +476,17 @@ function Capsule:getLast(record,now) | ||
| 495 | end | 476 | end |
| 496 | end | 477 | end |
| 497 | 478 | ||
| 498 | - local rewardByRole, count = getSpecialRoleNotify(roleRecord, special["amount"], special["award"], spKey, SpecialType.LAST,now) | 479 | + local rewardByRole, count = getSpecialReward(roleRecord, special["amount"], special["award"], spKey, SpecialType.LAST,now) |
| 499 | 480 | ||
| 500 | special["amount"] = count | 481 | special["amount"] = count |
| 501 | specials[spKey] = special | 482 | specials[spKey] = special |
| 502 | 483 | ||
| 503 | - rewardToNtyFunc(specialsRecord, rewardByRole) | 484 | + rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole) |
| 504 | self:setProperties({specialsRecord = specialsRecord, specials = specials}) | 485 | self:setProperties({specialsRecord = specialsRecord, specials = specials}) |
| 505 | return rewardByRole | 486 | return rewardByRole |
| 506 | end | 487 | end |
| 507 | 488 | ||
| 508 | -function Capsule:getJoker(record,now) | 489 | +function Capsule:getJoker(record, recordAmount, now) |
| 509 | local spKey, special = self:checkSpecialFlag(SpecialType.JOKER) | 490 | local spKey, special = self:checkSpecialFlag(SpecialType.JOKER) |
| 510 | if not special then return nil end | 491 | if not special then return nil end |
| 511 | 492 | ||
| @@ -521,17 +502,17 @@ function Capsule:getJoker(record,now) | @@ -521,17 +502,17 @@ function Capsule:getJoker(record,now) | ||
| 521 | end | 502 | end |
| 522 | end | 503 | end |
| 523 | 504 | ||
| 524 | - local rewardByRole, count = getSpecialRoleNotify(roleRecord, special["amount"], special["award"], spKey, SpecialType.JOKER,now) | 505 | + local rewardByRole, count = getSpecialReward(roleRecord, special["amount"], special["award"], spKey, SpecialType.JOKER,now) |
| 525 | 506 | ||
| 526 | special["amount"] = count | 507 | special["amount"] = count |
| 527 | specials[spKey] = special | 508 | specials[spKey] = special |
| 528 | 509 | ||
| 529 | - rewardToNtyFunc(specialsRecord, rewardByRole) | 510 | + rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole) |
| 530 | self:setProperties({specialsRecord = specialsRecord, specials = specials}) | 511 | self:setProperties({specialsRecord = specialsRecord, specials = specials}) |
| 531 | return rewardByRole | 512 | return rewardByRole |
| 532 | end | 513 | end |
| 533 | 514 | ||
| 534 | -function Capsule:getKing(record,now) | 515 | +function Capsule:getKing(record, recordAmount, now) |
| 535 | local spKey, special = self:checkSpecialFlag(SpecialType.KING) | 516 | local spKey, special = self:checkSpecialFlag(SpecialType.KING) |
| 536 | if not special then return nil end | 517 | if not special then return nil end |
| 537 | 518 | ||
| @@ -566,7 +547,7 @@ function Capsule:getKing(record,now) | @@ -566,7 +547,7 @@ function Capsule:getKing(record,now) | ||
| 566 | special["amount"] = count | 547 | special["amount"] = count |
| 567 | specials[spKey] = special | 548 | specials[spKey] = special |
| 568 | 549 | ||
| 569 | - rewardToNtyFunc(specialsRecord, rewardByRole) | 550 | + rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole) |
| 570 | self:setProperties({specialsRecord = specialsRecord, specials = specials}) | 551 | self:setProperties({specialsRecord = specialsRecord, specials = specials}) |
| 571 | return rewardByRole | 552 | return rewardByRole |
| 572 | end | 553 | end |
| @@ -585,16 +566,16 @@ function Capsule:checkSpecialReward(now, goodsAmount) | @@ -585,16 +566,16 @@ function Capsule:checkSpecialReward(now, goodsAmount) | ||
| 585 | 566 | ||
| 586 | if goodsAmount == 0 then | 567 | if goodsAmount == 0 then |
| 587 | local coreReward = self:getCore(record, recordAmount, now) | 568 | local coreReward = self:getCore(record, recordAmount, now) |
| 588 | - rewardToNtyFunc(notify, coreReward) | 569 | + rewardToRecordFunc(notify, recordAmount, coreReward) |
| 589 | 570 | ||
| 590 | - local lastReward = self:getLast(record, now) | ||
| 591 | - rewardToNtyFunc(notify, lastReward) | 571 | + local lastReward = self:getLast(record, recordAmount, now) |
| 572 | + rewardToRecordFunc(notify, recordAmount, lastReward) | ||
| 592 | 573 | ||
| 593 | - local jokerReward = self:getJoker(record, now) | ||
| 594 | - rewardToNtyFunc(notify, jokerReward) | 574 | + local jokerReward = self:getJoker(record, recordAmount, now) |
| 575 | + rewardToRecordFunc(notify, recordAmount, jokerReward) | ||
| 595 | 576 | ||
| 596 | - local kingReward = self:getKing(record, now) | ||
| 597 | - rewardToNtyFunc(notify, kingReward) | 577 | + local kingReward = self:getKing(record, recordAmount, now) |
| 578 | + rewardToRecordFunc(notify, recordAmount, kingReward) | ||
| 598 | end | 579 | end |
| 599 | 580 | ||
| 600 | return notify | 581 | return notify |
| @@ -679,22 +660,25 @@ end | @@ -679,22 +660,25 @@ end | ||
| 679 | local rewardCollect = function(reward, goods) | 660 | local rewardCollect = function(reward, goods) |
| 680 | for _, v in pairs(goods) do | 661 | for _, v in pairs(goods) do |
| 681 | for id, count in pairs(v.award:toNumMap()) do | 662 | for id, count in pairs(v.award:toNumMap()) do |
| 682 | - reward[id] = (reward[id] or 0) + count | 663 | + reward[id] = (reward[id] or 0) + count * v.amount |
| 683 | end | 664 | end |
| 684 | end | 665 | end |
| 685 | end | 666 | end |
| 686 | 667 | ||
| 687 | local rewardCollectByRoleId = function(roleId, reward, goods) | 668 | local rewardCollectByRoleId = function(roleId, reward, goods) |
| 688 | local tmp = {} | 669 | local tmp = {} |
| 689 | - for key, val in pairs(goods) do | ||
| 690 | - if roleId == key then | ||
| 691 | - for k, v in pairs(val) do | 670 | + for _, val in pairs(goods) do |
| 671 | + for _, v in ipairs(val) do | ||
| 672 | + if v.roleId == roleId then | ||
| 692 | for id, count in pairs(v.award:toNumMap()) do | 673 | for id, count in pairs(v.award:toNumMap()) do |
| 693 | - reward[id] = (reward[id] or 0) + count | 674 | + reward[id] = (reward[id] or 0) + count * v.amount |
| 675 | + end | ||
| 676 | + if not tmp[v.good_id] then | ||
| 677 | + tmp[v.good_id] = v | ||
| 678 | + else | ||
| 679 | + tmp[v.good_id].amount = tmp[v.good_id].amount + v.amount | ||
| 694 | end | 680 | end |
| 695 | - | ||
| 696 | end | 681 | end |
| 697 | - tmp = val | ||
| 698 | end | 682 | end |
| 699 | end | 683 | end |
| 700 | return tmp | 684 | return tmp |
| @@ -898,17 +882,16 @@ end | @@ -898,17 +882,16 @@ end | ||
| 898 | --检查是否有未领取奖励的通知 | 882 | --检查是否有未领取奖励的通知 |
| 899 | function Capsule:getSpecialNotify(roleId) | 883 | function Capsule:getSpecialNotify(roleId) |
| 900 | local specialsRecord = self:getProperty("specialsRecord") or {} | 884 | local specialsRecord = self:getProperty("specialsRecord") or {} |
| 901 | - local specialsRecordByRole = specialsRecord[roleId] | ||
| 902 | - if not specialsRecordByRole then return nil end | ||
| 903 | - | ||
| 904 | local tmp = {} | 885 | local tmp = {} |
| 905 | - for good_id, good in pairs(specialsRecordByRole) do | ||
| 906 | - if not good.nty or good.nty == 0 then | ||
| 907 | - tmp[good_id] = good | 886 | + for _, goods in pairs(specialsRecord) do |
| 887 | + for _, good in ipairs(goods) do | ||
| 888 | + if good.roleId == roleId then | ||
| 889 | + if not good.nty or good.nty == 0 then | ||
| 890 | + tmp[good.good_id] = good | ||
| 891 | + end | ||
| 892 | + end | ||
| 908 | end | 893 | end |
| 909 | end | 894 | end |
| 910 | - | ||
| 911 | - specialsRecord[roleId] = specialsRecordByRole | ||
| 912 | self:setProperty("specialsRecord", specialsRecord) | 895 | self:setProperty("specialsRecord", specialsRecord) |
| 913 | 896 | ||
| 914 | return tmp | 897 | return tmp |
| @@ -916,16 +899,15 @@ end | @@ -916,16 +899,15 @@ end | ||
| 916 | 899 | ||
| 917 | function Capsule:clearSpecialNty(roleId, good_ids) | 900 | function Capsule:clearSpecialNty(roleId, good_ids) |
| 918 | local specialsRecord = self:getProperty("specialsRecord") or {} | 901 | local specialsRecord = self:getProperty("specialsRecord") or {} |
| 919 | - local specialsRecordByRole = specialsRecord[roleId] | ||
| 920 | - if not specialsRecordByRole then return nil end | ||
| 921 | - | ||
| 922 | - for _, good_id in ipairs(good_ids) do | ||
| 923 | - if specialsRecordByRole[good_id] then | ||
| 924 | - specialsRecordByRole[good_id].nty = 1 | 902 | + for _, goods in pairs(specialsRecord) do |
| 903 | + for _, good in ipairs(goods) do | ||
| 904 | + for _, good_id in ipairs(good_ids) do | ||
| 905 | + if good_id == good.good_id and good.roleId == roleId then | ||
| 906 | + good.nty = 1 | ||
| 907 | + end | ||
| 908 | + end | ||
| 925 | end | 909 | end |
| 926 | end | 910 | end |
| 927 | - | ||
| 928 | - specialsRecord[roleId] = specialsRecordByRole | ||
| 929 | self:setProperty("specialsRecord", specialsRecord) | 911 | self:setProperty("specialsRecord", specialsRecord) |
| 930 | end | 912 | end |
| 931 | 913 |
src/services/capsuled.lua
| @@ -118,13 +118,11 @@ function CMD.reset() | @@ -118,13 +118,11 @@ function CMD.reset() | ||
| 118 | for _, val in ipairs(data) do | 118 | for _, val in ipairs(data) do |
| 119 | if val.type == 1 then | 119 | if val.type == 1 then |
| 120 | local key = val.id..val.room | 120 | local key = val.id..val.room |
| 121 | - if not capsules[key] then | ||
| 122 | - local capsule = require("models.Capsule").new({ key = CAPSULE_PUBLIC:format(key), id= val.id, room = val.room, typ = 1, name=val.name}) | ||
| 123 | - capsule:init() | ||
| 124 | - capsule:create() | ||
| 125 | - capsules[key] = capsule | ||
| 126 | - redisproxy:sadd(CAPSULE_INFO, key) | ||
| 127 | - end | 121 | + local capsule = require("models.Capsule").new({ key = CAPSULE_PUBLIC:format(key), id= val.id, room = val.room, typ = 1, name=val.name}) |
| 122 | + capsule:init() | ||
| 123 | + capsule:create() | ||
| 124 | + capsules[key] = capsule | ||
| 125 | + redisproxy:sadd(CAPSULE_INFO, key) | ||
| 128 | end | 126 | end |
| 129 | end | 127 | end |
| 130 | end | 128 | end |