Add WIP files so far
parent
67ef2a55ac
commit
e3c5394818
|
@ -0,0 +1,145 @@
|
|||
--Creative Mode
|
||||
|
||||
function adventures.snapPosition(meta, pos)
|
||||
local newPos = {x=pos.x,y=pos.y,z=pos.z}
|
||||
if(meta:get_int("width")%2 == 0) then
|
||||
newPos.x = newPos.x-0.5
|
||||
newPos.z = newPos.z-0.5
|
||||
end
|
||||
if(meta:get_int("height")%2 == 0) then
|
||||
newPos.y = newPos.y+0.5
|
||||
end
|
||||
newPos.x = newPos.x+meta:get_int("x")
|
||||
newPos.y = newPos.y+meta:get_int("y")
|
||||
newPos.z = newPos.z+meta:get_int("z")
|
||||
return newPos
|
||||
end
|
||||
|
||||
function adventures.findArea(meta, pos, delta)
|
||||
local node = minetest.env:get_node(pos)
|
||||
local areaPos = {x=pos.x+meta:get_int("x")-delta.x,y=pos.y+meta:get_int("y")-delta.y,z=pos.z+meta:get_int("z")-delta.z}
|
||||
local objects = minetest.env:get_objects_inside_radius(areaPos, 1)
|
||||
local name = node.name:sub(1,-7).."area"
|
||||
for i,_ in ipairs(objects) do
|
||||
if(objects[i]:get_entity_name() == name) then
|
||||
return objects[i]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function updateInvincibleSourceFormspec(meta)
|
||||
local formspec = "size[6.25,3]"..
|
||||
"label[1,0;Position]"..
|
||||
"button[0,1;.75,.5;xminusten;-10]button[.5,1;.75,.5;xminusone;-1]label[1.125,.825;X("..meta:get_int("x")..")]button[1.5,1;.75,.5;xplusone;+1]button[2,1;.75,.5;xplusten;+10]"..
|
||||
"button[0,1.5;.75,.5;yminusten;-10]button[.5,1.5;.75,.5;yminusone;-1]label[1.125,1.325;Y("..meta:get_int("y")..")]button[1.5,1.5;.75,.5;yplusone;+1]button[2,1.5;.75,.5;yplusten;+10]"..
|
||||
"button[0,2;.75,.5;zminusten;-10]button[.5,2;.75,.5;zminusone;-1]label[1.125,1.825;Z("..meta:get_int("z")..")]button[1.5,2;.75,.5;zplusone;+1]button[2,2;.75,.5;zplusten;+10]"..
|
||||
"label[4.5,0;Dimension]"..
|
||||
"button[3.5,1;.75,.5;widthminusten;-10]button[4,1;.75,.5;widthminusone;-1]label[4.625,.825;W("..meta:get_int("width")..")]button[5,1;.75,.5;widthplusone;+1]button[5.5,1;.75,.5;widthplusten;+10]"..
|
||||
"button[3.5,1.5;.75,.5;lengthminusten;-10]button[4,1.5;.75,.5;lengthminusone;-1]label[4.625,1.325;L("..meta:get_int("length")..")]button[5,1.5;.75,.5;lengthplusone;+1]button[5.5,1.5;.75,.5;lengthplusten;+10]"..
|
||||
"button[3.5,2;.75,.5;heightminusten;-10]button[4,2;.75,.5;heightminusone;-1]label[4.625,1.825;H("..meta:get_int("height")..")]button[5,2;.75,.5;heightplusone;+1]button[5.5,2;.75,.5;heightplusten;+10]"
|
||||
return formspec
|
||||
end
|
||||
|
||||
minetest.register_entity("adventures:invincible_area" ,{
|
||||
physical = true,
|
||||
visual = "cube",
|
||||
visual_size = {x=2,y=1},
|
||||
collisionbox = {0,0,0,0,0,0},
|
||||
textures = {"adventures_invinArea.png","adventures_invinArea.png","adventures_invinArea.png","adventures_invinArea.png","adventures_invinArea.png","adventures_invinArea.png"},
|
||||
})
|
||||
|
||||
minetest.register_node("adventures:invincible_source" ,{
|
||||
description = "Invincible Area",
|
||||
walkable = false,
|
||||
groups = {crumbly=3},
|
||||
tiles = {"adventures_invinSource.png"},
|
||||
on_construct = function(pos)
|
||||
adventures.sources[pos] = minetest.env:get_node(pos).name
|
||||
local meta = minetest.env:get_meta(pos)
|
||||
meta:set_int("x", 0)
|
||||
meta:set_int("y", 0)
|
||||
meta:set_int("z", 0)
|
||||
meta:set_int("width", 2)
|
||||
meta:set_int("length", 2)
|
||||
meta:set_int("height", 1)
|
||||
meta:set_string("formspec", updateInvincibleSourceFormspec(meta))
|
||||
local area = minetest.env:add_entity(pos, "adventures:invincible_area")
|
||||
area:setpos(adventures.snapPosition(meta, pos))
|
||||
end,
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
local meta = minetest.env:get_meta(pos)
|
||||
local delta = {x=0,y=0,z=0}
|
||||
local updateDimension = false
|
||||
if fields.xminusten then delta.x = -10
|
||||
meta:set_int("x", meta:get_int("x")-10) end
|
||||
if fields.xminusone then delta.x = -1
|
||||
meta:set_int("x", meta:get_int("x")-1) end
|
||||
if fields.xplusone then delta.x = 1
|
||||
meta:set_int("x", meta:get_int("x")+1) end
|
||||
if fields.xplusten then delta.x = 10
|
||||
meta:set_int("x", meta:get_int("x")+10) end
|
||||
|
||||
if fields.yminusten then delta.y = -10
|
||||
meta:set_int("y", meta:get_int("y")-10) end
|
||||
if fields.yminusone then delta.y = -1
|
||||
meta:set_int("y", meta:get_int("y")-1) end
|
||||
if fields.yplusone then delta.y = 1
|
||||
meta:set_int("y", meta:get_int("y")+1) end
|
||||
if fields.yplusten then delta.y = 10
|
||||
meta:set_int("y", meta:get_int("y")+10) end
|
||||
|
||||
if fields.zminusten then delta.z = -10
|
||||
meta:set_int("z", meta:get_int("z")-10) end
|
||||
if fields.zminusone then delta.z = -1
|
||||
meta:set_int("z", meta:get_int("z")-1) end
|
||||
if fields.zplusone then delta.z = 1
|
||||
meta:set_int("z", meta:get_int("z")+1) end
|
||||
if fields.zplusten then delta.z = 10
|
||||
meta:set_int("z", meta:get_int("z")+10) end
|
||||
|
||||
if fields.widthminusten then updateDimension = true
|
||||
meta:set_int("width", meta:get_int("width")-10) end
|
||||
if fields.widthminusone then updateDimension = true
|
||||
meta:set_int("width", meta:get_int("width")-1) end
|
||||
if fields.widthplusone then updateDimension = true
|
||||
meta:set_int("width", meta:get_int("width")+1) end
|
||||
if fields.widthplusten then updateDimension = true
|
||||
meta:set_int("width", meta:get_int("width")+10) end
|
||||
|
||||
if fields.lengthminusten then updateDimension = true
|
||||
meta:set_int("length", meta:get_int("length")-10) end
|
||||
if fields.lengthminusone then updateDimension = true
|
||||
meta:set_int("length", meta:get_int("length")-1) end
|
||||
if fields.lengthplusone then updateDimension = true
|
||||
meta:set_int("length", meta:get_int("length")+1) end
|
||||
if fields.lengthplusten then updateDimension = true
|
||||
meta:set_int("length", meta:get_int("length")+10) end
|
||||
|
||||
if fields.heightminusten then updateDimension = true
|
||||
meta:set_int("height", meta:get_int("height")-10) end
|
||||
if fields.heightminusone then updateDimension = true
|
||||
meta:set_int("height", meta:get_int("height")-1) end
|
||||
if fields.heightplusone then updateDimension = true
|
||||
meta:set_int("height", meta:get_int("height")+1) end
|
||||
if fields.heightplusten then updateDimension = true
|
||||
meta:set_int("height", meta:get_int("height")+10) end
|
||||
|
||||
local area = adventures.findArea(meta, pos, delta)
|
||||
if updateDimension then
|
||||
area:set_properties({visual_size={x=meta:get_int("width"),y=meta:get_int("height")}})
|
||||
end
|
||||
area:setpos(adventures.snapPosition(meta, pos))
|
||||
meta:set_string("formspec", updateInvincibleSourceFormspec(meta))
|
||||
end,
|
||||
on_destruct = function(pos)
|
||||
adventures.findArea(minetest.env:get_meta(pos), pos, {x=0,y=0,z=0}):remove()
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_chatcommand("saveAdventure", {
|
||||
description = "saveAdventure : Save all node data to files",
|
||||
func = function(name, param)
|
||||
dofile(minetest.get_modpath("adventures").."/encode.lua")
|
||||
print(name)
|
||||
end,
|
||||
})
|
|
@ -0,0 +1,37 @@
|
|||
local file = io.open(minetest.get_worldpath().."/adventures_sources", "r")
|
||||
if(file ~= nil) then
|
||||
local creative = minetest.setting_get("creative_mode")
|
||||
local start = 1
|
||||
for line in file:lines() do
|
||||
local comma = line:find(",")
|
||||
local data = {}
|
||||
data[1] = line:sub(start,comma-1)
|
||||
start = comma+1
|
||||
comma = line:find(",", start)
|
||||
while(comma ~= nil) do
|
||||
table.insert(data, tonumber(line:sub(start,comma-1)))
|
||||
start = comma+1
|
||||
comma = line:find(",", start)
|
||||
end
|
||||
local node = data[1]
|
||||
local pos = {x=data[2],y=data[3],z=data[4]}
|
||||
if(node == "adventures:invincible_source") then
|
||||
if(creative) then
|
||||
minetest.env:add_node({name=node}, pos)
|
||||
local meta = minetest.env:get_meta(pos)
|
||||
local area = adventures.findArea(meta, pos, {x=0,y=0,z=0})
|
||||
meta:set_int("x", data[5])
|
||||
meta:set_int("y", data[6])
|
||||
meta:set_int("z", data[7])
|
||||
meta:set_int("width", data[8])
|
||||
meta:set_int("length", data[9])
|
||||
meta:set_int("height", data[10])
|
||||
area:set_properties({visual_size={x=data[8],y=data[10]}})
|
||||
area:setpos(adventures.snapPosition(meta, pos))
|
||||
else
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
io.close()
|
|
@ -0,0 +1 @@
|
|||
default
|
|
@ -0,0 +1,20 @@
|
|||
local file = io.open(minetest.get_worldpath().."/adventures_sources", "w")
|
||||
local saved = false
|
||||
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..","..
|
||||
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()
|
|
@ -0,0 +1,17 @@
|
|||
--run Files
|
||||
local init = io.open(minetest.get_worldpath().."/adventures_init", "w")
|
||||
if(init == nil) then
|
||||
init:write("init")
|
||||
init:close()
|
||||
local file = io.open(minetest.get_worldpath().."/adventures_sources", "w")
|
||||
file:write(" ")
|
||||
file:close()
|
||||
end
|
||||
|
||||
local modpath=minetest.get_modpath("adventures")
|
||||
dofile(modpath.."/decode.lua")
|
||||
dofile(modpath.."/tables.lua")
|
||||
local creative = minetest.setting_get("creative_mode")
|
||||
if creative then dofile(modpath.."/creative.lua")
|
||||
else dofile(modpath.."/standard.lua")
|
||||
end
|
|
@ -0,0 +1 @@
|
|||
--Normal Mode
|
|
@ -0,0 +1,5 @@
|
|||
adventures = {}
|
||||
adventures.sources = {}
|
||||
adventures.Unbreakable = {}
|
||||
adventures.Unbuildable = {}
|
||||
adventures.areas = {}
|
Binary file not shown.
After Width: | Height: | Size: 211 B |
Binary file not shown.
After Width: | Height: | Size: 171 B |
Loading…
Reference in New Issue