diff --git a/hud.lua b/hud.lua new file mode 100644 index 0000000..c29932b --- /dev/null +++ b/hud.lua @@ -0,0 +1,43 @@ +function create_huds(arena) + + local function create(player) + scoreboard_blue = minetest.get_player_by_name(player):hud_add({ + hud_elem_type = "text", + position = {x = 1, y = 0}, + offset = {x=-600, y = 50}, + scale = {x = 1, y = 1}, + text = "0", + number = 0x0001FF, + }) + + scoreboard_red = minetest.get_player_by_name(player):hud_add({ + hud_elem_type = "text", + position = {x = 1, y = 0}, + offset = {x=-400, y = 50}, + scale = {x = 400, y = 1}, + text = "0", + number = 0xFF0000 + }) + + temp = {red=scoreboard_red,blue=scoreboard_blue} + arena.huds[player] =temp + end + + for playername in pairs(arena.players) do + create(playername) + end +end + +function update_huds(arena, player) + local playername = player:get_player_name() + player:hud_change(arena.huds[playername].blue, "text", tostring(arena.teams[team_id_blue].goals)) + player:hud_change(arena.huds[playername].red, "text", tostring(arena.teams[team_id_red].goals)) +end + +function remove_all_huds(arena) + for playername in pairs(arena.players) do + local current_player = minetest.get_player_by_name(playername) + current_player:hud_remove(arena.huds[playername].red) + current_player:hud_remove(arena.huds[playername].blue) + end +end \ No newline at end of file diff --git a/init.lua b/init.lua index 7bbc289..278328e 100644 --- a/init.lua +++ b/init.lua @@ -1,4 +1,4 @@ ---20221002_1a +--20221004_2c local S = minetest.get_translator("the_bridge") @@ -26,6 +26,8 @@ arena_lib.register_minigame("the_bridge", { the_bridge_area_pos_1 = {x = 0, y = 0, z = 0}, the_bridge_area_pos_2 = {x = 0, y = 0, z = 0}, mapdata = nil, + finished = false, + huds = {} }, in_game_physics = { speed = player_speed, @@ -40,6 +42,11 @@ arena_lib.register_minigame("the_bridge", { team_properties = { goals = 0 }, + + --[[player_properties = { + scoreboard_red = nil, + scoreboard_blue = nil, + },--]] }) @@ -48,6 +55,7 @@ if not minetest.get_modpath("lib_chatcmdbuilder") then end dofile(minetest.get_modpath("the_bridge") .. "/setup.lua") +dofile(minetest.get_modpath("the_bridge") .. "/hud.lua") dofile(minetest.get_modpath("the_bridge") .. "/the_bridge.lua") diff --git a/mod.conf b/mod.conf index b4f538d..0489956 100644 --- a/mod.conf +++ b/mod.conf @@ -1,2 +1,2 @@ author = chmodsayshello -depends = arena_lib, walkover +depends = arena_lib, walkover, default diff --git a/setup.lua b/setup.lua index 48a41bc..f34ad27 100644 --- a/setup.lua +++ b/setup.lua @@ -39,10 +39,12 @@ arena_lib.on_load("the_bridge", function(arena) arena_lib.force_arena_ending("the_bridge", arena) minetest.log("warning","The Bridge is not supposed to run without any teams!") end --this game is not supposed to be used without teams! + create_huds(arena) + after_goal(arena) --gives all players their items and teleports them to spawners + send_message(arena,S("GO!")) end) - arena_lib.on_enable("the_bridge", function(arena, p_name) savemap(arena.the_bridge_area_pos_1,arena.the_bridge_area_pos_2,arena) return true @@ -55,4 +57,10 @@ end) arena_lib.on_disable("the_bridge", function(arena, p_name) restore_map(arena) return true +end) + +arena_lib.on_quit("the_bridge", function(arena, p_name, is_spectator, reason) + player = minetest.get_player_by_name(p_name) + player:hud_remove(arena.huds[p_name].blue) + player:hud_remove(arena.huds[p_name].red) end) \ No newline at end of file diff --git a/the_bridge.lua b/the_bridge.lua index e53367d..81b8a99 100644 --- a/the_bridge.lua +++ b/the_bridge.lua @@ -1,19 +1,35 @@ local S = minetest.get_translator("the_bridge") -local function after_goal(arena) +local function set_player_inventory(player) + local stonestack = ItemStack("default:stone 99") + local pickstack = ItemStack("the_bridge:diapick") + local swordstack = ItemStack("the_bridge:stonesword") + local gapplestack = ItemStack("the_bridge:gapple 16") + + local inv = player:get_inventory() + local hotbar = {swordstack,pickstack,gapplestack,stonestack,stonestack,stonestack} + inv:set_list("main", hotbar) +end + +function after_goal(arena) --global because its called once outside of this file + restore_map(arena) local players_team_red = arena_lib.get_players_in_team(arena, team_id_red, true) local players_team_blue = arena_lib.get_players_in_team(arena, team_id_blue, true) for player_index in ipairs(players_team_red) do local player = players_team_red[player_index] + set_player_inventory(player) player:set_hp(20) player:set_pos(arena_lib.get_random_spawner(arena, team_id_red)) + update_huds(arena,player) end for player_index in ipairs(players_team_blue) do local player = players_team_blue[player_index] + set_player_inventory(player) player:set_hp(20) player:set_pos(arena_lib.get_random_spawner(arena, team_id_blue)) + update_huds(arena,player) end end @@ -26,6 +42,8 @@ local goalfunc = function(pos, node, player) if nodename == "the_bridge:goal_area_red" then arena.teams[team_id_red].goals = arena.teams[team_id_red].goals +1 if arena.teams[team_id_red].goals >= 5 and arena.in_game then + if arena.finished then return end + arena.finished = true arena_lib.load_celebration("the_bridge", arena, team_id_red) return end @@ -34,6 +52,8 @@ local goalfunc = function(pos, node, player) elseif nodename == "the_bridge:goal_area_blue" then arena.teams[team_id_blue].goals = arena.teams[team_id_blue].goals +1 if arena.teams[team_id_blue].goals >= 5 and arena.in_game then + if arena.finished then return end + arena.finished = true arena_lib.load_celebration("the_bridge", arena, team_id_blue) return end @@ -41,9 +61,34 @@ local goalfunc = function(pos, node, player) end end +arena_lib.on_death("the_bridge", function(arena, p_name, reason) + local players_team_red = arena_lib.get_players_in_team(arena, team_id_red, false) + local players_team_blue = arena_lib.get_players_in_team(arena, team_id_blue, false) + + for player_index in ipairs(players_team_red) do + if players_team_red[player_index] == p_name then + minetest.get_player_by_name(p_name):set_pos(arena_lib.get_random_spawner(arena, team_id_red)) + end + end + + for player_index in ipairs(players_team_blue) do + if players_team_blue[player_index] == p_name then + minetest.get_player_by_name(p_name):set_pos(arena_lib.get_random_spawner(arena, team_id_blue)) + end + end + + set_player_inventory(minetest.get_player_by_name(p_name)) + minetest.get_player_by_name(p_name):set_hp(20) +end) + +arena_lib.on_celebration("the_bridge", function(arena, winners) + remove_all_huds(arena) +end) + + + + --- __________________ ---__________________/Node Registration\____________ minetest.register_node("the_bridge:goal_area_red",{ description = S("Red Goal"), drawtype = "glasslike", @@ -86,3 +131,34 @@ minetest.register_node("the_bridge:void", { drop = "", damage_per_second = 40, }) + +minetest.register_tool("the_bridge:stonesword", { + description = S("Stone Sword"), + inventory_image = "default_tool_stonesword.png", + tool_capabilities = { + full_punch_interval = 1.2, + max_drop_level=0, + damage_groups = {fleshy=8}, + }, +}) + +minetest.register_tool("the_bridge:diapick", { + description = S("Diamond Pickaxe"), + inventory_image = "default_tool_diamondpick.png", + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level=3, + groupcaps={ + cracky = {times={[1]=2.0, [2]=1.0, [3]=0.50}, uses=0, maxlevel=3}, + }, + }, +}) + + +local gappleeat = minetest.item_eat(8,"") +minetest.register_craftitem("the_bridge:gapple",{ + on_place = gappleeat, + on_secondary_use = gappleeat, + description = S("Golden Apple"), + inventory_image = "default_apple.png^[colorize:#ead535", +}) \ No newline at end of file