master
_Zaizen_ 2020-08-06 22:25:49 +02:00
parent b185bc4159
commit 8ef56d2747
3 changed files with 52 additions and 11 deletions

View File

@ -7,21 +7,21 @@ quake.register_grenade("quake:grenade", {
wield_image = "quake_railgun.png",
entity = {
throw_speed = 12,
throw_speed = 16,
explosion_damage = 16,
physical = true,
collide_with_objects = true,
visual = "item",
wield_item = "quake:grenade",
visual = "mesh",
--wield_item = "quake:grenade",
visual_size = {x = 0.3, y = 0.3, z = 0.3},
--mesh = "quake_rocket.obj",
mesh = "quake_rocket.obj",
explosion_texture = "quake_rocket_particle.png",
--textures = {"quake_bullet_rocket.png"},
textures = {"quake_bullet_rocket.png"},
collisionbox = {-0.3, -0.3, -0.3, 0.3, 0.3, 0.3},
explosion_range = 4,
duration = 3,
gravity = true,
on_destroy = quake.explode,
on_destroy = quake.grenade_explode,
particle = {
image = "quake_bullet_rocket.png",
life = 1,
@ -35,3 +35,14 @@ quake.register_grenade("quake:grenade", {
})
--[[
diminuire tempo di esplosione
stesso danno per tutti
diminuire loslancio dato dalla corsa
]]

View File

@ -46,8 +46,8 @@ function grenade_throw(itemstack, player, pointed_thing)
local throw_speed = obj:get_luaentity().initial_properties.throw_speed
local player_vel = player:get_player_velocity()
obj:set_velocity(vector.add(player_vel, vector.multiply(dir, throw_speed)))
--obj:set_velocity({x = dir.x * m, y = dir.y * m/1.5, z = dir.z * m})
--obj:set_velocity(vector.add(player_vel, vector.multiply(dir, throw_speed)))
obj:set_velocity({x = dir.x * throw_speed, y = dir.y * throw_speed/1.5, z = dir.z * throw_speed})
--obj:set_acceleration({x = 0, y = -13, z = 0})
local rotation = vector.new(0, yaw + math.pi/2, pitch + math.pi/6)
obj:set_rotation(rotation)
@ -84,11 +84,11 @@ function grenade_set_entity(name, def)
physical = def.entity.physical, --se è fisica
collide_with_objects = def.entity.collide_with_objects, --se collide con gli oggetti
visual = def.entity.visual, --che tipo di visualizzazione fare
wield_item = def.entity.wield_item, --apparenza della granata
--wield_item = def.entity.wield_item, --apparenza della granata
visual_size = def.entity.visual_size, --grandezza visiva della granata
--mesh = def.entity.mesh,
mesh = def.entity.mesh,
explosion_texture = def.entity.explosion_texture, --texture dell'esplosione
--textures = def.entity.textures,
textures = def.entity.textures,
collisionbox = def.entity.collisionbox, --grandezza della collisionbox
explosion_range = def.entity.explosion_range, --in che raggio fa danno l'esplosione
duration = def.entity.duration, --quanto dura il volo

View File

@ -29,3 +29,33 @@ quake.explode = function(self)
end
end
end
quake.grenade_explode = function(self)
local explosion_range = self.initial_properties.explosion_range
local explosion_damage = self.initial_properties.explosion_damage
local origin = self.object:get_pos()
local objs = minetest.env:get_objects_inside_radius(origin, explosion_range)
-- se ho colpito qualcosa
if objs then
for _, obj in ipairs(objs) do
if obj:is_player() then
if obj:get_player_name() ~= self.initial_properties.name then
local p_pos = obj:get_pos()
local lenx = math.abs(p_pos.x - origin.x)
local leny = math.abs(p_pos.y - origin.y)
local lenz = math.abs(p_pos.z - origin.z)
local hypot = math.sqrt((lenx * lenx) + (lenz * lenz))
local dist = math.sqrt((hypot * hypot) + (leny * leny))
local damage = explosion_damage - (explosion_damage * dist / explosion_range)
quake.shoot(self.p_name, obj, damage, false)
end
end
end
end
end