Posted: Sun Apr 07, 2013 13:45
Thank you kaeza. It's working.
The official Minetest discussion board
https://forum.minetest.net/
Code: Select all
on_construct = function(pos)
local meta = minetest.env:get_meta(pos)
meta:set_string("formspec",
"size[8,9]"..
"list[nodemeta:"..meta:get_int("x")..","..meta:get_int("y")..","..meta:get_int("z")..";source;0,0;8,4;]"..
"list[current_player;main;0,5;8,4;]")
meta:set_string("infotext", "Stockpile")
--I'm not sure which list I'm supposed to set to get this to work
end,
Code: Select all
local i = next(0,100)
Code: Select all
my_random_number = math.random(10, 100)
Evergreen wrote:Hi, I'm back to this topic again. I'm making quartz from minecraft, and I want to know how to register ores, and how to make it as rare as iron. Also, I wanted to know what license the textures from minecraft are under.
Code: Select all
local function placeNode(pos)
local n = minetest.env:get_node(pos).name
if (n == "air") then
minetest.env:add_node(pos, {name="forcefield:forcefield"})
end
end
local function placeCubicShell(pos, sideLen)
local s = math.floor(sideLen/2)
for dx = -s, s do
for dy = -s, s do
placeNode({ x = pos.x + dx, y = pos.y + dy, z = pos.z - s })
placeNode({ x = pos.x + dx, y = pos.y + dy, z = pos.z + s })
end
end
for dy = -s, s do
for dz = -s, s do
placeNode({ x = pos.x - s, y = pos.y + dy, z = pos.z + dz })
placeNode({ x = pos.x + s, y = pos.y + dy, z = pos.z + dz })
end
end
for dz = -s, s do
for dx = -s, s do
placeNode({ x = pos.x + dx, y = pos.y - s, z = pos.z + dz })
placeNode({ x = pos.x + dx, y = pos.y + s, z = pos.z + dz })
end
end
end
local function removeNode(pos)
local n = minetest.env:get_node(pos).name
if (n == "forcefield:forcefield") then
minetest.env:add_node(pos, {name="air"})
end
end
local function removeCubicShell(pos, sideLen)
local s = math.floor(sideLen/2)
for dx = -s, s do
for dy = -s, s do
removeNode({ x = pos.x + dx, y = pos.y + dy, z = pos.z - s })
removeNode({ x = pos.x + dx, y = pos.y + dy, z = pos.z + s })
end
end
for dy = -s, s do
for dz = -s, s do
removeNode({ x = pos.x - s, y = pos.y + dy, z = pos.z + dz })
removeNode({ x = pos.x + s, y = pos.y + dy, z = pos.z + dz })
end
end
for dz = -s, s do
for dx = -s, s do
removeNode({ x = pos.x + dx, y = pos.y - s, z = pos.z + dz })
removeNode({ x = pos.x + dx, y = pos.y + s, z = pos.z + dz })
end
end
end
minetest.register_node("forcefield:forcefield", {
tiles = {"forcefield_forcefield.png"},
drawtype = glasslike,
sunlight_propagates = true,
walkable = true,
diggable = false,
damage_per_second = 4,
on_punch = function(pos, node, puncher)
punch = 1
end,
on_construct = function(pos)
fpos = minetest.env:find_node_near(pos, 10, "forcefield:fmaker")
local meta1 = minetest.env:get_meta(pos)
local meta2 = minetest.env:get_meta(fpos)
local fgen = 1
end,
})
minetest.register_abm({
nodenames = {"forcefield:forcefield"},
interval = 1,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
if minetest.env:find_node_near(pos, 6, "forcefield:fmaker") == nil then
minetest.env:add_node(pos, {name="air"})
end
end,
})
default.forcefield_formspec =
"size[8,9]"..
"list[current_name;coal;2,1;6,3;]"..
"list[current_player;main;0,5;8,4;]"..
"field[0,3;2,1;range;range;4]"..
"button_exit[0,1;2,1;exit;exit]"
minetest.register_node("forcefield:fmaker", {
description = "Forcefield Generator",
tiles = {"forcefield_sides.png","forcefield_sides.png","forcefield_front.png","forcefield_sides.png","forcefield_sides.png","forcefield_sides.png"},
groups = {snappy=2, choppy=2},
after_place_node = function(pos, placer)
local meta = minetest.env:get_meta(pos)
if fgens then
table.insert (fgens , 0)
meta:set_string("fgen", table.getn (fgens) )
else
fgens = {0}
table.insert (fgens , 0)
meta:set_string("fgen", table.getn (fgens))
end
meta:set_string("owner", placer:get_player_name() or "")
meta:set_string("infotext", "Locked Chest (owned by "..meta:get_string("owner").." #"..meta:get_string("fgen")..")")
end,
on_construct = function(pos)
local meta = minetest.env:get_meta(pos)
meta:set_string("formspec", default.forcefield_formspec)
meta:set_string("infotext", "forcefield generator")
local inv = meta:get_inventory()
inv:set_size("coal", 18)
end,
can_dig = function(pos,player)
local meta = minetest.env:get_meta(pos);
local inv = meta:get_inventory()
if not inv:is_empty("coal", 18) then
return false
end
return true
end,
})
minetest.register_abm({
nodenames = {"forcefield:fmaker"},
interval = 1,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
local meta = minetest.env:get_meta(pos)
local inv = meta:get_inventory()
local coallist = inv:get_list("coal")
if inv:contains_item("coal", "default:coal_lump") then
coalstack = inv:get_stack("coal", 1)
coalstack:take_item()
inv:set_stack("coal", 1, coalstack)
placeCubicShell(pos, 10)
else
removeCubicShell(pos, 10)
end
if fgens[meta:get_string("fgen")] >= 1 then
coalstack = inv:get_stack("coal", 1)
coalstack:take_item()
inv:set_stack("coal", 1, coalstack)
fgens[meta:get_string("fgen")] = 0
end
end,
})
minetest.register_craft({
output = 'forcefield:fmaker',
recipe = {
{'default:mese', 'default:mese', 'default:mese'},
{'default:mese', 'default:furnace', 'default:mese'},
{'default:mese', 'default:mese', 'default:mese'},
}
})
Code: Select all
coalstack = inv:get_stack("coal", 1)
coalstack:take_item()
inv:set_stack("coal", 1, coalstack)
how?Traxie21 wrote:write it to a file^
Code: Select all
local player = user
local function timer(player, str)
if cntdown < 1 then
user:hud_remove(0)
user:hud_remove(1)
user:hud_remove(2)
user:hud_remove(3)
else
cntdown = cntdown-1
length1 = cntdown+str:len()
player:hud_change(0, number, length1*2+1)
local tbl = {player, str}
minetest.after(1, function(param)
timer(param.player, param.str)
end, tbl)
end
end
timer(user, iname)
so where is cntdown initialized?Traxie21 wrote:I could use some help with a timer for a HUD. I need to be able to remove one thing each second,
but I always get ERROR: Nil value, with no code indicator or anything. All variables seem valid.
HELP!
Code: Select all
local player = user local function timer(player, str) if cntdown < 1 then user:hud_remove(0) user:hud_remove(1) user:hud_remove(2) user:hud_remove(3) else cntdown = cntdown-1 length1 = cntdown+str:len() player:hud_change(0, number, length1*2+1) local tbl = {player, str} minetest.after(1, function(param) timer(param.player, param.str) end, tbl) end end timer(user, iname)
Untested:ch98 wrote:how?Traxie21 wrote:write it to a file^
Code: Select all
function save(mytable, filename)
file, error = io.open(filename, "w")
if error then return error end
file:write(minetest.serialize(mytable))
file:close()
end
function load(filename)
file, error = io.open(filename, "r")
if error then return error end
local mytable = minetest.deserialize(file:read("*a"))
file:close()
return mytable
end
Traxie21 wrote:I could use some help with a timer for a HUD. I need to be able to remove one thing each second,
but I always get ERROR: Nil value, with no code indicator or anything. All variables seem valid.
HELP!
Code: Select all
local max = 8 --max items to remove
local function timer(cnt, player)
if cnt <= max then
minetest.chat_send_all("remove hud item " .. cnt.. " from " ..player:get_player_name()) --removing
minetest.after(1, timer, cnt+1, player)
else
minetest.chat_send_all("all " ..max.. "items are removed. now do want ever you want :P")
end
end
Code: Select all
timer(0, player) --or another number
Shadow wrote:Untested:ch98 wrote:how?Traxie21 wrote:write it to a file^Edit: added arguments, avoided overwriting the Lua "table" table.Code: Select all
function save(mytable, filename) file, error = io.open(filename, "w") if error then return error end file:write(minetest.serialize(mytable)) file:close() end function load(filename) file, error = io.open(filename, "r") if error then return error end local mytable = minetest.deserialize(file:read("*a")) file:close() return mytable end