Commit 8474ca362f0466e3e24cc9c60c3ea8ad02f21b6a

Authored by zhouhaihai
1 parent 5dfc4978

聊天

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
... ...