Add files via upload

master
AiTechEye 2018-06-26 09:04:10 +02:00 committed by GitHub
parent c4895e2086
commit 7330794ecb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 566 additions and 0 deletions

View File

@ -0,0 +1,2 @@
default
aliveai

1
aliveai_pyramid/info.txt Normal file
View File

@ -0,0 +1 @@
pyramids for aliveai

506
aliveai_pyramid/init.lua Normal file
View File

@ -0,0 +1,506 @@
aliveai_pyramid={
max_size=10,
treasures={
"default:diamond",
"default:gold_ingot",
"default:steel_ingot",
"default:mese_crystal",
"default:coalblock",
"default:obsidian",
"",
"",
"",
"",
"",
}
}
aliveai.create_bot({
attack_players=1,
name="mummy",
team="pyramid",
texture="aliveai_pyramid_mummy.png",
attacking=1,
talking=0,
light=-1,
building=0,
escape=0,
type="monster",
dmg=2,
hp=100,
name_color="",
arm=2,
smartfight=0,
damage_by_blocks=0,
spawn_on={"aliveai_pyramid:stone2"},
on_punched=function(self,puncher)
self.hp=self.hp_max
end,
on_load=function(self)
self.move.speed=0.2
end,
spawn=function(self)
self.move.speed=0.2
end,
})
minetest.register_tool("aliveai_pyramid:spawner", {
description = "pyramid spawner",
range=15,
groups={not_in_creative_inventory=1},
inventory_image = "default_stick.png",
on_use = function(itemstack, user, pointed_thing)
if pointed_thing.type=="node" then
aliveai_pyramid.gen(pointed_thing.above)
end
end,
})
minetest.register_ore({
ore_type = "scatter",
ore = "aliveai_pyramid:spawn",
wherein = "default:desert_sand",
clust_scarcity = 20 * 20 * 20,
clust_num_ores = 1,
clust_size = 1,
y_min = -1,
y_max = 20,
})
minetest.register_node("aliveai_pyramid:spawn", {
tiles = {"default_desert_sand.png"},
groups = {not_in_creative_inventory=1},
is_ground_content = false,
})
minetest.register_abm({
nodenames = {"aliveai_pyramid:spawn"},
neighbors={"air"},
interval = 10,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
minetest.set_node(pos,{name="default:desert_sand"})
if math.random(1,10)==1 then
aliveai_pyramid.gen(pos)
end
end
})
aliveai_pyramid.settreasure=function(pos)
minetest.place_node(pos, {name="default:chest"})
local inv=minetest.get_meta(pos):get_inventory()
local l=#aliveai_pyramid.treasures
for i=1,32 do
inv:set_stack("main",i, ItemStack(aliveai_pyramid.treasures[math.random(1,l)] .." " .. math.random(1,3)))
end
end
aliveai_pyramid.paths=function(pos,cur,count,size)
local d={1,-1}
local a={x=0,y=0,z=0}
if math.random(1,2)==1 then
a.x=d[math.random(1,2)]
else
a.z=d[math.random(1,2)]
end
local len=math.random(1,size)
local i=0
local last=cur
local w=math.random(1,2)
local aa={}
local awall=0
local n
while(count>1) do
count=count-1
i=i+1
local t1={x=cur.x+(a.x*i),y=0,z=cur.z+(a.z*i)}
if i>=len
or (a.x~=0 and (
(t1.x>size or t1.x<0)
))
or (a.z~=0 and (
(t1.z>size or t1.z<0)
))
then
i=0
cur=last
w=math.random(1,10)
if a.x~=0 then
a.x=0
a.z=d[math.random(1,2)]
else
a.z=0
a.x=d[math.random(1,2)]
end
len=math.random(1,size/2)
else
if awall>0 then
awall=awall-1
if awall<1 then n=nil end
elseif math.random(1,20)==1 then
n=math.random(1,3)
awall=math.random(1,20)
end
if not n then
aa[t1.x .. " ".. t1.y .. " " ..t1.z]=0
elseif n==1 then
aa[t1.x .. " ".. t1.y .. " " ..t1.z]=1
aa[t1.x .. " " .. (t1.y+5) .. " " .. t1.z]=1
aa[t1.x .. " " .. (t1.y+6) .. " " .. t1.z]=1
aa[t1.x .. " " .. (t1.y+7) .. " " .. t1.z]=1
aa[t1.x .. " " .. (t1.y+8) .. " " .. t1.z]=1
elseif n>1 then
aa[t1.x .. " ".. t1.y .. " " ..t1.z]=0
aa[t1.x .. " ".. (t1.y-1) .. " " ..t1.z]=n
end
last=t1
if a.x~=0 then
if w==1 or w==2 then
aa[t1.x .. " " .. t1.y .. " " .. (t1.z+1)]=0
if n==1 then
aa[t1.x .. " " .. t1.y .. " " .. (t1.z+2)]=1
aa[t1.x .. " " .. (t1.y+5) .. " " .. (t1.z+1)]=1
aa[t1.x .. " " .. (t1.y+6) .. " " .. (t1.z+1)]=1
aa[t1.x .. " " .. (t1.y+7) .. " " .. (t1.z+1)]=1
aa[t1.x .. " " .. (t1.y+8) .. " " .. (t1.z+1)]=1
elseif n and n>1 then
aa[t1.x .. " " .. (t1.y-1) .. " " .. (t1.z+1)]=n
end
end
if w==1 or w==3 then
aa[t1.x .. " " .. t1.y .. " " .. (t1.z-1)]=0
if n==1 then
aa[t1.x .. " " .. t1.y .. " " .. (t1.z-2)]=1
aa[t1.x .. " " .. (t1.y+5) .. " " .. (t1.z-1)]=1
aa[t1.x .. " " .. (t1.y+6) .. " " .. (t1.z-1)]=1
aa[t1.x .. " " .. (t1.y+7) .. " " .. (t1.z-1)]=1
aa[t1.x .. " " .. (t1.y+8) .. " " .. (t1.z-1)]=1
elseif n and n>1 then
aa[t1.x .. " " .. (t1.y-1) .. " " .. (t1.z-1)]=n
end
end
else
if w==1 or w==2 then
aa[(t1.x+1) .. " " .. t1.y .. " " .. t1.z]=0
if n==1 then
aa[(t1.x+2) .. " " .. t1.y .. " " .. t1.z]=1
aa[(t1.x+1) .. " " .. (t1.y+5) .. " " .. t1.z]=1
aa[(t1.x+1) .. " " .. (t1.y+6) .. " " .. t1.z]=1
aa[(t1.x+1) .. " " .. (t1.y+7) .. " " .. t1.z]=1
aa[(t1.x+1) .. " " .. (t1.y+8) .. " " .. t1.z]=1
elseif n and n>1 then
aa[(t1.x+1) .. " " .. (t1.y-1) .. " " .. t1.z]=n
end
end
if w==1 or w==2 then
aa[(t1.x-1) .. " " .. t1.y .. " " .. t1.z]=0
if n==1 then
aa[(t1.x-2) .. " " .. t1.y .. " " .. t1.z]=1
aa[(t1.x-1) .. " " .. (t1.y+5) .. " " .. t1.z]=1
aa[(t1.x-1) .. " " .. (t1.y+6) .. " " .. t1.z]=1
aa[(t1.x-1) .. " " .. (t1.y+7) .. " " .. t1.z]=1
aa[(t1.x-1) .. " " .. (t1.y+8) .. " " .. t1.z]=1
elseif n and n>1 then
aa[(t1.x-1) .. " " .. (t1.y-1) .. " " .. t1.z]=n
end
end
end
end
end
return aa
end
aliveai_pyramid.rooms=function(a,size)
local m=3000
for i=0,size/2,1 do
local x1=math.random(1,size)
local z1=math.random(1,size)
local x2=0
local z2=0
if a[(x1+1) .. " " .. 0 .. " " .. z1] or a[(x1-1) .. " " .. 0 .. " " .. z1] or a[x1 .. " " .. 0 .. " " .. (z1+1)] or a[x1 .. " " .. 0 .. " " .. (z1-1)]
or a[(x1+2) .. " " .. 0 .. " " .. z1] or a[(x1-2) .. " " .. 0 .. " " .. z1] or a[x1 .. " " .. 0 .. " " .. (z1+2)] or a[x1 .. " " .. 0 .. " " .. (z1-2)]
then
z2=size
end
while(z2<size and m>1) do
m=m-1
local x=x1+x2
local z=z1+z2
local t=x .. " " .. 0 .. " " .. z
if not a[t] and not a[(x+3) .. " " .. 0 .. " " .. z] then
if math.random(1,size)==1 then
a[z .. " " .. 1 .. " " .. z]=4
end
a[t]=0
x2=x2+1
else
x2=0
z2=z2+1
if a[x .. " " .. 0 .. " " .. z] or a[x .. " " .. 0 .. " " .. (z+3)] then
z2=size
end
end
end
end
return a
end
aliveai_pyramid.set=function(pos,a,size,yy)
local n
local a2
for y=yy,8,1 do
for x=0,size,1 do
for z=0,size,1 do
a2=a[x .." " .. y .. " " .. z]
if y>0 and not a2 then
a2=a[x .." " .. 0 .. " " .. z]
end
if (a2==0 or a2==4) and y>-1 and y<5 then
n="air"
elseif a2==2 then
n="aliveai_pyramid:stone1" --deep hole trap
for i=-1,-50,-1 do
minetest.set_node({x=pos.x+x,y=pos.y+y+i,z=pos.z+z},{name="air"})
end
if math.random(1,5)==1 then
n="aliveai_pyramid:stone3"
minetest.after(1, function(pos,x,y,z)
minetest.get_node_timer({x=pos.x+x,y=pos.y+y,z=pos.z+z}):start(1)
end,pos,x,y,z)
end
elseif a2==3 then
n="aliveai_pyramid:stone1" --quicksand trap
for i=-1,-10,-1 do
local d="air"
if i<-5 then
d="aliveai_pyramid:quicksand"
end
minetest.set_node({x=pos.x+x,y=pos.y+y+i,z=pos.z+z},{name=d})
end
if math.random(1,5)==1 then
n="aliveai_pyramid:stone3"
minetest.after(1, function(pos,x,y,z)
minetest.get_node_timer({x=pos.x+x,y=pos.y+y,z=pos.z+z}):start(1)
end,pos,x,y,z)
end
elseif a2==1 then
n="aliveai_pyramid:stone1" --falling trap
else
n="aliveai_pyramid:stone2"
end
minetest.set_node({x=pos.x+x,y=pos.y+y,z=pos.z+z},{name=n})
if a2==4 then
aliveai_pyramid.settreasure({x=pos.x+x,y=pos.y+y,z=pos.z+z})
elseif a2==0 and y==1 and math.random(1,size)==1 then
minetest.add_entity({x=pos.x+x,y=pos.y+y,z=pos.z+z}, "aliveai_pyramid:mummy")
end
end
end
end
end
aliveai_pyramid.gen=function(pos)
local size=math.random(3,aliveai_pyramid.max_size)*10
local test=0
for y=-3,0,1 do
for x=0,size,1 do
for z=0,size,1 do
local p={x=pos.x+x,y=pos.y+y,z=pos.z+z}
if aliveai.def(p,"walkable") then
test=test+1
end
end
end
end
if test<100*size then return end
print("aliveai: generating a pyramid [size " .. size .. "] (about" .. (( size*size*size)/2) .." will be affected), you can expect lags")
local start={
{x=size/2,z=0},
{x=size/2,z=size},
{x=0,z=size/2},
{x=size,z=size/2}
}
local rstart=math.random(1,4)
start=start[rstart]
local ostart={x=pos.x+start.x,y=pos.y,z=pos.z+start.z}
local halfor=math.random(1,2)
local cur=start
local count=math.random(size,size*(size/halfor))
local tsize=size
local yy=-1
for i=0,8,1 do
local a=aliveai_pyramid.paths(pos,cur,count,tsize)
a=aliveai_pyramid.rooms(a,tsize)
aliveai_pyramid.set(pos,a,tsize,yy)
for yo=0,8,1 do
local m=(yo-9)
for y=-1,yo,1 do
for x=-8+y,tsize+(8-y),1 do
for z=-8+y,tsize+(8-y),1 do
if (x<=m or x>=tsize-m) or (z<=m or z>=tsize-m) then
minetest.set_node({x=pos.x+x,y=pos.y+y,z=pos.z+z},{name="aliveai_pyramid:stone2"})
end
end
end
end
end
tsize=tsize-16
pos={x=pos.x+8,y=pos.y+8,z=pos.z+8}
yy=1
local start={
{x=tsize/2,z=0},
{x=tsize/2,z=tsize},
{x=0,z=tsize/2},
{x=tsize,z=tsize/2}
}
start=start[math.random(1,4)]
local halfor=math.random(1,2)
local cur=start
local count=math.random(tsize,tsize*(tsize/halfor))
end
local x2=0
local z2=0
if rstart==1 then
z2=-1
elseif rstart==2 then
z2=1
elseif rstart==3 then
x2=-1
else
x2=1
end
for y=0,3,1 do
for i=0,9,1 do
minetest.set_node({x=ostart.x+(i*x2),y=ostart.y+y,z=ostart.z+(i*z2)},{name="air"})
end
end
print("Pyramid done")
end
minetest.register_node("aliveai_pyramid:stone3", {
description = "Pyramid trigger stone",
tiles = {"default_desert_sandstone_block.png"},
groups = {falling_node=1,cracky=1,level=3},
damage_per_second =1,
sounds = default.node_sound_stone_defaults(),
is_ground_content = false,
drop="aliveai_pyramid:stone2",
on_punch = function(pos, node, puncher, pointed_thing)
minetest.check_for_falling(pos)
end,
on_timer = function (pos, elapsed)
for _, ob in ipairs(minetest.get_objects_inside_radius(pos,1.5)) do
if aliveai.team(ob)~="pyramid" then
minetest.set_node(pos,{name="aliveai_pyramid:stone1"})
minetest.check_for_falling(pos)
return false
end
end
return true
end,
})
minetest.register_node("aliveai_pyramid:stone1", {
description = "Pyramid falling stone",
tiles = {"default_desert_sandstone_block.png"},
groups = {falling_node=1,cracky=1,level=3},
damage_per_second =1,
sounds = default.node_sound_stone_defaults(),
is_ground_content = false,
drop="aliveai_pyramid:stone2",
on_punch = function(pos, node, puncher, pointed_thing)
if math.random(1,10)==1 then
minetest.remove_node(pos)
minetest.check_for_falling(pos)
end
end,
})
minetest.register_node("aliveai_pyramid:stone2", {
description = "Pyramid stone",
tiles = {"default_desert_sandstone_block.png"},
groups = {cracky=1,level=3},
sounds = default.node_sound_stone_defaults(),
is_ground_content = false,
})
minetest.register_node("aliveai_pyramid:quicksand", {
description = "Quicksand",
drawtype = "liquid",
tiles = {"default_desert_sand.png"},
paramtype = "light",
walkable = false,
buildable_to = true,
is_ground_content = false,
drowning = 1,
liquidtype = "source",
liquid_range = 0,
liquid_alternative_flowing = "aliveai_pyramid:quicksand",
liquid_alternative_source = "aliveai_pyramid:quicksand",
liquid_viscosity = 15,
post_effect_color = {a=255,r=0,g=0,b=0},
groups = {liquid = 4,crumbly = 1, sand = 1},
})
local dis={
{"Blue pyramid diamond","000088"},
{"White pyramid diamond","ffffff"},
{"Yellow pyramid diamond","aaaa00"},
{"Red pyramid diamond","aa0000"},
{"Green pyramid diamond","00aa00"},
{"Orange pyramid diamond","aa5511"},
{"Purple pyramid diamond","550055"},
{"Pink pyramid diamond","aa55aa"},
{"black pyramid diamond","111111"},
}
for i, d in ipairs(dis) do
minetest.register_node("aliveai_pyramid:diamond" .. i, {
description = d[1],
tiles = {"default_sand.png^[colorize:#" .. d[2] .. "bb"},
groups = {dig_immediate=3},
sounds = default.node_sound_stone_defaults(),
is_ground_content = false,
walkable=false,
drawtype = "mesh",
paramtype = "light",
sunlight_propagates = true,
visual_scale = 0.2,
wield_scale = {x=10, y=10, z=10},
alpha = 20,
selection_box = {type = "fixed",fixed={-0.2, -0.5, -0.2, 0.2, -0.2, 0.2}},
mesh="aliveai_pyramid_diamond.obj",
})
table.insert(aliveai_pyramid.treasures,"aliveai_pyramid:diamond" .. i)
end

