local ipairs = ipairs local table = table local math = math local next = next local string = string local redisproxy = redisproxy local MsgPack = MsgPack local getRandomName = getRandomName local mcast_util = mcast_util local string_format = string.format local tonumber = tonumber local require = require local _M = {} function _M.listRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) local typ = msg.typ local coin = msg.coin local capsules = {} if typ == 1 then local ret = skynet.call(agent.capsule_serv, "lua", "list", coin) if next(ret) then for k, v in pairs(ret) do capsules[k] = v end end elseif typ == 0 then local ret = role:getCapsuleList(coin) if next(ret) then for k, v in pairs(ret) do capsules[k] = v end end end SendPacket(actionCodes.Capsule_listRpc, MsgPack.pack(capsules)) return true end function _M.joinRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) local roleId = role:getProperty("id") local capsuleId = msg.capsule_id --如果刷新则需要传递当前扭蛋机id local typ = msg.typ or 1 local ret = {} if typ == 1 then ret = skynet.call(agent.capsule_serv, "lua", "join", roleId, capsuleId) elseif typ == 0 then ret = role:joinCapsule() end SendPacket(actionCodes.Capsule_joinRpc, MsgPack.pack(ret)) return true end function _M.exitRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) local roleId = role:getProperty("id") local capsuleId = msg.capsule_id --如果刷新则需要传递当前扭蛋机id local typ = msg.typ or 1 local ret = {} if typ == 1 then ret = skynet.call(agent.capsule_serv, "lua", "exit", roleId, capsuleId) elseif typ == 0 then ret = role:exitCapsule() end SendPacket(actionCodes.Capsule_exitRpc, MsgPack.pack(ret)) return true end function _M.registerRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) local roleId = role:getProperty("id") local capsuleId = msg.capsule_id local ret = skynet.call(agent.capsule_serv, "lua", "register", roleId, capsuleId) if not ret then return 1 end SendPacket(actionCodes.Capsule_registerRpc, MsgPack.pack(ret)) return true end function _M.drawRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) local roleId = role:getProperty("id") local capsuleId = msg.capsule_id local typ = msg.typ --0=独享,1= 公开 local full = msg.full or 0-- 0=单次,1=十连抽 2=全收 local cares = msg.cares local ret, token, reward, change, rewardByGoods, capsule --检查库存 if typ == 1 then ret, token = skynet.call(agent.capsule_serv, "lua", "goods_stock", capsuleId) else ret, token = role:goodStock(capsuleId) end if ret == 0 then skynet.error("零库存 " .. capsuleId) return 0 end --检查余额 if not next(token) then skynet.error("代币未配置 " .. capsuleId) return 1 end local cost, drawsNum = {}, 0 if full == 0 then drawsNum = 1 elseif full == 1 then if ret < 10 then drawsNum = ret else drawsNum = 10 end elseif full == 2 then drawsNum = ret end cost[token[1]] = drawsNum * token[2] if not role:checkItemEnough(cost) then return 2 end role:costItems(cost, {log = {desc = "CapsuleCoinCost", int1 = token[1], int2 = cost[token[1]]}}) --开始抽奖 if typ == 1 then ret, reward, rewardByGoods, capsule = skynet.call(agent.capsule_serv, "lua", "draw_capsule", roleId, capsuleId, full, cares) else ret, reward, rewardByGoods, capsule= role:drawCapsule(capsuleId, full, cares) end if ret < 5 then return ret end --dump(rewardByGoods) --dump(capsule) if ret == 5 then SendPacket(actionCodes.Capsule_drawRpc, MsgPack.pack({change = reward, capsule = capsule})) return true end -- rewardByGoods是抽到的扭蛋信息,reward是抽扭蛋后获得的所有奖励信息。 if rewardByGoods and next(rewardByGoods) then reward, change = role:award(reward, {log = {desc = "CapsuleReward", int1 = tonumber(capsuleId), int2 = roleId}}) SendPacket(actionCodes.Capsule_drawRpc, MsgPack.pack({reward = rewardByGoods, capsule = capsule})) else return ret end return true end function _M.getDataRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) local capsuleId = msg.capsule_id local typ = msg.typ --0=独享,1= 公开 local roleId = role:getProperty("id") local capsule if typ == 1 then capsule = skynet.call(agent.capsule_serv, "lua", "capsule_data", roleId, capsuleId) else capsule = role:getCapsuleData(capsuleId) end if not capsule then return 1 end SendPacket(actionCodes.Capsule_getDataRpc, MsgPack.pack({capsule = capsule})) return true end function _M.convertCapsuleRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) local coin = msg.coin local count = msg.count or 1 local cost, convert = {} for k, v in pairs(globalCsv.ichibankuji_buy_cost)do if k == coin then convert = v:toArray(true, "=") break end end cost[convert[1]] = convert[2] * count if not role:checkItemEnough(cost) then return 1 end role:costItems(cost, {log = {desc = "CapsuleConvert", int1 = convert[1], int2 = cost[convert[1]]}}) local reward, change = role:award({coin = count}, {log = {desc = "CapsuleConvert"}}) SendPacket(actionCodes.Capsule_convertCapsuleRpc, MsgPack.pack(role:packReward(reward, change))) return true end return _M