Blame view

src/models/Capsule.lua 28.8 KB
555f745e   zhangqijia   feat: 一番赏
1
2
3
4
5
6
7
8
  --扭蛋机
  local MsgPack = MsgPack
  local Capsule = class("Capsule", require("shared.ModelBase"))
  
  function Capsule:ctor(properties)
      Capsule.super.ctor(self, properties)
  end
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
9
10
11
12
13
14
15
  RewardType = {
      GOODS = 1,
      SPECIAL = 2,
      INCENTIVE = 3,
  }
  
  SpecialType = {
555f745e   zhangqijia   feat: 一番赏
16
17
18
19
20
      TOP = 1,
      CORE = 2,
      LAST = 3,
      JOKER = 4,
      KING = 5,
555f745e   zhangqijia   feat: 一番赏
21
22
23
24
25
26
27
  }
  
  CapsuleType = {
      PRIVATE = 0,
      PUBLIC = 1,
  }
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
28
29
  --[[
  --通知数据结构
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
30
  { [roleId] = { [good_id1] = { }, [good_id2] = { }, } }
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
31
32
  ]]--
  
555f745e   zhangqijia   feat: 一番赏
33
34
35
  Capsule.schema = {
      id = {"number", 0}, --扭蛋机key,配置读取
      room = {"number", 0}, --房间号, 配置读取
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
36
      name = {"string"},
555f745e   zhangqijia   feat: 一番赏
37
38
      typ = {"number", 1}, -- 1=共享,2=独享
      coin = {"number", 0}, --货币代号
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
39
      token = {"table", {}}, --抽一次,货币=消耗
555f745e   zhangqijia   feat: 一番赏
40
41
42
43
44
45
46
      register = {"table", {}}, --人数 {["id"]=0}, 0 围观, 1 已报名
      record = {"table", {}}, --抽取记录  列表
      recordByRole = {"table", {}}, -- 抽取记录,hash, {roleid=record}
      rank = {"table", {}}, --排行
      goods = {"table", {}}, --奖励池
      specials = {"table", {}}, --特殊赏
      incentive = {"table", {}}, --激励奖
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
47
48
      incentiveRecord = {"table", {}}, --激励奖记录 {roleId = {}, roleId={}}
      specialsRecord= {"table", {}}, --特殊赏领取记录 {1={},2={}} key=触发特殊赏的 抽奖次数, v=特殊赏商品 table
555f745e   zhangqijia   feat: 一番赏
49
50
51
52
53
      resetTimes = {"number", 0}, --每日一次手动重置的机会
      hideTime = {"number", 0} , --隐藏时间
      drawEndTime = {"number", 0}, --抽完时间
  }
  
555f745e   zhangqijia   feat: 一番赏
54
55
56
57
58
59
  function Capsule:getResetFields()
      return {
          id = self:getProperty("id"),
          room = self:getProperty("room"),
          typ = self:getProperty("typ"),
          coin = 0,
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
60
          token = {},
555f745e   zhangqijia   feat: 一番赏
61
62
63
64
65
66
67
          register = {},
          record = {},
          recordByRole = {},
          rank = {},
          goods = {},
          specials = {},
          incentive = {},
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
68
          incentiveRecord = {},
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
69
          specialsRecord= {},
555f745e   zhangqijia   feat: 一番赏
70
          resetTimes = 0,
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
71
72
          hideTime = 0,
          drawEndTime = 0,
555f745e   zhangqijia   feat: 一番赏
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
      }
  end
  
  function Capsule:init()
      local id = self:getProperty("id")
      local room = self:getProperty("room")
      self:setProperties(self:getResetFields())
  
      local ichibankuji = csvdb["ichibankuji_mainCsv"][id][room]
  
      --奖励池
      local goods_id = ichibankuji["goods_id"]
      local goods, specials, incentive = {}, {}, {}
      for _, data in pairs(csvdb["ichibankuji_goodsCsv"]) do
          for _, val in pairs(data) do
              if val.key == goods_id then
50a0dd50   zhangqijia   fix: 一番赏 重新组合商品id
89
                  goods[goods_id..val.id] = clone(val)
555f745e   zhangqijia   feat: 一番赏
90
91
92
              end
          end
      end
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
93
      for _, v in pairs(goods) do
555f745e   zhangqijia   feat: 一番赏
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
          v.weight = (v.weight or 0) * v.amount
      end
  
      --特殊赏
      local special_ids = ichibankuji["special_id"]
      if special_ids ~= "" then
          for _, special_id in ipairs(special_ids:toArray(true, "=")) do
              local val = csvdb["ichibankuji_specialCsv"][special_id]
              if type(val.type) == "number" then
                  specials[special_id] = {np= 1, amount = val.amount, award = val.award, quality = tonumber(val.type), showIndex = val.showIndex}
              elseif type(val.type) == "string" then
                  local pos = val.type:find("=")
                  if pos then
                      for k, v in pairs(val.type:toNumMap()) do
                          specials[special_id] = {np= v, amount = val.amount, award = val.award, quality = k, showIndex = val.showIndex}
                      end
                  else
                      specials[special_id] = {np= 1, amount = val.amount, award = val.award, quality = tonumber(val.type), showIndex = val.showIndex}
                  end
              end
          end
      end
  
      --激励奖
      local incentive_ids = ichibankuji["incentive_id"]
      if incentive_ids ~= "" then
          for _, incentive_id in ipairs(incentive_ids:toArray(true, "=")) do
              local val = csvdb["ichibankuji_incentiveCsv"][incentive_id]
              if type(val.type) == "number" then
                  incentive["last"] = {np=val.type, award = val.award}
              elseif type(val.type) == "string" then
                  for k, v in pairs(val.type:toNumMap()) do
                      if k == 2 then
                          incentive["amount"] = {np= v, award = val.award}
                      elseif k==3 then
                          incentive["probabilities"] = {np= v, award = val.award}
                      end
                  end
              end
          end
      end
      --货币类型
      local coin = ichibankuji["token"]:toArray(true, "=")
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
137
      self:setProperties({coin = coin[1] or 0, token = coin, hideTime = ichibankuji.hide_time, goods = goods, specials = specials, incentive = incentive})
