Blame view

src/models/Daily.lua 10.9 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
  
f0de8a60   zhangqijia   挖宝跨天,前一天天正在挖的宝被刷掉...
36
  	treasureBase	= {"number", 0}, 		-- 资源值
a85b344f   zhangqijia   feat: 挂机图鉴
37
  	treasureList 	= {"table", {}}, 		--挂机图鉴
be9c9ca6   zhouahaihai   角色评论
38
39
  }
  
be9c9ca6   zhouahaihai   角色评论
40
  function Daily:updateProperty(params)
a43410e1   zhengshouren   整理格式,使用tab替代空格
41
42
43
  	local type, default = table.unpack(self.schema[params.field])
  
  	if params.delta then
4faef572   zhouhaihai   冒险任务,冒险扫荡, 冒险中继
44
  		self:incrProperty(params.field, params.delta)
440aa055   zhouhaihai   聊天
45
46
47
  		if not params.notNotify then
  			self.owner:notifyUpdateProperty(params.field, self:getProperty(params.field))
  		end
a43410e1   zhengshouren   整理格式,使用tab替代空格
48
49
50
51
  		return true
  	end
  	if params.value then
  		self:setProperty(params.field, params.value)
440aa055   zhouhaihai   聊天
52
53
54
  		if not params.notNotify then
  			self.owner:notifyUpdateProperty(params.field, self:getProperty(params.field))
  		end
a43410e1   zhengshouren   整理格式,使用tab替代空格
55
56
57
  		return true
  	end
  	return false
be9c9ca6   zhouahaihai   角色评论
58
59
60
  end
  
  function Daily:refreshDailyData(notify)
c384626d   zhouhaihai   好友
61
  	redisproxy:del(FRIEND_POINT:format(self.owner:getProperty("id")))
cccc9c70   zhouhaihai   商城
62
  	local dataMap = {}
a43410e1   zhengshouren   整理格式,使用tab替代空格
63
  	for field, schema in pairs(self.schema) do
fc316d1f   zhouhaihai   冒险体力优化
64
  		if field == "advElC" then
6f3959ce   zhouhaihai   bug
65
  			if self:getProperty(field) > 0 then
0e3ab88d   zhouhaihai   中继层
66
67
  				dataMap[field] = 0
  			end
a85b344f   zhangqijia   feat: 挂机图鉴
68
69
  		elseif field == "treasureList" then
  			dataMap[field] = self:getTreasrueList()
0e3ab88d   zhouhaihai   中继层
70
  		elseif field ~= "key" then
a43410e1   zhengshouren   整理格式,使用tab替代空格
71
  			local typ, def = table.unpack(schema)
cccc9c70   zhouhaihai   商城
72
73
74
75
76
77
  			dataMap[field] = def
  		end
  	end
  	-- 每日折扣搞一下
  	local dailySDD = {}
  	local sddPool = {}
c5825110   saicom   新增用户商城相关数据
78
79
  	for id, data in pairs(csvdb["shop_normalCsv"]) do
  		if data.shop == 1 and data.disount ~= 0 then
cccc9c70   zhouhaihai   商城
80
  			table.insert(sddPool, id)
a43410e1   zhengshouren   整理格式,使用tab替代空格
81
82
  		end
  	end
cccc9c70   zhouhaihai   商城
83
84
85
86
87
88
89
  	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替代空格
90
91
92
  	if notify then
  		self.owner:notifyUpdateProperties(self:data())
  	end
be9c9ca6   zhouahaihai   角色评论
93
94
  end
  
a85b344f   zhangqijia   feat: 挂机图鉴
95
96
97
98
99
100
  --解锁
  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: 挂机图鉴-绑定关卡
101
  		if  self.owner:checkHangPass(treasureC[2]) then show = true end
a85b344f   zhangqijia   feat: 挂机图鉴
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
  	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: 挂机图鉴-绑定关卡
132
  				if skynet.timex() >= curInfo["expire_time"] then
a85b344f   zhangqijia   feat: 挂机图鉴
133
  					treasureList[treasureAttr.id] = nil
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
134
135
  					curInfo = clone(treasureAttr)
  				elseif skynet.timex() >= curInfo["expire_time"] -  curInfo.cool_time * oneDay then --未冷却
a85b344f   zhangqijia   feat: 挂机图鉴
136
  					curInfo = nil
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
137
138
  				else
  					curInfo = clone(treasureAttr)
a85b344f   zhangqijia   feat: 挂机图鉴
139
140
  				end
  			else
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
141
  				if skynet.timex() >= curInfo["expire_time"] then
a85b344f   zhangqijia   feat: 挂机图鉴
142
143
  					treasureList[treasureAttr.id] = nil
  				end
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
144
  				curInfo = clone(treasureAttr)
a85b344f   zhangqijia   feat: 挂机图鉴
145
  			end
a85b344f   zhangqijia   feat: 挂机图鉴
146
147
148
149
150
151
152
153
154
155
156
  		end
  	else
  		curInfo = clone(treasureAttr)
  	end
  
  	return curInfo
  end
  
  --资源
  function Daily:checkTreasureBase(treasureList, treasureBase, removeId)
  	local tmptreasure = {}
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
157
  	local num = 0
a85b344f   zhangqijia   feat: 挂机图鉴
158
159
  	for k, val in pairs(treasureList) do
  		if removeId and val.id == removeId then
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
160
  			treasureList[k] = nil
a85b344f   zhangqijia   feat: 挂机图鉴
161
162
163
164
  		else
  			if treasureBase >= val.treasure_value then
  				treasureBase = treasureBase - val.treasure_value
  				tmptreasure[val.id] = val
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
165
  				num = num + 1
