AdvAction.lua
3.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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({events = {}}))
	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