View File

@ -0,0 +1,57 @@
# Blender v2.78 (sub 0) OBJ File: 'd.blend'
# www.blender.org
mtllib aliveai_pyramid_diamond.mtl
o Cone
v 0.000000 -1.371028 1.000000
v 0.707107 -1.371028 0.707107
v 1.000000 -1.371028 0.000000
v 0.707107 -1.371027 -0.707106
v -0.000000 -1.371027 -1.000000
v 0.000000 -2.438345 -0.000000
v -0.707107 -1.371027 -0.707106
v -1.000000 -1.371028 0.000000
v -0.707107 -1.371028 0.707107
v -0.000000 -1.089645 0.605255
v 0.427979 -1.089644 0.427980
v 0.605254 -1.089644 0.000000
v 0.427979 -1.089644 -0.427979
v -0.000000 -1.089644 -0.605254
v -0.427979 -1.089644 -0.427979
v -0.605254 -1.089644 0.000000
v -0.427979 -1.089644 0.427980
vn 0.2893 -0.6545 0.6985
vn 0.6985 -0.6545 0.2893
vn 0.6985 -0.6545 -0.2893
vn 0.2893 -0.6545 -0.6985
vn -0.2893 -0.6545 -0.6985
vn -0.6985 -0.6545 -0.2893
vn -0.6985 -0.6545 0.2893
vn -0.2893 -0.6545 0.6985
vn 0.5644 0.7917 -0.2338
vn 0.0000 1.0000 0.0000
vn -0.5644 0.7917 0.2338
vn 0.5644 0.7917 0.2338
vn -0.5644 0.7917 -0.2338
vn -0.2338 0.7917 -0.5644
vn -0.2338 0.7917 0.5644
vn 0.2338 0.7917 0.5644
vn 0.2338 0.7917 -0.5644
usemtl None
s off
f 1//1 6//1 2//1
f 2//2 6//2 3//2
f 3//3 6//3 4//3
f 4//4 6//4 5//4
f 5//5 6//5 7//5
f 7//6 6//6 8//6
f 8//7 6//7 9//7
f 9//8 6//8 1//8
f 3//9 4//9 13//9 12//9
f 10//10 11//10 12//10 13//10 14//10 15//10 16//10 17//10
f 8//11 9//11 17//11 16//11
f 2//12 3//12 12//12 11//12
f 7//13 8//13 16//13 15//13
f 5//14 7//14 15//14 14//14
f 9//15 1//15 10//15 17//15
f 1//16 2//16 11//16 10//16
f 4//17 5//17 14//17 13//17

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB