Commit 8474ca362f0466e3e24cc9c60c3ea8ad02f21b6a

Authored by zhouhaihai
1 parent 5dfc4978

聊天

src/actions/FriendAction.lua
@@ -307,7 +307,7 @@ function _M.handleApplyRpc(agent, data) @@ -307,7 +307,7 @@ function _M.handleApplyRpc(agent, data)
307 307
308 redisproxy:pipelining(function (red) 308 redisproxy:pipelining(function (red)
309 red:ZREM(FRIEND_APPLY_KEY:format(roleId), table_unpack(needAdd)) 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 for _, objectId in pairs(needAdd) do 311 for _, objectId in pairs(needAdd) do
312 red:ZREM(FRIEND_APPLY_KEY:format(objectId), roleId) 312 red:ZREM(FRIEND_APPLY_KEY:format(objectId), roleId)
313 red:hsetnx(FRIEND_KEY:format(objectId), roleId, newTag)--告知对放有新好友 313 red:hsetnx(FRIEND_KEY:format(objectId), roleId, newTag)--告知对放有新好友
@@ -577,7 +577,7 @@ function _M.pointRpc(agent, data) @@ -577,7 +577,7 @@ function _M.pointRpc(agent, data)
577 reward = role:award({[ItemId.FriendPoint] = getCount}) 577 reward = role:award({[ItemId.FriendPoint] = getCount})
578 role.dailyData:updateProperty({field = "getFP", value = getP}) 578 role.dailyData:updateProperty({field = "getFP", value = getP})
579 else 579 else
580 - result = result + 2 580 + result = (result or 0) + 2
581 end 581 end
582 end 582 end
583 else 583 else
src/actions/RoleAction.lua
@@ -601,27 +601,61 @@ function _M.chatRpc(agent, data) @@ -601,27 +601,61 @@ function _M.chatRpc(agent, data)
601 time = now, 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 if role:getProperty("silent") > now then --禁言 609 if role:getProperty("silent") > now then --禁言
607 result = 1 610 result = 1
608 return 611 return
609 end 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 mcast_util.pub_world(actionCodes.Role_chat, MsgPack.pack(response)) 637 mcast_util.pub_world(actionCodes.Role_chat, MsgPack.pack(response))
611 pcall(skynet.call, 'GLOBALD', "lua", "sendWorldMsg", role._channelIdx, response) 638 pcall(skynet.call, 'GLOBALD', "lua", "sendWorldMsg", role._channelIdx, response)
612 end, 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 end, 659 end,
626 } 660 }
627 if not check[cmd] then return end 661 if not check[cmd] then return end
@@ -629,7 +663,7 @@ function _M.chatRpc(agent, data) @@ -629,7 +663,7 @@ function _M.chatRpc(agent, data)
629 if not result then 663 if not result then
630 check[cmd]() 664 check[cmd]()
631 end 665 end
632 - SendPacket(actionCodes.Role_chatRpc, MsgPack.pack({result = result})) 666 + SendPacket(actionCodes.Role_chatRpc, MsgPack.pack({result = result, waitTime = waitTime}))
633 return true 667 return true
634 end 668 end
635 669
src/models/Role.lua
@@ -196,6 +196,7 @@ function Role:data() @@ -196,6 +196,7 @@ function Role:data()
196 loveStatus = self:getProperty("loveStatus"):toNumMap(), 196 loveStatus = self:getProperty("loveStatus"):toNumMap(),
197 diamond = self:getAllDiamond(), 197 diamond = self:getAllDiamond(),
198 bagLimit = self:getProperty("bagLimit"), 198 bagLimit = self:getProperty("bagLimit"),
  199 + silent = self:getProperty("silent"),
199 200
200 advPass = self:getProperty("advPass"), 201 advPass = self:getProperty("advPass"),
201 advInfo = self:getProperty("advInfo"), 202 advInfo = self:getProperty("advInfo"),
src/services/mcast_util.lua
@@ -92,18 +92,5 @@ function _M.pub_union(actionCode, bin) @@ -92,18 +92,5 @@ function _M.pub_union(actionCode, bin)
92 chan_g:publish(actionCode, bin) 92 chan_g:publish(actionCode, bin)
93 end 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 return _M 96 return _M
110 \ No newline at end of file 97 \ No newline at end of file