local formspec_good = 'size[6,3]'.. 'textarea[1,1;5,2;;;This plasma accelerator is performing at peak efficiency.]' local function formspec_bad(pos) local spos = pos.x ..','.. pos.y ..','.. pos.z local formspec = 'size[8,6]'.. 'textarea[.5,;5,2;;;Looks like something is broke.\nGet a new part from a storage locker.]' .. 'button_exit[2.5,1.5;3,1;gimme;Grab a part request form]'.. 'list[nodemeta:'..spos..';part;6,1;1,1;]'.. 'list[current_player;main;0,3;8,3;]'.. 'listring[current_player;main]'.. 'listring[nodemeta:'..spos..';part]' return formspec end minetest.register_node('tasks:engine_1_on',{ description = 'Plasma Accelerator', drawtype = 'mesh', mesh = 'tasks_engine_1.obj', tiles = {{name = 'tasks_pedestal.png'}, {name = 'tasks_engine_1_on.png'}, {name='tasks_plasma_tube_anim.png', animation = { type = 'vertical_frames', aspect_w = 32, aspect_h = 4, length = 0.5,},}, }, light_source = 13, _sound = 'tasks_engine_1_run', groups = {breakable = 1, tasks=1, plays_sound=1}, on_construct = function(pos) tasks.on_construct(pos, 'Plasma Accelerator', 'Plasma Accelerator went too fast, needs repair.') end, on_rightclick = function(pos, node, clicker) tasks.right_click_on(pos, node, clicker, formspec_good) end, on_timer = function(pos) local node = minetest.get_node(pos) local meta = minetest.get_meta(pos) local infotext = meta:get_string('info_repair') minetest.sound_play('tasks_engine_1_stop', {pos = pos, gain = 1, max_hear_distance = 5}) meta:set_string('infotext', infotext) minetest.after(5, function() minetest.swap_node(pos, {name = 'tasks:engine_1_off', param2 = node.param2}) end) end, }) minetest.register_node('tasks:engine_1_off',{ description = 'Plasma Accelerator', drawtype = 'mesh', mesh = 'tasks_engine_1.obj', tiles = {{name = 'tasks_pedestal.png'}, {name = 'tasks_engine_1_off.png'}, {name='tasks_plasma_tube.png'}, }, light_source = 2, groups = {breakable = 1, not_in_creative_inventory=1, tasks=1}, drop = 'tasks:engine_1_on', req_form = 'tasks:plasma_core_req', req_count = 4, on_rightclick = function(pos, node, clicker) tasks.right_click_off(pos, node, clicker, formspec_bad(pos)) end, allow_metadata_inventory_put = function(pos, listname, index, stack) if listname == 'part' then if stack:get_name() == 'tasks:plasma_core' then return 1 else return 0 end end end, on_metadata_inventory_put = function(pos, listname, index, stack, player) local name = player:get_player_name() local meta = minetest.get_meta(pos) local xp = meta:get_int('xp') or 1 local inv = meta:get_inventory() local node = minetest.get_node(pos) local timer = minetest.get_node_timer(pos) local min = meta:get_int('time_min') or 30 local max = meta:get_int('time_max') or 60 local random_number = math.random(min,max) local infotext = meta:get_string('info_working') inv:set_stack('part', 1, '') minetest.sound_play('tasks_engine_1_start', {pos = pos, gain = 1, max_hear_distance = 10}) minetest.swap_node(pos, {name = 'tasks:engine_1_on', param2 = node.param2}) minetest.close_formspec(name, 'tasks:part_req_form') meta:set_string('infotext', infotext) tasks.only_add_xp(xp, name) timer:start(random_number) end, })