Various additions and fixes
This commit is contained in:
parent
1aa6415843
commit
ef07daf266
@ -236,6 +236,7 @@ function explosion_thickweb(pos)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- arrow=>phoenix arrow
|
-- arrow=>phoenix arrow
|
||||||
|
--[[
|
||||||
mobs:register_arrow("nssm:phoenix_arrow", {
|
mobs:register_arrow("nssm:phoenix_arrow", {
|
||||||
visual = "sprite",
|
visual = "sprite",
|
||||||
visual_size = {x = 1, y = 1},
|
visual_size = {x = 1, y = 1},
|
||||||
@ -276,7 +277,7 @@ mobs:register_arrow("nssm:phoenix_arrow", {
|
|||||||
|
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
]]
|
||||||
mobs:register_arrow("nssm:super_gas", {
|
mobs:register_arrow("nssm:super_gas", {
|
||||||
visual = "sprite",
|
visual = "sprite",
|
||||||
visual_size = {x = 1, y = 1},
|
visual_size = {x = 1, y = 1},
|
||||||
@ -399,7 +400,7 @@ mobs:register_arrow("nssm:lava_block_bomb", {
|
|||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
--
|
--[[
|
||||||
mobs:register_arrow("nssm:roar_of_the_dragon", {
|
mobs:register_arrow("nssm:roar_of_the_dragon", {
|
||||||
visual = "sprite",
|
visual = "sprite",
|
||||||
visual_size = {x = 1, y = 1},
|
visual_size = {x = 1, y = 1},
|
||||||
@ -442,7 +443,7 @@ mobs:register_arrow("nssm:roar_of_the_dragon", {
|
|||||||
minetest.env:set_node(p, {name="air"})
|
minetest.env:set_node(p, {name="air"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
})
|
})]]
|
||||||
|
|
||||||
|
|
||||||
mobs:register_arrow("nssm:lava_arrow", {
|
mobs:register_arrow("nssm:lava_arrow", {
|
||||||
|
@ -2,11 +2,11 @@ mobs:register_mob("nssm:mese_dragon", {
|
|||||||
type = "monster",
|
type = "monster",
|
||||||
hp_max = 666,
|
hp_max = 666,
|
||||||
hp_min = 666,
|
hp_min = 666,
|
||||||
collisionbox = {-1, 0, -1, 1, 5, 1},
|
collisionbox = {-0.8, 0, -0.8, 0.8, 4, 0.8},
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
mesh = "mese_dragon.x",
|
mesh = "mese_dragon.x",
|
||||||
textures = {{"mese_dragon.png"}},
|
textures = {{"mese_dragon.png"}},
|
||||||
visual_size = {x=12, y=12},
|
visual_size = {x=8, y=8},
|
||||||
makes_footstep_sound = true,
|
makes_footstep_sound = true,
|
||||||
view_range = 45,
|
view_range = 45,
|
||||||
rotate = 270,
|
rotate = 270,
|
||||||
@ -37,8 +37,7 @@ mobs:register_mob("nssm:mese_dragon", {
|
|||||||
lava_damage = 0,
|
lava_damage = 0,
|
||||||
light_damage = 0,
|
light_damage = 0,
|
||||||
on_rightclick = nil,
|
on_rightclick = nil,
|
||||||
attack_type = "dogshoot",
|
attack_type = "dogfight",
|
||||||
dogshoot_switch = true,
|
|
||||||
blood_texture="mese_blood.png",
|
blood_texture="mese_blood.png",
|
||||||
blood_amount=30,
|
blood_amount=30,
|
||||||
stepheight=3.1,
|
stepheight=3.1,
|
||||||
@ -46,7 +45,7 @@ mobs:register_mob("nssm:mese_dragon", {
|
|||||||
jump_height=12,
|
jump_height=12,
|
||||||
dogshoot_count_max = 9,
|
dogshoot_count_max = 9,
|
||||||
arrow = "nssm:roar_of_the_dragon",
|
arrow = "nssm:roar_of_the_dragon",
|
||||||
reach = 5,
|
reach = 25,
|
||||||
shoot_interval = 3,
|
shoot_interval = 3,
|
||||||
shoot_offset = -1,
|
shoot_offset = -1,
|
||||||
animation = {
|
animation = {
|
||||||
@ -62,13 +61,15 @@ mobs:register_mob("nssm:mese_dragon", {
|
|||||||
punch_end = 275,
|
punch_end = 275,
|
||||||
punch2_start = 330,
|
punch2_start = 330,
|
||||||
punch2_end = 370,
|
punch2_end = 370,
|
||||||
dattack_start = 120,
|
shoot_start = 120,
|
||||||
dattack_end = 160,
|
shoot_end = 160,
|
||||||
},
|
},
|
||||||
|
--[[
|
||||||
do_custom = function(self)
|
do_custom = function(self)
|
||||||
midas_ability(self, "default:mese_block", self.run_velocity,2, 3)
|
--midas_ability(self, "default:mese_block", self.run_velocity,2, 3)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
|
||||||
custom_attack = function(self)
|
custom_attack = function(self)
|
||||||
if self.timer > 1 then
|
if self.timer > 1 then
|
||||||
self.timer = 0
|
self.timer = 0
|
||||||
@ -109,5 +110,96 @@ mobs:register_mob("nssm:mese_dragon", {
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end,
|
||||||
|
]]
|
||||||
|
custom_attack = function(self)
|
||||||
|
local p = self.attack:getpos()
|
||||||
|
local s = self.object:getpos()
|
||||||
|
s.y = s.y + 5;
|
||||||
|
local vel = vector.subtract(p,s)
|
||||||
|
set_animation(self, "shoot")
|
||||||
|
|
||||||
|
minetest.add_particlespawner(
|
||||||
|
125, --amount
|
||||||
|
0.5, --time
|
||||||
|
s, --minpos
|
||||||
|
s, --maxpos
|
||||||
|
vector.multiply(vel, 0.5), --minvel
|
||||||
|
vector.multiply(vel, 1.4), --maxvel
|
||||||
|
{x=0,y=0,z=0}, --minacc
|
||||||
|
{x=0,y=0,z=0}, --maxacc
|
||||||
|
2, --minexptime
|
||||||
|
4, --maxexptime
|
||||||
|
1, --minsize
|
||||||
|
2, --maxsize
|
||||||
|
true, --collisiondetection
|
||||||
|
"phoenix_fire.png" --texture
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
local obj = minetest.add_entity(s, "nssm:mese_dart")
|
||||||
|
local ran = math.random(7,14)/10
|
||||||
|
local vec = vector.multiply(vel, ran)
|
||||||
|
obj:setvelocity(vec)
|
||||||
|
|
||||||
|
minetest.after(0.5, function()
|
||||||
|
if self.attack then
|
||||||
|
local p = self.attack:getpos()
|
||||||
|
local vel = vector.subtract(p,s)
|
||||||
|
local obj = minetest.add_entity(s, "nssm:mese_dart")
|
||||||
|
local ran = math.random(7,14)/10
|
||||||
|
local vec = vector.multiply(vel, ran)
|
||||||
|
obj:setvelocity(vec)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end,
|
||||||
|
--[[
|
||||||
|
do_custom = function (self)
|
||||||
|
--minetest.chat_send_all(s.y.."-"..p.y.."="..(s.y-p.y))
|
||||||
|
if self.state == "attack" then
|
||||||
|
if self.attack then
|
||||||
|
local s = self.object:getpos()
|
||||||
|
local p = self.attack:getpos()
|
||||||
|
if (s.y - p.y ) < 10 then
|
||||||
|
local v = self.object:getvelocity()
|
||||||
|
v.y = 10
|
||||||
|
self.object:setvelocity(v)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,]]
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_entity("nssm:mese_dart", {
|
||||||
|
textures = {"transparent.png"},
|
||||||
|
on_step = function(self, dtime)
|
||||||
|
self.timer = (self.timer) or os.time()
|
||||||
|
self.attack = (self.attack) or os.time()
|
||||||
|
if os.time() - self.timer > 4 then
|
||||||
|
self.object:remove()
|
||||||
|
end
|
||||||
|
local p = self.object:getpos()
|
||||||
|
local all_objects = minetest.get_objects_inside_radius(p, 1)
|
||||||
|
local players = {}
|
||||||
|
local _,obj
|
||||||
|
for _,obj in ipairs(all_objects) do
|
||||||
|
if obj:is_player() then
|
||||||
|
obj:punch(self.object, 1.0, {
|
||||||
|
full_punch_interval = 1.0,
|
||||||
|
damage_groups = {fleshy = 10}
|
||||||
|
}, nil)
|
||||||
|
self.object:remove()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local n = minetest.get_node(p).name
|
||||||
|
if n ~= "air" then
|
||||||
|
minetest.set_node(p, {name="default:mese_block"})
|
||||||
|
self.object:remove();
|
||||||
|
end
|
||||||
|
|
||||||
|
local node = minetest.get_node(p).name
|
||||||
|
if node ~= "air" then
|
||||||
|
self.object:remove()
|
||||||
|
end
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
|
12
nssm_api.lua
12
nssm_api.lua
@ -681,13 +681,13 @@ local function calc_velocity(pos1, pos2, old_vel, power)
|
|||||||
return vel
|
return vel
|
||||||
end
|
end
|
||||||
|
|
||||||
local function entity_physics(pos, radius, drops)
|
local function entity_physics(pos, radius, drops, damage_all)
|
||||||
local objs = minetest.get_objects_inside_radius(pos, radius)
|
local objs = minetest.get_objects_inside_radius(pos, radius)
|
||||||
for _, obj in pairs(objs) do
|
for _, obj in pairs(objs) do
|
||||||
local obj_pos = obj:getpos()
|
local obj_pos = obj:getpos()
|
||||||
local dist = math.max(1, vector.distance(pos, obj_pos))
|
local dist = math.max(1, vector.distance(pos, obj_pos))
|
||||||
|
|
||||||
local damage = (4 / dist) * radius
|
local damage = (8 / (dist+1)) * radius
|
||||||
if obj:is_player() then
|
if obj:is_player() then
|
||||||
-- currently the engine has no method to set
|
-- currently the engine has no method to set
|
||||||
-- player velocity. See #2960
|
-- player velocity. See #2960
|
||||||
@ -708,7 +708,7 @@ local function entity_physics(pos, radius, drops)
|
|||||||
local name = luaobj.name
|
local name = luaobj.name
|
||||||
|
|
||||||
if objdef and objdef.on_blast then
|
if objdef and objdef.on_blast then
|
||||||
if ((name == "nssm:pumpking") or (name == "nssm:morvalar0") or (name== "nssm:morvalar5")) then
|
if ((not damage_all) and ((name == "nssm:pumpking") or (name == "nssm:morvalar0") or (name== "nssm:morvalar5"))) then
|
||||||
do_damage = false
|
do_damage = false
|
||||||
do_knockback = false
|
do_knockback = false
|
||||||
else
|
else
|
||||||
@ -882,7 +882,11 @@ function tnt_boom_nssm(pos, def, block, effects)
|
|||||||
local drops, radius = tnt_explode(pos, def.radius, def.ignore_protection, def.ignore_on_blast, block)
|
local drops, radius = tnt_explode(pos, def.radius, def.ignore_protection, def.ignore_on_blast, block)
|
||||||
-- append entity drops
|
-- append entity drops
|
||||||
local damage_radius = (radius / def.radius) * def.damage_radius
|
local damage_radius = (radius / def.radius) * def.damage_radius
|
||||||
entity_physics(pos, damage_radius, drops)
|
if def.damage_all then
|
||||||
|
entity_physics(pos, damage_radius, drops, def.damage_all)
|
||||||
|
else
|
||||||
|
entity_physics(pos, damage_radius, drops)
|
||||||
|
end
|
||||||
if not def.disable_drops then
|
if not def.disable_drops then
|
||||||
eject_drops(drops, pos, radius)
|
eject_drops(drops, pos, radius)
|
||||||
end
|
end
|
||||||
|
@ -57,7 +57,25 @@ local function search_on_step2(
|
|||||||
local obj_p = nil
|
local obj_p = nil
|
||||||
local vec_min = nil
|
local vec_min = nil
|
||||||
for _,obj in ipairs(objects) do
|
for _,obj in ipairs(objects) do
|
||||||
if (obj:is_player()) then
|
if ((obj:is_player()) or (obj:get_luaentity() and (
|
||||||
|
(obj:get_luaentity().name == "mese_dart") or
|
||||||
|
(obj:get_luaentity().name == "phoenix_dart") or
|
||||||
|
(obj:get_luaentity().name == "duck_father") or
|
||||||
|
(obj:get_luaentity().name == "thickwebball") or
|
||||||
|
(obj:get_luaentity().name == "webball") or
|
||||||
|
(obj:get_luaentity().name == "super_gas") or
|
||||||
|
(obj:get_luaentity().name == "lava_arrow") or
|
||||||
|
(obj:get_luaentity().name == "snow_arrow") or
|
||||||
|
(obj:get_luaentity().name == "spine") or
|
||||||
|
(obj:get_luaentity().name == "mese_dart") or
|
||||||
|
(obj:get_luaentity().name == "morarrow") or
|
||||||
|
(obj:get_luaentity().name == "lava_block_bomb") or
|
||||||
|
(obj:get_luaentity().name == "crystal_gas_arrow") or
|
||||||
|
(obj:get_luaentity().name == "pumpkid_bomb"))
|
||||||
|
)) then
|
||||||
|
if (obj:get_luaentity()) then
|
||||||
|
minetest.chat_send_all(""..obj:get_luaentity().name)
|
||||||
|
end
|
||||||
elseif (obj:get_luaentity() and obj:get_luaentity().name ~= "__builtin:item" and obj:get_luaentity().name ~= self.object:get_luaentity().name) then
|
elseif (obj:get_luaentity() and obj:get_luaentity().name ~= "__builtin:item" and obj:get_luaentity().name ~= self.object:get_luaentity().name) then
|
||||||
obj_p = obj:getpos()
|
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 vec = {x=obj_p.x-pos.x, y=obj_p.y-pos.y, z=obj_p.z-pos.z}
|
||||||
@ -99,6 +117,10 @@ local function search_on_step2(
|
|||||||
|
|
||||||
--hit(pos,self)
|
--hit(pos,self)
|
||||||
elseif min_dist<=1 and self.move==1 then
|
elseif min_dist<=1 and self.move==1 then
|
||||||
|
obj_min:punch(obj_min, 1.0, {
|
||||||
|
full_punch_interval = 1.0,
|
||||||
|
damage_groups = {fleshy = 20},
|
||||||
|
}, nil)
|
||||||
hit(pos,self)
|
hit(pos,self)
|
||||||
else
|
else
|
||||||
self.object:setvelocity(vec_min)
|
self.object:setvelocity(vec_min)
|
||||||
@ -178,6 +200,12 @@ local function search_on_step(
|
|||||||
obj_p = obj_min:getpos()
|
obj_p = obj_min:getpos()
|
||||||
if min_dist < 1 then
|
if min_dist < 1 then
|
||||||
local node = node_ok(pos).name
|
local node = node_ok(pos).name
|
||||||
|
|
||||||
|
obj_min:punch(obj_min, 1.0, {
|
||||||
|
full_punch_interval = 1.0,
|
||||||
|
damage_groups = {fleshy = 30},
|
||||||
|
}, nil)
|
||||||
|
|
||||||
self.hit_node(self, pos, node)
|
self.hit_node(self, pos, node)
|
||||||
self.object:remove()
|
self.object:remove()
|
||||||
return
|
return
|
||||||
@ -387,7 +415,8 @@ nssm_register_weapon("spirit_ball", {
|
|||||||
search_on_step(self, dtime, 5, 30, 25)
|
search_on_step(self, dtime, 5, 30, 25)
|
||||||
end,
|
end,
|
||||||
hit_node = function(self, pos, node)
|
hit_node = function(self, pos, node)
|
||||||
tnt.boom(pos, {damage_radius=8,radius=4,ignore_protection=false})
|
--tnt.boom(pos, {damage_radius=8,radius=4,ignore_protection=false})
|
||||||
|
tnt_boom_nssm(pos, {damage_radius=4,radius=3,ignore_protection=false, damage_all = true})
|
||||||
end,
|
end,
|
||||||
|
|
||||||
material = "default:goldblock",
|
material = "default:goldblock",
|
||||||
|
3
todo.txt
3
todo.txt
@ -13,6 +13,9 @@ Codice:
|
|||||||
- Spawn mostri nuovi
|
- Spawn mostri nuovi
|
||||||
- Danno River Lord e Sandonisc
|
- Danno River Lord e Sandonisc
|
||||||
- Silversand Dragon (?)
|
- Silversand Dragon (?)
|
||||||
|
- togliere le chat (hp_num -> envy sword)
|
||||||
|
- ascia esplosiva
|
||||||
|
|
||||||
|
|
||||||
Emmo vorrebbe:
|
Emmo vorrebbe:
|
||||||
-Nuove armature dei nuovi mostri
|
-Nuove armature dei nuovi mostri
|
||||||
|
Loading…
x
Reference in New Issue
Block a user