Traitor/mods/tasks/engine_1.lua

97 lines
3.5 KiB
Lua

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,
})