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 table_insert = table.insert local tconcat = table.concat local table_unpack = table.unpack local _M = {} --开始一个新的关卡 function _M.startAdvRpc( agent, data ) local role = agent.role local msg = MsgPack.unpack(data) local chapterId = msg.chapterId --上一个关卡结束才可以开始新的关卡 local advInfo = role:getProperty("advInfo") if next(advInfo) then return end role:getAdvData():initByChapter(chapterId, 1) SendPacket(actionCodes.Adv_startAdvRpc, '') return true end function _M.roleFormatRpc(agent , data) local role = agent.role local msg = MsgPack.unpack(data) local advTeam = role:getProperty("advTeam") for slot, heroId in pairs(msg.heros) do if not role.heros[heroId] then return end end table.clear(advTeam) advTeam.heros = {} for slot, heroId in pairs(msg.heros) do advTeam.heros[slot] = heroId end advTeam.leader = msg.leader role:updateProperty({field = "advTeam", value = advTeam}) SendPacket(actionCodes.Adv_roleFormatRpc, '') return true end -- 点击地块(解锁)(触发事件) function _M.clickBlockRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) local adv = role:getAdvData() local status = adv:clickBlock(msg.roomId, msg.blockId, msg) if not status then return end SendPacket(actionCodes.Adv_clickBlockRpc, MsgPack.pack({events = adv:popBackEvents()})) return true end --use item 使用背包道具 function _M.useItemRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) local adv = role:getAdvData() local status = adv:useItem(msg.itemId, msg.count, msg.target) -- target {roomId = 1, blockId = 1} 选择的目标 if not status then return end SendPacket(actionCodes.Adv_useItemRpc, MsgPack.pack({events = adv:popBackEvents()})) return true end --使用营养技能 function _M.usePotionRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) local dishLevel = role.dinerData:getProperty("dishTree"):getv(msg.potionId, 0) if dishLevel == 0 then return end local adv = role:getAdvData() local status = adv:usePotion(msg.potionId, dishLevel, msg.target) -- target {roomId = 1, blockId = 1} 选择的目标 if not status then return end SendPacket(actionCodes.Adv_usePotionRpc, MsgPack.pack({events = adv:popBackEvents()})) return true end --使用战斗技能 function _M.specialSkillRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) local adv = role:getAdvData() local status = adv:useSpecialSkill(msg.skillId) if not status then return end SendPacket(actionCodes.Adv_specialSkillRpc, MsgPack.pack({})) return true end --退出 function _M.exitAdvRpc(agent, data) local role = agent.role -- local msg = MsgPack.unpack(data) local adv = role:getAdvData() local status = adv:exit() -- target {roomId = 1, blockId = 1} 选择的目标 SendPacket(actionCodes.Adv_exitAdvRpc, MsgPack.pack({events = adv:popBackEvents()})) return true end --继续战斗 function _M.nextTurnRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) local adv = role:getAdvData() local status = adv:nextBattleTurn(msg.turn) if not status then -- 数据不同步则发送缓存数据 SendPacket(actionCodes.Adv_nextTurnRpc, MsgPack.pack({events = adv.tempBackEvents})) return true end SendPacket(actionCodes.Adv_nextTurnRpc, MsgPack.pack({events = adv:popBackEvents()})) return true end return _M