Commit 078bdb2fca0739af145cd47af2257ec40d93e93e

Authored by zhangqijia
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
... ...