inventory, proper respawning and huds
This commit is contained in:
parent
9ec8b56722
commit
98bb55d528
|
@ -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
|
10
init.lua
10
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")
|
||||
|
||||
|
||||
|
|
2
mod.conf
2
mod.conf
|
@ -1,2 +1,2 @@
|
|||
author = chmodsayshello
|
||||
depends = arena_lib, walkover
|
||||
depends = arena_lib, walkover, default
|
||||
|
|
10
setup.lua
10
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)
|
|
@ -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",
|
||||
})
|
Loading…
Reference in New Issue