314bc5df
zhengshouren
提交服务器初始代码
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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 httpc = require("http.httpc")
local WAVE_HERO_NUMS = 150
|
a0013f0b
zhouhaihai
零件分批推送
|
18
|
local WAVE_RUNE_NUMS = 150
|
314bc5df
zhengshouren
提交服务器初始代码
|
19
20
21
22
23
24
|
local function validName(name)
name = string.upper(name)
local exist = redisproxy:exists(string_format("user:%s", name))
if exist then return "existed" end
|
a5486ede
zhouhaihai
csvdata 修改为 share...
|
25
|
local SERV = string_format(".named%d", math.random(1, 5))
|
314bc5df
zhengshouren
提交服务器初始代码
|
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
local legal = skynet.call(SERV, "lua", "check", name)
return legal and "ok" or "illegal"
end
-- 随机玩家名
local function randomRoleName()
-- 过滤已经存在的名字
local name
repeat
name = getRandomName()
until validName(name) == "ok"
return name
end
local function setRoleName(uid, roleId)
local result
local name
local dbName
repeat
name = randomRoleName()
dbName = string.upper(name)
result = redisproxy:setnx(string_format("user:%s", dbName), roleId)
until result == 1
redisproxy:set(string_format("uid:%s", uid), dbName)
return name
end
local _M = {}
function _M.loginRpc( agent, data )
local msg = MsgPack.unpack(data)
local response = {}
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
57
58
59
60
61
|
if msg.codeVersion ~= globalCsv.codeVersion then
response.result = "UPDATE_TIP"
SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response))
return true
end
|
314bc5df
zhengshouren
提交服务器初始代码
|
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
-- 1.
local roleId = redisproxy:get(string_format("user:%s", string.upper(msg.name)))
if not roleId then
response.result = "NOT_EXIST"
SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response))
return true
end
roleId = tonumber(roleId)
--维护不能登录
local maintain = tonumber(redisproxy:hget("autoincrement_set", "maintain"))
if maintain and maintain > 0 then
|
0a07bdd9
zhouahaihai
角色升级 。gm
|
76
|
if tonumber(redisproxy:hget(string_format("role:%d", roleId), "ignoreMt")) ~= 1 then
|
314bc5df
zhengshouren
提交服务器初始代码
|
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
response.result = "MAINTAIN_TIP"
SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response))
return true
end
end
local now = skynet.timex()
local role = agent.role
-- 2
if not role then
local roleKey = string_format("role:%d", roleId)
if not redisproxy:exists(roleKey) then
response.result = "DB_ERROR"
SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response))
return true
end
-- 2a
role = require("models.Role").new({key = roleKey})
role:load()
role:loadAll()
|
44c6e479
zhouhaihai
增加部分日志
|
97
|
role:startActionUcode()
|
314bc5df
zhengshouren
提交服务器初始代码
|
98
99
100
|
else
role:reloadWhenLogin()
end
|
43cc5f51
gaofengduan
调整 equip 数据结构
|
101
|
|
39bcd7ca
zhouhaihai
LOG
|
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
role.sysVersion = msg.sysVersion
role.ip = agent.ip:toArray(false, ":")[1]
role.clientVersion = msg.clientVersion
role.network = msg.network
if msg.subId then
role:setProperty("sid", msg.subId)
end
if msg.deviceMode then
local deviceMode = tostring(msg.deviceMode)
if role:getProperty("dmode") ~= deviceMode then
role:setProperty("dmode", deviceMode)
end
end
if msg.device then
local device = tostring(msg.device)
if role:getProperty("device") ~= device then
role:setProperty("device", device)
end
end
|
39bcd7ca
zhouhaihai
LOG
|
124
|
|
0a07bdd9
zhouahaihai
角色升级 。gm
|
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
if not msg.isGMlogin then
local banTime = role:getProperty("banTime")
if banTime > now then
response.result = "BAN_TIP"
response.banTime = banTime
response.banType = role:getProperty("banType")
response.roleId = roleId
SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response))
return true
end
if banTime ~= 0 then
-- 清除封号状态
role:setBan(0)
end
end
|
39bcd7ca
zhouhaihai
LOG
|
140
|
|
aa74d6ef
zhouhaihai
掉落反馈
|
141
142
|
if msg.deviceMode then
local deviceMode = tostring(msg.deviceMode)
|
93f6e69b
测试
拾荒选择时间,抽卡增加sr保底
|
143
144
|
if role:getProperty("dmode") ~= deviceMode then
role:setProperty("dmode", deviceMode)
|
aa74d6ef
zhouhaihai
掉落反馈
|
145
146
147
148
|
end
end
if msg.device then
local device = tostring(msg.device)
|
93f6e69b
测试
拾荒选择时间,抽卡增加sr保底
|
149
150
|
if role:getProperty("device") ~= device then
role:setProperty("device", device)
|
aa74d6ef
zhouhaihai
掉落反馈
|
151
152
153
|
end
end
|
314bc5df
zhengshouren
提交服务器初始代码
|
154
|
SERV_OPEN = redisproxy:hget("autoincrement_set", "server_start")
|
314bc5df
zhengshouren
提交服务器初始代码
|
155
|
|
be83d162
zhouahaihai
登陆成功。 增加数据结构修正功能
|
156
|
role:changeStructVersion() -- 数据结构 版本更新
|
1b20cfdb
zhouhaihai
赛季更新完善 无尽冒险排行榜
|
157
|
role:advEndlessSeasonCheck(true) -- 冒险赛季更新检查
|
314bc5df
zhengshouren
提交服务器初始代码
|
158
|
|
be83d162
zhouahaihai
登陆成功。 增加数据结构修正功能
|
159
|
-- 跨天登陆事件
|
ea40710f
zhouhaihai
活动
|
160
|
local resetMode = role:updateTimeReset(now)
|
be4e8031
zhouhaihai
活动 拾荒
|
161
162
|
if not resetMode or not resetMode["CrossDay"] then -- 没有跨天
role.activity:checkActivityStatus(now, false, false)
|
2f7891b4
zhouhaihai
运营需要
|
163
|
role:log("onLogin")
|
ea40710f
zhouhaihai
活动
|
164
165
|
end
|
c384626d
zhouhaihai
好友
|
166
|
redisproxy:zadd(FRIEND_RECOMMEND, now, roleId)
|
be9c9ca6
zhouahaihai
角色评论
|
167
|
|
3e20f499
测试
完善商城相关协议
|
168
|
for _, name in ipairs({"dailyData", "dinerData", "activity", "storeData"}) do
|
be9c9ca6
zhouahaihai
角色评论
|
169
|
response[name] = role[name]:data()
|
7f9f002d
测试
循环周活动
|
170
171
|
--print("["..name.."]")
--dump(response[name])
|
be9c9ca6
zhouahaihai
角色评论
|
172
173
|
end
|
314bc5df
zhengshouren
提交服务器初始代码
|
174
175
176
|
response.role = role:data()
response.result = "SUCCESS"
response.serverTime = now
|
53b4b8bd
测试
自动挂机下一关
|
177
|
--response.openTime = getServerOpenTs()
|
314bc5df
zhengshouren
提交服务器初始代码
|
178
|
|
0a07bdd9
zhouahaihai
角色升级 。gm
|
179
180
181
182
183
184
185
|
local modules = {}
local heroIds = {}
for heroId, _ in pairs(role.heros) do
table.insert(heroIds, heroId)
end
local heroWave = math.ceil(#heroIds / WAVE_HERO_NUMS)
|
6947e382
zhouahaihai
好感度, 皮肤
|
186
|
if #heroIds <= 50 then
|
0a07bdd9
zhouahaihai
角色升级 。gm
|
187
188
189
190
|
heroWave = 0
table_insert(modules, "heros")
end
|
a0013f0b
zhouhaihai
零件分批推送
|
191
192
193
194
195
196
197
198
199
200
|
local runeIds = {}
for id ,_ in pairs(role.runeBag) do
table.insert(runeIds, id)
end
local runeWave = math.ceil(#runeIds / WAVE_RUNE_NUMS)
if #runeIds <= 50 then
runeWave = 0
table_insert(modules, "runeBag")
end
|
0a07bdd9
zhouahaihai
角色升级 。gm
|
201
202
203
204
205
206
207
|
for _, name in ipairs(modules) do
response[name] = {}
for id, unit in pairs(role[name]) do
response[name][id] = unit:data()
end
end
|
c384626d
zhouhaihai
好友
|
208
|
response.wave = 1 + heroWave + runeWave + 1
|
314bc5df
zhengshouren
提交服务器初始代码
|
209
210
211
|
SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response))
|
a0013f0b
zhouhaihai
零件分批推送
|
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
|
local curWave = 1
local runeIndex = 1
for index = curWave + 1, curWave + runeWave do
local runeResponse = {runeBag = {}}
for i = runeIndex, runeIndex + WAVE_RUNE_NUMS do
local runeId = runeIds[i]
if not runeId then
break
end
local rune = role.runeBag[runeId]
table.insert(runeResponse.runeBag, rune:data())
runeIndex = runeIndex + 1
end
runeResponse.runeWave = index
SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(runeResponse))
|
43cc5f51
gaofengduan
调整 equip 数据结构
|
228
|
end
|
a0013f0b
zhouhaihai
零件分批推送
|
229
|
curWave = curWave + runeWave
|
43cc5f51
gaofengduan
调整 equip 数据结构
|
230
|
|
0a07bdd9
zhouahaihai
角色升级 。gm
|
231
|
local heroIndex = 1
|
a0013f0b
zhouhaihai
零件分批推送
|
232
|
for index = curWave + 1, curWave + heroWave do
|
0a07bdd9
zhouahaihai
角色升级 。gm
|
233
234
235
236
237
238
239
240
241
242
243
244
245
|
local heroResponse = {heros = {}}
for i = heroIndex, heroIndex + WAVE_HERO_NUMS do
local heroId = heroIds[i]
if not heroId then
break
end
local hero = role.heros[heroId]
table_insert(heroResponse.heros, hero:data())
heroIndex = heroIndex + 1
end
heroResponse.heroWave = index
SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(heroResponse))
end
|
a0013f0b
zhouhaihai
零件分批推送
|
246
|
curWave = curWave + heroWave
|
314bc5df
zhengshouren
提交服务器初始代码
|
247
|
|
fa565e0c
zhouhaihai
优化结构
|
248
|
|
43cc5f51
gaofengduan
调整 equip 数据结构
|
249
|
|
314bc5df
zhengshouren
提交服务器初始代码
|
250
|
-- 注册全服广播
|
fa565e0c
zhouhaihai
优化结构
|
251
252
253
254
255
256
257
258
259
|
if not role._channelIdx then
local channel = math.randomInt(1, 1)
role._channelIdx = channel
end
if not mcast_util.channel_world() then
local w_channel = datacenter.get( ("MC_W_CHANNEL" .. role._channelIdx) )
if w_channel then
mcast_util.sub_world(w_channel)
end
|
314bc5df
zhengshouren
提交服务器初始代码
|
260
|
end
|
c384626d
zhouhaihai
好友
|
261
262
263
|
-- 发下缓存的世界消息
local worldChatResponse = {worldChats = {}}
|
a5486ede
zhouhaihai
csvdata 修改为 share...
|
264
|
local ok, msgs = pcall(skynet.call, '.globald', "lua", "getWorldMsg", role._channelIdx)
|
c384626d
zhouhaihai
好友
|
265
266
267
268
|
if not ok then
msgs = {}
end
worldChatResponse.worldChats = msgs
|
4cf74232
zhouhaihai
pvp
|
269
270
271
272
273
|
local redret = redisproxy:pipelining(function(red)
red:lrange(CHAT_OFFLINE:format(roleId), 0, -1)
red:del(CHAT_OFFLINE:format(roleId))
end)
worldChatResponse.p2pChats = redret[1]
|
c384626d
zhouhaihai
好友
|
274
275
276
277
278
|
worldChatResponse.chatWave = curWave + 1
curWave = curWave + 1
SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(worldChatResponse))
|
fa565e0c
zhouhaihai
优化结构
|
279
280
281
282
283
284
285
286
|
datacenter.set("agent", roleId, {
serv = skynet.self(),
fd = agent.client_fd,
gate_serv = agent.gate_serv,
})
agent.role = role
start_agent_timer()
|
4cf74232
zhouhaihai
pvp
|
287
288
289
290
291
|
-- 玩家登陆做的一些操作
role:saveHangTeam()
role:savePvpCTeam()
|
33be3111
zhouhaihai
修改hangPass 结构
|
292
|
role:savePvpHTeam()
|
fa565e0c
zhouhaihai
优化结构
|
293
|
|
33be3111
zhouhaihai
修改hangPass 结构
|
294
|
local hangPass = role:getProperty("hangPass")
|
d02f7904
zhouhaihai
遗失的log
|
295
|
role:mylog("login", {key1 = agent.ip:toArray(false, ":")[1], int1 = hangPass[1] or 0})
|
3aac1e3a
zhouhaihai
新设备
|
296
297
298
|
if msg.newdevice then
role:mylog("newdevice", {key1 = agent.ip:toArray(false, ":")[1]})
end
|
314bc5df
zhengshouren
提交服务器初始代码
|
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
|
return true
end
function _M.createRpc(agent, data)
local msg = MsgPack.unpack(data)
local response = {}
-- 再次检查uid
local uid = tostring(msg.uid)
local user = redisproxy:get(string_format("uid:%s", uid))
if user then
response.result = "SUCCESS"
response.roleName = user
SendPacket(actionCodes.Role_createRpc, MsgPack.pack(response))
return true
end
|
f58b315e
zhouhaihai
停止注册
|
315
316
317
318
319
320
321
|
local stopcreate = tonumber(redisproxy:hget("autoincrement_set", "stopcreate"))
if stopcreate and stopcreate > 0 then
response.result = "STOP_CREATE"
SendPacket(actionCodes.Role_createRpc, MsgPack.pack(response))
return true
end
|
314bc5df
zhengshouren
提交服务器初始代码
|
322
323
324
325
326
327
328
329
|
local roleId = getNextRoleId()
if not roleId then
response.result = "DB_FULL"
SendPacket(actionCodes.Role_createRpc, MsgPack.pack(response))
return true
end
local roleName = setRoleName(msg.uid, roleId)
|
314bc5df
zhengshouren
提交服务器初始代码
|
330
331
332
333
|
local newRole = require("models.Role").new({
key = string_format("role:%d", roleId),
id = roleId,
uid = tostring(msg.uid),
|
dc9d814f
zhouhaihai
邮件
|
334
|
sid = msg.subId or 0,
|
314bc5df
zhengshouren
提交服务器初始代码
|
335
336
|
name = roleName,
uname = msg.uname or "",
|
93f6e69b
测试
拾荒选择时间,抽卡增加sr保底
|
337
|
device = tostring(msg.device),
|
aa74d6ef
zhouhaihai
掉落反馈
|
338
|
dmode = msg.deviceMode and tostring(msg.deviceMode) or nil
|
314bc5df
zhengshouren
提交服务器初始代码
|
339
340
341
342
343
344
345
346
347
348
349
350
|
})
if newRole:create() then
--更新USER表
response.result = "SUCCESS"
response.roleId = roleId
response.roleName = string.upper(roleName)
else
response.result = "DB_ERROR"
SendPacket(actionCodes.Role_createRpc, MsgPack.pack(response))
return true
end
|
44c6e479
zhouhaihai
增加部分日志
|
351
|
newRole:startActionUcode()
|
39bcd7ca
zhouhaihai
LOG
|
352
353
354
355
356
|
newRole.sysVersion = msg.sysVersion
newRole.ip = agent.ip:toArray(false, ":")[1]
newRole.clientVersion = msg.clientVersion
newRole.network = msg.network
|
8b65a363
zhouhaihai
优化
|
357
|
newRole:award(globalCsv.birthItem, {log = {desc = "birth"}, notNotify = true})
|
314bc5df
zhengshouren
提交服务器初始代码
|
358
|
-- 欢迎邮件
|
147ef2ce
zhouhaihai
邮件 Gm
|
359
|
redisproxy:insertEmail({roleId = roleId, emailId = 1})
|
314bc5df
zhengshouren
提交服务器初始代码
|
360
|
|
39bcd7ca
zhouhaihai
LOG
|
361
362
363
364
|
if msg.newuser then
newRole:log("onCreateAccount")
end
newRole:log("onCreateRole")
|
d02f7904
zhouhaihai
遗失的log
|
365
|
newRole:mylog("create", {key1 = agent.ip:toArray(false, ":")[1]})
|
3aac1e3a
zhouhaihai
新设备
|
366
367
368
|
if msg.newdevice then
newRole:mylog("newdevice", {key1 = agent.ip:toArray(false, ":")[1]})
end
|
314bc5df
zhengshouren
提交服务器初始代码
|
369
370
371
372
373
|
SendPacket(actionCodes.Role_createRpc, MsgPack.pack(response))
return true
end
|
dc9d814f
zhouhaihai
邮件
|
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
|
function _M.changeNameRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local msg = MsgPack.unpack(data)
local newName = msg.name
local oldName = role:getProperty("name")
if not newName or type(newName) ~= "string" then return end
if newName == oldName then return end
-- 检查name是否合法
local checked = validName(newName)
if checked ~= "ok" then
--[[
"existed" 已经存在
"illegal" 包含非法字符
]]
local errCodes = {
["existed"] = 1,
["illegal"] = 2
}
SendPacket(actionCodes.Role_changeNameRpc, MsgPack.pack({result = errCodes[checked]}))
return true
end
if not roleId then
SendPacket(actionCodes.Role_changeNameRpc, MsgPack.pack({result = 3}))
return true
end
|
af7863ef
zhouhaihai
x小写名字异常
|
403
404
|
local dbName = string.upper(newName)
local result = redisproxy:setnx(string_format("user:%s", dbName), roleId)
|
dc9d814f
zhouhaihai
邮件
|
405
406
407
408
409
|
if result == 0 then
SendPacket(actionCodes.Role_changeNameRpc, MsgPack.pack({result = 1}))
return true
end
redisproxy:pipelining(function (red)
|
af7863ef
zhouhaihai
x小写名字异常
|
410
411
|
red:del(string_format("user:%s", string.upper(oldName)))
red:set(string_format("uid:%s", role:getProperty("uid")), dbName)
|
dc9d814f
zhouhaihai
邮件
|
412
413
414
415
416
|
end)
role:updateProperties({
["name"] = newName,
})
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
417
418
|
role:changeCrossServerPvpSelfInfo("name")
|
dc9d814f
zhouhaihai
邮件
|
419
420
421
422
|
SendPacket(actionCodes.Role_changeNameRpc, MsgPack.pack({result = 0}))
return true
end
|
c1849aa6
chenyueqi
roleaction增加一个获取随...
|
423
424
425
426
427
428
|
function _M.getRandomNameRpc()
local name = randomRoleName()
SendPacket(actionCodes.Role_getRandomNameRpc, MsgPack.pack({name = name}))
return true
end
|
dc9d814f
zhouhaihai
邮件
|
429
430
431
432
433
434
435
|
function _M.changeIntroRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local msg = MsgPack.unpack(data)
local content = msg.content
if not content or type(content) ~= "string" then return end
|
a5486ede
zhouhaihai
csvdata 修改为 share...
|
436
|
local SERV = string_format(".chated%d", math.random(1, 5))
|
dc9d814f
zhouhaihai
邮件
|
437
438
439
440
441
|
local legal, mod = skynet.call(SERV, "lua", "check", content)
if not legal then
content = mod or ""
end
|
14f1591b
zhouhaihai
删除好感度相关
|
442
|
role:updateProperty({field = "intro", value = content})
|
dc9d814f
zhouhaihai
邮件
|
443
444
445
446
447
|
SendPacket(actionCodes.Role_changeIntroRpc, '')
return true
end
|
314bc5df
zhengshouren
提交服务器初始代码
|
448
449
450
451
452
|
function _M.syncTimeRpc(agent, data)
SendPacket(actionCodes.Role_syncTimeRpc, MsgPack.pack({nowTime = skynet.timex()}))
return true
end
|
312b9db5
zhouahaihai
背包
|
453
454
455
|
function _M.saleItemRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
|
84e7c06e
zhouhaihai
回收
|
456
457
458
459
|
local backs = msg.backs
if not backs then return end
local reward = {}
|
53e8037e
zhouhaihai
任务
|
460
|
local fragCount = 0
|
84e7c06e
zhouhaihai
回收
|
461
462
463
464
|
for itemId, count in pairs(backs) do
if math.illegalNum(count, 1, role:getItemCount(itemId)) then return end
local itemData = csvdb["itemCsv"][itemId]
if itemData.sell_effect == "" then return end
|
53e8037e
zhouhaihai
任务
|
465
466
467
|
if itemData.type == ItemType.HeroFragment or itemData.type == ItemType.HeroFCommon then
fragCount = fragCount + count
end
|
84e7c06e
zhouhaihai
回收
|
468
469
|
local sellEffect = itemData.sell_effect:toArray(true, "=")
reward[sellEffect[1]] = (reward[sellEffect[1]] or 0) + sellEffect[2] * count
|
c59e058b
zhouhaihai
新一批日志记录
|
470
471
472
473
474
475
476
477
478
|
role:log("carriage_decals", {
item_id = itemId, --道具id
item_type = itemData.type, --道具类型,具体见枚举表中道具类型枚举表
item_level = 0, --道具等级
item_number = count, --道具变化数量的绝对值
carriage_decals_rwdid = sellEffect[1], --拆解获得物资ID
carriage_decals_rwdnum = sellEffect[2] * count, --拆解获得物资数量
})
|
84e7c06e
zhouhaihai
回收
|
479
480
|
end
|
44c6e479
zhouhaihai
增加部分日志
|
481
|
role:costItems(backs, {log = {desc = "saleItem"}})
|
7bb30dca
zhouhaihai
修改发奖
|
482
|
local reward, change = role:award(reward, {log = {desc = "saleItem"}})
|
53e8037e
zhouhaihai
任务
|
483
|
role:checkTaskEnter("DecoFrag", {count = fragCount})
|
c59e058b
zhouhaihai
新一批日志记录
|
484
|
|
7bb30dca
zhouhaihai
修改发奖
|
485
|
SendPacket(actionCodes.Role_saleItemRpc, MsgPack.pack(role:packReward(reward, change)))
|
312b9db5
zhouahaihai
背包
|
486
487
488
489
490
491
492
493
494
495
496
497
|
return true
end
function _M.openItemRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local itemId = msg.itemId
local count = msg.count
if math.illegalNum(count, 1, role:getItemCount(itemId)) then return end
local itemData = csvdb["itemCsv"][itemId]
if itemData.use_type ~= 2 then return end
local randomData = csvdb["item_randomCsv"][tonumber(itemData.use_effect)]
|
9b35bf6e
zhouhaihai
开启时间箱
|
498
|
if not randomData or randomData.openTime > 0 then return end
|
312b9db5
zhouahaihai
背包
|
499
|
|
007af97e
zhouhaihai
item_random 结构更改
|
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
|
local reward = {}
for _i = 1, count do
for i = 1, 10 do
local num = randomData["num" .. i]
local gift = randomData["gift" .. i]
if num and gift and num > 0 and gift ~= "" then
local pool = {}
for _, temp in ipairs(gift:toArray()) do
table.insert(pool, temp:toArray(true, "="))
end
local needCount = math.min(#pool, num)
for j = 1, needCount do
local idx = math.randWeight(pool, 3)
reward[pool[idx][1]] = (reward[pool[idx][1]] or 0) + pool[idx][2]
table.remove(pool, idx)
end
|
312b9db5
zhouahaihai
背包
|
516
517
518
|
end
end
end
|
007af97e
zhouhaihai
item_random 结构更改
|
519
520
|
reward[0] = nil
|
44c6e479
zhouhaihai
增加部分日志
|
521
|
role:costItems({[itemId] = count}, {log = {desc = "openItem"}})
|
7bb30dca
zhouhaihai
修改发奖
|
522
523
|
local change
reward, change = role:award(reward, {log = {desc = "openItem", int1 = itemId, int2 = count}})
|
43cc5f51
gaofengduan
调整 equip 数据结构
|
524
|
|
7bb30dca
zhouhaihai
修改发奖
|
525
|
SendPacket(actionCodes.Role_openItemRpc, MsgPack.pack(role:packReward(reward, change)))
|
312b9db5
zhouahaihai
背包
|
526
527
528
|
return true
end
|
9b35bf6e
zhouhaihai
开启时间箱
|
529
530
531
|
function _M.openTimeBoxRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
|
4d8bd32c
chenyueqi
倒计时开箱子
|
532
|
local oper = msg.oper -- 操作 1 - 2
|
9b35bf6e
zhouhaihai
开启时间箱
|
533
|
local slot = msg.slot -- 位置 1 - 6
|
317a46a9
测试
添加特权卡
|
534
535
536
537
538
539
|
-- 特权卡时间箱额外栏位
local privExtraCnt = role.storeData:getTimeBoxSlotExtraCount()
if oper == 1 then
if math.illegalNum(slot, 1, role:getFuncLv(FuncOpenType.TimeBoxSlot) + privExtraCnt) then return end
end
|
9b35bf6e
zhouhaihai
开启时间箱
|
540
541
|
local boxL = role:getProperty("boxL")
|
7bb30dca
zhouhaihai
修改发奖
|
542
|
local reward, change = {}
|
9b35bf6e
zhouhaihai
开启时间箱
|
543
544
545
546
|
if oper == 1 then -- 打开
local itemId = msg.itemId
if role:getItemCount(itemId) < 1 then return end
local itemData = csvdb["itemCsv"][itemId]
|
c384626d
zhouhaihai
好友
|
547
|
local randomData = csvdb["item_randomCsv"][itemId]
|
4d8bd32c
chenyueqi
倒计时开箱子
|
548
|
if not itemData or not randomData or randomData.openTime <= 0 then return end
|
9b35bf6e
zhouhaihai
开启时间箱
|
549
550
|
if boxL[slot] then return end
|
44c6e479
zhouhaihai
增加部分日志
|
551
|
role:costItems({[itemId] = 1}, {log = {desc = "openTimeBox"}})
|
9b35bf6e
zhouhaihai
开启时间箱
|
552
|
boxL[slot] = {id = itemId, time = skynet.timex() + randomData.openTime}
|
fa38c9d4
熊润斐
Revert "Squashed ...
|
553
|
|
4d8bd32c
chenyueqi
倒计时开箱子
|
554
|
elseif oper == 2 then -- 领取
|
9b35bf6e
zhouhaihai
开启时间箱
|
555
556
|
local quick = msg.quick
if not boxL[slot] then return end
|
c59e058b
zhouhaihai
新一批日志记录
|
557
|
local costKey = 0
|
9b35bf6e
zhouhaihai
开启时间箱
|
558
559
|
if boxL[slot].time > skynet.timex() then -- 没开完
if not quick then return end
|
f8ba82b3
zhouhaihai
大小写
|
560
|
local cost_pre = globalCsv.box_timeOpen_diamond:toArray(true, "=")
|
fcf03f75
zhouhaihai
两个记录bug
|
561
|
costKey = math.ceil((boxL[slot].time - skynet.timex()) / (cost_pre[1] * 60)) * cost_pre[2]
|
c59e058b
zhouhaihai
新一批日志记录
|
562
563
|
if not role:checkItemEnough({[ItemId.BoxKey] = costKey}) then return end
role:costItems({[ItemId.BoxKey] = costKey}, {log = {desc = "openTimeBox"}})
|
9b35bf6e
zhouhaihai
开启时间箱
|
564
|
end
|
9912e064
zhouhaihai
新增3个每日任务类型
|
565
566
|
local boxId = boxL[slot].id
local itemData = csvdb["itemCsv"][boxId]
|
4d8bd32c
chenyueqi
倒计时开箱子
|
567
|
local randomData = csvdb["item_randomCsv"][itemData.id]
|
43293781
zhouhaihai
日志bug
|
568
|
local costTime = skynet.timex() - (boxL[slot].time - randomData.openTime)
|
9b35bf6e
zhouhaihai
开启时间箱
|
569
|
-- 随机奖励
|
da898074
zhouhaihai
pvp 高级领奖
|
570
|
reward = {}
|
007af97e
zhouhaihai
item_random 结构更改
|
571
572
573
574
575
|
for i = 1, 10 do
local num = randomData["num" .. i]
local gift = randomData["gift" .. i]
if num and gift and num > 0 and gift ~= "" then
local pool = {}
|
007af97e
zhouhaihai
item_random 结构更改
|
576
577
|
for _, temp in ipairs(gift:toArray()) do
local set = temp:toArray(true, "=")
|
538e9773
zhouhaihai
上宝石
|
578
|
table.insert(pool, set)
|
007af97e
zhouhaihai
item_random 结构更改
|
579
|
end
|
5d620aef
chenyueqi
拆解室指定某一项为必得奖励
|
580
|
|
007af97e
zhouhaihai
item_random 结构更改
|
581
582
583
584
585
586
|
local needCount = math.min(#pool, num)
for j = 1, needCount do
local idx = math.randWeight(pool, 3)
reward[pool[idx][1]] = (reward[pool[idx][1]] or 0) + pool[idx][2]
table.remove(pool, idx)
end
|
9b35bf6e
zhouhaihai
开启时间箱
|
587
588
|
end
end
|
007af97e
zhouhaihai
item_random 结构更改
|
589
|
reward[0] = nil
|
9b35bf6e
zhouhaihai
开启时间箱
|
590
|
|
9b35bf6e
zhouhaihai
开启时间箱
|
591
|
boxL[slot] = nil
|
7bb30dca
zhouhaihai
修改发奖
|
592
|
reward, change = role:award(reward, {log = {desc = "openTimeBox", int1 = boxId}})
|
accf94c4
测试
活动以类型标识,修改双倍活动bug
|
593
|
role:checkTaskEnter("OpenBox", {id = boxId, count=1, quality=itemData.quality})
|
c59e058b
zhouhaihai
新一批日志记录
|
594
595
596
597
598
599
600
601
602
|
role:log("carriage_dismantle", {
item_id = boxId, -- 道具id
item_type = itemData.type, -- 道具类型,具体见枚举表中道具类型枚举表
item_level = 0, -- 道具等级
item_number = 1, -- 道具变化数量的绝对值
carriage_dismantle_type = quick and 1 or 0, -- 拆解方式,时间到期:0,钥匙开启:1
carriage_dismantle_time = costTime, -- 拆解耗时,填写实际耗时
carriage_dismantle_cost = costKey, -- 拆解花费钥匙数量,未使用填写0
|
887c1843
zhouhaihai
日志新一批
|
603
|
carriage_dismantle_rwd = reward, -- 拆解获得物资,json格式记录,{'itemid1':2,'itemid2':3,…………..}
|
c59e058b
zhouhaihai
新一批日志记录
|
604
|
})
|
9b35bf6e
zhouhaihai
开启时间箱
|
605
606
607
608
|
else
return
end
|
bd535b08
zhouhaihai
bug
|
609
610
|
role:setProperty("boxL") --刷新
role:changeUpdates({{type = "boxL", field = slot, value = boxL[slot], isOnlyToC = true}}) -- 通知客户端
|
7bb30dca
zhouhaihai
修改发奖
|
611
|
SendPacket(actionCodes.Role_openTimeBoxRpc, MsgPack.pack(role:packReward(reward, change)))
|
c8872722
zhouhaihai
返回
|
612
|
return true
|
9b35bf6e
zhouhaihai
开启时间箱
|
613
614
|
end
|
d1c2290f
zhouhaihai
加速
|
615
616
617
|
function _M.openSpeedUpBoxRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
|
fa38c9d4
熊润斐
Revert "Squashed ...
|
618
619
620
621
622
623
624
625
626
|
local id = msg.id
local count = msg.count
local itemData = csvdb["itemCsv"][id]
if not itemData or itemData.type ~= ItemType.SpeedBox then return end
if math.illegalNum(count, 1, role:getItemCount(id)) then return end
local useType, hour = table.unpack(itemData.use_effect:toArray(true, "="))
local time = hour * 60 * 60
|
d1c2290f
zhouhaihai
加速
|
627
628
|
local reward = {}
|
fa38c9d4
熊润斐
Revert "Squashed ...
|
629
630
631
632
|
if useType == 1 then -- 挂机齿轮
local hangInfo = role:getProperty("hangInfo")
if not hangInfo.carbonId then
return
|
d1c2290f
zhouhaihai
加速
|
633
|
end
|
fa38c9d4
熊润斐
Revert "Squashed ...
|
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
|
local carbonData = csvdb["idle_battleCsv"][hangInfo.carbonId]
reward[ItemId.Gold] = math.floor(time / globalCsv.idle_money_produce_cd) * carbonData.money * count
elseif useType == 2 then -- 挂机经验
local hangInfo = role:getProperty("hangInfo")
if not hangInfo.carbonId then
return
end
local carbonData = csvdb["idle_battleCsv"][hangInfo.carbonId]
reward[ItemId.Exp] = math.floor(time / globalCsv.idle_money_produce_cd) * carbonData.exp * count
elseif useType == 3 then -- 食材商人收入
local buildType = 6
local level = role.dinerData:getProperty("buildL"):getv(buildType, 1)
local buildingData = csvdb["diner_buildingCsv"][buildType][level]
if not buildingData then
return 1
end
local gfood = role.dinerData:getProperty("gfood")
if not next(gfood) then return end
for k , v in pairs(gfood) do
local itemId = v.id
local speed = globalCsv.diner_get_food_speed[csvdb["itemCsv"][itemId].quality] * buildingData.speed / 100
reward[itemId] = math.floor(time / speed) * count
end
else
return
|
d1c2290f
zhouhaihai
加速
|
659
660
|
end
|
fa38c9d4
熊润斐
Revert "Squashed ...
|
661
|
role:costItems({[id] = count}, {log = {desc = "speedUpBox"}})
|
7bb30dca
zhouhaihai
修改发奖
|
662
|
local change
|
fa38c9d4
熊润斐
Revert "Squashed ...
|
663
|
reward, change = role:award(reward, {log = {desc = "speedUpBox"}, int1 = id, int2 = count})
|
d1c2290f
zhouhaihai
加速
|
664
|
|
7bb30dca
zhouhaihai
修改发奖
|
665
|
SendPacket(actionCodes.Role_openSpeedUpBoxRpc, MsgPack.pack(role:packReward(reward, change)))
|
d1c2290f
zhouhaihai
加速
|
666
667
668
|
return true
end
|
00e663bd
zhouhaihai
剧情相关
|
669
670
671
672
673
674
|
function _M.storyBookRewardRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local storyId = msg.id
local storyBookData = csvdb["story_bookCsv"][storyId]
if not storyBookData then return end
|
a1d09d22
zhouhaihai
bug
|
675
|
local storyStatus = role:getProperty("storyB")
|
053978b4
zhouhaihai
剧情领奖
|
676
|
|
17ba67dd
zhouhaihai
错误的判断
|
677
|
local status = (storyStatus[storyId] or {}).s
|
053978b4
zhouhaihai
剧情领奖
|
678
|
|
17ba67dd
zhouhaihai
错误的判断
|
679
680
681
|
if status == -1 then return end
if not status or status ~= 1 then
|
c23734ee
chenyueqi
引导用到的剧情的奖励可以直接领
|
682
|
if storyBookData.unlockType == 1 and (role:getProperty("hangInfo").carbonId == tonumber(storyBookData.unlockData) or storyId == 1 or storyId == 2) then -- 挂机剧情正在挂机也可以领奖
|
053978b4
zhouhaihai
剧情领奖
|
683
684
685
|
else
return
end
|
a1d09d22
zhouhaihai
bug
|
686
|
end
|
00e663bd
zhouhaihai
剧情相关
|
687
|
-- 获取奖励
|
5f18f4e5
zhouhaihai
story
|
688
|
storyStatus[storyId] = storyStatus[storyId] or {}
|
8a01a3ae
zhouhaihai
bug
|
689
|
storyStatus[storyId].s = -1
|
8a01a3ae
zhouhaihai
bug
|
690
|
role:changeUpdates({{ type = "storyB", field = storyId, value = storyStatus[storyId] }})
|
7bb30dca
zhouhaihai
修改发奖
|
691
|
local reward, change = role:award(storyBookData.gift, {log = {desc = "storybookReward", int1 = storyId}})
|
c59e058b
zhouhaihai
新一批日志记录
|
692
|
|
43293781
zhouhaihai
日志bug
|
693
|
role:log("carriage_video", {
|
c59e058b
zhouhaihai
新一批日志记录
|
694
695
|
carriage_video_type = storyBookData.type, --放映室类型,剧情CG:0, 角色CG:1, 主线剧情:2, 角色剧情:3, 活动剧情:4, 图鉴:5
carriage_video_id = storyId, --放映室片段ID
|
fcf03f75
zhouhaihai
两个记录bug
|
696
697
|
carriage_video_coinid = reward[ItemId.Diamond] and ItemId.Diamond or 0, --放映奖励货币类型,无奖励则填写0
carriage_video_coinnum = reward[ItemId.Diamond] or 0, --放映奖励货币数量,无奖励则填写0
|
887c1843
zhouhaihai
日志新一批
|
698
|
carriage_video_item = reward, --放映奖励其他物品数量,json格式记录,{'itemid1':10,'itemid2':5,…………..},无奖励则填写0
|
c59e058b
zhouhaihai
新一批日志记录
|
699
700
|
})
|
7bb30dca
zhouhaihai
修改发奖
|
701
|
SendPacket(actionCodes.Role_storyBookRewardRpc, MsgPack.pack(role:packReward(reward, change)))
|
00e663bd
zhouhaihai
剧情相关
|
702
703
704
|
return true
end
|
8a01a3ae
zhouhaihai
bug
|
705
|
function _M.unLockStoryBookRpc(agent, data)
|
bd15e9bc
zhouhaihai
购买剧情
|
706
707
708
709
710
711
712
713
714
715
716
717
718
719
|
local role = agent.role
local msg = MsgPack.unpack(data)
local storyId = msg.id
local storyBookData = csvdb["story_bookCsv"][storyId]
if not storyBookData or storyBookData.lockItem == "" then return end -- 不能解锁
local storyStatus = role:getProperty("storyB")
if storyStatus[storyId] and storyStatus[storyId].s then return end --不需要解锁
local cost = storyBookData.lockItem:toNumMap()
if not cost or not next(cost) then return end
if not role:checkItemEnough(cost) then return end -- 消耗品不足
|
44c6e479
zhouhaihai
增加部分日志
|
720
|
role:costItems(cost, {log = {desc = "unlockStory", int1 = storyId}})
|
bd15e9bc
zhouhaihai
购买剧情
|
721
722
723
724
725
726
727
728
|
-- 解锁
storyStatus[storyId] = storyStatus[storyId] or {}
table.clear(storyStatus[storyId])
storyStatus[storyId].s = 1
role:changeUpdates({{ type = "storyB", field = storyId, value = storyStatus[storyId] }})
SendPacket(actionCodes.Role_unLockStoryBookRpc, '')
return true
|
8a01a3ae
zhouhaihai
bug
|
729
730
|
end
|
53e8037e
zhouhaihai
任务
|
731
732
733
|
function _M.taskRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
|
d232676a
zhouhaihai
功能解锁 冒险返回
|
734
735
736
|
if not role:isFuncUnlock(FuncUnlock.TaskAchiv) then return end
|
317a46a9
测试
添加特权卡
|
737
|
local taskType = msg.type -- 1 日常 2 周常
|
53e8037e
zhouhaihai
任务
|
738
739
740
741
742
743
744
745
746
747
748
749
750
751
|
local taskId = msg.id --任务id
local roleField = {"dTask", "wTask"}
if not roleField[taskType] then return 1 end
local taskData = csvdb["task_loopCsv"][taskType][taskId]
if not taskData then return 2 end
local taskStatus = role:getProperty(roleField[taskType])
local tStatus = taskStatus["t"] or {}
if (tStatus[taskId] or 0) < taskData.condition1 then
return 3
end
|
7bb30dca
zhouhaihai
修改发奖
|
752
|
local reward, change = role:award(taskData.reward, {log = {desc = "finishTask", int1 = taskType, int2 = taskId}})
|
53e8037e
zhouhaihai
任务
|
753
754
755
756
|
local active = (taskStatus["a"] or 0) + taskData.active
role:changeUpdates({
{ type = roleField[taskType], field = {"t", taskId}, value = -1 },
|
317a46a9
测试
添加特权卡
|
757
|
{ type = roleField[taskType], field = "a", value = active},
|
53e8037e
zhouhaihai
任务
|
758
759
|
})
|
1a0b3c56
测试
抽卡保底,切换定向卡池
|
760
761
|
local oldVal = role:getProperty("battlePoint") or 0
role:updateProperty({field = "battlePoint", value = oldVal + taskData.active})
|
317a46a9
测试
添加特权卡
|
762
|
|
c59e058b
zhouhaihai
新一批日志记录
|
763
764
765
|
role:log("task_reward", {
task_reward_id = taskId, --任务奖励ID
task_reward_type = taskType, --任务奖励类型,见 任务奖励类型枚举表
|
887c1843
zhouhaihai
日志新一批
|
766
|
task_reward_detail = reward, --任务奖励,json格式记录,{'itemid1':123,'itemid2':456,………...}
|
c59e058b
zhouhaihai
新一批日志记录
|
767
768
|
})
|
7bb30dca
zhouhaihai
修改发奖
|
769
|
SendPacket(actionCodes.Role_taskRpc, MsgPack.pack(role:packReward(reward, change)))
|
53e8037e
zhouhaihai
任务
|
770
771
772
773
774
775
|
return true
end
function _M.taskActiveRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
|
d232676a
zhouhaihai
功能解锁 冒险返回
|
776
777
778
|
if not role:isFuncUnlock(FuncUnlock.TaskAchiv) then return end
|
53e8037e
zhouhaihai
任务
|
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
|
local taskType = msg.type -- 1 日常 2 周长
local taskId = msg.id --任务id
local roleField = {"dTask", "wTask"}
if not roleField[taskType] then return end
local taskData = csvdb["task_activeCsv"][taskType][taskId]
if not taskData then return end
local taskStatus = role:getProperty(roleField[taskType])
local tStatus = taskStatus["at"] or {}
if tStatus[taskId] == -1 or (taskStatus["a"] or 0) < taskData.active then
return
end
|
7bb30dca
zhouhaihai
修改发奖
|
794
|
local reward, change = role:award(taskData.reward, {log = {desc = "taskActive", int1 = taskType, int2 = taskId}})
|
53e8037e
zhouhaihai
任务
|
795
796
797
798
|
role:changeUpdates({
{ type = roleField[taskType], field = {"at", taskId}, value = -1 }
})
|
7bb30dca
zhouhaihai
修改发奖
|
799
|
SendPacket(actionCodes.Role_taskActiveRpc, MsgPack.pack(role:packReward(reward, change)))
|
53e8037e
zhouhaihai
任务
|
800
801
802
803
804
805
806
807
|
return true
end
function _M.achiveRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local taskId = msg.id --任务id
|
d232676a
zhouhaihai
功能解锁 冒险返回
|
808
809
|
if not role:isFuncUnlock(FuncUnlock.TaskAchiv) then return end
|
53e8037e
zhouhaihai
任务
|
810
|
local achiveTask = csvdb["achievementCsv"][taskId]
|
4c5d72ab
zhouhaihai
高级pvp
|
811
|
if not achiveTask then return 1 end
|
53e8037e
zhouhaihai
任务
|
812
813
814
815
|
local achiveT = role:getProperty("achiveT")
local achiveV = role:getProperty("achiveV")
|
4c5d72ab
zhouhaihai
高级pvp
|
816
|
if achiveV[taskId] then return 2 end
|
53e8037e
zhouhaihai
任务
|
817
818
819
820
821
|
local curStatus = achiveT[achiveTask.type] or 0
local maxc = achiveTask.condition1
if maxc > curStatus then
|
4c5d72ab
zhouhaihai
高级pvp
|
822
|
return 3
|
53e8037e
zhouhaihai
任务
|
823
824
|
end
|
7bb30dca
zhouhaihai
修改发奖
|
825
|
local reward, change = role:award(achiveTask.reward, {log = {desc = "finishAchive", int1 = taskId}})
|
53e8037e
zhouhaihai
任务
|
826
|
role:changeUpdates({
|
f60b89b1
zhouhaihai
奖励副本
|
827
|
{ type = "achiveV", field = taskId, value = skynet.timex() }
|
53e8037e
zhouhaihai
任务
|
828
|
})
|
3df73a9e
zhouhaihai
复兴奖励
|
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
|
-- 复兴奖励
if csvdb["achievement_groupCsv"][achiveTask.group].bookmark == 3 then
local overCount = 0
for tId, status in pairs(achiveV) do
local tData = csvdb["achievementCsv"][tId]
if tData then
local groupData = csvdb["achievement_groupCsv"][tData.group]
if groupData.bookmark == 3 then
overCount = overCount + 1
end
end
end
for level, pData in pairs(csvdb["achievement_rewardCsv"]) do
if pData.request == overCount then
-- 发放奖励
redisproxy:insertEmail({
roleId = role:getProperty("id"),
emailId = 101,
attachments = pData.reward,
contentPms = {pData.level},
})
|
4c5d72ab
zhouhaihai
高级pvp
|
852
|
elseif pData.request > overCount then
|
3df73a9e
zhouhaihai
复兴奖励
|
853
854
855
856
|
break
end
end
end
|
53e8037e
zhouhaihai
任务
|
857
|
|
c59e058b
zhouhaihai
新一批日志记录
|
858
859
860
|
role:log("achievement", {
achievement_id = taskId, -- 成就id
achievement_type = achiveTask.type, -- 成就类型,具体枚举表中成就类型枚举表
|
887c1843
zhouhaihai
日志新一批
|
861
|
achievement_reward = reward, -- 达成成就奖励,json格式记录,{"itemid1":123,"itemid2":12,……….}
|
c59e058b
zhouhaihai
新一批日志记录
|
862
863
|
})
|
7bb30dca
zhouhaihai
修改发奖
|
864
|
SendPacket(actionCodes.Role_achiveRpc, MsgPack.pack(role:packReward(reward, change)))
|
53e8037e
zhouhaihai
任务
|
865
866
867
|
return true
end
|
3df73a9e
zhouhaihai
复兴奖励
|
868
869
|
|
c384626d
zhouhaihai
好友
|
870
871
872
873
874
875
876
877
878
879
880
881
882
883
|
function _M.chatRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local msg = MsgPack.unpack(data)
local cmd = msg.cmd
local content = msg.content
if not content then return end
local now = skynet.timex()
-- 判断禁言
local result = nil
|
a5486ede
zhouhaihai
csvdata 修改为 share...
|
884
|
local SERV = string_format(".chated%d", math.random(1, 5))
|
c384626d
zhouhaihai
好友
|
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
|
local legal, mod = skynet.call(SERV, "lua", "check", content)
if not legal then
content = mod or ""
end
if content == "" then
result = -1
end
local response = {
chatType = cmd,
player = {
roleId = role:getProperty("id"),
name = role:getProperty("name"),
level = role:getProperty("level"),
headId = role:getProperty("headId"),
},
content = content,
time = now,
}
|
8474ca36
zhouhaihai
聊天
|
906
907
908
909
910
|
local waitTime = nil
local check = {
-- 世界聊天
[1] = function ()
|
c384626d
zhouhaihai
好友
|
911
912
913
914
|
if role:getProperty("silent") > now then --禁言
result = 1
return
end
|
8474ca36
zhouhaihai
聊天
|
915
916
917
918
919
|
role._worldChatLimit = role._worldChatLimit or {start = 0, count = 0, canSayt = 0} --第一次开始说话时间 从第一次说话次数 能说话的时间
if now < role._worldChatLimit.canSayt then
result = 2
|
fa565e0c
zhouhaihai
优化结构
|
920
|
waitTime = role._worldChatLimit.canSayt - now
|
8474ca36
zhouhaihai
聊天
|
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
|
return
end
if now - role._worldChatLimit.start >= globalCsv.chat_world_limit.time then
role._worldChatLimit.start = now
role._worldChatLimit.count = 1
else
role._worldChatLimit.count = role._worldChatLimit.count + 1
if role._worldChatLimit.count > globalCsv.chat_world_limit.count then
role._worldChatLimit.count = 0
role._worldChatLimit.start = 0
role._worldChatLimit.canSayt = now + globalCsv.chat_world_limit.wait
result = 2
waitTime = globalCsv.chat_world_limit.wait
return
end
end
|
c384626d
zhouhaihai
好友
|
938
|
mcast_util.pub_world(actionCodes.Role_chat, MsgPack.pack(response))
|
a5486ede
zhouhaihai
csvdata 修改为 share...
|
939
|
pcall(skynet.send, '.globald', "lua", "sendWorldMsg", role._channelIdx, response)
|
25d8cbc6
zhouhaihai
记录聊天信息
|
940
|
role:mylog("role_action", {desc = "chatWorld", text1 = content})
|
c384626d
zhouhaihai
好友
|
941
|
end,
|
8474ca36
zhouhaihai
聊天
|
942
943
944
|
-- 私聊
[2] = function ()
local objectId = msg.roleId
|
fa565e0c
zhouhaihai
优化结构
|
945
|
response.objId = objectId
|
4cf74232
zhouhaihai
pvp
|
946
947
948
949
950
951
952
953
954
955
956
957
|
local redret = redisproxy:pipelining(function(red)
red:exists(string.format("role:%d", objectId))
red:sismember(FRIEND_BLACK_KEY:format(roleId), objectId)
red:sismember(FRIEND_BLACK_KEY:format(objectId), roleId)
end)
if redret[1] ~= 1 then
result = 1
return
end
-- 你把对方拉黑拉黑
if redret[2] == 1 then
result = 2
|
8474ca36
zhouhaihai
聊天
|
958
959
|
return
end
|
4cf74232
zhouhaihai
pvp
|
960
961
|
-- 对方把你拉黑
local isBlock = redret[3] == 1
|
8474ca36
zhouhaihai
聊天
|
962
|
|
8474ca36
zhouhaihai
聊天
|
963
|
local bin = MsgPack.pack(response)
|
4cf74232
zhouhaihai
pvp
|
964
|
if not isBlock then
|
440aa055
zhouhaihai
聊天
|
965
966
|
redisproxy:pipelining(function(red)
red:rpush(CHAT_OFFLINE:format(objectId), bin)
|
4cf74232
zhouhaihai
pvp
|
967
|
red:ltrim(CHAT_OFFLINE:format(objectId), -200, -1)
|
440aa055
zhouhaihai
聊天
|
968
|
end)
|
4cf74232
zhouhaihai
pvp
|
969
970
971
972
973
|
-- 若在线,实时发送聊天信息
local agent = datacenter.get("agent", objectId)
if agent then
SendPacket(actionCodes.Role_chat, bin, agent.fd)
end
|
440aa055
zhouhaihai
聊天
|
974
|
end
|
4cf74232
zhouhaihai
pvp
|
975
|
SendPacket(actionCodes.Role_chat, bin)
|
c384626d
zhouhaihai
好友
|
976
977
978
979
980
981
982
|
end,
}
if not check[cmd] then return end
if not result then
check[cmd]()
end
|
c59e058b
zhouhaihai
新一批日志记录
|
983
984
985
986
|
role:log("communication", {
publish_type = cmd, --发言类型,1,世界 2私聊
publish_status = 0, --发送状态,发送成功:0,发送失败:1,被屏蔽:2,其他:3
|
7d31daa8
zhouhaihai
调整压测
|
987
|
publish_receive_roleid = msg.roleId or 0, --接收者角色ID
|
c59e058b
zhouhaihai
新一批日志记录
|
988
989
|
publish_text = content, --发言内容
})
|
8474ca36
zhouhaihai
聊天
|
990
|
SendPacket(actionCodes.Role_chatRpc, MsgPack.pack({result = result, waitTime = waitTime}))
|
c384626d
zhouhaihai
好友
|
991
992
993
|
return true
end
|
4cf74232
zhouhaihai
pvp
|
994
995
996
997
998
999
|
function _M.chatGet(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
redisproxy:del(CHAT_OFFLINE:format(roleId))
return true
end
|
312b9db5
zhouahaihai
背包
|
1000
|
|
dc9d814f
zhouhaihai
邮件
|
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
|
function _M.changeSettingRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local id = msg.id
local status = msg.status
local statusEnum = SettingStatus[id]
if not statusEnum then return 1 end
if not statusEnum[status] then return 2 end
local setting = role:getProperty("setting")
setting[id] = status
role:updateProperty({field = "setting", value = setting})
|
d02f7904
zhouhaihai
遗失的log
|
1017
|
role:mylog("role_action", {desc = "changeSetting", int1 = id, int2 = status})
|
dc9d814f
zhouhaihai
邮件
|
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
|
SendPacket(actionCodes.Role_changeSettingRpc, '')
return true
end
function _M.drawCodeRpc(agent, data)
local msg = MsgPack.unpack(data)
local codeurl = skynet.getenv("codeurl")
local role = agent.role
local msg = MsgPack.unpack(data)
local code = msg.code
if type(code) ~= "string" then return end
if code:find("[^0-9a-zA-Z]") then return end
local codestr = role:getProperty("codeStr")
local content = {
["platformId"] = role:getProperty("sid"),
["code"] = code,
["itemIds"] = codestr,
["key"] = "zhaolugame20170831",
}
local status, body = httpc.get(codeurl, "/libaoma?" .. httpGetFormatData(content), {})
if status == 200 then
local result = json.decode(body)
local ret = tonum(result.ret)
if ret == 0 then
local giftId = tonumber(result.giftId)
role:setProperty("codeStr", codestr:setv(giftId, 1))
|
c59e058b
zhouhaihai
新一批日志记录
|
1046
|
local reward, change = role:award(result.gift, {log = {desc = "drawCode", int1 = giftId}})
|
dc9d814f
zhouhaihai
邮件
|
1047
|
|
c59e058b
zhouhaihai
新一批日志记录
|
1048
1049
1050
|
role:log("get_gift", {
gift_id = giftId, -- 礼包ID
gift_key = code, -- 礼包key
|
887c1843
zhouhaihai
日志新一批
|
1051
|
gift_reward = reward, -- 礼包奖励,json格式记录,{"itemid1":123,"itemid2":12,……….}
|
c59e058b
zhouhaihai
新一批日志记录
|
1052
1053
1054
|
gift_name = "", -- 礼包名称
gift_reason = 0, -- 礼包发放原因,见发放原因枚举表
})
|
d02f7904
zhouhaihai
遗失的log
|
1055
|
role:mylog("role_action", {desc = "drawCode", int1 = giftId, key1 = code})
|
dc9d814f
zhouhaihai
邮件
|
1056
1057
1058
|
SendPacket(actionCodes.Role_drawCodeRpc, MsgPack.pack({
result = ret,
reward = reward,
|
7bb30dca
zhouhaihai
修改发奖
|
1059
|
change = change,
|
dc9d814f
zhouhaihai
邮件
|
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
|
}))
return true
end
-- 1 不存在的礼包码
-- 2 已经领取过相同类型物品
-- 3 领取数量达到上限
-- 4 过期了
SendPacket(actionCodes.Role_drawCodeRpc, MsgPack.pack({result = ret}))
return true
end
SendPacket(actionCodes.Role_drawCodeRpc, MsgPack.pack({result = -1}))
return true
end
function _M.changeHeadRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local id = msg.id
local icon = csvdb["player_iconCsv"][id]
if not icon then
return
end
|
15f06456
zhouhaihai
头像
|
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
|
local unlock = false
if role:getItemCount(id) >= 1 then
unlock = true
else
if icon.path == 1 then -- 获得对应英雄
if role:isHaveHero(icon.condition) then
unlock = true
end
end
end
if not unlock then
|
dc9d814f
zhouhaihai
邮件
|
1095
1096
|
return
end
|
bd4fb541
zhouhaihai
增加物品过期系统
|
1097
|
role:changeHead(id)
|
44c6e479
zhouhaihai
增加部分日志
|
1098
|
|
dc9d814f
zhouhaihai
邮件
|
1099
1100
1101
1102
|
SendPacket(actionCodes.Role_changeHeadRpc, "")
return true
end
|
71f716c4
chenyueqi
引导用到的字段
|
1103
1104
1105
1106
1107
1108
1109
|
function _M.guideRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local cmdType = msg.cmdType
local funcGuide = role:getProperty("funcGuide")
|
aeb5da9a
chenyueqi
强制引导的步数记录
|
1110
|
if cmdType == 1 then
|
71f716c4
chenyueqi
引导用到的字段
|
1111
|
-- 新手引导
|
aeb5da9a
chenyueqi
强制引导的步数记录
|
1112
1113
1114
|
local master = msg.master or -1
local slave = msg.slave or -1
if master < 0 or slave < 0 then return end
|
a608cccb
chenyueqi
引导服务端记录
|
1115
1116
|
role:saveGuide(master, slave)
|
71f716c4
chenyueqi
引导用到的字段
|
1117
|
elseif cmdType == 2 then
|
a608cccb
chenyueqi
引导服务端记录
|
1118
|
-- 系统引导(玩家可选择是否进行)
|
71f716c4
chenyueqi
引导用到的字段
|
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
|
if not msg.skip then return end
local new = math.min(funcGuide:getv(0, 0), msg.skip)
if new < 0 then
funcGuide = funcGuide:setv(0, new)
else
funcGuide = funcGuide:setv(0, funcGuide:getv(0, 0) + msg.skip)
end
if msg.funcType then
funcGuide = funcGuide:setv(msg.funcType, 1)
|
39bcd7ca
zhouhaihai
LOG
|
1129
|
role:log("onGuidePoint", {guild_type = 2, guild_id = msg.funcType, guild_point = 0, guild_pass = 0})
|
d02f7904
zhouhaihai
遗失的log
|
1130
|
role:mylog("guide", {desc = "guide_weak", int1 = msg.funcType})
|
71f716c4
chenyueqi
引导用到的字段
|
1131
1132
|
end
role:updateProperty({field = "funcGuide", value = funcGuide})
|
e26989ce
chenyueqi
增加其他的引导记录
|
1133
|
elseif cmdType == 3 then
|
a608cccb
chenyueqi
引导服务端记录
|
1134
1135
1136
1137
1138
|
-- 系统引导(强制进行)
if msg.funcType and csvdb["guide_unlockCsv"][msg.funcType] then
role:saveGuide(csvdb["guide_unlockCsv"][msg.funcType].guideId,1)
funcGuide = funcGuide:setv(msg.funcType, 1)
role:updateProperty({field = "funcGuide", value = funcGuide})
|
39bcd7ca
zhouhaihai
LOG
|
1139
|
role:log("onGuidePoint", {guild_type = 1, guild_id = msg.funcType, guild_point = 0, guild_pass = 0})
|
d02f7904
zhouhaihai
遗失的log
|
1140
|
role:mylog("guide", {desc = "guide_sys", int1 = msg.funcType})
|
a608cccb
chenyueqi
引导服务端记录
|
1141
1142
1143
|
end
elseif cmdType == 4 then
-- 弹出一个tips(进入功能界面也许要自动弹说明,value要区分1、2)
|
e26989ce
chenyueqi
增加其他的引导记录
|
1144
1145
1146
|
if msg.funcType then
local value = msg.value or 1
for _, funcIdx in pairs(msg.funcType:toArray(true,"=")) do
|
39bcd7ca
zhouhaihai
LOG
|
1147
|
role:log("onGuidePoint", {guild_type = 3, guild_id = funcIdx, guild_point = 0, guild_pass = 0})
|
d02f7904
zhouhaihai
遗失的log
|
1148
|
role:mylog("guide", {desc = "guide_tips", int1 = funcIdx})
|
e26989ce
chenyueqi
增加其他的引导记录
|
1149
1150
1151
1152
|
funcGuide = funcGuide:setv(funcIdx, value)
end
role:updateProperty({field = "funcGuide", value = funcGuide})
end
|
71f716c4
chenyueqi
引导用到的字段
|
1153
1154
1155
1156
1157
1158
1159
|
else
return
end
SendPacket(actionCodes.Role_guideRpc, "")
return true
end
|
dc9d814f
zhouhaihai
邮件
|
1160
|
|
d51114bd
wangyujie
完成需求:每日金币购买
|
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
|
function _M.goldBuyRpc(agent, data)
local role = agent.role
local curT = role.dailyData:getProperty("goldBuyT")
local costD = globalCsv.idle_quickMoney_cost[curT]
if not costD then
return 1
end
if costD ~= 0 and not role:checkItemEnough({[ItemId.Diamond] = costD}) then
return 2
end
local goldC = 0
local hangPass = role:getProperty("hangPass")
for i = 1, 3 do
if hangPass[i] then
local carbonData = csvdb["idle_battleCsv"][hangPass[i]]
goldC = math.max(goldC, carbonData.money * globalCsv.idle_quickMoney_effect)
end
end
|
c873abb5
wangyujie
完善金币购买
|
1179
1180
1181
1182
1183
|
local carbonId = role:getProperty("hangInfo").carbonId
if carbonId then
local carbonData = csvdb["idle_battleCsv"][carbonId]
goldC = math.max(goldC, carbonData.money * globalCsv.idle_quickMoney_effect)
end
|
d51114bd
wangyujie
完成需求:每日金币购买
|
1184
1185
1186
|
if goldC == 0 then
return 3
end
|
317a46a9
测试
添加特权卡
|
1187
1188
|
local coef = role.storeData:getGearExchangeCoef()
goldC = goldC * coef
|
d51114bd
wangyujie
完成需求:每日金币购买
|
1189
1190
|
role.dailyData:updateProperty({field = "goldBuyT", value = curT + 1})
role:costItems({[ItemId.Diamond] = costD}, {log = {desc = "goldBuy"}})
|
7f9f002d
测试
循环周活动
|
1191
|
local reward, change = role:award({[ItemId.Gold] = math.floor(goldC)}, {log = {desc = "goldBuy"}})
|
7bb30dca
zhouhaihai
修改发奖
|
1192
|
SendPacket(actionCodes.Role_goldBuyRpc, MsgPack.pack(role:packReward(reward, change)))
|
d51114bd
wangyujie
完成需求:每日金币购买
|
1193
1194
1195
|
return true
end
|
9ea0c502
测试
限时礼包
|
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
|
function _M.getDownloadCvRewardRpc(agent, data)
local role = agent.role
local flag = role:getProperty("downCvR") or 0
if flag ~= 0 then
return 1
end
local r = globalCsv.role_download_cv_reward
local reward, change = role:award(r, {log = {desc = "downloadCv"}})
role:updateProperty({field="downCvR", value=1})
SendPacket(actionCodes.Role_getDownloadCvRewardRpc, MsgPack.pack(role:packReward(reward, change)))
return true
end
|
51d9d20b
测试
付费签到,应用市场反馈
|
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
|
function _M.updateFeedbackInfoRpc(agent, data)
local role = agent.role
local info = role:getProperty("feedback") or {}
local msg = MsgPack.unpack(data)
info["flag"] = msg.flag
info["count"] = msg.count
info["ts"] = skynet.timex()
role:updateProperty({field="feedback", value=info})
SendPacket(actionCodes.Role_updateFeedbackInfoRpc, MsgPack.pack({}))
return true
end
|
a6dc627f
测试
自选箱子协议
|
1221
1222
1223
1224
|
function _M.useSelectItemRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local itemId = msg.itemId
|
e52c384f
测试
探索指令bug, 充值返利活动
|
1225
|
local subId = msg.subId
|
a6dc627f
测试
自选箱子协议
|
1226
1227
1228
1229
1230
|
local count = msg.count
if math.illegalNum(count, 1, role:getItemCount(itemId)) then return end
local itemData = csvdb["itemCsv"][itemId]
if itemData.type ~= ItemType.SelectItemBox then return end
local itemMap = itemData.use_effect:toNumMap()
|
a6dc627f
测试
自选箱子协议
|
1231
1232
|
local reward, change = {}
for k, v in pairs(itemMap) do
|
e52c384f
测试
探索指令bug, 充值返利活动
|
1233
|
if k == subId then
|
a6dc627f
测试
自选箱子协议
|
1234
1235
1236
|
reward[k] = v * count
break
end
|
a6dc627f
测试
自选箱子协议
|
1237
1238
1239
1240
1241
1242
1243
|
end
if next(reward) then
reward, change = role:award(reward, {log = {desc = "openItem", int1 = itemId, int2 = count}})
role:costItems({[itemId] = count}, {log = {desc = "openItem"}})
end
SendPacket(actionCodes.Role_useSelectItemRpc, MsgPack.pack(role:packReward(reward, change)))
|
e52c384f
测试
探索指令bug, 充值返利活动
|
1244
|
return true
|
a6dc627f
测试
自选箱子协议
|
1245
1246
|
end
|
314bc5df
zhengshouren
提交服务器初始代码
|
1247
|
return _M
|