LolManKuba wrote:I know your asking Calinou, but I have the link: http://minetest.net/forum/viewtopic.php?id=549&p=4
minetest.register_on_generated(function(minp, maxp, seed)
local copper_perlin = minetest.env:get_perlin(471, 3, 0.6, 200)
generate_ore_perlin("moreores:mineral_copper", "default:stone", minp, maxp, seed+16, 1/8/8/8, 6, -31000, 64, copper_perlin, 0.2)
local tin_perlin = minetest.env:get_perlin(472, 3, 0.6, 200)
generate_ore_perlin("moreores:mineral_tin", "default:stone", minp, maxp, seed+17, 1/10/10/10, 5, -31000, 64, tin_perlin, 0.3)
end)
local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, ore_per_chunk, height_min, height_max)
if maxp.y < height_min or minp.y > height_max then
return
end
local y_min = math.max(minp.y, height_min)
local y_max = math.min(maxp.y, height_max)
local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1)
local pr = PseudoRandom(seed)
local num_chunks = math.floor(chunks_per_volume * volume)
local chunk_size = 3
if ore_per_chunk <= 4 then
chunk_size = 2
end
local inverse_chance = math.floor(chunk_size*chunk_size*chunk_size / ore_per_chunk)
--print("generate_ore num_chunks: "..dump(num_chunks))
for i=1,num_chunks do
local y0 = pr:next(y_min, y_max-chunk_size+1)
if y0 >= height_min and y0 <= height_max then
local x0 = pr:next(minp.x, maxp.x-chunk_size+1)
local z0 = pr:next(minp.z, maxp.z-chunk_size+1)
local p0 = {x=x0, y=y0, z=z0}
for x1=0,chunk_size-1 do
for y1=0,chunk_size-1 do
for z1=0,chunk_size-1 do
if pr:next(1,inverse_chance) == 1 then
local x2 = x0+x1
local y2 = y0+y1
local z2 = z0+z1
local p2 = {x=x2, y=y2, z=z2}
if minetest.env:get_node(p2).name == wherein then
minetest.env:set_node(p2, {name=name})
end
end
end
end
end
end
end
--print("generate_ore done")
end
minetest.register_on_generated(function(minp, maxp, seed)
generate_ore("MOD_NAME:NODE_NAME", "default:stone", minp, maxp, seed+16, 1/X_SIZE/Y_SIZE/Z_SIZE, ORE_PER_X_Y_Z_CHUNK, MAX_DEPTH, MIN_DEPTH)
end)
MOD_NAME: your mod's name.
NODE_NAME: the node (block)'s name to generate, inside stone.
X_SIZE/Y_SIZE/Z_SIZE: defines the size of the ore veins.
ORE_PER_X_Y_Z_CHUNK: defines the chance per chunk (see X_SIZE/Y_SIZE/Z_SIZE).
MAX_DEPTH: maximal depth (no limit: -31000, 0 is sea level)
MIN_DEPTH: minimal depth (no limit: 31000, 0 is sea level)
Calinou wrote:No, you also have to copy the local ore generation function. Example:Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
- Code: Select all
local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, ore_per_chunk, height_min, height_max)
if maxp.y < height_min or minp.y > height_max then
return
end
local y_min = math.max(minp.y, height_min)
local y_max = math.min(maxp.y, height_max)
local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1)
local pr = PseudoRandom(seed)
local num_chunks = math.floor(chunks_per_volume * volume)
local chunk_size = 3
if ore_per_chunk <= 4 then
chunk_size = 2
end
local inverse_chance = math.floor(chunk_size*chunk_size*chunk_size / ore_per_chunk)
--print("generate_ore num_chunks: "..dump(num_chunks))
for i=1,num_chunks do
local y0 = pr:next(y_min, y_max-chunk_size+1)
if y0 >= height_min and y0 <= height_max then
local x0 = pr:next(minp.x, maxp.x-chunk_size+1)
local z0 = pr:next(minp.z, maxp.z-chunk_size+1)
local p0 = {x=x0, y=y0, z=z0}
for x1=0,chunk_size-1 do
for y1=0,chunk_size-1 do
for z1=0,chunk_size-1 do
if pr:next(1,inverse_chance) == 1 then
local x2 = x0+x1
local y2 = y0+y1
local z2 = z0+z1
local p2 = {x=x2, y=y2, z=z2}
if minetest.env:get_node(p2).name == wherein then
minetest.env:set_node(p2, {name=name})
end
end
end
end
end
end
end
--print("generate_ore done")
end
minetest.register_on_generated(function(minp, maxp, seed)
generate_ore("MOD_NAME:NODE_NAME", "default:stone", minp, maxp, seed+16, 1/X_SIZE/Y_SIZE/Z_SIZE, ORE_PER_X_Y_Z_CHUNK, MAX_DEPTH, MIN_DEPTH)
end)
MOD_NAME: your mod's name.
NODE_NAME: the node (block)'s name to generate, inside stone.
X_SIZE/Y_SIZE/Z_SIZE: defines the size of the ore veins.
ORE_PER_X_Y_Z_CHUNK: defines the chance per chunk (see X_SIZE/Y_SIZE/Z_SIZE).
MAX_DEPTH: maximal depth (no limit: -31000, 0 is sea level)
MIN_DEPTH: minimal depth (no limit: 31000, 0 is sea level)
Users browsing this forum: No registered users and 7 guests