Read TOS

Mod který kontroluje přečtení pravidel serveru. by kaeza: http://pastebin.com/QVJw577B

init.lua
local FORMNAME = "tos:tos_fs"
 
local TOS = [[
Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Fusce sit amet nunc egestas, euismod neque at,
placerat quam. Proin nec massa malesuada,  egestas
elit tincidunt, cursus nunc. Morbi libero justo,
sodales sed lacus nec, convallis rhoncus est. Cras
pharetra elit sit amet enim vulputate semper. Sed
in laoreet est. Curabitur euismod lacus mauris, id
vulputate ante mattis ac. In semper accumsan mollis.
 
Duis in tincidunt ligula. Vivamus pellentesque lacus
eros, id eleifend elit rutrum eget. Cras facilisis
nulla nisl, nec mollis ligula scelerisque nec. Etiam
ultrices egestas erat, non iaculis risus ornare in.
Vivamus sed nisl vitae dolor condimentum sodales.
Vestibulum eget pretium metus, ut fermentum ipsum.
Phasellus arcu tortor, egestas malesuada sagittis a,
vestibulum ut tellus. Nulla tincidunt mauris vitae
dolor consectetur malesuada. Mauris placerat est
turpis, vel fringilla tellus venenatis nec. Cras
interdum porttitor ipsum, id sodales sapien pharetra
eu. Pellentesque mattis quis sapien ut sagittis.
 
Vestibulum ante ipsum primis in faucibus orci luctus
et ultrices posuere cubilia Curae. Nunc nec massa
tincidunt mauris commodo imperdiet vel ac purus.
Aliquam in ultrices nibh. Nam aliquam laoreet arcu,
eget pharetra lorem viverra vitae. In et fringilla
nulla. Fusce ac aliquet nulla. Nulla ultricies vitae
tortor sit amet mattis. Integer nibh magna, laoreet
in mattis sit amet, vulputate sed neque. Proin
accumsan interdum risus, eget tristique lacus
scelerisque cursus.
]]
 
local TOS_list = { } -- list[paragraph][word]
local par_wordlist
par_wordlist = { }
for line in TOS:gmatch("(.-)\n") do
	if line == "" then
		table.insert(TOS_list, par_wordlist)
		par_wordlist = { }
	end
	for word in line:gmatch("[%w][%w'_-]*") do
		table.insert(par_wordlist, word)
	end
end
 
local ord_suffix = { "st", "nd", "rd", [11] = "th", [12] = "th", [13] = "th" }
local function ordinal(n)
	return n..(ord_suffix[n % 100] or ord_suffix[n % 10] or "th")
end
 
local function rnditem(list)
	local i = math.floor(math.random(1, #list))
	return list[i], i
end
 
local function make_formspec()
	local par, pindex = rnditem(TOS_list)
	local word, windex = rnditem(par)
	local fs = { "size[8,6]" }
	table.insert(fs, "textarea[0.5,0.5;7,5;TOS;Terms of Service;"..TOS.."]")
	table.insert(fs, "field[0.5,5;5,1;entry;Please enter the "
		..ordinal(windex).." word of the "..ordinal(pindex).." paragraph.;]")
	table.insert(fs, "button[6,5;1.5,0.5;ok;Accept]")
	table.insert(fs, "field[10,10;0.1,0.1;hidden_word;;"..word.."]")
	return table.concat(fs)
end
 
minetest.register_on_player_receive_fields(function(player, formname, fields)
	if formname ~= FORMNAME then return end
	local name = player:get_player_name()
	if fields.quit then
		local privs = minetest.get_player_privs(name)
		if not privs.tos_accepted then
			minetest.chat_send_player(name, "Please read the message.")
			minetest.show_formspec(name, FORMNAME, make_formspec())
			return
		end
	elseif fields.ok then
		if fields.hidden_word == fields.entry then
			minetest.chat_send_player(name, "You're on!")
			local privs = minetest.get_player_privs(name)
			privs.tos_accepted = true
			minetest.set_player_privs(name, privs)
		else
			minetest.chat_send_player(name, "Wrong word.")
			minetest.show_formspec(name, FORMNAME, make_formspec())
			return
		end
	end
end)
 
minetest.register_on_joinplayer(function(player)
	local name = player:get_player_name()
	local privs = minetest.get_player_privs(name)
	if not privs.tos_accepted then
		minetest.after(1, function()
			minetest.show_formspec(name, FORMNAME, make_formspec())
		end)
	end
end)
 
minetest.register_privilege("tos_accepted", "TOS Accepted")