initial guestlists implementation

master
Tai Kedzierski 2019-01-23 20:49:32 +00:00
parent 28463bf458
commit bbb82cc891
7 changed files with 87 additions and 6 deletions

View File

@ -36,11 +36,11 @@ rspawn.max_x = tonumber(minetest.settings:get("rspawn.max_x") or 31000)
rspawn.min_z = tonumber(minetest.settings:get("rspawn.min_z") or -31000)
rspawn.max_z = tonumber(minetest.settings:get("rspawn.max_z") or 31000)
dofile(mpath.."/src/data.lua")
dofile(mpath.."/src/invites.lua")
dofile(mpath.."/src/commands.lua")
dofile(mpath.."/src/forceload.lua")
dofile(mpath.."/src/debugging.lua")
dofile(mpath.."/lua/data.lua")
dofile(mpath.."/lua/invites.lua")
dofile(mpath.."/lua/commands.lua")
dofile(mpath.."/lua/forceload.lua")
dofile(mpath.."/lua/debugging.lua")
@ -233,4 +233,4 @@ minetest.register_on_respawnplayer(function(player)
end
end)
dofile(mpath.."/src/pregeneration.lua")
dofile(mpath.."/lua/pregeneration.lua")

View File

@ -144,6 +144,87 @@ function rspawn:consume_levvy(player)
return false
end
function rspawn.invites:addplayer(hostname, guestname)
local guestlist = rspawn.guestlists[hostname] or {}
if guestlist[guestname] ~= nil then
minetest.chat_send_player(hostname, guestname.." is already in your guest list.")
elseif rspawn:consume_levvy(minetest.get_player_by_name(hostname) ) then -- Automatically notifies host if they don't have enough
guestlist[guestname] = 1
rspawn.questlists[hostname] = guestlist
minetest.chat_send_player(guestname, hostname.." added you to their spawn! You can now visit them with /spawn visit "..hostname)
end
end
function rspawn.invites:exileplayer(hostname, guestname)
local guestlist = rspawn.guestlists[hostname] or {}
if guestlist[guestname] == 1 then
guestlist[guestname] = 0
rspawn.questlists[hostname] = guestlist
minetest.chat_send_player(guestname, hostname.." has exiled you!")
else
minetest.chat_send_player(hostname, guestname.." is not in your accepted guests list.")
end
end
function rspawn.invites:liftexileplayer(hostname, guestname)
local guestlist = rspawn.guestlists[hostname] or {}
if guestlist[guestname] == 0 then
guestlist[guestname] = 1
rspawn.questlists[hostname] = guestlist
rspawn.invites:kick(hostname, guestname)
minetest.chat_send_player(guestname, hostname.." has exiled you!")
else
minetest.chat_send_player(hostname, guestname.." is not in your exiled guests list.")
end
end
function rspawn.invites:kick(hostname, guestname)
local guest = minetest.get_player_by_name(guestname)
local guestpos = guest:getpos()
local hostspawnpos = rspawn.playerspawns[hostname]
local guestspawnpos = rspawn.playerspawns[guestname]
if vector.distance(guestpos, hostspawnpos) then
guest:setpos(guestspawnpos)
end
end
function rspawn.invites:listguests(hostname)
local guests = ""
local guestlist = rspawn.guestlists[hostname] or {}
for guestname,status in pairs(guestlist) do
if status == 1 then status = "" else status = " (exiled)"
guests = ", "..guestname..status
end
minetest.chat_send_player(hostname, guests)
end
function rspawn.invites:listhosts(guestname)
local hosts = ""
for _,hostname in ipairs(rspawn.guestlists) do
for gname,status in pairs(rspawn.guestlists[hostname]) do
if guestname == gname then
if status == 1 then status = "" else status = " (exiled)"
hosts = ", "..hostname..status
end
end
end
minetest.chat_send_player(guestname, hosts)
end
function rspawn.invites:accept(guestname)
local hostname = rspawn.invitations[guestname]