Change file structure
Split the main code and the chatcommands out into separate files.
This commit is contained in:
parent
fa8a51b693
commit
e52a34b98a
|
@ -0,0 +1,59 @@
|
|||
--
|
||||
-- Minetest cloaking mod: chatcommands
|
||||
--
|
||||
-- © 2018 by luk3yx
|
||||
--
|
||||
|
||||
minetest.register_chatcommand("cloak", {
|
||||
params = "[victim]",
|
||||
description = "Cloak a player so they are not visible.",
|
||||
privs = {privs = true},
|
||||
func = function(player, victim)
|
||||
if not victim or victim == '' then
|
||||
victim = player
|
||||
end
|
||||
|
||||
p = cloaking.get_player_by_name(victim)
|
||||
if not p then
|
||||
return false, "Could not find a player with the name '" .. victim .. "'!"
|
||||
end
|
||||
|
||||
if cloaking.is_cloaked(victim) then
|
||||
return false, victim .. " is already cloaked!"
|
||||
end
|
||||
|
||||
cloaking.cloak(p)
|
||||
return true, "Cloaked!"
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_chatcommand("uncloak", {
|
||||
params = "[victim]",
|
||||
description = "Uncloak a player so they are visible.",
|
||||
func = function(player, victim)
|
||||
if not victim or victim == '' then
|
||||
victim = player
|
||||
elseif not minetest.get_player_privs(player).privs then
|
||||
return false, "You don't have permission to uncloak someone else."
|
||||
end
|
||||
|
||||
if victim == '*' then
|
||||
for _, player in ipairs(cloaking.get_cloaked_players()) do
|
||||
cloaking.uncloak(player)
|
||||
end
|
||||
return true, "Uncloaked everyone!"
|
||||
end
|
||||
|
||||
p = cloaking.get_player_by_name(victim)
|
||||
if not p then
|
||||
return false, "Could not find a player with the name '" .. victim .. "'!"
|
||||
end
|
||||
|
||||
if not cloaking.is_cloaked(victim) then
|
||||
return false, victim .. " is not cloaked!"
|
||||
end
|
||||
|
||||
cloaking.uncloak(p)
|
||||
return true, "Uncloaked!"
|
||||
end
|
||||
})
|
|
@ -0,0 +1,113 @@
|
|||
--
|
||||
-- Minetest player cloaking mod: Core functions
|
||||
--
|
||||
-- © 2018 by luk3yx
|
||||
--
|
||||
|
||||
cloaking = {}
|
||||
|
||||
-- Expose the real get_connected_players and get_player_by_name for mods that
|
||||
-- can use them.
|
||||
cloaking.get_connected_players = minetest.get_connected_players
|
||||
cloaking.get_player_by_name = minetest.get_player_by_name
|
||||
|
||||
local cloaked_players = {}
|
||||
|
||||
-- Override built-in functions
|
||||
minetest.get_connected_players = function()
|
||||
local a = {}
|
||||
for _, player in ipairs(cloaking.get_connected_players()) do
|
||||
if not cloaked_players[player:get_player_name()] then
|
||||
table.insert(a, player)
|
||||
end
|
||||
end
|
||||
return a
|
||||
end
|
||||
|
||||
minetest.get_player_by_name = function(player)
|
||||
if cloaked_players[player] then
|
||||
return nil
|
||||
else
|
||||
return cloaking.get_player_by_name(player)
|
||||
end
|
||||
end
|
||||
|
||||
-- Override chatcommands
|
||||
minetest.register_chatcommand("status", {
|
||||
description = "Print server status",
|
||||
func = function(name, param)
|
||||
local status = minetest.get_server_status()
|
||||
status = status:sub(1, status:find('{', 1, true))
|
||||
local players = {}
|
||||
for _, player in ipairs(minetest.get_connected_players()) do
|
||||
table.insert(players, player:get_player_name())
|
||||
end
|
||||
players = table.concat(players, ', ')
|
||||
status = status .. players .. '}'
|
||||
return true, status
|
||||
end
|
||||
})
|
||||
|
||||
-- The cloak and uncloak functions
|
||||
cloaking.cloak = function(player)
|
||||
if type(player) == "string" then
|
||||
player = cloaking.get_player_by_name(player)
|
||||
end
|
||||
victim = player:get_player_name()
|
||||
|
||||
player:set_properties({visual_size = {x = 0, y = 0}, collisionbox = {0,0,0,0,0,0}})
|
||||
p:set_nametag_attributes({text = " "})
|
||||
|
||||
cloaked_players[victim] = true
|
||||
|
||||
minetest.chat_send_all("*** " .. victim .. " left the game")
|
||||
if irc then
|
||||
irc.say("*** " .. victim .. " left the game")
|
||||
end
|
||||
end
|
||||
|
||||
cloaking.uncloak = function(player)
|
||||
if type(player) == "string" then
|
||||
player = cloaking.get_player_by_name(player)
|
||||
end
|
||||
victim = player:get_player_name()
|
||||
|
||||
player:set_properties({visual_size = {x = 1, y = 1}, collisionbox = {-0.25,-0.85,-0.25,0.25,0.85,0.25}})
|
||||
p:set_nametag_attributes({text = victim})
|
||||
|
||||
cloaked_players[victim] = false
|
||||
|
||||
minetest.chat_send_all("*** " .. victim .. " joined the game")
|
||||
if irc then
|
||||
irc.say("*** " .. victim .. " joined the game")
|
||||
end
|
||||
end
|
||||
|
||||
-- Auto-uncloaking
|
||||
local auto_uncloak = function(player)
|
||||
if type(player) ~= "string" then
|
||||
player = player:get_player_name()
|
||||
end
|
||||
if cloaked_players[player] then
|
||||
cloaking.uncloak(player)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_on_chat_message(auto_uncloak)
|
||||
minetest.register_on_leaveplayer(auto_uncloak)
|
||||
|
||||
-- API functions
|
||||
cloaking.get_cloaked_players = function()
|
||||
local players = {}
|
||||
for player, cloaked in pairs(cloaked_players) do
|
||||
if cloaked then
|
||||
table.insert(players, player)
|
||||
end
|
||||
end
|
||||
return players
|
||||
end
|
||||
|
||||
cloaking.is_cloaked = function(player)
|
||||
if type(player) ~= "string" then player = player:get_player_name() end
|
||||
return cloaked_players[player] and true or false
|
||||
end
|
137
init.lua
137
init.lua
|
@ -3,137 +3,6 @@
|
|||
--
|
||||
-- © 2018 by luk3yx
|
||||
--
|
||||
|
||||
cloaking = {}
|
||||
|
||||
-- Expose the real get_connected_players and get_player_by_name for mods that
|
||||
-- can use them.
|
||||
cloaking.get_connected_players = minetest.get_connected_players
|
||||
cloaking.get_player_by_name = minetest.get_player_by_name
|
||||
|
||||
local cloaked_players = {}
|
||||
|
||||
-- Override built-in functions
|
||||
minetest.get_connected_players = function()
|
||||
local a = {}
|
||||
for _, player in ipairs(cloaking.get_connected_players()) do
|
||||
if not cloaked_players[player:get_player_name()] then
|
||||
table.insert(a, player)
|
||||
end
|
||||
end
|
||||
return a
|
||||
end
|
||||
|
||||
minetest.get_player_by_name = function(player)
|
||||
if cloaked_players[player] then
|
||||
return nil
|
||||
else
|
||||
return cloaking.get_player_by_name(player)
|
||||
end
|
||||
end
|
||||
|
||||
-- Override chatcommands
|
||||
minetest.register_chatcommand("status", {
|
||||
description = "Print server status",
|
||||
func = function(name, param)
|
||||
local status = minetest.get_server_status()
|
||||
status = status:sub(1, status:find('{', 1, true))
|
||||
local players = {}
|
||||
for _, player in ipairs(minetest.get_connected_players()) do
|
||||
table.insert(players, player:get_player_name())
|
||||
end
|
||||
players = table.concat(players, ', ')
|
||||
status = status .. players .. '}'
|
||||
return true, status
|
||||
end
|
||||
})
|
||||
|
||||
-- The cloak and uncloak functions
|
||||
cloaking.cloak_player = function(player)
|
||||
if type(player) == "string" then
|
||||
player = cloaking.get_player_by_name(player)
|
||||
end
|
||||
victim = player:get_player_name()
|
||||
|
||||
player:set_properties({visual_size = {x = 0, y = 0}, collisionbox = {0,0,0,0,0,0}})
|
||||
p:set_nametag_attributes({text = " "})
|
||||
|
||||
cloaked_players[victim] = true
|
||||
|
||||
minetest.chat_send_all("*** " .. victim .. " left the game")
|
||||
if irc then
|
||||
irc.say("*** " .. victim .. " left the game")
|
||||
end
|
||||
end
|
||||
|
||||
cloaking.uncloak_player = function(player)
|
||||
if type(player) == "string" then
|
||||
player = cloaking.get_player_by_name(player)
|
||||
end
|
||||
victim = player:get_player_name()
|
||||
|
||||
player:set_properties({visual_size = {x = 1, y = 1}, collisionbox = {-0.25,-0.85,-0.25,0.25,0.85,0.25}})
|
||||
p:set_nametag_attributes({text = victim})
|
||||
|
||||
cloaked_players[victim] = false
|
||||
|
||||
minetest.chat_send_all("*** " .. victim .. " joined the game")
|
||||
if irc then
|
||||
irc.say("*** " .. victim .. " joined the game")
|
||||
end
|
||||
end
|
||||
|
||||
-- Auto-uncloak on chat message
|
||||
minetest.register_on_chat_message(function(name, message)
|
||||
if cloaked_players[name] then
|
||||
cloaking.uncloak_player(name)
|
||||
end
|
||||
end)
|
||||
|
||||
-- The /cloak and /uncloak commands
|
||||
minetest.register_chatcommand("cloak", {
|
||||
params = "[victim]",
|
||||
description = "Cloak a player so they are not visible.",
|
||||
privs = {privs = true},
|
||||
func = function(player, victim)
|
||||
if not victim or victim == '' then
|
||||
victim = player
|
||||
end
|
||||
|
||||
p = cloaking.get_player_by_name(victim)
|
||||
if not p then
|
||||
return false, "Could not find a player with the name '" .. victim .. "'!"
|
||||
end
|
||||
|
||||
if cloaked_players[victim] then
|
||||
return false, victim .. " is already cloaked!"
|
||||
end
|
||||
|
||||
cloaking.cloak_player(p)
|
||||
return true, "Cloaked!"
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_chatcommand("uncloak", {
|
||||
params = "[victim]",
|
||||
description = "Uncloak a player so they are visible.",
|
||||
func = function(player, victim)
|
||||
if not victim or victim == '' then
|
||||
victim = player
|
||||
elseif not minetest.get_player_privs(player).privs then
|
||||
return false, "You don't have permission to uncloak someone else."
|
||||
end
|
||||
|
||||
p = cloaking.get_player_by_name(victim)
|
||||
if not p then
|
||||
return false, "Could not find a player with the name '" .. victim .. "'!"
|
||||
end
|
||||
|
||||
if not cloaked_players[victim] then
|
||||
return false, victim .. " is not cloaked!"
|
||||
end
|
||||
|
||||
cloaking.uncloak_player(p)
|
||||
return true, "Uncloaked!"
|
||||
end
|
||||
})
|
||||
local path = minetest.get_modpath('cloaking')
|
||||
dofile(path .. '/core.lua')
|
||||
dofile(path .. '/chatcommands.lua')
|
||||
|
|
Loading…
Reference in New Issue