capturetheflag/mods/ctf/ctf_classes/init.lua

117 lines
2.7 KiB
Lua
Raw Normal View History

2019-03-21 01:36:59 +00:00
ctf_classes = {
__classes = {},
__classes_ordered = {},
}
dofile(minetest.get_modpath("ctf_classes") .. "/api.lua")
dofile(minetest.get_modpath("ctf_classes") .. "/gui.lua")
2019-03-22 03:18:45 +00:00
dofile(minetest.get_modpath("ctf_classes") .. "/regen.lua")
2019-03-22 04:01:36 +00:00
dofile(minetest.get_modpath("ctf_classes") .. "/ranged.lua")
2019-03-21 01:36:59 +00:00
ctf_classes.register("knight", {
description = "Knight",
pros = { "+50% Health Points" },
2019-03-21 01:36:59 +00:00
cons = { "-10% speed" },
color = "#ccc",
properties = {
max_hp = 30,
speed = 0.90,
},
2019-03-21 01:36:59 +00:00
})
ctf_classes.register("shooter", {
description = "Shooter",
pros = { "+10% ranged skill", "Rifles and grappling hooks" },
cons = { "Can't capture the flag" },
2019-03-21 01:36:59 +00:00
color = "#c60",
properties = {
can_capture = false,
},
2019-03-21 01:36:59 +00:00
})
ctf_classes.register("medic", {
description = "Medic",
pros = { "x2 regen for nearby friendlies" },
cons = { "-50% Health Points" },
2019-03-21 01:36:59 +00:00
color = "#0af",
properties = {
max_hp = 10,
},
2019-03-21 01:36:59 +00:00
})
minetest.register_on_joinplayer(function(player)
ctf_classes.update(player)
if minetest.check_player_privs(player, { interact = true }) then
ctf_classes.show_gui(player:get_player_name())
end
end)
2019-03-21 01:36:59 +00:00
minetest.register_chatcommand("class", {
func = function(name, params)
local player = minetest.get_player_by_name(name)
if not player then
return false, "You must be online to do this!"
end
if not ctf_classes.can_change(player) then
return false, "Move closer to the flag to change classes!"
end
local cname = params:trim()
if params == "" then
ctf_classes.show_gui(name)
else
if ctf_classes.__classes[cname] then
ctf_classes.set(player, cname)
return true, "Set class to " .. cname
else
return false, "Class '" .. cname .. "' does not exist"
end
end
end
})
ctf_colors.set_skin = function(player, color)
ctf_classes.set_skin(player, color, ctf_classes.get(player))
end
local flags = {
"ctf_flag:flag",
"ctf_flag:flag_top_red",
"ctf_flag:flag_top_blue",
}
2019-03-22 03:18:45 +00:00
for _, flagname in pairs(flags) do
local old_func = minetest.registered_nodes[flagname].on_punch
local function on_punch(pos, node, player, ...)
local fpos = pos
if node.name:sub(1, 18) == "ctf_flag:flag_top_" then
fpos = vector.new(pos)
fpos.y = fpos.y - 1
end
local class = ctf_classes.get(player)
if not class.properties.can_capture then
local pname = player:get_player_name()
local flag = ctf_flag.get(fpos)
local team = ctf.player(pname).team
if flag and flag.team and team and team ~= flag.team then
minetest.chat_send_player(pname,
"You need to change classes to capture the flag!")
2019-03-22 03:18:45 +00:00
return
end
end
return old_func(pos, node, player, ...)
end
2019-03-21 01:36:59 +00:00
local function show(_, _, player)
ctf_classes.show_gui(player:get_player_name(), player)
end
2019-03-22 03:18:45 +00:00
minetest.override_item(flagname, {
on_punch = on_punch,
on_rightclick = show,
})
2019-03-21 01:36:59 +00:00
end