elidragon.quests.list = {
dig_dirt = {
job = "Dig Dirt",
- desc = "You need ressources to build a stone generator!",
+ desc = "dig 10 x default:dirt or default:dirt_with_grass",
count = 10,
parents = {},
action = "dig",
},
get_wood = {
job = "Get Wood",
- desc = "Wood is one of your basic resources",
+ desc = "dig 5 x default:wood",
count = 5,
parents = {},
action = "dig",
},
build_stonegen = {
job = "Build a stone generator",
- desc = "Using lavacooling mechanisms to get access to cobblestone and ores! Be careful, you have only one lava bucket.",
+ desc = "place default:lava_source using a bucket",
count = 1,
parents = {"dig_dirt"},
action = "place_liquid",
},
craft_wood_pickaxe = {
job = "Craft a wooden pickaxe",
- desc = "You need a pickaxe to get Cobblestone.",
+ desc = "craft default:pick_wood",
count = 1,
parents = {"get_wood"},
action = "craft",
},
dig_cobble = {
job = "Dig Stone",
- desc = "Let's get some cobble!",
+ desc = "dig 10 x default:stone",
count = 10,
parents = {"craft_wood_pickaxe", "build_stonegen"},
action = "dig",
items = {"default:stone"},
reward = "default:chest_locked",
- goal = "Stoneage",
- }
+ goal = "Stone Age",
+ },
+ craft_stone_pick = {
+ job = "Craft a Stone Pickaxe",
+ desc = "craft default:pick_stone",
+ count = 1,
+ parents = {"dig_cobble"},
+ action = "craft",
+ items = {"default:pick_stone"},
+ reward = "default:iron_lump",
+ },
+ craft_stone_axe = {
+ job = "Craft a Stone Axe",
+ desc = "craft default:axe_stone",
+ count = 1,
+ parents = {"craft_stone_pick"},
+ action = "craft",
+ items = {"default:axe_stone"},
+ reward = "default:iron_lump",
+ },
+ craft_stone_shovel = {
+ job = "Craft a Stone Shovel",
+ desc = "craft default:shovel_stone",
+ count = 1,
+ parents = {"dig_cobble"},
+ action = "craft",
+ items = {"default:shovel_stone"},
+ reward = "default:iron_lump",
+ },
+ craft_stone_sword = {
+ job = "Craft a stone sword",
+ desc = "craft default:sword_stone",
+ count = 1,
+ parents = {"craft_stone_shovel", "craft_stone_axe"},
+ action = "craft",
+ items = {"default:sword_stone"},
+ reward = "default:iron_lump",
+ goal = "Full Toolset",
+ },
+ craft_iron_pickaxe = {
+ job = "Make an Iron Pick",
+ desc = "craft default:pick_steel",
+ count = 1,
+ parents = {"craft_stone_pick", "craft_furnace"},
+ action = "craft",
+ items = {"default:pick_steel"},
+ reward = "default:dirt 25",
+ },
+ craft_dirt = {
+ job = "Craft some dirt!",
+ desc = "craft 99 x default:dirt",
+ count = 99,
+ parents = {"craft_stone_sword"},
+ action = "craft",
+ items = {"default:dirt"},
+ reward = "protector:protect 5",
+ },
+ craft_furnace = {
+ job = "Make a furnace",
+ desc = "craft default:furnace",
+ count = 1,
+ parents = {"dig_cobble"},
+ action = "craft",
+ items = {"default:furnace"},
+ reward = "default:coal_lump 5",
+ },
}
-elidragon.savedata.quests = elidragon.savedata.quests or {}
-
elidragon.quests.active = {}
-- functions
local questdef = elidragon.quests.list[questname]
local player = minetest.get_player_by_name(name)
if not player then return end
- elidragon.savedata.quests[name][questname] = true
+ local meta = player:get_meta()
+ meta:set_string(queststr, "true")
if questdef.goal then
minetest.chat_send_all(minetest.colorize("#84FFE3", name .. " has reached the goal ") .. minetest.colorize("#CF24FF", questdef.goal))
minetest.sound_play("elidragon_reach_goal")
end
function elidragon.quests.update(name)
- local completed_quests = elidragon.savedata.quests[name]
+ local player = minetest.get_player_by_name(name)
+ if not player then return end
+ local meta = player:get_meta()
local active_quests = elidragon.quests.active[name]
local unlock_delay = 2
- for questname, questdef in pairs(elidragon.quests.list) do
- if not completed_quests[questname] and not active_quests[questname] then
+ for questname, questdef in pairs(elidragon.quests.list) do
+ local queststr = "elidragon:" .. questname
+ if not active_quests[questname] and not minetest.is_yes(meta:get_string(queststr)) then
local unlock = true
for _, parent in pairs(questdef.parents) do
- if not completed_quests[parent] then
+ if not minetest.is_yes(meta:get_string("elidragon:" .. parent)) then
unlock = false
break
end
if unlock then
active_quests[questname] = true
minetest.after(unlock_delay, function()
- quests.start_quest(name, "elidragon:" .. questname)
+ quests.start_quest(name, queststr)
minetest.sound_play("elidragon_new_quest", {to_player = name})
end)
unlock_delay = unlock_delay + 0.5
minetest.register_on_joinplayer(function(player)
local name = player:get_player_name()
- elidragon.savedata.quests[name] = elidragon.savedata.quests[name] or {}
elidragon.quests.active[name] = {}
elidragon.quests.update(name)
+ quests.show_hud(name, true)
end)
-- callbacks
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
+ if not player then return end
elidragon.quests.event(player:get_player_name(), "craft", itemstack)
end)
minetest.register_on_dignode(function(pos, oldnode, player)
+ if not player then return end
elidragon.quests.event(player:get_player_name(), "dig", ItemStack(oldnode.name))
end)
minetest.register_on_placenode(function(pos, newnode, player, oldnode, itemstack, pointed_thing)
+ if not player then return end
elidragon.quests.event(player:get_player_name(), "place", ItemStack(newnode.name))
end)