Blame view

src/actions/TowerAction.lua 5.01 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
  
  	if not csvdb["tower_battleCsv"][id] then return end
  	local curCount, nextTime = getUpdateTime(towerInfo.c, towerInfo.t)
498ca200   liuzujun   取消爬塔次数
65
  	--if curCount < 1 then return end -- 没有次数返回
276b1da9   zhouhaihai   爬塔接口
66
67
68
  
  	--搞起来
  	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})
f22a33af   zhouhaihai   自己的日志
78
  	role:mylog("tower_action", {desc = "startBattle", int1 = id})
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
  
  	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,
  	})
f22a33af   zhouhaihai   自己的日志
131
  	role:mylog("tower_action", {desc = "endBattle", short1 = msg.starNum > 0 and 1 or 0, int1 = id})
d4e9b817   zhouhaihai   战斗 日志
132
  
7bb30dca   zhouhaihai   修改发奖
133
  	SendPacket(actionCodes.Tower_endBattleRpc, MsgPack.pack({reward = reward, change = change}))
276b1da9   zhouhaihai   爬塔接口
134
135
136
  	return true
  end
  
81a00cac   zhouhaihai   爬塔买满次数
137
138
  function _M.bugCountRpc(agent, data)
  	local role = agent.role
498ca200   liuzujun   取消爬塔次数
139
140
  	local msg = MsgPack.unpack(data)
  	local buyCount = msg.count
81a00cac   zhouhaihai   爬塔买满次数
141
142
143
144
  
  	local towerInfo = role:getProperty("towerInfo")
  	local curCount, nextTime = getUpdateTime(towerInfo.c, towerInfo.t)
  	local needCount = globalCsv.tower_count_limit - curCount
498ca200   liuzujun   取消爬塔次数
145
146
147
  	if needCount > buyCount then
  		needCount = buyCount
  	end
81a00cac   zhouhaihai   爬塔买满次数
148
149
150
151
152
153
  	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   日志
154
  		role:costItems(cost, {log = {desc = "towerCount"}})
498ca200   liuzujun   取消爬塔次数
155
  		curCount = curCount + needCount
81a00cac   zhouhaihai   爬塔买满次数
156
157
158
159
  	end
  	towerInfo.c = curCount
  	towerInfo.t = nextTime
  	role:updateProperty({field = "towerInfo", value = towerInfo})
f22a33af   zhouhaihai   自己的日志
160
  	role:mylog("tower_action", {desc = "bugCount"})
81a00cac   zhouhaihai   爬塔买满次数
161
162
163
  	SendPacket(actionCodes.Tower_bugCountRpc, '')
  	return true
  end
276b1da9   zhouhaihai   爬塔接口
164
165
166
  
  function _M.rankRpc(agent , data)
  	local role = agent.role
59835765   zhouhaihai   排行榜
167
168
169
  	SendPacket(actionCodes.Tower_rankRpc, MsgPack.pack(role:getTowerRank()))
  	return true
  end
276b1da9   zhouhaihai   爬塔接口
170
  
59835765   zhouhaihai   排行榜
171
172
173
174
175
  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   爬塔接口
176
177
178
179
  	return true
  end
  
  return _M