Add simple rules mod

This commit is contained in:
rubenwardy 2016-01-02 20:40:34 +00:00
parent d945c5002b
commit 277ada0bdc
4 changed files with 96 additions and 134 deletions

View file

@ -1,69 +0,0 @@
join_fs = {
slides = {},
players = {}
}
function join_fs.load()
local filepath = minetest.get_worldpath() .. "/join_fs.txt"
local file = io.open(filepath, "r")
if file then
local table = minetest.deserialize(file:read("*all"))
if type(table) == "table" then
join_fs.players = table.players
return
end
end
end
function join_fs.save()
local filepath = minetest.get_worldpath() .. "/join_fs.txt"
local file = io.open(filepath, "w")
if file then
file:write(minetest.serialize({
players = join_fs.players
}))
file:close()
else
minetest.log("warning", "Failed to save join_fs player config!")
end
end
minetest.register_on_shutdown(function()
join_fs.save()
end)
function join_fs.confirm(name, sname)
local player = join_fs.players[name]
if not player then
player = {}
join_fs.players[name] = player
end
player[sname] = true
join_fs.save()
end
function join_fs.register_slide(def)
table.insert(join_fs.slides, def)
return def.name
end
function join_fs.show_next_slide(player)
for _, def in pairs(join_fs.slides) do
local pids = join_fs.players[player:get_player_name()] or {}
if def.should_show(player, pids[def.name]) then
def.show(player)
break
end
end
end
join_fs.load()
minetest.register_on_joinplayer(function (player)
local name = player:get_player_name()
minetest.after(0.5, function()
local player = minetest.get_player_by_name(name)
if player then
join_fs.show_next_slide(player)
end
end)
end)

View file

@ -1 +0,0 @@
shooter

View file

@ -1,64 +0,0 @@
dofile(minetest.get_modpath("join_fs") .. "/api.lua")
-- Rules slide from agreerules
join_fs.register_slide({
name = "rules",
should_show = function(player, has_been_shown_before)
return not minetest.check_player_privs(player:get_player_name(), {interact=true})
end,
show = function(player)
local msgs = {
"Welcome to Capture the Flag!",
"Developed, hosted, and moderated by rubenwardy.",
" tip: use /vote_next to skip to the next round",
",By playing on this server you agree to these rules:",
"1. Be nice. eg: No (excessive or bad) swearing",
"2. No dating",
"3. Don't be a cheater",
" (No hacked clients or griefing/sabotage of team)",
"4. Don't impersonate other community members",
"Failure to follow these rules may result in a kick or ban",
" (temp or permanent) depending on severity."}
local fs = ""
for _, line in pairs(msgs) do
if fs ~= "" then
fs = fs .. ","
end
fs = fs .. minetest.formspec_escape(line)
end
fs = "size[8,9] textlist[0.1,0.1;7.8,7;rules;" .. fs .. "]"
fs = fs .. " button_exit[0.5,7;3.5,2;yes;" ..
minetest.formspec_escape("Yes, let me play!") .. "]"
fs = fs .. " button[4,7;3.5,2;no;" ..
minetest.formspec_escape("No, get me out of here!") .. "]"
minetest.show_formspec(player:get_player_name(), "join_fs:rules", fs)
end
})
minetest.register_on_player_receive_fields(function(player, form, fields)
if form == "join_fs:rules" then
local name = player:get_player_name()
if fields.rules then
return true
elseif not fields.yes or fields.no then
minetest.kick_player(name,
"You need to agree to the rules to play on this server. " ..
"Please rejoin and confirm another time.")
return true
end
local privs = minetest.get_player_privs(name)
privs.shout = true
privs.interact = true
minetest.set_player_privs(name, privs)
minetest.chat_send_player(name, "Welcome "..name.."! You have now permission to play!")
join_fs.confirm(name, "rules")
join_fs.show_next_slide(player)
end
end)

96
mods/rules/init.lua Normal file
View file

@ -0,0 +1,96 @@
-- Rules slide from agreerules
rules = {}
function rules.show(player)
local msgs = {
"Welcome to Capture the Flag!",
"Developed and hosted by rubenwardy.",
"Moderators: Kpenguin, Thomas-S, Dragonop,",
" stormchaser3000, Calinou.",
" tip: use /vote to skip to the next round",
",By playing on this server you agree to these rules:",
"1. Be nice. eg: No (excessive or bad) swearing",
"2. No dating.",
"3. Don't be a cheater. No hacked clients.",
"4. Don't be a traitor. Don't:",
" a. Dig blocks in your base to make it less secure or",
" to trap team mates on purpuse.",
" b. Help the other team.",
"5. Don't impersonate other community members",
"Failure to follow these rules may result in a kick or ban",
" (temp or permanent) depending on severity."}
local fs = ""
for _, line in pairs(msgs) do
if fs ~= "" then
fs = fs .. ","
end
fs = fs .. minetest.formspec_escape(line)
end
fs = "size[8,8]textlist[0.1,0.1;7.8,6;msg;" .. fs .. "]"
if minetest.check_player_privs(player:get_player_name(), { interact = true }) then
fs = fs .. "button_exit[0.5,6;7,2;yes;Okay]"
else
local yes = minetest.formspec_escape("Yes, let me play!")
local no = minetest.formspec_escape("No, get me out of here!")
fs = fs .. "button_exit[0.5,6;3.5,2;no;" .. no .. "]"
fs = fs .. "button_exit[4,6;3.5,2;yes;" .. yes .. "]"
end
minetest.show_formspec(player:get_player_name(), "rules:rules", fs)
end
minetest.register_chatcommand("rules", {
func = function(name, param)
if param ~= "" and
minetest.check_player_privs(name, { kick = true }) then
name = param
end
local player = minetest.get_player_by_name(name)
if player then
rules.show(player)
return true, "Rules shown."
else
return false, "Player " .. name .. " does not exist or is not online"
end
end
})
minetest.register_on_joinplayer(function(player)
if not minetest.check_player_privs(player:get_player_name(), { interact = true }) then
rules.show(player)
end
end)
minetest.register_on_player_receive_fields(function(player, form, fields)
if form ~= "rules:rules" then
return
end
local name = player:get_player_name()
if minetest.check_player_privs(name, { interact = true }) then
return true
end
if fields.msg then
return true
elseif not fields.yes or fields.no then
minetest.kick_player(name,
"You need to agree to the rules to play on this server. " ..
"Please rejoin and confirm another time.")
return true
end
local privs = minetest.get_player_privs(name)
privs.shout = true
privs.interact = true
minetest.set_player_privs(name, privs)
minetest.chat_send_player(name, "Welcome "..name.."! You have now permission to play!")
return true
end)