49810b00   zhangqijia   fix: 一番赏 抽奖记录 去掉a...
138
  
555f745e   zhangqijia   feat: 一番赏
139
140
  end
  
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
141
142
143
144
145
146
147
  function Capsule:isShow()
      if skynet.timex() >= self:getProperty("hideTime") then
          return false
      end
      return true
  end
  
7f21f75b   zhangqijia   fix: 一番赏 增加rank,刷...
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
  function Capsule:resetTimeOut(curTime, now)
      now = now or skynet.timex()
      local cur4Time = curTime or (specTime({hour = 4},now))
  
      local interval
      if cur4Time > now then
          interval = cur4Time - now
      elseif cur4Time < now then
          local nextTime = dayLater(now)
          interval = nextTime - now
      elseif cur4Time == now then
          self:init()
          self:create()
  
          local nextTime = dayLater(now)
          interval = nextTime - now
      end
      interval = (interval + 1)* 100
      skynet.timeout(interval, handler(self,self.resetTimeOut))
  end
  
  function Capsule:reset4TimeOut(curTime, now)
      now = now or skynet.timex()
      local interval
      if curTime > now then
          interval = curTime - now
      elseif curTime < now then
          local nextTime = dayLater(now)
          interval = nextTime - now
      elseif curTime == now then
          self:init()
          self:create()
  
          return false
      end
      interval = (interval + 1)* 100
      skynet.timeout(interval, handler(self,self.reset4TimeOut))
  end
  
  function Capsule:checkTime(resetArr, now)
      if resetArr[1] == "3" then
          local cur4Time = specTime({hour = 4},now)
          if now == cur4Time then return true end
          self:resetTimeOut(cur4Time, now)
      elseif resetArr[1] == "4" then
          if now == resetArr[2] then return true end
          self:reset4TimeOut(resetArr[2], now)
      end
  end
  
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
  function Capsule:refreshing(now)
      local id = self:getProperty("id")
      local room = self:getProperty("room")
      local ichibankuji = csvdb["ichibankuji_mainCsv"][id][room]
      local reset = tostring(ichibankuji.reset)
  
      if reset == "0" then
          return false
      elseif reset == "1" then
          if self:getProperty("resetTimes") == 1 then
              return true
          end
          return false
      else
          local resetArr = reset:toArray(true, "=")
          if not next(resetArr) then return false end
  
          if resetArr[1] == "2" then
              if self:getGoodsAmount() > 0 then return false end
  
              local drawEndTime = self:getProperty("drawEndTime") or 0
              if drawEndTime == 0 then return false end
  
              if now - drawEndTime >= resetArr[2] then
                  return true
              end
              return false
  
7f21f75b   zhangqijia   fix: 一番赏 增加rank,刷...
226
227
          else
              self:checkTime(resetArr, now)
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
228
          end
7f21f75b   zhangqijia   fix: 一番赏 增加rank,刷...
229
  
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
230
231
232
233
234
      end
  
      return false
  end
  
555f745e   zhangqijia   feat: 一番赏
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
  function Capsule:getOnlineCount()
      local register = self:getProperty("register") or {}
      local reg, onlookers = 0, 0
      for _, v in pairs(register) do
          if v == 1 then
              reg = reg + 1
          else
              onlookers = onlookers + 1
          end
      end
      return {[0]=onlookers, [1]=reg, [2] = reg+onlookers}
  end
  
  function Capsule:join(roleId)
      --一个房间最多人数 TODO
      local register = self:getProperty("register") or {}
      register[roleId] = 0
      self:setProperty("register", register)
f382b4f2   zhangqijia   fix: 一番赏的抽奖bug
253
      return self:data(roleId)
555f745e   zhangqijia   feat: 一番赏
254
255
  end
  
f382b4f2   zhangqijia   fix: 一番赏的抽奖bug
256
  function Capsule:getRegisterByRoleId(roleId)
555f745e   zhangqijia   feat: 一番赏
257
      local register = self:getProperty("register") or {}
f382b4f2   zhangqijia   fix: 一番赏的抽奖bug
258
259
260
261
262
      return register[roleId] or 0
  end
  
  function Capsule:isRegister(roleId)
      return self:getRegisterByRoleId(roleId) == 1
555f745e   zhangqijia   feat: 一番赏
263
264
265
266
  end
  
  function Capsule:register(roleId)
      local register = self:getProperty("register") or {}
f382b4f2   zhangqijia   fix: 一番赏的抽奖bug
267
268
269
      register[roleId] = 1
      self:setProperty("register", register)
      return self:data(roleId)
