Commit 384bb077c785366a93be90ec5f6e5db08f6c0692

Authored by zhouahaihai
1 parent ec87b4a5

挂机

src/ProtocolCode.lua
... ... @@ -44,6 +44,12 @@ actionCodes = {
44 44 Hero_loveTaskRpc = 213,
45 45 Hero_changeSkinRpc = 214,
46 46  
  47 + Hang_startRpc = 251,
  48 + Hang_checkRpc = 252,
  49 + Hang_startBattleRpc = 253,
  50 + Hang_endBattleRpc = 254,
  51 + Hang_roleFormatRpc = 255,
  52 +
47 53 }
48 54  
49 55 rpcResponseBegin = 10000
... ...
src/actions/AdvAction.lua
... ... @@ -35,14 +35,14 @@ function _M.roleFormatRpc(agent , data)
35 35 local role = agent.role
36 36 local msg = MsgPack.unpack(data)
37 37 local advTeam = role:getProperty("advTeam")
38   - for slot, heroId in ipairs(msg.heros) do
  38 + for slot, heroId in pairs(msg.heros) do
39 39 if not role.heros[heroId] then
40 40 return
41 41 end
42 42 end
43 43 table.clear(advTeam)
44 44 advTeam.heros = {}
45   - for slot, heroId in ipairs(msg.heros) do
  45 + for slot, heroId in pairs(msg.heros) do
46 46 advTeam.heros[slot] = heroId
47 47 end
48 48 role:updateProperty({field = "advTeam", value = advTeam})
... ...
src/actions/HangAction.lua 0 → 100644
... ... @@ -0,0 +1,164 @@
  1 +local ipairs = ipairs
  2 +local table = table
  3 +local math = math
  4 +local next = next
  5 +local string = string
  6 +local redisproxy = redisproxy
  7 +local MsgPack = MsgPack
  8 +local getRandomName = getRandomName
  9 +local mcast_util = mcast_util
  10 +local string_format = string.format
  11 +local tonumber = tonumber
  12 +local require = require
  13 +local table_insert = table.insert
  14 +local tconcat = table.concat
  15 +local table_unpack = table.unpack
  16 +
  17 +local _M = {}
  18 +
  19 +local function checkReward(role)
  20 + local hangInfo = role:getProperty("hangInfo")
  21 + if not hangInfo.carbonId or not hangInfo.coinTime or not hangInfo.itemTime then
  22 + return
  23 + end
  24 + local carbonData = csvdb["idle_battleCsv"][hangInfo.carbonId]
  25 + local nowTime = skynet.timex()
  26 +
  27 + local coinCount = math.floor((nowTime - hangInfo.coinTime) / 5)
  28 + hangInfo.coinTime = hangInfo.coinTime + coinCount * 5
  29 +
  30 + local itemCount = math.floor((nowTime - hangInfo.itemTime) / 60)
  31 + hangInfo.itemTime = hangInfo.itemTime + itemCount * 60
  32 +
  33 + local items = role:getProperty("hangBag")
  34 + items[ItemId.Gold] = (items[ItemId.Gold] or 0) + coinCount * carbonData.money
  35 + items[ItemId.Exp] = (items[ItemId.Exp] or 0) + coinCount * carbonData.exp
  36 +
  37 + local pool = {}
  38 + for _, temp in pairs(carbonData.item:toArray()) do
  39 + table.insert(pool, temp:toArray(true, "="))
  40 + end
  41 + for i = 1, itemCount do
  42 + local cur = pool[math.randWeight(pool, 3)]
  43 + items[cur[1]] = (items[cur[1]] or 0) + cur[2]
  44 + end
  45 +
  46 + if coinCount > 0 or itemCount > 0 then
  47 + role:updateProperty({field = "hangBag", value = items})
  48 + role:updateProperty({field = "hangInfo", value = hangInfo})
  49 + end
  50 +end
  51 +
  52 +
  53 +
  54 +--开始一个新的关卡
  55 +function _M.startRpc( agent, data )
  56 + local role = agent.role
  57 + local msg = MsgPack.unpack(data)
  58 + local carbonId = msg.carbonId
  59 + local carbonData = csvdb["idle_battleCsv"][carbonId]
  60 + if not carbonData then return end
  61 +
  62 + local hangPass = role:getProperty("hangPass")
  63 + if carbonData.prepose ~= "" and carbonData.prepose ~= 0 and not hangPass[carbonData.prepose] then return end
  64 +
  65 + checkReward(role)
  66 +
  67 + local hangInfo = role:getProperty("hangInfo")
  68 + table.clear(hangInfo)
  69 + hangInfo.carbonId = carbonId
  70 + local nowTime = skynet.timex()
  71 + hangInfo.coinTime = nowTime
  72 + hangInfo.itemTime = nowTime
  73 + if not hangPass[carbonId] then
  74 + hangInfo.bossTime = nowTime + 100
  75 + end
  76 + role:updateProperty({field = "hangInfo", value = hangInfo})
  77 +
  78 + SendPacket(actionCodes.Hang_startRpc, '')
  79 + return true
  80 +end
  81 +
  82 +-- 每隔1分钟检查一次
  83 +function _M.checkRpc(agent, data)
  84 + local role = agent.role
  85 + -- local msg = MsgPack.unpack(data)
  86 + checkReward(role)
  87 + SendPacket(actionCodes.Hang_checkRpc, MsgPack.pack({}))
  88 + return true
  89 +end
  90 +
  91 +function _M.startBattleRpc(agent, data)
  92 + local role = agent.role
  93 + local msg = MsgPack.unpack(data)
  94 + local hangInfo = role:getProperty("hangInfo")
  95 + if msg.carbonId ~= hangInfo.carbonId then return end
  96 + local hangPass = role:getProperty("hangPass")
  97 + if hangPass[hangInfo.carbonId] then return end
  98 + local key = tostring(math.random())
  99 + hangInfo.key = key
  100 + local nowTime = skynet.timex()
  101 + hangInfo.bossTime = nowTime + 100
  102 + role:updateProperty({field = "hangInfo", value = hangInfo})
  103 + SendPacket(actionCodes.Hang_startBattleRpc, MsgPack.pack({key = key}))
  104 + return true
  105 +end
  106 +
  107 +function _M.endBattleRpc(agent, data)
  108 + local role = agent.role
  109 + local msg = MsgPack.unpack(data)
  110 + local hangInfo = role:getProperty("hangInfo")
  111 + if not msg.key or msg.key ~= hangInfo.key then return end
  112 + if msg.carbonId ~= hangInfo.carbonId then return end
  113 + local hangPass = role:getProperty("hangPass")
  114 + if hangPass[hangInfo.carbonId] then return end
  115 + local reward
  116 + if msg.starNum and msg.starNum > 0 then --win
  117 + hangPass[hangInfo.carbonId] = 1
  118 + role:updateProperty({field = "hangPass", value = hangPass})
  119 + hangInfo.bossTime = nil
  120 +
  121 + -- reward
  122 + reward = {}
  123 + local items = role:getProperty("hangBag")
  124 + local carbonData = csvdb["idle_battleCsv"][carbonId]
  125 + items[ItemId.Gold] = (items[ItemId.Gold] or 0) + carbonData.money_clear
  126 + items[ItemId.Exp] = (items[ItemId.Exp] or 0) + carbonData.exp_clear
  127 + reward[ItemId.Gold] = carbonData.money_clear
  128 + reward[ItemId.Exp] = carbonData.exp_clear
  129 + for itemId, count in pairs(carbonData.item_clear:toNumMap()) do
  130 + items[itemId] = (items[itemId] or 0) + count
  131 + reward[itemId] = count
  132 + end
  133 + end
  134 + hangInfo.key = nil
  135 + role:updateProperty({field = "hangInfo", value = hangInfo})
  136 + SendPacket(actionCodes.Hang_endBattleRpc, MsgPack.pack({
  137 + starNum = msg.starNum,
  138 + reward = reward,
  139 + }))
  140 + return true
  141 +end
  142 +
  143 +function _M.roleFormatRpc(agent , data)
  144 + local role = agent.role
  145 + local msg = MsgPack.unpack(data)
  146 + local hangTeam = role:getProperty("hangTeam")
  147 + for slot, heroId in pairs(msg.heros) do
  148 + if not role.heros[heroId] then
  149 + return
  150 + end
  151 + end
  152 + table.clear(hangTeam)
  153 + hangTeam.heros = {}
  154 + for slot, heroId in pairs(msg.heros) do
  155 + hangTeam.heros[slot] = heroId
  156 + end
  157 + hangTeam.leader = msg.leader
  158 +
  159 + role:updateProperty({field = "hangTeam", value = hangTeam})
  160 + SendPacket(actionCodes.Hang_roleFormatRpc, '')
  161 + return true
  162 +end
  163 +
  164 +return _M
