Code reworked, Command-Pattern, dynamic Helpsystem added.

master
A.C.M 2020-03-23 01:02:26 +01:00
parent 50cbf968c0
commit 579bd03b63
7 changed files with 430 additions and 17 deletions

44
cmd_help.lua Normal file
View File

@ -0,0 +1,44 @@
prospector.register_help({
Name = "help",
Usage = ".prs help <> | <command>",
Description = "Helpsystem for the Prospector.",
Parameter = "<> | <command>" .. prospector.green .. "." ..
"\n" .. prospector.orange .. "<>" ..
prospector.green.. " - Shows you the entire help for prospector." ..
"\n" .. prospector.orange .. "<command>" ..
prospector.green .. " - Shows you the help for the prospector-command."
})
prospector["help"] = function(parameter)
if(parameter[2] == nil or parameter[2] == "") then
prospector.print(prospector.green .. "Commands for the Prospector " .. prospector.orange ..
prospector.version .. "." .. prospector.revision .. prospector.green .. ".")
for _,value in pairs(prospector.helpsystem) do
prospector.print(prospector.yellow .. "---------------")
prospector.print(prospector.green .. "Name: " .. prospector.orange .. value.Name)
prospector.print(prospector.green .. "Description: " .. prospector.yellow .. value.Description)
prospector.print(prospector.green .. "Usage: " .. prospector.orange .. value.Usage)
prospector.print(prospector.green .. "Parameter: " .. prospector.orange .. value.Parameter)
end -- for _,value
prospector.print(prospector.yellow .. "---------------")
else
if(prospector.helpsystem[parameter[2]] ~= nil) then
prospector.print(prospector.green .. "Name: " .. prospector.orange ..
prospector.helpsystem[parameter[2]].Name)
prospector.print(prospector.green .. "Description: " .. prospector.yellow ..
prospector.helpsystem[parameter[2]].Description)
prospector.print(prospector.green .. "Usage: " .. prospector.orange ..
prospector.helpsystem[parameter[2]].Usage)
prospector.print(prospector.green .. "Parameter: " .. prospector.orange ..
prospector.helpsystem[parameter[2]].Parameter)
else
prospector.print(prospector.red .. "No entry in help for command <" ..
prospector.orange .. parameter[2] .. prospector.red .. "> found.")
end -- if(prospector.help[parameter[2
end -- if(parameter[2]
end -- function help

66
cmd_lastpos.lua Normal file
View File

@ -0,0 +1,66 @@
prospector.register_help({
Name = "lastpos",
Usage = ".prs lastpos <> | -s",
Description = "Shows or sends the last Position to Distancer.",
Parameter = "<> | -s" .. prospector.green .. "." ..
"\n" .. prospector.orange .. "<>" ..
prospector.green.. " - Shows the last Position." ..
"\n" .. prospector.orange .. "-s" ..
prospector.green .. " - Sends the last Position to Distancer's Waypoint."
}
)
prospector["lastpos"] = function(cmd)
if(cmd[2] == nil or cmd[2] == "") then
if(prospector.last_pos ~= "") then
prospector.print(prospector.green .. "The last found was at: " ..
prospector.orange .. prospector.last_pos ..
prospector.green .. ".\n")
prospector.print(prospector.green .. "This is "..
prospector.yellow .. prospector.calc_distance() ..
prospector.green .. " Nodes far away.\n")
else
prospector.print(prospector.red .. "There is no last Found set.\n")
end -- if(prospector.last_pos ~= nil
elseif(cmd[2] == "-s") then -- Sends the last Position to distancer
local version = ver + (dst.rev / 10)
if(version >= 2.7) then
local mylastpos = prospector.last_pos
if(mylastpos == "") then
mylastpos = "0,0,0"
end -- if(mylastpos ==
dst.send_pos(minetest.localplayer:get_name(), mylastpos)
else
prospector.print(prospector.orange .. "No Distancer found or Version < 2.7.\n")
end -- if(dst.ver
--[[
if(prospector.distancer_channel ~= nil) then
if(prospector.distancer_channel:is_writeable()) then
prospector.distancer_channel:send_all("POS:" .. prospector.last_pos)
prospector.print(prospector.green .. "Position: " ..
prospector.orange .. prospector.last_pos .. prospector.green .. " send to Distancer.\n")
else
prospector.print(prospector.red .. "Modchannel not writeable.\n")
end -- if(prospector.distancer_channel:is_writeable
else
prospector.print(prospector.red .. "No Modchannel open.\n")
prospector.distancer_channel = minetest.mod_channel_join(prospector.distancer_channelname)
end -- if(prospector.distancer_channel
]]--
end -- if(command[1]
end -- prospector.pnode_lastpos

64
cmd_list.lua Normal file
View File

@ -0,0 +1,64 @@
prospector.register_help({
Name = "lastpos",
Usage = ".prs lastpos <> | -s",
Description = "Shows you a list of all successfully found Nodes.",
Parameter = "<> | <searchpattern>" .. prospector.green .. "." ..
"\n" .. prospector.orange .. "<>" ..
prospector.green.. " - Shows you the entire Nodelist with Index." ..
"\n" .. prospector.orange .. "<searchpattern>" ..
prospector.green .. " - Shows you a filtered Nodelist of <searchpattern> with Index."
}
)
prospector["list"] = function(pattern)
if(pattern[2] == "" or pattern[2] == nil) then
prospector.print(prospector.green .. "Show the Nodelist:\n")
if(prospector.pnodelist ~= nil) then
for idx,entry in pairs(prospector.pnodelist)
do
prospector.print(prospector.yellow .. idx .. ": " ..
prospector.orange .. entry .. prospector.green .."\n")
end -- for _,key
else
prospector.print(prospector.red .. "Empty Nodelist.")
return
end -- if(prospector.pnodelist ~= nil
else
prospector.print(prospector.green .. "Show the Nodelist only with: " ..
prospector.orange .. pattern .. prospector.green .. ".\n")
local count = 0
if(prospector.pnodelist ~= nil) then
for idx,entry in ipairs(prospector.pnodelist)
do
local hit = string.find(entry, pattern)
if(hit ~= nil) then
prospector.print(prospector.yellow .. idx .. prospector.green .. ": " ..
prospector.orange .. entry .. prospector.green .."\n")
count = count + 1
end
end -- for _,key
else
prospector.print(prospector.red .. "Empty Nodelist.")
return
end
if(count > 0) then
prospector.print(prospector.green .. "Found " .. prospector.yellow .. count ..
prospector.green .. " Nodes.\n")
else
prospector.print(prospector.light_red .. "No Nodes found.\n")
end -- if(count >
end -- if(pattern == ""
end -- function(show_nodelist

48
cmd_radius.lua Normal file
View File

@ -0,0 +1,48 @@
prospector.register_help({
Name = "radius",
Usage = ".prs radius <> | <radius>",
Description = "Set's or shows you the the Radius for the command .search_for.",
Parameter = "<> | <radius>" .. prospector.green .. "." ..
"\n" .. prospector.orange .. "<>" ..
prospector.green.. " - Shows you the current Radius." ..
"\n" .. prospector.orange .. "<radius>" ..
prospector.green .. " - set's a new valid Radius."
}
)
prospector["radius"] = function(cmd)
if(cmd[2] == nil or cmd[2] == "") then
if(prospector.searchRadius ~= nil or prospector.searchRadius ~= "") then
prospector.print(prospector.green .. "Current Radius is set to: " ..
prospector.orange .. prospector.searchRadius ..
prospector.green .. ".\n")
return
else
prospector.print(prospector.red .. "Illegal Radiusnumber set. Set a new Number.\n")
return
end -- if(prospector.searchRadius ~= nil
end -- if(cmd == nil
local radius = tonumber(cmd[3]:trim())
prospector.print(prospector.green .. " Current Radius = " ..
prospector.orange .. prospector.searchRadius ..
prospector.green .. ".\n")
prospector.print(prospector.green .. " Max Radius = " ..
prospector.red .. prospector.maxRadius ..
prospector.green .. ".\n")
if(radius ~= nil and radius > 0 and radius <= prospector.maxRadius) then
prospector.searchRadius = radius
prospector.print(prospector.green .. " New Radius set to " ..
prospector.yellow .. prospector.searchRadius ..
prospector.green ..".\n")
else
prospector.print(prospector.red .. "Illegal Radiusnumber.\n")
end -- if(radius ~= nil
end -- prospector.pnode_setradius

56
cmd_search.lua Normal file
View File

@ -0,0 +1,56 @@
prospector.register_help({
Name = "search",
Usage = ".prs search <> | <Node> | <-i> index",
Description = "Shows you the given Node in a Radius of <.set_radius>.",
Parameter = "<> | <Node> | <-i> index" .. prospector.green .. "." ..
"\n" .. prospector.orange .. "<>" ..
prospector.green.. " - searches for a certain node, set with set_node." ..
"\n" .. prospector.orange .. "<Node>" ..
prospector.green .. " - search for <Node>." ..
"\n" .. prospector.orange .. "<-i> index" ..
prospector.green .. " - searches for Node with the Indexnumber in the Nodelist."
})
function prospector.pnode_search(cmd)
if(cmd[2] == "" or cmd[2] == nil) then
if(prospector.current_Node == "" or prospector.current_Node == nil) then
prospector.print(prospector.green .. "There is no searching Node set. Use command set_node <Nodename>.\n")
return
else
prospector.search_node(prospector.current_Node)
return
end --if(prospector.current_Node
end
if(cmd[2] == "-i") then -- command Index found
local idx = tonumber(cmd[3])
if(idx ~= nil) then -- valid Index
local node = prospector.pnodelist[idx]
if(node ~= nil or node ~= "") then -- valid Node found
prospector.search_node(node)
return
else
prospector.print(prospector.red .. "No Node found at Index " ..
prospector.yellow .. idx ..
prospector.red .. ".\n")
return
end -- if( node ~=
else
prospector.print(prospector.red .. "Invalid Indexnumber.\n")
return
end --(if(idx ~=
end -- if(command[1]
-- Param isn't empty and not the Command -i, so it's a Node
prospector.search_node(cmd[2])
end -- prospector.pnode_search

52
cmd_set.lua Normal file
View File

@ -0,0 +1,52 @@
prospector.register_help({
Name = "set",
Usage = ".prs set <> | <Node> | <-i> index",
Description = "Set's a new Node for search.",
Parameter = "<> | <Node> | <-i> index" .. prospector.green .. "." ..
"\n" .. prospector.orange .. "<>" ..
prospector.green.. " - shows the current Node for search." ..
"\n" .. prospector.orange .. "<Node>" ..
prospector.green .. " - set's a new Node." ..
"\n" .. prospector.orange .. "<-i> index" ..
prospector.green .. " - set's a new Node for search from the Nodelist with the Indexnumber."
}
)
prospector["set"]= function(cmd)
-- No Node or Index given
if(command[2] == nil or command[2] == "") then
prospector.set_node("")
return
end -- if(command[1] == nil
-- Command Index found
if(command[2] == "-i") then
local idx = tonumber(command[3])
if(idx ~= nil) then
local node = prospector.pnodelist[idx]
if(node ~= nil or node ~= "") then
prospector.set_node(node)
return
else -- No Node at this Index found.
prospector.print(prospector.red .. "Wrong Indexnumber.\n")
return
end -- if(node ~= nil
else -- Illegal Index found, should not happen
prospector.print(prospector.red .. "Illegal Indexnumber entered.")
return
end -- if(idx ~nil)
end -- if(command[1]
-- No empty Param, no Index found, so it's a Node and set it
prospector.set_node(command[2])
end -- prospector.pnode_set

117
init.lua
View File

@ -7,13 +7,12 @@
****************************************************************
--]]
local prospector = {}
prospector = {}
prospector.modname = "Prospector"
prospector.version = 2
prospector.revision = 4
prospector.version = 3
prospector.revision = 0
prospector.you = nil -- Player
prospector.searchRadius = 100
prospector.maxRadius = 300
prospector.current_Node = ""
@ -41,12 +40,70 @@ prospector.light_red = minetest.get_color_escape_sequence('#FF8888')
prospector.display_chat_message = minetest.display_chat_message
prospector.helpsystem = {}
--[[
****************************************************************
******* Functions for Prospector ******
****************************************************************
--]]
--[[
****************************************************************
******* Function check(command) ******
****************************************************************
Check if the command is valid
--]]
function prospector.check(cmd)
if(cmd ~= nil and cmd[1] ~= nil) then
if(prospector[cmd[1]] ~= nil) then
-- Command is valid, execute it with parameter
prospector[cmd[1]](cmd)
else -- A command is given, but
-- Command not found, report it.
if(cmd[1] ~= nil) then
prospector.print(prospector.red .. "Prospector: Unknown Command \n" ..
prospector.orange .. cmd[1] .. prospector.red .. "\n.")
else
if(prospector["help"]) then
prospector["help"]()
else
prospector.print(prospector.red .. "Unknown Command. No helpsystem available.")
end --if(prospector["help"]
end -- if(cmd[1]
end -- if(prospector[cmd[1
else
prospector.print(prospector.red .. "No Command for Prospector given.")
prospector.print(prospector.red .. "Try .prs help.")
end -- if(not cmd)
end -- function prospector.check(cmd
--[[
****************************************************************
******* Function register_help() ******
****************************************************************
Registers a new Entry in the Helpsystem for an Command.
]]--
function prospector.register_help(entry)
prospector.helpsystem[entry.Name] = {
Name = entry.Name,
Usage = entry.Usage,
Description = entry.Description,
Parameter = entry.Parameter
}
end
--[[
function prospector.show_nodelist(pattern)
if(pattern == "") then
prospector.print(prospector.green .. "Show the Nodelist:\n")
@ -98,6 +155,7 @@ function prospector.show_nodelist(pattern)
end -- if(pattern == ""
end -- function(show_nodelist
]]--
function prospector.check_node(node)
if(prospector.pnodelist ~= nil) then
@ -143,13 +201,8 @@ function prospector.search_node(node)
prospector.print(prospector.green .. " No Nodename given!\n")
else
if(prospector.you == nil) then -- Don't know why, but sometimes there is no localplayer registered at start.
prospector.you = minetest.localplayer
end -- if(prospector.you
prospector.print(prospector.green .. "Searching for " .. prospector.yellow .. node .. prospector.green .. ".\n")
local nodes = find_node(prospector.you:get_pos(), prospector.searchRadius, node)
local nodes = find_node(minetest.localplayer:get_pos(), prospector.searchRadius, node)
if(nodes ~= nil) then
prospector.print(prospector.green .. "Found at ".. prospector.orange .. pos_to_string(nodes) ..
@ -171,7 +224,7 @@ function prospector.search_node(node)
end -- function search_node()
function prospector.calc_distance()
return math.floor(vector.distance(prospector.you:get_pos(), string_to_pos(prospector.last_pos)))
return math.floor(vector.distance(minetest.localplayer:get_pos(), string_to_pos(prospector.last_pos)))
end -- function calc_distance
@ -257,6 +310,8 @@ function prospector.convert_position(pos)
return nil
end -- function convert_position
--[[
function prospector.pnode_lastpos(cmd)
local command = prospector.split(cmd)
if(command[1] == nil or command[1] == "") then
@ -281,14 +336,13 @@ function prospector.pnode_lastpos(cmd)
end -- if(mylastpos ==
dst.send_pos(prospector.you:get_name(), mylastpos)
dst.send_pos(minetest.localplayer:get_name(), mylastpos)
else
prospector.print(prospector.orange .. "No Distancer found or Version < 2.7.\n")
end -- if(dst.ver
--[[
if(prospector.distancer_channel ~= nil) then
if(prospector.distancer_channel:is_writeable()) then
prospector.distancer_channel:send_all("POS:" .. prospector.last_pos)
@ -305,7 +359,6 @@ function prospector.pnode_lastpos(cmd)
prospector.distancer_channel = minetest.mod_channel_join(prospector.distancer_channelname)
end -- if(prospector.distancer_channel
]]--
end -- if(command[1]
@ -355,6 +408,7 @@ function prospector.pnode_search(cmd)
end -- prospector.pnode_search
function prospector.pnode_setradius(cmd)
if(cmd == nil or cmd == "") then
if(prospector.searchRadius ~= nil or prospector.searchRadius ~= "") then
@ -429,6 +483,7 @@ function prospector.pnode_set(cmd)
prospector.set_node(command[1])
end -- prospector.pnode_set
]]--
function prospector.show_version()
print("[CSM-MOD]" .. prospector.modname .. " v " ..
@ -495,6 +550,7 @@ end -- distancer.handle_message
****************************************************************
--]]
--[[
minetest.register_chatcommand("pnode_lastpos", {
params = "<> | -s",
@ -510,6 +566,7 @@ minetest.register_chatcommand("pnode_lastpos", {
}) -- chatcommand prospector_last_pos
minetest.register_chatcommand("pnode_list", {
params = "<> | <searchpattern>",
@ -572,6 +629,28 @@ minetest.register_chatcommand("pnode_set", {
end -- func
}) -- chatcommand prospector_set_node
]]--
--[[
****************************************************************
******* Registered Chatcommands ******
****************************************************************
--]]
minetest.register_chatcommand("prs",{
param = "<command> <parameter>",
description = "Gives the Prospector a command with or without Parameter.\n",
func = function(cmd)
if(cmd.type == "string") then
cmd = cmd:lower()
end
local command = prospector.split(cmd)
prospector.check(command)
end -- function
}) -- minetest.register_chatcommand("dis
--[[
@ -580,9 +659,6 @@ minetest.register_chatcommand("pnode_set", {
****************************************************************
--]]
-- Get yourself
prospector.you = minetest.localplayer
prospector.nodestring = prospector.storage:get_string("nodes") -- Get the Nodelist as String
if(prospector.nodestring ~= nil) then
prospector.pnodelist = minetest.deserialize(prospector.nodestring) -- and write it to the list.
@ -627,4 +703,11 @@ minetest.after(5, function()
)
]]--
dofile("prospector:cmd_help.lua")
dofile("prospector:cmd_lastpos.lua")
dofile("prospector:cmd_list.lua")
dofile("prospector:cmd_search.lua")
dofile("prospector:cmd_radius.lua")
dofile("prospector:cmd_set.lua")
prospector.show_version()