party_redo/party_api/PartyObject.lua

85 lines
1.9 KiB
Lua

local core = minetest
-- members: {name = "serialized meta"}
-- init(partyname, data, members)
-- create(partyname)
-- delete() -- must guarantee that getMembers will still work afterwards
-- rename
-- GetName()
-- GetData()
-- GetMembers()
-- Join()
-- leave(playername)
-- core.write_json / core.parse_json has problems when called on {}
local serialize = core.serialize
local deserialize = core.deserialize
local PartyObject = {}
PartyObject.getName = function(self)
return self.name
end
PartyObject.getData = function(self)
local result = {}
result.created = self.created
return result
end
PartyObject.getMembers = function(self)
return self.members
end
PartyObject.delete = function()
return "OK"
end
PartyObject.rename = function() -- function(self, newname)
return "OK"
end
PartyObject.join = function(self, playername)
local metadata = {joined = os.time()}
self.members[playername] = serialize(metadata)
return "OK"
end
PartyObject.leave = function (self, playername)
self.members[playername] = nil
return "OK"
end
PartyObject.getPlayerData = function (self, playername)
if not self.members[playername] then
return false, "player is not part of the party"
end
return deserialize(self.members[playername])
end
PartyObject.setPlayerData = function (self, playername, data)
if not self.members[playername] then
return false, "player is not part of the party"
end
self.members[playername] = serialize(data)
return "OK"
end
PartyObject.load = function (partyname, data, members)
local party = table.copy(data)
party.name = partyname
party.members = members
return setmetatable(party, {__index = PartyObject})
end
PartyObject.create = function(partyname)
local data = {
created = os.time()
}
local members = {}
return PartyObject.load(partyname, data, members)
end
return PartyObject