64 lines
1.5 KiB
Lua
64 lines
1.5 KiB
Lua
local function lit_rocket(pos)
|
|
minetest.add_particlespawner(
|
|
3, --amount
|
|
0.1, --time
|
|
{x=pos.x-0.2, y=pos.y-0.2, z=pos.z-0.2}, --minpos
|
|
{x=pos.x+0.2, y=pos.y+0.2, z=pos.z+0.2}, --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
|
|
2, --minsize
|
|
8, --maxsize
|
|
false, --collisiondetection
|
|
"smoke_puff.png" --texture
|
|
)
|
|
minetest.sound_play("extrablocks_rbp_lit", {pos = pos, gain = 0.2, max_hear_distance = 3})
|
|
end
|
|
--http://www.freesound.org/people/roubignolle/sounds/36352/
|
|
|
|
local function off_rocket(pos)
|
|
minetest.sound_play("extrablocks_rbp_off", {pos = pos, gain = 0.2, max_hear_distance = 3})
|
|
end
|
|
|
|
local function acc(p)
|
|
local pcontrol = p:get_player_control()
|
|
if pcontrol then --"and" wouldn't work, I think
|
|
if pcontrol["sneak"] then
|
|
return 3
|
|
end
|
|
end
|
|
return 30
|
|
end
|
|
|
|
local jpllist = {}
|
|
|
|
minetest.register_craftitem("extrablocks:rocket_bag", {
|
|
description = "Experimental Rocket Bag",
|
|
inventory_image = "extrablocks_rbp.png",
|
|
on_use = function(_, player)
|
|
if not player then
|
|
return
|
|
end
|
|
local playername = player:get_player_name()
|
|
if not playername then
|
|
return
|
|
end
|
|
local pos = player:getpos()
|
|
local enabled = jpllist[playername]
|
|
if enabled then
|
|
player:set_physics_override({jump=1})
|
|
jpllist[playername] = false
|
|
off_rocket(pos)
|
|
else
|
|
local accel = acc(player)
|
|
player:set_physics_override({jump=accel})
|
|
jpllist[playername] = true
|
|
lit_rocket(pos)
|
|
end
|
|
return --necessary because of on_use
|
|
end,
|
|
})
|