Blame view

src/models/Daily.lua 10.8 KB
be9c9ca6   zhouahaihai   角色评论
1
2
  -- 日常数据
  
fa992c94   测试   添加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   测试   添加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   测试   添加特权卡
31
  
1a0b3c56   测试   抽卡保底,切换定向卡池
32
33
  	unlockPool		= {"table", {}},		-- 解锁的属性卡池
  	curPool 		= {"number", 0},		-- 属性卡池当前索引
7113ad0c   测试   每日抽卡次数触发礼包
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
7104ee66   测试   重复过新手bug, daily错误...
67
68
  		elseif field == "id" then
              -- skip
a85b344f   zhangqijia   feat: 挂机图鉴
69
70
  		elseif field == "treasureList" then
  			dataMap[field] = self:getTreasrueList()
0e3ab88d   zhouhaihai   中继层
71
  		elseif field ~= "key" then
a43410e1   zhengshouren   整理格式,使用tab替代空格
72
  			local typ, def = table.unpack(schema)
cccc9c70   zhouhaihai   商城
73
74
75
76
77
78
  			dataMap[field] = def
  		end
  	end
  	-- 每日折扣搞一下
  	local dailySDD = {}
  	local sddPool = {}
c5825110   saicom   新增用户商城相关数据
79
80
  	for id, data in pairs(csvdb["shop_normalCsv"]) do
  		if data.shop == 1 and data.disount ~= 0 then
cccc9c70   zhouhaihai   商城
81
  			table.insert(sddPool, id)
a43410e1   zhengshouren   整理格式,使用tab替代空格
82
83
  		end
  	end
cccc9c70   zhouhaihai   商城
84
85
86
87
88
89
90
  	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替代空格
91
92
93
  	if notify then
  		self.owner:notifyUpdateProperties(self:data())
  	end
be9c9ca6   zhouahaihai   角色评论
94
95
  end
  
a85b344f   zhangqijia   feat: 挂机图鉴
96
97
98
99
100
101
  --解锁
  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: 挂机图鉴-绑定关卡
102
  		if  self.owner:checkHangPass(treasureC[2]) then show = true end
a85b344f   zhangqijia   feat: 挂机图鉴
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
  	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: 挂机图鉴-绑定关卡
133
  				if skynet.timex() >= curInfo["expire_time"] then
a85b344f   zhangqijia   feat: 挂机图鉴
134
  					treasureList[treasureAttr.id] = nil
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
135
136
  					curInfo = clone(treasureAttr)
  				elseif skynet.timex() >= curInfo["expire_time"] -  curInfo.cool_time * oneDay then --未冷却
a85b344f   zhangqijia   feat: 挂机图鉴
137
  					curInfo = nil
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
138
139
  				else
  					curInfo = clone(treasureAttr)
a85b344f   zhangqijia   feat: 挂机图鉴
140
141
  				end
  			else
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
142
  				if skynet.timex() >= curInfo["expire_time"] then
a85b344f   zhangqijia   feat: 挂机图鉴
143
144
  					treasureList[treasureAttr.id] = nil
  				end
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
145
  				curInfo = clone(treasureAttr)
a85b344f   zhangqijia   feat: 挂机图鉴
146
  			end
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
147
148
  		else
  			curInfo = clone(treasureAttr)
a85b344f   zhangqijia   feat: 挂机图鉴
149
150
151
152
153
154
155
156
157
158
159
  		end
  	else
  		curInfo = clone(treasureAttr)
  	end
  
  	return curInfo
  end
  
  --资源
  function Daily:checkTreasureBase(treasureList, treasureBase, removeId)
  	local tmptreasure = {}
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
160
  	local num = 0
a85b344f   zhangqijia   feat: 挂机图鉴
161
162
  	for k, val in pairs(treasureList) do
  		if removeId and val.id == removeId then
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
163
  			treasureList[k] = nil
a85b344f   zhangqijia   feat: 挂机图鉴
164
165
166
167
  		else
  			if treasureBase >= val.treasure_value then
  				treasureBase = treasureBase - val.treasure_value
  				tmptreasure[val.id] = val
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
168
  				num = num + 1
a85b344f   zhangqijia   feat: 挂机图鉴
169
170
  			end
  		end
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
171
  
a85b344f   zhangqijia   feat: 挂机图鉴
172
  	end
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
173
  	return tmptreasure, num
a85b344f   zhangqijia   feat: 挂机图鉴
174
175
  end
  
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
176
177
178
179
180
181
182
183
  --绑定通关关卡
  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
184
185
  				if skynet.timex() < curInfo["end_time"] then
  					tmp_chapters[curInfo.chapter_id] = curInfo
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
186
  				end
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
  			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: 挂机图鉴
205
206
207
  --权重
  function Daily:checkTreasureWeight(treasureList, tmptreasure, treasureBase)
  	local removeId
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
208
  	local chapters = self:checkChapters()
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
209
  	local treasure
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
210
211
  	if next(chapters) == nil then return end
  
a85b344f   zhangqijia   feat: 挂机图鉴
212
  	while next(tmptreasure) do
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
213
214
215
  		local tmp, num = self:checkTreasureBase(tmptreasure, treasureBase, removeId)
  
  		if num == 0 then
a85b344f   zhangqijia   feat: 挂机图鉴
216
  			break
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
217
218
219
220
221
222
223
224
225
226
  		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: 挂机图鉴
227
  		end
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
228
  	
a85b344f   zhangqijia   feat: 挂机图鉴
229
230
231
232
233
234
  		if treasureBase >= treasure.treasure_value  then
  			--扣除资源值
  			treasureBase =  treasureBase - treasure.treasure_value
  		else
  			break
  		end
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
235
  		local chapterId = math.randWeight(chapters, "treasure_weight") --关卡id
