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
11
|
buildL = {"string", ""}, -- 家具等级 1=1 2=1 3=1
order = {"string", "[]"}, -- 特殊订单
sells = {"string", "[]"}, -- 贩卖位置
hot = {"string", ""}, -- 今日热门
|
289a4927
gaofengduan
fix diner talent
|
12
|
dishTree = {"string", "1=1 101=1 201=1"}, -- 料理天赋
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
13
|
skillTree = {"string", ""}, -- 支援天赋
|
4288160b
gaofengduan
add Diner_getGree...
|
14
15
16
|
popular = {"number",0}, -- 累计人气
expedite = {"number",1}, --每日加速次数
gTime = {"number",skynet.timex()}, --温室最后一次领取时间
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
17
18
19
20
21
22
23
24
25
26
27
|
}
function Diner:refreshDailyData(notify)
-- 热门料理
local hotPool = {}
local dishTree = self:getProperty("dishTree"):toNumMap()
local hangPass = self.owner:getProperty("hangPass")
for index, dishData in ipairs(csvdb["diner_dishCsv"]) do
local check = true
local dish = dishData[1]
|
289a4927
gaofengduan
fix diner talent
|
28
|
if not dishTree[dish.id] then
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
check = false
end
if dish.unlock_carbon > 0 and not hangPass[dish.unlock_carbon] then
check = false
end
if check then
table.insert(hotPool, index)
end
end
if #hotPool >= 2 then
local hot = ""
for n = 1, 2 do
local index = math.random(1, #hotPool)
hot = hot:setv(hotPool[index], 1)
table.remove(hotPool, index)
end
self:updateProperty({field = "hot", value = hot, notNotify = not notify})
self:setProperty("hot", hot)
end
|
020fc7ed
gaofengduan
fix diner expedit...
|
48
49
50
|
-- 每日加速次数
self:updateProperty({field = "expedite", value = 1, notNotify = not notify})
self:setProperty("expedite", 1)
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
51
52
|
-- 特殊订单
|
452d6146
gaofengduan
fix diner task
|
53
|
local orders = json.decode(self:getProperty("order"))
|
cc796aaf
zhengshouren
增加餐厅任务计数逻辑
|
54
55
56
57
58
59
60
61
62
|
-- 等级由订单板等级决定
local taskLevel = self:getProperty("buildL"):getv(5, 1)
local taskData = csvdb["diner_questCsv"][taskLevel]
if taskData then
local taskPool = table.values(taskData)
if #taskPool > 6 then
for n = 1, 6 do
local index = math.randWeight(taskPool, "chance")
local data = taskPool[index]
|
452d6146
gaofengduan
fix diner task
|
63
64
65
66
67
68
69
70
|
local order = orders[n]
if order then
if order.lock == 0 then
orders[n] = {lv = taskLevel, id = data.id, n = 0, lock = 0,status = 0}
end
else
orders[n] = {lv = taskLevel, id = data.id, n = 0, lock = 0,status = 0}
end
|
cc796aaf
zhengshouren
增加餐厅任务计数逻辑
|
71
72
73
|
end
end
end
|
f5c07b1b
gaofengduan
fix diner
|
74
|
self:updateProperty({field = "order", value = json.encode(orders), notNotify = not notify})
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
75
76
77
78
|
end
function Diner:updateProperty(params)
params = params or {}
|
289a4927
gaofengduan
fix diner talent
|
79
80
|
if not self.schema[params.field] then
return
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
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
|
105
|
function Diner:checkDinerTask(typ, count, param1, param2, notNotify)
|
cc796aaf
zhengshouren
增加餐厅任务计数逻辑
|
106
107
|
local orders = json.decode(self:getProperty("order"))
local dirty = false
|
452d6146
gaofengduan
fix diner task
|
108
|
for k, order in ipairs(orders) do
|
4864d579
zhengshouren
领取任务,锁定任务,获得特殊任务
|
109
110
111
|
local taskSet = csvdb["diner_questCsv"][order.lv]
if taskSet and taskSet[order.id] then
local data = taskSet[order.id]
|
452d6146
gaofengduan
fix diner task
|
112
113
|
if data.type == typ and data.condition1 == param1 and order.status == 1 then
orders[k].n = orders[k].n + count
|
cc796aaf
zhengshouren
增加餐厅任务计数逻辑
|
114
115
116
117
118
|
dirty = true
end
end
end
if dirty then
|
f5c07b1b
gaofengduan
fix diner
|
119
|
self:updateProperty({field = "order", value = json.encode(orders), notNotify = notNotify})
|
cc796aaf
zhengshouren
增加餐厅任务计数逻辑
|
120
121
122
123
|
end
return dirty
end
|
090340b9
gaofengduan
fix 餐车
|
124
|
function Diner:calSellReward(sell, delta, dishData)
|
37037eeb
zhengshouren
计算奖励
|
125
|
local reward = sell.reward or ""
|
090340b9
gaofengduan
fix 餐车
|
126
|
local popular = 0
|
37037eeb
zhengshouren
计算奖励
|
127
|
if delta <= 0 then
|
090340b9
gaofengduan
fix 餐车
|
128
|
return reward, popular
|
37037eeb
zhengshouren
计算奖励
|
129
|
end
|
f5c07b1b
gaofengduan
fix diner
|
130
131
|
for key, value in pairs(dishData.item_normal:toNumMap()) do
reward = reward:incrv(key, value * delta)
|
37037eeb
zhengshouren
计算奖励
|
132
|
end
|
090340b9
gaofengduan
fix 餐车
|
133
|
popular = popular + dishData.famous_normal * delta
|
37037eeb
zhengshouren
计算奖励
|
134
|
if sell.hot > 0 then
|
f5c07b1b
gaofengduan
fix diner
|
135
136
|
for key, value in pairs(dishData.item_popular:toNumMap()) do
reward = reward:incrv(key, value * delta)
|
37037eeb
zhengshouren
计算奖励
|
137
|
end
|
090340b9
gaofengduan
fix 餐车
|
138
|
popular = popular + dishData.famous_popular * delta
|
37037eeb
zhengshouren
计算奖励
|
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
end
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
local value = reward:getv(ItemId.Gold, 0)
value = math.floor(value * (100 + buildData.gold_up) / 100)
if value > 0 then
reward = reward:setv(ItemId.Gold, value)
end
end
if buildData.item_up > 0 then
local value = reward:getv(ItemId.DinerCoin, 0)
value = math.floor(value * (100 + buildData.item_up) / 100)
if value > 0 then
reward = reward:setv(ItemId.DinerCoin, value)
end
end
if buildData and buildData.famous_up > 0 then
|
090340b9
gaofengduan
fix 餐车
|
159
|
popular = math.floor(popular * (100 + buildData.famous_up) / 100)
|
37037eeb
zhengshouren
计算奖励
|
160
161
|
end
end
|
090340b9
gaofengduan
fix 餐车
|
162
|
return reward, popular
|
37037eeb
zhengshouren
计算奖励
|
163
164
|
end
|
36204e3c
zhengshouren
贩卖逻辑
|
165
166
167
168
169
170
171
172
173
174
175
176
|
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
|
1068aae9
gaofengduan
fix diner popularity
|
177
178
179
|
if slot.hot then
sellTime = sellTime * dishData.popularity
end
|
289a4927
gaofengduan
fix diner talent
|
180
|
|
36204e3c
zhengshouren
贩卖逻辑
|
181
182
183
184
185
186
|
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...
|
187
|
local reward, popular = self:calSellReward(sell, deltaCount, dishData)
|
36204e3c
zhengshouren
贩卖逻辑
|
188
|
|
fdb86cad
gaofengduan
fix diner task
|
189
|
if not calOnly and deltaCount > 0 then
|
32161569
gaofengduan
fix diner
|
190
191
192
193
194
|
sells[slot].time = skynet.timex() - deltaTime
sells[slot].count = lastCount
sells[slot].level = self:getProperty("dishTree"):getv(sell.dish, 1)
sells[slot].hot = self:getProperty("hot"):getv(sell.dish, 0)
sells[slot].reward = reward
|
36204e3c
zhengshouren
贩卖逻辑
|
195
|
self:setProperty("sells", json.encode(sells))
|
090340b9
gaofengduan
fix 餐车
|
196
|
self:incrProperty("popular",popular)
|
fdb86cad
gaofengduan
fix diner task
|
197
|
self:checkDinerTask(DinerTask.SellDish, deltaCount, sell.dish)
|
36204e3c
zhengshouren
贩卖逻辑
|
198
199
200
201
202
|
end
return {
deltaCount = deltaCount,
deltaTime = deltaTime,
lastCount = lastCount,
|
2050d40d
gaofengduan
add diner expedit...
|
203
204
|
reward = reward,
popular = popular,
|
36204e3c
zhengshouren
贩卖逻辑
|
205
|
}
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
206
207
|
end
|
020fc7ed
gaofengduan
fix diner expedit...
|
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
|
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
local expediteTime = 7200
local sellTime = dishData.sell_time
if slot.hot then
sellTime = sellTime * dishData.popularity
end
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...
|
225
|
local deltaTime = math.floor(expediteTime - sellTime * expediteCount)
|
020fc7ed
gaofengduan
fix diner expedit...
|
226
|
if expediteCount > 0 then
|
55289e78
gaofengduan
fix diner expedit...
|
227
|
sells[slot].time = sell.time - deltaTime
|
020fc7ed
gaofengduan
fix diner expedit...
|
228
229
230
231
232
233
234
235
236
237
238
239
240
|
sells[slot].count = lastCount
self:setProperty("sells", json.encode(sells))
self:incrProperty("popular",popular)
self:checkDinerTask(DinerTask.SellDish, expediteCount, sell.dish)
end
return {
expediteCount = expediteCount,
lastCount = lastCount,
reward = reward,
popular = popular,
}
end
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
241
242
243
|
function Diner:getMaxSlots()
local slotCount = globalCsv.diner_sell_slots_init
|
36204e3c
zhengshouren
贩卖逻辑
|
244
245
246
247
248
249
|
local hangPass = self.owner:getProperty("hangPass")
for _, carbonId in ipairs(globalCsv.diner_sell_slots_unlock) do
if hangPass[carbonId] then
slotCount = slotCount + 1
end
end
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
|
return slotCount
end
function Diner:getMaxDishs()
local dishCount = globalCsv.diner_sell_dish_init
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
return dishCount
end
function Diner:data()
|
4288160b
gaofengduan
add Diner_getGree...
|
267
|
local properties = {"buildL", "order", "sells", "hot", "dishTree", "skillTree","popular","expedite","gTime"}
|
87cc3a35
zhengshouren
餐厅建筑升级逻辑
|
268
269
270
271
272
|
local data = self:getProperties(properties)
return data
end
return Diner
|