Add better ranged combat for shooters
This commit is contained in:
parent
72c7563a85
commit
c1b7ab7f9f
5 changed files with 92 additions and 16 deletions
|
@ -6,6 +6,7 @@ ctf_classes = {
|
|||
dofile(minetest.get_modpath("ctf_classes") .. "/api.lua")
|
||||
dofile(minetest.get_modpath("ctf_classes") .. "/gui.lua")
|
||||
dofile(minetest.get_modpath("ctf_classes") .. "/regen.lua")
|
||||
dofile(minetest.get_modpath("ctf_classes") .. "/ranged.lua")
|
||||
|
||||
ctf_classes.register("knight", {
|
||||
description = "Knight",
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
name = ctf_classes
|
||||
depends = ctf, ctf_flag, ctf_colors, physics
|
||||
depends = ctf, ctf_flag, ctf_colors, physics, shooter
|
||||
|
|
58
mods/ctf/ctf_classes/ranged.lua
Normal file
58
mods/ctf/ctf_classes/ranged.lua
Normal file
|
@ -0,0 +1,58 @@
|
|||
local shooter_specs = {}
|
||||
|
||||
|
||||
shooter.get_weapon_spec = function(_, user, name)
|
||||
local spec = shooter.registered_weapons[name]
|
||||
if not spec then
|
||||
return nil
|
||||
end
|
||||
spec = spec.spec
|
||||
spec.name = user:get_player_name()
|
||||
|
||||
if not user then
|
||||
return spec
|
||||
end
|
||||
|
||||
local class = ctf_classes.get(user)
|
||||
if class.name ~= "shooter" then
|
||||
if name == "shooter:rifle" then
|
||||
minetest.chat_send_player(user:get_player_name(),
|
||||
"Only Shooters are skilled enough for rifles! Change your class at spawn")
|
||||
return nil
|
||||
end
|
||||
return spec
|
||||
end
|
||||
|
||||
if shooter_specs[name] then
|
||||
return shooter_specs[name]
|
||||
end
|
||||
|
||||
spec = table.copy(spec)
|
||||
shooter_specs[name] = spec
|
||||
|
||||
spec.range = spec.range * 1.5
|
||||
spec.tool_caps.full_punch_interval = spec.tool_caps.full_punch_interval * 0.8
|
||||
return spec
|
||||
end
|
||||
|
||||
|
||||
local function check_grapple(itemname)
|
||||
local def = minetest.registered_items[itemname]
|
||||
local old_func = def.on_use
|
||||
minetest.override_item(itemname, {
|
||||
description = def.description .. "\nCan only be used by Shooters",
|
||||
on_use = function(itemstack, user, ...)
|
||||
if ctf_classes.get(user).name ~= "shooter" then
|
||||
minetest.chat_send_player(user:get_player_name(),
|
||||
"Only Shooters are skilled enough for grapples! Change your class at spawn")
|
||||
|
||||
return itemstack
|
||||
end
|
||||
|
||||
return old_func(itemstack, user, ...)
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
check_grapple("shooter:grapple_gun_loaded")
|
||||
check_grapple("shooter:grapple_gun")
|
Loading…
Add table
Add a link
Reference in a new issue