87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
1
2
3
4
5
6
7
|
local Diner = class("Diner", require("shared.ModelBase"))
function Diner:ctor(properties)
Diner.super.ctor(self, properties)
end
Diner.schema = {
|
4288160b
gaofengduan
add Diner_getGree...
|
8
9
10
|
buildL = {"string", ""}, -- 家具等级 1=1 2=1 3=1
order = {"string", "[]"}, -- 特殊订单
sells = {"string", "[]"}, -- 贩卖位置
|
289a4927
gaofengduan
fix diner talent
|
11
|
dishTree = {"string", "1=1 101=1 201=1"}, -- 料理天赋
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
12
|
skillTree = {"string", ""}, -- 支援天赋
|
4288160b
gaofengduan
add Diner_getGree...
|
13
14
|
popular = {"number",0}, -- 累计人气
expedite = {"number",1}, --每日加速次数
|
6d272f65
zhouhaihai
餐厅 食材
|
15
|
gfood = {"table", {}}, -- 愿望食材 {{id = 123, st = 1232144},}
|
03a6166a
zhouhaihai
餐厅优化
|
16
|
task = {"table", {}}, -- 任务刷新 {et = 消失时间 id = 任务id, refuse = 0}
|
ed322ed2
zhouhaihai
餐厅 顾客 系统
|
17
18
19
20
|
entrustB = {"table", {}}, -- 委托完成过的记录 {id = 1}
entrust = {"table", {}}, -- 委托 {id, id, id}
customer = {"table", {}}, -- 解锁的顾客 {id = 1} -- 1 (已解锁) 0(达成条件 可解锁 服务器用)
comboStatus = {"table", {}}, -- 组合领取奖励状态 {id = -1} --有表示已经领取奖励
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
21
22
|
}
|
59835765
zhouhaihai
排行榜
|
23
24
25
26
|
function Diner:rankResetData(notify)
self:updateProperty({field = "popular", value = 0, notNotify = not notify})
end
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
27
|
function Diner:refreshDailyData(notify)
|
ed322ed2
zhouhaihai
餐厅 顾客 系统
|
28
29
30
|
-- 委托
local entrust = self:getProperty("entrust")
|
ed322ed2
zhouhaihai
餐厅 顾客 系统
|
31
32
33
34
35
36
37
38
39
40
41
42
|
local entrustB = self:getProperty("entrustB")
local had = {}
local pool = {}
local change = false
for i = 1, 3 do
if not entrust[i] then
if not next(pool) then
for id, data in pairs(csvdb["diner_missionCsv"]) do
local show = true
if data.show ~= "" then
-- 不填=默认刷出,1=达成前置任务,2=通关关卡
local showC = data.show:toArray(true, "=")
|
18ed80b0
chenyueqi
餐厅获取委托任务池子修改
|
43
|
if showC[1] == 2 then
|
42674b1a
zhouhaihai
bug
|
44
|
if not self.owner:checkHangPass(showC[2]) then
|
ed322ed2
zhouhaihai
餐厅 顾客 系统
|
45
46
|
show = false
end
|
18ed80b0
chenyueqi
餐厅获取委托任务池子修改
|
47
|
elseif showC[1] == 1 then
|
ed322ed2
zhouhaihai
餐厅 顾客 系统
|
48
49
50
51
52
53
|
if not entrustB[showC[2]] then
show = false
end
end
end
if show then
|
fa8ba58d
zhouhaihai
餐厅委托增加 出现概率
|
54
|
table.insert(pool, {id, data.chance})
|
ed322ed2
zhouhaihai
餐厅 顾客 系统
|
55
56
57
58
59
|
end
end
end
if #pool > 0 then
|
fa8ba58d
zhouhaihai
餐厅委托增加 出现概率
|
60
61
|
local idx = math.randWeight(pool, 2)
entrust[i] = pool[idx][1]
|
ed322ed2
zhouhaihai
餐厅 顾客 系统
|
62
63
64
65
66
67
68
69
70
71
|
change = true
table.remove(pool, idx)
end
if not next(pool) then
break
end
else
had[entrust[i]] = 1
end
end
|
feefa6f0
chenyueqi
餐厅引导设置客人id
|
72
|
|
0cc5de89
chenyueqi
签到log类型再改回来,餐厅刷新顾...
|
73
|
if self.owner:getProperty("funcGuide"):getv(51,0) == 0 or (not self.owner:checkOverGuide(27) and self.owner:checkOverGuide(25)) then
|
6198b5d8
chenyueqi
餐车刷新顾客设定
|
74
75
|
entrust[1] = 1001
entrust[2] = 1
|
0cc5de89
chenyueqi
签到log类型再改回来,餐厅刷新顾...
|
76
|
elseif not self.owner:checkOverGuide(29,4) and self.owner:checkOverGuide(29) then
|
feefa6f0
chenyueqi
餐厅引导设置客人id
|
77
|
local temp = entrust[1]
|
6198b5d8
chenyueqi
餐车刷新顾客设定
|
78
|
entrust[1] = 1
|
feefa6f0
chenyueqi
餐厅引导设置客人id
|
79
80
81
|
entrust[2] = temp
end
|
ed322ed2
zhouhaihai
餐厅 顾客 系统
|
82
83
|
self:updateProperty({field = "entrust", value = entrust, notNotify = not notify})
|
020fc7ed
gaofengduan
fix diner expedit...
|
84
85
|
-- 每日加速次数
self:updateProperty({field = "expedite", value = 1, notNotify = not notify})
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
86
|
-- 特殊订单
|
452d6146
gaofengduan
fix diner task
|
87
|
local orders = json.decode(self:getProperty("order"))
|
550ba7e7
zhouhaihai
订单
|
88
89
90
91
92
93
94
95
96
97
98
|
local hadTask = {}
local needCount = globalCsv.diner_task_count
for idx, temp in pairs(orders) do
if temp.lock ~= 0 then
hadTask[temp.id] = 1
needCount = needCount - 1
end
end
if needCount <= 0 then return end
|
cc796aaf
zhengshouren
增加餐厅任务计数逻辑
|
99
100
101
|
-- 等级由订单板等级决定
local taskLevel = self:getProperty("buildL"):getv(5, 1)
local taskData = csvdb["diner_questCsv"][taskLevel]
|
550ba7e7
zhouhaihai
订单
|
102
103
|
if not taskData then return end
local pool = {}
|
f4bbb208
zhouhaihai
餐厅任务解锁
|
104
|
local dishTree = self:getProperty("dishTree")
|
550ba7e7
zhouhaihai
订单
|
105
|
for id, temp in pairs(taskData) do
|
f4bbb208
zhouhaihai
餐厅任务解锁
|
106
107
108
109
110
111
112
113
|
local unlock = true
for _, front in ipairs(temp.front:toArray(true, "=")) do
if dishTree:getv(front, 0) == 0 then
unlock = false
break
end
end
if not hadTask[id] and unlock then
|
550ba7e7
zhouhaihai
订单
|
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
table.insert(pool, temp)
end
end
local needCount = math.min(#pool, needCount) -- 需要的任务个数
for idx = 1, globalCsv.diner_task_count do
local order = orders[idx]
if not order or order.lock == 0 then
if needCount > 0 then
local index = math.randWeight(pool, "chance")
local data = pool[index]
orders[idx] = {lv = taskLevel, id = data.id, n = 0, lock = 0, status = 0}
needCount = needCount - 1
table.remove(pool, index)
|
cc796aaf
zhengshouren
增加餐厅任务计数逻辑
|
128
129
130
|
end
end
end
|
550ba7e7
zhouhaihai
订单
|
131
|
|
f5c07b1b
gaofengduan
fix diner
|
132
|
self:updateProperty({field = "order", value = json.encode(orders), notNotify = not notify})
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
133
134
135
136
|
end
function Diner:updateProperty(params)
params = params or {}
|
289a4927
gaofengduan
fix diner talent
|
137
138
|
if not self.schema[params.field] then
return
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
end
local oldValue = self:getProperty(params.field)
if params.value then
self:setProperty(params.field, params.value)
elseif params.delta then
self:incrProperty(params.field, params.delta)
else
return
end
local newValue = self:getProperty(params.field)
if not params.notNotify then
self:notifyUpdateProperty(params.field, newValue, oldValue)
end
end
function Diner:notifyUpdateProperty(field, newValue, oldValue)
local datas = {
key = field,
newValue = newValue,
oldValue = oldValue,
}
SendPacket(actionCodes.Diner_updateProperty, MsgPack.pack(datas))
end
|
452d6146
gaofengduan
fix diner task
|
163
|
function Diner:checkDinerTask(typ, count, param1, param2, notNotify)
|
cc796aaf
zhengshouren
增加餐厅任务计数逻辑
|
164
165
|
local orders = json.decode(self:getProperty("order"))
local dirty = false
|
452d6146
gaofengduan
fix diner task
|
166
|
for k, order in ipairs(orders) do
|
4864d579
zhengshouren
领取任务,锁定任务,获得特殊任务
|
167
168
169
|
local taskSet = csvdb["diner_questCsv"][order.lv]
if taskSet and taskSet[order.id] then
local data = taskSet[order.id]
|
452d6146
gaofengduan
fix diner task
|
170
171
|
if data.type == typ and data.condition1 == param1 and order.status == 1 then
orders[k].n = orders[k].n + count
|
cc796aaf
zhengshouren
增加餐厅任务计数逻辑
|
172
173
174
175
176
|
dirty = true
end
end
end
if dirty then
|
f5c07b1b
gaofengduan
fix diner
|
177
|
self:updateProperty({field = "order", value = json.encode(orders), notNotify = notNotify})
|
cc796aaf
zhengshouren
增加餐厅任务计数逻辑
|
178
179
180
181
|
end
return dirty
end
|
090340b9
gaofengduan
fix 餐车
|
182
|
function Diner:calSellReward(sell, delta, dishData)
|
37037eeb
zhengshouren
计算奖励
|
183
|
local reward = sell.reward or ""
|
090340b9
gaofengduan
fix 餐车
|
184
|
local popular = 0
|
37037eeb
zhengshouren
计算奖励
|
185
|
if delta <= 0 then
|
090340b9
gaofengduan
fix 餐车
|
186
|
return reward, popular
|
37037eeb
zhengshouren
计算奖励
|
187
|
end
|
ed322ed2
zhouhaihai
餐厅 顾客 系统
|
188
|
local addReward = {}
|
f5c07b1b
gaofengduan
fix diner
|
189
|
for key, value in pairs(dishData.item_normal:toNumMap()) do
|
ed322ed2
zhouhaihai
餐厅 顾客 系统
|
190
|
addReward[key] = (addReward[key] or 0) + value * delta
|
37037eeb
zhengshouren
计算奖励
|
191
|
end
|
37037eeb
zhengshouren
计算奖励
|
192
|
|
ed322ed2
zhouhaihai
餐厅 顾客 系统
|
193
194
195
196
|
popular = dishData.famous_normal * delta
local upValue = {}
-- 建筑加成
|
37037eeb
zhengshouren
计算奖励
|
197
198
199
200
|
for buildType = 1, 6 do
local level = self:getProperty("buildL"):getv(buildType, 1)
local buildData = csvdb["diner_buildingCsv"][buildType][level]
if buildData.gold_up > 0 then
|
ed322ed2
zhouhaihai
餐厅 顾客 系统
|
201
|
upValue[ItemId.Gold] = (upValue[ItemId.Gold] or 0) + buildData.gold_up
|
37037eeb
zhengshouren
计算奖励
|
202
203
|
end
if buildData.item_up > 0 then
|
cb356900
zhouhaihai
美食币计算错误
|
204
|
upValue[ItemId.DinerCoin] = (upValue[ItemId.DinerCoin] or 0) + buildData.item_up
|
37037eeb
zhengshouren
计算奖励
|
205
206
|
end
if buildData and buildData.famous_up > 0 then
|
ed322ed2
zhouhaihai
餐厅 顾客 系统
|
207
208
209
210
211
212
213
214
215
|
upValue[-1] = (upValue[-1] or 0) + buildData.famous_up
end
end
-- 收集加成
local collectCount = 0
for _id , status in pairs(self:getProperty("customer")) do
if status == 1 then
collectCount = collectCount + 1
|
37037eeb
zhengshouren
计算奖励
|
216
217
|
end
end
|
ed322ed2
zhouhaihai
餐厅 顾客 系统
|
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
|
local collectAdd = 0
for _, collectData in ipairs(csvdb["diner_customer_collectCsv"]) do
if collectData.num <= collectCount then
collectAdd = collectData.bonus
else
break
end
end
upValue[-1] = (upValue[-1] or 0) + collectAdd
for id, count in pairs(addReward) do
addReward[id] = math.floor(count * (1 + (upValue[id] or 0) / 100))
reward = reward:incrv(id, addReward[id])
end
popular = math.floor(popular * (1 + (upValue[-1] or 0) / 100))
|
090340b9
gaofengduan
fix 餐车
|
234
|
return reward, popular
|
37037eeb
zhengshouren
计算奖励
|
235
236
|
end
|
36204e3c
zhengshouren
贩卖逻辑
|
237
238
239
240
241
242
243
244
245
246
247
248
|
function Diner:updateSell(slot, calOnly)
local sells = json.decode(self:getProperty("sells"))
local sell = sells[slot]
if not sell or sell.count <= 0 then
return
end
local dishData = csvdb["diner_dishCsv"][sell.dish][sell.level]
local deltaTime = 0
local deltaCount = 0
local timePass = skynet.timex() - sell.time
local sellTime = dishData.sell_time
|
289a4927
gaofengduan
fix diner talent
|
249
|
|
36204e3c
zhengshouren
贩卖逻辑
|
250
251
252
253
254
255
|
deltaCount = math.floor(timePass / sellTime)
if deltaCount < sell.count then
deltaTime = math.floor(timePass - sellTime * deltaCount)
end
deltaCount = math.min(deltaCount, sell.count)
local lastCount = sell.count - deltaCount
|
2050d40d
gaofengduan
add diner expedit...
|
256
|
local reward, popular = self:calSellReward(sell, deltaCount, dishData)
|
36204e3c
zhengshouren
贩卖逻辑
|
257
|
|
fdb86cad
gaofengduan
fix diner task
|
258
|
if not calOnly and deltaCount > 0 then
|
32161569
gaofengduan
fix diner
|
259
260
261
|
sells[slot].time = skynet.timex() - deltaTime
sells[slot].count = lastCount
sells[slot].level = self:getProperty("dishTree"):getv(sell.dish, 1)
|
32161569
gaofengduan
fix diner
|
262
|
sells[slot].reward = reward
|
59835765
zhouhaihai
排行榜
|
263
|
sells[slot].popular = (sells[slot].popular or 0) + popular
|
36204e3c
zhengshouren
贩卖逻辑
|
264
|
self:setProperty("sells", json.encode(sells))
|
fdb86cad
gaofengduan
fix diner task
|
265
|
self:checkDinerTask(DinerTask.SellDish, deltaCount, sell.dish)
|
77302523
zhouhaihai
任务
|
266
267
|
self:checkDinerTask(DinerTask.SellDishType, deltaCount, math.ceil(sell.dish / 100))
self:checkDinerTask(DinerTask.SellDishRare, deltaCount, dishData.rarity)
|
53e8037e
zhouhaihai
任务
|
268
|
self.owner:checkTaskEnter("FoodSell", {count = deltaCount})
|
36204e3c
zhengshouren
贩卖逻辑
|
269
270
271
272
273
|
end
return {
deltaCount = deltaCount,
deltaTime = deltaTime,
lastCount = lastCount,
|
2050d40d
gaofengduan
add diner expedit...
|
274
|
reward = reward,
|
36204e3c
zhengshouren
贩卖逻辑
|
275
|
}
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
276
277
|
end
|
020fc7ed
gaofengduan
fix diner expedit...
|
278
279
280
281
282
283
284
285
|
function Diner:expediteSell(slot)
local sells = json.decode(self:getProperty("sells"))
local sell = sells[slot]
if not sell or sell.count <= 0 then
return
end
local dishData = csvdb["diner_dishCsv"][sell.dish][sell.level]
local expediteCount = 0
|
13e7d6bb
zhouhaihai
加速时间提取
|
286
|
local expediteTime = globalCsv.diner_sell_expediteTime
|
020fc7ed
gaofengduan
fix diner expedit...
|
287
|
local sellTime = dishData.sell_time
|
020fc7ed
gaofengduan
fix diner expedit...
|
288
289
290
291
|
expediteCount = math.floor(expediteTime / sellTime)
expediteCount = math.min(expediteCount, sell.count)
local lastCount = sell.count - expediteCount
local reward, popular = self:calSellReward(sell, expediteCount, dishData)
|
55289e78
gaofengduan
fix diner expedit...
|
292
|
local deltaTime = math.floor(expediteTime - sellTime * expediteCount)
|
020fc7ed
gaofengduan
fix diner expedit...
|
293
|
if expediteCount > 0 then
|
55289e78
gaofengduan
fix diner expedit...
|
294
|
sells[slot].time = sell.time - deltaTime
|
020fc7ed
gaofengduan
fix diner expedit...
|
295
296
|
sells[slot].count = lastCount
self:setProperty("sells", json.encode(sells))
|
020fc7ed
gaofengduan
fix diner expedit...
|
297
|
self:checkDinerTask(DinerTask.SellDish, expediteCount, sell.dish)
|
77302523
zhouhaihai
任务
|
298
299
|
self:checkDinerTask(DinerTask.SellDishType, expediteCount, math.ceil(sell.dish / 100))
self:checkDinerTask(DinerTask.SellDishRare, expediteCount, dishData.rarity)
|
760ed660
zhouhaihai
任务成就 增加
|
300
|
self.owner:checkTaskEnter("FoodSell", {count = expediteCount})
|
072db127
zhouhaihai
推送
|
301
302
303
|
local needTime = sells[slot].count * dishData.sell_time + sells[slot].time - skynet.timex()
self.owner:pushMsg({type = "food", slot = slot, time = needTime})
|
020fc7ed
gaofengduan
fix diner expedit...
|
304
305
306
307
308
309
|
end
return {
expediteCount = expediteCount,
lastCount = lastCount,
reward = reward,
popular = popular,
|
c59e058b
zhouhaihai
新一批日志记录
|
310
|
deltaTime = deltaTime,
|
020fc7ed
gaofengduan
fix diner expedit...
|
311
312
313
|
}
end
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
314
315
316
|
function Diner:getMaxSlots()
local slotCount = globalCsv.diner_sell_slots_init
|
36204e3c
zhengshouren
贩卖逻辑
|
317
|
for _, carbonId in ipairs(globalCsv.diner_sell_slots_unlock) do
|
0c2770e4
zhouhaihai
bug 扫雷buff
|
318
|
if self.owner:checkHangPass(carbonId) then
|
36204e3c
zhengshouren
贩卖逻辑
|
319
320
321
|
slotCount = slotCount + 1
end
end
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
322
323
324
325
326
327
328
|
return slotCount
end
function Diner:getMaxDishs()
local dishCount = globalCsv.diner_sell_dish_init
|
59835765
zhouhaihai
排行榜
|
329
330
331
332
333
334
|
-- local buildingCsv = csvdb["diner_buildingCsv"]
-- for id, level in pairs(self:getProperty("buildL"):toNumMap()) do
-- if buildingCsv[id][level].storage > 0 then
-- dishCount = dishCount + buildingCsv[id][level].storage
-- end
-- end
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
335
336
337
|
return dishCount
end
|
59835765
zhouhaihai
排行榜
|
338
339
340
341
342
343
344
|
function Diner:popularAdd(popular)
if popular ~= 0 then
self:updateProperty({field = "popular", delta = popular})
local dbKey = self.owner:getCurDinerRankKey()
local roleId = self.owner:getProperty("id")
-- 更新排行榜
local curPopular = self:getProperty("popular")
|
53e8037e
zhouhaihai
任务
|
345
|
self.owner:checkTaskEnter("DinerPopular", {count = curPopular})
|
59835765
zhouhaihai
排行榜
|
346
347
348
|
redisproxy:pipelining(function (red)
red:zadd(dbKey, curPopular, roleId) --更新分数
red:hset(RANK_DINER_INFO, roleId, MsgPack.pack({
|
5e0e0aff
zhouhaihai
初始等级记录错误
|
349
|
lv = self:getProperty("buildL"):getv(1, 1),
|
59835765
zhouhaihai
排行榜
|
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
|
name = self.owner:getProperty("name"),
headId = self.owner:getProperty("headId")
}))
end)
end
end
function Diner:getPopularRank()
local dbKey = self.owner:getCurDinerRankKey()
local list = {}
local ids = redisproxy:zrevrange(dbKey, 0 , 99, "WITHSCORES")
local redret = {}
if ids and next(ids) then
redret = redisproxy:pipelining(function (red)
for i = 1, #ids, 2 do
local roleId = ids[i]
local score = ids[i + 1]
list[#list + 1] = {score = tonumber(score), roleId = tonumber(roleId)}
red:hget(RANK_DINER_INFO, roleId)
end
end)
end
for i = 1, #redret do
local player = MsgPack.unpack(redret[i])
list[i].player = player
end
local rank = redisproxy:ZREVRANK(dbKey, self.owner:getProperty("id"))
if not rank then
rank = -1
else
rank = rank + 1
end
return {list = list, rank = rank}
end
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
385
|
function Diner:data()
|
ed322ed2
zhouhaihai
餐厅 顾客 系统
|
386
387
388
389
390
391
392
393
394
395
396
397
398
399
|
local properties = {
"buildL",
"order",
"sells",
"dishTree",
"skillTree",
"popular",
"expedite",
"gfood",
"task",
"entrust",
"customer",
"comboStatus",
}
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
400
401
402
403
404
|
local data = self:getProperties(properties)
return data
end
return Diner
|