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 | 44 | goods = {"table", {}}, --奖励池 |
| 45 | 45 | specials = {"table", {}}, --特殊赏 |
| 46 | 46 | incentive = {"table", {}}, --激励奖 |
| 47 | - incentiveRecord = {"table", {}}, --激励奖记录 | |
| 48 | - specialsRecord= {"table", {}}, --特殊赏领取记录 | |
| 47 | + incentiveRecord = {"table", {}}, --激励奖记录 {roleId = {}, roleId={}} | |
| 48 | + specialsRecord= {"table", {}}, --特殊赏领取记录 {1={},2={}} key=触发特殊赏的 抽奖次数, v=特殊赏商品 table | |
| 49 | 49 | resetTimes = {"number", 0}, --每日一次手动重置的机会 |
| 50 | 50 | hideTime = {"number", 0} , --隐藏时间 |
| 51 | 51 | drawEndTime = {"number", 0}, --抽完时间 |
| ... | ... | @@ -323,7 +323,7 @@ function Capsule:checkSpecialFlag(typ) |
| 323 | 323 | return spKey, special |
| 324 | 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 | 327 | local rewardByRole = {} |
| 328 | 328 | while(count > 0 and next(rewardRecord)) do |
| 329 | 329 | local roleId = math.randWeight(rewardRecord, "amount") |
| ... | ... | @@ -334,19 +334,9 @@ local function getSpecialRoleNotify(rewardRecord, count, award, spKey, typ, now) |
| 334 | 334 | |
| 335 | 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 | 341 | count = count - 1 |
| 352 | 342 | end |
| ... | ... | @@ -355,20 +345,11 @@ local function getSpecialRoleNotify(rewardRecord, count, award, spKey, typ, now) |
| 355 | 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 | 353 | end |
| 373 | 354 | end |
| 374 | 355 | |
| ... | ... | @@ -406,12 +387,12 @@ function Capsule:getTop(record, recordAmount,now) |
| 406 | 387 | end |
| 407 | 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 | 392 | special["amount"] = count |
| 412 | 393 | specials[spKey] = special |
| 413 | 394 | |
| 414 | - rewardToNtyFunc(specialsRecord, rewardByRole) | |
| 395 | + rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole) | |
| 415 | 396 | |
| 416 | 397 | self:setProperties({specialsRecord = specialsRecord, specials = specials}) |
| 417 | 398 | return rewardByRole |
| ... | ... | @@ -455,17 +436,17 @@ function Capsule:getCore(record, recordAmount,now) |
| 455 | 436 | |
| 456 | 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 | 441 | special["amount"] = count |
| 461 | 442 | specials[spKey] = special |
| 462 | 443 | |
| 463 | - rewardToNtyFunc(specialsRecord, rewardByRole) | |
| 444 | + rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole) | |
| 464 | 445 | self:setProperties({specialsRecord = specialsRecord, specials = specials}) |
| 465 | 446 | return rewardByRole |
| 466 | 447 | end |
| 467 | 448 | |
| 468 | -function Capsule:getLast(record,now) | |
| 449 | +function Capsule:getLast(record, recordAmount, now) | |
| 469 | 450 | local spKey, special = self:checkSpecialFlag(SpecialType.LAST) |
| 470 | 451 | if not special then return nil end |
| 471 | 452 | |
| ... | ... | @@ -495,17 +476,17 @@ function Capsule:getLast(record,now) |
| 495 | 476 | end |
| 496 | 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 | 481 | special["amount"] = count |
| 501 | 482 | specials[spKey] = special |
| 502 | 483 | |
| 503 | - rewardToNtyFunc(specialsRecord, rewardByRole) | |
| 484 | + rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole) | |
| 504 | 485 | self:setProperties({specialsRecord = specialsRecord, specials = specials}) |
| 505 | 486 | return rewardByRole |
| 506 | 487 | end |
| 507 | 488 | |
| 508 | -function Capsule:getJoker(record,now) | |
| 489 | +function Capsule:getJoker(record, recordAmount, now) | |
| 509 | 490 | local spKey, special = self:checkSpecialFlag(SpecialType.JOKER) |
| 510 | 491 | if not special then return nil end |
| 511 | 492 | |
| ... | ... | @@ -521,17 +502,17 @@ function Capsule:getJoker(record,now) |
| 521 | 502 | end |
| 522 | 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 | 507 | special["amount"] = count |
| 527 | 508 | specials[spKey] = special |
| 528 | 509 | |
| 529 | - rewardToNtyFunc(specialsRecord, rewardByRole) | |
| 510 | + rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole) | |
| 530 | 511 | self:setProperties({specialsRecord = specialsRecord, specials = specials}) |
| 531 | 512 | return rewardByRole |
| 532 | 513 | end |
| 533 | 514 | |
| 534 | -function Capsule:getKing(record,now) | |
| 515 | +function Capsule:getKing(record, recordAmount, now) | |
| 535 | 516 | local spKey, special = self:checkSpecialFlag(SpecialType.KING) |
| 536 | 517 | if not special then return nil end |
| 537 | 518 | |
| ... | ... | @@ -566,7 +547,7 @@ function Capsule:getKing(record,now) |
| 566 | 547 | special["amount"] = count |
| 567 | 548 | specials[spKey] = special |
| 568 | 549 | |
| 569 | - rewardToNtyFunc(specialsRecord, rewardByRole) | |
| 550 | + rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole) | |
| 570 | 551 | self:setProperties({specialsRecord = specialsRecord, specials = specials}) |
| 571 | 552 | return rewardByRole |
| 572 | 553 | end |
| ... | ... | @@ -585,16 +566,16 @@ function Capsule:checkSpecialReward(now, goodsAmount) |
| 585 | 566 | |
| 586 | 567 | if goodsAmount == 0 then |
| 587 | 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 | 579 | end |
| 599 | 580 | |
| 600 | 581 | return notify |
| ... | ... | @@ -679,22 +660,25 @@ end |
| 679 | 660 | local rewardCollect = function(reward, goods) |
| 680 | 661 | for _, v in pairs(goods) do |
| 681 | 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 | 664 | end |
| 684 | 665 | end |
| 685 | 666 | end |
| 686 | 667 | |
| 687 | 668 | local rewardCollectByRoleId = function(roleId, reward, goods) |
| 688 | 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 | 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 | 680 | end |
| 695 | - | |
| 696 | 681 | end |
| 697 | - tmp = val | |
| 698 | 682 | end |
| 699 | 683 | end |
| 700 | 684 | return tmp |
| ... | ... | @@ -898,17 +882,16 @@ end |
| 898 | 882 | --检查是否有未领取奖励的通知 |
| 899 | 883 | function Capsule:getSpecialNotify(roleId) |
| 900 | 884 | local specialsRecord = self:getProperty("specialsRecord") or {} |
| 901 | - local specialsRecordByRole = specialsRecord[roleId] | |
| 902 | - if not specialsRecordByRole then return nil end | |
| 903 | - | |
| 904 | 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 | 893 | end |
| 909 | 894 | end |
| 910 | - | |
| 911 | - specialsRecord[roleId] = specialsRecordByRole | |
| 912 | 895 | self:setProperty("specialsRecord", specialsRecord) |
| 913 | 896 | |
| 914 | 897 | return tmp |
| ... | ... | @@ -916,16 +899,15 @@ end |
| 916 | 899 | |
| 917 | 900 | function Capsule:clearSpecialNty(roleId, good_ids) |
| 918 | 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 | 909 | end |
| 926 | 910 | end |
| 927 | - | |
| 928 | - specialsRecord[roleId] = specialsRecordByRole | |
| 929 | 911 | self:setProperty("specialsRecord", specialsRecord) |
| 930 | 912 | end |
| 931 | 913 | ... | ... |
src/services/capsuled.lua
| ... | ... | @@ -118,13 +118,11 @@ function CMD.reset() |
| 118 | 118 | for _, val in ipairs(data) do |
| 119 | 119 | if val.type == 1 then |
| 120 | 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 | 126 | end |
| 129 | 127 | end |
| 130 | 128 | end | ... | ... |