diff --git a/mods/story/api.lua b/mods/story/api.lua index c9ad99e..1519b9a 100644 --- a/mods/story/api.lua +++ b/mods/story/api.lua @@ -91,15 +91,28 @@ function story.generator.gen_next_step(player) print("[ERROR][story] could not find players story") return end + -- load part local part = story.generator.players_storys[player:get_player_name()].part part = story.generator.get_part(story.generator.players_storys[player:get_player_name()].part) if part then local next_part = {} + + -- run a new part? if story.generator.players_storys[player:get_player_name()].wait then next_part = story.generator.run(part, player, story.generator.players_storys[player:get_player_name()].wait_pos+1) else next_part = story.generator.run(part, player, 0) end + + --quit + 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_pos = 0 + return + end + + -- wait or not? 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 @@ -107,6 +120,8 @@ function story.generator.gen_next_step(player) story.generator.players_storys[player:get_player_name()].part = next_part.part story.generator.players_storys[player:get_player_name()].wait_pos = 0 end + + -- save story.generator.save_storys() return else @@ -118,7 +133,7 @@ end function story.generator.new_player(player) -- adds a new entry to the story database story.generator.players_storys[player:get_player_name()] = {} - story.generator.players_storys[player:get_player_name()].part = "base" + story.generator.players_storys[player:get_player_name()].part = "" story.generator.players_storys[player:get_player_name()].wait_pos = 0 end @@ -126,11 +141,13 @@ function story.generator.get_part(name) if not name then return end if name == "" then return end if not story.generator.parts[name] then - local file = io.open(minetest.get_modpath("story").."/parts/"..name..".part", "r") + print("[story] loading part : " .. name) + local file = io.open(minetest.get_modpath("story").."/parts/"..name..".quest", "r") story.generator.parts[name] = file:read("*all") io.close(file) return story.generator.parts[name] else + print("[story] get part : " .. name) return story.generator.parts[name] end end @@ -146,6 +163,29 @@ function story.generator.get_dialog(name) end end +function story.generator.get_quest(player) + local input = io.open(minetest.get_modpath("story").."/parts/quests.conf", "r") + if input then + local str = input:read("*all") + if str then + local lines = str:split("\n") + for k,v in pairs(lines) do + local var = v:split("=")[1] + local val = (v:split("=")[2]):split(",") + if var == "lvl".. tostring(xp.player_levels[player:get_player_name()] or 1) then + return val[math.random(#val)] + end + end + else + print("[WARNING] quest.conf is empty") + end + io.close(input) + else + print("[ERROR] couldnt find quest.conf") + end + return nil +end + function story.generator.run(part, player, line_pos) local out = {} print("[INFO] run script... " .. part) @@ -229,6 +269,10 @@ function story.generator.run(part, player, line_pos) minetest.add_entity(places.pos[cmd[3]], cmd[2]) end end + if cmd[1] == "$quit" then + out = {part="", wait=false, quit=true} + return out + end end end i = i +1 @@ -255,7 +299,7 @@ end minetest.register_on_newplayer(function(player) story.generator.new_player(player) - story.generator.gen_next_step(player) + --story.generator.gen_next_step(player) end) minetest.register_chatcommand("restart_story", { @@ -273,6 +317,20 @@ minetest.register_chatcommand("restart_story", { end, }) +minetest.register_chatcommand("reset_story", { + params = "", + description = "resets your story", + privs = {}, + func = function(name, text) + local player = minetest.get_player_by_name(name) + if player and player:is_player() then + story.generator.new_player(player) + return true, "" + end + return true, "Error" + end, +}) + -- human minetest.register_entity("story:human", { hp_max = 50, @@ -305,6 +363,11 @@ minetest.register_entity("story:human", { story.generator.gen_next_step(clicker) -- TODO : delete npc after talking with it (or move it some where else) end + else + 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.gen_next_step(clicker) end end, diff --git a/mods/story/parts/base.part b/mods/story/parts/base.part deleted file mode 100644 index ff9664f..0000000 --- a/mods/story/parts/base.part +++ /dev/null @@ -1,12 +0,0 @@ -$dialog welcome -$place near village_1 -$create -$wait -$dialog welcome_1 -$create -$wait -$dialog quest_1 -$place near village_1 -$create -$wait -$quest dignode farming:wheat_5 20 10 diff --git a/mods/story/parts/quest_1.quest b/mods/story/parts/quest_1.quest new file mode 100644 index 0000000..d505af3 --- /dev/null +++ b/mods/story/parts/quest_1.quest @@ -0,0 +1,5 @@ +$dialog quest_1 +$create +$wait +$quest dignode farming:wheat_5 20 10 +$quit diff --git a/mods/story/parts/quest_2.quest b/mods/story/parts/quest_2.quest new file mode 100644 index 0000000..99e8714 --- /dev/null +++ b/mods/story/parts/quest_2.quest @@ -0,0 +1 @@ +$quit diff --git a/mods/story/parts/quest_3.quest b/mods/story/parts/quest_3.quest new file mode 100644 index 0000000..99e8714 --- /dev/null +++ b/mods/story/parts/quest_3.quest @@ -0,0 +1 @@ +$quit diff --git a/mods/story/parts/quest_4.quest b/mods/story/parts/quest_4.quest new file mode 100644 index 0000000..99e8714 --- /dev/null +++ b/mods/story/parts/quest_4.quest @@ -0,0 +1 @@ +$quit diff --git a/mods/story/parts/quest_5.quest b/mods/story/parts/quest_5.quest new file mode 100644 index 0000000..99e8714 --- /dev/null +++ b/mods/story/parts/quest_5.quest @@ -0,0 +1 @@ +$quit diff --git a/mods/story/parts/quest_6.quest b/mods/story/parts/quest_6.quest new file mode 100644 index 0000000..99e8714 --- /dev/null +++ b/mods/story/parts/quest_6.quest @@ -0,0 +1 @@ +$quit diff --git a/mods/story/parts/quests.conf b/mods/story/parts/quests.conf index e69de29..926516c 100644 --- a/mods/story/parts/quests.conf +++ b/mods/story/parts/quests.conf @@ -0,0 +1,3 @@ +lvl1=quest_1,quest_2,quest_3 +lvl2=quest_1,quest_2,quest_3,quest_4 +lvl3=quest_5,quest_6 diff --git a/mods/story/parts/test b/mods/story/parts/test deleted file mode 100644 index e255c0c..0000000 --- a/mods/story/parts/test +++ /dev/null @@ -1,4 +0,0 @@ - Hi! I have bad news for you, some angry blocks destroyed your house :( -You : Thats not good... - You should build a new one. -$quest placenode default:wood 99 15 diff --git a/mods/story/parts/test.dialog b/mods/story/parts/test.dialog deleted file mode 100644 index 8981c87..0000000 --- a/mods/story/parts/test.dialog +++ /dev/null @@ -1,3 +0,0 @@ -George : Hi, I am a test mob, LOL... -You : ok... -George : Yes I know, that is very interesting :P diff --git a/mods/story/parts/welcome.dialog b/mods/story/parts/welcome.dialog deleted file mode 100644 index 4596625..0000000 --- a/mods/story/parts/welcome.dialog +++ /dev/null @@ -1,4 +0,0 @@ -cdqwertz : Hello, welcome to RPGtest, a open source sandbox survival mmorpg! -You : hi :) -cdqwertz : Select your class using /class warrior/farmer/thief - diff --git a/mods/story/parts/welcome_1.dialog b/mods/story/parts/welcome_1.dialog deleted file mode 100644 index f897dd7..0000000 --- a/mods/story/parts/welcome_1.dialog +++ /dev/null @@ -1,3 +0,0 @@ -cdqwertz : ok, now you can select a kit using /kit basic/hard -You : ok -cdqwertz : and now, have fun :) diff --git a/mods/xp/init.lua b/mods/xp/init.lua index dec8909..94997eb 100644 --- a/mods/xp/init.lua +++ b/mods/xp/init.lua @@ -31,6 +31,7 @@ function xp.add_xp(player, num) print("[info] xp for player ".. player:get_player_name() .. " " .. xp.player_xp[player:get_player_name()].."/"..xp.lvl*xp.player_levels[player:get_player_name()].." = " .. (xp.player_xp[player:get_player_name()])/(xp.lvl*xp.player_levels[player:get_player_name()])) player:hud_change(xp.xp_hud[player:get_player_name()], "number", 20*((xp.player_xp[player:get_player_name()])/(xp.lvl*xp.player_levels[player:get_player_name()]))) xp.save_xp() + xp.save_levels() end function xp.add_lvl(player)