catcommands/init.lua

327 lines
11 KiB
Lua
Raw Normal View History

2016-07-01 18:59:00 +01:00
minetest.register_privilege("secret", "Wouldn't you like to know?")
minetest.register_privilege("frozen", {description = "Unable to move.", give_to_singleplayer=false})
minetest.register_privilege("hobbled", {description = "Unable to jump.", give_to_singleplayer=false})
minetest.register_privilege("slowed", {description = "Slow moving.", give_to_singleplayer=false})
minetest.register_privilege("unglitched", {description = "Not very glitchy...", give_to_singleplayer=false})
2016-07-14 18:36:17 +01:00
minetest.register_privilege("caged", {description = "Not going anywhere...", give_to_singleplayer=false})
2016-07-03 19:50:27 +01:00
minetest.register_privilege("hidden_one", {description = "Can hide from players.", give_to_singleplayer=false})
2016-07-01 18:59:00 +01:00
2016-07-04 19:26:28 +01:00
2016-07-14 18:36:17 +01:00
2016-07-03 19:50:27 +01:00
--Admin Curses
2016-07-01 18:59:00 +01:00
--prevents player from jumping.
local function hobble(name, param)
2016-07-03 18:05:46 +01:00
local player = minetest.get_player_by_name(param)
local privs=minetest.get_player_privs(param)
privs.hobbled=true
minetest.set_player_privs(param,privs)
player:set_physics_override({jump = 0})
2016-07-01 18:59:00 +01:00
end
2016-07-03 18:05:46 +01:00
2016-07-01 18:59:00 +01:00
minetest.register_chatcommand("hobble", {
params = "<person>",
2016-07-03 18:05:46 +01:00
privs = {secret=true},
2016-07-01 18:59:00 +01:00
description = "Prevent player jumping.",
2016-07-03 18:05:46 +01:00
func = function(name, param)
local player = minetest.get_player_by_name(param)
if player == nil then
minetest.chat_send_player(name,"Player does not exist")
return
end
hobble(name,param)
minetest.chat_send_player(param, "Cursed by an admin! No more jumping!")
minetest.chat_send_player(name, "Curse successful!")
end
2016-07-01 18:59:00 +01:00
})
2016-07-14 18:36:17 +01:00
--reduces player movement speed.
2016-07-01 18:59:00 +01:00
local function slowmo(name, param)
2016-07-03 19:17:38 +01:00
local player = minetest.get_player_by_name(param)
2016-07-04 19:26:28 +01:00
local privs = minetest.get_player_privs(param)
privs.slowed = true
2016-07-03 19:17:38 +01:00
minetest.set_player_privs(param,privs)
player:set_physics_override({speed = 0.3})
2016-07-01 18:59:00 +01:00
end
2016-07-03 18:05:46 +01:00
2016-07-01 18:59:00 +01:00
minetest.register_chatcommand("slowmo", {
params = "<person>",
2016-07-03 18:05:46 +01:00
privs = {secret=true},
2016-07-01 18:59:00 +01:00
description = "Reduce player movement speed.",
2016-07-03 18:05:46 +01:00
func = function(name, param)
local player = minetest.get_player_by_name(param)
if player == nil then
minetest.chat_send_player(name,"Player does not exist")
return
end
slowmo(name,param)
minetest.chat_send_player(param, "Cursed by an admin! You feel sloooooow!")
minetest.chat_send_player(name, "Curse successful!")
end
2016-07-01 18:59:00 +01:00
})
--disable sneak glitch for the player.
local function noglitch(name, param)
2016-07-03 19:17:38 +01:00
local player = minetest.get_player_by_name(param)
local privs=minetest.get_player_privs(param)
privs.unglitched=true
minetest.set_player_privs(param,privs)
player:set_physics_override({sneak = false})
2016-07-01 18:59:00 +01:00
end
2016-07-03 18:05:46 +01:00
2016-07-01 18:59:00 +01:00
minetest.register_chatcommand("noglitch", {
params = "<person>",
2016-07-03 18:05:46 +01:00
privs = {secret=true},
2016-07-01 18:59:00 +01:00
description = "Disable sneak glitch for a player.",
2016-07-03 18:05:46 +01:00
func = function(name, param)
local player = minetest.get_player_by_name(param)
if player == nil then
minetest.chat_send_player(name,"Player does not exist")
return
end
noglitch(name, param)
minetest.chat_send_player(param, "Cursed by an admin! You feel less glitchy...")
minetest.chat_send_player(name, "Curse successful!")
end
2016-07-01 18:59:00 +01:00
})
2016-07-14 18:36:17 +01:00
--prevent player from changing speed/direction and jumping.
local function freeze(name, param)
local player = minetest.get_player_by_name(param)
local privs=minetest.get_player_privs(param)
privs.frozen=true
minetest.set_player_privs(param,privs)
player:set_physics_override({jump = 0, speed = 0})
end
minetest.register_chatcommand("freeze", {
params = "<person>",
privs = {secret=true},
description = "Prevent player movement.",
func = function(name, param)
local player = minetest.get_player_by_name(param)
if player == nil then
minetest.chat_send_player(name,"Player does not exist")
return
end
freeze(name, param)
minetest.chat_send_player(param, "Cursed by an admin! You are now frozen!")
minetest.chat_send_player(name, "Curse successful!")
end
})
2016-07-14 18:36:17 +01:00
--trigger curse effects when player joins.
minetest.register_on_joinplayer(function(player)
local name = player:get_player_name()
if minetest.get_player_privs(name).hobbled then
hobble(name,name)
end
2016-07-05 17:16:56 +01:00
if minetest.get_player_privs(name).slowed then
slowmo(name,name)
end
2016-07-05 17:16:56 +01:00
if minetest.get_player_privs(name).unglitched then
noglitch(name,name)
2016-07-05 17:16:56 +01:00
end
if minetest.get_player_privs(name).frozen then
freeze(name,name)
2016-07-05 17:16:56 +01:00
end
end)
2016-07-01 18:59:00 +01:00
--reset player physics.
minetest.register_chatcommand("setfree",{
params = "<person>",
privs = {secret=true},
2016-07-03 18:05:46 +01:00
description = "Reset player movement.",
2016-07-01 18:59:00 +01:00
func = function(name, param)
local player = minetest.get_player_by_name(param)
if player == nil then
2016-07-03 18:05:46 +01:00
minetest.chat_send_player(name,"Player does not exist")
2016-07-01 18:59:00 +01:00
return
end
local privs=minetest.get_player_privs(param)
privs.frozen=nil
privs.hobbled=nil
privs.slowed=nil
privs.unglitched=nil
minetest.set_player_privs(param,privs)
player:set_physics_override({jump = 1, speed = 1, sneak = true})
minetest.chat_send_player(param, "The curse is lifted. You have been set free!")
2016-07-05 17:18:22 +01:00
minetest.chat_send_player(name, "The curse is lifted.")
2016-07-01 18:59:00 +01:00
end,
})
2016-07-03 19:50:27 +01:00
2016-07-04 19:26:28 +01:00
--Cage Commands
2016-07-14 18:36:17 +01:00
local priv_table = {}
--save table to file.
local function table_save()
local data = priv_table
local f, err = io.open(minetest.get_worldpath() .. "/curse_priv_table.txt", "w")
if err then
return err
end
f:write(minetest.serialize(data))
f:close()
end
--read saved file.
local function table_read()
local f, err = io.open(minetest.get_worldpath() .. "/curse_priv_table.txt", "r")
local data = minetest.deserialize(f:read("*a"))
f:close()
return data
end
minetest.after(3.0, function()
local f, err = io.open(minetest.get_worldpath() .. "/curse_priv_table.txt", "r")
if err then
table_save()
else
priv_table = table_read()
end
end)
minetest.register_on_shutdown(function()
table_save()
end)
--put a player in the cage.
2016-07-04 19:26:28 +01:00
minetest.register_chatcommand("cage", {
params = "<person>",
privs = {secret=true},
description = "Put a player in the cage.",
2016-07-14 18:36:17 +01:00
func = function(warden_name, target_name)
--get target player or return.
local target = minetest.get_player_by_name(target_name)
if not target then
minetest.chat_send_player(warden_name,"Player does not exist")
2016-07-04 19:26:28 +01:00
return
end
2016-07-14 18:36:17 +01:00
--get target player's privs or return.
local privs = minetest.get_player_privs(target_name)
if privs.caged == true then
minetest.chat_send_player(warden_name,"This player is already caged")
return
end
--get cage position from config or return.
2016-07-04 19:26:28 +01:00
local cagepos = minetest.setting_get_pos("cage_coordinate")
if not cagepos then
2016-07-14 18:36:17 +01:00
minetest.chat_send_player(warden_name, "No cage set...")
return
2016-07-04 19:26:28 +01:00
end
2016-07-14 18:36:17 +01:00
--add current target privs to table and save to file.
priv_table[target_name] = privs
table_save()
--remove all privs but shout and add caged and unglitched.
minetest.set_player_privs(target_name,{shout = true, caged = true})
noglitch(warden_name, target_name)
--move target to cage location.
target:setpos(cagepos)
2016-07-04 19:26:28 +01:00
end
})
2016-07-14 18:36:17 +01:00
--free a player from the cage.
2016-07-04 19:26:28 +01:00
minetest.register_chatcommand("uncage", {
params = "<person>",
privs = {secret=true},
description = "Free a player from the cage.",
2016-07-14 18:36:17 +01:00
func = function(warden_name, target_name)
--get target player or return.
local target = minetest.get_player_by_name(target_name)
if not target then
minetest.chat_send_player(warden_name,"Player does not exist")
2016-07-04 19:26:28 +01:00
return
end
2016-07-14 18:36:17 +01:00
--get target player's privs or return.
local privs = minetest.get_player_privs(target_name)
if privs.caged ~= true then
minetest.chat_send_player(warden_name,"This player is not caged")
return
end
2016-09-20 12:35:02 +01:00
--get release position from config or return.
local releasepos = minetest.setting_get_pos("release_coordinate")
if not releasepos then
minetest.chat_send_player(warden_name, "No release point set...")
2016-07-14 18:36:17 +01:00
return
2016-07-04 19:26:28 +01:00
end
2016-07-14 18:36:17 +01:00
--get target's original privs from table and restore them.
local original_privs = priv_table[target_name]
minetest.set_player_privs(target_name,original_privs)
--remove entry for target from table and save to file.
priv_table[target_name] = nil
table_save()
2016-09-20 12:35:02 +01:00
--restore sneak and move target to release point.
2016-07-14 18:36:17 +01:00
target:set_physics_override({sneak = true})
2016-09-20 12:35:02 +01:00
target:setpos(releasepos)
2016-07-04 19:26:28 +01:00
end
})
2016-07-25 00:45:43 +01:00
-- list caged players
minetest.register_chatcommand("list_caged", {
params = "",
description = "List all caged players.",
privs = {server = true},
func = function (_, _)
local players = ""
for player, _ in pairs(priv_table) do
players = players .. player .. ", "
end
return true, "Currently caged players: " .. players
end
})
2016-07-04 19:26:28 +01:00
--Other Commands
2016-07-03 19:50:27 +01:00
2016-07-14 18:36:17 +01:00
--hide player model and nametag (only works in 0.4.14 and above).
2016-07-03 19:50:27 +01:00
vanished_players = {}
minetest.register_chatcommand("vanish", {
params = "",
description = "Make user invisible",
privs = {hidden_one = true},
func = function(name, param)
local prop
local player = minetest.get_player_by_name(name)
vanished_players[name] = not vanished_players[name]
if vanished_players[name] then
prop = {visual_size = {x = 0, y = 0},
collisionbox = {0,0,0,0,0,0}}
player:set_nametag_attributes({color = {a = 0, r = 255, g = 255, b = 255}})
else
2016-07-14 18:36:17 +01:00
-- default player size.
2016-07-03 19:50:27 +01:00
prop = {visual_size = {x = 1, y = 1},
collisionbox = {-0.35, -1, -0.35, 0.35, 1, 0.35}}
player:set_nametag_attributes({color = {a = 255, r = 255, g = 255, b = 255}})
end
player:set_properties(prop)
end
})
2016-07-14 18:36:17 +01:00
--announcements.
2016-07-25 00:40:37 +01:00
minetest.register_chatcommand("proclaim", {
2016-07-03 19:50:27 +01:00
params = "<text>",
description = "Sends text to all players",
privs = {server = true},
func = function (name, param)
if not param
or param == "" then
return
end
minetest.chat_send_all(param)
2016-07-25 00:43:17 +01:00
if minetest.get_modpath("irc") then
if irc.connected and irc.config.send_join_part then
irc:say(param)
end
end
2016-07-03 19:50:27 +01:00
end
})
2016-07-14 18:36:17 +01:00