c384626d
zhouhaihai
好友
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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
|
6136eaca
liuzujun
添加好友表
|
14
|
require "utils.MysqlUtil"
|
c384626d
zhouhaihai
好友
|
15
16
17
18
19
20
21
22
23
24
25
26
|
local _M = {}
local function formatArray(tb)
tb = tb or {}
local t = {}
for _, objectId in ipairs(tb) do
t[tonumber(objectId)] = 1
end
return t
end
|
c384626d
zhouhaihai
好友
|
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
local function addAndCheckApplyLimit(roleId, objId)
roleId = tonumber(roleId)
local dbKey = FRIEND_APPLY_KEY:format(roleId)
local redret = redisproxy:pipelining(function (red)
red:zadd(dbKey, skynet.timex(), objId)
red:zremrangebyrank(dbKey, 0, -(globalCsv.friendApplyLimit + 1))
end)
end
local function checkBlackLimit(roleId)
roleId = tonumber(roleId)
local count = redisproxy:scard(FRIEND_BLACK_KEY:format(roleId))
return count < globalCsv.friendListLimit
end
local function getRoleInfo(roleId)
local online, info = rpcRole(roleId, "friendSInfo")
return online, info
end
local function getRoleAllInfo(roleId)
local online, info = rpcRole(roleId, "friendInfo")
return online, info
end
local function table_merge(tab1, tab2, filter)
tab1 = tab1 or {}
tab2 = tab2 or {}
filter = filter or {}
for k_, v_ in pairs(tab2) do
if not filter[k_] then
tab1[k_] = v_
end
end
return tab1
end
function _M.searchRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local msg = MsgPack.unpack(data)
local key = msg.key
if not key then return end
local objIds = {}
local tempId = tonumber(key)
if tempId then
|
6136eaca
liuzujun
添加好友表
|
76
|
if roleExists(tempId) then
|
c384626d
zhouhaihai
好友
|
77
78
79
80
81
82
83
84
85
86
87
88
89
|
objIds[tempId] = 1
end
end
local tempId = redisproxy:get(string_format("user:%s", string.upper(key)))
if tempId then
objIds[tonumber(tempId)] = 1
end
objIds[roleId] = nil --不能有自己
local searchList = {}
for objId, _ in pairs(objIds) do
local online, info = getRoleInfo(objId)
local redret = redisproxy:pipelining(function (red)
|
c384626d
zhouhaihai
好友
|
90
91
92
|
red:zscore(FRIEND_APPLY_KEY:format(objId), roleId)
red:sismember(FRIEND_BLACK_KEY:format(roleId), objId)
end)
|
6136eaca
liuzujun
添加好友表
|
93
94
95
96
|
local isFriend = role.friends[objId] and 1 or nil
local hadApply = redret[1] and 1 or nil
local inBlack = redret[2] == 1 and 1 or nil
|
c384626d
zhouhaihai
好友
|
97
98
99
100
101
102
103
104
105
106
107
|
table.insert(searchList, table_merge({
roleId = objId,
online = online,
isFriend = isFriend,
hadApply = hadApply,
inBlack = inBlack,
}, info, {
}))
end
|
3133cb76
zhouhaihai
日志
|
108
|
|
f22a33af
zhouhaihai
自己的日志
|
109
|
role:mylog("role_action", {desc = "searchFriend"})
|
c384626d
zhouhaihai
好友
|
110
111
112
113
114
115
116
117
118
119
120
|
SendPacket(actionCodes.Friend_searchRpc, MsgPack.pack({searchList = searchList}))
return true
end
function _M.applyRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local msg = MsgPack.unpack(data)
local objectId = msg.roleId
|
c384626d
zhouhaihai
好友
|
121
122
123
124
125
126
127
|
if objectId == roleId then
return
end
local result = nil
local redret = redisproxy:pipelining(function (red)
|
c384626d
zhouhaihai
好友
|
128
129
130
|
red:zscore(FRIEND_APPLY_KEY:format(objectId), roleId)
red:sismember(FRIEND_BLACK_KEY:format(objectId), roleId)
red:sismember(FRIEND_BLACK_KEY:format(roleId), objectId)
|
c384626d
zhouhaihai
好友
|
131
|
end)
|
5dfc4978
zhouhaihai
好友完善
|
132
|
|
c384626d
zhouhaihai
好友
|
133
|
-- 玩家id不存在
|
6136eaca
liuzujun
添加好友表
|
134
|
if not result and not roleExists(objectId) then
|
c384626d
zhouhaihai
好友
|
135
136
137
138
|
result = 1
end
-- 已经有这个好友
|
6136eaca
liuzujun
添加好友表
|
139
|
if not result and role.friends[objectId] then
|
c384626d
zhouhaihai
好友
|
140
141
142
|
result = 2
end
-- 已经申请
|
6136eaca
liuzujun
添加好友表
|
143
|
if not result and redret[1] then
|
c384626d
zhouhaihai
好友
|
144
145
146
|
result = 3
end
-- 对方把你拉黑
|
6136eaca
liuzujun
添加好友表
|
147
|
if not result and redret[2] == 1 then
|
c384626d
zhouhaihai
好友
|
148
149
150
151
|
result = 4
end
-- 你把对方拉黑了
|
6136eaca
liuzujun
添加好友表
|
152
|
if not result and redret[3] == 1 then
|
c384626d
zhouhaihai
好友
|
153
154
155
156
|
result = 5
end
-- 自己好友已经满
|
6136eaca
liuzujun
添加好友表
|
157
|
if not result and table.numbers(role.friends) >= globalCsv.friendListLimit then
|
c384626d
zhouhaihai
好友
|
158
159
160
|
result = 6
end
-- 对方的好友已满
|
6136eaca
liuzujun
添加好友表
|
161
|
if not result and getFriendCount(objectId) >= globalCsv.friendListLimit then
|
c384626d
zhouhaihai
好友
|
162
163
164
165
166
167
168
169
170
|
result = 7
end
if not result then
addAndCheckApplyLimit(objectId, roleId)
local myInfo = role:friendSInfo()
myInfo.roleId = roleId
myInfo.online = true
myInfo.hadApply = true
|
3133cb76
zhouhaihai
日志
|
171
|
|
70fb62d1
liuzujun
服务器数据打点
|
172
|
role:mylog("role_action", {desc = "applyFriend", int1 = 1})
|
f22a33af
zhouhaihai
自己的日志
|
173
|
|
c384626d
zhouhaihai
好友
|
174
175
|
rpcRole(objectId, "SendPacket", actionCodes.Friend_updateProperty, MsgPack.pack({newApply = 1, info = {myInfo}})) -- 通知对方
end
|
3133cb76
zhouhaihai
日志
|
176
177
178
|
|
c384626d
zhouhaihai
好友
|
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
|
SendPacket(actionCodes.Friend_applyRpc, MsgPack.pack({result = result}))
return true
end
function _M.applyListRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local applyList = {}
local friends = redisproxy:zrange(FRIEND_APPLY_KEY:format(roleId), 0, -1)
for _ , id in pairs(friends) do
id = tonumber(id)
local online, info = getRoleInfo(id)
table.insert(applyList, table_merge({
roleId = id, online = online
}, info, {
}))
end
SendPacket(actionCodes.Friend_applyListRpc, MsgPack.pack({list = applyList}))
return true
end
|
6136eaca
liuzujun
添加好友表
|
203
|
local function checkHandleApply(role, objectId, needAddNew)
|
763d6396
zhouhaihai
批量增加好友bug
|
204
|
needAddNew = needAddNew or 0
|
6136eaca
liuzujun
添加好友表
|
205
|
local roleId = role:getProperty("id")
|
c384626d
zhouhaihai
好友
|
206
|
local redret = redisproxy:pipelining(function (red)
|
c384626d
zhouhaihai
好友
|
207
208
209
|
red:sismember(FRIEND_BLACK_KEY:format(objectId), roleId)
red:sismember(FRIEND_BLACK_KEY:format(roleId), objectId)
end)
|
c59e058b
zhouhaihai
新一批日志记录
|
210
|
|
c384626d
zhouhaihai
好友
|
211
|
--自己好友满了
|
6136eaca
liuzujun
添加好友表
|
212
|
if (table.numbers(role.friends) + needAddNew) >= globalCsv.friendListLimit then
|
763d6396
zhouhaihai
批量增加好友bug
|
213
|
return 1
|
c384626d
zhouhaihai
好友
|
214
215
|
end
-- 对方好友满了
|
6136eaca
liuzujun
添加好友表
|
216
|
if getFriendCount(objectId) >= globalCsv.friendListLimit then
|
763d6396
zhouhaihai
批量增加好友bug
|
217
|
return 2
|
c384626d
zhouhaihai
好友
|
218
219
|
end
-- 对方把你拉黑
|
6136eaca
liuzujun
添加好友表
|
220
|
if redret[1] == 1 then
|
763d6396
zhouhaihai
批量增加好友bug
|
221
|
return 3
|
c384626d
zhouhaihai
好友
|
222
223
|
end
-- 你把对方拉黑了
|
6136eaca
liuzujun
添加好友表
|
224
|
if redret[2] == 1 then
|
763d6396
zhouhaihai
批量增加好友bug
|
225
|
return 4
|
c384626d
zhouhaihai
好友
|
226
|
end
|
c59e058b
zhouhaihai
新一批日志记录
|
227
228
|
return nil, redret[1]
|
c384626d
zhouhaihai
好友
|
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
|
end
function _M.handleApplyRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local msg = MsgPack.unpack(data)
local cmd = msg.cmd
local newTag = MsgPack.pack({ skynet.timex(), 1})
local result = nil
if cmd == 1 then --同意
local objectId = msg.roleId
if not redisproxy:zscore(FRIEND_APPLY_KEY:format(roleId), objectId) then
return
end
|
c59e058b
zhouhaihai
新一批日志记录
|
247
|
local curCount
|
6136eaca
liuzujun
添加好友表
|
248
|
result, curCount = checkHandleApply(role, objectId)
|
c384626d
zhouhaihai
好友
|
249
250
251
252
253
|
if not result then
redisproxy:pipelining(function (red)
red:ZREM(FRIEND_APPLY_KEY:format(roleId), objectId)
red:ZREM(FRIEND_APPLY_KEY:format(objectId), roleId)
|
6136eaca
liuzujun
添加好友表
|
254
|
addFriend(roleId, objectId)
|
c384626d
zhouhaihai
好友
|
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
|
end)
local myInfo = role:friendSInfo()
myInfo.online = true
myInfo.roleId = roleId
myInfo.isFriend = 1
local redret = redisproxy:pipelining(function (red)
red:sismember(FRIEND_POINT:format(objectId), roleId)
red:sismember(FRIEND_POINT:format(roleId), objectId)
end)
myInfo.pGet = redret[1] == 1 and 1 or nil
rpcRole(objectId, "SendPacket", actionCodes.Friend_updateProperty, MsgPack.pack({newFriend = 1, info = {myInfo}})) -- 通知对方
local online , otherInfo = getRoleInfo(objectId)
otherInfo.roleId = objectId
otherInfo.online = online
otherInfo.isFriend = true
otherInfo.pGet = redret[2] == 1 and 1 or nil
SendPacket(actionCodes.Friend_updateProperty, MsgPack.pack({newFriend = 1, info = {otherInfo}}))
|
3133cb76
zhouhaihai
日志
|
272
|
|
c59e058b
zhouhaihai
新一批日志记录
|
273
274
275
276
277
|
role:log("friend_opt", {
friend_opt_type = 100, -- 好友操作类型,见枚举表中 好友操作类型枚举表
friend_roleid = objectId, -- 好友账户下的角色id
friend_cnt = curCount + 1, -- 操作后好友数量
})
|
f22a33af
zhouhaihai
自己的日志
|
278
279
|
role:mylog("role_action", {desc = "addFriend", int1 = 1})
|
c384626d
zhouhaihai
好友
|
280
281
282
283
284
285
286
287
288
289
290
291
|
end
elseif cmd == 0 then -- 不同意
local objectId = msg.roleId
if not redisproxy:zscore(FRIEND_APPLY_KEY:format(roleId), objectId) then
return
end
redisproxy:ZREM(FRIEND_APPLY_KEY:format(roleId), objectId)
elseif cmd == 2 then -- 一键拒绝
redisproxy:del(FRIEND_APPLY_KEY:format(roleId))
elseif cmd == 3 then -- 一键同意
local redret = redisproxy:pipelining(function(red)
|
5dfc4978
zhouhaihai
好友完善
|
292
|
red:zrange(FRIEND_APPLY_KEY:format(roleId), 0, -1)
|
c384626d
zhouhaihai
好友
|
293
294
295
296
297
298
299
300
301
|
red:SMEMBERS(FRIEND_POINT:format(roleId))
end)
local allIds = redret[1]
local fpoint = formatArray(redret[2])
local needAdd = {}
local needAddMy = {}
local needAddInfo = {}
for _, objId in ipairs(allIds) do
objId = tonumber(objId)
|
6136eaca
liuzujun
添加好友表
|
302
|
local cr, curCount = checkHandleApply(role, objId, #needAdd)
|
c384626d
zhouhaihai
好友
|
303
304
305
306
307
308
309
310
311
312
|
if not cr then
table.insert(needAdd, objId)
table.insert(needAddMy, objId)
table.insert(needAddMy, newTag)
local online, otherInfo = getRoleInfo(objId)
otherInfo.online = true
otherInfo.roleId = objId
otherInfo.isFriend = true
otherInfo.pGet = fpoint[objId] and 1 or nil
table.insert(needAddInfo, otherInfo)
|
c59e058b
zhouhaihai
新一批日志记录
|
313
314
315
316
317
318
|
role:log("friend_opt", {
friend_opt_type = 100, -- 好友操作类型,见枚举表中 好友操作类型枚举表
friend_roleid = objId, -- 好友账户下的角色id
friend_cnt = curCount + 1, -- 操作后好友数量
})
|
c384626d
zhouhaihai
好友
|
319
320
321
322
|
end
end
redisproxy:pipelining(function (red)
|
92d7d6ac
zhouhaihai
加一些数据保护
|
323
324
325
326
|
if next(needAdd) then
red:ZREM(FRIEND_APPLY_KEY:format(roleId), table_unpack(needAdd))
for _, objectId in pairs(needAdd) do
red:ZREM(FRIEND_APPLY_KEY:format(objectId), roleId)
|
6136eaca
liuzujun
添加好友表
|
327
|
addFriend(roleId, objectId)
|
92d7d6ac
zhouhaihai
加一些数据保护
|
328
329
|
end
end
|
c384626d
zhouhaihai
好友
|
330
331
332
333
334
335
336
337
338
339
340
|
end)
local myInfo = role:friendSInfo()
myInfo.roleId = roleId
myInfo.online = true
myInfo.isFriend = 1
local giveFP = role.dailyData:getProperty("giveFP")
for _, objectId in pairs(needAdd) do
myInfo.pGet = giveFP[objectId]
rpcRole(objectId, "SendPacket", actionCodes.Friend_updateProperty, MsgPack.pack({newFriend = 1, info = {myInfo}})) -- 通知对方
end
if next(needAdd) then
|
f22a33af
zhouhaihai
自己的日志
|
341
342
|
role:mylog("role_action", {desc = "addFriend", int1 = #needAdd})
|
c384626d
zhouhaihai
好友
|
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
|
SendPacket(actionCodes.Friend_updateProperty, MsgPack.pack({newFriend = 1, info = needAddInfo}))
else
result = 1
end
else --不存在
return
end
SendPacket(actionCodes.Friend_handleApplyRpc, MsgPack.pack({result = result}))
return true
end
function _M.listRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local friendList = {}
local redret = redisproxy:pipelining(function (red)
|
c384626d
zhouhaihai
好友
|
362
363
364
|
red:SMEMBERS(FRIEND_POINT:format(roleId))
end)
|
6136eaca
liuzujun
添加好友表
|
365
|
local fpoint = formatArray(redret[1])
|
c384626d
zhouhaihai
好友
|
366
367
368
|
local hadGet = role.dailyData:getProperty("getFP")
local hadGive = role.dailyData:getProperty("giveFP")
|
6136eaca
liuzujun
添加好友表
|
369
370
|
local addNew = false
for id, friend in pairs(role.friends) do
|
c384626d
zhouhaihai
好友
|
371
372
373
374
|
local online, info = getRoleInfo(id)
local roleInfo = {
roleId = id,
online = online,
|
6136eaca
liuzujun
添加好友表
|
375
376
|
addTime = friend:getProperty("addTime"),
isNew = friend:getProperty("isNew"),
|
c384626d
zhouhaihai
好友
|
377
378
379
380
381
382
383
|
pGive = hadGive[id],
pGet = hadGet[id] and -1 or (fpoint[id] and 1 or nil)
}
roleInfo = table_merge(roleInfo, info, {})
friendList[#friendList + 1] = roleInfo
|
6136eaca
liuzujun
添加好友表
|
384
385
386
|
if roleInfo.isNew then
friend:setProperty("isNew", 0)
addNew = true
|
c384626d
zhouhaihai
好友
|
387
388
|
end
end
|
6136eaca
liuzujun
添加好友表
|
389
|
if addNew then
|
3dbbc9f3
zhouhaihai
加上新的任务
|
390
|
role:checkTaskEnter("AddFriend", {count = #friendList})
|
c384626d
zhouhaihai
好友
|
391
392
393
394
395
396
397
398
399
400
401
|
end
SendPacket(actionCodes.Friend_listRpc, MsgPack.pack({list = friendList}))
return true
end
function _M.deleteRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local msg = MsgPack.unpack(data)
local objectId = msg.roleId
|
6136eaca
liuzujun
添加好友表
|
402
|
if not roleExists(objectId) then
|
c384626d
zhouhaihai
好友
|
403
404
405
|
return
end
-- 是否在好友列表中
|
6136eaca
liuzujun
添加好友表
|
406
407
|
if role.friends[objectId] then
role.friends[objectId] = nil
|
c384626d
zhouhaihai
好友
|
408
|
redisproxy:pipelining(function (red)
|
6136eaca
liuzujun
添加好友表
|
409
|
delFriend(roleId, objectId)
|
c384626d
zhouhaihai
好友
|
410
411
412
413
414
415
|
red:ZREM(FRIEND_APPLY_KEY:format(roleId), objectId)
red:ZREM(FRIEND_APPLY_KEY:format(objectId), roleId)
end)
end
rpcRole(objectId, "SendPacket", actionCodes.Friend_updateProperty, MsgPack.pack({deleteFriend = 1, roleId = roleId}))
|
c59e058b
zhouhaihai
新一批日志记录
|
416
417
418
419
420
|
role:log("friend_opt", {
friend_opt_type = 200, -- 好友操作类型,见枚举表中 好友操作类型枚举表
friend_roleid = objectId, -- 好友账户下的角色id
friend_cnt = 0, -- 操作后好友数量
})
|
70fb62d1
liuzujun
服务器数据打点
|
421
|
role:mylog("role_action", {desc = "delFriend", int1 = 1})
|
c384626d
zhouhaihai
好友
|
422
423
424
425
426
427
428
429
430
431
|
SendPacket(actionCodes.Friend_deleteRpc, MsgPack.pack(""))
return true
end
function _M.blockRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local msg = MsgPack.unpack(data)
local cmd = msg.cmd
local objectId = msg.roleId
|
6136eaca
liuzujun
添加好友表
|
432
|
if not roleExists(objectId) then
|
c384626d
zhouhaihai
好友
|
433
434
435
436
437
438
439
440
441
442
443
444
|
return
end
local result = nil
if cmd == 1 then
-- 黑名单满了
if not result and not checkBlackLimit(roleId) then
result = 1
end
-- 删除好友
if not result then
redisproxy:pipelining(function (red)
|
6136eaca
liuzujun
添加好友表
|
445
|
delFriend(roleId, objectId)
|
85083dba
zhouhaihai
拉黑从申请列表移除
|
446
447
|
red:ZREM(FRIEND_APPLY_KEY:format(roleId), objectId)
red:ZREM(FRIEND_APPLY_KEY:format(objectId), roleId)
|
c384626d
zhouhaihai
好友
|
448
449
|
red:sadd(FRIEND_BLACK_KEY:format(roleId), objectId)
end)
|
c59e058b
zhouhaihai
新一批日志记录
|
450
451
452
453
454
455
|
rpcRole(objectId, "SendPacket", actionCodes.Friend_updateProperty, MsgPack.pack({deleteFriend = 1, roleId = roleId}))
role:log("friend_opt", {
friend_opt_type = 300, -- 好友操作类型,见枚举表中 好友操作类型枚举表
friend_roleid = objectId, -- 好友账户下的角色id
friend_cnt = 0, -- 操作后好友数量
})
|
c384626d
zhouhaihai
好友
|
456
457
458
459
460
461
|
end
elseif cmd == 2 then
redisproxy:SREM(FRIEND_BLACK_KEY:format(roleId), objectId)
else
return
end
|
c384626d
zhouhaihai
好友
|
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
|
SendPacket(actionCodes.Friend_blockRpc, MsgPack.pack({result = result}))
return true
end
function _M.blockListRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local blockList = {}
local friends = redisproxy:SMEMBERS(FRIEND_BLACK_KEY:format(roleId))
for _ , id in pairs(friends) do
id = tonumber(id)
local online, info = getRoleInfo(id)
table.insert(blockList, table_merge({
roleId = id, online = online
}, info, {
}))
end
|
5dfc4978
zhouhaihai
好友完善
|
482
|
|
c384626d
zhouhaihai
好友
|
483
484
485
486
487
488
489
490
491
|
SendPacket(actionCodes.Friend_blockListRpc, MsgPack.pack({list = blockList}))
return true
end
function _M.infoRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local msg = MsgPack.unpack(data)
local objectId = msg.roleId
|
6136eaca
liuzujun
添加好友表
|
492
493
|
if not roleExists(objectId) then
|
c384626d
zhouhaihai
好友
|
494
495
496
497
498
|
return
end
local online, info = getRoleAllInfo(objectId)
local redret = redisproxy:pipelining(function (red)
|
c384626d
zhouhaihai
好友
|
499
500
501
|
red:zscore(FRIEND_APPLY_KEY:format(objectId), roleId)
red:sismember(FRIEND_BLACK_KEY:format(roleId), objectId)
end)
|
6136eaca
liuzujun
添加好友表
|
502
503
504
|
local isFriend = role.friends[objectId] and 1 or nil
local hadApply = redret[1] == 1 and 1 or nil
local inBlack = redret[2] == 1 and 1 or nil
|
c384626d
zhouhaihai
好友
|
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
|
local objInfo = table_merge({
roleId = objectId,
online = online,
isFriend = isFriend,
hadApply = hadApply,
inBlack = inBlack,
}, info, {
})
SendPacket(actionCodes.Friend_infoRpc, MsgPack.pack({info = objInfo}))
return true
end
function _M.pointRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local msg = MsgPack.unpack(data)
local cmd = msg.cmd
local result = nil
local reward = {}
if cmd == 1 then -- 赠送
local objId = msg.roleId
local giveP = role.dailyData:getProperty("giveFP")
if not result and giveP[objId] then
result = 1
end
|
6136eaca
liuzujun
添加好友表
|
532
|
if not result and not role.friends[objId] then
|
c384626d
zhouhaihai
好友
|
533
534
535
536
537
538
|
result = 2
end
if not result then
redisproxy:sadd(FRIEND_POINT:format(objId), roleId)
giveP[objId] = 1
role.dailyData:updateProperty({field = "giveFP", value = giveP})
|
3dbbc9f3
zhouhaihai
加上新的任务
|
539
|
role:checkTaskEnter("GiveFriendP", {count = 1})
|
c384626d
zhouhaihai
好友
|
540
|
rpcRole(objId, "SendPacket", actionCodes.Friend_updateProperty, MsgPack.pack({newPoint = 1, roleId = roleId}))
|
f22a33af
zhouhaihai
自己的日志
|
541
542
|
role:mylog("role_action", {desc = "giveFPoint", int1 = 1})
|
c384626d
zhouhaihai
好友
|
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
|
end
elseif cmd == 2 then -- 领取
local objId = msg.roleId
local getP = role.dailyData:getProperty("getFP")
if not result and table.numbers(getP) >= globalCsv.friendPointLimit then
result = 1
end
if not result and getP[objId] then
result = 2
end
if not redisproxy:sismember(FRIEND_POINT:format(roleId), objId) then
result = 3
end
if not result then
getP[objId] = 1
|
3133cb76
zhouhaihai
日志
|
558
|
reward = role:award({[ItemId.FriendPoint] = 1}, {log = {desc = "friendPoint"}})
|
c384626d
zhouhaihai
好友
|
559
|
role.dailyData:updateProperty({field = "getFP", value = getP})
|
3dbbc9f3
zhouhaihai
加上新的任务
|
560
|
role:checkTaskEnter("GetFriendP", {count = 1})
|
3133cb76
zhouhaihai
日志
|
561
|
|
f22a33af
zhouhaihai
自己的日志
|
562
|
role:mylog("role_action", {desc = "getFPoint", int1 = 1})
|
c384626d
zhouhaihai
好友
|
563
564
565
566
|
end
elseif cmd == 3 then -- 一键赠送领取
-- 赠送
local giveP = role.dailyData:getProperty("giveFP")
|
3dbbc9f3
zhouhaihai
加上新的任务
|
567
|
local change = 0
|
c384626d
zhouhaihai
好友
|
568
|
redisproxy:pipelining(function(red)
|
6136eaca
liuzujun
添加好友表
|
569
|
for objId, friend in pairs(role.friends) do
|
c384626d
zhouhaihai
好友
|
570
571
|
if not giveP[objId] then
giveP[objId] = 1
|
3dbbc9f3
zhouhaihai
加上新的任务
|
572
|
change = change + 1
|
c384626d
zhouhaihai
好友
|
573
574
575
576
577
|
red:sadd(FRIEND_POINT:format(objId), roleId)
rpcRole(objId, "SendPacket", actionCodes.Friend_updateProperty, MsgPack.pack({newPoint = 1, roleId = roleId}))
end
end
end)
|
3dbbc9f3
zhouhaihai
加上新的任务
|
578
|
if change > 0 then
|
c384626d
zhouhaihai
好友
|
579
|
role.dailyData:updateProperty({field = "giveFP", value = giveP})
|
3dbbc9f3
zhouhaihai
加上新的任务
|
580
|
role:checkTaskEnter("GiveFriendP", {count = change})
|
3133cb76
zhouhaihai
日志
|
581
|
|
f22a33af
zhouhaihai
自己的日志
|
582
583
|
role:mylog("role_action", {desc = "giveFPoint", int1 = change})
|
c384626d
zhouhaihai
好友
|
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
|
else
result = 1
end
--领取
local getP = role.dailyData:getProperty("getFP")
local curCount = table.numbers(getP)
local getCount = 0
if curCount < globalCsv.friendPointLimit then
for _, objId in pairs(redisproxy:SMEMBERS(FRIEND_POINT:format(roleId))) do
local objId = tonumber(objId)
if not getP[objId] then
getCount = getCount + 1
curCount = curCount + 1
getP[objId] = 1
if curCount >= globalCsv.friendPointLimit then
break
end
end
end
if getCount > 0 then
|
3133cb76
zhouhaihai
日志
|
605
|
reward = role:award({[ItemId.FriendPoint] = getCount}, {log = {desc = "friendPoint"}})
|
c384626d
zhouhaihai
好友
|
606
|
role.dailyData:updateProperty({field = "getFP", value = getP})
|
3dbbc9f3
zhouhaihai
加上新的任务
|
607
|
role:checkTaskEnter("GetFriendP", {count = getCount})
|
f22a33af
zhouhaihai
自己的日志
|
608
|
role:mylog("role_action", {desc = "getFPoint", int1 = getCount})
|
c384626d
zhouhaihai
好友
|
609
|
else
|
8474ca36
zhouhaihai
聊天
|
610
|
result = (result or 0) + 2
|
c384626d
zhouhaihai
好友
|
611
612
613
614
615
616
617
618
619
620
621
622
623
|
end
end
else
return
end
SendPacket(actionCodes.Friend_pointRpc, MsgPack.pack({result = result, reward = reward}))
return true
end
function _M.randomRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local redret = redisproxy:pipelining(function (red)
|
5dfc4978
zhouhaihai
好友完善
|
624
625
|
red:zrevrange(FRIEND_RECOMMEND, 0, globalCsv.friendRecommendLimit + globalCsv.friendListLimit + 10) --扩充10个
red:SMEMBERS(FRIEND_BLACK_KEY:format(roleId))
|
c384626d
zhouhaihai
好友
|
626
|
end)
|
5dfc4978
zhouhaihai
好友完善
|
627
|
|
6136eaca
liuzujun
添加好友表
|
628
629
|
local newList = redret[1]
local hadBlack = formatArray(redret[2])
|
5dfc4978
zhouhaihai
好友完善
|
630
|
|
c384626d
zhouhaihai
好友
|
631
632
633
|
local needRoleIds = {}
for _, newId in pairs(newList) do
local numNewId = tonumber(newId)
|
6136eaca
liuzujun
添加好友表
|
634
|
if numNewId ~= roleId and not role.friends[numNewId] and not hadBlack[numNewId] then
|
c384626d
zhouhaihai
好友
|
635
636
637
638
639
|
table.insert(needRoleIds, numNewId)
end
end
local randomRoles = {}
|
5dfc4978
zhouhaihai
好友完善
|
640
641
|
local redret = redisproxy:pipelining(function (red)
for _, objId in ipairs(needRoleIds) do
|
c384626d
zhouhaihai
好友
|
642
|
red:zscore(FRIEND_APPLY_KEY:format(objId), roleId)
|
5dfc4978
zhouhaihai
好友完善
|
643
644
645
646
647
|
end
end)
for idx, objId in ipairs(needRoleIds) do
if not redret[idx] then
local online, info = getRoleInfo(objId)
|
1dfcef53
liuzujun
好友推荐列表bug
|
648
649
650
651
652
653
654
655
656
657
658
|
if next(info) then
table.insert(randomRoles, table_merge({
roleId = objId,
online = online,
hadApply = hadApply,
inBlack = inBlack,
}, info, {
}))
if #randomRoles >= globalCsv.friendRecommendLimit then break end
end
|
5dfc4978
zhouhaihai
好友完善
|
659
|
end
|
c384626d
zhouhaihai
好友
|
660
|
end
|
c384626d
zhouhaihai
好友
|
661
662
663
664
|
SendPacket(actionCodes.Friend_randomRpc, MsgPack.pack({list = randomRoles}))
return true
end
|
f603a60f
zhouhaihai
支援技实装
|
665
666
667
668
669
670
671
672
673
674
|
function _M.battleInfoRpc(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local msg = MsgPack.unpack(data)
local objId = msg.roleId
local online, matchInfo = rpcRole(objId, "friendBattleInfo")
SendPacket(actionCodes.Friend_battleInfoRpc, MsgPack.pack({matchInfo = matchInfo}))
return true
end
|
c384626d
zhouhaihai
好友
|
675
676
|
return _M
|