Blame view

src/actions/TowerAction.lua 4.7 KB
276b1da9   zhouhaihai   爬塔接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  local ipairs = ipairs
  local table = table
  local math = math
  local redisproxy = redisproxy
  local MsgPack = MsgPack
  
  
  local _M = {}
  
  
  function _M.roleFormatRpc(agent , data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  	local towerTeam = role:getProperty("towerF")
  	for slot, heroId in pairs(msg.heros) do
  		if not role.heros[heroId] then
  			return
  		end
  	end
f603a60f   zhouhaihai   支援技实装
20
21
22
23
24
25
26
  	local supports = {}
  	for slot, support in pairs(msg.supports) do
  		if slot ~= 1 and slot ~= 2 then return end
  		local level = role.dinerData:getProperty("dishTree"):getv(support, 0)
  		if level <= 0 then return end
  		supports[slot] = support
  	end
276b1da9   zhouhaihai   爬塔接口
27
28
29
30
31
32
  	table.clear(towerTeam)
  	towerTeam.heros = {}
  	for slot, heroId in pairs(msg.heros) do
  		towerTeam.heros[slot] = heroId
  	end
  	towerTeam.leader = msg.leader
f603a60f   zhouhaihai   支援技实装
33
  	towerTeam.supports = supports
276b1da9   zhouhaihai   爬塔接口
34
  
3133cb76   zhouhaihai   日志
35
  
276b1da9   zhouhaihai   爬塔接口
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
  	role:updateProperty({field = "towerF", value = towerTeam}) 
  	SendPacket(actionCodes.Tower_roleFormatRpc, '')
  	return true
  end
  
  
  local function getUpdateTime(lastCount, lastTime)
  	local nextCount, nextTime = lastCount, skynet.timex()
  	if lastTime then
  		local addCount = math.floor((skynet.timex() - lastTime) / (globalCsv.tower_count_up * 60))
  		nextCount = math.min(lastCount + addCount, globalCsv.tower_count_limit)
  		nextTime = lastTime + addCount * (globalCsv.tower_count_up * 60)
  	end
  	return nextCount, nextTime
  end
  
  function _M.startBattleRpc(agent, data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  	local id = msg.id
d232676a   zhouhaihai   功能解锁 冒险返回
56
57
  	
  	if not role:isFuncUnlock(FuncUnlock.Tower) then return end
276b1da9   zhouhaihai   爬塔接口
58
59
60
  
  	local towerInfo = role:getProperty("towerInfo")
  
a2f78911   zhouhaihai   垃圾判断
61
  	if towerInfo.l ~= id then return end  -- 层数不对
276b1da9   zhouhaihai   爬塔接口
62
63
64
65
66
67
68
  
  	if not csvdb["tower_battleCsv"][id] then return end
  	local curCount, nextTime = getUpdateTime(towerInfo.c, towerInfo.t)
  	if curCount < 1 then return end -- 没有次数返回
  
  	--搞起来
  	towerInfo.c = curCount - 1
81a00cac   zhouhaihai   爬塔买满次数
69
70
71
  	if curCount == globalCsv.tower_count_limit then --满的情况下的消耗了 恢复时间从当下开始
  		nextTime = skynet.timex()
  	end
276b1da9   zhouhaihai   爬塔接口
72
73
74
75
76
  	towerInfo.t = nextTime
  	local key = tostring(math.random())
  	towerInfo.k = key
  
  	role:updateProperty({field = "towerInfo", value = towerInfo})
53e8037e   zhouhaihai   任务
77
  	role:checkTaskEnter("TowerBattle", {level = towerInfo.l})
3133cb76   zhouhaihai   日志
78
  
276b1da9   zhouhaihai   爬塔接口
79
80
81
82
83
84
85
86
87
88
89
90
  	SendPacket(actionCodes.Tower_startBattleRpc, '')
  	return true
  end
  
  function _M.endBattleRpc(agent, data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  	local id = msg.id
  	local key = msg.key
  	local passTime = msg.passTime
  
  	local towerInfo = role:getProperty("towerInfo")
d6a66c74   zhouhaihai   校验失败也返回
91
92
93
94
  	if towerInfo.l ~= id or not towerInfo.k or towerInfo.k ~= key then 
  		SendPacket(actionCodes.Tower_endBattleRpc, MsgPack.pack({errorCode = 1}))
  		return true
  	end
276b1da9   zhouhaihai   爬塔接口
95
  	local curTower = csvdb["tower_battleCsv"][id] 
50ecb4c1   zhouhaihai   增加return 判断
96
  	if not curTower then return 2 end
276b1da9   zhouhaihai   爬塔接口
97
98
99
100
  
  	local curCount, nextTime = getUpdateTime(towerInfo.c, towerInfo.t)
  
  
7bb30dca   zhouhaihai   修改发奖
101
  	local reward, change
276b1da9   zhouhaihai   爬塔接口
102
103
  	if msg.starNum and msg.starNum > 0 then --win
  		curCount = math.min(curCount + 1, globalCsv.tower_count_limit) -- 返还次数
59835765   zhouhaihai   排行榜
104
105
106
  		--排行榜
  		role:setTowerRank(towerInfo.l)
  
276b1da9   zhouhaihai   爬塔接口
107
  		towerInfo.l = towerInfo.l + 1
7bb30dca   zhouhaihai   修改发奖
108
  		reward, change = role:award(curTower.reward, {log = {desc = "towerBattle", int1 = id}})
53e8037e   zhouhaihai   任务
109
  		role:checkTaskEnter("TowerPass", {level = towerInfo.l - 1})
276b1da9   zhouhaihai   爬塔接口
110
111
112
113
114
115
  	end
  
  	towerInfo.c = curCount
  	towerInfo.t = nextTime
  	towerInfo.k = nil
  	role:updateProperty({field = "towerInfo", value = towerInfo})
3133cb76   zhouhaihai   日志
116
  
d4e9b817   zhouhaihai   战斗 日志
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
  
  	local rank = redisproxy:ZREVRANK(RANK_TOWER, role:getProperty("id"))
  	if not rank then
  		rank = -1
  	else
  		rank = rank + 1
  	end
  	role:checkBattle("tower", {
  		id = id,
  		isWin = msg.starNum and msg.starNum > 0,
  		info = msg.info,
  		reward = reward,
  		rank = rank,
  	})
  
7bb30dca   zhouhaihai   修改发奖
132
  	SendPacket(actionCodes.Tower_endBattleRpc, MsgPack.pack({reward = reward, change = change}))
276b1da9   zhouhaihai   爬塔接口
133
134
135
  	return true
  end
  
81a00cac   zhouhaihai   爬塔买满次数
136
137
138
139
140
141
142
143
144
145
146
147
  function _M.bugCountRpc(agent, data)
  	local role = agent.role
  
  	local towerInfo = role:getProperty("towerInfo")
  	local curCount, nextTime = getUpdateTime(towerInfo.c, towerInfo.t)
  	local needCount = globalCsv.tower_count_limit - curCount
  	if needCount > 0 then -- 补充
  		local cost = globalCsv.tower_chance_item:toNumMap()
  		for k , v in pairs(cost) do
  			cost[k] = v * needCount
  		end
  		if not role:checkItemEnough(cost) then return end
3133cb76   zhouhaihai   日志
148
  		role:costItems(cost, {log = {desc = "towerCount"}})
81a00cac   zhouhaihai   爬塔买满次数
149
150
151
152
153
  		curCount = globalCsv.tower_count_limit
  	end
  	towerInfo.c = curCount
  	towerInfo.t = nextTime
  	role:updateProperty({field = "towerInfo", value = towerInfo})
3133cb76   zhouhaihai   日志
154
  
81a00cac   zhouhaihai   爬塔买满次数
155
156
157
  	SendPacket(actionCodes.Tower_bugCountRpc, '')
  	return true
  end
276b1da9   zhouhaihai   爬塔接口
158
159
160
  
  function _M.rankRpc(agent , data)
  	local role = agent.role
59835765   zhouhaihai   排行榜
161
162
163
  	SendPacket(actionCodes.Tower_rankRpc, MsgPack.pack(role:getTowerRank()))
  	return true
  end
276b1da9   zhouhaihai   爬塔接口
164
  
59835765   zhouhaihai   排行榜
165
166
167
168
169
  function _M.rankInfoRpc(agent , data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  	local roleId = msg.roleId
  	SendPacket(actionCodes.Tower_rankInfoRpc, MsgPack.pack({format = role:getTowerRankOneInfo(roleId)}))
276b1da9   zhouhaihai   爬塔接口
170
171
172
173
  	return true
  end
  
  return _M