Fix a bug with state restoration.
This commit is contained in:
parent
9096c33a48
commit
85817a33b8
1 changed files with 34 additions and 27 deletions
|
|
@ -92,6 +92,34 @@ minetest.register_entity(":artifact:vix_scene", {
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
local help
|
||||||
|
local function pre_vix_on_whacked(type, target)
|
||||||
|
local checkpoint = db:get("checkpoint:pre_vix")
|
||||||
|
if checkpoint == "begin" then -- We're still in the start closet.
|
||||||
|
if type == "object" then
|
||||||
|
help:cancel()
|
||||||
|
vix_scene._can_check = true
|
||||||
|
end
|
||||||
|
db:set_string("checkpoint:pre_vix", "in_room")
|
||||||
|
elseif checkpoint == "in_room" then -- We're actually in the room.
|
||||||
|
if type == "node" and target.node_under.name:find "forcefield_generator" then
|
||||||
|
local num = db:get_int("checkpoint:pre_vix_fields_broken") +1
|
||||||
|
db:set_int("checkpoint:pre_vix_fields_broken", num)
|
||||||
|
if num == 1 then -- Key breaks his first generator.
|
||||||
|
minetest.after(1, function()
|
||||||
|
artifact.push_chat_message("Hehe.", "Key", "artifact_key_splash_low.png")
|
||||||
|
end)
|
||||||
|
elseif num == 5 then -- All generators are down.
|
||||||
|
vix_scene._can_check = nil
|
||||||
|
-- Wait just a bit, so the player can look up.
|
||||||
|
minetest.after(0.5, function()
|
||||||
|
ns.play_vix_scene()
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
function ns.enter_pre_vix_state()
|
function ns.enter_pre_vix_state()
|
||||||
for _, m in pairs(artifact.players) do
|
for _, m in pairs(artifact.players) do
|
||||||
m:add_health_bar()
|
m:add_health_bar()
|
||||||
|
|
@ -103,38 +131,13 @@ function ns.enter_pre_vix_state()
|
||||||
m:set_spawnpoint(artifact.origin:offset(0, -73.5, -4))
|
m:set_spawnpoint(artifact.origin:offset(0, -73.5, -4))
|
||||||
end
|
end
|
||||||
minetest.add_entity(artifact.origin:offset(-16.5, -72.5, -17), "artifact:vix_scene")
|
minetest.add_entity(artifact.origin:offset(-16.5, -72.5, -17), "artifact:vix_scene")
|
||||||
local help = minetest.after(15, function()
|
help = minetest.after(15, function()
|
||||||
for _, m in pairs(artifact.players) do
|
for _, m in pairs(artifact.players) do
|
||||||
artifact.show_help_message(m, "Certain nodes can be broken by punching them with the blackrod.", "info")
|
artifact.show_help_message(m, "Certain nodes can be broken by punching them with the blackrod.", "info")
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
db:set_string("checkpoint:pre_vix", "begin")
|
db:set_string("checkpoint:pre_vix", "begin")
|
||||||
artifact.on_whacked = function(type, target)
|
artifact.on_whacked = pre_vix_on_whacked
|
||||||
local checkpoint = db:get("checkpoint:pre_vix")
|
|
||||||
if checkpoint == "begin" then -- We're still in the start closet.
|
|
||||||
if type == "object" then
|
|
||||||
help:cancel()
|
|
||||||
vix_scene._can_check = true
|
|
||||||
end
|
|
||||||
db:set_string("checkpoint:pre_vix", "in_room")
|
|
||||||
elseif checkpoint == "in_room" then -- We're actually in the room.
|
|
||||||
if type == "node" and target.node_under.name:find "forcefield_generator" then
|
|
||||||
local num = db:get_int("checkpoint:pre_vix_fields_broken") +1
|
|
||||||
db:set_int("checkpoint:pre_vix_fields_broken", num)
|
|
||||||
if num == 1 then -- Key breaks his first generator.
|
|
||||||
minetest.after(1, function()
|
|
||||||
artifact.push_chat_message("Hehe.", "Key", "artifact_key_splash_low.png")
|
|
||||||
end)
|
|
||||||
elseif num == 5 then -- All generators are down.
|
|
||||||
vix_scene._can_check = nil
|
|
||||||
-- Wait just a bit, so the player can look up.
|
|
||||||
minetest.after(0.5, function()
|
|
||||||
ns.play_vix_scene()
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function ns.enter_main_state()
|
function ns.enter_main_state()
|
||||||
|
|
@ -984,6 +987,10 @@ minetest.register_on_joinplayer(function(p)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if state == ns.states.pre_vix then
|
||||||
|
artifact.on_whacked = pre_vix_on_whacked
|
||||||
|
end
|
||||||
|
|
||||||
if state == ns.states.pre_vix and db:get_int("checkpoint:pre_vix_fields_broken") >= 5 then
|
if state == ns.states.pre_vix and db:get_int("checkpoint:pre_vix_fields_broken") >= 5 then
|
||||||
-- If the player left during the scene for some reason, start it over when they join back.
|
-- If the player left during the scene for some reason, start it over when they join back.
|
||||||
ns.play_vix_scene()
|
ns.play_vix_scene()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue