Altar de rituales (Tier 2)

- Reorganizada la estructura del mod para tener más sentido
	- Reordenada la api para que tenga más sentido
	- Añadido el altar de rituales y su receta
	- Añadido sistema de generación de tiers
	- El altar ya es capaz de reconocer si tiene algo encima y qué es lo que tiene encima,
	  queda construir un sistema que cuente cuántos de cada tipo hay y chequee las recetas
	- Cambiado el "crafteo" de la verita: Ahora se hace usando un palo en el agua mágica
	- Añadido "crafteo" del altar: usando un slab de "Stone block" en el agua mágica.
	- Rediseñada la runa de "Compass" para que no necesite ningún schem.
	- Creada flor "Lightbloom" para tener un primer ritual con el que hacer las pruebas.

-- Yawin
master
Yawin 2017-02-03 01:53:12 +01:00
parent a48f009192
commit 2f0cc83001
26 changed files with 626 additions and 423 deletions

View File

@ -1,4 +1,3 @@
local reverse = true
local function destruct_bed(pos, n)

View File

@ -1,5 +1,3 @@
local chest = minetest.get_content_id("default:chest")
local chest_formspec =

View File

@ -28,58 +28,6 @@ minetest.register_globalstep(function(dtime)
end
end
end)
--[[for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 2.3)) do
if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
if object:get_luaentity().collect then
if inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
local pos1 = pos
pos1.y = pos1.y+0.2
local pos2 = object:getpos()
local vec = {x=pos1.x-pos2.x, y=pos1.y-pos2.y, z=pos1.z-pos2.z}
vec.x = vec.x*2
vec.y = vec.y*2
vec.z = vec.z*2
object:setvelocity(vec)
object:get_luaentity().physical_state = false
object:get_luaentity().flying = false
object:get_luaentity().object:set_properties({
physical = false,
collisionbox = {0,0,0, 0,0,0},
})
minetest.after(1, function(args)
local lua = object:get_luaentity()
if object == nil or lua == nil or lua.itemstring == nil then
return
end
if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
inv:add_item("main", ItemStack(object:get_luaentity().itemstring))
if object:get_luaentity().itemstring ~= "" then
minetest.sound_play("item_drop_pickup", {
to_player = player:get_player_name(),
gain = 0.4,
})
end
object:get_luaentity().itemstring = ""
object:remove()
else
object:setvelocity({x=0,y=0,z=0})
object:get_luaentity().physical_state = true
object:get_luaentity().object:set_properties({
physical = true,
collisionbox = {-0.17,-0.17,-0.17, 0.17,0.17,0.17},
})
end
end, {player, object})
end
end
end
end
end
end
end)]]--
function minetest.handle_node_drops(pos, drops, digger)
local inv

View File

