Compare commits
5 Commits
c8165239ba
...
b3f395581f
Author | SHA1 | Date |
---|---|---|
Grandolf | b3f395581f | |
Grandolf | bcef37a072 | |
Grandolf | ebbbc4feea | |
Grandolf | ab98de4dd6 | |
Grandolf | 2332171f13 |
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1 @@
|
|||
|
1427
classes/init.lua
1427
classes/init.lua
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,345 @@
|
|||
minetest.register_entity("classes:fireball", {
|
||||
textures = {"fireball.png"},
|
||||
velocity = 15,
|
||||
light_source = 200,
|
||||
on_step = function (self, pos, node, dtime)
|
||||
local pos = self.object:getpos()
|
||||
local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2)
|
||||
for k, obj in pairs(objs) do
|
||||
obj:set_hp(obj:get_hp()-15)
|
||||
if obj:is_player() then
|
||||
return
|
||||
else
|
||||
obj:set_hp(obj:get_hp()-70)
|
||||
if obj:get_entity_name() ~= "classes:fireball" then
|
||||
if obj:get_hp()<=0 then
|
||||
obj:remove()
|
||||
end
|
||||
self.object:remove()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for dx=-1,1 do
|
||||
for dy=-1,1 do
|
||||
for dz=-1,1 do
|
||||
local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
|
||||
local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
|
||||
local n = minetest.env:get_node(p).name
|
||||
-- if n ~= "classes:fireball" and n ~="hackersheep:hackersheep" and n ~="prohackersheep:prohackersheep" then
|
||||
-- if minetest.registered_nodes[n].groups.noobhackersheep then --[[or math.random(1, 100) <= 0]]
|
||||
-- minetest.env:set_node(t, {name=""..n})
|
||||
-- else
|
||||
-- minetest.env:set_node(t, {name=""..n})
|
||||
-- end
|
||||
-- else
|
||||
if minetest.registered_nodes[n].groups.flammable or minetest.registered_nodes[n].groups.choppy or minetest.registered_nodes[n].groups.oddly_breakable_by_hand or minetest.registered_nodes[n].groups.cracky or minetest.registered_nodes[n].groups.crumbly or n =="default:desert_stone" then
|
||||
self.hit_node(self, pos, node)
|
||||
self.object:remove()
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
hit_node = function(self, pos, node)
|
||||
local pos = self.object:getpos()
|
||||
-- for dx=-4,4 do
|
||||
-- for dy=-4,4 do
|
||||
-- for dz=-4,4 do
|
||||
-- local p = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
|
||||
-- local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
|
||||
-- local n = minetest.env:get_node(pos).name
|
||||
-- if math.random(1, 50) <= 0 then
|
||||
-- minetest.env:remove_node(p)
|
||||
-- end
|
||||
-- if minetest.registered_nodes[n].groups.flammable or math.random(1, 100) >=500 then
|
||||
-- minetest.env:set_node(t, {name="air"})
|
||||
-- end
|
||||
local objects = minetest.env:get_objects_inside_radius(pos, 10)
|
||||
for _,obj in ipairs(objects) do
|
||||
if obj:is_player() or (obj:get_luaentity() and obj:get_luaentity().name ~= "__builtin:item") then
|
||||
local obj_p = obj:getpos()
|
||||
local vec = {x=obj_p.x-pos.x, y=obj_p.y-pos.y, z=obj_p.z-pos.z}
|
||||
local dist = (vec.x^2+vec.y^2+vec.z^2)^0.5
|
||||
local damage = ((80*0.5^dist)*2)+3
|
||||
obj:punch(obj, 1.0, {
|
||||
full_punch_interval=1.0,
|
||||
damage_groups={fleshy=damage},
|
||||
}, vec)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.add_particlespawner(
|
||||
10, --amount
|
||||
0.1, --time
|
||||
{x=pos.x-3, y=pos.y-3, z=pos.z-3}, --minpos
|
||||
{x=pos.x+3, y=pos.y+3, z=pos.z+3}, --maxpos
|
||||
{x=-0, y=-0, z=-0}, --minvel
|
||||
{x=0, y=0, z=0}, --maxvel
|
||||
{x=-0.5,y=5,z=-0.5}, --minacc
|
||||
{x=0.5,y=5,z=0.5}, --maxacc
|
||||
0.1, --minexptime
|
||||
1, --maxexptime
|
||||
50, --minsize
|
||||
90, --maxsize
|
||||
false, --collisiondetection
|
||||
"flame_pillar.png" --texture
|
||||
)
|
||||
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
end
|
||||
})
|
||||
minetest.register_craftitem("classes:firestaff", {
|
||||
description = "Staff of Fire",
|
||||
inventory_image = "firestaff.png",
|
||||
wield_scale = {x=2.5,y=5.5,z=1.5},
|
||||
stackable = false,
|
||||
on_use = function (itemstack, placer, pointed_thing)
|
||||
local dir = placer:get_look_dir();
|
||||
local playerpos = placer:getpos();
|
||||
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+2+dir.y,z=playerpos.z+0+dir.z}, "classes:fireball")
|
||||
local vec = {x=dir.x*6,y=dir.y*6,z=dir.z*6}
|
||||
obj:setvelocity(vec)
|
||||
return itemstack
|
||||
end,
|
||||
light_source = 15,
|
||||
})
|
||||
local addvectors = function (v1, v2)
|
||||
return {x=v1.x+v2.x, y=v1.y+v2.y, z=v1.z+v2.z}
|
||||
end
|
||||
|
||||
minetest.register_entity("classes:magicmissile", {
|
||||
textures = {"magicmissile.png"},
|
||||
velocity = 15,
|
||||
light_source = 200,
|
||||
on_step = function (self, pos, node, dtime)
|
||||
local pos = self.object:getpos()
|
||||
local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2)
|
||||
for k, obj in pairs(objs) do
|
||||
obj:set_hp(obj:get_hp()-5)
|
||||
if obj:is_player() then
|
||||
return
|
||||
else
|
||||
obj:set_hp(obj:get_hp()-10)
|
||||
if obj:get_entity_name() ~= "classes:magicmissile" then
|
||||
if obj:get_hp()<=0 then
|
||||
obj:remove()
|
||||
end
|
||||
self.object:remove()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for dx=-1,1 do
|
||||
for dy=-1,1 do
|
||||
for dz=-1,1 do
|
||||
local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
|
||||
local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
|
||||
local n = minetest.env:get_node(p).name
|
||||
-- if n ~= "classes:fireball" and n ~="hackersheep:hackersheep" and n ~="prohackersheep:prohackersheep" then
|
||||
-- if minetest.registered_nodes[n].groups.noobhackersheep then --[[or math.random(1, 100) <= 0]]
|
||||
-- minetest.env:set_node(t, {name=""..n})
|
||||
-- else
|
||||
-- minetest.env:set_node(t, {name=""..n})
|
||||
-- end
|
||||
-- else
|
||||
if minetest.registered_nodes[n].groups.flammable or minetest.registered_nodes[n].groups.choppy or minetest.registered_nodes[n].groups.oddly_breakable_by_hand or minetest.registered_nodes[n].groups.cracky or minetest.registered_nodes[n].groups.crumbly or n =="default:desert_stone" then
|
||||
self.hit_node(self, pos, node)
|
||||
self.object:remove()
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
hit_node = function(self, pos, node)
|
||||
local pos = self.object:getpos()
|
||||
-- for dx=-4,4 do
|
||||
-- for dy=-4,4 do
|
||||
-- for dz=-4,4 do
|
||||
-- local p = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
|
||||
-- local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
|
||||
-- local n = minetest.env:get_node(pos).name
|
||||
-- if math.random(1, 50) <= 0 then
|
||||
-- minetest.env:remove_node(p)
|
||||
-- end
|
||||
-- if minetest.registered_nodes[n].groups.flammable or math.random(1, 100) >=500 then
|
||||
-- minetest.env:set_node(t, {name="air"})
|
||||
-- end
|
||||
local objects = minetest.env:get_objects_inside_radius(pos, 2)
|
||||
for _,obj in ipairs(objects) do
|
||||
if obj:is_player() or (obj:get_luaentity() and obj:get_luaentity().name ~= "__builtin:item") then
|
||||
local obj_p = obj:getpos()
|
||||
local vec = {x=obj_p.x-pos.x, y=obj_p.y-pos.y, z=obj_p.z-pos.z}
|
||||
local dist = (vec.x^2+vec.y^2+vec.z^2)^0.5
|
||||
local damage = (10*0.5^dist)*1
|
||||
obj:punch(obj, 1.0, {
|
||||
full_punch_interval=1.0,
|
||||
damage_groups={fleshy=damage},
|
||||
}, vec)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.add_particlespawner(
|
||||
2, --amount
|
||||
0.1, --time
|
||||
{x=pos.x-3, y=pos.y-3, z=pos.z-3}, --minpos
|
||||
{x=pos.x+3, y=pos.y+3, z=pos.z+3}, --maxpos
|
||||
{x=-0, y=-0, z=-0}, --minvel
|
||||
{x=0, y=0, z=0}, --maxvel
|
||||
{x=-0.5,y=5,z=-0.5}, --minacc
|
||||
{x=0.5,y=5,z=0.5}, --maxacc
|
||||
0.1, --minexptime
|
||||
1, --maxexptime
|
||||
50, --minsize
|
||||
90, --maxsize
|
||||
false, --collisiondetection
|
||||
"magicmissileburst.png" --texture
|
||||
)
|
||||
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
end
|
||||
})
|
||||
minetest.register_craftitem("classes:apprentice_staff", {
|
||||
description = "Staff of the Apprenti",
|
||||
inventory_image = "apprentice.png",
|
||||
wield_scale = {x=2.5,y=5.5,z=1.5},
|
||||
stackable = false,
|
||||
on_use = function (itemstack, placer, pointed_thing)
|
||||
local dir = placer:get_look_dir();
|
||||
local playerpos = placer:getpos();
|
||||
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+2+dir.y,z=playerpos.z+0+dir.z}, "classes:magicmissile")
|
||||
local vec = {x=dir.x*8,y=dir.y*8,z=dir.z*8}
|
||||
obj:setvelocity(vec)
|
||||
return itemstack
|
||||
end,
|
||||
light_source = 15,
|
||||
})
|
||||
local addvectors = function (v1, v2)
|
||||
return {x=v1.x+v2.x, y=v1.y+v2.y, z=v1.z+v2.z}
|
||||
end
|
||||
|
||||
|
||||
minetest.register_entity("classes:lightning", {
|
||||
textures = {"lightningball.png"},
|
||||
velocity = 15,
|
||||
light_source = 200,
|
||||
on_step = function (self, pos, node, dtime)
|
||||
local pos = self.object:getpos()
|
||||
local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2)
|
||||
for k, obj in pairs(objs) do
|
||||
obj:set_hp(obj:get_hp()-10)
|
||||
if obj:is_player() then
|
||||
return
|
||||
else
|
||||
obj:set_hp(obj:get_hp()-20)
|
||||
if obj:get_entity_name() ~= "classes:lightning" then
|
||||
if obj:get_hp()<=0 then
|
||||
obj:remove()
|
||||
end
|
||||
self.object:remove()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for dx=-1,1 do
|
||||
for dy=-1,1 do
|
||||
for dz=-1,1 do
|
||||
local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
|
||||
local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
|
||||
local n = minetest.env:get_node(p).name
|
||||
-- if n ~= "classes:fireball" and n ~="hackersheep:hackersheep" and n ~="prohackersheep:prohackersheep" then
|
||||
-- if minetest.registered_nodes[n].groups.noobhackersheep then --[[or math.random(1, 100) <= 0]]
|
||||
-- minetest.env:set_node(t, {name=""..n})
|
||||
-- else
|
||||
-- minetest.env:set_node(t, {name=""..n})
|
||||
-- end
|
||||
-- else
|
||||
if minetest.registered_nodes[n].groups.flammable or minetest.registered_nodes[n].groups.choppy or minetest.registered_nodes[n].groups.oddly_breakable_by_hand or minetest.registered_nodes[n].groups.cracky or minetest.registered_nodes[n].groups.crumbly or n =="default:desert_stone" then
|
||||
self.hit_node(self, pos, node)
|
||||
self.object:remove()
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
hit_node = function(self, pos, node)
|
||||
local pos = self.object:getpos()
|
||||
-- for dx=-4,4 do
|
||||
-- for dy=-4,4 do
|
||||
-- for dz=-4,4 do
|
||||
-- local p = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
|
||||
-- local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
|
||||
-- local n = minetest.env:get_node(pos).name
|
||||
-- if math.random(1, 50) <= 0 then
|
||||
-- minetest.env:remove_node(p)
|
||||
-- end
|
||||
-- if minetest.registered_nodes[n].groups.flammable or math.random(1, 100) >=500 then
|
||||
-- minetest.env:set_node(t, {name="air"})
|
||||
-- end
|
||||
local objects = minetest.env:get_objects_inside_radius(pos, 4)
|
||||
for _,obj in ipairs(objects) do
|
||||
if obj:is_player() or (obj:get_luaentity() and obj:get_luaentity().name ~= "__builtin:item") then
|
||||
local obj_p = obj:getpos()
|
||||
local vec = {x=obj_p.x-pos.x, y=obj_p.y-pos.y, z=obj_p.z-pos.z}
|
||||
local dist = (vec.x^2+vec.y^2+vec.z^2)^0.5
|
||||
local damage = (80*0.5^dist)*2
|
||||
obj:punch(obj, 1.0, {
|
||||
full_punch_interval=1.0,
|
||||
damage_groups={fleshy=damage},
|
||||
}, vec)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.add_particlespawner(
|
||||
4, --amount
|
||||
0.1, --time
|
||||
{x=pos.x-3, y=pos.y-3, z=pos.z-3}, --minpos
|
||||
{x=pos.x+3, y=pos.y+3, z=pos.z+3}, --maxpos
|
||||
{x=-0, y=-0, z=-0}, --minvel
|
||||
{x=0, y=0, z=0}, --maxvel
|
||||
{x=-0.0,y=0,z=-0.0}, --minacc
|
||||
{x=0.1,y=-1,z=0.1}, --maxacc
|
||||
0.1, --minexptime
|
||||
1, --maxexptime
|
||||
300, --minsize
|
||||
350, --maxsize
|
||||
false, --collisiondetection
|
||||
"lightningbolt.png" --texture
|
||||
)
|
||||
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
end
|
||||
})
|
||||
minetest.register_craftitem("classes:lightning_staff", {
|
||||
description = "Staff of the Vengeful Skies",
|
||||
inventory_image = "lightningstaff.png",
|
||||
wield_scale = {x=2.5,y=5.5,z=1.5},
|
||||
stackable = false,
|
||||
on_use = function (itemstack, placer, pointed_thing)
|
||||
local dir = placer:get_look_dir();
|
||||
local playerpos = placer:getpos();
|
||||
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+2+dir.y,z=playerpos.z+0+dir.z}, "classes:lightning")
|
||||
local vec = {x=dir.x*12,y=dir.y*12,z=dir.z*12}
|
||||
obj:setvelocity(vec)
|
||||
return itemstack
|
||||
end,
|
||||
light_source = 15,
|
||||
})
|
||||
local addvectors = function (v1, v2)
|
||||
return {x=v1.x+v2.x, y=v1.y+v2.y, z=v1.z+v2.z}
|
||||
end
|
Loading…
Reference in New Issue