a85b344f   zhangqijia   feat: 挂机图鉴
166
167
  			end
  		end
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
168
  
a85b344f   zhangqijia   feat: 挂机图鉴
169
  	end
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
170
  	return tmptreasure, num
a85b344f   zhangqijia   feat: 挂机图鉴
171
172
  end
  
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
173
174
175
176
177
178
179
180
  --绑定通关关卡
  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
181
182
  				if skynet.timex() < curInfo["end_time"] then
  					tmp_chapters[curInfo.chapter_id] = curInfo
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
183
  				end
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
  			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: 挂机图鉴
202
203
204
  --权重
  function Daily:checkTreasureWeight(treasureList, tmptreasure, treasureBase)
  	local removeId
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
205
  	local chapters = self:checkChapters()
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
206
  	local treasure
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
207
208
  	if next(chapters) == nil then return end
  
a85b344f   zhangqijia   feat: 挂机图鉴
209
  	while next(tmptreasure) do
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
210
211
212
  		local tmp, num = self:checkTreasureBase(tmptreasure, treasureBase, removeId)
  
  		if num == 0 then
a85b344f   zhangqijia   feat: 挂机图鉴
213
  			break
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
214
215
216
217
218
219
220
221
222
223
  		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: 挂机图鉴
224
  		end
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
225
  	
a85b344f   zhangqijia   feat: 挂机图鉴
226
227
228
229
230
231
  		if treasureBase >= treasure.treasure_value  then
  			--扣除资源值
  			treasureBase =  treasureBase - treasure.treasure_value
  		else
  			break
  		end
e639a6b9   zhangqijia   fix: 挂机图鉴-绑定关卡
232
  		local chapterId = math.randWeight(chapters, "treasure_weight") --关卡id
a85b344f   zhangqijia   feat: 挂机图鉴
233
234
235
236
237
  		if not chapterId then
  			break
  		end
  
  		treasure.chapter_id = chapterId
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
238
239
  		treasureList[treasure.id] = treasure
  		removeId = treasure.id
a85b344f   zhangqijia   feat: 挂机图鉴
240
241
242
243
244
245
246
247
248
249
250
251
  	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检查
252
253
254
255
256
  	--开始挖宝关卡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: 挂机图鉴
257
  		else
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
258
259
260
261
262
  			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检查
263
264
  						curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay
  					else
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
265
266
267
268
  						--已经领取宝藏 检索宝藏冷却时间
  						if skynet.timex() >= curInfo["expire_time"] then
  							treasureList[curInfo.id] = nil
  						end
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
269
  					end
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
270
271
272
  				else
  					treasure = treasureList[curInfo.id]
  					treasureList[curInfo.id] = nil
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
273
  				end
a85b344f   zhangqijia   feat: 挂机图鉴
274
275
276
  			end
  		end
  	else
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
277
278
  		--已经开始挖宝
  		if curInfo["end_time"] then
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
279
280
281
282
283
  			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检查
284
285
  						curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay
  					else
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
286
287
288
289
  						--已经领取宝藏 检索宝藏冷却时间
  						if skynet.timex() >= curInfo["expire_time"] then
  							treasureList[curInfo.id] = nil
  						end
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
290
291
  					end
  				else
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
292
293
  					treasure = treasureList[curInfo.id]
  					treasureList[curInfo.id] = nil
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
294
  				end
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
295
296
  			else
  				curInfo["end_time"]	= nil
a85b344f   zhangqijia   feat: 挂机图鉴
297
298
299
300
301
302
303
304
  			end
  		end
  	end
  	return treasure
  end
  
  function Daily:buyTreasure(treasureList)
  	local boughtTreasurer = {}
f0de8a60   zhangqijia   挖宝跨天,前一天天正在挖的宝被刷掉...
305
  	local treasureBase = self:getProperty("treasureBase")
a85b344f   zhangqijia   feat: 挂机图鉴
306
307
308
  	for id, val in pairs(treasureList) do
  		treasureBase = treasureBase - val.treasure_value
  		if treasureBase < 0 then
1199daf9   zhangqijia   fix: 挂机图鉴, 增加宝藏CD检查
309
  			treasureBase = treasureBase + val.treasure_value
a85b344f   zhangqijia   feat: 挂机图鉴
310
311
312
313
314
  			return
  		else
  			boughtTreasurer[id] = val
  		end
  	end
f0de8a60   zhangqijia   挖宝跨天,前一天天正在挖的宝被刷掉...
315
  	self:updateProperty({field = "treasureBase", value = treasureBase})
a85b344f   zhangqijia   feat: 挂机图鉴
316
317
318
319
320
321
322
323
324
325
  	return boughtTreasurer
  end
  
  --重置宝藏图鉴
  function Daily:resetTreasureList()
  	self:updateProperty({field = "treasureList", value = {}})
  end
  
  --宝藏图鉴
  function Daily:getTreasrueList()
a85b344f   zhangqijia   feat: 挂机图鉴
326
  	local tmpcsv = csvdb["idle_treasureCsv"]
251d8e5e   zhangqijia   fix: 挂机宝鉴,宝藏CD的bug
327
  	local treasureList = self:getProperty("treasureList") or {} --挖宝列表 过期删除 领取奖励删除 跨天更新
a85b344f   zhangqijia   feat: 挂机图鉴
328
329
330
331
332
333
334
335
336
337
338
339
340
341
  	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})
f0de8a60   zhangqijia   挖宝跨天,前一天天正在挖的宝被刷掉...
342
  	self:updateProperty({field = "treasureBase", value = treasureBase})
a85b344f   zhangqijia   feat: 挂机图鉴
343
344
345
346
347
348
  	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   测试   抽卡保底,切换定向卡池
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