276b1da9
zhouhaihai
爬塔接口
|
1
2
3
4
5
6
7
8
9
10
|
local ipairs = ipairs
local table = table
local math = math
local redisproxy = redisproxy
local MsgPack = MsgPack
local _M = {}
|
276b1da9
zhouhaihai
爬塔接口
|
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
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
|
03c619fb
chenyueqi
电波塔属性塔功能部分功能草稿
|
26
27
28
29
|
local towerType = math.floor(id / 10000)
if not id or not towerType or towerType < 0 or towerType > 3 then return 0 end
if not role:isFuncUnlock(FuncUnlock.Tower) then return 1 end
|
276b1da9
zhouhaihai
爬塔接口
|
30
31
32
|
local towerInfo = role:getProperty("towerInfo")
|
03c619fb
chenyueqi
电波塔属性塔功能部分功能草稿
|
33
34
35
36
|
if towerType == 0 and (towerInfo.l or 1) ~= id then return 2 end -- 层数不对
if towerType == 1 and ((towerInfo.l1 or 10001) ~= id or (towerInfo.l or 1) < 10) then return 2 end -- 层数不对
if towerType == 2 and ((towerInfo.l2 or 20001) ~= id or (towerInfo.l or 1) < 10) then return 2 end -- 层数不对
if towerType == 3 and ((towerInfo.l3 or 30001) ~= id or (towerInfo.l or 1) < 10) then return 2 end -- 层数不对
|
276b1da9
zhouhaihai
爬塔接口
|
37
38
39
|
if not csvdb["tower_battleCsv"][id] then return end
local curCount, nextTime = getUpdateTime(towerInfo.c, towerInfo.t)
|
498ca200
测试
取消爬塔次数
|
40
|
--if curCount < 1 then return end -- 没有次数返回
|
276b1da9
zhouhaihai
爬塔接口
|
41
42
43
|
--搞起来
towerInfo.c = curCount - 1
|
81a00cac
zhouhaihai
爬塔买满次数
|
44
45
46
|
if curCount == globalCsv.tower_count_limit then --满的情况下的消耗了 恢复时间从当下开始
nextTime = skynet.timex()
end
|
276b1da9
zhouhaihai
爬塔接口
|
47
48
49
50
51
|
towerInfo.t = nextTime
local key = tostring(math.random())
towerInfo.k = key
role:updateProperty({field = "towerInfo", value = towerInfo})
|
53e8037e
zhouhaihai
任务
|
52
|
role:checkTaskEnter("TowerBattle", {level = towerInfo.l})
|
f22a33af
zhouhaihai
自己的日志
|
53
|
role:mylog("tower_action", {desc = "startBattle", int1 = id})
|
276b1da9
zhouhaihai
爬塔接口
|
54
55
56
57
58
59
60
61
62
63
64
|
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
|
03c619fb
chenyueqi
电波塔属性塔功能部分功能草稿
|
65
66
67
68
69
70
71
|
local curTower = csvdb["tower_battleCsv"][id]
if not curTower then return 2 end
local towerType = math.floor(id / 10000)
local towerLevel = {[0] = (towerInfo.l or 1), [1] = (towerInfo.l1 or 10001), [2] = (towerInfo.l2 or 20001), [3] = (towerInfo.l3 or 30001)}
local curLevel = towerLevel[towerType]
|
276b1da9
zhouhaihai
爬塔接口
|
72
|
local towerInfo = role:getProperty("towerInfo")
|
03c619fb
chenyueqi
电波塔属性塔功能部分功能草稿
|
73
|
if curLevel ~= id or not towerInfo.k or towerInfo.k ~= key then
|
d6a66c74
zhouhaihai
校验失败也返回
|
74
75
76
|
SendPacket(actionCodes.Tower_endBattleRpc, MsgPack.pack({errorCode = 1}))
return true
end
|
276b1da9
zhouhaihai
爬塔接口
|
77
|
|
edf2ee12
zhouhaihai
防作弊
|
78
79
80
81
82
83
84
85
86
|
-- 防作弊
if not role:checkBattleCheat("tower", {
isWin = msg.starNum and msg.starNum > 0,
info = msg.info
}) then
SendPacket(actionCodes.Tower_endBattleRpc, MsgPack.pack({errorCode = 1}))
return true
end
|
276b1da9
zhouhaihai
爬塔接口
|
87
88
89
|
local curCount, nextTime = getUpdateTime(towerInfo.c, towerInfo.t)
|
7bb30dca
zhouhaihai
修改发奖
|
90
|
local reward, change
|
276b1da9
zhouhaihai
爬塔接口
|
91
92
|
if msg.starNum and msg.starNum > 0 then --win
curCount = math.min(curCount + 1, globalCsv.tower_count_limit) -- 返还次数
|
59835765
zhouhaihai
排行榜
|
93
|
--排行榜
|
03c619fb
chenyueqi
电波塔属性塔功能部分功能草稿
|
94
|
role:setTowerRank(curLevel % 10000, towerType)
|
59835765
zhouhaihai
排行榜
|
95
|
|
03c619fb
chenyueqi
电波塔属性塔功能部分功能草稿
|
96
|
curLevel = curLevel + 1
|
7bb30dca
zhouhaihai
修改发奖
|
97
|
reward, change = role:award(curTower.reward, {log = {desc = "towerBattle", int1 = id}})
|
03c619fb
chenyueqi
电波塔属性塔功能部分功能草稿
|
98
99
100
101
102
103
104
105
106
107
108
|
role:checkTaskEnter("TowerPass", {count = 1, type = towerType + 1})
end
if towerType == 0 then
towerInfo.l = curLevel
elseif towerType == 1 then
towerInfo.l1 = curLevel
elseif towerType == 2 then
towerInfo.l2 = curLevel
elseif towerType == 3 then
towerInfo.l3 = curLevel
|
276b1da9
zhouhaihai
爬塔接口
|
109
110
111
112
113
114
|
end
towerInfo.c = curCount
towerInfo.t = nextTime
towerInfo.k = nil
role:updateProperty({field = "towerInfo", value = towerInfo})
|
3133cb76
zhouhaihai
日志
|
115
|
|
03c619fb
chenyueqi
电波塔属性塔功能部分功能草稿
|
116
117
118
|
local RankTower = {[0] = RANK_TOWER,[1] = RANK_TOWER1,[2] = RANK_TOWER2,[3] = RANK_TOWER3}
local rankName = RankTower[towerType]
local rank = redisproxy:ZREVRANK(rankName, role:getProperty("id"))
|
d4e9b817
zhouhaihai
战斗 日志
|
119
120
121
122
123
124
125
126
127
128
129
130
|
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
测试
取消爬塔次数
|
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
测试
取消爬塔次数
|
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
测试
取消爬塔次数
|
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
|
03c619fb
chenyueqi
电波塔属性塔功能部分功能草稿
|
167
168
169
|
local msg = MsgPack.unpack(data)
local towerType = msg.tower or 1
SendPacket(actionCodes.Tower_rankRpc, MsgPack.pack(role:getTowerRank(towerType)))
|
59835765
zhouhaihai
排行榜
|
170
171
|
return true
end
|
276b1da9
zhouhaihai
爬塔接口
|
172
|
|
59835765
zhouhaihai
排行榜
|
173
174
175
176
|
function _M.rankInfoRpc(agent , data)
local role = agent.role
local msg = MsgPack.unpack(data)
local roleId = msg.roleId
|
03c619fb
chenyueqi
电波塔属性塔功能部分功能草稿
|
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
|
local towerType = msg.tower or 1
SendPacket(actionCodes.Tower_rankInfoRpc, MsgPack.pack({format = role:getTowerRankOneInfo(roleId, towerType)}))
return true
end
function _M.activeTowerBonusRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local tType = msg.tower
local id = msg.id
local bnousCsv = csvdb["tower_bnousCsv"]
if not tType or not id or not bnousCsv[tType] then return 0 end
local bnousData = bnousCsv[tType][id]
if not bnousData then return 1 end
local towerInfo = role:getProperty("towerInfo")
local towerBnous = role:getProperty("towerBnous")
if towerBnous[tType] and towerBnous[tType][id] then return 2 end
local towerLevel = {[1] = (towerInfo.l or 1), [2] = (towerInfo.l1 or 10001), [3] = (towerInfo.l2 or 20001), [4] = (towerInfo.l3 or 30001)}
local curLevel = towerLevel[tType]
if curLevel - 1 < bnousData.level then return 3 end
if not towerBnous[tType] then
towerBnous[tType] = {}
end
towerBnous[tType][id] = 1
role:updateProperty({field = "towerBnous", value = towerBnous})
role:getTowerBnousActive(true)
SendPacket(actionCodes.Tower_activeTowerBonusRpc, '')
|
276b1da9
zhouhaihai
爬塔接口
|
210
211
212
213
|
return true
end
return _M
|