6.6 KiB
Minetest Mod - Shooter API [shooter]
Depends: default
Handles raycasting, blasting and audio-visual effects of dependent mods
Crafting
Gunpowder
1 x Coal Lump + 1 x Clay Lump = 5 x Gunpowder
output = "shooter:gunpowder 5",
type = "shapeless",
recipe = {"default:coal_lump", "default:clay_lump"},
Configuration
Override the following default settings by adding them to your minetest.conf file
Enable automatic weapons
Uses globalstep to detect left mouse button
shooter_automatic_weapons = true
Enable admin super weapons
Allows admins (server priv) to shoot all guns automatically
Requires shooter_automatic_weapons
to be true
shooter_admin_weapons = false
Enable node destruction with explosives
shooter_enable_blasting = true
Enable Crafting
shooter_enable_crafting = true
Enable hit particle effects
shooter_enable_particle_fx = true
Enable protection
Requires a protection mod that utilizes minetest.is_protected()
shooter_enable_protection = false
Particle texture
Particle texture used when a player or entity with the 'fleshy' armor group is hit
shooter_explosion = "shooter_hit.png"
Allow node destruction
shooter_allow_nodes = true
Node Drops
Drops the node item when hit, requires shooter_allow_nodes
to be true
Currently excludes 'blasting'
shooter_node_drops = false
Allow entity damage
Defaults to true
in singleplayer mode
shooter_allow_entities = false
Allow player damage
Defaults to false
in singleplayer mode
shooter_allow_players = true
Round update time
Maximum round 'step' processing interval, will inversely effect the long-range velocity of the virtual projectiles. This should always be greater than the dedicated server step time
shooter_rounds_update_time = 0.4
Entity damage coefficient
May be used to globaly increase or decrease damage done to entities/mobs
shooter_damage_multiplier = 1
API Documentation
Global tables
shooter.registered_weapons
: Registered weapons by itemstringshooter.config
: Present configurationshooter.default_particles
: Default hit particle definition
{
amount = 15,
time = 0.3,
minpos = {x=-0.1, y=-0.1, z=-0.1},
maxpos = {x=0.1, y=0.1, z=0.1},
minvel = {x=-1, y=1, z=-1},
maxvel = {x=1, y=2, z=1},
minacc = {x=-2, y=-2, z=-2},
maxacc = {x=2, y=-2, z=2},
minexptime = 0.1,
maxexptime = 0.75,
minsize = 1,
maxsize = 2,
collisiondetection = false,
texture = "shooter_hit.png",
}
Methods
shooter.register_weapon(name, definition)
: Register a shooting weapon. -- See "Weapon Definition"shooter.get_weapon_spec(player, weaponname)
: Gets the spec for a particular weapon- Override this function to add support for per-player specs, for example
shooter.get_configuration(config)
: Loads matching config settings into a table refconfig
shooter.spawn_particles(pos, particles)
: Adds particles at the specified positionparticles
is an optional table of overrides forshooter.default_particles
shooter.play_node_sound(node, pos)
: Plays the registered 'dug' sound for the node atpos
shooter.is_valid_object(object)
: Returnstrue
if the object can be damagedshooter.punch_node(pos, spec)
: Punches the node atpos
with thespec
group capabilities- Returns
true
if the node was destroyed
- Returns
shooter.punch_object(object, tool_caps, dir, on_blast)
: Punches the object- Returns
true
if the object is damaged object
: Object to be punched, not checked for validity!tool_caps
: Tool capabilities of the weapon uesd -- See "Weapon Definition"dir
: Unit vector pointing from the source of the punch to the object, may benil
on_blast
: Respect entityon_blast
damage callback
- Returns
shooter.fire_weapon(player, itemstack, spec)
: Adds a 'round' withspec
to the processing queshooter.blast(pos, radius, fleshy, distance, user)
: Create explosion atpos
radius
: Blast radius in nodesfleshy
: Damage to inflict on fleshy objects:(fleshy * 0.5 ^ distance) * 2
distance
: Area of effect for objectsuser
: A player reference, used for protection
shooter.get_shooting(name)
: Returnstrue
if playername
is holding the left mouse button ornil
- Requires
shooter_automatic_weapons
to be settrue
- Requires
shooter.set_shooting(name, is_shooting)
: Sets the left mouse button status of playername
Weapon Definition
Used by shooter.register_weapon
{
description = "My Awesome Gun",
inventory_image = "my_awesome_gun.png",
reload_item = "itemstring",
-- Reload Item, "shooter:ammo" is used if omitted
unloaded_item = {
-- Optional. Item to be registered as unloaded weapon item
name = "itemstring",
description = "My Awesome Gun (Unloaded)",
inventory_image = "my_awesome_gun_unloaded.png",
},
on_use = function(itemstack, user, pointed_thing)
-- Called before the built-in tool `one_use` handler
-- Should return a valid `ItemStack` or `nil` to cancel the shot
return itemstack
end,
on_hit = function(pointed_thing, spec, dir)
-- May be used for arbitary shot effects like knock-back, etc.
-- Return `true` to override built-in damage effects
-- `pointed_thing`: Returned by `minetest.raycast()`
-- `spec`: Gunspec of the weapon used including some additional fields
-- `name`: Name of the weapon item, eg. `shooter_guns:rifle`
-- `user`: Name of the player that fired the weapon
-- `origin`: Initial starting position of the shot
-- `dir`: Unit vector direction of the virtual shot
end,
spec = {
-- Weapon specifications
rounds = 100,
-- Number of rounds, refilled by the defined reload item
range = 200,
-- Range (in nodes) of each shot
step = 30,
-- Distance per `shooter_rounds_update_time`
shots = 1,
-- Number of shots fired per `round`
spread = 10,
-- Spread of shots in degrees if `shots` > 1
-- Uses a sunflower seed arrangement for even distributuion
tool_caps = {
-- Tool capabilities, used for object/player damage
full_punch_interval = 1.0,
damage_groups = {fleshy=3},
},
groups = {
-- Damage groups, used to effect nodes as a normal tool item would
snappy = 3,
crumbly = 3,
choppy = 3,
fleshy = 2,
oddly_breakable_by_hand = 2,
},
sounds = {
-- Sound files (defaults)
shot = "guns_rifle",
reload = "shooter_reload",
fail_shot = "shooter_click",
},
bullet_texture = "shooter_bullet.png",
-- Particle texture file name for the projectile
particles = {},
-- Optional. Table of overrides for `shooter.default_particles`
},
}