Commit 020fc7ed8d153f77e9ed4d0b38883767e3cef473
1 parent
2050d40d
fix diner expediteSellRpc
Showing
3 changed files
with
56 additions
and
10 deletions
Show diff stats
src/actions/DinerAction.lua
... | ... | @@ -167,24 +167,31 @@ end |
167 | 167 | |
168 | 168 | function _M.expediteSellRpc( agent, data ) |
169 | 169 | local role = agent.role |
170 | + local count = role.dinerData:getProperty("expedite") | |
171 | + local max = #globalCsv.diner_sell_quick_cost | |
172 | + if count > max then | |
173 | + return 1 | |
174 | + end | |
175 | + local cost = {[ItemId.Diamond] = globalCsv.diner_sell_quick_cost[count]} | |
176 | + if not role:checkItemEnough(cost) then | |
177 | + return 2 | |
178 | + end | |
179 | + role:costItems(cost) | |
180 | + | |
170 | 181 | local dirty = false |
171 | - local reward = "" | |
182 | + local reward,popular = "",0 | |
172 | 183 | local sells = json.decode(role.dinerData:getProperty("sells")) |
173 | 184 | for slot, _ in pairs(sells) do |
174 | 185 | role.dinerData:updateSell(slot) |
175 | 186 | end |
176 | 187 | sells = json.decode(role.dinerData:getProperty("sells")) |
177 | 188 | for slot, sell in pairs(sells) do |
178 | - sells[slot].time = sell.time - 7200 | |
179 | - end | |
180 | - role.dinerData:updateProperty({field = "sells", value = json.encode(sells)}) | |
181 | - sells = json.decode(role.dinerData:getProperty("sells")) | |
182 | - for slot, sell in pairs(sells) do | |
183 | - local result = role.dinerData:updateSell(slot) | |
189 | + local result = role.dinerData:expediteSell(slot) | |
184 | 190 | local rewards = result.reward:toNumMap() |
185 | 191 | for k,v in pairs(result.reward:toNumMap()) do |
186 | 192 | reward = reward:incrv(k,v) |
187 | 193 | end |
194 | + popular = popular + result.popular | |
188 | 195 | |
189 | 196 | if rewards[ItemId.Gold] and rewards[ItemId.Gold] > 0 then |
190 | 197 | if role.dinerData:checkDinerTask(DinerTask.DishWithGold, rewards[ItemId.Gold], sell.dish, nil, true) then |
... | ... | @@ -193,6 +200,9 @@ function _M.expediteSellRpc( agent, data ) |
193 | 200 | end |
194 | 201 | end |
195 | 202 | |
203 | + role.dinerData:notifyUpdateProperty("sells", role.dinerData:getProperty("sells")) | |
204 | + role.dinerData:setProperty("expedite",count+1) | |
205 | + role.dinerData:notifyUpdateProperty("expedite", count+1) | |
196 | 206 | for k, v in pairs(reward:toNumMap()) do |
197 | 207 | role:addItem({itemId = k,count = v}) |
198 | 208 | end |
... | ... | @@ -200,7 +210,7 @@ function _M.expediteSellRpc( agent, data ) |
200 | 210 | if dirty then |
201 | 211 | role.dinerData:notifyUpdateProperty("order", role.dinerData:getProperty("order")) |
202 | 212 | end |
203 | - SendPacket(actionCodes.Diner_expediteSellRpc, MsgPack.pack({reward = reward})) | |
213 | + SendPacket(actionCodes.Diner_expediteSellRpc, MsgPack.pack({reward = reward,popular = popular})) | |
204 | 214 | return true |
205 | 215 | end |
206 | 216 | ... | ... |
src/models/Diner.lua
... | ... | @@ -12,6 +12,7 @@ Diner.schema = { |
12 | 12 | dishTree = {"string", "1=1 2=1 3=1"}, -- 料理天赋 |
13 | 13 | skillTree = {"string", ""}, -- 支援天赋 |
14 | 14 | popular = {"number",0}, -- 累计人气 |
15 | + expedite = {"number",1} | |
15 | 16 | } |
16 | 17 | |
17 | 18 | function Diner:refreshDailyData(notify) |
... | ... | @@ -43,6 +44,9 @@ function Diner:refreshDailyData(notify) |
43 | 44 | self:updateProperty({field = "hot", value = hot, notNotify = not notify}) |
44 | 45 | self:setProperty("hot", hot) |
45 | 46 | end |
47 | + -- 每日加速次数 | |
48 | + self:updateProperty({field = "expedite", value = 1, notNotify = not notify}) | |
49 | + self:setProperty("expedite", 1) | |
46 | 50 | |
47 | 51 | -- 特殊订单 |
48 | 52 | local orders = json.decode(self:getProperty("order")) |
... | ... | @@ -200,6 +204,38 @@ function Diner:updateSell(slot, calOnly) |
200 | 204 | } |
201 | 205 | end |
202 | 206 | |
207 | +function Diner:expediteSell(slot) | |
208 | + local sells = json.decode(self:getProperty("sells")) | |
209 | + local sell = sells[slot] | |
210 | + if not sell or sell.count <= 0 then | |
211 | + return | |
212 | + end | |
213 | + local dishData = csvdb["diner_dishCsv"][sell.dish][sell.level] | |
214 | + local expediteCount = 0 | |
215 | + local expediteTime = 7200 | |
216 | + local sellTime = dishData.sell_time | |
217 | + if slot.hot then | |
218 | + sellTime = sellTime * dishData.popularity | |
219 | + end | |
220 | + expediteCount = math.floor(expediteTime / sellTime) | |
221 | + expediteCount = math.min(expediteCount, sell.count) | |
222 | + local lastCount = sell.count - expediteCount | |
223 | + local reward, popular = self:calSellReward(sell, expediteCount, dishData) | |
224 | + | |
225 | + if expediteCount > 0 then | |
226 | + sells[slot].count = lastCount | |
227 | + self:setProperty("sells", json.encode(sells)) | |
228 | + self:incrProperty("popular",popular) | |
229 | + self:checkDinerTask(DinerTask.SellDish, expediteCount, sell.dish) | |
230 | + end | |
231 | + return { | |
232 | + expediteCount = expediteCount, | |
233 | + lastCount = lastCount, | |
234 | + reward = reward, | |
235 | + popular = popular, | |
236 | + } | |
237 | +end | |
238 | + | |
203 | 239 | function Diner:getMaxSlots() |
204 | 240 | local slotCount = globalCsv.diner_sell_slots_init |
205 | 241 | |
... | ... | @@ -226,7 +262,7 @@ function Diner:getMaxDishs() |
226 | 262 | end |
227 | 263 | |
228 | 264 | function Diner:data() |
229 | - local properties = {"buildL", "order", "sells", "hot", "dishTree", "skillTree","popular"} | |
265 | + local properties = {"buildL", "order", "sells", "hot", "dishTree", "skillTree","popular","expedite"} | |
230 | 266 | local data = self:getProperties(properties) |
231 | 267 | return data |
232 | 268 | end | ... | ... |