+ fixed @ not returning the correct arena name

+ code cleaning
master
Giov4 2020-10-20 21:28:53 +02:00
parent ad14f0107f
commit 7116333bd5
4 changed files with 61 additions and 55 deletions

View File

@ -40,27 +40,29 @@ end
local function create_glass_cage(player)
local function set_glass(relative_pos)
local node_pos = vector.round(vector.add(player:get_pos(), relative_pos))
if minetest.get_node(node_pos).name == "air" then
minetest.add_node(node_pos, {name="default:glass"})
end
local function set_glass(player, relative_pos)
local node_pos = vector.round(vector.add(player:get_pos(), relative_pos))
if minetest.get_node(node_pos).name == "air" then
minetest.add_node(node_pos, {name="default:glass"})
end
end
local function create_glass_cage(player)
minetest.after(0.1, function()
local pl_pos = player:get_pos()
player:set_physics_override({gravity=0, jump=0})
player:add_player_velocity(vector.multiply(player:get_player_velocity(), -1))
set_glass({x = 0,y = -1,z = 0})
set_glass({x = 0,y = -2,z = 0})
set_glass({x = 1,y = 1,z = 0})
set_glass({x = -1,y = 1,z = 0})
set_glass({x = 0,y = 1,z = 1})
set_glass({x = 0,y = 1,z = -1})
set_glass({x = 0,y = 2,z = 0})
set_glass(player, {x = 0,y = -1,z = 0})
set_glass(player, {x = 0,y = -2,z = 0})
set_glass(player, {x = 1,y = 1,z = 0})
set_glass(player, {x = -1,y = 1,z = 0})
set_glass(player, {x = 0,y = 1,z = 1})
set_glass(player, {x = 0,y = 1,z = -1})
set_glass(player, {x = 0,y = 2,z = 0})
-- teleports the player back in the glass
minetest.after(1, function()
@ -103,8 +105,7 @@ arena_lib.on_start("skywars", function(arena)
local player = minetest.get_player_by_name(pl_name)
skywars.generate_HUD(arena, pl_name)
-- saving original speed
arena.players[pl_name].speed = player:get_physics_override().speed
arena.players[pl_name].original_speed = player:get_physics_override().speed
player:set_physics_override({speed = skywars_settings.player_speed, gravity=1, jump=1})
skywars.activate_enderpearl(player, arena)
@ -131,8 +132,7 @@ arena_lib.on_end("skywars", function(arena, players)
remove_privs(pl_name)
skywars.remove_armor(player)
-- restore player's original speed
player:set_physics_override({speed=arena.players[pl_name].speed})
player:set_physics_override({speed=arena.players[pl_name].original_speed})
skywars.block_enderpearl(player, arena)
end
end)
@ -147,10 +147,8 @@ arena_lib.on_death("skywars", function(arena, pl_name, reason)
local killer = reason.object:get_player_name()
arena_lib.send_message_players_in_arena(arena, skywars_settings.prefix .. skywars.T("@1 was killed by @2", pl_name, killer))
-- arena.HUDs[killer].players_killed[1] == HUD ID
-- arena.HUDs[killer].players_killed[2] == players amount
arena.HUDs[killer].players_killed[2] = arena.HUDs[killer].players_killed[2] + 1
reason.object:hud_change(arena.HUDs[killer].players_killed[1], "text", tostring(arena.HUDs[killer].players_killed[2]))
arena.HUDs[killer].players_killed.amount = arena.HUDs[killer].players_killed.amount + 1
reason.object:hud_change(arena.HUDs[killer].players_killed.id, "text", tostring(arena.HUDs[killer].players_killed.amount))
end
end
@ -168,7 +166,7 @@ arena_lib.on_quit("skywars", function(arena, pl_name)
remove_privs(pl_name)
player:set_physics_override({speed=arena.players[pl_name].speed})
player:set_physics_override({speed=arena.players[pl_name].original_speed})
skywars.update_players_counter(arena, false)
skywars.remove_HUD(arena, pl_name)
skywars.remove_armor(player)
@ -215,7 +213,7 @@ end)
arena_lib.on_timer_tick("skywars", function(arena)
if arena.current_time % 5 == 0 then
if arena.current_time % 3 == 0 then
skywars.kill_players_out_map(arena)
end
end)

View File

@ -58,7 +58,7 @@ function skywars.generate_HUD(arena, pl_name)
background_players_counter = background_players_counter_,
players_count = players_count_,
-- HUD ID, amount of players killed
players_killed = {players_killed_, 0},
players_killed = {id = players_killed_, amount = 0},
background_kill_counter = background_kill_counter_
}
@ -72,7 +72,7 @@ function skywars.remove_HUD(arena, pl_name)
player:hud_remove(arena.HUDs[pl_name].background_players_counter)
player:hud_remove(arena.HUDs[pl_name].background_kill_counter)
player:hud_remove(arena.HUDs[pl_name].players_count)
player:hud_remove(arena.HUDs[pl_name].players_killed[1])
player:hud_remove(arena.HUDs[pl_name].players_killed.id)
end

View File

@ -1,9 +1,10 @@
local function get_valid_arena(arena_name, sender, property_is_changing)
local arena = {}
local arena = nil
if string.match(arena_name, "@") or string.match(arena_name, "@") then
local player_pos = minetest.get_player_by_name(sender):get_pos()
arena = skywars.get_arena_by_pos(player_pos)
if arena then arena_name = arena.name end
else
local id, arena = arena_lib.get_arena_by_name("skywars", arena_name)
end
@ -22,7 +23,21 @@ local function get_valid_arena(arena_name, sender, property_is_changing)
end
end
return arena
return arena, arena_name
end
local function get_looking_node(pl_name)
local player = minetest.get_player_by_name(pl_name)
local look_dir = player:get_look_dir()
local pos_head = vector.add(player:get_pos(), {x=0, y=1.5, z=0})
local result, pos = minetest.line_of_sight(
vector.add(pos_head, vector.divide(look_dir, 4)),
vector.add(pos_head, vector.multiply(look_dir, 10))
)
return result, pos
end
@ -243,7 +258,7 @@ function(cmd)
cmd:sub("addtreasure :arena :treasure :count:int :rarity:number :preciousness:int",
function(sender, arena_name, treasure_name, count, rarity, preciousness )
local arena = get_valid_arena(arena_name, sender, true)
local arena, arena_name = get_valid_arena(arena_name, sender, true)
if not arena then
return
@ -283,7 +298,7 @@ function(cmd)
cmd:sub("addtreasure hand :arena :rarity:number :preciousness:int",
function(sender, arena_name, rarity, preciousness)
local arena = get_valid_arena(arena_name, sender, true)
local arena, arena_name = get_valid_arena(arena_name, sender, true)
local treasure_name = minetest.get_player_by_name(sender):get_wielded_item():get_name()
local count = minetest.get_player_by_name(sender):get_wielded_item():get_count()
@ -322,7 +337,7 @@ function(cmd)
cmd:sub("removetreasure hand :arena", function(sender, arena_name)
local arena = get_valid_arena(arena_name, sender, true)
local arena, arena_name = get_valid_arena(arena_name, sender, true)
local found = {true, false} -- the first is used to repeat the for until nothing is found
local treasure_name = minetest.get_player_by_name(sender):get_wielded_item():get_name()
@ -355,7 +370,7 @@ function(cmd)
cmd:sub("removetreasure :arena :treasure", function(sender, arena_name, treasure_name)
local arena = get_valid_arena(arena_name, sender, true)
local arena, arena_name = get_valid_arena(arena_name, sender, true)
local found = {true, false} -- the first is used to repeat the for until nothing is found
if not arena then
@ -384,7 +399,7 @@ function(cmd)
cmd:sub("removetreasure id :arena :id:int", function(sender, arena_name, treasure_id)
local arena = get_valid_arena(arena_name, sender, true)
local arena, arena_name = get_valid_arena(arena_name, sender, true)
local treasure_name = ""
if not arena then
@ -455,7 +470,7 @@ function(cmd)
cmd:sub("searchtreasure :arena :treasure", function(sender, arena_name, treasure_name)
local arena = get_valid_arena(arena_name, sender, true)
local arena, arena_name = get_valid_arena(arena_name, sender, true)
if not arena then
return
@ -479,7 +494,7 @@ function(cmd)
cmd:sub("addchest pos :arena :minpreciousness:int :maxpreciousness:int :tmin:int :tmax:int",
function(sender, arena_name, min_preciousness, max_preciousness, t_min, t_max)
local arena = get_valid_arena(arena_name, sender, true)
local arena, arena_name = get_valid_arena(arena_name, sender, true)
local pos = vector.round(minetest.get_player_by_name(sender):get_pos())
local exists = false
local chest_id = 1
@ -525,16 +540,14 @@ function(cmd)
cmd:sub("addchest :arena :minpreciousness:int :maxpreciousness:int :tmin:int :tmax:int",
function(sender, arena_name, min_preciousness, max_preciousness, t_min, t_max)
local arena = get_valid_arena(arena_name, sender, true)
local player = minetest.get_player_by_name(sender)
local look_dir = player:get_look_dir()
local pos_head = vector.add(player:get_pos(), {x=0, y=1.5, z=0})
local result, pos = minetest.line_of_sight(vector.add(pos_head, vector.divide(look_dir, 4)), vector.add(pos_head, vector.multiply(look_dir, 10)))
local exists = false
local arena, arena_name = get_valid_arena(arena_name, sender, true)
local result, pos = get_looking_node(sender)
if result then
skywars.print_error(sender, skywars.T("You're not looking at anything!"))
return
elseif not arena then
return
end
local chest_id = 1
@ -603,19 +616,14 @@ function(cmd)
cmd:sub("removechest :arena", function(sender, arena_name)
local arena = get_valid_arena(arena_name, sender, true)
local arena, arena_name = get_valid_arena(arena_name, sender, true)
local found = false
local player = minetest.get_player_by_name(sender)
local look_dir = player:get_look_dir()
local pos_head = vector.add(player:get_pos(), {x=0, y=1.5, z=0})
local result, pos = minetest.line_of_sight(vector.add(pos_head, vector.divide(look_dir, 4)), vector.add(pos_head, vector.multiply(look_dir, 10)))
local result, pos = get_looking_node(sender)
if result then
skywars.print_error(sender, skywars.T("You're not looking at anything!"))
return
end
if not arena then
elseif not arena then
return
end
@ -638,7 +646,7 @@ function(cmd)
cmd:sub("removechest id :arena :id:int", function(sender, arena_name, chest_id)
local arena = get_valid_arena(arena_name, sender, true)
local arena, arena_name = get_valid_arena(arena_name, sender, true)
local found = false
if not arena then
@ -873,7 +881,7 @@ function(cmd)
cmd:sub("arenakit add :arena :kit",
function(sender, arena_name, kit_name)
local kits = skywars.load_kits()
local arena = get_valid_arena(arena_name, sender, true)
local arena, arena_name = get_valid_arena(arena_name, sender, true)
if not arena then
return
@ -894,7 +902,7 @@ function(cmd)
cmd:sub("arenakit remove :arena :kit",
function(sender, arena_name, kit_name)
local kits = skywars.load_kits()
local arena = get_valid_arena(arena_name, sender, true)
local arena, arena_name = get_valid_arena(arena_name, sender, true)
local found = false
if not arena then
@ -949,7 +957,7 @@ function(cmd)
cmd:sub("pos1 :arena", function(sender, arena_name)
local player = minetest.get_player_by_name(sender)
local arena = get_valid_arena(arena_name, sender, true)
local arena, arena_name = get_valid_arena(arena_name, sender, true)
if not arena then
return
@ -966,7 +974,7 @@ function(cmd)
cmd:sub("pos2 :arena", function(sender, arena_name)
local player = minetest.get_player_by_name(sender)
local arena = get_valid_arena(arena_name, sender, true)
local arena, arena_name = get_valid_arena(arena_name, sender, true)
if not arena then
return
@ -991,7 +999,7 @@ function(cmd)
cmd:sub("reset :arena", function(sender, arena_name)
local player = minetest.get_player_by_name(sender)
local arena = get_valid_arena(arena_name, sender, true)
local arena, arena_name = get_valid_arena(arena_name, sender, true)
if not arena then
return

View File

@ -29,7 +29,7 @@ arena_lib.register_minigame("skywars", {
kits = {}
},
player_properties = {
speed = 1
original_speed = 1
},
time_mode = 2,
disabled_damage_types = disabled_damage_types_