Traitor/mods/tasks/example.lua

86 lines
3.0 KiB
Lua

--This is provided as a super basic example of a task that only needs to be punched to gain XP.
minetest.register_node('tasks:example_0', { --This node is inactive, so somebody completed the task.
description = 'example',
tiles = {'task_1.png'},
groups = {breakable=1, not_in_creative_inventory=1, tasks=1},
light_source = 14,
on_construct = function(pos)
tasks.on_construct(pos, 'Sample', 'Please don\'t use me')
end,
on_timer = function(pos)
local this_node = minetest.get_node(pos)
minetest.swap_node(pos, {name = 'tasks:example_1', param2 = this_node.param2})
end,
on_punch = function(pos)
local meta = minetest.get_meta(pos)
local time_min = meta:get_int('time_min') or 60
local time_max = meta:get_int('time_max') or 120
local timer = minetest.get_node_timer(pos)
local random_number = math.random(time_min, time_max)
timer:start(random_number*2)
end,
})
minetest.register_node('tasks:example_1', { --This node is waiting for somebody to come along and complete the task.
description = 'example',
tiles = {'task_1.png'},
groups = {breakable=1, not_in_creative_inventory=1, tasks=1},
light_source = 2,
drop = 'tasks:example_0',
on_punch = function(pos, node, puncher, pointed_thing)
tasks.add_xp(pos, node, puncher, 'tasks:example_0') --Everything is pulled from the node meta expect for what node to swap to.
end
})
local function math_clamp(val, lower, upper)
return math.max(lower, math.min(upper, val))
end
tasks.test = {}
local function test_formspec(name, pos, x, y)
x = math_clamp((x + math.random(-4,4)/10), 0, 9)
y = math_clamp((y + math.random(-4,4)/10), 0, 6)
--y = y - .2
local formspec =
'formspec_version[3]'..
'size[10,7]'..
'textarea[1,.5;8,1;;;Eww, something smells rotten! (Click the rotten food.)]'..
'image[1,1;8,5;tasks_food_crate_apples.png]'..
'image_button['..x..','..y..';1,1;tasks_food_crate_apple_rotten.png;rotten;;true;false;]'
minetest.show_formspec(name, 'tasks:test', formspec)
minetest.after(.2, function()
if y < 0 then
minetest.close_formspec(name, 'tasks:test')
tasks.test[name] = 'false'
end
if tasks.test[name] == 'true' then
test_formspec(name, pos, x, y)
end
end)
end
minetest.register_node('tasks:test', {
description = 'testing',
tiles = {'heart.png'},
groups = {breakable=1, not_in_creative_inventory=1, tasks=1},
on_rightclick = function(pos, node, clicker)
local name = clicker:get_player_name()
tasks.test[name] = 'true'
test_formspec(name, pos, 5, 3.5)
end,
})
minetest.register_on_player_receive_fields(function(player, formname, fields)
local name = player:get_player_name()
if formname == 'tasks:test' then
if fields.rotten then
minetest.close_formspec(name, 'tasks:test')
tasks.test[name] = 'false'
elseif fields.quit then
tasks.test[name] = 'false'
end
end
end)