0 165 \ No newline at end of file
... ...
src/adv/AdvBattle.lua
... ... @@ -38,7 +38,7 @@ function Battle:initPlayer()
38 38 end
39 39 end
40 40 player.hp = hp
41   - player.atk = player.hp * 0.1 --todo 系数是临时的
  41 + player.atk = tonumber(string.format("%0.0f", player.hp * 0.1)) --todo 系数是临时的
42 42 player.miss = 0
43 43 player.hit = 100
44 44 self.adv.advTeam.player = player
... ...
src/models/Role.lua
... ... @@ -42,6 +42,13 @@ Role.schema = {
42 42 advInfo = {"table", {}}, -- 冒险关卡信息
43 43 advTeam = {"table", {}}, -- 冒险玩家队伍信息
44 44  
  45 + --挂机相关
  46 + hangPass = {"table", {}}, -- 挂机通过的最大关卡
  47 + hangTeam = {"table", {}}, -- 挂机队伍
  48 + hangInfo = {"table", {}}, -- 当前挂机信息
  49 + hangBag = {"table", {}}, -- 背包
  50 + hangBagLimit = {"number", 10}, --背包上限
  51 +
45 52 }
46 53  
47 54  
... ... @@ -144,10 +151,17 @@ function Role:data()
144 151 reDiamond = self:getProperty("reDiamond"),
145 152 items = self:getProperty("items"):toNumMap(),
146 153 loveStatus = self:getProperty("loveStatus"):toNumMap(),
  154 +
147 155 advPass = self:getProperty("advPass"),
148 156 advInfo = self:getProperty("advInfo"),
149 157 advItems = self:getProperty("advItems"):toNumMap(),
150 158 advTeam = self:getProperty("advTeam"),
  159 +
  160 + hangPass = self:getProperty("hangPass"),
  161 + hangTeam = self:getProperty("hangTeam"),
  162 + hangInfo = self:getProperty("hangInfo"),
  163 + hangBag = self:getProperty("hangBag"),
  164 + hangBagLimit = self:getProperty("hangBagLimit"),
151 165 }
152 166 end
153 167  
... ...