You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
3.7 KiB
Lua
162 lines
3.7 KiB
Lua
local skynet = require "skynet"
|
|
local cjson = require "cjson"
|
|
local dateutils = require "dateutils"
|
|
local bagmodel = require "bagmodel"
|
|
require "functions"
|
|
|
|
--好友模型
|
|
|
|
local friendmodel = {}
|
|
|
|
--好友列表
|
|
function friendmodel:init(friends, gives, receives)
|
|
self.friends = {}
|
|
for i,v in ipairs(friends) do
|
|
table.insert(self.friends, v)
|
|
end
|
|
self.gives = {}
|
|
for k,v in pairs(gives) do
|
|
self.gives[checkint(k)] = tonumber(v)
|
|
end
|
|
self.receives = {}
|
|
for k,v in pairs(receives) do
|
|
self.receives[checkint(k)] = tonumber(v)
|
|
end
|
|
end
|
|
|
|
|
|
function friendmodel:isfriend(friendid)
|
|
for i,v in ipairs(self.friends) do
|
|
if v.uid == friendid then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function friendmodel:addfriend(friend)
|
|
table.insert(self.friends, friend)
|
|
local ok = skynet.call(".friendd", "lua", "addfriend", UID, friend.uid)
|
|
end
|
|
|
|
|
|
function friendmodel:inneraddfriend(friend)
|
|
table.insert(self.friends, friend)
|
|
end
|
|
|
|
|
|
--拉黑
|
|
function friendmodel:isblack(friendid)
|
|
for i,v in ipairs(self.friends) do
|
|
if v.uid == friendid then
|
|
return v.status or 0
|
|
end
|
|
end
|
|
return -1
|
|
end
|
|
|
|
--拉黑
|
|
function friendmodel:black(friendid)
|
|
for i,v in ipairs(self.friends) do
|
|
if v.uid == friendid then
|
|
v.status = 1
|
|
end
|
|
end
|
|
skynet.call(".friendd", "lua", "black", UID, friendid)
|
|
end
|
|
|
|
--删除拉黑
|
|
function friendmodel:delblack(friendid)
|
|
for i,v in ipairs(self.friends) do
|
|
if v.uid == friendid then
|
|
v.status = 0
|
|
end
|
|
end
|
|
skynet.call(".friendd", "lua", "delblack", UID, friendid)
|
|
end
|
|
|
|
function friendmodel:delete(friendid)
|
|
for i,v in ipairs(self.friends) do
|
|
if v.uid == friendid then
|
|
table.remove(self.friends, i)
|
|
end
|
|
end
|
|
skynet.call(".friendd", "lua", "delete", UID, friendid)
|
|
skynet.call(".friendd", "lua", "delete", friendid, UID)
|
|
end
|
|
|
|
|
|
function friendmodel:checkgive(fid)
|
|
fid = checkint(fid)
|
|
local coin = self.gives[fid]
|
|
return coin
|
|
end
|
|
|
|
function friendmodel:givecoin(fid, coin)
|
|
fid = checkint(fid)
|
|
self.gives[fid] = 1
|
|
local ok = skynet.call(".friendd", "lua", "givecoin", UID, fid, coin)
|
|
end
|
|
|
|
|
|
function friendmodel:checkreceive(fid)
|
|
fid = checkint(fid)
|
|
local coin = self.receives[fid] or 0
|
|
return coin ~= 0
|
|
end
|
|
|
|
function friendmodel:innergivecoin(fid, coin)
|
|
fid = checkint(fid)
|
|
self.receives[fid] = tonumber(coin)
|
|
end
|
|
|
|
function friendmodel:receivecoin(fid)
|
|
fid = checkint(fid)
|
|
local coin = self.receives[fid] or 0
|
|
assert(coin ~= 0)
|
|
self.receives[fid] = 0
|
|
local ok = skynet.call(".friendd", "lua", "receivecoin", UID, fid)
|
|
return coin
|
|
end
|
|
|
|
function friendmodel:checkgiveandreceive()
|
|
local gives, receives = self:giveandreceive()
|
|
return #gives > 0 or #receives > 0
|
|
end
|
|
|
|
|
|
function friendmodel:giveandreceive()
|
|
local gives = {}
|
|
local receives = {}
|
|
for _,v in ipairs(self.friends) do
|
|
local uid = checkint(v.uid)
|
|
if not self.gives[uid] then
|
|
table.insert(gives,uid)
|
|
end
|
|
if self.receives[uid] == 0 then
|
|
table.insert(receives, uid)
|
|
end
|
|
end
|
|
return gives, receives
|
|
end
|
|
|
|
function friendmodel:serialize()
|
|
|
|
for _,v in ipairs(self.friends) do
|
|
local uid = checkint(v.uid)
|
|
v.is_give = self.gives[uid] or 0
|
|
v.receive_coin = self.receives[uid] or 0
|
|
end
|
|
|
|
table.sort( self.friends, function(a, b)
|
|
if a.max_level == b.max_level then
|
|
return tonumber(a.zhanli) > tonumber(b.zhanli)
|
|
end
|
|
return a.max_level > b.max_level
|
|
end)
|
|
return table.array(self.friends)
|
|
end
|
|
|
|
|
|
return friendmodel
|