From eb2892d0fecf8f83a0176286a97f6a4ce35325f0 Mon Sep 17 00:00:00 2001 From: Austin Shenk Date: Sun, 6 Jan 2013 00:10:57 -0500 Subject: [PATCH] Fixed some encoding and decoding issues Still working on why node data is not stored in the sources table when a player joins in creative. --- creative.lua | 25 +++++++++++++++---------- decode.lua | 10 +++++----- encode.lua | 14 +++++--------- 3 files changed, 25 insertions(+), 24 deletions(-) diff --git a/creative.lua b/creative.lua index 4f0d8ff..13ff4ed 100644 --- a/creative.lua +++ b/creative.lua @@ -2,21 +2,21 @@ minetest.register_on_joinplayer(function(obj) local file = io.open(minetest.get_worldpath().."/adventures_previousmode", "r") - if(file:read("*l") == adventures.normal) then + if(file:read("*l") ~= adventures.creative) then file:close() - local creative = minetest.setting_get("creative_mode") - local node = nil - local pos = nil - for _,data in ipairs(adventures.sourceData) do - node = data[1] - pos = {x=data[2],y=data[3],z=data[4]} - minetest.env:add_node({name=node}, pos) + for pos,data in pairs(adventures.sourceData) do + print("Added") + minetest.env:add_node({name=data[1]}, pos) end file = io.open(minetest.get_worldpath().."/adventures_previousmode", "w") file:write(adventures.creative) file:close() else file:close() + for pos,data in pairs(adventures.sourceData) do + print("Stored") + adventures.sources[pos] = data[1] + end end end) @@ -166,6 +166,7 @@ minetest.register_node("adventures:invincible_source" ,{ meta:set_string("formspec", updateInvincibleSourceFormspec(meta)) end, on_destruct = function(pos) + adventures.sources[pos] = nil adventures.findArea(minetest.env:get_meta(pos), pos, {x=0,y=0,z=0}):remove() end, }) @@ -173,7 +174,11 @@ minetest.register_node("adventures:invincible_source" ,{ minetest.register_chatcommand("save", { description = "saveAdventure : Save all node data to files", func = function(name, param) - dofile(minetest.get_modpath("adventures").."/encode.lua") - print(name) + local saved = dofile(minetest.get_modpath("adventures").."/encode.lua") + if saved then + minetest.chat_send_player(name, "ADVENTURE SAVED") + else + minetest.chat_send_player(name, "ADVENTURE NOT SAVED") + end end, }) \ No newline at end of file diff --git a/decode.lua b/decode.lua index 0c7cb31..b123a9d 100644 --- a/decode.lua +++ b/decode.lua @@ -2,6 +2,9 @@ local file = io.open(minetest.get_worldpath().."/adventures_sources", "r") if(file ~= nil) then local start = 1 for line in file:lines() do + if line == "initialized" or line == "" then + return + end local comma = line:find(",") local data = {} data[1] = line:sub(start,comma-1) @@ -12,10 +15,7 @@ if(file ~= nil) then start = comma+1 comma = line:find(",", start) end - local creative = minetest.setting_get("creative_mode") - if(creative) then - adventures.sourceData[{x=data[2],y=data[3],z=data[4]}] = data - end + adventures.sourceData[{x=data[2],y=data[3],z=data[4]}] = data end end -io.close() \ No newline at end of file +file:close() \ No newline at end of file diff --git a/encode.lua b/encode.lua index 1d768d9..ca4c0e0 100644 --- a/encode.lua +++ b/encode.lua @@ -1,20 +1,16 @@ local file = io.open(minetest.get_worldpath().."/adventures_sources", "w") local saved = false +local str = "" for pos,name in pairs(adventures.sources) do local meta = minetest.env:get_meta(pos) - local str = "" if(name == "adventures:invincible_source") then - str = name..","..pos.x..","..pos.y..","..pos.z..",".. + str = str..name..","..pos.x..","..pos.y..","..pos.z..",".. meta:get_int("x")..","..meta:get_int("y")..","..meta:get_int("z")..",".. meta:get_int("width")..","..meta:get_int("length")..","..meta:get_int("height").."," .."\n" end - file:write(str) saved = true end -if(saved) then - print("ADVENTURE SAVED") -else - print("ERROR IN ADVENTURE") -end -file:close() \ No newline at end of file +file:write(str) +file:close() +return saved \ No newline at end of file