555f745e   zhangqijia   feat: 一番赏
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
  end
  
  function Capsule:exit(roleId)
      local register = self:getProperty("register") or {}
      if next(register) then
          register[roleId] = nil
          return true
      end
      return false
  end
  
  function Capsule:confirmed(cares)
      local goods = self:getProperty("goods") or {}
      local specials = self:getProperty("specials") or {}
      local change = {}
      for k, v in pairs(cares) do
          if v.typ == 1 then
              if goods[k] and goods[k].amount ~= v.count then
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
288
                  change[k] = {typ=1, count = goods[k].amount}
555f745e   zhangqijia   feat: 一番赏
289
290
291
              end
          else
              if specials[k] and specials[k].amount ~= v.count then
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
292
                  change[k] = {typ=1, count = specials[k].amount}
555f745e   zhangqijia   feat: 一番赏
293
294
295
296
297
298
299
300
301
              end
          end
      end
      return change
  end
  
  function Capsule:getGoodsAmount()
      local goods = self:getProperty("goods") or {}
      local amount = 0
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
302
      for _, v in pairs(goods) do
555f745e   zhangqijia   feat: 一番赏
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
          amount = amount + v.amount
      end
      return amount
  end
  
  function Capsule:getSpecialByType(typ)
      local specials = self:getProperty("specials") or {}
      for k, v in pairs(specials) do
          if v.quality == typ then
              return k, v
          end
      end
      return nil
  end
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
318
319
  function Capsule:checkSpecialFlag(typ)
      local spKey, special = self:getSpecialByType(typ)
555f745e   zhangqijia   feat: 一番赏
320
321
      if not special then return nil end
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
322
323
324
      if special["amount"] <= 0 then return nil end
      return spKey, special
  end
555f745e   zhangqijia   feat: 一番赏
325
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
326
  local function getSpecialReward(rewardRecord, count, award, spKey, typ, now)
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
327
328
329
330
      local rewardByRole = {}
      while(count > 0 and next(rewardRecord)) do
          local roleId = math.randWeight(rewardRecord, "amount")
          if roleId then
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
331
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
332
333
334
335
              local tmp = rewardRecord[roleId]
              tmp["amount"] = tmp["amount"] - 1
  
              if tmp["amount"] <= 0 then rewardRecord[roleId] = nil end
555f745e   zhangqijia   feat: 一番赏
336
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
337
338
339
              local name = getNameByRoleId(roleId)
              tmp = {name = name, good_id = spKey, typ = RewardType.SPECIAL, award = award, amount = 1, quality = typ, create_time= now}
              table.insert(rewardByRole, tmp)
555f745e   zhangqijia   feat: 一番赏
340
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
341
342
343
344
345
              count = count - 1
          end
      end
      return rewardByRole, count
  end
555f745e   zhangqijia   feat: 一番赏
346
  
0a421d34   zhangqijia   fix: 一番赏奖励 刷新协议缺少...
347
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
348
349
350
351
352
  local rewardToRecordFunc = function(specialsRecord, recordAmount, rewardByRole)
      if not specialsRecord[recordAmount] then
          specialsRecord[recordAmount] = rewardByRole
      else
          table.insert(specialsRecord[recordAmount], rewardByRole)
0a421d34   zhangqijia   fix: 一番赏奖励 刷新协议缺少...
353
354
355
356
      end
  end
  
  local function getRecordAmount(record)
49810b00   zhangqijia   fix: 一番赏 抽奖记录 去掉a...
357
       return #record
0a421d34   zhangqijia   fix: 一番赏奖励 刷新协议缺少...
358
359
360
361
  end
  
  
  function Capsule:getTop(record, recordAmount,now)
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
362
363
364
365
      local spKey, special = self:checkSpecialFlag(SpecialType.TOP)
      if not special then return nil end
      local specials = self:getProperty("specials") or {}
      local specialsRecord = self:getProperty("specialsRecord") or {}
555f745e   zhangqijia   feat: 一番赏
366
  
0a421d34   zhangqijia   fix: 一番赏奖励 刷新协议缺少...
367
368
      if recordAmount < special["np"] then return  nil end
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
369
370
371
372
      local topRecord = {}
      local count = special["np"]
      for _, v in ipairs(record) do
          if count <= 0 then break end
555f745e   zhangqijia   feat: 一番赏
373
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
374
375
376
377
378
379
380
          local tmpCount = 0
          if count >= v.amount then
              count = count - v.amount
              tmpCount = v.amount
          else
              tmpCount = count
              count = 0
555f745e   zhangqijia   feat: 一番赏
381
382
          end
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
383
384
385
386
387
          if not topRecord[v.roleId]then
              topRecord[v.roleId]  = {amount = v.amount }
          else
              topRecord[v.roleId] = {amount = (topRecord[v.roleId]["amount"] or 0) + tmpCount}
          end
555f745e   zhangqijia   feat: 一番赏
388
389
      end
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
390
      local rewardByRole, count = getSpecialReward(topRecord, special["amount"], special["award"], spKey, SpecialType.TOP,now)
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
391
392
393
  
      special["amount"] = count
      specials[spKey] = special
0a421d34   zhangqijia   fix: 一番赏奖励 刷新协议缺少...
394
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
395
      rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole)
0a421d34   zhangqijia   fix: 一番赏奖励 刷新协议缺少...
396
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
397
398
399
      self:setProperties({specialsRecord = specialsRecord, specials = specials})
      return rewardByRole
  
555f745e   zhangqijia   feat: 一番赏
400
401
402
  end
  
  --TODO
0a421d34   zhangqijia   fix: 一番赏奖励 刷新协议缺少...
403
  function Capsule:getCore(record, recordAmount,now)
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
404
405
      local spKey, special = self:checkSpecialFlag(SpecialType.CORE)
      if not special then return nil end
