Blame view

src/models/Daily.lua 10.8 KB
be9c9ca6   zhouahaihai   角色评论
1
2
  -- 日常数据
  
fa992c94   liuzujun   添加daily,diner,act...
3
  local Daily = class("Daily", require("shared.ModelBaseMysql"))
be9c9ca6   zhouahaihai   角色评论
4
  
a85b344f   zhangqijia   feat: 挂机图鉴
5
6
  oneDay = 60*60*24
  
be9c9ca6   zhouahaihai   角色评论
7
  function Daily:ctor(properties)
a43410e1   zhengshouren   整理格式,使用tab替代空格
8
  	Daily.super.ctor(self, properties)
be9c9ca6   zhouahaihai   角色评论
9
10
11
  end
  
  Daily.schema = {
fa992c94   liuzujun   添加daily,diner,act...
12
13
  	id 				= {"number", 0, "pri"},		-- 角色id
  	commentHero		= {"string", "", "blob"},		-- 单日评论食灵记录 type=1
87cc3a35   zhengshouren   餐厅建筑升级逻辑
14
15
  	hangQC			= {"number", 0},		-- 挂机快速次数
  	dinerQC			= {"number", 0},		-- 贩卖加速次数
e38b9c49   zhouhaihai   无尽次数
16
  	advElC			= {"number", 0},		-- 无尽次数(消耗体力)
09be9059   zhouhaihai   冒险接口
17
  	advBC			= {"number", 0},		-- 冒险次数购买次数(冒险体力购买次数)
e38b9c49   zhouhaihai   无尽次数
18
  	advElBC			= {"number", 0},		-- 无尽次数购买次数(冒险体力购买次数)
f60b89b1   zhouhaihai   奖励副本
19
  	advWs			= {"table", {}}, 		-- 冒险队工坊
c384626d   zhouhaihai   好友
20
21
22
  	bonusC			= {"table", {}}, 		-- 奖励副本 次数 {[type] = {c = 0, b = 0}}
  	giveFP			= {"table", {}},		-- 给谁送过心心
  	getFP			= {"table", {}},		-- 领过谁的心心
4cf74232   zhouhaihai   pvp
23
  	pvpFree			= {"number", 0},		-- pvp使用免费次数
4c5d72ab   zhouhaihai   高级pvp
24
  	pvpFreeH		= {"number", 0},		-- 高级pvp使用免费次数
cccc9c70   zhouhaihai   商城
25
26
27
  
  	dailySDC		= {"table", {}},		-- daily shop diamond  count {[id] = count} -- 每日商城购买次数统计
  	dailySDD		= {"table", {}},		-- daily shop diamond  disount {[id] = 1} -- 每日商城折扣统计
9ced5432   zhouhaihai   冒险支援效果 保底事件
28
  
d51114bd   wangyujie   完成需求:每日金币购买
29
30
  	advSupRe		= {"number", 0}, 		-- 冒险支援效果刷新次数
  	goldBuyT		= {"number", 0}, 		-- 金币购买次数
317a46a9   liuzujun   添加特权卡
31
  
1a0b3c56   liuzujun   抽卡保底,切换定向卡池
32
33
  	unlockPool		= {"table", {}},		-- 解锁的属性卡池
  	curPool 		= {"number", 0},		-- 属性卡池当前索引
7113ad0c   liuzujun   每日抽卡次数触发礼包
34
  	drawHeroCnt		= {"number", 0},		-- 每日抽卡次数
a85b344f   zhangqijia   feat: 挂机图鉴
35
36
  
  	treasureList 	= {"table", {}}, 		--挂机图鉴
be9c9ca6   zhouahaihai   角色评论
37
38
  }
  
be9c9ca6   zhouahaihai   角色评论
39
  function Daily:updateProperty(params)
a43410e1   zhengshouren   整理格式,使用tab替代空格
40
41
42
  	local type, default = table.unpack(self.schema[params.field])
  
  	if params.delta then
4faef572   zhouhaihai   冒险任务,冒险扫荡, 冒险中继
43
  		self:incrProperty(params.field, params.delta)
440aa055   zhouhaihai   聊天
44
45
46
  		if not params.notNotify then
  			self.owner:notifyUpdateProperty(params.field, self:getProperty(params.field))
  		end