@ -1,3 +1,34 @@
function magic.do_spell(itemstack, placer, pointed_thing)
local name
if pointed_thing.type == "object" then
return
elseif pointed_thing.type == "node" then
name = minetest.get_node(pointed_thing.under).name
else
return
end
local coincidences = magic.find_possible_recipes(pointed_thing)
if #coincidences > 0 then
for n_rec, rec in ipairs(coincidences) do
local pt = pointed_thing
if magic.check_recipe(rec, pt) then
magic.recipes[rec][2](pt, placer)
return
end
end
end
end
-----------------------------------------------------------------
-- MULTIBLOCK RECIPES -------------------------------------------
-----------------------------------------------------------------
function magic.register_recipe(name, recipe, action)
magic.recipes[name] = {recipe, action}
end
@ -5,10 +36,9 @@ end
function magic.check_recipe(recipe_id, target)
local recipe = magic.recipes[recipe_id][1]
--[[ Por alguna razón si las unifico en una lista me sobreescribe target ]]--
local posx = target.under.x
local posy = target.under.y
local posz = target.under.z
local posx = target.under.x
local posy = target.under.y
local posz = target.under.z
local reference = {x = posx - math.floor(#recipe[1][1] / 2),
y = posy - math.floor(#recipe / 2),
@ -89,3 +119,71 @@ function magic.find_possible_recipes(node)
return to_ret
end
-----------------------------------------------------------------
-- ALTAR RITUALS ------------------------------------------------
-----------------------------------------------------------------
function magic.register_ritual(name, ritual, action)
magic.rituals[name] = {ritual, action}
end
function magic.check_ritual(things)
local list = {}
--for i in ipairs(things) do
-- if list[things[i]] then
-- list[i] = list[i] + 1
-- else
-- table.insert(things, {i = 0})
-- end
--end
--
--for n, i in pairs(list) do
-- minetest.chat_send_all(n .. ", " .. i)
--end
end
-----------------------------------------------------------------
-- HOME WARP ----------------------------------------------------
-----------------------------------------------------------------
function magic.warp(player)
local playerName = player:get_player_name()
local home = magic.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
------------------------------------------------------------------------------
-- TIER REGISTERING UTILS ----------------------------------------------------
------------------------------------------------------------------------------
function magic.add_group_to_node(n, group)
local def = minetest.registered_items[n]
if not def then
return false
end
local dg = def.groups or {}
for _group, value in pairs(group) do
if value ~= 0 then
dg[_group] = value
else
dg[_group] = nil
end
end
minetest.override_item(n, {groups = dg})
return true
end
function magic.add_group(group, node_list)
for i in ipairs(node_list) do
magic.add_group_to_node(node_list[i], group)
end
end

View File

@ -0,0 +1,17 @@
function magic.altar_action(node, player)
--Comprobamos de qué rito se trata
local pos = node.under
local things = {}
for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 1)) do
if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
table.insert(things,object:get_luaentity().itemstring)
end
end
if #things > 0 then
magic.check_ritual(things)
else
minetest.chat_send_player(player:get_player_name(), "[Mod magic] The altar is empty")
end
end

View File

@ -0,0 +1,52 @@
-----------------------------------------------------------------
-- HOME WARP LOGIC ----------------------------------------------
-----------------------------------------------------------------
function magic.loadHomes()
local fh,err = io.open(magic.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]),
},
token = paramlist[5],
}
table.insert(magic.playerHomes, w)
end
fh:close()
end
function magic.saveHomes()
local fh,err = io.open(magic.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 .. " " .. magic.playerHomes[i].token .. "\n"
fh:write(s)
end
fh:close()
end
function magic.checkHome(player)
for i = 1,table.getn(magic.playerHomes) do
if magic.playerHomes[i].player == player then
return i
end
end
return -1
end

View File

@ -1,232 +0,0 @@
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]),
},
token = paramlist[5],
}
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 .. " " .. magic.playerHomes[i].token .. "\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())
local token = node.under.x .. node.under.y .. node.under.z
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}
magic.playerHomes[arrID].token = token
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("magic_referido",player:get_player_name())
meta:set_string("magic_token",token)
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("magic_referido")
local home = checkHome(s)
if home ~= -1 then
if magic.playerHomes[home].token == meta:get_string("magic_token") then
table.remove(magic.playerHomes,home)
saveHomes()
end
end
return
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

@ -1,19 +1,32 @@
-- Definitions made by this mod that other mods can use too
magic = {}
magic.recipes = {}
magic.rituals = {}
magic.playerHomes = {}
magic.path = minetest.get_modpath("magic")
magic.worldpath = minetest.get_worldpath()
-- Load files
dofile(magic.path.."/functions/homewarp.lua")
dofile(magic.path.."/functions/altar.lua")
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")
dofile(magic.path.."/spells.lua")
--[[
dofile(path.."/functions.lua")
dofile(path.."/nodes.lua")
dofile(path.."/craftitems.lua")
dofile(path.."/crafting.lua")
]]--
dofile(magic.path.."/items/wand.lua")
dofile(magic.path.."/items/home_stone.lua")
dofile(magic.path.."/nodes/magical_altar.lua")
dofile(magic.path.."/nodes/magical_cobble.lua")
dofile(magic.path.."/nodes/magical_lightbloom.lua")
dofile(magic.path.."/nodes/magical_obsidian.lua")
dofile(magic.path.."/nodes/magical_water.lua")
dofile(magic.path.."/recipes/t0_begining.lua")
dofile(magic.path.."/recipes/t1_altar.lua")
dofile(magic.path.."/recipes/t1_big_tree.lua")
dofile(magic.path.."/recipes/t1_compass.lua")
dofile(magic.path.."/recipes/t1_home_stone.lua")
dofile(magic.path.."/recipes/t1_home_warp.lua")
dofile(magic.path.."/tiers.lua")
magic.loadHomes()

View File

@ -0,0 +1,9 @@
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,
})

View File

