party_api: add support for partys that require invite
This commit is contained in:
parent
aa308408bc
commit
9725c71e96
@ -1,5 +1,6 @@
|
||||
std = "lua51+luajit+minetest"
|
||||
|
||||
-- pattern local res1, error = f1(); if not res1 then return false, error end; local res2, error = f2()
|
||||
ignore = {"411"}
|
||||
|
||||
globals = {"party_api", "party", "factions"}
|
||||
|
45
party_api/InvitePartyManager.lua
Normal file
45
party_api/InvitePartyManager.lua
Normal file
@ -0,0 +1,45 @@
|
||||
local InvitePartyManager = {}
|
||||
|
||||
local super = party_api.manager_classes.default_manager
|
||||
local __index = function (_, key)
|
||||
return InvitePartyManager[key] or super[key]
|
||||
end
|
||||
|
||||
InvitePartyManager.setInvite = function (self, partyname, value)
|
||||
local party, error = self:getParty(partyname)
|
||||
if not party then return false, error end
|
||||
|
||||
local success, error = party:setInviteRequired(value)
|
||||
if not success then return false, error end
|
||||
self:setParty(party)
|
||||
return success
|
||||
end
|
||||
|
||||
InvitePartyManager.invite = function (self, playername, partyname)
|
||||
local party, error = self:getParty(partyname)
|
||||
if not party then return false, error end
|
||||
local sucess, error = party:invite(playername)
|
||||
if not sucess then return false, error end
|
||||
self:setParty(party)
|
||||
return "OK"
|
||||
end
|
||||
|
||||
InvitePartyManager.cancelInvite = function (self, playername, partyname)
|
||||
local party, error = self:getParty(partyname)
|
||||
if not party then return false, error end
|
||||
local sucess, error = party:cancelInvite(playername)
|
||||
if not sucess then return false, error end
|
||||
self:setParty(party)
|
||||
return "OK"
|
||||
end
|
||||
|
||||
|
||||
local call = function (_, ...)
|
||||
local manager = super(...)
|
||||
return setmetatable(manager, {__index = __index})
|
||||
end
|
||||
|
||||
return setmetatable({}, {
|
||||
__call = call,
|
||||
__index = __index,
|
||||
})
|
93
party_api/InvitePartyObject.lua
Normal file
93
party_api/InvitePartyObject.lua
Normal file
@ -0,0 +1,93 @@
|
||||
local core = minetest
|
||||
|
||||
-- core.write_json / core.parse_json has problems when called on {}
|
||||
local serialize = core.serialize
|
||||
local deserialize = core.deserialize
|
||||
|
||||
local InviteParty = {}
|
||||
|
||||
local super = party_api.party_classes.default_party
|
||||
local __index = function (_, key)
|
||||
return InviteParty[key] or super[key]
|
||||
end
|
||||
|
||||
|
||||
InviteParty.getData = function(self)
|
||||
local result = super.getData(self)
|
||||
result.invite_required = self.invite_required
|
||||
result.invited = self.invited
|
||||
return result
|
||||
end
|
||||
|
||||
InviteParty.join = function (self, playername)
|
||||
if self.invite_required then
|
||||
local invite_list = deserialize(self.invited)
|
||||
if not invite_list[playername] then
|
||||
-- TODO: Notify that someone wanted to join?)
|
||||
return false, "Missing invitation for this party"
|
||||
end
|
||||
invite_list[playername] = nil
|
||||
self.invited = serialize(invite_list)
|
||||
end
|
||||
|
||||
return super.join(self, playername)
|
||||
end
|
||||
|
||||
InviteParty.setInviteRequired = function (self, value)
|
||||
-- turn value into a bool
|
||||
value = not not value
|
||||
self.invite_required = value
|
||||
|
||||
if value == false then
|
||||
party.invited = serialize({})
|
||||
return "Invite is now OFF"
|
||||
else
|
||||
return "Invite is now ON"
|
||||
end
|
||||
end
|
||||
|
||||
InviteParty.invite = function (self, playername)
|
||||
if not self.invite_required then
|
||||
return false, "No invite required"
|
||||
end
|
||||
local invite_list = deserialize(self.invited)
|
||||
invite_list[playername] = true
|
||||
self.invited = serialize(invite_list)
|
||||
return "OK"
|
||||
end
|
||||
|
||||
InviteParty.cancelInvite = function (self, playername)
|
||||
if not self.invite_required then
|
||||
return false, "No invite required"
|
||||
end
|
||||
local invite_list = deserialize(self.invited)
|
||||
invite_list[playername] = nil
|
||||
self.invited = serialize(invite_list)
|
||||
return "OK"
|
||||
end
|
||||
|
||||
|
||||
local load = function (partyname, data, members)
|
||||
local party = super(partyname, data, members)
|
||||
party.invite_required = data.invite_required
|
||||
party.invited = data.invited
|
||||
return setmetatable(party, {__index = __index})
|
||||
end
|
||||
|
||||
local create = function(partyname, invite_required)
|
||||
local party = super(partyname)
|
||||
-- turn invite_required into a bool
|
||||
party.invite_required = not not invite_required
|
||||
party.invited = serialize({})
|
||||
return setmetatable(party, {__index = __index})
|
||||
end
|
||||
|
||||
local call = function (_, ...)
|
||||
if #{...} < 3 then return create(...) end
|
||||
if #{...} == 3 then return load(...) end
|
||||
end
|
||||
|
||||
return setmetatable({}, {
|
||||
__call = call,
|
||||
__index = __index,
|
||||
})
|
@ -158,7 +158,7 @@ end
|
||||
|
||||
-- -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
return function (kwargs)
|
||||
local call = function (_, kwargs)
|
||||
if kwargs.storage_ref:get_string("partylist") == "" then
|
||||
kwargs.storage_ref:set_string("partylist", serialize({}))
|
||||
end
|
||||
@ -166,4 +166,9 @@ return function (kwargs)
|
||||
storage_ref = kwargs.storage_ref,
|
||||
party_class = kwargs.party_class,
|
||||
}, metatable)
|
||||
end
|
||||
end
|
||||
|
||||
return setmetatable({}, {
|
||||
__call = call,
|
||||
__index = PartyManager,
|
||||
})
|
@ -59,6 +59,13 @@ PartyObject.getPlayerData = function (self, playername)
|
||||
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
|
||||
|
||||
local load = function (partyname, data, members)
|
||||
local party = table.copy(data)
|
||||
@ -76,7 +83,7 @@ local create = function(partyname)
|
||||
end
|
||||
|
||||
local call = function (_, ...)
|
||||
if #{...} == 1 then return create(...) end
|
||||
if #{...} < 3 then return create(...) end
|
||||
if #{...} == 3 then return load(...) end
|
||||
end
|
||||
|
||||
|
@ -16,6 +16,12 @@
|
||||
- leave(playername)
|
||||
|
||||
### PartyObject
|
||||
**data**
|
||||
- name
|
||||
- created
|
||||
- members (structure: see above)
|
||||
|
||||
**functions**
|
||||
- (partyname): creates a new party with the given name
|
||||
- (partyname, data, members): loads a party with the given params
|
||||
- getName()
|
||||
@ -25,4 +31,10 @@
|
||||
- rename(newname)
|
||||
- join(playername)
|
||||
- leave(playername)
|
||||
- getPlayerData(playername)
|
||||
- getPlayerData(playername)
|
||||
- setPlayerData(playername, data)
|
||||
|
||||
### InvitePartyObject (additional to PartyObject)
|
||||
**data**
|
||||
- invite_required (bool)
|
||||
- invited: serialized table in the form of members
|
@ -11,4 +11,7 @@ party_api.manager_classes = {}
|
||||
party_api.party_classes = {}
|
||||
|
||||
party_api.manager_classes.default_manager = dofile(party_api.modpath .. "/PartyManager.lua")
|
||||
party_api.manager_classes.invite_manager = dofile(party_api.modpath .. "/InvitePartyManager.lua")
|
||||
|
||||
party_api.party_classes.default_party = dofile(party_api.modpath .. "/PartyObject.lua")
|
||||
party_api.party_classes.invite_party = dofile(party_api.modpath .. "/InvitePartyObject.lua")
|
||||
|
Loading…
Reference in New Issue
Block a user