GmAction.lua 4.37 KB
local _M = {}
local redisproxy = redisproxy
function _M.clientRequest(agent, data)
	local msg = MsgPack.unpack(data)
	local role = agent.role
	local action = _M[msg.cmd]
	local bin = MsgPack.pack({ cmd = "指令失败" })
	if not action then
		SendPacket(actionCodes.Gm_receiveResponse, bin)
		return true
	end
	local ret = action(role, msg)
	bin = MsgPack.pack({ cmd = ret })
	SendPacket(actionCodes.Gm_receiveResponse, bin)
	return true
end


function _M.hero(role, pms)
	local heroType = tonum(pms.pm1)
	if not role:addHero({type = heroType}) then
		return "失败"
	end
	return "成功"
end

function _M.equip(role, pms)
	local typ = tonum(pms.pm1)
	local level = tonum(pms.pm2)
	local count = tonum(pms.pm3)
	role:addEquip({type = typ,level = level,count = count})
	return "成功"
end

function _M.rune(role, pms)
	local typ = tonum(pms.pm1)
	local id = tonum(pms.pm2)
	local result = role:addRune({type = typ,id = id})
	return result
end

function _M.fb(role, pms) -- 直接通关
	local carbonId = tonum(pms.pm1)
	if not csvdb["idle_battleCsv"][carbonId] then return "不存在的carbon" end
	local passCarbon = role:getProperty("hangPass")
	local addPre 
	addPre = function(carbonId)
		local carbonData = csvdb["idle_battleCsv"][carbonId]
		for _, pre in ipairs(carbonData.prepose:toArray(true, "=")) do
			passCarbon[pre] = 1
			role:checkTaskEnter(role.TaskType.HangPass, {id = pre})
			addPre(pre)
		end
	end
	passCarbon[carbonId] = 1
	addPre(carbonId)
	role:updateProperty({field = "hangPass", value = passCarbon})
	role:checkTaskEnter(role.TaskType.HangPass, {id = carbonId})
	return "成功"
end

function _M.love(role, pms)
	local heroType = tonum(pms.pm1)
	local level = tonum(pms.pm2)
	local exp = tonum(pms.pm3)
	local curPlus = csvdb["unit_love_plusCsv"][heroType]
	if not curPlus then return "参数错误" end
	level = math.max(math.min(curPlus.limit, level), 0)
	local curEffect = csvdb["unit_love_effectCsv"][level]
	exp = math.max(math.min(curEffect.loveValue, exp) , 0)
	for _, hero in pairs(role.heros) do
		if hero:getProperty("type") == heroType then
			hero:updateProperty({field = "loveL", value = level})
			hero:updateProperty({field = "loveExp", value = exp})
			if role:getProperty("loveStatus"):getv(heroType, 0) < level then
				role:changeUpdates({{type = "loveStatus", field = heroType, value = level}}) -- 总的
			end
			role:checkTaskEnter(role.TaskType.LoveBreak, {heroType = heroType, loveL = level})
		end
	end
	return "成功"
end

function _M.exp(role, pms)
	local exp =  tonum(pms.pm1)
	exp = math.floor(math.max(exp, 0))
	role:addPlayExp(exp)
	return "成功"
end

function _M.get(role, pms)
	if pms.pm1 == "ALL" then
		local reward = {}
		for id, data in pairs(csvdb["gm_getallCsv"]) do
			if csvdb["itemCsv"][id] then
				reward[id] = data.number
			end
		end
		role:award(reward)
	elseif pms.pm1 == "EQUIP" then
		for itemId = 7000 , 8000 do
			if csvdb["itemCsv"][itemId] then
				role:award({[itemId] = 100})
			end
		end
	elseif pms.pm1 == "RUNE" then
		for itemId = 2000 , 3000 do
			if csvdb["itemCsv"][itemId] then
				role:award({[itemId] = 1})
			end
		end
	elseif pms.pm1 == "FRAG" then
		for itemId = 100 , 400 do
			if csvdb["itemCsv"][itemId] then
				role:award({[itemId] = 100})
			end
		end
	elseif pms.pm1 == "FOOD" then
		for itemId = 4000 , 5000 do
			if csvdb["itemCsv"][itemId] then
				role:award({[itemId] = 100})
			end
		end
	elseif pms.pm1 == "HERO" then
		for itemId = 400 , 700 do
			if csvdb["itemCsv"][itemId] then
				role:award({[itemId] = 1})
			end
		end
	else
		local itemId = tonum(pms.pm1)
		if not csvdb["itemCsv"][itemId] then
			return "物品不存在"
		end
		local count = tonum(pms.pm2, 1)
		role:award({[itemId] = count})
	end
	return "成功"
end

function _M.advc(role, pms)
	role:updateProperty({field = "advInfo", value = {}})
	role:updateProperty({field = "advItems", value = ""})
	role:updateProperty({field = "advTeam", value = {}})
	role.advData = nil
	return "成功"
end

function _M.idlec(role, pms)
	role:updateProperty({field = "hangTeam", value = {}})
	role:updateProperty({field = "hangInfo", value = {}})
	role:updateProperty({field = "hangBag", value = {}})
	role.advData = nil
	return "成功"
end

function _M.tower(role, pms)
	local level = tonum(pms.pm1, 1)
	if not csvdb["tower_battleCsv"][level] then return  "不存在" end
	role:updateProperty({field = "towerInfo", value = {c = globalCsv.tower_count_limit, l = level}})
	return "成功"
end

return _M