555f745e   zhangqijia   feat: 一番赏
406
407
  
      local specials = self:getProperty("specials") or {}
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
408
409
      local specialsRecord = self:getProperty("specialsRecord") or {}
  
49df162b   zhangqijia   fix: 一番赏 增加drawEn...
410
  
555f745e   zhangqijia   feat: 一番赏
411
  
f66891be   zhangqijia   fix: 一番赏 打开激励奖导致抽...
412
413
      local count = special["np"]
      if count > recordAmount then return nil end
555f745e   zhangqijia   feat: 一番赏
414
415
  
  
f66891be   zhangqijia   fix: 一番赏 打开激励奖导致抽...
416
      local left = math.ceil((count - recordAmount)/2) or 0
555f745e   zhangqijia   feat: 一番赏
417
418
419
420
421
422
423
424
425
426
427
428
429
      local roleRecord = {}
      for i, v in ipairs(record) do
          if count <= 0 then break end
          if i > left then
              local tmpCount = 0
              if count >= v.amount then
                  count = count - v.amount
                  tmpCount = v.amount
              else
                  tmpCount = count
                  count = 0
              end
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
430
431
              if not roleRecord[v.roleId]then
                  roleRecord[v.roleId]  = {amount = v.amount }
555f745e   zhangqijia   feat: 一番赏
432
              else
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
433
                  roleRecord[v.roleId] = {amount = (roleRecord[v.roleId]["amount"] or 0) + tmpCount}
555f745e   zhangqijia   feat: 一番赏
434
435
436
437
438
              end
          end
  
      end
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
439
      local rewardByRole, count = getSpecialReward(roleRecord, special["amount"], special["award"], spKey, SpecialType.CORE,now)
555f745e   zhangqijia   feat: 一番赏
440
  
555f745e   zhangqijia   feat: 一番赏
441
442
      special["amount"] = count
      specials[spKey] = special
0a421d34   zhangqijia   fix: 一番赏奖励 刷新协议缺少...
443
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
444
      rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole)
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
445
446
      self:setProperties({specialsRecord = specialsRecord, specials = specials})
      return rewardByRole
555f745e   zhangqijia   feat: 一番赏
447
448
  end
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
449
  function Capsule:getLast(record, recordAmount, now)
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
450
451
      local spKey, special = self:checkSpecialFlag(SpecialType.LAST)
      if not special then return nil end
555f745e   zhangqijia   feat: 一番赏
452
453
  
      local specials = self:getProperty("specials") or {}
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
454
      local specialsRecord = self:getProperty("specialsRecord") or {}
555f745e   zhangqijia   feat: 一番赏
455
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
456
      table.sort(record, function(a, b) return a.create_time > b.create_time end)
555f745e   zhangqijia   feat: 一番赏
457
  
f66891be   zhangqijia   fix: 一番赏 打开激励奖导致抽...
458
      local count = special["np"]
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
459
      local roleRecord = {}
555f745e   zhangqijia   feat: 一番赏
460
461
462
463
464
465
466
467
468
469
470
471
      for _, v in ipairs(record) do
          if count <= 0 then break end
  
          local tmpCount = 0
          if count >= v.amount then
              count = count - v.amount
              tmpCount = v.amount
          else
              tmpCount = count
              count = 0
          end
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
472
473
          if not roleRecord[v.roleId]then
              roleRecord[v.roleId]  = {amount = v.amount }
555f745e   zhangqijia   feat: 一番赏
474
          else
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
475
              roleRecord[v.roleId] = {amount = (roleRecord[v.roleId]["amount"] or 0) + tmpCount}
555f745e   zhangqijia   feat: 一番赏
476
477
478
          end
      end
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
479
      local rewardByRole, count = getSpecialReward(roleRecord, special["amount"], special["award"], spKey, SpecialType.LAST,now)
555f745e   zhangqijia   feat: 一番赏
480
  
555f745e   zhangqijia   feat: 一番赏
481
482
      special["amount"] = count
      specials[spKey] = special
0a421d34   zhangqijia   fix: 一番赏奖励 刷新协议缺少...
483
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
484
      rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole)
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
485
486
      self:setProperties({specialsRecord = specialsRecord, specials = specials})
      return rewardByRole
555f745e   zhangqijia   feat: 一番赏
487
488
  end
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
489
  function Capsule:getJoker(record, recordAmount, now)
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
490
491
      local spKey, special = self:checkSpecialFlag(SpecialType.JOKER)
      if not special then return nil end
555f745e   zhangqijia   feat: 一番赏
492
493
  
      local specials = self:getProperty("specials") or {}
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
494
495
      local specialsRecord = self:getProperty("specialsRecord") or {}
  
555f745e   zhangqijia   feat: 一番赏
496
497
      local roleRecord = {}
      for _, v in ipairs(record) do
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
498
499
          if not roleRecord[v.roleId]then
              roleRecord[v.roleId]  = {amount = v.amount }
555f745e   zhangqijia   feat: 一番赏
500
          else
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
501
              roleRecord[v.roleId] = {amount = (roleRecord[v.roleId]["amount"] or 0) + v.amount}
555f745e   zhangqijia   feat: 一番赏
502
503
504
          end
      end
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
505
      local rewardByRole, count = getSpecialReward(roleRecord, special["amount"], special["award"], spKey, SpecialType.JOKER,now)
