diff --git a/src/actions/HangAction.lua b/src/actions/HangAction.lua index 26d617b..7bf8c31 100644 --- a/src/actions/HangAction.lua +++ b/src/actions/HangAction.lua @@ -22,12 +22,13 @@ local function checkReward(role) return end local carbonData = csvdb["idle_battleCsv"][hangInfo.carbonId] - local nowTime = math.min(skynet.timex(), hangInfo.endTime or 0) + local nowCoinTime = math.min(skynet.timex(), hangInfo.endCoinTime or 0) + local nowItemTime = math.min(skynet.timex(), hangInfo.endItemTime or 0) - local coinCount = math.max(0, math.floor((nowTime - hangInfo.coinTime) / globalCsv.idle_money_produce_cd)) + local coinCount = math.max(0, math.floor((nowCoinTime - hangInfo.coinTime) / globalCsv.idle_money_produce_cd)) hangInfo.coinTime = hangInfo.coinTime + coinCount * globalCsv.idle_money_produce_cd - local itemCount = math.max(0, math.floor((nowTime - hangInfo.itemTime) / globalCsv.idle_item_produce_cd)) + local itemCount = math.max(0, math.floor((nowItemTime - hangInfo.itemTime) / globalCsv.idle_item_produce_cd)) hangInfo.itemTime = hangInfo.itemTime + itemCount * globalCsv.idle_item_produce_cd local items = role:getProperty("hangBag") @@ -41,7 +42,7 @@ local function checkReward(role) end local curTypeCount = 0 for id, _ in pairs(items) do - if id ~= ItemId.Gold and id ~= ItemId.Exp then + if id ~= ItemId.Gold and id ~= ItemId.Exp and id ~= ItemId.PlayerExp then curTypeCount = curTypeCount + 1 end end @@ -87,7 +88,8 @@ function _M.startRpc( agent, data ) hangInfo.coinTime = nowTime hangInfo.itemTime = nowTime if isNew then - hangInfo.endTime = nowTime + globalCsv.idle_producetime_max + hangInfo.endCoinTime = nowTime + globalCsv.idle_producetime_max + hangInfo.endItemTime = nowTime + globalCsv.idle_producetime_max end if not hangPass[carbonId] then hangInfo.bossTime = nowTime + carbonData.idle_time @@ -115,10 +117,18 @@ end function _M.startBattleRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) + local carbonId = msg.carbonId + local curData = csvdb["idle_battleCsv"][carbonId] + if not curData then return end + local hangInfo = role:getProperty("hangInfo") - if msg.carbonId ~= hangInfo.carbonId then return end + if curData.main ~= 1 then + if carbonId ~= hangInfo.carbonId then return end + end + local hangPass = role:getProperty("hangPass") if hangPass[hangInfo.carbonId] then return end + local key = tostring(math.random()) hangInfo.key = key local nowTime = skynet.timex() @@ -132,18 +142,22 @@ function _M.endBattleRpc(agent, data) local msg = MsgPack.unpack(data) local hangInfo = role:getProperty("hangInfo") if not msg.key or msg.key ~= hangInfo.key then return end - if msg.carbonId ~= hangInfo.carbonId then return end + local carbonId = msg.carbonId + local carbonData = csvdb["idle_battleCsv"][carbonId] + if carbonData.main ~= 1 then + if carbonId ~= hangInfo.carbonId then return end + end local hangPass = role:getProperty("hangPass") if hangPass[hangInfo.carbonId] then return end local reward if msg.starNum and msg.starNum > 0 then --win - hangPass[hangInfo.carbonId] = 1 + hangPass[carbonId] = 1 role:updateProperty({field = "hangPass", value = hangPass}) - hangInfo.bossTime = nil - + if carbonData.main ~= 1 then + hangInfo.bossTime = nil + end -- reward reward = {} - local carbonData = csvdb["idle_battleCsv"][hangInfo.carbonId] reward[ItemId.Gold] = carbonData.money_clear reward[ItemId.Exp] = carbonData.exp_clear reward[ItemId.PlayerExp] = carbonData.playerExp_clear @@ -191,7 +205,8 @@ function _M.getRewardRpc(agent , data) table.clear(items) local hangInfo = role:getProperty("hangInfo") local nowTime = skynet.timex() - hangInfo.endTime = nowTime + globalCsv.idle_producetime_max + hangInfo.endItemTime = nowTime + globalCsv.idle_producetime_max + hangInfo.endCoinTime = nowTime + globalCsv.idle_producetime_max hangInfo.coinTime = nowTime hangInfo.itemTime = nowTime role:updateProperty({field = "hangBag", value = items}) @@ -203,6 +218,64 @@ function _M.getRewardRpc(agent , data) return true end +function _M.getRewardItemRpc(agent , data) + local role = agent.role + checkReward(role) + local items = role:getProperty("hangBag") + if not next(items) then return end + + local notNeed = {[ItemId.Gold] = 1, [ItemId.Exp] = 1, [ItemId.PlayerExp] = 1} + local reward = {} + for itemId , count in pairs(items) do + if not notNeed[itemId] then + reward[itemId] = count + items[itemId] = nil + end + end + if not next(reward) then return end + local reward = role:award(reward, {}) + + local hangInfo = role:getProperty("hangInfo") + local nowTime = skynet.timex() + hangInfo.endItemTime = nowTime + globalCsv.idle_producetime_max + hangInfo.itemTime = nowTime + role:updateProperty({field = "hangBag", value = items}) + role:updateProperty({field = "hangInfo", value = hangInfo}) + + SendPacket(actionCodes.Hang_getRewardItemRpc, MsgPack.pack({ + reward = reward + })) + return true +end + +function _M.getRewardCoinRpc(agent , data) + local role = agent.role + checkReward(role) + local items = role:getProperty("hangBag") + if not next(items) then return end + + local need = {[ItemId.Gold] = 1, [ItemId.Exp] = 1, [ItemId.PlayerExp] = 1} + local reward = {} + for itemId , count in pairs(items) do + if need[itemId] then + reward[itemId] = count + items[itemId] = nil + end + end + local reward = role:award(reward, {}) + + local hangInfo = role:getProperty("hangInfo") + local nowTime = skynet.timex() + hangInfo.endCoinTime = nowTime + globalCsv.idle_producetime_max + hangInfo.coinTime = nowTime + role:updateProperty({field = "hangBag", value = items}) + role:updateProperty({field = "hangInfo", value = hangInfo}) + + SendPacket(actionCodes.Hang_getRewardCoinRpc, MsgPack.pack({ + reward = reward + })) + return true +end function _M.quickRpc(agent , data) local role = agent.role -- libgit2 0.21.2