a85b344f   zhangqijia   feat: 挂机图鉴
236
237
238
239
240
  		if not chapterId then
  			break
  		end
  
  		treasure.chapter_id = chapterId
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
241
242
  		treasureList[treasure.id] = treasure
  		removeId = treasure.id
a85b344f   zhangqijia   feat: 挂机图鉴
243
244
245
246
247
248
249
250
251
252
253
254
  	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检查
255
256
257
258
259
  	--开始挖宝关卡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: 挂机图鉴
260
  		else
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
261
262
263
264
265
  			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检查
266
267
  						curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay
  					else
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
268
269
270
271
  						--已经领取宝藏 检索宝藏冷却时间
  						if skynet.timex() >= curInfo["expire_time"] then
  							treasureList[curInfo.id] = nil
  						end
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
272
  					end
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
273
274
275
  				else
  					treasure = treasureList[curInfo.id]
  					treasureList[curInfo.id] = nil
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
276
  				end
a85b344f   zhangqijia   feat: 挂机图鉴
277
278
279
  			end
  		end
  	else
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
280
281
  		--已经开始挖宝
  		if curInfo["end_time"] then
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
282
283
284
285
286
  			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检查
287
288
  						curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay
  					else
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
289
290
291
292
  						--已经领取宝藏 检索宝藏冷却时间
  						if skynet.timex() >= curInfo["expire_time"] then
  							treasureList[curInfo.id] = nil
  						end
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
293
294
  					end
  				else
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
295
296
  					treasure = treasureList[curInfo.id]
  					treasureList[curInfo.id] = nil
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
297
  				end
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
298
299
  			else
  				curInfo["end_time"]	= nil
a85b344f   zhangqijia   feat: 挂机图鉴
300
301
302
303
304
305
306
307
308
309
310
311
  			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检查
312
  			treasureBase = treasureBase + val.treasure_value
a85b344f   zhangqijia   feat: 挂机图鉴
313
314
315
316
317
  			return
  		else
  			boughtTreasurer[id] = val
  		end
  	end
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
318
  	--self:updateProperty({field = "treasureBase", value = treasureBase})
a85b344f   zhangqijia   feat: 挂机图鉴
319
320
321
322
323
324
325
326
327
328
  	return boughtTreasurer
  end
  
  --重置宝藏图鉴
  function Daily:resetTreasureList()
  	self:updateProperty({field = "treasureList", value = {}})
  end
  
  --宝藏图鉴
  function Daily:getTreasrueList()
a85b344f   zhangqijia   feat: 挂机图鉴
329
  	local tmpcsv = csvdb["idle_treasureCsv"]
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
330
  	local treasureList = self:getProperty("treasureList") or {} --挖宝列表 过期删除 领取奖励删除 跨天更新
a85b344f   zhangqijia   feat: 挂机图鉴
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
  	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
351
  	local treasureList = self:getProperty("treasureList") or {}
a85b344f   zhangqijia   feat: 挂机图鉴
352
353
354
355
356
357
358
359
360
  	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
361
  		self:updateProperty({field = "treasureList", value = treasureList})
a85b344f   zhangqijia   feat: 挂机图鉴
362
363
364
365
366
367
368
  		return nil
  	end
  	local boughtTreasurer = self:buyTreasure(tmptreasure)
  	self:updateProperty({field = "treasureList", value = treasureList})
  	return boughtTreasurer
  end
  
be9c9ca6   zhouahaihai   角色评论
369
  function Daily:data()
a43410e1   zhengshouren   整理格式,使用tab替代空格
370
  	return {
a43410e1   zhengshouren   整理格式,使用tab替代空格
371
  		hangQC = self:getProperty("hangQC"),
87cc3a35   zhengshouren   餐厅建筑升级逻辑
372
  		dinerQC = self:getProperty("dinerQC"),
09be9059   zhouhaihai   冒险接口
373
  		advBC = self:getProperty("advBC"),
e38b9c49   zhouhaihai   无尽次数
374
375
  		advElC = self:getProperty("advElC"),
  		advElBC = self:getProperty("advElBC"),
bab30666   zhouhaihai   增加通用功能等级 字段
376
  		advWs = self:getProperty("advWs"),
f60b89b1   zhouhaihai   奖励副本
377
  		bonusC = self:getProperty("bonusC"),
c384626d   zhouhaihai   好友
378
379
  		giveFP = self:getProperty("giveFP"),
  		getFP = self:getProperty("getFP"),
4cf74232   zhouhaihai   pvp
380
  		pvpFree = self:getProperty("pvpFree"),
4c5d72ab   zhouhaihai   高级pvp
381
  		pvpFreeH = self:getProperty("pvpFreeH"),
cccc9c70   zhouhaihai   商城
382
383
  		dailySDC = self:getProperty("dailySDC"),
  		dailySDD = self:getProperty("dailySDD"),
9ced5432   zhouhaihai   冒险支援效果 保底事件
384
  		advSupRe = self:getProperty("advSupRe"),
d51114bd   wangyujie   完成需求:每日金币购买
385
  		goldBuyT = self:getProperty("goldBuyT"),
1a0b3c56   测试   抽卡保底,切换定向卡池
386
387
  		unlockPool = self:getProperty("unlockPool"),
  		curPool = self:getProperty("curPool"),
a85b344f   zhangqijia   feat: 挂机图鉴
388
  		treasureList = self:getProperty("treasureList"),
a43410e1   zhengshouren   整理格式,使用tab替代空格
389
  	}
be9c9ca6   zhouahaihai   角色评论
390
391
392
  end
  
  return Daily