555f745e   zhangqijia   feat: 一番赏
506
  
555f745e   zhangqijia   feat: 一番赏
507
508
      special["amount"] = count
      specials[spKey] = special
0a421d34   zhangqijia   fix: 一番赏奖励 刷新协议缺少...
509
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
510
      rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole)
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
511
512
      self:setProperties({specialsRecord = specialsRecord, specials = specials})
      return rewardByRole
555f745e   zhangqijia   feat: 一番赏
513
514
  end
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
515
  function Capsule:getKing(record, recordAmount, now)
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
516
517
      local spKey, special = self:checkSpecialFlag(SpecialType.KING)
      if not special then return nil end
555f745e   zhangqijia   feat: 一番赏
518
519
  
      local specials = self:getProperty("specials") or {}
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
520
      local specialsRecord = self:getProperty("specialsRecord") or {}
7f21f75b   zhangqijia   fix: 一番赏 增加rank,刷...
521
522
      local rank = self:getProperty("rank") or {}
      if not next(rank) then return nil end
555f745e   zhangqijia   feat: 一番赏
523
  
555f745e   zhangqijia   feat: 一番赏
524
      local roleRecord = {}
7f21f75b   zhangqijia   fix: 一番赏 增加rank,刷...
525
526
527
528
529
530
  
      for roleId, count in pairs(rank) do
          table.insert(roleRecord, {roleId = roleId, count = count})
      end
      table.sort(roleRecord, function(a, b) return a.count > b.count end)
  
