STORY/QUESTS UPDATE

This commit is contained in:
cale 2016-03-23 11:46:47 +01:00
parent e13241bf74
commit 4857359c73
14 changed files with 80 additions and 29 deletions

View File

@ -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,

View File

@ -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

View File

@ -0,0 +1,5 @@
$dialog quest_1
$create
$wait
$quest dignode farming:wheat_5 20 10
$quit

View File

@ -0,0 +1 @@
$quit

View File

@ -0,0 +1 @@
$quit

View File

@ -0,0 +1 @@
$quit

View File

@ -0,0 +1 @@
$quit

View File

@ -0,0 +1 @@
$quit

View File

@ -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

View File

@ -1,4 +0,0 @@
<name> Hi! I have bad news for you, some angry blocks destroyed your house :(
You : Thats not good...
<name> You should build a new one.
$quest placenode default:wood 99 15

View File

@ -1,3 +0,0 @@
George : Hi, I am a test mob, LOL...
You : ok...
George : Yes I know, that is very interesting :P

View File

@ -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

View File

@ -1,3 +0,0 @@
cdqwertz : ok, now you can select a kit using /kit basic/hard
You : ok
cdqwertz : and now, have fun :)

View File

@ -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)