384bb077
zhouahaihai
挂机
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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 = {}
local function checkReward(role)
local hangInfo = role:getProperty("hangInfo")
if not hangInfo.carbonId or not hangInfo.coinTime or not hangInfo.itemTime then
return
end
local carbonData = csvdb["idle_battleCsv"][hangInfo.carbonId]
|
bcf5bfbb
zhouahaihai
挂机new
|
25
26
|
local nowCoinTime = math.min(skynet.timex(), hangInfo.endCoinTime or 0)
local nowItemTime = math.min(skynet.timex(), hangInfo.endItemTime or 0)
|
384bb077
zhouahaihai
挂机
|
27
|
|
bcf5bfbb
zhouahaihai
挂机new
|
28
|
local coinCount = math.max(0, math.floor((nowCoinTime - hangInfo.coinTime) / globalCsv.idle_money_produce_cd))
|
9962b061
zhouahaihai
补充 挂机
|
29
|
hangInfo.coinTime = hangInfo.coinTime + coinCount * globalCsv.idle_money_produce_cd
|
384bb077
zhouahaihai
挂机
|
30
|
|
bcf5bfbb
zhouahaihai
挂机new
|
31
|
local itemCount = math.max(0, math.floor((nowItemTime - hangInfo.itemTime) / globalCsv.idle_item_produce_cd))
|
9962b061
zhouahaihai
补充 挂机
|
32
|
hangInfo.itemTime = hangInfo.itemTime + itemCount * globalCsv.idle_item_produce_cd
|
384bb077
zhouahaihai
挂机
|
33
34
35
36
|
local items = role:getProperty("hangBag")
items[ItemId.Gold] = (items[ItemId.Gold] or 0) + coinCount * carbonData.money
items[ItemId.Exp] = (items[ItemId.Exp] or 0) + coinCount * carbonData.exp
|
4b7c7c96
zhouahaihai
增加 清空 挂机 冒险gm 角色经验
|
37
|
items[ItemId.PlayerExp] = (items[ItemId.PlayerExp] or 0) + coinCount * carbonData.playerExp
|
384bb077
zhouahaihai
挂机
|
38
39
40
41
42
|
local pool = {}
for _, temp in pairs(carbonData.item:toArray()) do
table.insert(pool, temp:toArray(true, "="))
end
|
9962b061
zhouahaihai
补充 挂机
|
43
44
|
local curTypeCount = 0
for id, _ in pairs(items) do
|
bcf5bfbb
zhouahaihai
挂机new
|
45
|
if id ~= ItemId.Gold and id ~= ItemId.Exp and id ~= ItemId.PlayerExp then
|
9962b061
zhouahaihai
补充 挂机
|
46
47
48
|
curTypeCount = curTypeCount + 1
end
end
|
384bb077
zhouahaihai
挂机
|
49
50
|
for i = 1, itemCount do
local cur = pool[math.randWeight(pool, 3)]
|
9962b061
zhouahaihai
补充 挂机
|
51
52
53
54
55
56
|
if items[cur[1]] or curTypeCount < role:getProperty("hangBagLimit") then
if not items[cur[1]] then
curTypeCount = curTypeCount + 1
end
items[cur[1]] = (items[cur[1]] or 0) + cur[2]
end
|
384bb077
zhouahaihai
挂机
|
57
58
59
|
end
if coinCount > 0 or itemCount > 0 then
|
5af8b4aa
zhouahaihai
挂机down
|
60
|
return true
|
384bb077
zhouahaihai
挂机
|
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
end
end
--开始一个新的关卡
function _M.startRpc( agent, data )
local role = agent.role
local msg = MsgPack.unpack(data)
local carbonId = msg.carbonId
local carbonData = csvdb["idle_battleCsv"][carbonId]
if not carbonData then return end
local hangPass = role:getProperty("hangPass")
|
5d80aca6
zhouahaihai
挂机优化
|
75
76
77
78
|
for _, preCarbonId in ipairs(carbonData.prepose:toArray(true, "=")) do
if not hangPass[preCarbonId] then return end
end
|
384bb077
zhouahaihai
挂机
|
79
|
|
5af8b4aa
zhouahaihai
挂机down
|
80
81
82
|
if checkReward(role) then
role:updateProperty({field = "hangBag", value = role:getProperty("hangBag")})
end
|
384bb077
zhouahaihai
挂机
|
83
84
|
local hangInfo = role:getProperty("hangInfo")
|
5af8b4aa
zhouahaihai
挂机down
|
85
|
local isNew = not hangInfo.carbonId
|
384bb077
zhouahaihai
挂机
|
86
87
88
89
|
hangInfo.carbonId = carbonId
local nowTime = skynet.timex()
hangInfo.coinTime = nowTime
hangInfo.itemTime = nowTime
|
5af8b4aa
zhouahaihai
挂机down
|
90
|
if isNew then
|
bcf5bfbb
zhouahaihai
挂机new
|
91
92
|
hangInfo.endCoinTime = nowTime + globalCsv.idle_producetime_max
hangInfo.endItemTime = nowTime + globalCsv.idle_producetime_max
|
5af8b4aa
zhouahaihai
挂机down
|
93
|
end
|
384bb077
zhouahaihai
挂机
|
94
|
if not hangPass[carbonId] then
|
5af8b4aa
zhouahaihai
挂机down
|
95
96
97
|
hangInfo.bossTime = nowTime + carbonData.idle_time
else
hangInfo.bossTime = nil
|
384bb077
zhouahaihai
挂机
|
98
99
100
101
102
103
104
105
106
107
108
|
end
role:updateProperty({field = "hangInfo", value = hangInfo})
SendPacket(actionCodes.Hang_startRpc, '')
return true
end
-- 每隔1分钟检查一次
function _M.checkRpc(agent, data)
local role = agent.role
-- local msg = MsgPack.unpack(data)
|
5af8b4aa
zhouahaihai
挂机down
|
109
110
111
112
|
if checkReward(role) then
role:updateProperty({field = "hangBag", value = role:getProperty("hangBag")})
role:updateProperty({field = "hangInfo", value = role:getProperty("hangInfo")})
end
|
384bb077
zhouahaihai
挂机
|
113
114
115
116
117
118
119
|
SendPacket(actionCodes.Hang_checkRpc, MsgPack.pack({}))
return true
end
function _M.startBattleRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
|
bcf5bfbb
zhouahaihai
挂机new
|
120
121
|
local carbonId = msg.carbonId
local curData = csvdb["idle_battleCsv"][carbonId]
|
a1e08c9c
zhengshouren
宝箱关战斗异常
|
122
123
124
|
if not curData then
return 1
end
|
bcf5bfbb
zhouahaihai
挂机new
|
125
|
|
384bb077
zhouahaihai
挂机
|
126
|
local hangInfo = role:getProperty("hangInfo")
|
bcf5bfbb
zhouahaihai
挂机new
|
127
|
if curData.main ~= 1 then
|
a1e08c9c
zhengshouren
宝箱关战斗异常
|
128
129
130
|
if carbonId ~= hangInfo.carbonId then
return 2
end
|
bcf5bfbb
zhouahaihai
挂机new
|
131
132
|
end
|
384bb077
zhouahaihai
挂机
|
133
|
local hangPass = role:getProperty("hangPass")
|
a1e08c9c
zhengshouren
宝箱关战斗异常
|
134
135
136
|
if hangPass[carbonId] then
return 3
end
|
bcf5bfbb
zhouahaihai
挂机new
|
137
|
|
384bb077
zhouahaihai
挂机
|
138
139
140
|
local key = tostring(math.random())
hangInfo.key = key
local nowTime = skynet.timex()
|
384bb077
zhouahaihai
挂机
|
141
142
143
144
145
146
147
148
149
|
role:updateProperty({field = "hangInfo", value = hangInfo})
SendPacket(actionCodes.Hang_startBattleRpc, MsgPack.pack({key = key}))
return true
end
function _M.endBattleRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local hangInfo = role:getProperty("hangInfo")
|
4906ebd2
zhengshouren
宝箱关副本结算异常
|
150
151
152
|
if not msg.key or msg.key ~= hangInfo.key then
return 1
end
|
bcf5bfbb
zhouahaihai
挂机new
|
153
154
|
local carbonId = msg.carbonId
local carbonData = csvdb["idle_battleCsv"][carbonId]
|
4906ebd2
zhengshouren
宝箱关副本结算异常
|
155
156
157
|
if not carbonData then
return 2
end
|
bcf5bfbb
zhouahaihai
挂机new
|
158
|
if carbonData.main ~= 1 then
|
4906ebd2
zhengshouren
宝箱关副本结算异常
|
159
160
161
|
if carbonId ~= hangInfo.carbonId then
return 3
end
|
bcf5bfbb
zhouahaihai
挂机new
|
162
|
end
|
384bb077
zhouahaihai
挂机
|
163
|
local hangPass = role:getProperty("hangPass")
|
4906ebd2
zhengshouren
宝箱关副本结算异常
|
164
165
166
|
if hangPass[carbonId] then
return 4
end
|
384bb077
zhouahaihai
挂机
|
167
168
|
local reward
if msg.starNum and msg.starNum > 0 then --win
|
bcf5bfbb
zhouahaihai
挂机new
|
169
|
hangPass[carbonId] = 1
|
384bb077
zhouahaihai
挂机
|
170
|
role:updateProperty({field = "hangPass", value = hangPass})
|
bcf5bfbb
zhouahaihai
挂机new
|
171
172
173
|
if carbonData.main ~= 1 then
hangInfo.bossTime = nil
end
|
384bb077
zhouahaihai
挂机
|
174
175
|
-- reward
reward = {}
|
384bb077
zhouahaihai
挂机
|
176
177
|
reward[ItemId.Gold] = carbonData.money_clear
reward[ItemId.Exp] = carbonData.exp_clear
|
00115a7a
zhouahaihai
奖励发放
|
178
|
reward[ItemId.PlayerExp] = carbonData.playerExp_clear
|
384bb077
zhouahaihai
挂机
|
179
|
for itemId, count in pairs(carbonData.item_clear:toNumMap()) do
|
384bb077
zhouahaihai
挂机
|
180
181
|
reward[itemId] = count
end
|
8c199cec
zhengshouren
简化物品奖励接口,设置默认参数
|
182
|
reward = role:award(reward)
|
00e663bd
zhouhaihai
剧情相关
|
183
184
|
role:checkTaskEnter(role.TaskType.HangPass, {id = carbonId})
|
384bb077
zhouahaihai
挂机
|
185
186
187
188
189
190
191
192
193
194
195
196
197
|
end
hangInfo.key = nil
role:updateProperty({field = "hangInfo", value = hangInfo})
SendPacket(actionCodes.Hang_endBattleRpc, MsgPack.pack({
starNum = msg.starNum,
reward = reward,
}))
return true
end
function _M.roleFormatRpc(agent , data)
local role = agent.role
local msg = MsgPack.unpack(data)
|
384bb077
zhouahaihai
挂机
|
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
|
local hangTeam = role:getProperty("hangTeam")
for slot, heroId in pairs(msg.heros) do
if not role.heros[heroId] then
return
end
end
table.clear(hangTeam)
hangTeam.heros = {}
for slot, heroId in pairs(msg.heros) do
hangTeam.heros[slot] = heroId
end
hangTeam.leader = msg.leader
role:updateProperty({field = "hangTeam", value = hangTeam})
SendPacket(actionCodes.Hang_roleFormatRpc, '')
return true
end
|
5af8b4aa
zhouahaihai
挂机down
|
216
217
218
219
220
|
function _M.getRewardRpc(agent , data)
local role = agent.role
checkReward(role)
local items = role:getProperty("hangBag")
if not next(items) then return end
|
8c199cec
zhengshouren
简化物品奖励接口,设置默认参数
|
221
|
local reward = role:award(items)
|
5af8b4aa
zhouahaihai
挂机down
|
222
223
224
|
table.clear(items)
local hangInfo = role:getProperty("hangInfo")
local nowTime = skynet.timex()
|
bcf5bfbb
zhouahaihai
挂机new
|
225
226
|
hangInfo.endItemTime = nowTime + globalCsv.idle_producetime_max
hangInfo.endCoinTime = nowTime + globalCsv.idle_producetime_max
|
5af8b4aa
zhouahaihai
挂机down
|
227
228
229
230
231
232
233
234
235
236
237
|
hangInfo.coinTime = nowTime
hangInfo.itemTime = nowTime
role:updateProperty({field = "hangBag", value = items})
role:updateProperty({field = "hangInfo", value = hangInfo})
SendPacket(actionCodes.Hang_getRewardRpc, MsgPack.pack({
reward = reward
}))
return true
end
|
bcf5bfbb
zhouahaihai
挂机new
|
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
|
function _M.getRewardItemRpc(agent , data)
local role = agent.role
checkReward(role)
local items = role:getProperty("hangBag")
if not next(items) then return end
local notNeed = {[ItemId.Gold] = 1, [ItemId.Exp] = 1, [ItemId.PlayerExp] = 1}
local reward = {}
for itemId , count in pairs(items) do
if not notNeed[itemId] then
reward[itemId] = count
items[itemId] = nil
end
end
if not next(reward) then return end
|
8c199cec
zhengshouren
简化物品奖励接口,设置默认参数
|
253
|
local reward = role:award(reward)
|
bcf5bfbb
zhouahaihai
挂机new
|
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
|
local hangInfo = role:getProperty("hangInfo")
local nowTime = skynet.timex()
hangInfo.endItemTime = nowTime + globalCsv.idle_producetime_max
hangInfo.itemTime = nowTime
role:updateProperty({field = "hangBag", value = items})
role:updateProperty({field = "hangInfo", value = hangInfo})
SendPacket(actionCodes.Hang_getRewardItemRpc, MsgPack.pack({
reward = reward
}))
return true
end
function _M.getRewardCoinRpc(agent , data)
local role = agent.role
checkReward(role)
local items = role:getProperty("hangBag")
if not next(items) then return end
local need = {[ItemId.Gold] = 1, [ItemId.Exp] = 1, [ItemId.PlayerExp] = 1}
local reward = {}
for itemId , count in pairs(items) do
if need[itemId] then
reward[itemId] = count
items[itemId] = nil
end
end
|
8c199cec
zhengshouren
简化物品奖励接口,设置默认参数
|
282
|
local reward = role:award(reward)
|
bcf5bfbb
zhouahaihai
挂机new
|
283
284
285
286
287
288
289
290
291
292
293
294
295
|
local hangInfo = role:getProperty("hangInfo")
local nowTime = skynet.timex()
hangInfo.endCoinTime = nowTime + globalCsv.idle_producetime_max
hangInfo.coinTime = nowTime
role:updateProperty({field = "hangBag", value = items})
role:updateProperty({field = "hangInfo", value = hangInfo})
SendPacket(actionCodes.Hang_getRewardCoinRpc, MsgPack.pack({
reward = reward
}))
return true
end
|
9962b061
zhouahaihai
补充 挂机
|
296
297
298
299
300
301
302
303
304
305
306
307
308
|
function _M.quickRpc(agent , data)
local role = agent.role
local hangInfo = role:getProperty("hangInfo")
if not hangInfo.carbonId then return end
local carbonData = csvdb["idle_battleCsv"][hangInfo.carbonId]
local curCount = role.dailyData:getProperty("hangQC") + 1
local costs = globalCsv.idle_quickproduce_cost:toArray(true, "=")
if not costs[curCount] then return end
if costs[curCount] > 0 then
if not role:checkItemEnough({[ItemId.Diamond] = costs[curCount]}) then return end
|
36204e3c
zhengshouren
贩卖逻辑
|
309
|
role:costItems({[ItemId.Diamond] = costs[curCount]})
|
9962b061
zhouahaihai
补充 挂机
|
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
|
end
role.dailyData:updateProperty({field = "hangQC", value = curCount})
local time = globalCsv.idle_quickproduce_time
local reward = {}
local coinCount = math.floor(time / globalCsv.idle_money_produce_cd)
local itemCount = math.floor(time / globalCsv.idle_item_produce_cd)
reward[ItemId.Gold] = (reward[ItemId.Gold] or 0) + coinCount * carbonData.money
reward[ItemId.Exp] = (reward[ItemId.Exp] or 0) + coinCount * carbonData.exp
local pool = {}
for _, temp in pairs(carbonData.item:toArray()) do
table.insert(pool, temp:toArray(true, "="))
end
for i = 1, itemCount do
local cur = pool[math.randWeight(pool, 3)]
reward[cur[1]] = (reward[cur[1]] or 0) + cur[2]
end
|
8c199cec
zhengshouren
简化物品奖励接口,设置默认参数
|
331
|
reward = role:award(reward)
|
9962b061
zhouahaihai
补充 挂机
|
332
333
334
335
336
337
338
|
SendPacket(actionCodes.Hang_quickRpc, MsgPack.pack({
reward = reward
}))
return true
end
|
384bb077
zhouahaihai
挂机
|
339
|
return _M
|