Blame view

src/actions/AdvAction.lua 4.44 KB
23d89d13   zhouahaihai   冒险 结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  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 = {}
  
46fac6f1   zhouahaihai   酱料
19
  --开始一个新的关卡
23d89d13   zhouahaihai   冒险 结构
20
21
22
  function _M.startAdvRpc( agent, data )
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
46fac6f1   zhouahaihai   酱料
23
24
25
  	local chapterId = msg.chapterId
  
  	--上一个关卡结束才可以开始新的关卡
23d89d13   zhouahaihai   冒险 结构
26
  	local advInfo = role:getProperty("advInfo")
46fac6f1   zhouahaihai   酱料
27
28
  	if next(advInfo) then return end
  	role:getAdvData():initByChapter(chapterId, 1)
23d89d13   zhouahaihai   冒险 结构
29
  
23d89d13   zhouahaihai   冒险 结构
30
31
32
33
  	SendPacket(actionCodes.Adv_startAdvRpc, '')
  	return true
  end
  
46fac6f1   zhouahaihai   酱料
34
35
36
37
  function _M.roleFormatRpc(agent , data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  	local advTeam = role:getProperty("advTeam")
384bb077   zhouahaihai   挂机
38
  	for slot, heroId in pairs(msg.heros) do
46fac6f1   zhouahaihai   酱料
39
40
41
42
43
44
  		if not role.heros[heroId] then
  			return
  		end
  	end
  	table.clear(advTeam)
  	advTeam.heros = {}
384bb077   zhouahaihai   挂机
45
  	for slot, heroId in pairs(msg.heros) do
46fac6f1   zhouahaihai   酱料
46
47
  		advTeam.heros[slot] = heroId
  	end
00115a7a   zhouahaihai   奖励发放
48
49
  	advTeam.leader = msg.leader
  	role:updateProperty({field = "advTeam", value = advTeam})
46fac6f1   zhouahaihai   酱料
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
  	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
  
42f2d1d3   suhongyang   战斗内技能序列逻辑
78
  --使用营养技能
d27ad5e0   suhongyang   使用营养技
79
  function _M.usePotionRpc(agent, data)
46fac6f1   zhouahaihai   酱料
80
81
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
d27ad5e0   suhongyang   使用营养技
82
83
84
85
  	local dishLevel = role.dinerData:getProperty("dishTree"):getv(msg.potionId, 0)
  	if dishLevel == 0 then
  		return
  	end
46fac6f1   zhouahaihai   酱料
86
  	local adv = role:getAdvData()
d27ad5e0   suhongyang   使用营养技
87
  	local status = adv:usePotion(msg.potionId, dishLevel, msg.target) -- target {roomId = 1, blockId = 1} 选择的目标
46fac6f1   zhouahaihai   酱料
88
  	if not status then return end
d27ad5e0   suhongyang   使用营养技
89
  	SendPacket(actionCodes.Adv_usePotionRpc, MsgPack.pack({events = adv:popBackEvents()}))
46fac6f1   zhouahaihai   酱料
90
91
  	return true
  end
23d89d13   zhouahaihai   冒险 结构
92
  
ec87b4a5   zhouahaihai   冒险 完善
93
94
95
96
97
98
99
100
101
102
  --退出
  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 
  
12f7b52c   zhouhaihai   冒险战斗
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
  --开始战斗
  function _M.startBattleRpc(agent, data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  
  	-- 校验一下信息
  	local roomId = msg.roomId
  	local blockId = msg.blockId
  	local monsterId = msg.monsterId
  	local enemyId = msg.enemyId
  	if not enemyId then return end
  
  	local adv = role:getAdvData()
  	local enemy = adv.battle:getEnemyById(enemyId)
  
  	if enemy.monsterId ~= monsterId or enemy.roomId ~= roomId or enemy.blockId ~= blockId or enemy.lock or enemy.isDead then return end
  
  	local key = tostring(math.random())
  	adv.__battleCache = {
  		enemyId = enemyId,
  		key = key
  	}
  	SendPacket(actionCodes.Adv_startBattleRpc, MsgPack.pack({key = key}))
  	return true
  end
  
  -- 结束战斗
  function _M.endBattleRpc(agent, data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  	local roomId = msg.roomId
  	local blockId = msg.blockId
  	local monsterId = msg.monsterId
  	local enemyId = msg.enemyId
  	local key =  msg.key
  	local player = msg.player
  
  	if not player or not player.hp or not player.sp or not enemyId or not key then return end
  	local adv = role:getAdvData()
  	-- 校验
  	if not adv.__battleCache then return end
  	if adv.__battleCache.enemyId ~= enemyId then return end
  	local enemy = adv.battle:getEnemyById(enemyId)
  	if enemy.monsterId ~= monsterId or enemy.roomId ~= roomId or enemy.blockId ~= blockId then return end
  	adv.__battleCache = nil
  
  	
  	local status = adv:clickBlock(roomId, blockId, {player = player})
  	if not status then return end
  	SendPacket(actionCodes.Adv_endBattleRpc, MsgPack.pack({events = adv:popBackEvents()}))
  	return true
  end
  
  
ae20365b   suhongyang   Revert "修改冒险战斗逻辑"
157
  
23d89d13   zhouahaihai   冒险 结构
158
  return _M