parent
ad14f0107f
commit
7116333bd5
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
66
commands.lua
66
commands.lua
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue