166 lines
4.9 KiB
Lua
166 lines
4.9 KiB
Lua
aliveai_threats.fort={furnishings={"aliveai_threats:toxic_tank","aliveai_threats:labbottle_containing","aliveai_threats:timed_bumb","aliveai_threats:timed_nitrobumb","aliveai_threat_eletric:timed_ebumb","aliveai_threats:landmine","aliveai_threats:deadlock","aliveai_massdestruction:nuclearbarrel"},}
|
|
|
|
|
|
aliveai.register_buildings_spawner("Fort",{
|
|
on_use=function(itemstack, user, pointed_thing)
|
|
if pointed_thing.type=="node" then
|
|
aliveai_threats.fort.spawning(pointed_thing.under,1)
|
|
end
|
|
end,
|
|
on_place=function(itemstack, user, pointed_thing)
|
|
end
|
|
})
|
|
|
|
aliveai.register_rndcheck_on_generated({
|
|
group="spreading_dirt_type",
|
|
node="default:snowblock",
|
|
chance=30,
|
|
mindistance=1000,
|
|
run=function(pos)
|
|
aliveai_threats.fort.spawning(pos)
|
|
end
|
|
})
|
|
|
|
aliveai_threats.fort.spawning=function(pos,nrnd)
|
|
if not nrnd then return end
|
|
local test1=0
|
|
local test2=0
|
|
|
|
for y=-5,6,1 do
|
|
for x=-5,31,1 do
|
|
for z=-5,31,1 do
|
|
local p={x=pos.x+x,y=pos.y+y,z=pos.z+z}
|
|
if nrnd and minetest.is_protected(p,"") then return end
|
|
if y<1 and aliveai.def(p,"walkable") then
|
|
test1=test1+1
|
|
elseif y>0 and aliveai.def(p,"walkable") then
|
|
test2=test2+1
|
|
|
|
if test2>3000 then return end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if test1<6000 then return end
|
|
|
|
local door=math.random(11,17)
|
|
local n
|
|
local cam
|
|
local start
|
|
for y=0,6,1 do
|
|
for x=-5,31,1 do
|
|
for z=-5,31,1 do
|
|
local p={x=pos.x+x,y=pos.y+y,z=pos.z+z}
|
|
local n="air"
|
|
local param=0
|
|
if y==0 then
|
|
n="default:silver_sandstone_brick"
|
|
elseif y==6 and ((x==9 and z==9) or (x==18 and z==18) or (x==18 and z==9) or (x==9 and z==18)) then
|
|
n="aliveai_threats:secam2"
|
|
cam=1
|
|
elseif y<5 and (x==1 or x==26 or z==1 or z==26) and (x>0 and z>0 and x<27 and z<27) then
|
|
n="aliveai_threats:chainfence"
|
|
if aliveai_electric then start=1 end
|
|
param=1
|
|
if x==1 then
|
|
param=1
|
|
elseif x==26 then
|
|
param=3
|
|
elseif z==1 then
|
|
param=2
|
|
else
|
|
param=0
|
|
end
|
|
elseif (y==1 or y==2) and (((x==door and (z==9 or z==18)) or (z==door and (x==9 or x==18))))then
|
|
if y==1 then n="aliveai:door_steel" end
|
|
elseif (y==1 or y==2) and (x==door or z==door) then
|
|
elseif (y==1 or y==2) and (((x==10 or x==17) and (z>9 and z<18)) or ((z==10 or z==17) and (x>9 and x<18))) then
|
|
if y==1 then
|
|
n="aliveai_threats:labtable"
|
|
elseif math.random(1,3)==1 then
|
|
n=aliveai_threats.fort.furnishings[math.random(1,#aliveai_threats.fort.furnishings)]
|
|
end
|
|
elseif y<5 and (((x==9 or x==18) and (z>8 and z<19)) or ((z==9 or z==18) and (x>8 and x<19))) then
|
|
n="default:silver_sandstone_brick"
|
|
elseif y==5 and (x>8 and x<19 and z>8 and z<19) then
|
|
n="default:silver_sandstone_brick"
|
|
end
|
|
|
|
if n then
|
|
minetest.set_node(p,{name=n,param2=param})
|
|
if cam then
|
|
minetest.get_meta(p):set_string("team","nuke")
|
|
minetest.get_node_timer(p):start(1)
|
|
cam=nil
|
|
elseif start then
|
|
minetest.get_node_timer(p):start(1)
|
|
start=nil
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if math.random(1,3)==1 then return end
|
|
|
|
for y=-5,0,1 do
|
|
for x=-4,30,1 do
|
|
for z=-4,30,1 do
|
|
local p={x=pos.x+x,y=pos.y+y,z=pos.z+z}
|
|
local n=nil
|
|
if y==-5 and ((x<0 or x>26) or (z<0 or z>26)) then
|
|
n="default:silver_sandstone_brick"
|
|
elseif x==-4 or x==30 or z==-4 or z==30 then
|
|
n="default:silver_sandstone_brick"
|
|
elseif (x>-4 and x<0) or (x>26 and x<30) or (z>-5 and z<0) or (z>26 and z<30) then
|
|
n="aliveai_threats:slime"
|
|
elseif x==0 or x==26 or z==0 or z==26 then
|
|
n="default:silver_sandstone_brick"
|
|
end
|
|
|
|
if n then
|
|
minetest.set_node(p,{name=n})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
minetest.register_node("aliveai_threats:chainfence", {
|
|
description = "Chain fence",
|
|
tiles = {"aliveai_threats_chainfence.png"},
|
|
drawtype = "nodebox",
|
|
groups = {cracky=1, not_in_creative_inventory=0,level=3},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
is_ground_content = false,
|
|
paramtype2 = "facedir",
|
|
paramtype = "light",
|
|
node_box = {type="fixed",fixed={-0.5,-0.5,0.45,0.5,0.5,0.5}},
|
|
on_punch = function(pos, node, puncher, pointed_thing)
|
|
if not (puncher:is_player() and minetest.get_meta(pos):get_string("owner")==puncher:get_player_name()) then
|
|
if aliveai_electric and aliveai.team(puncher)~="nuke" then
|
|
aliveai_electric.hit(puncher,20,5)
|
|
end
|
|
end
|
|
end,
|
|
after_place_node = function(pos, placer)
|
|
if placer:is_player() then
|
|
minetest.get_meta(pos):set_string("owner",placer:get_player_name())
|
|
end
|
|
end,
|
|
on_construct = function(pos)
|
|
if aliveai_electric then
|
|
minetest.get_node_timer(pos):start(5)
|
|
end
|
|
end,
|
|
on_timer = function (pos, elapsed)
|
|
if math.random(1,4)~=1 then return true end
|
|
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 2)) do
|
|
if aliveai.team(ob)~="nuke" then
|
|
aliveai_electric.hit(ob,20,5)
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
}) |