a43410e1   zhengshouren   整理格式,使用tab替代空格
47
48
49
50
  		return true
  	end
  	if params.value then
  		self:setProperty(params.field, params.value)
440aa055   zhouhaihai   聊天
51
52
53
  		if not params.notNotify then
  			self.owner:notifyUpdateProperty(params.field, self:getProperty(params.field))
  		end
a43410e1   zhengshouren   整理格式,使用tab替代空格
54
55
56
  		return true
  	end
  	return false
be9c9ca6   zhouahaihai   角色评论
57
58
59
  end
  
  function Daily:refreshDailyData(notify)
c384626d   zhouhaihai   好友
60
  	redisproxy:del(FRIEND_POINT:format(self.owner:getProperty("id")))
cccc9c70   zhouhaihai   商城
61
  	local dataMap = {}
a43410e1   zhengshouren   整理格式,使用tab替代空格
62
  	for field, schema in pairs(self.schema) do
fc316d1f   zhouhaihai   冒险体力优化
63
  		if field == "advElC" then
6f3959ce   zhouhaihai   bug
64
  			if self:getProperty(field) > 0 then
0e3ab88d   zhouhaihai   中继层
65
66
  				dataMap[field] = 0
  			end
a85b344f   zhangqijia   feat: 挂机图鉴
67
68
  		elseif field == "treasureList" then
  			dataMap[field] = self:getTreasrueList()
0e3ab88d   zhouhaihai   中继层
69
  		elseif field ~= "key" then
a43410e1   zhengshouren   整理格式,使用tab替代空格
70
  			local typ, def = table.unpack(schema)
cccc9c70   zhouhaihai   商城
71
72
73
74
75
76
  			dataMap[field] = def
  		end
  	end
  	-- 每日折扣搞一下
  	local dailySDD = {}
  	local sddPool = {}
c5825110   saicom   新增用户商城相关数据
77
78
  	for id, data in pairs(csvdb["shop_normalCsv"]) do
  		if data.shop == 1 and data.disount ~= 0 then
cccc9c70   zhouhaihai   商城
79
  			table.insert(sddPool, id)
a43410e1   zhengshouren   整理格式,使用tab替代空格
80
81
  		end
  	end
