Commit bcf5bfbb14007154e4a67df741ef70f1356fc943
1 parent
00115a7a
挂机new
Showing
1 changed file
with
85 additions
and
12 deletions
Show diff stats
src/actions/HangAction.lua
| @@ -22,12 +22,13 @@ local function checkReward(role) | @@ -22,12 +22,13 @@ local function checkReward(role) | ||
| 22 | return | 22 | return |
| 23 | end | 23 | end |
| 24 | local carbonData = csvdb["idle_battleCsv"][hangInfo.carbonId] | 24 | local carbonData = csvdb["idle_battleCsv"][hangInfo.carbonId] |
| 25 | - local nowTime = math.min(skynet.timex(), hangInfo.endTime or 0) | 25 | + local nowCoinTime = math.min(skynet.timex(), hangInfo.endCoinTime or 0) |
| 26 | + local nowItemTime = math.min(skynet.timex(), hangInfo.endItemTime or 0) | ||
| 26 | 27 | ||
| 27 | - local coinCount = math.max(0, math.floor((nowTime - hangInfo.coinTime) / globalCsv.idle_money_produce_cd)) | 28 | + local coinCount = math.max(0, math.floor((nowCoinTime - hangInfo.coinTime) / globalCsv.idle_money_produce_cd)) |
| 28 | hangInfo.coinTime = hangInfo.coinTime + coinCount * globalCsv.idle_money_produce_cd | 29 | hangInfo.coinTime = hangInfo.coinTime + coinCount * globalCsv.idle_money_produce_cd |
| 29 | 30 | ||
| 30 | - local itemCount = math.max(0, math.floor((nowTime - hangInfo.itemTime) / globalCsv.idle_item_produce_cd)) | 31 | + local itemCount = math.max(0, math.floor((nowItemTime - hangInfo.itemTime) / globalCsv.idle_item_produce_cd)) |
| 31 | hangInfo.itemTime = hangInfo.itemTime + itemCount * globalCsv.idle_item_produce_cd | 32 | hangInfo.itemTime = hangInfo.itemTime + itemCount * globalCsv.idle_item_produce_cd |
| 32 | 33 | ||
| 33 | local items = role:getProperty("hangBag") | 34 | local items = role:getProperty("hangBag") |
| @@ -41,7 +42,7 @@ local function checkReward(role) | @@ -41,7 +42,7 @@ local function checkReward(role) | ||
| 41 | end | 42 | end |
| 42 | local curTypeCount = 0 | 43 | local curTypeCount = 0 |
| 43 | for id, _ in pairs(items) do | 44 | for id, _ in pairs(items) do |
| 44 | - if id ~= ItemId.Gold and id ~= ItemId.Exp then | 45 | + if id ~= ItemId.Gold and id ~= ItemId.Exp and id ~= ItemId.PlayerExp then |
| 45 | curTypeCount = curTypeCount + 1 | 46 | curTypeCount = curTypeCount + 1 |
| 46 | end | 47 | end |
| 47 | end | 48 | end |
| @@ -87,7 +88,8 @@ function _M.startRpc( agent, data ) | @@ -87,7 +88,8 @@ function _M.startRpc( agent, data ) | ||
| 87 | hangInfo.coinTime = nowTime | 88 | hangInfo.coinTime = nowTime |
| 88 | hangInfo.itemTime = nowTime | 89 | hangInfo.itemTime = nowTime |
| 89 | if isNew then | 90 | if isNew then |
| 90 | - hangInfo.endTime = nowTime + globalCsv.idle_producetime_max | 91 | + hangInfo.endCoinTime = nowTime + globalCsv.idle_producetime_max |
| 92 | + hangInfo.endItemTime = nowTime + globalCsv.idle_producetime_max | ||
| 91 | end | 93 | end |
| 92 | if not hangPass[carbonId] then | 94 | if not hangPass[carbonId] then |
| 93 | hangInfo.bossTime = nowTime + carbonData.idle_time | 95 | hangInfo.bossTime = nowTime + carbonData.idle_time |
| @@ -115,10 +117,18 @@ end | @@ -115,10 +117,18 @@ end | ||
| 115 | function _M.startBattleRpc(agent, data) | 117 | function _M.startBattleRpc(agent, data) |
| 116 | local role = agent.role | 118 | local role = agent.role |
| 117 | local msg = MsgPack.unpack(data) | 119 | local msg = MsgPack.unpack(data) |
| 120 | + local carbonId = msg.carbonId | ||
| 121 | + local curData = csvdb["idle_battleCsv"][carbonId] | ||
| 122 | + if not curData then return end | ||
| 123 | + | ||
| 118 | local hangInfo = role:getProperty("hangInfo") | 124 | local hangInfo = role:getProperty("hangInfo") |
| 119 | - if msg.carbonId ~= hangInfo.carbonId then return end | 125 | + if curData.main ~= 1 then |
| 126 | + if carbonId ~= hangInfo.carbonId then return end | ||
| 127 | + end | ||
| 128 | + | ||
| 120 | local hangPass = role:getProperty("hangPass") | 129 | local hangPass = role:getProperty("hangPass") |
| 121 | if hangPass[hangInfo.carbonId] then return end | 130 | if hangPass[hangInfo.carbonId] then return end |
| 131 | + | ||
| 122 | local key = tostring(math.random()) | 132 | local key = tostring(math.random()) |
| 123 | hangInfo.key = key | 133 | hangInfo.key = key |
| 124 | local nowTime = skynet.timex() | 134 | local nowTime = skynet.timex() |
| @@ -132,18 +142,22 @@ function _M.endBattleRpc(agent, data) | @@ -132,18 +142,22 @@ function _M.endBattleRpc(agent, data) | ||
| 132 | local msg = MsgPack.unpack(data) | 142 | local msg = MsgPack.unpack(data) |
| 133 | local hangInfo = role:getProperty("hangInfo") | 143 | local hangInfo = role:getProperty("hangInfo") |
| 134 | if not msg.key or msg.key ~= hangInfo.key then return end | 144 | if not msg.key or msg.key ~= hangInfo.key then return end |
| 135 | - if msg.carbonId ~= hangInfo.carbonId then return end | 145 | + local carbonId = msg.carbonId |
| 146 | + local carbonData = csvdb["idle_battleCsv"][carbonId] | ||
| 147 | + if carbonData.main ~= 1 then | ||
| 148 | + if carbonId ~= hangInfo.carbonId then return end | ||
| 149 | + end | ||
| 136 | local hangPass = role:getProperty("hangPass") | 150 | local hangPass = role:getProperty("hangPass") |
| 137 | if hangPass[hangInfo.carbonId] then return end | 151 | if hangPass[hangInfo.carbonId] then return end |
| 138 | local reward | 152 | local reward |
| 139 | if msg.starNum and msg.starNum > 0 then --win | 153 | if msg.starNum and msg.starNum > 0 then --win |
| 140 | - hangPass[hangInfo.carbonId] = 1 | 154 | + hangPass[carbonId] = 1 |
| 141 | role:updateProperty({field = "hangPass", value = hangPass}) | 155 | role:updateProperty({field = "hangPass", value = hangPass}) |
| 142 | - hangInfo.bossTime = nil | ||
| 143 | - | 156 | + if carbonData.main ~= 1 then |
| 157 | + hangInfo.bossTime = nil | ||
| 158 | + end | ||
| 144 | -- reward | 159 | -- reward |
| 145 | reward = {} | 160 | reward = {} |
| 146 | - local carbonData = csvdb["idle_battleCsv"][hangInfo.carbonId] | ||
| 147 | reward[ItemId.Gold] = carbonData.money_clear | 161 | reward[ItemId.Gold] = carbonData.money_clear |
| 148 | reward[ItemId.Exp] = carbonData.exp_clear | 162 | reward[ItemId.Exp] = carbonData.exp_clear |
| 149 | reward[ItemId.PlayerExp] = carbonData.playerExp_clear | 163 | reward[ItemId.PlayerExp] = carbonData.playerExp_clear |
| @@ -191,7 +205,8 @@ function _M.getRewardRpc(agent , data) | @@ -191,7 +205,8 @@ function _M.getRewardRpc(agent , data) | ||
| 191 | table.clear(items) | 205 | table.clear(items) |
| 192 | local hangInfo = role:getProperty("hangInfo") | 206 | local hangInfo = role:getProperty("hangInfo") |
| 193 | local nowTime = skynet.timex() | 207 | local nowTime = skynet.timex() |
| 194 | - hangInfo.endTime = nowTime + globalCsv.idle_producetime_max | 208 | + hangInfo.endItemTime = nowTime + globalCsv.idle_producetime_max |
| 209 | + hangInfo.endCoinTime = nowTime + globalCsv.idle_producetime_max | ||
| 195 | hangInfo.coinTime = nowTime | 210 | hangInfo.coinTime = nowTime |
| 196 | hangInfo.itemTime = nowTime | 211 | hangInfo.itemTime = nowTime |
| 197 | role:updateProperty({field = "hangBag", value = items}) | 212 | role:updateProperty({field = "hangBag", value = items}) |
| @@ -203,6 +218,64 @@ function _M.getRewardRpc(agent , data) | @@ -203,6 +218,64 @@ function _M.getRewardRpc(agent , data) | ||
| 203 | return true | 218 | return true |
| 204 | end | 219 | end |
| 205 | 220 | ||
| 221 | +function _M.getRewardItemRpc(agent , data) | ||
| 222 | + local role = agent.role | ||
| 223 | + checkReward(role) | ||
| 224 | + local items = role:getProperty("hangBag") | ||
| 225 | + if not next(items) then return end | ||
| 226 | + | ||
| 227 | + local notNeed = {[ItemId.Gold] = 1, [ItemId.Exp] = 1, [ItemId.PlayerExp] = 1} | ||
| 228 | + local reward = {} | ||
| 229 | + for itemId , count in pairs(items) do | ||
| 230 | + if not notNeed[itemId] then | ||
| 231 | + reward[itemId] = count | ||
| 232 | + items[itemId] = nil | ||
| 233 | + end | ||
| 234 | + end | ||
| 235 | + if not next(reward) then return end | ||
| 236 | + local reward = role:award(reward, {}) | ||
| 237 | + | ||
| 238 | + local hangInfo = role:getProperty("hangInfo") | ||
| 239 | + local nowTime = skynet.timex() | ||
| 240 | + hangInfo.endItemTime = nowTime + globalCsv.idle_producetime_max | ||
| 241 | + hangInfo.itemTime = nowTime | ||
| 242 | + role:updateProperty({field = "hangBag", value = items}) | ||
| 243 | + role:updateProperty({field = "hangInfo", value = hangInfo}) | ||
| 244 | + | ||
| 245 | + SendPacket(actionCodes.Hang_getRewardItemRpc, MsgPack.pack({ | ||
| 246 | + reward = reward | ||
| 247 | + })) | ||
| 248 | + return true | ||
| 249 | +end | ||
| 250 | + | ||
| 251 | +function _M.getRewardCoinRpc(agent , data) | ||
| 252 | + local role = agent.role | ||
| 253 | + checkReward(role) | ||
| 254 | + local items = role:getProperty("hangBag") | ||
| 255 | + if not next(items) then return end | ||
| 256 | + | ||
| 257 | + local need = {[ItemId.Gold] = 1, [ItemId.Exp] = 1, [ItemId.PlayerExp] = 1} | ||
| 258 | + local reward = {} | ||
| 259 | + for itemId , count in pairs(items) do | ||
| 260 | + if need[itemId] then | ||
| 261 | + reward[itemId] = count | ||
| 262 | + items[itemId] = nil | ||
| 263 | + end | ||
| 264 | + end | ||
| 265 | + local reward = role:award(reward, {}) | ||
| 266 | + | ||
| 267 | + local hangInfo = role:getProperty("hangInfo") | ||
| 268 | + local nowTime = skynet.timex() | ||
| 269 | + hangInfo.endCoinTime = nowTime + globalCsv.idle_producetime_max | ||
| 270 | + hangInfo.coinTime = nowTime | ||
| 271 | + role:updateProperty({field = "hangBag", value = items}) | ||
| 272 | + role:updateProperty({field = "hangInfo", value = hangInfo}) | ||
| 273 | + | ||
| 274 | + SendPacket(actionCodes.Hang_getRewardCoinRpc, MsgPack.pack({ | ||
| 275 | + reward = reward | ||
| 276 | + })) | ||
| 277 | + return true | ||
| 278 | +end | ||
| 206 | 279 | ||
| 207 | function _M.quickRpc(agent , data) | 280 | function _M.quickRpc(agent , data) |
| 208 | local role = agent.role | 281 | local role = agent.role |