7f21f75b   zhangqijia   fix: 一番赏 增加rank,刷...
531
532
533
534
535
536
537
538
539
540
541
      local count = math.min(special["amount"], #roleRecord)
  
      local rewardByRole = {}
      local index = 1
      while (count > 0 ) do
          count  = count - 1
          local tmp = roleRecord[index]
          if not tmp then break end
          index = index + 1
  
          local name = getNameByRoleId(tmp.roleId)
f2f84157   zhangqijia   fix: 一番赏 修复king赏bug
542
          table.insert(rewardByRole, {name = name, good_id = spKey, typ = RewardType.SPECIAL, award = special["award"], amount = 1, SpecialType.KING, create_time= now})
555f745e   zhangqijia   feat: 一番赏
543
544
      end
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
545
546
      special["amount"] = count
      specials[spKey] = special
0a421d34   zhangqijia   fix: 一番赏奖励 刷新协议缺少...
547
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
548
      rewardToRecordFunc(specialsRecord, recordAmount, rewardByRole)
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
549
550
551
      self:setProperties({specialsRecord = specialsRecord, specials = specials})
      return rewardByRole
  end
555f745e   zhangqijia   feat: 一番赏
552
  
49df162b   zhangqijia   fix: 一番赏 增加drawEn...
553
  function Capsule:checkSpecialReward(now, goodsAmount)
555f745e   zhangqijia   feat: 一番赏
554
555
556
      local specials = self:getProperty("specials") or {}
      if not next(specials) then return nil end
      local record =  self:getProperty("record") or {}
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
557
  
555f745e   zhangqijia   feat: 一番赏
558
559
      if not next(record) then return nil end
      table.sort(record, function(a, b) return a.create_time < b.create_time  end )
555f745e   zhangqijia   feat: 一番赏
560
  
0a421d34   zhangqijia   fix: 一番赏奖励 刷新协议缺少...
561
      local recordAmount = getRecordAmount(record)
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
562
  
0a421d34   zhangqijia   fix: 一番赏奖励 刷新协议缺少...
563
      local notify = self:getTop(record, recordAmount,now) or {}
555f745e   zhangqijia   feat: 一番赏
564
  
49df162b   zhangqijia   fix: 一番赏 增加drawEn...
565
566
      if goodsAmount == 0 then
          local coreReward = self:getCore(record, recordAmount, now)
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
567
          rewardToRecordFunc(notify, recordAmount, coreReward)
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
568
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
569
570
          local lastReward = self:getLast(record, recordAmount, now)
          rewardToRecordFunc(notify, recordAmount, lastReward)
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
571
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
572
573
          local jokerReward = self:getJoker(record, recordAmount, now)
          rewardToRecordFunc(notify, recordAmount, jokerReward)
555f745e   zhangqijia   feat: 一番赏
574
  
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
575
576
          local kingReward = self:getKing(record, recordAmount, now)
          rewardToRecordFunc(notify, recordAmount, kingReward)
49df162b   zhangqijia   fix: 一番赏 增加drawEn...
577
      end
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
578
  
555f745e   zhangqijia   feat: 一番赏
579
580
581
      return notify
  end
  
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
582
  function Capsule:checkIncentive(roleId, name, now)
555f745e   zhangqijia   feat: 一番赏
583
      local goods = self:getProperty("goods") or {}
555f745e   zhangqijia   feat: 一番赏
584
585
      local recordByRole = self:getProperty("recordByRole") or {}
      local roleRecord = recordByRole[roleId] or {}
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
586
587
      local incentiveRecord = self:getProperty("incentiveRecord") or {}
      local incentiveByRole = incentiveRecord[roleId] or {}
555f745e   zhangqijia   feat: 一番赏
588
589
590
      local incentive = self:getProperty("incentive")
  
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
591
      local notify = {}
555f745e   zhangqijia   feat: 一番赏
592
593
594
595
596
597
598
599
600
      -- 最后一抽 TODO
      if incentive["last"] then
          local last = true
          for k, v in pairs(goods) do
              if v and v.amount then
                  last = false
                  break
              end
          end
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
601
          if last then
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
602
               notify["last"] = {name = name, good_id = "last", typ = RewardType.INCENTIVE, award = incentive["last"]["award"], amount = 1, quality = 1, create_time= now}
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
603
          end
555f745e   zhangqijia   feat: 一番赏
604
605
606
607
608
609
610
611
612
613
614
615
616
      end
  
      --次数
      if incentive["amount"] then
          local amount = 0
          for _, v in pairs(roleRecord) do
              if (v.calculated or 0) == 0 then
                  amount = amount + v.amount
              end
          end
  
          local count = math.floor(amount / incentive["amount"]["np"])
          local tmpCount = count * incentive["amount"]["np"]
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
617
          notify["amount"] = {name = name, roleId= roleId, good_id = "amount", typ = RewardType.INCENTIVE, award = incentive["amount"]["award"], amount = count, quality = 2, create_time= now}
555f745e   zhangqijia   feat: 一番赏
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
  
          --填充v.calculated 字段,标识已经用于每x抽的计算中。
          for _, v in pairs(roleRecord) do
              if tmpCount <= 0 then break end
  
              v.calculated = v.calculated or 0
              if v.calculated ~= v.amount then
                  if tmpCount <= v.amount then
                      v.calculated = tmpCount
                      tmpCount = 0
                  else
                      v.calculated = v.amount
                      tmpCount = tmpCount - v.amount
                  end
              end
  
          end
      end
  
      --概率
      if incentive["probabilities"] then
          local probabilities = math.randomInt(1, 100)
          if probabilities <= incentive["probabilities"]["np"] then
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
641
              notify["probabilities"] = {name = name, good_id = "probabilities", typ = RewardType.INCENTIVE, award = incentive["probabilities"]["award"], amount = 1, quality = 3, create_time= now}
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
642
  
555f745e   zhangqijia   feat: 一番赏
643
644
          end
      end
f66891be   zhangqijia   fix: 一番赏 打开激励奖导致抽...
645
646
647
648
649
650
651
      for k, v in pairs(notify) do
          if not incentiveByRole[k] then
              incentiveByRole[k] = v
          else
              incentiveByRole[k].amount = incentiveByRole[k].amount + v.amount
          end
      end
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
652
653
      incentiveRecord[roleId] = incentiveByRole
      self:setProperty("incentiveRecord", incentiveRecord)
555f745e   zhangqijia   feat: 一番赏
654
  
da20e384   zhangqijia   feat: 一番赏 特殊赏 通知
655
      return incentiveByRole
555f745e   zhangqijia   feat: 一番赏
656
657
  end
  
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
658
659
660
  local rewardCollect = function(reward, goods)
      for _, v in pairs(goods) do
          for id, count in pairs(v.award:toNumMap()) do
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
661
              reward[id] = (reward[id] or 0) + count * v.amount
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
662
663
664
665
666
667
          end
      end
  end
  
  local rewardCollectByRoleId = function(roleId, reward, goods)
      local tmp = {}
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
668
669
670
      for _, val in pairs(goods) do
          for _, v in ipairs(val) do
              if v.roleId == roleId then
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
671
                  for id, count in pairs(v.award:toNumMap()) do
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
672
673
674
675
676
677
                      reward[id] = (reward[id] or 0) + count * v.amount
                  end
                  if not tmp[v.good_id] then
                      tmp[v.good_id] = v
                   else
                      tmp[v.good_id].amount = tmp[v.good_id].amount + v.amount
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
678
                  end
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
679
              end
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
680
681
682
683
684
          end
      end
      return tmp
  end
  
555f745e   zhangqijia   feat: 一番赏
685
686
687
688
689
  function Capsule:drawByCount(roleId, count)
      if count <= 0 then return nil end
  
      local goods = self:getProperty("goods") or {}
      local record = self:getProperty("record") or {}
7f21f75b   zhangqijia   fix: 一番赏 增加rank,刷...
690
691
      local rank = self:getProperty("rank") or {}
      local rankRole = rank[roleId] or 0
555f745e   zhangqijia   feat: 一番赏
692
      local recordByRole = self:getProperty("recordByRole") or {}
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
693
      local roleRecord = recordByRole[roleId] or {}
555f745e   zhangqijia   feat: 一番赏
694
695
696
697
698
  
      local id = self:getProperty("id")
      local room = self:getProperty("room")
      local ichibankuji = csvdb["ichibankuji_mainCsv"][id][room]
      local goods_id = ichibankuji["goods_id"]
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
699
      local now = skynet.timex()
555f745e   zhangqijia   feat: 一番赏
700
  
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
701
702
      --奖励,普通奖品信息
      local  goodsByUsual= {}
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
703
  
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
704
      local name = getNameByRoleId(roleId)
555f745e   zhangqijia   feat: 一番赏
705
706
      while (goods and next(goods) and count > 0) do
          local good_id = math.randWeight(goods, "weight")
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
707
          if not good_id then break end
555f745e   zhangqijia   feat: 一番赏
708
  
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
709
710
711
712
          local good = goods[good_id] or {}
          if good and good.amount > 0 then
              good.amount = good.amount - 1
  
7f21f75b   zhangqijia   fix: 一番赏 增加rank,刷...
713
714
715
              --插入rank
              rankRole = rankRole + 1
  
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
716
717
718
719
720
              --插入记录
              local tmpNotify = {roleId = roleId, name= name, good_id = good_id, typ = RewardType.GOODS, award = good.award, amount = 1, quality = good.quality, create_time= now}
              table.insert(record, tmpNotify)
  
              --作为奖励记录+通知
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
721
722
              if not goodsByUsual[good_id] then
                  goodsByUsual[good_id] = tmpNotify
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
723
              else
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
724
                  goodsByUsual[good_id].amount = goodsByUsual[good_id].amount + 1
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
725
              end
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
726
  
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
727
728
729
730
731
              --记录角色的抽奖记录 计算激励奖需要用到
              if not roleRecord[good_id] then
                  roleRecord[good_id] = tmpNotify
              else
                  roleRecord[good_id].amount = roleRecord[good_id].amount + 1
555f745e   zhangqijia   feat: 一番赏
732
              end
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
733
734
735
  
              good.weight = good.weight - csvdb["ichibankuji_goodsCsv"][goods_id][good.id].weight
              count = count - 1
555f745e   zhangqijia   feat: 一番赏
736
737
738
          end
  
      end
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
739
740
  
      --奖励池重新赋值
7f21f75b   zhangqijia   fix: 一番赏 增加rank,刷...
741
      rank[roleId] = rankRole
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
742
      recordByRole[roleId] = roleRecord
7f21f75b   zhangqijia   fix: 一番赏 增加rank,刷...
743
      self:setProperties({recordByRole = recordByRole, record = record, goods = goods, rank = rank})
555f745e   zhangqijia   feat: 一番赏
744
  
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
745
746
747
      --奖励收集
      local reward = {}
      rewardCollect(reward, goodsByUsual)
555f745e   zhangqijia   feat: 一番赏
748
  
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
749
750
      local goodsByIncentive = self:checkIncentive(roleId, name, now)
      rewardCollect(reward, goodsByIncentive)
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
751
  
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
752
753
754
      local goodsAmount = self:getGoodsAmount()
      if goodsAmount == 0 then
          self:setProperty("drawEndTime", now)
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
755
      end
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
756
757
758
759
760
  
      local goodsBySpecial = self:checkSpecialReward(now, goodsAmount)
      local specialByRole = rewardCollectByRoleId(roleId, reward, goodsBySpecial)
  
      return {reward = reward, usual = goodsByUsual, incentive = goodsByIncentive, specials = goodsBySpecial, special = specialByRole}
555f745e   zhangqijia   feat: 一番赏
761
762
763
764
765
  end
  
  function Capsule:drawAll(roleId)
      local goods = self:getProperty("goods") or {}
      local record = self:getProperty("record") or {}
7f21f75b   zhangqijia   fix: 一番赏 增加rank,刷...
766
767
      local rank = self:getProperty("rank") or {}
      local rankRole = rank[roleId] or 0
555f745e   zhangqijia   feat: 一番赏
768
      local recordByRole = self:getProperty("recordByRole") or {}
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
769
770
      local roleRecord = recordByRole[roleId] or {}
      local now = skynet.timex()
555f745e   zhangqijia   feat: 一番赏
771
  
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
772
      local name = getNameByRoleId(roleId)
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
773
      local goodsByUsual = {}
555f745e   zhangqijia   feat: 一番赏
774
      for good_id, good in pairs(goods) do
555f745e   zhangqijia   feat: 一番赏
775
          if good.amount > 0 then
7f21f75b   zhangqijia   fix: 一番赏 增加rank,刷...
776
777
778
              --插入rank
              rankRole = rankRole + good.amount
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
779
              --插入记录
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
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}
49810b00   zhangqijia   fix: 一番赏 抽奖记录 去掉a...
781
782
783
              for i = 1, good.amount do
                  table.insert(record, {roleId = roleId, name= name, good_id = good_id, typ = RewardType.GOODS, award = good.award, amount = 1, quality = good.quality, create_time = now})
              end
