Añadida runa de teletransporte a casa

- Obsidiana mágica: Obsidiana decorativa. Si forma parte de una runa de teletransporte
	  a casa, al romperla elimina el punto de teletransporte con el que está enlazada.

	- Runa de "set home": cambia la obsidiana por obsidiana mágica y registra sus coordenadas.

	- Piedra de hogar (home stone): Teletransporta a la última runa activada por el jugador.

	- Runa para crear la Piedra del hogar.

	- BugFix: Las varitas se stackeaban en más de una por stack. Ya no.

-- Yawin
master
Yawin 2017-02-01 00:56:50 +01:00
parent a0abcb4882
commit 9f3ad200a1
15 changed files with 853 additions and 54 deletions

View File

@ -50,57 +50,6 @@ minetest.register_node("default_override:bedrock", {
sounds = default.node_sound_stone_defaults(),
})
--[[
minetest.register_node("default:rail", {
description = "Rail",
drawtype = "raillike",
tiles = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"},
inventory_image = "default_rail.png",
wield_image = "default_rail.png",
paramtype = "light",
walkable = false,
selection_box = {
type = "fixed",
-- but how to specify the dimensions for curved and sideways rails?
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
},
stack_max = 64,
groups = {bendy=2,dig_immediate=2,attached_node=1},
})
minetest.register_node("default:torch", {
description = "Torch",
drawtype = "torchlike",
--tiles = {"default_torch_on_floor.png", "default_torch_on_ceiling.png", "default_torch.png"},
tiles = {
{name="default_torch_on_floor_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}},
{name="default_torch_on_ceiling_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}},
{name="default_torch_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}}
},
inventory_image = "default_torch_on_floor.png",
wield_image = "default_torch_on_floor.png",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
light_source = LIGHT_MAX-1,
selection_box = {
type = "wallmounted",
wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
wall_side = {-0.5, -0.3, -0.1, -0.5+0.3, 0.3, 0.1},
},
stack_max = 64,
groups = {choppy=2,dig_immediate=3,flammable=1,attached_node=1},
legacy_wallmounted = true,
sounds = default.node_sound_defaults(),
action = function(pos)
add_fire(pos)
end
})
]]--
minetest.register_node("default_override:lapisblock", {
description = "Lapis Lazul Block",
tiles = {"default_lapis_block.png"},

View File

@ -17,7 +17,6 @@ function magic.check_recipe(recipe_id, target)
local i = 0
local j = 0
local k = 0
k = 0
for n_lin, lin in ipairs(recipe) do

View File

@ -1,3 +1,4 @@
default
bucket
walls
stairs

225
mods/magic/home_stone.lua Normal file
View File

@ -0,0 +1,225 @@
magic.playerHomes = {}
local worldpath = minetest.get_worldpath()
local loadHomes = function ()
local fh,err = io.open(worldpath .. "/magic_homes.txt", "r")
if err then
print("No existing warps to read.")
return
end
while true do
local line = fh:read()
if line == nil then
break
end
local paramlist = string.split(line, " ")
local w = {
player = paramlist[1],
homepos = {
x = tonumber(paramlist[2]),
y = tonumber(paramlist[3]),
z = tonumber(paramlist[4]),
}
}
table.insert(magic.playerHomes, w)
end
fh:close()
end
local saveHomes = function()
local fh,err = io.open(worldpath .. "/magic_homes.txt", "w")
if err then
print("No existing warps to read.")
return
end
for i = 1,table.getn(magic.playerHomes) do
local s = magic.playerHomes[i].player .. " " .. magic.playerHomes[i].homepos.x .. " " .. magic.playerHomes[i].homepos.y .. " " .. magic.playerHomes[i].homepos.z .. "\n"
fh:write(s)
end
fh:close()
end
local function checkHome(player)
for i = 1,table.getn(magic.playerHomes) do
if magic.playerHomes[i].player == player then
return i
end
end
return -1
end
minetest.register_craftitem("magic:home_stone",{
description = "Home stone",
inventory_image = "home_stone.png",
stack_max = 1,
on_use = function(itemstack, placer, pointed_thing)
magic.warp(placer)
end,
})
magic.register_recipe("home_stone",
{
{
{"","","","","","","","","","","","",""},
{"","","","","","","","","","","","",""},
{"","","","","","","","","","","","",""},
{"","","","","","","","","","","","",""},
{"","","","","","","","","","","","",""},
{"","","","","","","","","","","","",""},
{"","","","","","","","","","","","",""},
{"","","","","","","","","","","","",""},
{"","","","","","","","","","","","",""},
{"","","","","","","","","","","","",""},
{"","","","","","","","","","","","",""},
{"","","","","","","","","","","","",""},
{"","","","","","","","","","","","",""},
},
{
{"","","","","","","default:cobble","","","","","",""},
{"","","","default:cobble","air","air","air","air","air","default:cobble","","",""},
{"","","air","air","air","air","air","air","air","air","air","",""},
{"","default:cobble","air","air","air","air","air","air","air","air","air","default:cobble",""},
{"","air","air","air","air","air","air","air","air","air","air","air",""},
{"air","air","air","air","air","air","stairs:slab_cobble","air","air","air","air","air","air"},
{"default:cobble","air","air","air","air","stairs:slab_cobble","default:obsidian","stairs:slab_cobble","air","air","air","air","default:cobble"},
{"air","air","air","air","air","air","stairs:slab_cobble","air","air","air","air","air","air"},
{"","air","air","air","air","air","air","air","air","air","air","air",""},
{"","default:cobble","air","air","air","air","air","air","air","air","air","default:cobble",""},
{"","","air","air","air","air","air","air","air","air","air","",""},
{"","","","default:cobble","air","air","air","air","air","default:cobble","","",""},
{"","","","","","","default:cobble","","","","","",""},
},
{
{"","","","","","","default:cobble","","","","","",""},
{"","","","air","air","air","air","air","air","air","","",""},
{"","","air","air","air","air","air","air","air","air","air","",""},
{"","air","air","air","air","air","air","air","air","air","air","air",""},
{"","air","air","air","air","air","air","air","air","air","air","air",""},
{"air","air","air","air","air","air","air","air","air","air","air","air","air"},
{"default:cobble","air","air","air","air","air","air","air","air","air","air","air","default:cobble"},
{"air","air","air","air","air","air","air","air","air","air","air","air","air"},
{"","air","air","air","air","air","air","air","air","air","air","air",""},
{"","air","air","air","air","air","air","air","air","air","air","air",""},
{"","","air","air","air","air","air","air","air","air","air","",""},
{"","","","air","air","air","air","air","air","air","","",""},
{"","","","","","","default:cobble","","","","","",""},
},
},
function(node)
minetest.set_node(node.under, {name="magic:magicalobsidian"})
minetest.env:add_item({x = node.under.x, y = node.under.y + 1, z = node.under.z}, "magic:home_stone")
end
)
magic.register_recipe("home_warp",
{
{
{"","default:obsidian","default:obsidian","default:obsidian",""},
{"default:obsidian","","","","default:obsidian"},
{"","","default:obsidian","","default:obsidian"},
{"","default:obsidian","","","default:obsidian"},
{"","","default:obsidian","default:obsidian",""},
},
},
function(node, player)
local posx = node.under.x
local posy = node.under.y
local posz = node.under.z
local i = -2
local j = -2
local arrID = checkHome(player:get_player_name())
if arrID == -1 then
arrID = #magic.playerHomes + 1
end
magic.playerHomes[arrID] = {}
magic.playerHomes[arrID].player = player:get_player_name()
magic.playerHomes[arrID].homepos = {x = node.under.x, y = node.under.y + 1, z = node.under.z}
saveHomes()
while i <= 2 do
while j <= 2 do
if "default:obsidian" == minetest.get_node({x = posx + i, y = posy, z = posz + j}).name then
minetest.set_node({x = posx + i, y = posy, z = posz + j}, {name="magic:magicalobsidian"})
local meta = minetest.get_meta({x = posx + i, y = posy, z = posz + j})
meta:set_string("referido",player:get_player_name())
end
j = j + 1
end
j = -2
i = i + 1
end
end
)
minetest.register_node("magic:magicalobsidian", {
description = "Magical Obsidian",
tiles = {
{
name = "magic_magicalobsidian_animated.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 10.0,
},
},
},
special_tiles = {
-- New-style water source material (mostly unused)
{
name = "magic_magicalobsidian_animated.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 10.0,
},
--backface_culling = false,
},
},
after_dig_node = function(pos, oldnode, oldmetadata)
local meta = minetest.env:get_meta(pos)
meta:from_table(oldmetadata)
local s = meta:get_string("referido")
local home = checkHome(s)
if home ~= -1 then
table.remove(magic.playerHomes,home)
saveHomes()
return
end
end,
drop = "default:obsidian",
light_source = 5,
paramtype = "light",
groups = {cracky = 2, stone = 1},
sounds = default.node_sound_stone_defaults(),
})
magic.warp = function(player)
local playerName = player:get_player_name()
local home = checkHome(playerName)
if home == -1 then
minetest.chat_send_player(playerName, "[Mod Magic] Unknown home")
return
end
player:setpos(magic.playerHomes[home].homepos)
player:set_look_yaw(0)
end
loadHomes()

View File

@ -6,6 +6,7 @@ magic.path = minetest.get_modpath("magic")
-- Load files
dofile(magic.path.."/api.lua")
dofile(magic.path.."/wand.lua")
dofile(magic.path.."/home_stone.lua")
dofile(magic.path.."/magical_water.lua")
dofile(magic.path.."/magical_cobble.lua")

View File

@ -20,7 +20,7 @@ function magic.do_spell(itemstack, placer, pointed_thing)
if magic.check_recipe(rec, pt) then
--minetest.chat_send_all(pointed_thing.under.x .. ", " .. pointed_thing.under.y .. ", " .. pointed_thing.under.z)
magic.recipes[rec][2](pt)
magic.recipes[rec][2](pt, placer)
end
end
@ -72,7 +72,6 @@ magic.register_recipe("big_tree",
end
)
magic.register_recipe("compass",
{
{

Binary file not shown.

After

Width:  |  Height:  |  Size: 430 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@ -6,6 +6,7 @@
minetest.register_craftitem("magic:wand",{
description = "Magical wand",
inventory_image = "magic_wand.png",
stack_max = 1,
on_place = function(itemstack, placer, pointed_thing)
magic.do_spell(itemstack, placer, pointed_thing)

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

View File

@ -0,0 +1,4 @@
default
beds?
sethome?

View File

@ -0,0 +1,157 @@
local ores={"default:stone_with_coal","default:stone_with_iron","default:stone_with_copper","default:stone_with_gold","default:stone_with_mese","default:stone_with_diamond","default:mese"}
multidimensions.dimensions[1]={}
multidimensions.dimensions[2]={
"default:stone","default:dirt","default:dirt_with_grass",
name="Alternative earth",color="007003",ores=ores,
craft="default:stonebrick",
nature={
flower1={size=3,scarcity=20,num=2,node="flowers:mushroom_brown"},
flower2={size=3,scarcity=20,num=2,node="flowers:mushroom_red"},
flower3={size=3,scarcity=20,num=2,node="flowers:rose"},
flower4={size=3,scarcity=20,num=2,node="flowers:tulip"},
flower5={size=3,scarcity=20,num=2,node="flowers:dandelion_yellow"},
flower6={size=3,scarcity=20,num=2,node="flowers:geranium"},
flower7={size=3,scarcity=20,num=2,node="flowers:viola"},
flower8={size=3,scarcity=20,num=2,node="flowers:dandelion_white"},
flower9={size=3,scarcity=20,num=2,node="default:junglegrass"},
grass={size=3,scarcity=4,num=4,node="default:grass_3"},
papyrus={size=1,scarcity=20,num=1,node="default:papyrus"},
tree={size=1,scarcity=5,num=1,node="multidimensions:tree"},
aspen_tree={size=1,scarcity=10,num=1,node="multidimensions:aspen_tree"},
pine_tree={size=1,scarcity=15,num=1,node="multidimensions:pine_tree"},
},
blob={
water={node="default:water_source",wherein="group:soil",miny=995,maxy=1003,clust_clust_size=5,clust_scarcity=32},
cave1={node="air",wherein="default:stone",miny=10,maxy=1005,clust_clust_size=5,clust_scarcity=32},
cave2={node="air",wherein="default:stone",miny=10,maxy=905,clust_clust_size=10,clust_scarcity=32},
cave3={node="air",wherein="default:stone",miny=10,maxy=905,clust_clust_size=20,clust_scarcity=64},
cliff={node="default:stone",wherein="air",miny=990,maxy=1005,clust_clust_size=10,clust_scarcity=32},
cliff2={node="default:stone",wherein="air",miny=990,maxy=1020,clust_clust_size=20,clust_scarcity=32},
cliff3={node="default:stone",wherein="air",miny=970,maxy=1035,clust_clust_size=30,clust_scarcity=60},
clay={node="default:clay",wherein="default:stone",miny=200,maxy=980,clust_clust_size=5,clust_scarcity=32},
sand={node="default:sand",wherein="group:soil",miny=990,maxy=1000,clust_clust_size=5,clust_scarcity=32},
gravel={node="default:gravel",wherein="group:soil",miny=1000,maxy=1000,clust_clust_size=5,clust_scarcity=32},
lava={node="default:lava_source",wherein="default:stone",miny=10,maxy=950,clust_clust_size=5,clust_scarcity=64},
lava2={node="default:lava_source",wherein="default:stone",miny=10,maxy=900,clust_clust_size=20,clust_scarcity=128},
}
}
multidimensions.dimensions[3]={}
multidimensions.dimensions[4]={
"default:stone","default:dirt","default:dirt_with_dry_grass",
name="Savana",color="ffb847",ores=ores,
craft="default:acacia_wood",
nature={
flower1={size=3,scarcity=20,num=2,node="flowers:mushroom_brown"},
flower2={size=3,scarcity=20,num=2,node="flowers:mushroom_red"},
flower3={size=3,scarcity=20,num=2,node="flowers:rose"},
flower4={size=3,scarcity=20,num=2,node="flowers:tulip"},
flower5={size=3,scarcity=20,num=2,node="flowers:dandelion_yellow"},
flower6={size=3,scarcity=20,num=2,node="flowers:geranium"},
flower7={size=3,scarcity=20,num=2,node="flowers:viola"},
flower8={size=3,scarcity=20,num=2,node="flowers:dandelion_white"},
flower9={size=3,scarcity=20,num=2,node="default:junglegrass"},
grass={size=3,scarcity=4,num=4,node="default:grass_5"},
grass2={size=4,scarcity=8,num=3,node="default:dry_shrub"},
grass3={size=3,scarcity=7,num=2,node="default:dry_grass_4"},
papyrus={size=1,scarcity=20,num=1,node="default:papyrus"},
tree={size=1,scarcity=20,num=1,node="multidimensions:acacia_tree"},
tree2={size=1,scarcity=25,num=1,node="multidimensions:jungle_tree"},
},
blob={
water={node="default:river_water_source",wherein="group:soil",miny=995,maxy=1003,clust_clust_size=5,clust_scarcity=64},
cave1={node="air",wherein="default:stone",miny=10,maxy=1005,clust_clust_size=5,clust_scarcity=32},
cave2={node="air",wherein="default:stone",miny=10,maxy=905,clust_clust_size=10,clust_scarcity=32},
cave3={node="air",wherein="default:stone",miny=10,maxy=905,clust_clust_size=20,clust_scarcity=64},
cliff={node="default:stone",wherein="air",miny=990,maxy=1005,clust_clust_size=10,clust_scarcity=32},
cliff2={node="default:stone",wherein="air",miny=990,maxy=1010,clust_clust_size=20,clust_scarcity=32},
cliff3={node="default:stone",wherein="air",miny=970,maxy=1035,clust_clust_size=30,clust_scarcity=64},
clay={node="default:clay",wherein="default:stone",miny=200,maxy=980,clust_clust_size=5,clust_scarcity=32},
sand={node="default:desert_sand",wherein="group:soil",miny=990,maxy=1000,clust_clust_size=5,clust_scarcity=32},
gravel={node="default:gravel",wherein="group:soil",miny=1000,maxy=1000,clust_clust_size=5,clust_scarcity=32},
lava={node="default:lava_source",wherein="default:stone",miny=10,maxy=950,clust_clust_size=5,clust_scarcity=64},
lava2={node="default:lava_source",wherein="default:stone",miny=10,maxy=900,clust_clust_size=20,clust_scarcity=128},
grass2={node="default:dirt_with_grass",wherein="group:soil",miny=990,maxy=1000,clust_clust_size=5,clust_scarcity=32},
}
}
multidimensions.dimensions[5]={
"default:ice","default:snowblock","default:snowblock",
name="Cold",color="1effe8",ores={"default:stone","default:snowblock"},
craft="default:ice",
nature={
snow={size=1,scarcity=2,num=2,node="default:snow"},
snowblock={size=3,scarcity=10,num=5,node="default:snowblock"},
pine_tree={size=1,scarcity=20,num=1,node="multidimensions:pine_treesnow"},
},
blob={
water={node="default:ice",wherein="default:ice",miny=995,maxy=1003,clust_clust_size=5,clust_scarcity=32},
cave1={node="air",wherein="default:ice",miny=10,maxy=1005,clust_clust_size=5,clust_scarcity=32},
cave2={node="air",wherein="default:ice",miny=10,maxy=905,clust_clust_size=10,clust_scarcity=32},
cave3={node="air",wherein="default:ice",miny=10,maxy=905,clust_clust_size=20,clust_scarcity=64},
cliff={node="default:ice",wherein="air",miny=990,maxy=1005,clust_clust_size=10,clust_scarcity=32},
cliff2={node="default:ice",wherein="air",miny=990,maxy=1010,clust_clust_size=20,clust_scarcity=32},
cliff3={node="default:snowblock",wherein="air",miny=970,maxy=1035,clust_clust_size=30,clust_scarcity=32},
}
}
multidimensions.dimensions[6]={
"default:stone","default:desert_sand","default:desert_sand",
name="Desert",color="ffcf91",ores=ores,
craft="default:desert_stone",
nature={
grass2={size=2,scarcity=20,num=3,node="default:dry_shrub"},
tree={size=1,scarcity=25,num=1,node="multidimensions:large_cactus"},
},
blob={
cave1={node="air",wherein="default:desert_stone",miny=10,maxy=1005,clust_clust_size=5,clust_scarcity=32},
cave2={node="air",wherein="default:desert_stone",miny=10,maxy=905,clust_clust_size=10,clust_scarcity=32},
cave3={node="air",wherein="default:desert_stone",miny=10,maxy=905,clust_clust_size=20,clust_scarcity=64},
cliff={node="default:desert_stone",wherein="air",miny=990,maxy=1005,clust_clust_size=10,clust_scarcity=32},
cliff2={node="default:desert_stone",wherein="air",miny=990,maxy=1010,clust_clust_size=20,clust_scarcity=32},
clay={node="default:clay",wherein="default:desert_stone",miny=200,maxy=980,clust_clust_size=5,clust_scarcity=32},
cliff3={node="default:desert_sand",wherein="air",miny=900,maxy=1020,clust_clust_size=50,clust_scarcity=32},
gravel={node="default:gravel",wherein="default:desert_stone",miny=100,maxy=1000,clust_clust_size=5,clust_scarcity=32},
lava={node="default:lava_source",wherein="default:desert_stone",miny=10,maxy=950,clust_clust_size=5,clust_scarcity=64},
lava2={node="default:lava_source",wherein="default:desert_stone",miny=10,maxy=900,clust_clust_size=20,clust_scarcity=128},
}
}
multidimensions.dimensions[7]={
"default:lava_source","default:lava_source","default:lava_source",
name="Hot",color="ff4300",
craft="bucket:bucket_lava",
nature={
fire={size=1,scarcity=2,num=3,node="fire:permanent_flame"},
},
blob={
cliff={node="fire:permanent_flame",wherein="air",miny=995,maxy=1005,clust_clust_size=5,clust_scarcity=16},
--cliff2={node="fire:permanent_flame",wherein="air",miny=900,maxy=1020,clust_clust_size=50,clust_scarcity=32},
cliff3={node="default:stone",wherein="air",miny=990,maxy=1005,clust_clust_size=10,clust_scarcity=32},
cliff4={node="default:stone",wherein="air",miny=990,maxy=1020,clust_clust_size=20,clust_scarcity=32},
cliff5={node="default:stone",wherein="air",miny=970,maxy=1035,clust_clust_size=30,clust_scarcity=60},
}
}
multidimensions.dimensions[8]={
"default:water_source","default:water_source","default:water_source",
name="Water",color="1e38ff",ores=ores,
craft="bucket:bucket_water",
blob={
cliff={node="default:stone",wherein="default:water_source",miny=200,maxy=1000,clust_clust_size=10,clust_scarcity=16},
cliff2={node="default:stone",wherein="default:water_source",miny=200,maxy=1000,clust_clust_size=20,clust_scarcity=32},
cliff2={node="default:stone",wherein="default:water_source",miny=200,maxy=1000,clust_clust_size=50,clust_scarcity=50},
}
}
multidimensions.dimensions[9]={
"default:sandstone","default:sandstone","default:sandstone",
name="Sandstone",color="fdffbf",
craft="default:sandstone",
blob={
cliff={node="default:sandstone",wherein="air",miny=995,maxy=1010,clust_clust_size=10,clust_scarcity=16},
cliff2={node="default:sandstone",wherein="air",miny=980,maxy=1020,clust_clust_size=20,clust_scarcity=32},
cliff2={node="default:sandstone",wherein="air",miny=950,maxy=1050,clust_clust_size=50,clust_scarcity=50},
}
}
multidimensions.dimensions[3]={
"default:stone","default:dirt","default:dirt_with_grass",ores=ores,color="008003",
name="Alternative earth 2",
craft="default:sandstonebrick",
nature=multidimensions.dimensions[2].nature,
blob=multidimensions.dimensions[2].blob,
}

View File

@ -0,0 +1,291 @@
multidimensions={
start_y=4000
,max_distance=50 --(50 is 800)
,max_distance_chatt=800
,limited_chat=true
,limeted_nametag=true
,teleports=true
,craftable=true
,remake_home=true
,remake_bed=true
,dimensions={},user={},
levels={{4,994},{994,998},{998,1000}}}
--stone, dirt, grass
dofile(minetest.get_modpath("multidimensions") .. "/dimensions.lua")
dofile(minetest.get_modpath("multidimensions") .. "/tools.lua")
local level=multidimensions.start_y
local leveln=1
multidimensions.distance=function(p,o)
return math.sqrt((p.x-o.x)*(p.x-o.x) + (p.y-o.y)*(p.y-o.y)+(p.z-o.z)*(p.z-o.z))
end
for i, dim in pairs(multidimensions.dimensions) do
if dim.name then
leveln=leveln+1
multidimensions.dimensions[leveln].y=multidimensions.levels[3][2]+level+2
for ii = 1, 3, 1 do
minetest.register_ore({
ore_type = "scatter",
ore= dim[ii],
wherein= "air",
clust_scarcity = 1,
clust_num_ores = 10,
clust_size = 2,
y_min= level+multidimensions.levels[ii][1],
y_max= level+multidimensions.levels[ii][2],
})
end
minetest.register_ore({
ore_type = "scatter",
ore="multidimensions:bedrock",
wherein= "air",
clust_scarcity = 1,
clust_num_ores = 10,
clust_size = 2,
y_min= level,
y_max= level+4,
})
if dim.ores then
local ore_y=0
local ore_scarcity=8
for i, ore in pairs(dim.ores) do
minetest.register_ore({
ore_type = "scatter",
ore= ore,
wherein=dim[1],
clust_scarcity = ore_scarcity*ore_scarcity*ore_scarcity,
clust_num_ores = 5,
clust_size = 3,
y_min= level+multidimensions.levels[1][1],
y_max= level+multidimensions.levels[1][2]+ore_y,
})
ore_scarcity=ore_scarcity+2
ore_y=ore_y-50
end
end
if dim.nature then
for i, nat in pairs(dim.nature) do
minetest.register_ore({
ore_type = "scatter",
ore = nat.node,
wherein ="air",
clust_scarcity = nat.scarcity*nat.scarcity*nat.scarcity,
clust_num_ores = nat.num,
clust_size = nat.size,
y_min = level+multidimensions.levels[3][2]-3,
y_max = level+multidimensions.levels[3][2]+1,
})
end
end
if dim.blob then
for i, blob in pairs(dim.blob) do
minetest.register_ore({
ore_type= "blob",
ore = blob.node,
wherein = {blob.wherein},
clust_scarcity= blob.clust_scarcity * blob.clust_scarcity * blob.clust_scarcity,
clust_size= blob.clust_clust_size,
y_min = level+blob.miny,
y_max = level+blob.maxy,
noise_threshold = 0.0,
noise_params= {
offset = 0.5,
scale = 0.2,
spread = {x = 5, y = 5, z = 5},
octaves = 1,
persist = 0.0
},
})
end
end
if multidimensions.teleports and dim.color and dim.name then
local y=multidimensions.dimensions[leveln].y
minetest.register_node("multidimensions:teleporter" .. leveln, {
description = "Teleport to dimension " .. dim.name,
tiles = {"default_steel_block.png","default_steel_block.png","default_mese_block.png^[colorize:#" .. dim.color .."cc"},
groups = {choppy=2,oddly_breakable_by_hand=1},
is_ground_content = false,
sounds = default.node_sound_wood_defaults(),
after_place_node = function(pos, placer, itemstack)
local meta=minetest.get_meta(pos)
meta:set_string("owner",placer:get_player_name())
meta:set_string("infotext","Teleport to dimension " .. dim.name)
end,
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
local owner=minetest.get_meta(pos):get_string("owner")
local pos2={x=pos.x,y=y,z=pos.z}
if minetest.is_protected(pos2, owner)==false then
multidimensions.move(player,pos2)
end
end,
mesecons = {effector = {
action_on = function (pos, node)
local owner=minetest.get_meta(pos):get_string("owner")
local pos2={x=pos.x,y=y,z=pos.z}
if minetest.is_protected(pos2, owner)==false then
end
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 5)) do
multidimensions.move(ob,pos2)
end
return false
end}},
})
if multidimensions.craftable and dim.craft then
minetest.register_craft({
output = "multidimensions:teleporter" .. leveln,
recipe = {
{"default:obsidianbrick", "default:steel_ingot", "default:obsidianbrick"},
{dim.craft, "default:mese", dim.craft,},
{"default:obsidianbrick", "default:steel_ingot", "default:obsidianbrick"},
}
})
end
end
level=level+2000
end
end
minetest.register_node("multidimensions:bedrock", {
description = "Bedrock",
tiles = {"default_stone.png","default_cloud.png","default_stone.png","default_stone.png","default_stone.png","default_stone.png",},
groups = {unbreakable=1,not_in_creative_inventory = 1},
paramtype = "light",
sunlight_propagates = true,
drop = "",
diggable = false,
is_ground_content = false,
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("multidimensions:tree", {
drawtype="airlike",
groups = {multidimensions_tree=1,not_in_creative_inventory=1},
})
minetest.register_node("multidimensions:pine_tree", {
drawtype="airlike",
groups = {multidimensions_tree=1,not_in_creative_inventory=1},
})
minetest.register_node("multidimensions:pine_treesnow", {
drawtype="airlike",
groups = {multidimensions_tree=1,not_in_creative_inventory=1},
})
minetest.register_node("multidimensions:jungle_tree", {
drawtype="airlike",
groups = {multidimensions_tree=1,not_in_creative_inventory=1},
})
minetest.register_node("multidimensions:aspen_tree", {
drawtype="airlike",
groups = {multidimensions_tree=1,not_in_creative_inventory=1},
})
minetest.register_node("multidimensions:acacia_tree", {
drawtype="airlike",
groups = {multidimensions_tree=1,not_in_creative_inventory=1},
})
minetest.register_node("multidimensions:large_cactus", {
drawtype="airlike",
groups = {multidimensions_tree=1,not_in_creative_inventory=1},
})
minetest.register_abm({
nodenames = {"group:multidimensions_tree"},
interval = 1.0,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
minetest.set_node(pos, {name = "air"})
local tree=""
if node.name=="multidimensions:tree" then tree=minetest.get_modpath("default") .. "/schematics/apple_tree.mts" end
if node.name=="multidimensions:pine_tree" then tree=minetest.get_modpath("default") .. "/schematics/pine_tree.mts" end
if node.name=="multidimensions:pine_treesnow" then tree=minetest.get_modpath("default") .. "/schematics/snowy_pine_tree_from_sapling.mts" end
if node.name=="multidimensions:jungle_tree" then tree=minetest.get_modpath("default") .. "/schematics/jungle_tree.mts" end
if node.name=="multidimensions:aspen_tree" then tree=minetest.get_modpath("default") .. "/schematics/aspen_tree.mts" end
if node.name=="multidimensions:acacia_tree" then tree=minetest.get_modpath("default") .. "/schematics/acacia_tree.mts" end
if node.name=="multidimensions:large_cactus" then tree=minetest.get_modpath("default") .. "/schematics/large_cactus.mts" end
minetest.place_schematic({x=pos.x,y=pos.y,z=pos.z}, tree, "random", {}, true)
end,
})
if multidimensions.limited_chat then
minetest.register_on_chat_message(function(name, message)
local msger = minetest.get_player_by_name(name)
local pos1 = msger:getpos()
for _,player in ipairs(minetest.get_connected_players()) do
local pos2 = player:getpos()
if player:get_player_name()~=name and multidimensions.distance(pos1,pos2)<multidimensions.max_distance_chatt then
minetest.chat_send_player(player:get_player_name(), "<"..name.."> "..message)
end
end
return true
end)
end
minetest.register_node("multidimensions:teleporter0", {
description = "Teleport to dimension earth",
tiles = {"default_steel_block.png","default_steel_block.png","default_mese_block.png^[colorize:#1e6600cc"},
groups = {choppy=2,oddly_breakable_by_hand=1},
is_ground_content = false,
sounds = default.node_sound_wood_defaults(),
after_place_node = function(pos, placer, itemstack)
local meta=minetest.get_meta(pos)
meta:set_string("owner",placer:get_player_name())
meta:set_string("infotext","Teleport to dimension earth")
end,
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
local owner=minetest.get_meta(pos):get_string("owner")
local pos2={x=pos.x,y=0,z=pos.z}
if minetest.is_protected(pos2, owner)==false then
multidimensions.move(player,pos2)
end
end,
mesecons = {effector = {
action_on = function (pos, node)
local owner=minetest.get_meta(pos):get_string("owner")
local pos2={x=pos.x,y=0,z=pos.z}
if minetest.is_protected(pos2, owner)==false then
end
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 5)) do
multidimensions.move(ob,pos2)
end
return false
end}},
})
minetest.register_craft({
output = "multidimensions:teleporter0",
recipe = {
{"default:obsidianbrick", "default:steel_ingot", "default:obsidianbrick"},
{"default:dirt", "default:mese","default:dirt",},
{"default:obsidianbrick", "default:steel_ingot", "default:obsidianbrick"},
}
})
if multidimensions.limeted_nametag==true and minetest.setting_getbool("unlimited_player_transfer_distance")~=false then
minetest.setting_setbool("unlimited_player_transfer_distance",false)
minetest.setting_set("player_transfer_distance",multidimensions.max_distance)
minetest.setting_save()
elseif multidimensions.limeted_nametag==false and minetest.setting_getbool("unlimited_player_transfer_distance")==false then
minetest.setting_setbool("unlimited_player_transfer_distance",true)
minetest.setting_set("player_transfer_distance",0)
minetest.setting_save()
end
local del_un=1 --remove unnecessary memory
for i, dim in pairs(multidimensions.dimensions) do
multidimensions.dimensions[del_un].nature=nil
multidimensions.dimensions[del_un].blob=nil
multidimensions.dimensions[del_un].color=nil
multidimensions.dimensions[del_un].ores=nil
multidimensions.dimensions[del_un].craft=nil
multidimensions.dimensions[del_un][1]=nil
multidimensions.dimensions[del_un][2]=nil
multidimensions.dimensions[del_un][3]=nil
del_un=del_un+1
end
ores=nil

View File

@ -0,0 +1,31 @@
License: code and media CC0
Created by: UjEdwin
Version: 1
Multi dimensions
This mod adds a few dimensions to the game (you can add more)
You can find the "Dimensions teleport tool" in creative to go to them, or type "/giveme dim"
(You need the "dimensions" privilege to use it)
Teleport yourself to dimensions by point in air/blocks, or teleport other players/objects by pointing them.
There are also crafable "teleport blocks" (click to teleport, and works with mesecons)
All teleported players that not have the "dimensions" privilege will get there spawnpoin and home set in the new dimension (using "beds" and "sethome")
They cant get back unless teleporting in somehow or have/making "teleport blocks"
Player cant see or hear players from "other diamnsions" or just if they are 800 blocks away
You can change settings in the init.lua
Advanced information:
The dimensions starts at +4000 height and there are 2000 height between them
all diamnsions are 31000x2000x31000 big (exept the earth that are 31000x35000x31000)
the earth alternativ starts at y+4000... ground 5000, eath alternativ 2 y+6000, ground y+7000...
If you are teleporting using commands you can easily teleport between y+5000, y+7000, y+9000...
Used settings:
unlimited_player_transfer_distance=false
player_transfer_distance=50
[Main manu[--> [Settings[ --> [Advanced Settings[ --> [Server / Singleplayer[ --> [Game]

View File

@ -0,0 +1,141 @@
minetest.register_privilege("dimensions", {
description = "Can use dimensions teleport tool",
give_to_singleplayer= false,
})
minetest.register_alias("dim", "multidimensions:teleporttool")
multidimensions.setrespawn=function(object,pos)
if not object:is_player() then return false end
local name=object:get_player_name()
if minetest.check_player_privs(name, {dimensions=true}) then return false end
if multidimensions.remake_bed and minetest.get_modpath("beds")~=nil then
beds.spawn[name]=pos
beds.save_spawns()
end
if multidimensions.remake_home and minetest.get_modpath("sethome")~=nil then
sethome.set(name, pos)
end
end
multidimensions.move=function(object,pos)
local move=false
object:setpos(pos)
multidimensions.setrespawn(object,pos)
minetest.after(1, function(pos,object,move)
for i=1,100,1 do
local nname=minetest.get_node(pos).name
if nname~="air" and nname~="ignore" then
pos.y=pos.y+1
move=true
elseif move then
object:setpos(pos)
multidimensions.setrespawn(object,pos)
break
end
end
end, pos,object,move)
minetest.after(5, function(pos,object,move)
for i=1,100,1 do
local nname=minetest.get_node(pos).name
if nname~="air" and nname~="ignore" then
pos.y=pos.y+1
move=true
elseif move then
object:setpos(pos)
multidimensions.setrespawn(object,pos)
break
end
end
end, pos,object,move)
return true
end
multidimensions.form=function(player,object)
local name=player:get_player_name()
local buttons=""
local y=1
local x=3
local n=2
local info=""
multidimensions.user[name]={}
multidimensions.user[name].pos=object:getpos()
multidimensions.user[name].object=object
if object:is_player() and object:get_player_name()==name then
info="Teleport you"
elseif object:is_player() and object:get_player_name()~=name then
info="Teleport "..object:get_player_name()
else
info="Teleport object"
end
buttons="button_exit[0,1;3,1;b1;Earth]"
for i, but in pairs(multidimensions.dimensions) do
if but.name then
buttons=buttons .."button_exit[" .. x.. "," .. y .. ";3,1;b" .. n .. ";" .. but.name .. "]"
if x==3 then
y=y+1
x=0
else
x=3
end
n=n+1
end
end
local gui=""
gui=""
.."size[6.5," .. (y+1) .."]"
.."label[2,0;" .. info .."]"
..buttons
minetest.after(0.1, function(gui)
return minetest.show_formspec(player:get_player_name(), "multidimensions.form",gui)
end, gui)
end
minetest.register_on_player_receive_fields(function(player, form, pressed)
if form=="multidimensions.form" then
local name=player:get_player_name()
local pos=multidimensions.user[name].pos
local object=multidimensions.user[name].object
local n=1
local y=0
multidimensions.user[name]=nil
for i, but in pairs(multidimensions.dimensions) do
local pos=object:getpos()
local pos2={x=pos.x,y=multidimensions.dimensions[n].y,z=pos.z}
if pressed["b"..n] and minetest.is_protected(pos2, name)==false then
if n==1 then pos2.y=0 end
multidimensions.move(object,pos2)
return true
end
n=n+1
end
return false
end
end)
minetest.register_tool("multidimensions:teleporttool", {
description = "Dimensions teleport tool",
inventory_image = "default_stick.png^[colorize:#e9ff00ff",
on_use = function(itemstack, user, pointed_thing)
local pos=user:getpos()
local name=user:get_player_name()
if minetest.check_player_privs(name, {dimensions=true})==false then
itemstack:replace(nil)
minetest.chat_send_player(name,"You need the dimensions privilege to use this tool")
return itemstack
end
local object={}
if pointed_thing.type=="object" then
object=pointed_thing.ref
else
object=user
end
multidimensions.form(user,object)
return itemstack
end
})