Add keyword, editor, and @KEYWORD substitution

This commit is contained in:
cheapie 2016-05-17 21:55:58 -05:00
parent 010b5d7b96
commit 01e3943e7f

145
init.lua
View File

@ -1,5 +1,8 @@
newplayer = {}
newplayer.keyword = minetest.setting_get("interact_keyword")
if newplayer.keyword == "" then newplayer.keyword = nil end
newplayer.hudids = {}
local f = io.open(minetest.get_modpath("newplayer")..DIR_DELIM.."rules.txt","r")
@ -12,17 +15,31 @@ else
end
function newplayer.showrulesform(name)
local form_interact = "size[8,9]"..
if newplayer.keyword then
newplayer.rules_subbed = string.gsub(newplayer.rules,"@KEYWORD",newplayer.keyword)
else
newplayer.rules_subbed = newplayer.rules
end
local form_interact = "size[8,10]"..
"label[0,0;Server Rules]"..
"textarea[0.25,1;8,7;rules;;"..newplayer.rules.."]"..
"button_exit[3,8;2,1;quit;OK]"
local form_nointeract = "size[8,9]"..
"textarea[0.25,1;8,7;rules;;"..newplayer.rules.."]"
local form_nointeract = "size[8,10]"..
"label[0,0;Server Rules]"..
"textarea[0.25,1;8,7;rules;;"..newplayer.rules.."]"..
"button[1,8;2,1;yes;I agree]"..
"button[5,8;2,1;no;I do not agree]"
"textarea[0.25,1;8,7;rules;;"..newplayer.rules_subbed.."]"..
"button[1,9;2,1;yes;I agree]"..
"button[5,9;2,1;no;I do not agree]"
if newplayer.keyword then
form_nointeract = form_nointeract.."field[0.25,8;8,1;keyword;Enter keyword from rules above\:;]"
end
local hasinteract = minetest.check_player_privs(name,{interact=true})
if hasinteract then
if minetest.check_player_privs(name,{server=true}) then
form_interact = form_interact.."button_exit[1,9;2,1;quit;OK]"
form_interact = form_interact.."button[5,9;2,1;edit;Edit]"
form_interact = form_interact.."field[0.25,8;8,1;keyword;Keyword\:;"..(newplayer.keyword or "").."]"
else
form_interact = form_interact.."button_exit[3,9;2,1;quit;OK]"
end
minetest.show_formspec(name,"newplayer:rules_interact",form_interact)
else
minetest.show_formspec(name,"newplayer:rules_nointeract",form_nointeract)
@ -47,22 +64,22 @@ minetest.register_on_joinplayer(function(player)
alignment = {x=0,y=0},
offset = {x=0,y=0}
})
minetest.after(3,newplayer.showrulesform,name)
minetest.after(0,newplayer.showrulesform,name)
end)
minetest.register_on_player_receive_fields(function(player,formname,fields)
if formname ~= "newplayer:rules_nointeract" then
return false
end
local name = player:get_player_name()
if formname == "newplayer:rules_nointeract" then
if fields.quit then
newplayer.showrulesform(name)
elseif fields.yes then
if not newplayer.keyword or string.lower(fields.keyword) == string.lower(newplayer.keyword) then
local privs = minetest.get_player_privs(name)
privs.interact = true
minetest.set_player_privs(name,privs)
if newplayer.hudids[name] then
minetest.get_player_by_name(name):hud_remove(newplayer.hudids[name])
minetest.get_player_by_name(name):hud_remove(newplayer.hudids[name]-1)
newplayer.hudids[name] = nil
end
local spawn = minetest.setting_get_pos("spawnpoint_interact")
@ -79,6 +96,12 @@ minetest.register_on_player_receive_fields(function(player,formname,fields)
"label[1,1.5;You can also use /spawn to return here.]"..
"button_exit[1.5,2;2,1;quit;OK]"
minetest.show_formspec(name,"newplayer:agreethanks",form)
else
local form = "size[5,3]"..
"label[1,0;Incorrect keyword!]"..
"button[1.5,2;2,1;quit;Try Again]"
minetest.show_formspec(name,"newplayer:tryagain",form)
end
elseif fields.no then
local form = "size[5,3]"..
"label[1,0;You may remain on the server\,]"..
@ -88,6 +111,45 @@ minetest.register_on_player_receive_fields(function(player,formname,fields)
minetest.show_formspec(name,"newplayer:disagreewarning",form)
end
return true
elseif formname == "newplayer:tryagain" then
newplayer.showrulesform(name)
return true
elseif formname == "newplayer:editrules" then
if minetest.check_player_privs(name, {server=true}) then
if fields.save then
local f = io.open(minetest.get_modpath("newplayer")..DIR_DELIM.."rules.txt","w")
f:write(fields.rules)
f:close()
newplayer.rules = fields.rules
if fields.keyword ~= "" then
newplayer.keyword = fields.keyword
minetest.setting_set("interact_keyword",fields.keyword)
minetest.setting_save()
else
newplayer.keyword = nil
minetest.setting_set("interact_keyword","")
minetest.setting_save()
end
minetest.chat_send_player(name,"Rules/keyword updated successfully.")
end
else
minetest.chat_send_player(name,"You hacker you... nice try!")
end
elseif formname == "newplayer:rules_interact" then
if fields.edit and minetest.check_player_privs(name,{server=true}) then
local form = "size[8,10]"..
"label[0,0;Editing Server Rules]"..
"textarea[0.25,1;8,7;rules;;"..newplayer.rules.."]"..
"button_exit[1,9;2,1;save;Save]"..
"button_exit[5,9;2,1;quit;Cancel]"..
"field[0.25,8;8,1;keyword;Keyword\:;"..(newplayer.keyword or "").."]"
minetest.show_formspec(name,"newplayer:editrules",form)
end
elseif formname == "newplayer:agreethanks" or formname == "newplayer:disagreewarning" then
return true
else
return false
end
end)
minetest.register_chatcommand("rules",{
@ -97,6 +159,22 @@ minetest.register_chatcommand("rules",{
}
)
minetest.register_chatcommand("editrules",{
params = "",
description = "Edit the rules",
privs = {server=true},
func = function(name)
local form = "size[8,10]"..
"label[0,0;Editing Server Rules]"..
"textarea[0.25,1;8,7;rules;;"..newplayer.rules.."]"..
"button_exit[1,9;2,1;save;Save]"..
"button_exit[5,9;2,1;quit;Cancel]"..
"field[0.25,8;8,1;keyword;Keyword\:;"..(newplayer.keyword or "").."]"
minetest.show_formspec(name,"newplayer:editrules",form)
return true
end}
)
minetest.register_chatcommand("set_no_interact_spawn",{
params = "",
description = "Set the spawn point for players without interact to your current position",
@ -105,7 +183,7 @@ minetest.register_chatcommand("set_no_interact_spawn",{
local pos = minetest.get_player_by_name(name):getpos()
minetest.setting_set("spawnpoint_no_interact",string.format("%s,%s,%s",pos.x,pos.y,pos.z))
minetest.setting_save()
minetest.chat_send_player(name,"Spawn point for players without interact set to: "..minetest.pos_to_string(pos))
return true, "Spawn point for players without interact set to: "..minetest.pos_to_string(pos)
end}
)
@ -117,7 +195,40 @@ minetest.register_chatcommand("set_interact_spawn",{
local pos = minetest.get_player_by_name(name):getpos()
minetest.setting_set("spawnpoint_interact",string.format("%s,%s,%s",pos.x,pos.y,pos.z))
minetest.setting_save()
minetest.chat_send_player(name,"Spawn point for players with interact set to: "..minetest.pos_to_string(pos))
return true, "Spawn point for players with interact set to: "..minetest.pos_to_string(pos)
end}
)
minetest.register_chatcommand("set_keyword",{
params = "[keyword]",
description = "Set the keyword used to get interact",
privs = {server=true},
func = function(name,param)
if param and param ~= "" then
newplayer.keyword = param
minetest.setting_set("interact_keyword",param)
minetest.setting_save()
return true, "Keyword set to: "..param
else
newplayer.keyword = nil
minetest.setting_set("interact_keyword","")
minetest.setting_save()
return true, "Keyword cleared."
end
end}
)
minetest.register_chatcommand("get_keyword",{
params = "",
description = "Shows the keyword used to get interact",
privs = {server=true},
func = function(name)
local kw = newplayer.keyword
if kw then
return true, "Keyword is: "..kw
else
return true, "No keyword is currently set."
end
end}
)
@ -130,18 +241,18 @@ minetest.register_chatcommand("spawn",{
if hasinteract then
local pos = minetest.setting_get_pos("spawnpoint_interact")
if pos then
minetest.chat_send_player(name,"Teleporting to spawn...")
player:setpos(pos)
return true, "Teleporting to spawn..."
else
minetest.chat_send_player(name,"ERROR: The spawn point is not set!")
return true, "ERROR: The spawn point is not set!"
end
else
local pos = minetest.setting_get_pos("spawnpoint_no_interact")
if pos then
minetest.chat_send_player(name,"Teleporting to spawn...")
player:setpos(pos)
return true, "Teleporting to spawn..."
else
minetest.chat_send_player(name,"ERROR: The spawn point is not set!")
return true, "ERROR: The spawn point is not set!"
end
end
end}