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,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