]> git.lizzy.rs Git - elidragon.git/blobdiff - quests.lua
Merge pull request #4 from HimbeerserverDE/master
[elidragon.git] / quests.lua
index cedb3947ea9e132c75b2cd0c13a1e835bf9b4548..2a73b41150dae0f28c1616c843b9b96bd2f675ff 100644 (file)
@@ -3,7 +3,7 @@ elidragon.quests = {}
 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",
@@ -12,7 +12,7 @@ elidragon.quests.list = {
        },
        get_wood = {
                job = "Get Wood",
-               desc = "Wood is one of your basic resources",
+               desc = "dig 5 x default:wood",
                count = 5,
                parents = {},
                action = "dig",
@@ -21,7 +21,7 @@ elidragon.quests.list = {
        },
        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",
@@ -30,7 +30,7 @@ elidragon.quests.list = {
        },
        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",
@@ -39,18 +39,80 @@ elidragon.quests.list = {
        },
        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
@@ -60,7 +122,8 @@ function elidragon.quests.complete(name, queststr)
        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")
@@ -72,14 +135,17 @@ function elidragon.quests.complete(name, queststr)
 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
@@ -87,7 +153,7 @@ function elidragon.quests.update(name)
                        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
@@ -128,22 +194,25 @@ end
 
 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)