264 lines
7.3 KiB
Lua
264 lines
7.3 KiB
Lua
local S = minetest.get_translator("block_league")
|
|
|
|
local function reset_meta() end
|
|
|
|
|
|
|
|
arena_lib.on_load("block_league", function(arena)
|
|
|
|
for pl_name, stats in pairs(arena.players) do
|
|
|
|
reset_meta(pl_name)
|
|
|
|
block_league.HUD_broadcast_create(pl_name)
|
|
block_league.scoreboard_create(arena, pl_name)
|
|
block_league.HUD_teams_score_create(pl_name)
|
|
block_league.energy_create(arena, pl_name)
|
|
|
|
|
|
panel_lib.get_panel(pl_name, "blockleague_teams_score"):show()
|
|
panel_lib.get_panel(pl_name, "blockleague_energy"):show()
|
|
|
|
minetest.sound_play("block_league_voice_countdown", {
|
|
to_player = pl_name,
|
|
})
|
|
|
|
-- non crea E aggiorna l'HUD al tempo stesso, dacché l'after...
|
|
minetest.after(0.1, function()
|
|
block_league.energy_update(arena, pl_name)
|
|
end)
|
|
|
|
end
|
|
|
|
|
|
minetest.after(0.01, function()
|
|
block_league.scoreboard_update(arena)
|
|
end)
|
|
|
|
end)
|
|
|
|
function block_league.add_default_weapons(inv, arena)
|
|
local default_weapons = {"block_league:smg", "block_league:sword", "block_league:pixelgun", "block_league:bouncer"}
|
|
for i, weapon_name in pairs(default_weapons) do
|
|
inv:add_item("main", ItemStack(weapon_name))
|
|
end
|
|
end
|
|
|
|
function block_league.remove_default_weapons(inv, arena)
|
|
local default_weapons = {"block_league:smg", "block_league:sword", "block_league:pixelgun", "block_league:bouncer"}
|
|
for i, weapon_name in pairs(default_weapons) do
|
|
inv:remove_item("main", ItemStack(weapon_name .. "99"))
|
|
end
|
|
end
|
|
|
|
|
|
arena_lib.on_start("block_league", function(arena)
|
|
|
|
for pl_name, stats in pairs(arena.players) do
|
|
|
|
local player = minetest.get_player_by_name(pl_name)
|
|
block_league.add_default_weapons(player:get_inventory(), arena)
|
|
block_league.weapons_hud_create(pl_name)
|
|
panel_lib.get_panel(pl_name, "bullets_hud"):show()
|
|
|
|
player:set_physics_override({
|
|
speed = arena.high_speed,
|
|
jump = 1.5,
|
|
gravity = 1.15,
|
|
sneak_glitch = true,
|
|
new_move = true
|
|
})
|
|
|
|
minetest.sound_play("block_league_voice_fight", {
|
|
to_player = pl_name,
|
|
})
|
|
|
|
player:set_armor_groups({immortal = nil})
|
|
|
|
end
|
|
|
|
if arena.prototipo_spawn ~= nil then
|
|
local pos1 = {x = arena.prototipo_spawn.x - 1, y = arena.prototipo_spawn.y - 1, z = arena.prototipo_spawn.z - 1}
|
|
local pos2 = {x = arena.prototipo_spawn.x + 1, y = arena.prototipo_spawn.y + 1, z = arena.prototipo_spawn.z + 1}
|
|
--minetest.load_area(pos1, pos2)
|
|
--minetest.emerge_area(pos1, pos2)
|
|
minetest.forceload_block(pos1, pos2)
|
|
minetest.after(3, function()
|
|
local ent = minetest.add_entity(arena.prototipo_spawn,"block_league:prototipo",arena.name)
|
|
end)
|
|
end
|
|
|
|
block_league.energy_refill(arena)
|
|
|
|
end)
|
|
|
|
|
|
|
|
arena_lib.on_join("block_league", function(p_name, arena)
|
|
|
|
reset_meta(p_name)
|
|
|
|
local player = minetest.get_player_by_name(p_name)
|
|
|
|
block_league.HUD_broadcast_create(p_name)
|
|
block_league.scoreboard_create(arena, p_name)
|
|
block_league.HUD_teams_score_create(p_name)
|
|
block_league.energy_create(arena, p_name)
|
|
|
|
panel_lib.get_panel(p_name, "blockleague_teams_score"):show()
|
|
panel_lib.get_panel(p_name, "blockleague_energy"):show()
|
|
|
|
block_league.add_default_weapons(player:get_inventory(), arena)
|
|
block_league.weapons_hud_create(p_name)
|
|
panel_lib.get_panel(p_name, "bullets_hud"):show()
|
|
|
|
player:set_physics_override({
|
|
speed = arena.high_speed,
|
|
jump = 1.5,
|
|
gravity = 1.15,
|
|
sneak_glitch = true,
|
|
new_move = true
|
|
})
|
|
|
|
minetest.sound_play("block_league_voice_fight", {
|
|
to_player = p_name,
|
|
})
|
|
|
|
player:set_armor_groups({immortal = nil})
|
|
|
|
minetest.after(0.01, function()
|
|
block_league.energy_update(arena, p_name)
|
|
block_league.scoreboard_update(arena)
|
|
block_league.HUD_teams_score_update(arena, p_name, arena.players[p_name].teamID)
|
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
|
|
|
arena_lib.on_celebration("block_league", function(arena, winner_name)
|
|
|
|
--block_league.add_xp(winner_name, 50)
|
|
|
|
minetest.after(0.01, function()
|
|
for pl_name, stats in pairs(arena.players) do
|
|
|
|
local inv = minetest.get_player_by_name(pl_name):get_inventory()
|
|
|
|
block_league.remove_default_weapons(inv, arena)
|
|
inv:add_item("main", ItemStack("block_league:match_over"))
|
|
|
|
local player = minetest.get_player_by_name(pl_name)
|
|
player:set_armor_groups({immortal=1})
|
|
|
|
panel_lib.get_panel(pl_name, "blockleague_scoreboard"):show()
|
|
end
|
|
end)
|
|
end)
|
|
|
|
|
|
|
|
arena_lib.on_end("block_league", function(arena, players)
|
|
|
|
for pl_name, stats in pairs(players) do
|
|
|
|
--local stats = panel_lib.get_panel(pl_name, "blockleague_stats")
|
|
local scoreboard = panel_lib.get_panel(pl_name, "blockleague_scoreboard")
|
|
local team_score = panel_lib.get_panel(pl_name, "blockleague_teams_score")
|
|
|
|
--stats:remove()
|
|
scoreboard:remove()
|
|
team_score:remove()
|
|
panel_lib.get_panel(pl_name, "bullets_hud"):remove()
|
|
block_league.HUD_broadcast_remove(pl_name)
|
|
panel_lib.get_panel(pl_name, "blockleague_energy"):remove()
|
|
|
|
block_league.update_storage(pl_name)
|
|
|
|
local player = minetest.get_player_by_name(pl_name)
|
|
player:set_armor_groups({immortal = nil})
|
|
|
|
-- se non c'è hub_manager, resetto la fisica
|
|
if not minetest.get_modpath("hub_manager") then
|
|
minetest.get_player_by_name(pl_name):set_physics_override({
|
|
speed = 1,
|
|
jump = 1,
|
|
gravity = 1,
|
|
sneak_glitch = false
|
|
})
|
|
end
|
|
end
|
|
end)
|
|
|
|
|
|
|
|
arena_lib.on_death("block_league", function(arena, p_name, reason)
|
|
|
|
-- se muoio suicida, perdo una kill
|
|
if reason.type == "fall" or reason.player_name == p_name then
|
|
|
|
local p_stats = arena.players[p_name]
|
|
|
|
p_stats.kills = p_stats.kills - 1
|
|
local team = arena.teams[p_stats.teamID]
|
|
team.deaths = team.deaths + 1
|
|
block_league.scoreboard_update(arena)
|
|
block_league.subtract_exp(p_name, 10)
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
arena_lib.on_quit("block_league", function(arena, p_name)
|
|
|
|
--local stats = panel_lib.get_panel(p_name, "blockleague_stats")
|
|
local scoreboard = panel_lib.get_panel(p_name, "blockleague_scoreboard")
|
|
local team_score = panel_lib.get_panel(p_name, "blockleague_teams_score")
|
|
|
|
--stats:remove()
|
|
scoreboard:remove()
|
|
team_score:remove()
|
|
panel_lib.get_panel(p_name, "bullets_hud"):remove()
|
|
panel_lib.get_panel(p_name, "blockleague_energy"):remove()
|
|
block_league.HUD_broadcast_remove(p_name)
|
|
|
|
local player = minetest.get_player_by_name(p_name)
|
|
|
|
player:set_armor_groups({immortal = nil})
|
|
player:get_meta():set_int("blockleague_has_ball", 0)
|
|
|
|
-- se non c'è hub_manager, resetto la fisica
|
|
if not minetest.get_modpath("hub_manager") then
|
|
minetest.get_player_by_name(p_name):set_physics_override({
|
|
speed = 1,
|
|
jump = 1,
|
|
gravity = 1,
|
|
sneak_glitch = false
|
|
})
|
|
end
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
----------------------------------------------
|
|
---------------FUNZIONI LOCALI----------------
|
|
----------------------------------------------
|
|
|
|
function reset_meta(p_name)
|
|
|
|
local player = minetest.get_player_by_name(p_name)
|
|
|
|
player:get_meta():set_int("blockleague_has_ball", 0)
|
|
player:get_meta():set_int("blockleague_weap_delay", 0)
|
|
player:get_meta():set_int("blockleague_weap_secondary_delay", 0)
|
|
player:get_meta():set_int("blockleague_bouncer_delay", 0)
|
|
player:get_meta():set_int("blockleague_death_delay", 0)
|
|
player:get_meta():set_int("reloading", 0)
|
|
|
|
|
|
end
|