AdvAction.lua 2.89 KB
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.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 


return _M