+ Now the treasures have an id property instead of using their position

in the table
+ Fixed: id generation system
+ Renamed skywars.remove_all with skywars.remove_all_armor
+ Fixed: player used to slide when he/she got teleported in the arena
+ Now the armor gets removed even on /forceend
master
Giov4 2020-09-19 18:46:17 +02:00
parent 533337dc82
commit 3b9b387280
3 changed files with 41 additions and 16 deletions

View File

@ -1,5 +1,4 @@
arena_lib.on_load("skywars", function(arena)
if arena.reset == false then
minetest.place_schematic(arena.pos1, arena.schematic)
arena.reset = true
@ -9,9 +8,11 @@ arena_lib.on_load("skywars", function(arena)
skywars.fill_chests(arena)
for pl_name in pairs(arena.players) do
local player = minetest.get_player_by_name(pl_name)
skywars.show_kit_selector(pl_name, arena)
minetest.after(0.1, function() player:add_player_velocity(vector.multiply(player:get_player_velocity(), -1)) end)
end
end)
@ -39,7 +40,7 @@ arena_lib.on_celebration("skywars", function(arena, winner_name)
skywars.deactivate_hotbar(player)
skywars.remove_HUD(arena, pl_name)
skywars.remove_all(player)
skywars.remove_all_armor(player)
end
end)
@ -51,7 +52,7 @@ arena_lib.on_end("skywars", function(arena, players)
for pl_name in pairs(arena.players) do
local player = minetest.get_player_by_name(pl_name)
skywars.remove_all(player)
skywars.remove_all_armor(player)
-- restore player's original speed
player:set_physics_override({speed=arena.players[pl_name].speed})
end
@ -75,7 +76,7 @@ arena_lib.on_death("skywars", function(arena, pl_name, reason)
arena_lib.send_message_players_in_arena(arena, skywars_settings.prefix .. skywars.T("@1 is dead", pl_name))
end
skywars.remove_all(player)
skywars.remove_all_armor(player)
skywars.deactivate_hotbar(player)
arena_lib.remove_player_from_arena(pl_name, 1)
skywars.update_players_counter(arena)
@ -84,9 +85,12 @@ end)
arena_lib.on_quit("skywars", function(arena, pl_name)
local player = minetest.get_player_by_name(pl_name)
skywars.deactivate_hotbar(minetest.get_player_by_name(pl_name))
skywars.update_players_counter(arena, false)
skywars.remove_HUD(arena, pl_name)
skywars.remove_all_armor(player)
end)
@ -95,7 +99,7 @@ arena_lib.on_disconnect("skywars", function(arena, pl_name)
local player = minetest.get_player_by_name(pl_name)
skywars.deactivate_hotbar(player)
skywars.update_players_counter(arena, false)
skywars.remove_all(player)
skywars.remove_all_armor(player)
end)
@ -106,7 +110,7 @@ arena_lib.on_kick("skywars", function(arena, pl_name)
skywars.deactivate_hotbar(player)
skywars.update_players_counter(arena, false)
skywars.remove_HUD(arena, pl_name)
skywars.remove_all(player)
skywars.remove_all_armor(player)
end)

View File

@ -67,7 +67,7 @@ end
function skywars.remove_all(player)
function skywars.remove_all_armor(player)
local name, armor_inv = armor:get_valid_player(player, "[remove_all]")
if not name then

View File

@ -198,7 +198,15 @@ function(cmd)
return
end
table.insert(arena.treasures, {name = treasure_name, rarity = rarity, count = count, preciousness = preciousness})
local item_id = 1
if arena.treasures[#arena.treasures] then item_id = arena.treasures[#arena.treasures].id+1 end
table.insert(arena.treasures, {
name = treasure_name,
rarity = rarity,
count = count,
preciousness = preciousness,
id = item_id
})
arena_lib.change_arena_property(sender, "skywars", arena_name, "treasures", arena.treasures, false)
skywars.print_msg(sender, skywars.T("x@1 @2 added to @3 with @4 rarity and @5 preciousness!",
@ -241,7 +249,15 @@ function(cmd)
return
end
table.insert(arena.treasures, {name = treasure_name, rarity = rarity, count = count, preciousness = preciousness})
local item_id = 1
if arena.treasures[#arena.treasures] then item_id = arena.treasures[#arena.treasures].id+1 end
table.insert(arena.treasures, {
name = treasure_name,
rarity = rarity,
count = count,
preciousness = preciousness,
id = item_id
})
arena_lib.change_arena_property(sender, "skywars", arena_name, "treasures", arena.treasures, false)
skywars.print_msg(sender, skywars.T("x@1 @2 added to @3 with @4 rarity and @5 preciousness!",
@ -301,7 +317,7 @@ function(cmd)
end
for i=1, #arena.treasures do
if i == treasure_id then
if arena.treasures[i].id == treasure_id then
treasure_name = arena.treasures[i].name
table.remove(arena.treasures, i)
break
@ -364,7 +380,7 @@ function(cmd)
skywars.print_msg(sender, skywars.T("Treasures list:"))
for i=1, #arena.treasures do
local treasure = arena.treasures[i]
skywars.print_msg(sender, "ID: " .. tostring(i) .. ".\n" ..
skywars.print_msg(sender, "ID: " .. arena.treasures[i].id .. ".\n" ..
skywars.T(
"name: @1 @nrarity: @2 @npreciousness: @3 @ncount: @4",
treasure.name, treasure.rarity, treasure.preciousness, treasure.count
@ -390,7 +406,7 @@ function(cmd)
for i=1, #arena.treasures do
local treasure = arena.treasures[i]
if treasure.name == treasure_name then
skywars.print_msg(sender, "ID: " .. tostring(i) .. ".\n" ..
skywars.print_msg(sender, "ID: " .. arena.treasures[i].id .. ".\n" ..
skywars.T(
"name: @1 @nrarity: @2 @npreciousness: @3 @ncount: @4",
treasure.name, treasure.rarity, treasure.preciousness, treasure.count
@ -406,6 +422,9 @@ function(cmd)
function(sender, arena_name, min_preciousness, max_preciousness, t_min, t_max)
local id, arena = arena_lib.get_arena_by_name("skywars", arena_name)
local pos = vector.round(minetest.get_player_by_name(sender):get_pos())
local chest_id = 1
if arena.chests[#arena.chests] then chest_id = arena.chests[#arena.chests].id+1 end
local chest =
{
pos = pos,
@ -413,7 +432,7 @@ function(cmd)
max_preciousness = max_preciousness,
min_treasures = t_min,
max_treasures = t_max,
id = arena.chests[#arena.chests].id + 1
id = chest_id
}
if arena_lib.is_arena_in_edit_mode(arena_name) then
@ -452,6 +471,8 @@ function(cmd)
if result then skywars.print_error(sender, skywars.T("You're not looking at anything!")) end
local chest_id = 1
if arena.chests[#arena.chests] then chest_id = arena.chests[#arena.chests].id+1 end
local chest =
{
pos = pos,
@ -459,7 +480,7 @@ function(cmd)
max_preciousness = max_preciousness,
min_treasures = t_min,
max_treasures = t_max,
id = arena.chests[#arena.chests].id + 1
id = chest_id
}
if arena_lib.is_arena_in_edit_mode(arena_name) then
@ -733,7 +754,7 @@ function(cmd)
local id, arena = arena_lib.get_arena_by_name("skywars", arena_name)
local found = false
if arena_lib.is_arena_in_edit_mode(arena_name) then
if arena_lib.is_arena_in_edit_mode(arena_name) then
skywars.print_error(sender, skywars.T("Nobody must be in the editor!"))
return
elseif arena == nil then