Commit 8474ca362f0466e3e24cc9c60c3ea8ad02f21b6a
1 parent
5dfc4978
聊天
Showing
4 changed files
with
52 additions
and
30 deletions
Show diff stats
src/actions/FriendAction.lua
... | ... | @@ -307,7 +307,7 @@ function _M.handleApplyRpc(agent, data) |
307 | 307 | |
308 | 308 | redisproxy:pipelining(function (red) |
309 | 309 | red:ZREM(FRIEND_APPLY_KEY:format(roleId), table_unpack(needAdd)) |
310 | - red:hsetnx(FRIEND_KEY:format(roleId), table_unpack(needAddMy)) | |
310 | + red:HMSET(FRIEND_KEY:format(roleId), table_unpack(needAddMy)) | |
311 | 311 | for _, objectId in pairs(needAdd) do |
312 | 312 | red:ZREM(FRIEND_APPLY_KEY:format(objectId), roleId) |
313 | 313 | red:hsetnx(FRIEND_KEY:format(objectId), roleId, newTag)--告知对放有新好友 |
... | ... | @@ -577,7 +577,7 @@ function _M.pointRpc(agent, data) |
577 | 577 | reward = role:award({[ItemId.FriendPoint] = getCount}) |
578 | 578 | role.dailyData:updateProperty({field = "getFP", value = getP}) |
579 | 579 | else |
580 | - result = result + 2 | |
580 | + result = (result or 0) + 2 | |
581 | 581 | end |
582 | 582 | end |
583 | 583 | else | ... | ... |
src/actions/RoleAction.lua
... | ... | @@ -601,27 +601,61 @@ function _M.chatRpc(agent, data) |
601 | 601 | time = now, |
602 | 602 | } |
603 | 603 | |
604 | - local check = { | |
605 | - ["world"] = function () | |
604 | + | |
605 | + local waitTime = nil | |
606 | + local check = { | |
607 | + -- 世界聊天 | |
608 | + [1] = function () | |
606 | 609 | if role:getProperty("silent") > now then --禁言 |
607 | 610 | result = 1 |
608 | 611 | return |
609 | 612 | end |
613 | + | |
614 | + role._worldChatLimit = role._worldChatLimit or {start = 0, count = 0, canSayt = 0} --第一次开始说话时间 从第一次说话次数 能说话的时间 | |
615 | + | |
616 | + if now < role._worldChatLimit.canSayt then | |
617 | + result = 2 | |
618 | + waitTime = canSayt - now | |
619 | + return | |
620 | + end | |
621 | + | |
622 | + if now - role._worldChatLimit.start >= globalCsv.chat_world_limit.time then | |
623 | + role._worldChatLimit.start = now | |
624 | + role._worldChatLimit.count = 1 | |
625 | + else | |
626 | + role._worldChatLimit.count = role._worldChatLimit.count + 1 | |
627 | + if role._worldChatLimit.count > globalCsv.chat_world_limit.count then | |
628 | + role._worldChatLimit.count = 0 | |
629 | + role._worldChatLimit.start = 0 | |
630 | + role._worldChatLimit.canSayt = now + globalCsv.chat_world_limit.wait | |
631 | + result = 2 | |
632 | + waitTime = globalCsv.chat_world_limit.wait | |
633 | + return | |
634 | + end | |
635 | + end | |
636 | + | |
610 | 637 | mcast_util.pub_world(actionCodes.Role_chat, MsgPack.pack(response)) |
611 | 638 | pcall(skynet.call, 'GLOBALD', "lua", "sendWorldMsg", role._channelIdx, response) |
612 | 639 | end, |
613 | - ["p2p"] = function () | |
614 | - -- local result | |
615 | - -- local objectId = msg.objectId | |
616 | - -- if redisproxy:hexists(FRIEND_KEY:format(roleId), objectId) then | |
617 | - -- response.to = objectId | |
618 | - -- result = mcast_util.pub_person(agent.client_fd, objectId, actionCodes.Role_chat, MsgPack.pack(response)) | |
619 | - -- else | |
620 | - -- result = SYS_ERR_CHAT_NOT_FRIEND | |
621 | - -- end | |
622 | - -- if result then | |
623 | - -- role:sendSysErrMsg(result) | |
624 | - -- end | |
640 | + -- 私聊 | |
641 | + [2] = function () | |
642 | + local objectId = msg.roleId | |
643 | + | |
644 | + if 0 == redisproxy:exists(string.format("role:%d", objectId)) then | |
645 | + result = 1 | |
646 | + return | |
647 | + end | |
648 | + | |
649 | + -- 若在线,实时发送聊天信息 | |
650 | + local agent = datacenter.get("agent", toRoleId) | |
651 | + if not agent then | |
652 | + result = 2 | |
653 | + return | |
654 | + end | |
655 | + local bin = MsgPack.pack(response) | |
656 | + SendPacket(actionCode, bin, agent.fd) | |
657 | + SendPacket(actionCode, bin, fromFd) | |
658 | + | |
625 | 659 | end, |
626 | 660 | } |
627 | 661 | if not check[cmd] then return end |
... | ... | @@ -629,7 +663,7 @@ function _M.chatRpc(agent, data) |
629 | 663 | if not result then |
630 | 664 | check[cmd]() |
631 | 665 | end |
632 | - SendPacket(actionCodes.Role_chatRpc, MsgPack.pack({result = result})) | |
666 | + SendPacket(actionCodes.Role_chatRpc, MsgPack.pack({result = result, waitTime = waitTime})) | |
633 | 667 | return true |
634 | 668 | end |
635 | 669 | ... | ... |
src/models/Role.lua
... | ... | @@ -196,6 +196,7 @@ function Role:data() |
196 | 196 | loveStatus = self:getProperty("loveStatus"):toNumMap(), |
197 | 197 | diamond = self:getAllDiamond(), |
198 | 198 | bagLimit = self:getProperty("bagLimit"), |
199 | + silent = self:getProperty("silent"), | |
199 | 200 | |
200 | 201 | advPass = self:getProperty("advPass"), |
201 | 202 | advInfo = self:getProperty("advInfo"), | ... | ... |
src/services/mcast_util.lua
... | ... | @@ -92,18 +92,5 @@ function _M.pub_union(actionCode, bin) |
92 | 92 | chan_g:publish(actionCode, bin) |
93 | 93 | end |
94 | 94 | |
95 | -function _M.pub_person(fromFd, toRoleId, actionCode, bin) | |
96 | - if 0 == redisproxy:exists(string.format("role:%d", toRoleId)) then | |
97 | - return SYS_ERROR_CHAT_NOT_EXIST | |
98 | - end | |
99 | - -- 若在线,实时发送聊天信息 | |
100 | - local agent = datacenter.get("agent", toRoleId) | |
101 | - if agent then | |
102 | - SendPacket(actionCode, bin, agent.fd) | |
103 | - SendPacket(actionCode, bin, fromFd) | |
104 | - return | |
105 | - end | |
106 | - return SYS_ERROR_CHAT_NOT_ONLINE | |
107 | -end | |
108 | 95 | |
109 | 96 | return _M |
110 | 97 | \ No newline at end of file | ... | ... |