missions/steps/limitedtries.lua
2019-02-01 20:26:41 +01:00

65 lines
1.4 KiB
Lua

missions.register_step({
type = "limitedtries",
name = "Limited tries",
create = function()
return {maxcount=1, counts={}} -- "xy"=1
end,
edit_formspec = function(ctx)
local stepdata = ctx.step.data
local stepnumber = ctx.stepnumber
local formspec = "size[8,8;]" ..
"label[0,0;Limited tries (Step #" .. stepnumber .. ")]" ..
"field[0,2;8,1;maxcount;Count;" .. stepdata.maxcount .. "]" ..
"button[0,7;8,1;save;Save]"
return formspec;
end,
update = function(ctx)
local fields = ctx.fields
local stepdata = ctx.step.data
if fields.maxcount then
local maxcount = tonumber(fields.maxcount)
if maxcount and maxcount > 0 then
stepdata.maxcount = maxcount
end
end
if fields.save then
ctx.show_mission()
end
end,
on_step_enter = function(ctx)
local player = ctx.player
local playername = player:get_player_name()
local stepdata = ctx.step.data
local count_map_str = ctx.block_meta:get_string("limitedtries")
local count_map = {}
if count_map_str ~= nil and count_map_str ~= "" then
count_map = minetest.deserialize(count_map_str)
end
local tries = count_map[playername] or 0
count_map[playername] = tries + 1
ctx.block_meta:set_string("limitedtries", minetest.serialize(count_map))
if tries < stepdata.maxcount then
ctx.on_success()
else
ctx.on_failed("Number of tries exceeded!")
end
end
})