New immunity system
This commit is contained in:
parent
1d5f7a736b
commit
af7f4e20a1
@ -27,14 +27,8 @@ end)
|
|||||||
|
|
||||||
|
|
||||||
arena_lib.on_start("block_league", function(arena)
|
arena_lib.on_start("block_league", function(arena)
|
||||||
|
|
||||||
for pl_name, stats in pairs(arena.players) do
|
|
||||||
minetest.get_player_by_name(pl_name):set_armor_groups({immortal = nil})
|
|
||||||
end
|
|
||||||
|
|
||||||
block_league.round_start(arena)
|
block_league.round_start(arena)
|
||||||
block_league.energy_refill_loop(arena)
|
block_league.energy_refill_loop(arena)
|
||||||
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
@ -46,8 +40,6 @@ arena_lib.on_join("block_league", function(p_name, arena)
|
|||||||
create_and_show_HUD(arena, p_name)
|
create_and_show_HUD(arena, p_name)
|
||||||
block_league.refill_weapons(arena, p_name)
|
block_league.refill_weapons(arena, p_name)
|
||||||
|
|
||||||
minetest.get_player_by_name(p_name):set_armor_groups({immortal = nil})
|
|
||||||
|
|
||||||
minetest.sound_play("bl_voice_fight", {to_player = p_name})
|
minetest.sound_play("bl_voice_fight", {to_player = p_name})
|
||||||
|
|
||||||
minetest.after(0.01, function()
|
minetest.after(0.01, function()
|
||||||
@ -64,7 +56,7 @@ arena_lib.on_celebration("block_league", function(arena, winner_name)
|
|||||||
arena.weapons_disabled = true
|
arena.weapons_disabled = true
|
||||||
|
|
||||||
for pl_name, stats in pairs(arena.players) do
|
for pl_name, stats in pairs(arena.players) do
|
||||||
minetest.get_player_by_name(pl_name):set_armor_groups({immortal=1})
|
minetest.get_player_by_name(pl_name):get_meta():set_int("bl_immunity", 1)
|
||||||
panel_lib.get_panel(pl_name, "bl_scoreboard"):show()
|
panel_lib.get_panel(pl_name, "bl_scoreboard"):show()
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
@ -76,7 +68,7 @@ arena_lib.on_end("block_league", function(arena, players)
|
|||||||
for pl_name, stats in pairs(players) do
|
for pl_name, stats in pairs(players) do
|
||||||
|
|
||||||
remove_HUD(pl_name)
|
remove_HUD(pl_name)
|
||||||
minetest.get_player_by_name(pl_name):set_armor_groups({immortal = nil})
|
reset_meta(pl_name)
|
||||||
|
|
||||||
block_league.update_storage(pl_name)
|
block_league.update_storage(pl_name)
|
||||||
end
|
end
|
||||||
@ -101,13 +93,8 @@ end)
|
|||||||
|
|
||||||
|
|
||||||
arena_lib.on_quit("block_league", function(arena, p_name)
|
arena_lib.on_quit("block_league", function(arena, p_name)
|
||||||
|
|
||||||
remove_HUD(p_name)
|
remove_HUD(p_name)
|
||||||
|
reset_meta(p_name)
|
||||||
local player = minetest.get_player_by_name(p_name)
|
|
||||||
|
|
||||||
player:set_armor_groups({immortal = nil})
|
|
||||||
player:get_meta():set_int("bl_has_ball", 0)
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
@ -120,14 +107,15 @@ end)
|
|||||||
|
|
||||||
function reset_meta(p_name)
|
function reset_meta(p_name)
|
||||||
|
|
||||||
local player = minetest.get_player_by_name(p_name)
|
local p_meta = minetest.get_player_by_name(p_name):get_meta()
|
||||||
|
|
||||||
player:get_meta():set_int("bl_has_ball", 0)
|
p_meta:set_int("bl_has_ball", 0)
|
||||||
player:get_meta():set_int("bl_weap_delay", 0)
|
p_meta:set_int("bl_weap_delay", 0)
|
||||||
player:get_meta():set_int("bl_weap_secondary_delay", 0)
|
p_meta:set_int("bl_weap_secondary_delay", 0)
|
||||||
player:get_meta():set_int("bl_bouncer_delay", 0)
|
p_meta:set_int("bl_bouncer_delay", 0)
|
||||||
player:get_meta():set_int("bl_death_delay", 0)
|
p_meta:set_int("bl_death_delay", 0)
|
||||||
player:get_meta():set_int("bl_reloading", 0)
|
p_meta:set_int("bl_immunity", 0)
|
||||||
|
p_meta:set_int("bl_reloading", 0)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1,23 +1,15 @@
|
|||||||
function block_league.immunity(player)
|
function block_league.immunity(player)
|
||||||
|
|
||||||
local p_name = player:get_player_name()
|
local p_name = player:get_player_name()
|
||||||
|
local p_meta = player:get_meta()
|
||||||
local immunity_time = arena_lib.get_arena_by_player(p_name).immunity_time
|
local immunity_time = arena_lib.get_arena_by_player(p_name).immunity_time
|
||||||
local immunity_ID = 0
|
|
||||||
|
|
||||||
player:set_armor_groups({immortal=1})
|
p_meta:set_int("bl_immunity", 1)
|
||||||
|
|
||||||
-- in caso uno spari, perda l'immunità, muoia subito e resusciti, il tempo d'immunità riparte da capo.
|
|
||||||
-- Ne tengo traccia con un metadato che comparo nell'after
|
|
||||||
immunity_ID = player:get_meta():get_int("bl_immunity_ID") + 1
|
|
||||||
player:get_meta():set_int("bl_immunity_ID", immunity_ID)
|
|
||||||
|
|
||||||
minetest.after(immunity_time, function()
|
minetest.after(immunity_time, function()
|
||||||
if not arena_lib.is_player_in_arena(p_name, "block_league") then return end
|
if not arena_lib.is_player_in_arena(p_name, "block_league") then return end
|
||||||
if immunity_ID == player:get_meta():get_int("bl_immunity_ID") then
|
if p_meta:get_int("bl_immunity") == 1 then
|
||||||
if player:get_armor_groups().immortal and player:get_armor_groups().immortal == 1 then
|
p_meta:set_int("bl_immunity", 0)
|
||||||
player:set_armor_groups({immortal = nil})
|
|
||||||
end
|
|
||||||
player:get_meta():set_int("bl_immunity_ID", 0)
|
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ minetest.register_tool("block_league:bouncer", {
|
|||||||
local knockback = user:get_player_velocity().y < 1 and -15 or -10
|
local knockback = user:get_player_velocity().y < 1 and -15 or -10
|
||||||
|
|
||||||
user:add_player_velocity(vector.multiply(dir, knockback))
|
user:add_player_velocity(vector.multiply(dir, knockback))
|
||||||
minetest.sound_play("bl_bouncer", {to_player = p_name, max_hear_distance = 5})
|
minetest.sound_play("bl_bouncer", {to_player = p_name})
|
||||||
|
|
||||||
arena.players[p_name].energy = arena.players[p_name].energy - 20
|
arena.players[p_name].energy = arena.players[p_name].energy - 20
|
||||||
end,
|
end,
|
||||||
|
@ -229,6 +229,7 @@ function block_league.apply_damage(user, targets, damage, knockback, decrease_da
|
|||||||
for _, target in pairs(targets) do
|
for _, target in pairs(targets) do
|
||||||
|
|
||||||
if target:get_hp() <= 0 then return end
|
if target:get_hp() <= 0 then return end
|
||||||
|
if target:get_meta():get_int("bl_immunity") == 1 then return end
|
||||||
|
|
||||||
local t_name = target:get_player_name()
|
local t_name = target:get_player_name()
|
||||||
|
|
||||||
@ -423,8 +424,8 @@ end
|
|||||||
|
|
||||||
|
|
||||||
function check_immunity(player)
|
function check_immunity(player)
|
||||||
if player:get_armor_groups().immortal and player:get_armor_groups().immortal == 1 then
|
if player:get_meta():get_int("bl_immunity") == 1 then
|
||||||
player:set_armor_groups({immortal = nil})
|
player:get_meta():set_int("bl_immunity", 0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
2
init.lua
2
init.lua
@ -29,7 +29,7 @@ arena_lib.register_minigame("block_league", {
|
|||||||
sneak_glitch = true,
|
sneak_glitch = true,
|
||||||
new_move = true
|
new_move = true
|
||||||
},
|
},
|
||||||
disabled_damage_types = {"fall"},
|
disabled_damage_types = {"fall", "punch"},
|
||||||
|
|
||||||
properties = {
|
properties = {
|
||||||
-- 1 = Touchdown
|
-- 1 = Touchdown
|
||||||
|
@ -33,6 +33,7 @@ minetest.register_on_dieplayer(function(player)
|
|||||||
if not arena_lib.is_player_in_arena(player:get_player_name(), "block_league") then return end
|
if not arena_lib.is_player_in_arena(player:get_player_name(), "block_league") then return end
|
||||||
|
|
||||||
player:get_meta():set_int("bl_death_delay", 1)
|
player:get_meta():set_int("bl_death_delay", 1)
|
||||||
|
block_league.immunity(player)
|
||||||
|
|
||||||
minetest.after(6, function()
|
minetest.after(6, function()
|
||||||
if not player or not player:get_meta() then return end
|
if not player or not player:get_meta() then return end
|
||||||
@ -57,7 +58,6 @@ minetest.register_on_respawnplayer(function(player)
|
|||||||
block_league.energy_update(arena, p_name)
|
block_league.energy_update(arena, p_name)
|
||||||
|
|
||||||
block_league.refill_weapons(arena, p_name)
|
block_league.refill_weapons(arena, p_name)
|
||||||
block_league.immunity(player)
|
|
||||||
|
|
||||||
player:set_physics_override({
|
player:set_physics_override({
|
||||||
speed = block_league.SPEED,
|
speed = block_league.SPEED,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user