Blame view

src/actions/TowerAction.lua 4.63 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
79
80
  
  	role:log("tower_action", {desc = "startBattle", int1 = id})
  
276b1da9   zhouhaihai   爬塔接口
81
82
83
84
85
86
87
88
89
90
91
92
  	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   校验失败也返回
93
94
95
96
  	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   爬塔接口
97
  	local curTower = csvdb["tower_battleCsv"][id] 
50ecb4c1   zhouhaihai   增加return 判断
98
  	if not curTower then return 2 end
276b1da9   zhouhaihai   爬塔接口
99
100
101
102
  
  	local curCount, nextTime = getUpdateTime(towerInfo.c, towerInfo.t)
  
  
7bb30dca   zhouhaihai   修改发奖
103
  	local reward, change
276b1da9   zhouhaihai   爬塔接口
104
105
  	if msg.starNum and msg.starNum > 0 then --win
  		curCount = math.min(curCount + 1, globalCsv.tower_count_limit) -- 返还次数
59835765   zhouhaihai   排行榜
106
107
108
  		--排行榜
  		role:setTowerRank(towerInfo.l)
  
276b1da9   zhouhaihai   爬塔接口
109
  		towerInfo.l = towerInfo.l + 1
7bb30dca   zhouhaihai   修改发奖
110
  		reward, change = role:award(curTower.reward, {log = {desc = "towerBattle", int1 = id}})
53e8037e   zhouhaihai   任务
111
  		role:checkTaskEnter("TowerPass", {level = towerInfo.l - 1})
276b1da9   zhouhaihai   爬塔接口
112
113
114
115
116
117
  	end
  
  	towerInfo.c = curCount
  	towerInfo.t = nextTime
  	towerInfo.k = nil
  	role:updateProperty({field = "towerInfo", value = towerInfo})
3133cb76   zhouhaihai   日志
118
  
bec06592   zhouhaihai   日志整理
119
  	role:log("tower_action", {desc = "endBattle", short1 = msg.starNum > 0 and 1 or 0, int1 = id})
3133cb76   zhouhaihai   日志
120
  
7bb30dca   zhouhaihai   修改发奖
121
  	SendPacket(actionCodes.Tower_endBattleRpc, MsgPack.pack({reward = reward, change = change}))
276b1da9   zhouhaihai   爬塔接口
122
123
124
  	return true
  end
  
81a00cac   zhouhaihai   爬塔买满次数
125
126
127
128
129
130
131
132
133
134
135
136
  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   日志
137
  		role:costItems(cost, {log = {desc = "towerCount"}})
81a00cac   zhouhaihai   爬塔买满次数
138
139
140
141
142
  		curCount = globalCsv.tower_count_limit
  	end
  	towerInfo.c = curCount
  	towerInfo.t = nextTime
  	role:updateProperty({field = "towerInfo", value = towerInfo})
3133cb76   zhouhaihai   日志
143
144
  	role:log("tower_action", {desc = "bugCount"})
  
81a00cac   zhouhaihai   爬塔买满次数
145
146
147
  	SendPacket(actionCodes.Tower_bugCountRpc, '')
  	return true
  end
276b1da9   zhouhaihai   爬塔接口
148
149
150
  
  function _M.rankRpc(agent , data)
  	local role = agent.role
59835765   zhouhaihai   排行榜
151
152
153
  	SendPacket(actionCodes.Tower_rankRpc, MsgPack.pack(role:getTowerRank()))
  	return true
  end
276b1da9   zhouhaihai   爬塔接口
154
  
59835765   zhouhaihai   排行榜
155
156
157
158
159
  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   爬塔接口
160
161
162
163
  	return true
  end
  
  return _M