From 983d8c0af041268551478ae5d0303fff3b2213b1 Mon Sep 17 00:00:00 2001 From: cale Date: Thu, 31 Mar 2016 13:51:15 +0200 Subject: [PATCH] added energy --- mods/quests/init.lua | 4 +++ mods/story/api.lua | 34 ++++++++++++++++++++++---- mods/story/parts/quest_1.quest | 8 +++++- mods/story/parts/quest_1_done.dialog | 5 ++-- mods/story/parts/quest_1_done_2.dialog | 3 +++ 5 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 mods/story/parts/quest_1_done_2.dialog diff --git a/mods/quests/init.lua b/mods/quests/init.lua index 1e37ea6..688c389 100644 --- a/mods/quests/init.lua +++ b/mods/quests/init.lua @@ -3,6 +3,7 @@ quests = {} quests.player_quests = {} quests.file = minetest.get_worldpath() .. "/quests" +quests.callback = nil function quests.load_quests() local input = io.open(quests.file, "r") @@ -37,6 +38,7 @@ function quests.add_quest(player, quest) print("[quests] add quest") table.insert(quests.player_quests[player], quest) quests.save_quests() + return #quests.player_quests[player] end quests.show_quests_form = "size[8,7.5;]" @@ -80,6 +82,7 @@ minetest.register_on_dignode(function(pos, oldnode, digger) if v.progress > (v.max-1) and v.done == false then xp.add_xp(digger, v.xp) v.done = true + quests.callback(digger) end quests.save_quests() end @@ -99,6 +102,7 @@ minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack if v.progress > (v.max-1) and v.done == false then xp.add_xp(placer, v.xp) v.done = true + quests.callback(placer) end quests.save_quests() end diff --git a/mods/story/api.lua b/mods/story/api.lua index 24cdb0a..c58143c 100644 --- a/mods/story/api.lua +++ b/mods/story/api.lua @@ -65,6 +65,7 @@ function story.generator.load_storys() local str = input:read("*all") if str then if minetest.deserialize(str) then + print("[story] FILE : " .. str) story.generator.players_storys = minetest.deserialize(str) end else @@ -108,7 +109,10 @@ function story.generator.gen_next_step(player) if next_part.quit then story.generator.players_storys[player:get_player_name()].pos = nil story.generator.players_storys[player:get_player_name()].part = "" + story.generator.players_storys[player:get_player_name()].wait_for = nil story.generator.players_storys[player:get_player_name()].wait_pos = 0 + story.generator.players_storys[player:get_player_name()].wait = false + print("[story] QUIT") return end @@ -116,8 +120,11 @@ function story.generator.gen_next_step(player) if next_part.wait then story.generator.players_storys[player:get_player_name()].wait = true story.generator.players_storys[player:get_player_name()].wait_pos = next_part.param + story.generator.players_storys[player:get_player_name()].wait_for = next_part.param2 else story.generator.players_storys[player:get_player_name()].part = next_part.part + story.generator.players_storys[player:get_player_name()].wait_for = nil + story.generator.players_storys[player:get_player_name()].wait = false story.generator.players_storys[player:get_player_name()].wait_pos = 0 end @@ -125,7 +132,7 @@ function story.generator.gen_next_step(player) story.generator.save_storys() return else - print("[ERROR][story] could not find part file") + print("[ERROR][story] could not find part file : " .. (story.generator.players_storys[player:get_player_name()].part or "nothing")) return end end @@ -135,6 +142,8 @@ function story.generator.new_player(player) story.generator.players_storys[player:get_player_name()] = {} story.generator.players_storys[player:get_player_name()].part = "" story.generator.players_storys[player:get_player_name()].wait_pos = 0 + story.generator.players_storys[player:get_player_name()].wait = false + story.generator.players_storys[player:get_player_name()].wait_for = nil end function story.generator.get_part(name) @@ -186,6 +195,13 @@ function story.generator.get_quest(player) return nil end +quests.callback = function (player) + print("[quest] done") + if (story.generator.players_storys[player:get_player_name()].wait_for and story.generator.players_storys[player:get_player_name()].wait_for == "quest") then + story.generator.gen_next_step(player) + end +end + function story.generator.run(part, player, line_pos) local out = {} print("[INFO] run script... " .. part) @@ -224,7 +240,7 @@ function story.generator.run(part, player, line_pos) end end if cmd[1] == "$quest" and cmd[2] and cmd[3] and cmd[4] and cmd[5] and tonumber(cmd[4]) and tonumber(cmd[5]) then - quests.add_quest(player:get_player_name(), { + local q_id = quests.add_quest(player:get_player_name(), { quest_type = cmd[2], node = cmd[3], progress = 0, @@ -262,7 +278,7 @@ function story.generator.run(part, player, line_pos) end end if cmd[1] == "$wait" then - return {cmd="$wait", param=i, wait=true} + return {cmd="$wait", param=i, wait=true, param2 = cmd[2] or "talk"} end if cmd[1] == "$spawn" and cmd[2] and cmd[3] then if places.pos[cmd[3]] then @@ -359,14 +375,22 @@ minetest.register_entity("story:human", { -- shows the dialog if story.generator.players_storys[clicker:get_player_name()].pos then if vector.distance(self.object:getpos(), story.generator.players_storys[clicker:get_player_name()].pos) < 3 then - minetest.show_formspec(clicker:get_player_name(), "story:story", story.get_talk_form(story.generator.players_storys[clicker:get_player_name()].text)) - story.generator.gen_next_step(clicker) + print("[story] not near story position") + if (story.generator.players_storys[clicker:get_player_name()].wait_for and story.generator.players_storys[clicker:get_player_name()].wait_for == "talk") or not(story.generator.players_storys[clicker:get_player_name()].wait_for) then + story.generator.players_storys[clicker:get_player_name()].wait_for = nil + minetest.show_formspec(clicker:get_player_name(), "story:story", story.get_talk_form(story.generator.players_storys[clicker:get_player_name()].text)) + story.generator.gen_next_step(clicker) + else + print("[story] waiting for something else") + end -- TODO : delete npc after talking with it (or move it some where else) end else + story.generator.players_storys[clicker:get_player_name()].wait_for = nil story.generator.players_storys[clicker:get_player_name()].part = story.generator.get_quest(clicker) story.generator.players_storys[clicker:get_player_name()].pos = self.object:getpos() story.generator.players_storys[clicker:get_player_name()].wait_pos = 0 + story.generator.players_storys[clicker:get_player_name()].wait = false story.generator.gen_next_step(clicker) end end, diff --git a/mods/story/parts/quest_1.quest b/mods/story/parts/quest_1.quest index d505af3..4d3c763 100644 --- a/mods/story/parts/quest_1.quest +++ b/mods/story/parts/quest_1.quest @@ -1,5 +1,11 @@ $dialog quest_1 -$create $wait $quest dignode farming:wheat_5 20 10 +$wait quest +$dialog quest_1_done +$wait +$quest placenode farming:wheat_1 20 10 +$wait quest +$dialog quest_1_done_2 +$wait $quit diff --git a/mods/story/parts/quest_1_done.dialog b/mods/story/parts/quest_1_done.dialog index b429937..7209c2a 100644 --- a/mods/story/parts/quest_1_done.dialog +++ b/mods/story/parts/quest_1_done.dialog @@ -1,3 +1,4 @@ Farmer : Thank you! -Farmer : you can keep the wheat seeds and carft bread aut of them :) -You : Thank you :) +Farmer : Could you replant the wheat? +You : Ok +Farmer : Thank you very much, I am really busy at the moment. diff --git a/mods/story/parts/quest_1_done_2.dialog b/mods/story/parts/quest_1_done_2.dialog new file mode 100644 index 0000000..8ad611a --- /dev/null +++ b/mods/story/parts/quest_1_done_2.dialog @@ -0,0 +1,3 @@ +Farmer : Thank you! +Farmer : you can keep the wheat seeds and craft bread aut of them :) +You : Thank you :)