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 | ... | ... |