mirror of
https://codeberg.org/AntumLuanti/mod-cleaner.git
synced 2025-03-21 15:41:22 +00:00
Add chat commands
This commit is contained in:
parent
7d5f61756e
commit
7f042330b1
4 changed files with 248 additions and 1 deletions
1
TODO.txt
1
TODO.txt
|
@ -1,6 +1,5 @@
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
- add chat commands to update cleaning in-game
|
|
||||||
- add localization support
|
- add localization support
|
||||||
- add support for unregistering/replacing ores
|
- add support for unregistering/replacing ores
|
||||||
- add "unsafe" setting for enabling unregistering ores
|
- add "unsafe" setting for enabling unregistering ores
|
||||||
|
|
|
@ -2,6 +2,12 @@
|
||||||
v1.2
|
v1.2
|
||||||
----
|
----
|
||||||
- added API
|
- added API
|
||||||
|
- added chat commands:
|
||||||
|
- remove_entity
|
||||||
|
- remove_node
|
||||||
|
- replace_item
|
||||||
|
- replace_node
|
||||||
|
- find_unknown_nodes
|
||||||
|
|
||||||
v1.1
|
v1.1
|
||||||
----
|
----
|
||||||
|
|
241
chat.lua
Normal file
241
chat.lua
Normal file
|
@ -0,0 +1,241 @@
|
||||||
|
|
||||||
|
--- Cleaner Chat Commands
|
||||||
|
--
|
||||||
|
-- @topic commands
|
||||||
|
|
||||||
|
|
||||||
|
local function pos_list(ppos, radius)
|
||||||
|
local plist = {}
|
||||||
|
|
||||||
|
for x = ppos.x - radius, ppos.x + radius, 1 do
|
||||||
|
for y = ppos.y - radius, ppos.y + radius, 1 do
|
||||||
|
for z = ppos.z - radius, ppos.z + radius, 1 do
|
||||||
|
table.insert(plist, {x=x, y=y, z=z})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return plist
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- Removes nearby entities.
|
||||||
|
--
|
||||||
|
-- @chatcmd remove_entity
|
||||||
|
-- @param entity Entity technical name.
|
||||||
|
core.register_chatcommand("remove_entity", {
|
||||||
|
privs = {server=true},
|
||||||
|
description = "Remove an entity from game.",
|
||||||
|
params = "<entity> [radius]",
|
||||||
|
func = function(name, param)
|
||||||
|
local entity
|
||||||
|
local radius = 100
|
||||||
|
if param:find(" ") then
|
||||||
|
entity = param:split(" ")
|
||||||
|
radius = tonumber(entity[2])
|
||||||
|
entity = entity[1]
|
||||||
|
else
|
||||||
|
entity = param
|
||||||
|
end
|
||||||
|
|
||||||
|
if not entity or entity:trim() == "" then
|
||||||
|
return false, "Must supply entity name."
|
||||||
|
elseif not radius then
|
||||||
|
return false, "Radius must be a number."
|
||||||
|
end
|
||||||
|
|
||||||
|
local player = core.get_player_by_name(name)
|
||||||
|
|
||||||
|
for _, object in ipairs(core.get_objects_inside_radius(player:get_pos(), radius)) do
|
||||||
|
local lent = object:get_luaentity()
|
||||||
|
|
||||||
|
if lent then
|
||||||
|
if lent.name == entity then
|
||||||
|
object:remove()
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if object:get_properties().infotext == entity then
|
||||||
|
object:remove()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
--- Removes nearby nodes.
|
||||||
|
--
|
||||||
|
-- @chatcmd remove_node
|
||||||
|
-- @param node Node technical name.
|
||||||
|
core.register_chatcommand("remove_node", {
|
||||||
|
privs = {server=true},
|
||||||
|
description = "Remove a node from game.",
|
||||||
|
params = "<node> [radius]",
|
||||||
|
func = function(name, param)
|
||||||
|
local nname
|
||||||
|
local radius = 100
|
||||||
|
if param:find(" ") then
|
||||||
|
nname = param:split(" ")
|
||||||
|
radius = tonumber(nname[2])
|
||||||
|
nname = nname[1]
|
||||||
|
else
|
||||||
|
nname = param
|
||||||
|
end
|
||||||
|
|
||||||
|
if not nname or nname:trim() == "" then
|
||||||
|
return false, "Must supply node name."
|
||||||
|
elseif not radius then
|
||||||
|
return false, "Radius must be a number."
|
||||||
|
end
|
||||||
|
|
||||||
|
local ppos = core.get_player_by_name(name):get_pos()
|
||||||
|
|
||||||
|
for _, npos in ipairs(pos_list(ppos, radius)) do
|
||||||
|
local node = core.get_node_or_nil(npos)
|
||||||
|
if node and node.name == nname then
|
||||||
|
core.remove_node(npos)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
local function replace_item(src, tgt)
|
||||||
|
if not core.registered_items[tgt] then
|
||||||
|
return false, "Cannot use unknown item \"" .. tgt .. "\" as replacement."
|
||||||
|
end
|
||||||
|
|
||||||
|
if core.registered_items[src] then
|
||||||
|
core.unregister_item(src)
|
||||||
|
end
|
||||||
|
|
||||||
|
core.register_alias(src, tgt)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Replaces an item.
|
||||||
|
--
|
||||||
|
-- FIXME: inventory icons not updated
|
||||||
|
--
|
||||||
|
-- @chatcmd replace_item
|
||||||
|
-- @param old_item Technical name of item to replace.
|
||||||
|
-- @param new_item Technical name of item to be used in place.
|
||||||
|
core.register_chatcommand("replace_item", {
|
||||||
|
privs = {server=true},
|
||||||
|
description = "Replace an item in game.",
|
||||||
|
params = "<old_item> <new_item>",
|
||||||
|
func = function(name, param)
|
||||||
|
if not param:find(" ") then
|
||||||
|
return false, "Not enough parameters."
|
||||||
|
end
|
||||||
|
|
||||||
|
local src = param:split(" ")
|
||||||
|
local tgt = src[2]
|
||||||
|
src = src[1]
|
||||||
|
|
||||||
|
local retval, msg = replace_item(src, tgt)
|
||||||
|
if not retval then
|
||||||
|
return false, msg
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
--- Replaces nearby nodes.
|
||||||
|
--
|
||||||
|
-- @chatcmd replace_item
|
||||||
|
-- @param old_node Technical name of node to replace.
|
||||||
|
-- @param new_node Technical name of node to be used in place.
|
||||||
|
core.register_chatcommand("replace_node", {
|
||||||
|
privs = {server=true},
|
||||||
|
description = "Replace a node in game.",
|
||||||
|
params = "<old_node> <new_node> [radius]",
|
||||||
|
func = function(name, param)
|
||||||
|
if not param:find(" ") then
|
||||||
|
return false, "Not enough parameters."
|
||||||
|
end
|
||||||
|
|
||||||
|
local radius = 100
|
||||||
|
local params = param:split(" ")
|
||||||
|
|
||||||
|
local src = params[1]
|
||||||
|
local tgt = tostring(params[2])
|
||||||
|
if #params > 2 then
|
||||||
|
radius = tonumber(params[3])
|
||||||
|
end
|
||||||
|
|
||||||
|
if not radius then
|
||||||
|
return false, "Radius must be a number."
|
||||||
|
end
|
||||||
|
|
||||||
|
local new_node = core.registered_nodes[tgt]
|
||||||
|
if not new_node then
|
||||||
|
return false, "Cannot use unknown node \"" .. tgt .. "\" as replacement."
|
||||||
|
end
|
||||||
|
|
||||||
|
local total_replaced = 0
|
||||||
|
local ppos = core.get_player_by_name(name):get_pos()
|
||||||
|
for _, npos in ipairs(pos_list(ppos, radius)) do
|
||||||
|
local node = core.get_node_or_nil(npos)
|
||||||
|
if node and node.name == src then
|
||||||
|
core.remove_node(npos)
|
||||||
|
core.place_node(npos, new_node)
|
||||||
|
|
||||||
|
total_replaced = total_replaced + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
core.chat_send_player(name, "Replaced " .. total_replaced .. " nodes.")
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
--- Checks for nearby unknown nodes.
|
||||||
|
--
|
||||||
|
-- @chatcmd find_unknown_nodes
|
||||||
|
-- @tparam[opt] int radius Search radius.
|
||||||
|
core.register_chatcommand("find_unknown_nodes", {
|
||||||
|
privs = {server=true},
|
||||||
|
description = "Find names of unknown nodes.",
|
||||||
|
params = "[radius]",
|
||||||
|
func = function(name, param)
|
||||||
|
if param:find(" ") then
|
||||||
|
return false, "Too many parameters."
|
||||||
|
end
|
||||||
|
|
||||||
|
local radius = 100
|
||||||
|
if param and param:trim() ~= "" then
|
||||||
|
radius = tonumber(param)
|
||||||
|
end
|
||||||
|
|
||||||
|
if not radius then
|
||||||
|
return false, "Radius must be a number."
|
||||||
|
end
|
||||||
|
|
||||||
|
local ppos = core.get_player_by_name(name):get_pos()
|
||||||
|
|
||||||
|
local checked_nodes = {}
|
||||||
|
local unknown_nodes = {}
|
||||||
|
for _, npos in ipairs(pos_list(ppos, radius)) do
|
||||||
|
local node = core.get_node_or_nil(npos)
|
||||||
|
if node and not checked_nodes[node.name] then
|
||||||
|
if not core.registered_nodes[node.name] then
|
||||||
|
table.insert(unknown_nodes, node.name)
|
||||||
|
end
|
||||||
|
|
||||||
|
checked_nodes[node.name] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if #unknown_nodes > 0 then
|
||||||
|
core.chat_send_player(name, "Found unknown nodes: " .. table.concat(unknown_nodes, ", "))
|
||||||
|
else
|
||||||
|
core.chat_send_player(name, "No unknown nodes found")
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
})
|
1
init.lua
1
init.lua
|
@ -33,6 +33,7 @@ end
|
||||||
|
|
||||||
local scripts = {
|
local scripts = {
|
||||||
"api",
|
"api",
|
||||||
|
"chat",
|
||||||
"entities",
|
"entities",
|
||||||
"nodes",
|
"nodes",
|
||||||
"items",
|
"items",
|
||||||
|
|
Loading…
Add table
Reference in a new issue