555f745e   zhangqijia   feat: 一番赏
784
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
785
              --作为奖励记录+通知
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
786
787
              if not goodsByUsual[good_id] then
                  goodsByUsual[good_id] = tmpNotify
555f745e   zhangqijia   feat: 一番赏
788
              else
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
789
                  goodsByUsual[good_id].amount = goodsByUsual[good_id].amount + good.award
555f745e   zhangqijia   feat: 一番赏
790
              end
555f745e   zhangqijia   feat: 一番赏
791
  
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
792
793
              --记录角色的抽奖记录
              if not roleRecord[good_id] then
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
794
                  roleRecord[good_id] = tmpNotify
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
795
796
              else
                  roleRecord[good_id].amount = roleRecord[good_id].amount + good.amount
555f745e   zhangqijia   feat: 一番赏
797
              end
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
798
799
  
              good.amount = 0
555f745e   zhangqijia   feat: 一番赏
800
801
802
          end
  
      end
7f21f75b   zhangqijia   fix: 一番赏 增加rank,刷...
803
      rank[roleId] = rankRole
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
804
      recordByRole[roleId] = roleRecord
7f21f75b   zhangqijia   fix: 一番赏 增加rank,刷...
805
      self:setProperties({recordByRole = recordByRole, record = record, goods = goods, rank = rank})
555f745e   zhangqijia   feat: 一番赏
806
  
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
807
808
809
      --奖励收集
      local reward = {}
      rewardCollect(reward, goodsByUsual)
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
810
  
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
811
812
      local goodsByIncentive = self:checkIncentive(roleId, name, now)
      rewardCollect(reward, goodsByIncentive)
