Make classes configurable per-map

This commit is contained in:
a-bad-dev 2025-12-25 18:48:10 -04:00
commit fea5b81cb6
4 changed files with 63 additions and 21 deletions

View file

@ -16,18 +16,20 @@ function give_player_items(player) -- Give the player their initial stuff
inv:set_list("main", {})
if class == "sniper" then
inv:add_item("main", "ctf_ranged:m200_loaded")
inv:add_item("main", "default:sword_stone")
inv:add_item("main", "ctf_ranged:ammo 100")
elseif class == "assault" then
inv:add_item("main", "ctf_ranged:ak47_loaded")
inv:add_item("main", "ctf_ranged:glock17_loaded")
inv:add_item("main", "ctf_ranged:ammo 100")
elseif class == "shotgun" then
inv:add_item("main", "ctf_ranged:benelli_loaded")
inv:add_item("main", "ctf_ranged:glock17_loaded")
inv:add_item("main", "ctf_ranged:ammo 100")
if class == "1" then
for i = 1, #map_data.classes.class_1.initial_items do
inv:add_item("main", map_data.classes.class_1.initial_items[i])
end
elseif class == "2" then
for i = 1, #map_data.classes.class_2.initial_items do
inv:add_item("main", map_data.classes.class_2.initial_items[i])
end
elseif class == "3" then
for i = 1, #map_data.classes.class_3.initial_items do
inv:add_item("main", map_data.classes.class_3.initial_items[i])
end
end
end
@ -89,9 +91,9 @@ function set_player_mode(player, mode) -- Set player mode (spectator, pre-match,
label[3,0.1;Change class:]
button[0.3,1;2.5,1;class_sniper;Long-range]
button[2.8,1;2.5,1;class_assault;Mid-range]
button[5.3,1;2.5,1;class_shotgun;Short-range]
button[0.3,1;2.5,1;class_sniper;]] .. map_data.classes.class_1.name .. [[]
button[2.8,1;2.5,1;class_assault;]] .. map_data.classes.class_2.name .. [[]
button[5.3,1;2.5,1;class_shotgun;]] .. map_data.classes.class_3.name .. [[]
list[current_player;main;0,2;8,1;]
list[current_player;main;0,3.25;8,3;8]
@ -132,7 +134,7 @@ function start_match(map) -- Start the match
for i = 10, 1, -1 do -- count down from 10 to 1 (yes you are free to set me on fire for this horrible solution)
core.after(map_data.start_time - 10 + i, function()
core.chat_send_all(core.colorize("green", string.format("Match starts in %d second%s.", (11 - i), 11 - i == 1 and "" or "s"))) -- <-- RIP readability
core.chat_send_all(core.colorize("green", string.format("Match starts in %d second%s.", 11 - i, 11 - i == 1 and "" or "s"))) -- <- RIP readability
end)
end

View file

@ -51,7 +51,7 @@ core.register_on_joinplayer(function(player)
})
if player:get_meta():get_string("class") == "" then
player:get_meta():set_string("class", "assault")
player:get_meta():set_string("class", "2") -- Assault
end
set_player_mode(player, "normal")
@ -91,13 +91,13 @@ core.register_on_player_receive_fields(function(player, formname, fields)
end
if fields.class_sniper then
player:get_meta():set_string("class", "sniper")
player:get_meta():set_string("class", "1")
give_player_items(player)
elseif fields.class_assault then
player:get_meta():set_string("class", "assault")
player:get_meta():set_string("class", "2")
give_player_items(player)
elseif fields.class_shotgun then
player:get_meta():set_string("class", "shotgun")
player:get_meta():set_string("class", "3")
give_player_items(player)
end
end)

View file

@ -48,7 +48,24 @@ local map_data = {
on_start = "(Lua script to be run after /start is run, leave blank unless you know what you are doing!)",
on_barrier_remove = "(Lua script to be run after the barrier is removed, leave blank unless you know what you are doing!)",
on_end = "(Lua script to be run after the match has ended, leave blank unless you know what you are doing!)"
}
},
classes = {
class_1 = {
name = "(Name of class #1 here)",
initial_items = {"(Initial item #1 for class #1)", "(Initial item #2 for class #1...)"}
},
class_2 = {
name = "(Name of class #2 here)",
initial_items = {"(Initial item #1 for class #2)", "(Initial item #2 for class #2...)"}
},
class_3 = {
name = "(Name of class #3 here)",
initial_items = {"(Initial item #1 for class #3)", "(Initial item #2 for class #3...)"}
}
}
}
return map_data

View file

@ -16,6 +16,29 @@ function place_map(map)
if map_data.start_time == nil or map_data.start_time <= 0 then
map_data.start_time = 30
end
if map_data.classes == nil then
map_data.classes = {}
map_data.classes.class_1 = {}
map_data.classes.class_2 = {}
map_data.classes.class_3 = {}
end
if map_data.classes.class_1.initial_items == nil or map_data.classes.class_1.name == nil then
map_data.classes.class_1.initial_items = {"ctf_ranged:m200_loaded", "default:sword_stone", "ctf_ranged:ammo 100"}
map_data.classes.class_1.name = "Long-range"
end
if map_data.classes.class_2.initial_items == nil or map_data.classes.class_2.name == nil then
map_data.classes.class_2.initial_items = {"ctf_ranged:ak47_loaded", "ctf_ranged:glock17_loaded", "ctf_ranged:ammo 100"}
map_data.classes.class_2.name = "Mid-range"
end
if map_data.classes.class_3.initial_items == nil or map_data.classes.class_3.name == nil then
map_data.classes.class_3.initial_items = {"ctf_ranged:benelli_loaded", "ctf_ranged:glock17_loaded", "ctf_ranged:ammo 100"}
map_data.classes.class_3.name = "Short-range"
end
return map_data
end