Added spawn for the mobs in Morlendor

master^2
npx 2016-11-22 23:54:52 +01:00
parent dc21e3e631
commit 857a7a5b4b
4 changed files with 249 additions and 214 deletions

View File

@ -3,3 +3,4 @@ nssb = {}
local path = minetest.get_modpath("nssb")
dofile(path.."/nodes.lua")
dofile(path.."/mapgen.lua")
dofile(path.."/spawn.lua")

View File

@ -1,4 +1,5 @@
local moreores
firstplayer = 0
if minetest.get_modpath("moreores") then
moreores=true
end
@ -9,7 +10,6 @@ if (nssb.mymapgenis~=6) and (nssb.mymapgenis~=7) then
end
--schematichs generation
local already_spawned = 0
local posplace = {x=0, y=-30093, z=0}
local posmemory = {x=0, y=-30092, z=0}
local postest = {x=5, y=-30091, z=6}
@ -219,218 +219,12 @@ nssb_register_buildings ('blocohouse', 4, "default:stone", 0, "air", 0, "air",
nssb_register_buildings ('bigblocohouse', 4, "default:stone", 0, "air", 0, "air", 3, "default:stone", 5, true, -20, false, false, false)
nssb_register_buildings ('blocobiggesthouse', 4, "default:stone", 0, "air", 0, "air", 3, "default:stone", 5, true, -30, false, false, false)
minetest.register_abm({
nodenames = {"default:torch"},
neighbors = {"nssb:morentir","nssb:morkemen"},
interval = 1.0,
chance = 1,
action = function(pos, node)
minetest.set_node({x = pos.x, y = pos.y , z = pos.z}, {name = "nssb:mornar"})
end
})
minetest.register_abm({
nodenames = {"nssb:morlote"},
neighbors = {"air"},
interval = 60,
chance = 100,
action =
function(pos, node)
local pos1 = {x=pos.x, y=pos.y+1, z=pos.z}
local n = minetest.env:get_node(pos1).name
if n ~= "air" then
return
end
minetest.add_entity(pos1, "nssm:morgre")
minetest.remove_node(pos)
end
})
minetest.register_abm({
nodenames = {"nssb:fall_morentir"},
neighbors = {"nssb:fall_morentir"},
interval = 1,
chance = 1,
action =
function(pos, node)
for _,obj in ipairs(minetest.get_objects_inside_radius(pos, 7)) do
if obj:is_player() then
nodeupdate(pos)
end
end
end
})
minetest.register_abm({
nodenames = {"nssb:boum_morentir"},
neighbors = {"nssb:morentir"},
interval = 1,
chance = 1,
action =
function(pos, node)
for _,obj in ipairs(minetest.get_objects_inside_radius(pos, 5)) do
if obj:is_player() then
explosion(pos, 3, 0, 1)
end
end
end
})
minetest.register_abm({
nodenames = {"nssb:mornen", "nssb:mornen_flowing"},
neighbors = {"air"},
interval = 1.0,
chance = 5,
action =
function (pos, node)
minetest.add_particlespawner({
amount = 1,
time = 2,
minpos = {x=pos.x-0.5, y=pos.y+0.5, z=pos.z-0.5},
maxpos = {x=pos.x+0.5, y=pos.y+0.5, z=pos.z+0.5},
minvel = {x=0, y=0.1, z=0},
maxvel = {x=0, y=0.3, z=0},
minacc = {x=0,y=0,z=0},
maxacc = {x=0,y=0,z=0},
minexptime = 1,
maxexptime = 1.2,
minsize = 0.5,
maxsize = 0.7,
collisiondetection = false,
vertical = true,
texture = "morparticle.png",
})
end
})
minetest.register_abm({
nodenames = {"nssb:portal"},
neighbors = {"air"},
interval = 1,
chance = 1,
action =
function (pos, node)
minetest.add_particlespawner({
amount = 3,
time = 1,
minpos = {x=pos.x-0.5, y=pos.y+0.5, z=pos.z-0.5},
maxpos = {x=pos.x+0.5, y=pos.y+0.5, z=pos.z+0.5},
minvel = {x=0, y=0.1, z=0},
maxvel = {x=0, y=0.8, z=0},
minacc = {x=0,y=0,z=0},
maxacc = {x=0,y=0.4,z=0},
minexptime = 1,
maxexptime = 3,
minsize = 0.5,
maxsize = 1.4,
collisiondetection = false,
vertical = true,
texture = "morparticle.png",
})
end
})
minetest.register_abm({
nodenames = {"nssb:portal"},
neighbors = {"air"},
interval = 7,
chance = 1,
action =
function (pos, node)
for _,obj in ipairs(minetest.get_objects_inside_radius(pos, 1)) do
if obj:is_player() then
local pos1 = posmemory
local meta = minetest.get_meta(pos1)
--the timer is saved inside a position because for me the tonumber function doesn't work
local timer_pos = minetest.string_to_pos(meta:get_string("player_timer"..obj:get_player_name()))
if not timer_pos or ((timer_pos) and ((os.time() - timer_pos.x) >= 30)) then
local posp = obj:getpos()
--minetest.chat_send_all("Posizione: "..minetest.pos_to_string(posp))
obj:setpos({x=5, y=pos1.y+2, z =5})
meta:set_string("player"..obj:get_player_name(), minetest.pos_to_string(posp))
timer_pos = {x=os.time(), y = 0, z = 0}
meta:set_string("player_timer"..obj:get_player_name(), minetest.pos_to_string(timer_pos))
end
end
end
end
})
minetest.register_abm({
nodenames = {"nssb:portalhome"},
neighbors = {"air"},
interval = 1,
chance = 1,
action =
function (pos, node)
minetest.add_particlespawner({
amount = 3,
time = 1,
minpos = {x=pos.x-0.5, y=pos.y+0.5, z=pos.z-0.5},
maxpos = {x=pos.x+0.5, y=pos.y+0.5, z=pos.z+0.5},
minvel = {x=0, y=0.1, z=0},
maxvel = {x=0, y=0.8, z=0},
minacc = {x=0,y=0,z=0},
maxacc = {x=0,y=0.4,z=0},
minexptime = 1,
maxexptime = 3,
minsize = 0.5,
maxsize = 1.4,
collisiondetection = false,
vertical = true,
texture = "earth_particle.png",
})
end
})
minetest.register_abm({
nodenames = {"nssb:portalhome"},
neighbors = {"air"},
interval = 7,
chance = 2,
action =
function (pos, node)
for _,obj in ipairs(minetest.get_objects_inside_radius(pos, 1)) do
if obj:is_player() then
local pos1 = posmemory
local meta = minetest.get_meta(pos1)
--the timer is saved inside a position because for me the tonumber function doesn't work
local timer_pos = minetest.string_to_pos(meta:get_string("player_timer"..obj:get_player_name()))
if not timer_pos or ((timer_pos) and ((os.time() - timer_pos.x) >= 30)) then
local name = minetest.env:get_node(pos1).name
local target = minetest.string_to_pos(meta:get_string("player"..obj:get_player_name()))
if target then
obj:setpos({x = target.x, y=target.y+1, z=target.z})
timer_pos = {x=os.time(), y = 0, z = 0}
meta:set_string("player_timer"..obj:get_player_name(), minetest.pos_to_string(timer_pos))
end
end
end
end
end
})
minetest.register_abm({
nodenames = {"nssb:portalhome"},
neighbors = {"air"},
interval = 1,
chance = 1,
action =
function (pos, node)
if (already_spawned <= 5) then
already_spawned = already_spawned+1
minetest.place_schematic(posplace, minetest.get_modpath("nssb").."/schems/memoportal.mts", "0", {}, true)
end
end
})
--nodes gen
--This dimension is "divided" in in 7 layer.
@ -760,7 +554,7 @@ minetest.register_ore({
ore_type = "scatter",
ore = "nssm:morwa_statue",
wherein = "air",
clust_scarcity = 20*20*20,
clust_scarcity = 18*18*18,
clust_num_ores = 1,
clust_size = 1,
y_min = -30094,
@ -932,8 +726,6 @@ if posplace then
end
minetest.after(5, function(posplace)
minetest.place_schematic(posplace, minetest.get_modpath("nssb").."/schems/memoportal.mts", 0, {}, true)
-- minetest.place_schematic(posplace, minetest.get_modpath("nssb").."/schems/memoportal.mts", "0", {}, true)
minetest.chat_send_all("3")
end, posplace)
end
@ -1001,9 +793,8 @@ minetest.register_abm({
end
})
]]
--[[
minetest.register_abm({
nodenames = {"default:lava_source"},
nodenames = {"default:lava_source", "default:lava_flowing"},
neighbors = {"air"},
interval = 1.0,
chance = 1,
@ -1013,7 +804,24 @@ minetest.register_abm({
end
end
})
]]
--If the generated chunks of map are in Morlendor remove the lava_source nodes
--[[
minetest.register_on_generated(function(minp, maxp, seed)
if maxp.y > -30000 then
if minp.y < -3000 then
maxp.y = -30000
else
return
end
end
minetest.chat_send_all("Ciao sono qui")
local poslist = minetest.find_nodes_in_area(minp,maxp,"default:lava_source")
for _,v in pairs(poslist) do
minetest.chat_send_all("Posizione: "..pos_to_string)
minetest.remove_node(v)
end
end)
]]--
--[[
minetest.register_abm({
nodenames = {"default:water_source"},
@ -1025,3 +833,212 @@ minetest.register_abm({
end
})
]]
--Abm
function enableabms()
minetest.after(180, function()
minetest.register_abm({
nodenames = {"default:torch"},
neighbors = {"nssb:morentir","nssb:morkemen"},
interval = 1.0,
chance = 1,
action = function(pos, node)
minetest.set_node({x = pos.x, y = pos.y , z = pos.z}, {name = "nssb:mornar"})
end
})
minetest.register_abm({
nodenames = {"nssb:morlote"},
neighbors = {"air"},
interval = 60,
chance = 100,
action =
function(pos, node)
local pos1 = {x=pos.x, y=pos.y+1, z=pos.z}
local n = minetest.env:get_node(pos1).name
if n ~= "air" then
return
end
minetest.add_entity(pos1, "nssm:morgre")
minetest.remove_node(pos)
end
})
minetest.register_abm({
nodenames = {"nssb:fall_morentir"},
neighbors = {"nssb:fall_morentir"},
interval = 1,
chance = 1,
action =
function(pos, node)
for _,obj in ipairs(minetest.get_objects_inside_radius(pos, 7)) do
if obj:is_player() then
nodeupdate(pos)
end
end
end
})
minetest.register_abm({
nodenames = {"nssb:boum_morentir"},
neighbors = {"nssb:morentir"},
interval = 1,
chance = 1,
action =
function(pos, node)
for _,obj in ipairs(minetest.get_objects_inside_radius(pos, 5)) do
if obj:is_player() then
explosion(pos, 3, 0, 1)
end
end
end
})
minetest.register_abm({
nodenames = {"nssb:mornen", "nssb:mornen_flowing"},
neighbors = {"air"},
interval = 1.0,
chance = 5,
action =
function (pos, node)
minetest.add_particlespawner({
amount = 1,
time = 2,
minpos = {x=pos.x-0.5, y=pos.y+0.5, z=pos.z-0.5},
maxpos = {x=pos.x+0.5, y=pos.y+0.5, z=pos.z+0.5},
minvel = {x=0, y=0.1, z=0},
maxvel = {x=0, y=0.3, z=0},
minacc = {x=0,y=0,z=0},
maxacc = {x=0,y=0,z=0},
minexptime = 1,
maxexptime = 1.2,
minsize = 0.5,
maxsize = 0.7,
collisiondetection = false,
vertical = true,
texture = "morparticle.png",
})
end
})
minetest.chat_send_all("enableabms")
end)
end
minetest.register_abm({
nodenames = {"nssb:portal"},
neighbors = {"air"},
interval = 1,
chance = 1,
action =
function (pos, node)
minetest.add_particlespawner({
amount = 3,
time = 1,
minpos = {x=pos.x-0.5, y=pos.y+0.5, z=pos.z-0.5},
maxpos = {x=pos.x+0.5, y=pos.y+0.5, z=pos.z+0.5},
minvel = {x=0, y=0.1, z=0},
maxvel = {x=0, y=0.8, z=0},
minacc = {x=0,y=0,z=0},
maxacc = {x=0,y=0.4,z=0},
minexptime = 1,
maxexptime = 3,
minsize = 0.5,
maxsize = 1.4,
collisiondetection = false,
vertical = true,
texture = "morparticle.png",
})
end
})
minetest.register_abm({
nodenames = {"nssb:portal"},
neighbors = {"air"},
interval = 7,
chance = 1,
action =
function (pos, node)
for _,obj in ipairs(minetest.get_objects_inside_radius(pos, 1)) do
if obj:is_player() then
local pos1 = posmemory
local meta = minetest.get_meta(pos1)
--the timer is saved inside a position because for me the tonumber function doesn't work
local timer_pos = minetest.string_to_pos(meta:get_string("player_timer"..obj:get_player_name()))
if not timer_pos or ((timer_pos) and ((os.time() - timer_pos.x) >= 30)) then
local posp = obj:getpos()
--minetest.chat_send_all("Posizione: "..minetest.pos_to_string(posp))
obj:setpos({x=5, y=pos1.y+2, z =5})
if firstplayer == 0 then
minetest.chat_send_all("Avvio il timer. firstplayer= "..firstplayer)
enablespawns()
minetest.chat_send_all("Tra le funzioni. firstplayer= "..firstplayer)
enableabms()
minetest.chat_send_all("Dopo le funzioni. Firstplayer= "..firstplayer)
end
meta:set_string("player"..obj:get_player_name(), minetest.pos_to_string(posp))
timer_pos = {x=os.time(), y = 0, z = 0}
meta:set_string("player_timer"..obj:get_player_name(), minetest.pos_to_string(timer_pos))
end
end
end
end
})
minetest.register_abm({
nodenames = {"nssb:portalhome"},
neighbors = {"air"},
interval = 1,
chance = 1,
action =
function (pos, node)
minetest.add_particlespawner({
amount = 3,
time = 1,
minpos = {x=pos.x-0.5, y=pos.y+0.5, z=pos.z-0.5},
maxpos = {x=pos.x+0.5, y=pos.y+0.5, z=pos.z+0.5},
minvel = {x=0, y=0.1, z=0},
maxvel = {x=0, y=0.8, z=0},
minacc = {x=0,y=0,z=0},
maxacc = {x=0,y=0.4,z=0},
minexptime = 1,
maxexptime = 3,
minsize = 0.5,
maxsize = 1.4,
collisiondetection = false,
vertical = true,
texture = "earth_particle.png",
})
end
})
minetest.register_abm({
nodenames = {"nssb:portalhome"},
neighbors = {"air"},
interval = 7,
chance = 2,
action =
function (pos, node)
for _,obj in ipairs(minetest.get_objects_inside_radius(pos, 1)) do
if obj:is_player() then
local pos1 = posmemory
local meta = minetest.get_meta(pos1)
--the timer is saved inside a position because for me the tonumber function doesn't work
local timer_pos = minetest.string_to_pos(meta:get_string("player_timer"..obj:get_player_name()))
if not timer_pos or ((timer_pos) and ((os.time() - timer_pos.x) >= 30)) then
local name = minetest.env:get_node(pos1).name
local target = minetest.string_to_pos(meta:get_string("player"..obj:get_player_name()))
if target then
obj:setpos({x = target.x, y=target.y+1, z=target.z})
timer_pos = {x=os.time(), y = 0, z = 0}
meta:set_string("player_timer"..obj:get_player_name(), minetest.pos_to_string(timer_pos))
end
end
end
end
end
})

View File

@ -582,7 +582,7 @@ minetest.register_node("nssb:mornen", {
liquid_alternative_source = "nssb:mornen",
liquid_viscosity = 6,
post_effect_color = {a=500, r=1, g=1, b=1},
groups = {liquid=3, water=1, puts_out_fire=1},
groups = {liquid=3, puts_out_fire=1},
})
minetest.register_node("nssb:mornen_flowing", {

17
spawn.lua Normal file
View File

@ -0,0 +1,17 @@
local mm = nssm.multimobs
function enablespawns()
minetest.after(180, function()
mobs:spawn_specific("nssm:morbat1", {"air"}, {"nssb:morelentir"}, 0, 20, 100, 20000000/mm, 1, -31000, 0)
mobs:spawn_specific("nssm:morbat2", {"air"}, {"nssb:morelentir"}, 0, 20, 100, 20000000/mm, 1, -31000, 0)
mobs:spawn_specific("nssm:morbat3", {"air"}, {"nssb:morelentir"}, 0, 20, 100, 20000000/mm, 1, -31000, 0)
mobs:spawn_specific("nssm:morvy", {"nssb:morentir"}, {"nssb:morentir"}, 0, 20, 120, 18000000/mm, 1, -31000, -93)
mobs:spawn_specific("nssm:morlu", {"nssb:morentir"}, {"nssb:mornen"}, 0, 20, 80, 1200000/mm, 1, -31000, -93)
mobs:spawn_specific("nssm:morde", {"nssb:morenrir"}, {"nssb:mornar"}, 0, 20, 50, 350000/mm, 1, -31000, -93)
mobs:spawn_specific("nssm:mordain", {"nssb:morentir"}, {"nssb:morentir"}, 0, 20, 90, 15000000/mm, 1, -31000, .93)
mobs:spawn_specific("nssm:morgut", {"nssb:morentir"}, {"nssb:morentir"}, 0, 20, 50, 15000000/mm, 1, -31000, -93)
firstplayer=1
minetest.chat_send_all("Enablespawns")
end
)
end