49df162b   zhangqijia   fix: 一番赏 增加drawEn...
813
  
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
814
      local goodsAmount = self:getGoodsAmount()
49df162b   zhangqijia   fix: 一番赏 增加drawEn...
815
816
817
818
      if goodsAmount == 0 then
          self:setProperty("drawEndTime", now)
      end
  
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
819
820
821
822
      local goodsBySpecial = self:checkSpecialReward(now, goodsAmount)
      local specialByRole = rewardCollectByRoleId(roleId, reward, goodsBySpecial)
  
      return {reward = reward, usual = goodsByUsual, incentive = goodsByIncentive, specials = goodsBySpecial, special = specialByRole}
555f745e   zhangqijia   feat: 一番赏
823
824
825
826
827
  end
  
  --@param
  --[[
  @roleId
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
828
  @typ 0=独享,1=公开
555f745e   zhangqijia   feat: 一番赏
829
830
831
832
  @cares 关注{k=v}
  ]]--
  
  function Capsule:draw(roleId, full, cares)
555f745e   zhangqijia   feat: 一番赏
833
834
      if self:getProperty("typ") == 1 then
          --是否报名
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
835
          if self:isRegister(roleId) == false then return 4 end
555f745e   zhangqijia   feat: 一番赏
836
837
838
839
  
          --关注的奖品的数量发生了变化
          if cares then
              local change = self:confirmed(cares)
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
840
              if next(change) then return 5, change end
555f745e   zhangqijia   feat: 一番赏
841
842
843
844
          end
      end
  
      if full == 0 then
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
845
          return 6, self:drawByCount(roleId, 1)
555f745e   zhangqijia   feat: 一番赏
846
      elseif full == 1 then
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
847
          return 6, self:drawByCount(roleId, 10)
555f745e   zhangqijia   feat: 一番赏
848
      elseif full == 2 then
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
849
          return 6, self:drawAll(roleId)
555f745e   zhangqijia   feat: 一番赏
850
851
852
      end
  end
  
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
  function Capsule:pageRecord(up, idx)
      local record = self:getProperty("record") or {}
      if not next(record) then return nil end
  
      --默认取20条
      idx = idx or #record
      up = up or 0
  
      local count = 0
      local tmpRecord = {}
      if up == 1 then
          --向上获取索引更大的  从上往下拉
          count = math.min(#record - idx, 20)
          for i = idx, count do
              tmpRecord[i] = record[i]
          end
      else
          --向下获取索引更小的 从下往上拉
          count = math.max(idx - 20, 0)
          for i = count, idx do
              tmpRecord[i] = record[i]
          end
      end
  
      return tmpRecord
  end
  
da20e384   zhangqijia   feat: 一番赏 特殊赏 通知
880
881
882
  --检查是否有未领取奖励的通知
  function Capsule:getSpecialNotify(roleId)
      local specialsRecord = self:getProperty("specialsRecord") or {}
da20e384   zhangqijia   feat: 一番赏 特殊赏 通知
883
      local tmp = {}
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
884
885
886
887
888
889
890
      for _, goods in pairs(specialsRecord)  do
          for _, good in ipairs(goods) do
              if good.roleId == roleId then
                  if not good.nty or good.nty == 0 then
                      tmp[good.good_id] = good
                  end
              end
da20e384   zhangqijia   feat: 一番赏 特殊赏 通知
891
892
          end
      end
da20e384   zhangqijia   feat: 一番赏 特殊赏 通知
893
894
895
896
897
898
899
      self:setProperty("specialsRecord", specialsRecord)
  
      return tmp
  end
  
  function Capsule:clearSpecialNty(roleId, good_ids)
      local specialsRecord = self:getProperty("specialsRecord") or {}
078bdb2f   zhangqijia   fix: 一番赏 特殊赏的抽奖记录...
900
901
902
903
904
905
906
      for _, goods in pairs(specialsRecord)  do
          for _, good in ipairs(goods) do
              for _, good_id in ipairs(good_ids) do
                  if good_id == good.good_id and good.roleId == roleId then
                      good.nty = 1
                  end
              end
da20e384   zhangqijia   feat: 一番赏 特殊赏 通知
907
908
          end
      end
da20e384   zhangqijia   feat: 一番赏 特殊赏 通知
909
910
911
      self:setProperty("specialsRecord", specialsRecord)
  end
  
555f745e   zhangqijia   feat: 一番赏
912
  
f382b4f2   zhangqijia   fix: 一番赏的抽奖bug
913
  function Capsule:data(roleId)
555f745e   zhangqijia   feat: 一番赏
914
915
916
917
918
919
920
      return {
          id = self:getProperty("id"),
          room = self:getProperty("room"),
          typ = self:getProperty("typ"),
          name = self:getProperty("name"),
          coin = self:getProperty("coin"),
          onlineCount = self:getOnlineCount(),
f382b4f2   zhangqijia   fix: 一番赏的抽奖bug
921
          playerStatus = self:getRegisterByRoleId(roleId),
01ff9b4b   zhangqijia   fix: 一番赏 优化; 抽奖记录...
922
          record = self:pageRecord() or {},
555f745e   zhangqijia   feat: 一番赏
923
924
925
926
          rank = self:getProperty("rank"),
          goods = self:getProperty("goods"),
          specials = self:getProperty("specials"),
          incentive = self:getProperty("incentive"),
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
927
          specialsRecord= self:getProperty("specialsRecord"),
555f745e   zhangqijia   feat: 一番赏
928
929
930
931
      }
  end
  
  return Capsule