@ -1,8 +1,6 @@
--[[
Este fichero contiene todas las declaraciones y registros que
implican a la varita
]]--
-----------------------------------------------------------------
-- WAND -------------------------------------------
-----------------------------------------------------------------
minetest.register_craftitem("magic:wand",{
description = "Magical wand",
inventory_image = "magic_wand.png",
@ -13,10 +11,20 @@ minetest.register_craftitem("magic:wand",{
end,
})
minetest.override_item("default:sapling",{
minetest.override_item("default:stick",{
liquids_pointable = true,
on_use = function(itemstack, user, pointed_thing)
})
minetest.override_item("default:leaves",{
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
if itemstack:get_name() == "default:sapling" then
if magic.check_recipe("begining", pointed_thing) then
magic.recipes["begining"][2](pointed_thing)
end
end
end,
})
--[[on_use = function(itemstack, user, pointed_thing)
if pointed_thing.type == "object" then
pointed_thing.ref:punch(user, 1.0, { full_punch_interval=1.0 }, nil)
return user:get_wielded_item()
@ -39,6 +47,10 @@ minetest.override_item("default:sapling",{
--return itemstack
end,
})
minetest.env:add_item(user:get_pos(), "magic:wand")
itemstack:take_item()
return itemstack
]]--

View File

@ -0,0 +1,28 @@
minetest.register_node("magic:magical_altar", {
description = "Magical altar",
drawtype = "nodebox",
tiles = {"altar_top.png","altar_top.png","altar_side.png"},
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -0.19, 0.5},
},
groups = {cracky = 2, stone = 1},
sounds = default.node_sound_stone_defaults(),
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
local p = pos
p.x = p.x + math.random(-4, 4)/10
p.z = p.z + math.random(-4, 4)/10
minetest.env:add_item(p, itemstack:get_name())
itemstack:take_item()
player:set_wielded_item(itemstack)
end
})
minetest.override_item("stairs:slab_stone_block",{
liquids_pointable = true,
})

View File

@ -0,0 +1,21 @@
minetest.register_node("magic:lightbloom", {
description = "Lightbloom",
drawtype = "plantlike",
waving = 1,
tiles = {"magic_lightbloom.png"},
inventory_image = "magic_lightbloom.png",
wield_image = "magic_lightbloom.png",
light_source = 15,
sunlight_propagates = true,
paramtype = "light",
walkable = false,
buildable_to = true,
stack_max = 64,
groups = {snappy = 3, flower = 1, flora = 1, attached_node = 1},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = {-2 / 16, -0.5, -2 / 16, 2 / 16, 2 / 16, 2 / 16},
}
})

View File

@ -0,0 +1,49 @@
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("magic_referido")
local home = magic.checkHome(s)
if home ~= -1 then
if magic.playerHomes[home].token == meta:get_string("magic_token") then
table.remove(magic.playerHomes,home)
magic.saveHomes()
end
end
return
end,
drop = "default:obsidian",
light_source = 5,
paramtype = "light",
groups = {cracky = 2, stone = 1},
sounds = default.node_sound_stone_defaults(),
})

View File

