d763fb14
zhouhaihai
签到 九宫格
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
local ipairs = ipairs
local table = table
local math = math
local string = string
local redisproxy = redisproxy
local MsgPack = MsgPack
local string_format = string.format
local tonumber = tonumber
local table_insert = table.insert
local table_unpack = table.unpack
local table_find = table.find
local table_nums = table.nums
local math_random = math.randomInt
local _M = {}
function _M.sudokuRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local id = msg.id
local sudoku = role:getProperty("sudoku")
local phase = sudoku[-1] or 1
local curData = (csvdb["guide_sudokuCsv"][phase] or {})[id]
if phase == -1 or not curData then return 1 end
sudoku.task = sudoku.task or {}
sudoku.task[phase] = sudoku.task[phase] or {}
if (sudoku.task[phase][id] or 0) < curData.con1 then return 2 end
sudoku.task[phase][id] = -1
|
7bb30dca
zhouhaihai
修改发奖
|
35
|
local task, tchange = role:award(curData.reward, {log = {desc = "sudoku", int1 = id, int2 = phase}}) -- 任务奖励
|
d763fb14
zhouhaihai
签到 九宫格
|
36
|
|
7bb30dca
zhouhaihai
修改发奖
|
37
|
local reward, rchange = {}
|
d763fb14
zhouhaihai
签到 九宫格
|
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
local rId = {}
for pid, pdata in pairs(csvdb["guide_sudoku_rewardCsv"][phase] or {}) do
local pos = pdata.pos:toArray(true, "=")
local ok, is = true, false
for _, one in pairs(pos) do
if one == id then
is = true
end
if sudoku.task[phase][one] ~= -1 then
ok = false
break
end
end
if ok and is then
for itemId, count in pairs(pdata.reward:toNumMap()) do
reward[itemId] = (reward[itemId] or 0) + count
end
table.insert(rId, pid)
end
end
if not next(reward) then
reward = nil
else
|
7bb30dca
zhouhaihai
修改发奖
|
63
|
reward, rchange = role:award(reward, {log = {desc = "sudokuR", int1 = id, int2 = phase}})
|
d763fb14
zhouhaihai
签到 九宫格
|
64
65
66
67
|
end
role:updateProperty({field = "sudoku", value = sudoku})
|
c59e058b
zhouhaihai
新一批日志记录
|
68
69
70
|
role:log("activity", {
activity_id = id, -- 活动ID(或活动指定任务的ID)
activity_type = 0, -- 活动类型,见活动类型枚举表
|
56c7a1c5
liuzujun
修改报错,下载cv奖励记录字段
|
71
|
activity_reward = reward or {}, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...}
|
c59e058b
zhouhaihai
新一批日志记录
|
72
|
})
|
f22a33af
zhouhaihai
自己的日志
|
73
|
role:mylog("act_action", {desc = "sudoku", int1 = id, int2 = phase})
|
d763fb14
zhouhaihai
签到 九宫格
|
74
|
|
7bb30dca
zhouhaihai
修改发奖
|
75
|
SendPacket(actionCodes.Activity_sudokuRpc, MsgPack.pack({task = role:packReward(task, tchange), reward = role:packReward(reward, rchange), rId = rId}))
|
d763fb14
zhouhaihai
签到 九宫格
|
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
return true
end
function _M.sudokuRewardRpc(agent, data)
local role = agent.role
local sudoku = role:getProperty("sudoku")
local phase = sudoku[-1] or 1
local curData = csvdb["guide_sudokuCsv"][phase]
if not curData then return end
if not globalCsv.guide_sudoku_reward[phase] then return end
local curTask = (sudoku.task or {})[phase] or {}
for id, _ in pairs(curData) do
if curTask[id] ~= -1 then
return
end
end
|
7bb30dca
zhouhaihai
修改发奖
|
98
|
local reward, change = role:award(globalCsv.guide_sudoku_reward[phase], {log = {desc = "sudokuRP", int1 = phase}})
|
d763fb14
zhouhaihai
签到 九宫格
|
99
100
101
102
103
104
105
106
107
|
sudoku[-1] = phase + 1
sudoku.task[phase] = nil
if not csvdb["guide_sudokuCsv"][sudoku[-1]] then
sudoku[-1] = -1
sudoku.task = nil
end
role:updateProperty({field = "sudoku", value = sudoku})
|
c59e058b
zhouhaihai
新一批日志记录
|
108
109
110
|
role:log("activity", {
activity_id = 10000 + phase, -- 活动ID(或活动指定任务的ID)
activity_type = 0, -- 活动类型,见活动类型枚举表
|
887c1843
zhouhaihai
日志新一批
|
111
|
activity_reward = reward, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...}
|
c59e058b
zhouhaihai
新一批日志记录
|
112
113
|
})
|
7bb30dca
zhouhaihai
修改发奖
|
114
|
SendPacket(actionCodes.Activity_sudokuRewardRpc, MsgPack.pack(role:packReward(reward, change)))
|
d763fb14
zhouhaihai
签到 九宫格
|
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
return true
end
function _M.signRpc(agent, data)
local role = agent.role
local serverT = skynet.timex()
local tm = os.date("*t", serverT)
local curDay = tm.day
local yearMonth = tm.year * 100 + tm.month
local monthData = csvdb["daily_signInCsv"][yearMonth]
if not monthData or not monthData[curDay] then
return 1
end
local signs = role:getProperty("sign")
if signs[curDay] == yearMonth then -- 未重置的还可以签到正常(本月已经签到)
return 2
end
signs[curDay] = yearMonth
|
7bb30dca
zhouhaihai
修改发奖
|
139
|
local reward, change = role:award(monthData[curDay].item, {log = {desc = "sign", int1 = yearMonth, int2 = curDay}})
|
d763fb14
zhouhaihai
签到 九宫格
|
140
|
role:changeUpdates({{type = "sign", field = curDay, value = yearMonth}})
|
e7806e6f
zhouhaihai
签到成就
|
141
|
role:checkTaskEnter("SignIn")
|
d763fb14
zhouhaihai
签到 九宫格
|
142
|
|
7bb30dca
zhouhaihai
修改发奖
|
143
|
SendPacket(actionCodes.Activity_signRpc, MsgPack.pack(role:packReward(reward, change)))
|
d763fb14
zhouhaihai
签到 九宫格
|
144
145
146
147
|
return true
end
|
ea40710f
zhouhaihai
活动
|
148
149
|
function _M.actSignRpc(agent, data)
local role = agent.role
|
be4e8031
zhouhaihai
活动 拾荒
|
150
|
if not role.activity:isOpen("Sign") then return 1 end
|
ea40710f
zhouhaihai
活动
|
151
152
|
local curData = role.activity:getActData("Sign")
|
7bb30dca
zhouhaihai
修改发奖
|
153
|
local reward, change = {}
|
be4e8031
zhouhaihai
活动 拾荒
|
154
|
for day, csvData in ipairs(csvdb["new_signInCsv"]) do
|
ea40710f
zhouhaihai
活动
|
155
156
157
158
159
160
161
162
163
164
165
166
167
|
if day <= (curData[0] or 0) then
if not curData[day] then
curData[day] = -1
-- 奖励
for itemId, count in pairs(csvData.reward:toNumMap()) do
reward[itemId] = (reward[itemId] or 0) + count
end
end
else
break
end
end
if next(reward) then
|
be4e8031
zhouhaihai
活动 拾荒
|
168
|
role.activity:updateActData("Sign", curData)
|
7bb30dca
zhouhaihai
修改发奖
|
169
|
reward, change = role:award(reward, {log = {desc = "actSign"}})
|
ea40710f
zhouhaihai
活动
|
170
|
end
|
c59e058b
zhouhaihai
新一批日志记录
|
171
172
173
174
|
role:log("activity", {
activity_id = curData[0], -- 活动ID(或活动指定任务的ID)
activity_type = role.activity.ActivityType.Sign, -- 活动类型,见活动类型枚举表
|
887c1843
zhouhaihai
日志新一批
|
175
|
activity_reward = reward, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...}
|
c59e058b
zhouhaihai
新一批日志记录
|
176
177
|
})
|
7bb30dca
zhouhaihai
修改发奖
|
178
|
SendPacket(actionCodes.Activity_actSignRpc, MsgPack.pack(role:packReward(reward, change)))
|
ea40710f
zhouhaihai
活动
|
179
180
181
|
return true
end
|
d763fb14
zhouhaihai
签到 九宫格
|
182
|
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
183
184
185
|
function _M.actPaySignRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
|
460afa6e
liuzujun
付费签到改为主动领取,战斗关卡不一...
|
186
|
local dayIndex = msg.day
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
187
188
|
local actGoodsFlag = role.storeData:getProperty("actGoodsFlag")
local index = GetActGoodsIndex("paySignIn")
|
460afa6e
liuzujun
付费签到改为主动领取,战斗关卡不一...
|
189
190
|
local ts = actGoodsFlag[index] or 0
if ts == 0 then return 1 end
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
191
|
|
460afa6e
liuzujun
付费签到改为主动领取,战斗关卡不一...
|
192
193
|
local open, actId = role.activity:isOpen("PaySignIn")
if not open then return 2 end
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
194
|
|
460afa6e
liuzujun
付费签到改为主动领取,战斗关卡不一...
|
195
|
local diffDay = diffFromTs(ts) + 1
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
196
197
|
local curData = role.activity:getActData("PaySignIn")
|
b1644d3b
liuzujun
付费签到天数bug
|
198
|
if not curData then return 3 end
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
199
200
|
local reward, change = {}
for day, csvData in ipairs(csvdb["pay_signInCsv"]) do
|
460afa6e
liuzujun
付费签到改为主动领取,战斗关卡不一...
|
201
|
if day <= diffDay and day == dayIndex then
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
202
203
204
205
206
207
208
|
if not curData[day] then
curData[day] = 1
-- 奖励
for itemId, count in pairs(csvData.reward:toNumMap()) do
reward[itemId] = (reward[itemId] or 0) + count
end
end
|
460afa6e
liuzujun
付费签到改为主动领取,战斗关卡不一...
|
209
210
|
--else
-- break
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
211
212
213
214
215
216
217
218
|
end
end
if next(reward) then
role.activity:updateActData("PaySignIn", curData)
reward, change = role:award(reward, {log = {desc = "actPaySign"}})
end
role:log("activity", {
|
460afa6e
liuzujun
付费签到改为主动领取,战斗关卡不一...
|
219
|
activity_id = actId, -- 活动ID(或活动指定任务的ID)
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
220
221
222
223
224
225
226
|
activity_type = role.activity.ActivityType.PaySignIn, -- 活动类型,见活动类型枚举表
activity_reward = reward, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...}
})
SendPacket(actionCodes.Activity_actPaySignRpc, MsgPack.pack(role:packReward(reward, change)))
return true
end
|
d763fb14
zhouhaihai
签到 九宫格
|
227
|
|
4bd3095f
liuzujun
英雄帖任务bug
|
228
|
function _M.actCalendaTaskRpc(agent, data)
|
190e1415
liuzujun
英雄帖活动初始化
|
229
230
231
|
local role = agent.role
local msg = MsgPack.unpack(data)
local taskId = msg.id
|
4bd3095f
liuzujun
英雄帖任务bug
|
232
|
local calTask = role:getProperty("calTask") or {}
|
190e1415
liuzujun
英雄帖活动初始化
|
233
234
235
236
237
238
239
240
|
local record = calTask["r"] or {}
local flag = record[taskId] or 0
if flag == 1 then return 1 end
local open, actId = role.activity:isOpen("CalendaTask")
local actData = csvdb["activity_ctrlCsv"][actId]
if not open then return 2 end
if not actData then return 3 end
|
4bd3095f
liuzujun
英雄帖任务bug
|
241
242
243
244
245
|
local taskList = csvdb["activity_taskCsv"][actData.condition]
if not taskList then return 4 end
local taskCfg = taskList[taskId]
if not taskCfg then return 5 end
if taskCfg.key ~= actData.condition then return 6 end
|
190e1415
liuzujun
英雄帖活动初始化
|
246
|
|
4bd3095f
liuzujun
英雄帖任务bug
|
247
|
if (calTask[taskId] or 0) < taskCfg.condition1 then return 7 end
|
190e1415
liuzujun
英雄帖活动初始化
|
248
249
250
251
|
record[taskId] = 1
calTask["r"] = record
|
4bd3095f
liuzujun
英雄帖任务bug
|
252
|
role:updateProperty({field = "calTask", value = calTask})
|
190e1415
liuzujun
英雄帖活动初始化
|
253
|
|
4bd3095f
liuzujun
英雄帖任务bug
|
254
|
local reward, change = role:award(taskCfg.reward, {log = {desc = "calendaTask"}})
|
190e1415
liuzujun
英雄帖活动初始化
|
255
256
257
258
259
260
261
262
|
role:log("activity", {
activity_id = taskId, -- 活动ID(或活动指定任务的ID)
activity_type = role.activity.ActivityType.CalendaTask, -- 活动类型,见活动类型枚举表
activity_reward = reward, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...}
})
SendPacket(actionCodes.Activity_actCalendaTaskRpc, MsgPack.pack(role:packReward(reward, change)))
|
4bd3095f
liuzujun
英雄帖任务bug
|
263
|
return true
|
190e1415
liuzujun
英雄帖活动初始化
|
264
265
|
end
|
847f9a7b
liuzujun
兑换活动,邮件内容修改
|
266
267
268
269
270
|
function _M.exchangeRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local actid = msg.actid
local id = msg.id
|
b8b1c164
liuzujun
扭蛋活动,万能碎片bug
|
271
|
if not role.activity:isOpenById(actid) then return 1 end
|
847f9a7b
liuzujun
兑换活动,邮件内容修改
|
272
273
274
275
276
277
278
279
|
local exchangeCfg = csvdb["activity_exchangeCsv"][actid]
if not exchangeCfg then return 2 end
if not exchangeCfg[id] then return 3 end
local curData = role.activity:getActData("Exchange") or {}
local exchangeData = curData[actid] or {}
local curCount = exchangeData[id] or 0
local actCfg = exchangeCfg[id]
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
280
281
|
local limitArr = actCfg.limit:toArray(true, "=")
if curCount >= limitArr[2] then return 4 end
|
847f9a7b
liuzujun
兑换活动,邮件内容修改
|
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
|
local costs = actCfg.goods:toNumMap()
if not role:checkItemEnough(costs) then return 5 end
role:costItems(costs, {log = {desc = "actExchange", int1 = actid, int2 = id}})
curCount = curCount + 1
exchangeData[id] = curCount
curData[actid] = exchangeData
role.activity:updateActData("Exchange", curData)
local reward, change = role:award(actCfg.award, {log = {desc = "actExchange", int1 = actid, int2 = id}})
SendPacket(actionCodes.Activity_exchangeRpc, MsgPack.pack(role:packReward(reward, change)))
return true
end
|
b8b1c164
liuzujun
扭蛋活动,万能碎片bug
|
299
300
301
302
|
function _M.gachakonRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local actid = msg.actid
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
303
304
305
306
|
local count = msg.count
if count > 10 then return end
|
b8b1c164
liuzujun
扭蛋活动,万能碎片bug
|
307
308
|
if not role.activity:isOpenById(actid) then return 1 end
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
309
310
311
312
|
local actCtrlData = csvdb["activity_ctrlCsv"][actid]
if not actCtrlData then return 2 end
local cost = actCtrlData.condition2:toNumMap()
|
b8b1c164
liuzujun
扭蛋活动,万能碎片bug
|
313
|
local actCfg = csvdb["activity_capsuleToysCsv"][actid]
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
314
315
|
if not actCfg then return 3 end
|
b8b1c164
liuzujun
扭蛋活动,万能碎片bug
|
316
|
local gachakonInfo = role.activity:getActData("Gachakon") or {}
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
317
318
|
local award = {}
local remain = 0
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
319
|
for i = 1, count do
|
1be743f3
liuzujun
扭蛋机调试
|
320
321
|
local tmpCfg = clone(actCfg)
remain = 0
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
322
323
|
for id, cfg in pairs(tmpCfg) do
local num = gachakonInfo[id] or 0
|
1be743f3
liuzujun
扭蛋机调试
|
324
325
|
num = cfg.amount >= num and cfg.amount - num or 0
cfg.weight = cfg.weight * num
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
326
|
if cfg.weight > 0 then
|
1be743f3
liuzujun
扭蛋机调试
|
327
|
remain = remain + num
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
328
|
end
|
66fe093a
liuzujun
元旦关卡活动
|
329
|
--print("num ".. num, id, cfg.weight, cfg.amount)
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
330
|
end
|
1be743f3
liuzujun
扭蛋机调试
|
331
|
if remain == 0 then
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
332
333
334
|
break
end
local id = math.randWeight(tmpCfg, "weight")
|
1be743f3
liuzujun
扭蛋机调试
|
335
|
if not id then return 4 end
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
336
337
338
339
|
gachakonInfo[id] = (gachakonInfo[id] or 0) + 1
local curAward = tmpCfg[id].award:toNumMap()
for k, v in pairs(curAward) do
award[k] = (award[k] or 0) + v
|
b8b1c164
liuzujun
扭蛋活动,万能碎片bug
|
340
|
end
|
b8b1c164
liuzujun
扭蛋活动,万能碎片bug
|
341
|
end
|
b8b1c164
liuzujun
扭蛋活动,万能碎片bug
|
342
|
|
1be743f3
liuzujun
扭蛋机调试
|
343
344
345
346
347
|
for k, v in pairs(cost) do
cost[k] = v * count
end
if not role:checkItemEnough(cost) then return 5 end
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
348
349
|
role:costItems(cost, {log = {desc = "actGachakon", int1 = actid, int2 = count}})
|
b8b1c164
liuzujun
扭蛋活动,万能碎片bug
|
350
|
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
351
|
local reward, change = role:award(award, {log = {desc = "actGachakon", int1 = actid, int2 = count}})
|
66fe093a
liuzujun
元旦关卡活动
|
352
353
|
--print("-----------", remain, count)
if remain <= 1 then
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
354
|
gachakonInfo = {}
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
355
|
end
|
b8b1c164
liuzujun
扭蛋活动,万能碎片bug
|
356
357
358
359
360
361
|
role.activity:updateActData("Gachakon", gachakonInfo)
SendPacket(actionCodes.Activity_gachakonRpc, MsgPack.pack(role:packReward(reward, change)))
return true
end
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
|
function _M.hangDropRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local actid = msg.actid
if not role.activity:isOpenById(actid) then return 1 end
local actCfg = csvdb["activity_putCsv"][actid]
if not actCfg then return 2 end
local award, period = "", 0
for i = 1, #actCfg do
local cfg = actCfg[i]
if not cfg then
break
end
if cfg.condition ~= "" then
local arr = cfg.condition:toArray(true, "=")
local type = arr[1]
if type == 1 then
local actId = arr[2]
local carbonId = arr[3]
if not role.activity:isOpenById(actid) then return 3 end
local clInfo = role.activity:getActData("ChallengeLevel") or {}
if not clInfo[carbonId] then
break
end
end
end
award = cfg.reward
period = cfg.period * 60
end
local actData = role.activity:getActData("HangDrop") or 0
local timeNow = skynet.timex()
if period == 0 or award == "" then
return 4
end
local num = math.floor((timeNow - actData)/ period)
num = num > 8 and 8 or num
if num == 0 then
return 5
end
local reward, change = {}, nil
for id, value in pairs(award:toNumMap()) do
reward[id] = value * num
end
reward, change = role:award(reward, {log = {desc = "actHangDrop", int1 = actid, int2 = num}})
|
576c791c
liuzujun
玛尼英雄帖活动通过任务bug 元旦...
|
410
411
412
413
414
415
416
|
if num < 8 then
actData = actData + num * period
else
actData = timeNow
end
role.activity:updateActData("HangDrop", actData)
|
2bc706ab
liuzujun
兑换活动重置,累充功能
|
417
418
419
420
421
422
|
SendPacket(actionCodes.Activity_hangDropRpc, MsgPack.pack(role:packReward(reward, change)))
return true
end
|
66fe093a
liuzujun
元旦关卡活动
|
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
|
local function getStarCount(cfg, data)
local count = 0
for i = 0, #(cfg.sweep_condition:toTableArray(true)) do
if (1 << i & data) > 0 then
count = count + 1
end
end
return count
end
function _M.startBattleRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local actid = msg.actid
local id = msg.id
local count = msg.count
if not role.activity:isOpenById(actid) then return 1 end
|
66fe093a
liuzujun
元旦关卡活动
|
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
|
local actCfg = csvdb["activity_battleCsv"][actid]
if not actCfg then return 2 end
local battleCfg = actCfg[id]
if not battleCfg then return 3 end
local actData = role.activity:getActData("ChallengeLevel") or {}
local preArr = battleCfg.prepose:toArray(true, "=")
for _, v in ipairs(preArr) do
local battleInfo = actData[v]
if not battleInfo then
return 4
end
local star = battleInfo["star"] or 0
if star <= 0 then
return 4
end
end
-- check cost
local changeFlag = false
local ticket = actData["ticket"]
if battleCfg.type ~= "" then
|
576c791c
liuzujun
玛尼英雄帖活动通过任务bug 元旦...
|
465
|
role.activity:getBattleTicket(actid)
|
66fe093a
liuzujun
元旦关卡活动
|
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
|
local num = battleCfg.type:toArray(true, "=")[3]
if count and count > 0 then
if battleCfg.rank == 0 then
return 7
end
local bi = actData[id]
if not bi then return 8 end
local star = bi["star"] or 0
if star < 1 then
return 9
end
num = num * count
end
if ticket < num then
return 6
end
actData["ticket"] = ticket - num
changeFlag = true
end
if not count then
role.__actBattleCache = {
key = tostring(math.random()),
actid = actid,
id = id,
}
SendPacket(actionCodes.Activity_startBattleRpc, MsgPack.pack({key = role.__actBattleCache.key}))
else
if count <= 0 then
return
end
if battleCfg.rank == 0 then
return 7
end
local bi = actData[id]
local star = bi["star"]
local award = battleCfg.item_clear:toNumMap()
if getStarCount(battleCfg, star) == 3 then
local aw = battleCfg.perfect_reward:toNumMap()
for k, v in pairs(aw) do
award[k] = (award[k] or 0) + v
end
end
for k, v in pairs(award) do
award[k] = v * count
end
local reward, change = role:award(award, {log = {desc = "actBattle", int1 = actid, int2 = count or 0}})
SendPacket(actionCodes.Activity_startBattleRpc, MsgPack.pack(role:packReward(reward, change)))
bi["sum"] = bi["sum"] + bi["top"]
actData[id] = bi
changeFlag = true
local rankVal = 0
if battleCfg.rank == 1 then
rankVal = bi["sum"]
elseif battleCfg.rank == 2 then
rankVal = bi["top"]
end
role:updateRankCommon(RANK_TYPE.ActBattleBoss, rankVal)
end
if changeFlag then
role.activity:updateActData("ChallengeLevel", actData)
end
return true
end
function _M.endBattleRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local actid = msg.actid
local id = msg.id
local key = msg.key
local isWin = msg.isWin
local heros = msg.heros
local support = msg.support
if not role.activity:isOpenById(actid) then return 1 end
if not role.__actBattleCache then return 2 end
if role.__actBattleCache.id ~= id or role.__actBattleCache.key ~= key and role.__actBattleCache.actid ~= actid then
SendPacket(actionCodes.Activity_endBattleRpc, MsgPack.pack({errorCode = 1}))
end
local actCfg = csvdb["activity_battleCsv"][actid]
if not actCfg then return 3 end
local battleCfg = actCfg[id]
if not battleCfg then return 4 end
local actData = role.activity:getActData("ChallengeLevel") or {}
local reward, change = {}, nil
local battleInfo = actData[id] or {}
local curStar = 0
if isWin then
local herosInfo = msg.heros
local check = {}
-- 1 通关
check[1] = function(_)
return true
end
-- 2 阵亡人数 <= N
check[2] = function(_, cond)
return msg.info.dead and msg.info.dead <= cond
end
-- 3 全员存活
check[3] = function(_)
return msg.info.dead and msg.info.dead == 0
end
-- 4 指定种族 >= N
check[4] = function(_, cond)
local count = 0
for _, one in pairs(herosInfo) do
local heroData = csvdb["unitCsv"][one.type]
if heroData.camp == cond then
count = count + 1
end
end
return count >= cond
end
-- 5 指定职业 >= N
check[5] = function(_, cond)
local count = 0
for _, one in pairs(herosInfo) do
local heroData = csvdb["unitCsv"][one.type]
if heroData.job == cond then
count = count + 1
end
end
return count >= cond
end
-- 6 含有指定角色
check[6] = function(_, cond)
for _, one in pairs(herosInfo) do
if one.type == cond then
return true
end
end
return false
end
-- 7 通关耗时 <= X 秒 msg.info.atime
check[7] = function(_, cond)
return msg.info.atime and msg.info.atime <= cond
end
curStar = 0
local sweepConds = battleCfg.sweep_condition:toTableArray(true)
for i, cond in ipairs(sweepConds) do
if check[cond[1]] and check[cond[1]](table.unpack(cond)) then
curStar = curStar + (1 << (i - 1))
end
end
else
curStar = 0
end
local oldStarNum = getStarCount(battleCfg, battleInfo["star"] or 0)
local newStarNum = getStarCount(battleCfg, curStar)
if newStarNum > oldStarNum then
battleInfo["star"] = curStar
end
if battleCfg.rank ~= 0 then
-- 更新排行榜 最高伤害
local dmg = 0
for k, v in pairs(msg.info.damage) do
if k % 100 == 2 then
dmg = dmg + v
end
end
battleInfo["top"] = math.max(battleInfo["top"] or 0, dmg)
battleInfo["sum"] = (battleInfo["sum"] or 0) + dmg
local rankVal = 0
if battleCfg.rank == 1 then
rankVal = battleInfo["sum"]
elseif battleCfg.rank == 2 then
rankVal = battleInfo["top"]
end
if rankVal > 0 then
role:updateRankCommon(RANK_TYPE.ActBattleBoss, rankVal)
end
end
actData[id] = battleInfo
role.activity:updateActData("ChallengeLevel", actData)
if oldStarNum == 0 or battleCfg.rank ~= 0 then
reward = battleCfg.item_clear:toNumMap()
end
if (oldStarNum < 3 and newStarNum == 3) or battleCfg.rank ~= 0 then
local aw = battleCfg.perfect_reward:toNumMap()
for k, v in pairs(aw) do
reward[k] = (reward[k] or 0) + v
end
end
role:checkBattle("act_battle", {
cfg = battleCfg,
star = newStarNum,
isWin = isWin,
info = msg.info,
reward = reward,
heros = heros,
supports = support,
})
reward, change = role:award(reward, {log = {desc = "actBattle", int1 = actid, int2 = newStarNum}})
SendPacket(actionCodes.Activity_endBattleRpc, MsgPack.pack({
reward = reward,
change = change
}))
return true
end
function _M.battleRankRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local actid = msg.actid
if not role.activity:isOpenById(actid) then return 1 end
local rankInfo = role:getRankInfoCommon(RANK_TYPE.ActBattleBoss)
SendPacket(actionCodes.Activity_battleRankRpc, MsgPack.pack(rankInfo))
return true
end
function _M.battleMilestoneRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local actid = msg.actid
local id = msg.id
local index = msg.index
if not role.activity:isOpenById(actid) then return 1 end
local actCfg = csvdb["activity_mileageCsv"][actid]
if not actCfg then return 3 end
local mileCfg = actCfg[index]
if not mileCfg then return 4 end
local actData = role.activity:getActData("ChallengeLevel") or {}
local battleInfo = actData[id] or {}
local val = 0
if mileCfg.type == 1 then
val = battleInfo["sum"] or 0
elseif mileCfg.type == 2 then
val = battleInfo["top"] or 0
end
local record = battleInfo["r"] or ""
local flag = string.char(string.getbit(record, index))
if flag == "1" then return 5 end
if mileCfg.condition > val then return 6 end
battleInfo["r"] = string.setbit(record, index)
actData[id] = battleInfo
role.activity:updateActData("ChallengeLevel", actData)
local award = mileCfg.reward:toNumMap()
local reward, change = role:award(award, {log = {desc = "actMilestone", int1 = actid, int2 = index}})
SendPacket(actionCodes.Activity_battleMilestoneRpc, MsgPack.pack(role:packReward(reward, change)))
return true
end
|
d763fb14
zhouhaihai
签到 九宫格
|
735
|
return _M
|