cccc9c70   zhouhaihai   商城
82
83
84
85
86
87
88
  	for i = 1, math.min(#sddPool, globalCsv.shop_diamond_disount_count) do
  		local idx = math.randomInt(1, #sddPool)
  		dailySDD[sddPool[idx]] = 1
  		table.remove(sddPool, idx)
  	end
  	dataMap["dailySDD"] = dailySDD
  	self:setProperties(dataMap)
a43410e1   zhengshouren   整理格式,使用tab替代空格
89
90
91
  	if notify then
  		self.owner:notifyUpdateProperties(self:data())
  	end
be9c9ca6   zhouahaihai   角色评论
92
93
  end
  
a85b344f   zhangqijia   feat: 挂机图鉴
94
95
96
97
98
99
  --解锁
  function Daily:checkUnlock(treaval)
  	local role = self.owner
  	local treasureC = treaval.unlock:toArray(true, "=")
  	local show = false
  	if treasureC[1] == 1 then --通关关卡
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
100
  		if  self.owner:checkHangPass(treasureC[2]) then show = true end
a85b344f   zhangqijia   feat: 挂机图鉴
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
  	elseif treasureC[1] == 2 then --通关拾荒章节=x层
  		local chapterId = treasureC[2]
  		local layer = 1
  		local advCsv = csvdb["adv_chapterCsv"][chapterId]
  		if not advCsv then return false end --不存在的章节
  		if math.floor(chapterId / 100) ~= 2 then
  			layer = math.min(layer, advCsv.limitlevel)
  		end
  		local advPass = role:getProperty("advPass")
  		if (advPass[chapterId] or 0) < layer then
  			show = false
  		else
  			show = true
  		end
  	elseif treasureC[1] == 3 then --拥有指定id的角色时
  		local hero = role:getHeroByID(treasureC[2])
  		if hero then show = true end
  	else
  		show = true
      end
  	return show
  end
  
  --CD
  function Daily:checkTreasureExpired(treasureAttr, treasureList)
  	local curInfo = treasureList[treasureAttr.id]
  	if curInfo then
  		-- check finish
  		if curInfo["expire_time"] then
  			if curInfo.cool_time > 1 then
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
131
  				if skynet.timex() >= curInfo["expire_time"] then
a85b344f   zhangqijia   feat: 挂机图鉴
132
  					treasureList[treasureAttr.id] = nil
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
133
134
  					curInfo = clone(treasureAttr)
  				elseif skynet.timex() >= curInfo["expire_time"] -  curInfo.cool_time * oneDay then --未冷却
a85b344f   zhangqijia   feat: 挂机图鉴
135
  					curInfo = nil
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
136
137
  				else
  					curInfo = clone(treasureAttr)
a85b344f   zhangqijia   feat: 挂机图鉴
138
139
  				end
  			else
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
140
  				if skynet.timex() >= curInfo["expire_time"] then
a85b344f   zhangqijia   feat: 挂机图鉴
141
142
  					treasureList[treasureAttr.id] = nil
  				end
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
143
  				curInfo = clone(treasureAttr)
a85b344f   zhangqijia   feat: 挂机图鉴
144
  			end
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
145
146
  		else
  			curInfo = clone(treasureAttr)
a85b344f   zhangqijia   feat: 挂机图鉴
147
148
149
150
151
152
153
154
155
156
157
  		end
  	else
  		curInfo = clone(treasureAttr)
  	end
  
  	return curInfo
  end
  
  --资源
  function Daily:checkTreasureBase(treasureList, treasureBase, removeId)
  	local tmptreasure = {}
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
158
  	local num = 0
a85b344f   zhangqijia   feat: 挂机图鉴
159
160
  	for k, val in pairs(treasureList) do
  		if removeId and val.id == removeId then
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
161
  			treasureList[k] = nil
a85b344f   zhangqijia   feat: 挂机图鉴
162
163
164
165
  		else
  			if treasureBase >= val.treasure_value then
  				treasureBase = treasureBase - val.treasure_value
  				tmptreasure[val.id] = val
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
166
  				num = num + 1
a85b344f   zhangqijia   feat: 挂机图鉴
167
168
  			end
  		end
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
169
  
a85b344f   zhangqijia   feat: 挂机图鉴
170
  	end
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
171
  	return tmptreasure, num
a85b344f   zhangqijia   feat: 挂机图鉴
172
173
  end
  
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
174
175
176
177
178
179
180
181
  --绑定通关关卡
  function Daily:checkChapters()
  	local  chapters = {}
  	local tmp_chapters = {}
  	local treasureList = self:getProperty("treasureList")
  	if next(treasureList) ~= nil then
  		for id, curInfo in pairs(treasureList) do
  			if curInfo["end_time"] then
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
182
183
  				if skynet.timex() < curInfo["end_time"] then
  					tmp_chapters[curInfo.chapter_id] = curInfo
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
184
  				end
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
  			end
  		end
  	end
  
  	for chapter_id, val in pairs(csvdb["idle_battleCsv"]) do
  		if self.owner:checkHangPass(chapter_id) then
  			if next(tmp_chapters) == nil then
  				chapters[chapter_id] = val
  			else
  				if not tmp_chapters[chapter_id] then
  					chapters[chapter_id] = val
  				end
  			end
  		end
  	end
  	return chapters
  end
  
a85b344f   zhangqijia   feat: 挂机图鉴
203
204
205
  --权重
  function Daily:checkTreasureWeight(treasureList, tmptreasure, treasureBase)
  	local removeId
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
206
  	local chapters = self:checkChapters()
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
207
  	local treasure
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
208
209
  	if next(chapters) == nil then return end
  
a85b344f   zhangqijia   feat: 挂机图鉴
210
  	while next(tmptreasure) do
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
211
212
213
  		local tmp, num = self:checkTreasureBase(tmptreasure, treasureBase, removeId)
  
  		if num == 0 then
a85b344f   zhangqijia   feat: 挂机图鉴
214
  			break
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
215
216
217
218
219
220
221
222
223
224
  		elseif num == 1 then
  			for _, val in pairs(tmp) do
  				treasure = val
  			end
  		else
  			local id = math.randWeight(tmp, "weight") --宝藏id
  			if not id then
  				break
  			end
  			treasure = tmp[id]
a85b344f   zhangqijia   feat: 挂机图鉴
225
  		end
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
226
  	
a85b344f   zhangqijia   feat: 挂机图鉴
227
228
229
230
231
232
  		if treasureBase >= treasure.treasure_value  then
  			--扣除资源值
  			treasureBase =  treasureBase - treasure.treasure_value
  		else
  			break
  		end
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
233
  		local chapterId = math.randWeight(chapters, "treasure_weight") --关卡id
a85b344f   zhangqijia   feat: 挂机图鉴
234
235
236
237
238
  		if not chapterId then
  			break
  		end
  
  		treasure.chapter_id = chapterId
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
239
240
  		treasureList[treasure.id] = treasure
  		removeId = treasure.id
a85b344f   zhangqijia   feat: 挂机图鉴
241
242
243
244
245
246
247
248
249
250
251
252
  	end
  end
  
  --chapterId
  function Daily:checkTreasureChapterId(curInfo, treasureList, chapterId)
  	local treasure = nil
  
  	if not curInfo then
  		print("curInfo is nil")
  		return treasure
  	end
  
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
253
254
255
256
257
  	--开始挖宝关卡ID=挂机关卡ID
  	if chapterId == curInfo.chapter_id then
  		--开始挖宝
  		if not curInfo["end_time"] then
  			curInfo["end_time"] = skynet.timex() + curInfo.working_time
a85b344f   zhangqijia   feat: 挂机图鉴
258
  		else
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
259
260
261
262
263
  			if skynet.timex() >= curInfo["end_time"] then
  				if curInfo.cool_time > 1 then
  					--宝藏冷却时间
  					if not curInfo["expire_time"] then
  						treasure = treasureList[curInfo.id]
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
264
265
  						curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay
  					else
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
266
267
268
269
  						--已经领取宝藏 检索宝藏冷却时间
  						if skynet.timex() >= curInfo["expire_time"] then
  							treasureList[curInfo.id] = nil
  						end
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
270
  					end
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
271
272
273
  				else
  					treasure = treasureList[curInfo.id]
  					treasureList[curInfo.id] = nil
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
274
  				end
a85b344f   zhangqijia   feat: 挂机图鉴
275
276
277
  			end
  		end
  	else
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
278
279
  		--已经开始挖宝
  		if curInfo["end_time"] then
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
280
281
282
283
284
  			if skynet.timex() >= curInfo["end_time"] then
  				if curInfo.cool_time > 1 then
  					--宝藏冷却时间
  					if not curInfo["expire_time"] then
  						treasure = treasureList[curInfo.id]
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
285
286
  						curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay
  					else
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
287
288
289
290
  						--已经领取宝藏 检索宝藏冷却时间
  						if skynet.timex() >= curInfo["expire_time"] then
  							treasureList[curInfo.id] = nil
  						end
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
291
292
  					end
  				else
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
293
294
  					treasure = treasureList[curInfo.id]
  					treasureList[curInfo.id] = nil
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
295
  				end
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
296
297
  			else
  				curInfo["end_time"]	= nil
a85b344f   zhangqijia   feat: 挂机图鉴
298
299
300
301
302
303
304
305
306
307
308
309
  			end
  		end
  	end
  	return treasure
  end
  
  function Daily:buyTreasure(treasureList)
  	local boughtTreasurer = {}
  	local treasureBase = globalCsv.idle_treasure_base
  	for id, val in pairs(treasureList) do
  		treasureBase = treasureBase - val.treasure_value
  		if treasureBase < 0 then
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
310
  			treasureBase = treasureBase + val.treasure_value
a85b344f   zhangqijia   feat: 挂机图鉴
311
312
313
314
315
  			return
  		else
  			boughtTreasurer[id] = val
  		end
  	end
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
316
  	--self:updateProperty({field = "treasureBase", value = treasureBase})
a85b344f   zhangqijia   feat: 挂机图鉴
317
318
319
320
321
322
323
324
325
326
  	return boughtTreasurer
  end
  
  --重置宝藏图鉴
  function Daily:resetTreasureList()
  	self:updateProperty({field = "treasureList", value = {}})
  end
  
  --宝藏图鉴
  function Daily:getTreasrueList()
a85b344f   zhangqijia   feat: 挂机图鉴
327
  	local tmpcsv = csvdb["idle_treasureCsv"]
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
328
  	local treasureList = self:getProperty("treasureList") or {} --挖宝列表 过期删除 领取奖励删除 跨天更新
a85b344f   zhangqijia   feat: 挂机图鉴
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
  	local tmptreasure = {}
  	local treasureBase = globalCsv.idle_treasure_base
  	for id, val in pairs(tmpcsv) do
  		if self:checkUnlock(val) == true then
  			local treasure = self:checkTreasureExpired(val, treasureList)
  			if treasure then
  				table.insert(tmptreasure, treasure)
  			end
  		end
  	end
  	table.sort(tmptreasure, function (a,b) return a.treasure_value > b.treasure_value end)
  
  	self:checkTreasureWeight(treasureList, tmptreasure, treasureBase)
  	self:updateProperty({field = "treasureList", value = treasureList})
  	return treasureList
  end
  
  
  --检索挖宝列表
  function Daily:checkTreasureList(chapterId)
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
349
  	local treasureList = self:getProperty("treasureList") or {}
a85b344f   zhangqijia   feat: 挂机图鉴
350
351
352
353
354
355
356
357
358
  	local tmptreasure = {}
  	for id, val in pairs(treasureList) do
  		local treasure = self:checkTreasureChapterId(val, treasureList, chapterId)
  		if treasure ~= nil then
  			tmptreasure[id] = treasure
  		end
  	end
  
  	if next(tmptreasure) == nil then
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
359
  		self:updateProperty({field = "treasureList", value = treasureList})
a85b344f   zhangqijia   feat: 挂机图鉴
360
361
362
363
364
365
366
  		return nil
  	end
  	local boughtTreasurer = self:buyTreasure(tmptreasure)
  	self:updateProperty({field = "treasureList", value = treasureList})
  	return boughtTreasurer
  end
  
be9c9ca6   zhouahaihai   角色评论
367
  function Daily:data()
a43410e1   zhengshouren   整理格式,使用tab替代空格
368
  	return {
a43410e1   zhengshouren   整理格式,使用tab替代空格
369
  		hangQC = self:getProperty("hangQC"),
87cc3a35   zhengshouren   餐厅建筑升级逻辑
370
  		dinerQC = self:getProperty("dinerQC"),
09be9059   zhouhaihai   冒险接口
371
  		advBC = self:getProperty("advBC"),
e38b9c49   zhouhaihai   无尽次数
372
373
  		advElC = self:getProperty("advElC"),
  		advElBC = self:getProperty("advElBC"),
bab30666   zhouhaihai   增加通用功能等级 字段
374
  		advWs = self:getProperty("advWs"),
f60b89b1   zhouhaihai   奖励副本
375
  		bonusC = self:getProperty("bonusC"),
c384626d   zhouhaihai   好友
376
377
  		giveFP = self:getProperty("giveFP"),
  		getFP = self:getProperty("getFP"),
4cf74232   zhouhaihai   pvp
378
  		pvpFree = self:getProperty("pvpFree"),
4c5d72ab   zhouhaihai   高级pvp
379
  		pvpFreeH = self:getProperty("pvpFreeH"),
cccc9c70   zhouhaihai   商城
380
381
  		dailySDC = self:getProperty("dailySDC"),
  		dailySDD = self:getProperty("dailySDD"),
9ced5432   zhouhaihai   冒险支援效果 保底事件
382
  		advSupRe = self:getProperty("advSupRe"),
d51114bd   wangyujie   完成需求:每日金币购买
383
  		goldBuyT = self:getProperty("goldBuyT"),
1a0b3c56   liuzujun   抽卡保底,切换定向卡池
384
385
  		unlockPool = self:getProperty("unlockPool"),
  		curPool = self:getProperty("curPool"),
a85b344f   zhangqijia   feat: 挂机图鉴
386
  		treasureList = self:getProperty("treasureList"),
a43410e1   zhengshouren   整理格式,使用tab替代空格
387
  	}
be9c9ca6   zhouahaihai   角色评论
388
389
390
  end
  
  return Daily