@ -1,5 +1,23 @@
-- Agua mágica, su cubo y la fuenta donde se puede encontrar
-----------------------------------------------------------------
-- MAGICAL WATER AND THE BUCKET ---------------------------------
-----------------------------------------------------------------
local function get_wand(pos, node, player, itemstack, pointed_thing)
local p = pos
p.y = p.y + 1
if itemstack:get_name() == "default:stick" then
minetest.env:add_item(p, "magic:wand")
itemstack:take_item()
player:set_wielded_item(itemstack)
elseif itemstack:get_name() == "stairs:slab_stone_block" then
minetest.env:add_item(p, "magic:magical_altar")
itemstack:take_item()
player:set_wielded_item(itemstack)
end
end
minetest.register_node("magic:magicalwater_source", {
description = "Magical Water Source",
drawtype = "liquid",
@ -44,6 +62,10 @@ minetest.register_node("magic:magicalwater_source", {
post_effect_color = {a = 103, r = 30, g = 60, b = 90},
groups = {water = 3, liquid = 3, puts_out_fire = 1, cools_lava = 1},
sounds = default.node_sound_water_defaults(),
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
get_wand(pos, node, player, itemstack, pointed_thing)
end,
})
minetest.register_node("magic:magicalwater_flowing", {
@ -91,6 +113,10 @@ minetest.register_node("magic:magicalwater_flowing", {
groups = {water = 3, liquid = 3, puts_out_fire = 1,
not_in_creative_inventory = 1, cools_lava = 1},
sounds = default.node_sound_water_defaults(),
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
get_wand(pos, node, player, itemstack, pointed_thing)
end,
})
bucket.register_liquid(
@ -101,24 +127,3 @@ bucket.register_liquid(
"Magical Water Bucket",
{water_bucket = 1}
)
--[[minetest.register_decoration({
deco_type = "schematic",
place_on = {"default:dirt_with_grass"},
sidelen = 16,
noise_params = {
offset = -0.0003,
scale = 0.0009,
spread = {x = 200, y = 200, z = 200},
seed = 230,
octaves = 3,
persist = 0.6
},
biomes = {"rainforest", "deciduous_forest"},
y_min = 1,
y_max = 31000,
schematic = minetest.get_modpath("magic") .. "/schems/magical_font.mts",
flags = "place_center_x",
rotation = "random",
})
]]--

View File

@ -0,0 +1,25 @@
-----------------------------------------------------------------
-- BEGINING RECIPE (Creates the Magical Water Source) -----------
-----------------------------------------------------------------
magic.register_recipe("begining",
{
{
{"air", "air", "air", "default:cobble", "air", "air", "air",},
{"air", "air", "default:cobble", "default:cobble", "default:cobble", "air", "air",},
{"air", "default:cobble", "air", "default:cobble", "air", "default:cobble", "air",},
{"default:cobble", "default:cobble", "default:cobble", "default:leaves", "default:cobble", "default:cobble", "default:cobble",},
{"air", "default:cobble", "air", "default:cobble", "air", "default:cobble", "air",},
{"air", "air", "default:cobble", "default:cobble", "default:cobble", "air", "air",},
{"air", "air", "air", "default:cobble", "air", "air", "air",},
},
},
function(node)
local posx = node.under.x - 3
local posy = node.under.y
local posz = node.under.z - 3
local sch = magic.path .. "/schems/magical_font.mts"
minetest.place_schematic({x = posx, y = posy, z = posz}, sch, 0, nil, true)
end
)

View File

@ -0,0 +1,67 @@
magic.register_recipe("altar",
{
{
{"", "", "", "", "", "tier1", "tier1", "tier1", "", "", "", "", ""},
{"", "", "", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "", "", ""},
{"", "", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "", ""},
{"", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", ""},
{"", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", ""},
{"tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1"},
{"tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1"},
{"tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1"},
{"", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", ""},
{"", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", ""},
{"", "", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "", ""},
{"", "", "", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "tier1", "", "", ""},
{"", "", "", "", "", "tier1", "tier1", "tier1", "", "", "", "", ""},
},
{
{"", "", "", "", "", "default:stone_block", "air", "default:stone_block", "", "", "", "", ""},
{"", "", "", "air", "default:stone_block", "air", "air", "air", "default:stone_block", "air", "", "", ""},
{"", "", "default:stone_block", "air", "air", "air", "air", "air", "air", "air", "default:stone_block", "", ""},
{"", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", ""},
{"", "default:stone_block", "air", "air", "air", "air", "air", "air", "air", "air", "air", "default:stone_block", ""},
{"default:stone_block", "air", "air", "air", "air", "stairs:slab_stone_block", "stairs:stair_stone_block", "stairs:slab_stone_block", "air", "air", "air", "air", "default:stone_block"},
{"air", "air", "air", "air", "air", "stairs:stair_stone_block", "default:stone_block", "stairs:stair_stone_block", "air", "air", "air", "air", "air"},
{"default:stone_block", "air", "air", "air", "air", "stairs:slab_stone_block", "stairs:stair_stone_block", "stairs:slab_stone_block", "air", "air", "air", "air", "default:stone_block"},
{"", "default:stone_block", "air", "air", "air", "air", "air", "air", "air", "air", "air", "default:stone_block", ""},
{"", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", ""},
{"", "", "default:stone_block", "air", "air", "air", "air", "air", "air", "air", "default:stone_block", "", ""},
{"", "", "", "air", "default:stone_block", "air", "air", "air", "default:stone_block", "air", "", "", ""},
{"", "", "", "", "", "default:stone_block", "air", "default:stone_block", "", "", "", "", ""},
},
{
{"", "", "", "", "", "t_altar", "air", "t_altar", "", "", "", "", ""},
{"", "", "", "air", "t_altar", "air", "air", "air", "t_altar", "air", "", "", ""},
{"", "", "t_altar", "air", "air", "air", "air", "air", "air", "air", "t_altar", "", ""},
{"", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", ""},
{"", "t_altar", "air", "air", "air", "air", "air", "air", "air", "air", "air", "t_altar", ""},
{"t_altar", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", "t_altar"},
{"air", "air", "air", "air", "air", "air", "magic:magical_altar", "air", "air", "air", "air", "air", "air"},
{"t_altar", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", "t_altar"},
{"", "t_altar", "air", "air", "air", "air", "air", "air", "air", "air", "air", "t_altar", ""},
{"", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", ""},
{"", "", "t_altar", "air", "air", "air", "air", "air", "air", "air", "t_altar", "", ""},
{"", "", "", "air", "t_altar", "air", "air", "air", "t_altar", "air", "", "", ""},
{"", "", "", "", "", "t_altar", "air", "t_altar", "", "", "", "", ""},
},
{
{"", "", "", "", "", "t_altar", "t_altar", "t_altar", "", "", "", "", ""},
{"", "", "", "t_altar", "t_altar", "air", "air", "air", "t_altar", "t_altar", "", "", ""},
{"", "", "t_altar", "air", "air", "air", "air", "air", "air", "air", "t_altar", "", ""},
{"", "t_altar", "air", "air", "air", "air", "air", "air", "air", "air", "air", "t_altar", ""},
{"", "t_altar", "air", "air", "air", "air", "air", "air", "air", "air", "air", "t_altar", ""},
{"t_altar", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", "t_altar"},
{"t_altar", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", "t_altar"},
{"t_altar", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", "air", "t_altar"},
{"", "t_altar", "air", "air", "air", "air", "air", "air", "air", "air", "air", "t_altar", ""},
{"", "t_altar", "air", "air", "air", "air", "air", "air", "air", "air", "air", "t_altar", ""},
{"", "", "t_altar", "air", "air", "air", "air", "air", "air", "air", "t_altar", "", ""},
{"", "", "", "t_altar", "t_altar", "air", "air", "air", "t_altar", "t_altar", "", "", ""},
{"", "", "", "", "", "t_altar", "t_altar", "t_altar", "", "", "", "", ""},
},
},
function(node, player)
magic.altar_action(node, player)
end
)

View File

@ -0,0 +1,29 @@
-----------------------------------------------------------------
-- BIG TREE RECIPE ----------------------------------------------
-----------------------------------------------------------------
-- ToDo: Spawn different trees for different randomly and
-- different type of tree for different type of sappling
magic.register_recipe("big_tree",
{
{
{"default:dirt_with_grass", "field", "default:dirt_with_grass",},
{"field", "", "field",},
{"field", "default:dirt_with_grass", "field",},
},
{
{"air", "air", "air",},
{"air", "default:sapling", "air",},
{"air", "air", "air",},
},
},
function(node)
local posx = node.under.x - 5
local posy = node.under.y
local posz = node.under.z - 7
local sch = magic.path .. "/schems/magical_big_tree.mts"
minetest.place_schematic({x = posx, y = posy, z = posz}, sch, 0, nil, true)
end
)

View File

@ -0,0 +1,33 @@
-----------------------------------------------------------------
-- COMPASS RECIPE -----------------------------------------------
-----------------------------------------------------------------
magic.register_recipe("compass",
{
{
{"tier1", "air", "tier1",},
{"air", "tier1", "air",},
{"tier1", "air", "tier1",},
},
},
function(node)
local posx = node.under.x
local posy = node.under.y
local posz = node.under.z
local nod = minetest.get_node({x = posx - 1, y = posy, z = posz + 1})
minetest.set_node({x = posx - 1, y = posy, z = posz}, {name = nod.name})
minetest.set_node({x = posx - 1, y = posy, z = posz + 1}, {name = "air"})
nod = minetest.get_node({x = posx + 1, y = posy, z = posz + 1})
minetest.set_node({x = posx + 1, y = posy, z = posz}, {name = nod.name})
minetest.set_node({x = posx + 1, y = posy, z = posz + 1}, {name = "air"})
nod = minetest.get_node(node.under)
minetest.set_node({x = posx, y = posy, z = posz + 1}, {name = nod.name})
minetest.set_node({x = posx, y = posy, z = posz}, {name = "air"})
--local sch = magic.path .. "/schems/compass.mts"
--minetest.place_schematic({x = posx, y = posy, z = posz}, sch, 0, nil, true)
end
)

View File

@ -0,0 +1,58 @@
-----------------------------------------------------------------
-- HOME STONE RECIPE --------------------------------------------
-----------------------------------------------------------------
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
)

View File

@ -0,0 +1,56 @@
-----------------------------------------------------------------
-- HOME WARP RECIPE ---------------------------------------------
-----------------------------------------------------------------
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 = magic.checkHome(player:get_player_name())
local token = node.under.x .. node.under.y .. node.under.z
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}
magic.playerHomes[arrID].token = token
magic.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("magic_referido",player:get_player_name())
meta:set_string("magic_token",token)
end
j = j + 1
end
j = -2
i = i + 1
end
end
)

View File

@ -1,91 +0,0 @@
-- Hechizos
function magic.do_spell(itemstack, placer, pointed_thing)
local name
if pointed_thing.type == "object" then
return
elseif pointed_thing.type == "node" then
name = minetest.get_node(pointed_thing.under).name
else
return
end
local coincidences = magic.find_possible_recipes(pointed_thing)
if #coincidences > 0 then
for n_rec, rec in ipairs(coincidences) do
local pt = 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, placer)
end
end
end
end
magic.register_recipe("begining",
{
{
{"air", "air", "air", "default:cobble", "air", "air", "air",},
{"air", "air", "default:cobble", "default:cobble", "default:cobble", "air", "air",},
{"air", "default:cobble", "air", "default:cobble", "air", "default:cobble", "air",},
{"default:cobble", "default:cobble", "default:cobble", "default:leaves", "default:cobble", "default:cobble", "default:cobble",},
{"air", "default:cobble", "air", "default:cobble", "air", "default:cobble", "air",},
{"air", "air", "default:cobble", "default:cobble", "default:cobble", "air", "air",},
{"air", "air", "air", "default:cobble", "air", "air", "air",},
},
},
function(node)
local posx = node.under.x - 3
local posy = node.under.y
local posz = node.under.z - 3
local sch = magic.path .. "/schems/magical_font.mts"
minetest.place_schematic({x = posx, y = posy, z = posz}, sch, 0, nil, true)
end
)
magic.register_recipe("big_tree",
{
{
{"default:dirt_with_grass", "field", "default:dirt_with_grass",},
{"field", "", "field",},
{"field", "default:dirt_with_grass", "field",},
},
{
{"air", "air", "air",},
{"air", "default:sapling", "air",},
{"air", "air", "air",},
},
},
function(node)
local posx = node.under.x - 5
local posy = node.under.y
local posz = node.under.z - 7
local sch = magic.path .. "/schems/magical_big_tree.mts"
minetest.place_schematic({x = posx, y = posy, z = posz}, sch, 0, nil, true)
end
)
magic.register_recipe("compass",
{
{
{"default:cobble", "air", "default:cobble",},
{"air", "default:cobble", "air",},
{"default:cobble", "air", "default:cobble",},
},
},
function(node)
local posx = node.under.x - 1
local posy = node.under.y
local posz = node.under.z - 1
local sch = magic.path .. "/schems/compass.mts"
minetest.place_schematic({x = posx, y = posy, z = posz}, sch, 0, nil, true)
end
)

Binary file not shown.

After

Width:  |  Height:  |  Size: 735 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

9
mods/magic/tiers.lua Normal file
View File

@ -0,0 +1,9 @@
magic.add_group(
{tier1 = 1},
{"default:stone", "default:cobble", "default:stonebrick", "default:stone_block", "default:mossycobble", "default:desert_stone", "default:desert_cobble", "default:desert_stonebrick", "default:desert_stone_block", "default:sandstone", "default:sandstonebrick", "default:sandstone_block", "default:dirt", "default:dirt_with_grass", "default:dirt_with_grass_footsteps", "default:dirt_with_dry_grass", "default:sand", "default:desert_sand", "default:silver_sand", "default:gravel", "default:clay"}
)
magic.add_group(
{t_altar = 1},
{"default:stone", "default:cobble", "default:mossycobble"}
)