88 lines
2.7 KiB
Lua
88 lines
2.7 KiB
Lua
local box = {
|
|
type = 'fixed',
|
|
fixed = {-.4, -.5, -.4, .4, -.4, .4}, -- Right, Bottom, Back, Left, Top, Front
|
|
}
|
|
|
|
local function code_formspec_answer(pos)
|
|
local meta = minetest.get_meta(pos)
|
|
local num = math.random(800000,900000)
|
|
meta:set_string('num', num)
|
|
local formspec =
|
|
'formspec_version[3]'..
|
|
'size[12,8]'..
|
|
'label[5,3;'..num..']'
|
|
return formspec
|
|
end
|
|
|
|
local code_formspec_question =
|
|
'formspec_version[3]'..
|
|
'size[12,8]'..
|
|
'field[3,2;6,1;number;Enter the number from the previous screen;]'..
|
|
'button_exit[3,3;2,1;save;Submit]'
|
|
|
|
minetest.register_node('tasks:code_0', {
|
|
description = 'code node',
|
|
drawtype = 'mesh',
|
|
param = 'light',
|
|
paramtype2 = 'wallmounted',
|
|
mesh = 'tasks_wall_panel.obj',
|
|
tiles = {name='task_screen.png'},
|
|
groups = {breakable=1, tasks=1},
|
|
light_source = 14,
|
|
selection_box = box,
|
|
collision_box = box,
|
|
on_construct = function(pos)
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_int('time_min', 240)
|
|
meta:set_int('time_max', 600)
|
|
meta:set_int('xp', 1)
|
|
meta:set_int('level', 0)
|
|
end,
|
|
on_rightclick = function(pos, node, clicker)
|
|
local timer = minetest.get_node_timer(pos)
|
|
local meta = minetest.get_meta(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)
|
|
timer:start(random_number)
|
|
minetest.chat_send_player(clicker:get_player_name(), 'No code required now.')
|
|
end,
|
|
on_timer = function(pos)
|
|
local node = minetest.get_node(pos)
|
|
minetest.swap_node(pos, {name = 'tasks:code_1', param2 = node.param2})
|
|
end,
|
|
})
|
|
|
|
minetest.register_node('tasks:code_1', {
|
|
description = 'code node',
|
|
drawtype = 'mesh',
|
|
param = 'light',
|
|
paramtype2 = 'wallmounted',
|
|
mesh = 'tasks_wall_panel.obj',
|
|
tiles = {name='task_screen.png'},
|
|
groups = {breakable=1, not_in_creative_inventory=1, tasks=1},
|
|
light_source = 2,
|
|
selection_box = box,
|
|
collision_box = box,
|
|
drop = 'tasks:code_0',
|
|
on_rightclick = function(pos, node, clicker)
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_string('formspec', code_formspec_answer(pos))
|
|
minetest.after(2, function()
|
|
meta:set_string('formspec', code_formspec_question)
|
|
end)
|
|
end,
|
|
on_receive_fields = function(pos, formname, fields, sender)
|
|
if fields ['save'] then
|
|
local meta = minetest.get_meta(pos)
|
|
local answer = meta:get_string('num')
|
|
if answer == fields.number then
|
|
local node = minetest.get_node(pos)
|
|
tasks.add_xp(pos, node, sender, 'tasks:code_0')
|
|
else
|
|
minetest.chat_send_player(sender:get_player_name(), 'Try again!')
|
|
end
|
|
end
|
|
end,
|
|
})
|