new command self.remove(), updated help

master
rnd1 2016-11-15 08:24:22 +01:00
parent 082eecf618
commit 1eb0b66cac
1 changed files with 84 additions and 8 deletions

View File

@ -6,7 +6,7 @@ basic_robot.call_limit = 32; -- how many execution calls per script execution al
basic_robot.bad_inventory_blocks = {
["craft_guide:sign_wall"] = true,
}
basic_robot.version = "11/14a";
basic_robot.data = {};
@ -95,6 +95,11 @@ function getSandboxEnv (name)
end
end,
remove = function()
basic_robot.data[name].obj:remove();
basic_robot.data[name].obj=nil;
end,
spam = function (mode) -- allow more than one msg per "say"
if mode == 1 then
basic_robot.data[name].allow_spam = true
@ -670,17 +675,20 @@ local on_receive_robot_form = function(pos, formname, fields, sender)
"**BOOKS/CODE\nbook.read(i) returns contents of book at i-th position in library \nbook.write(i,text) writes book at i-th position\n"..
"code.set(text) replaces current bytecode of robot\n"..
"find_nodes(\"default:dirt\",3) is true if node can be found at radius 3 around robot, otherwise false\n"..
"**PLAYERS\n"..
"find_player(3) finds player and returns his name in radius 3 around robot, if not returns false\n"..
"attack(target) attempts to attack target player if nearby \n"..
"self.pos() returns table {x=pos.x,y=pos.y,z=pos.z}\n"..
"self.spawnpos() returns position of spawner block\n"..
"self.viewdir() returns vector of view for robot\n"..
"player.getpos(name) return position of player, player.connected() returns list of players\n"..
"**ROBOT\n"..
"say(\"hello\") will speak\n"..
"self.listen(mode) (de)attaches chat listener to robot\n"..
"listen_msg() retrieves last chat message if robot listens\n"..
"player.getpos(name) return position of player, player.connected() returns list of players\n"..
"fire = function(speed, pitch,gravity) fires a projectile from robot\n"..
"say(\"hello\") will speak";
"self.pos() returns table {x=pos.x,y=pos.y,z=pos.z}\n"..
"self.spam(1) enable message repeat to all\n"..
"self.remove() removes robot\n"..
"self.spawnpos() returns position of spawner block\n"..
"self.viewdir() returns vector of view for robot\n"..
"fire = function(speed, pitch,gravity) fires a projectile from robot\n";
text = minetest.formspec_escape(text);
@ -744,8 +752,23 @@ minetest.register_on_player_receive_fields(
if minetest.is_protected(pos, player:get_player_name()) and not privs.privs then return 0 end
on_receive_robot_form(pos,formname, fields, sender)
return
end
end
local robot_formname = "robot_control_";
if string.find(formname,robot_formname) then
local name = string.sub(formname, string.len(robot_formname)+1);
local sender = minetest.get_player_by_name(name); if not sender then return end
if fields.OK and fields.code then
local item = sender:get_wielded_item(); --set_wielded_item(item)
item:set_metadata(fields.code);
sender:set_wielded_item(item);
end
return
end
end
)
@ -818,6 +841,59 @@ minetest.register_node("basic_robot:spawner", {
})
-- remote control
minetest.register_craftitem("basic_robot:control", {
description = "Robot remote control",
inventory_image = "control.png",
groups = {book = 1, not_in_creative_inventory = 1},
stack_max = 1,
on_use = function(itemstack, user, pointed_thing)
local name = user:get_player_name();
if user:get_player_control().sneak then
local code = minetest.formspec_escape(itemstack:get_metadata());
local form =
"size[9.5,1]" .. -- width, height
"textarea[1.25,-0.25;8.75,3;code;;".. code.."]"..
"button_exit[-0.25,-0.25;1.25,1;OK;SAVE]";
minetest.show_formspec(name, "robot_control_" .. name, form);
return
end
if basic_robot.data[name] and basic_robot.data[name].sandbox then
else
minetest.chat_send_player(name, "#remote control: your robot must be running");
return
end
script = itemstack:get_metadata();
local ScriptFunc, CompileError = loadstring( script )
if CompileError then
minetest.chat_send_player(name, "#remote control: compile error " .. CompileError )
return
end
setfenv( ScriptFunc, basic_robot.data[name].sandbox )
local Result, RuntimeError = pcall( ScriptFunc );
if RuntimeError then
minetest.chat_send_player(name, "#remote control: run error " .. RuntimeError )
return
end
end,
})
minetest.register_craft({
output = "basic_robot:control",
recipe = {
{"default:stick"},
{"default:mese_crystal"}
}
})
minetest.register_craft({
output = "basic_robot:spawner",