- Hotbar 3d_armor implementation

+ Exschem support
master
Giov4 2020-09-21 21:48:58 +02:00
parent 6f4da65107
commit 7e2ba29a41
7 changed files with 53 additions and 40 deletions

View File

@ -57,10 +57,10 @@ skywars_settings.hud__kit_background = "Kits.png"
-- The width of the bacgkround texture in real coordinates,
-- a unit of measurement which is roughly around 64 pixels, but
-- varies based on the screen density and scaling settings of the client
skywars_settings.background_width = 12
skywars_settings.background_width = 8
-- The height of the bacgkround texture in real coordinates
skywars_settings.background_height = 12
skywars_settings.background_height = 8
-- The x position of the first buttons row
skywars_settings.starting_x = 1.7
@ -78,8 +78,8 @@ skywars_settings.distance_y = 3
skywars_settings.buttons_per_row = 3
-- The buttons width in real coordinates
skywars_settings.buttons_width = 2.2
skywars_settings.buttons_width = 2
-- The buttons height in real coordinates
skywars_settings.buttons_height = 2
skywars_settings.buttons_height = 1.8

View File

@ -1,22 +1,21 @@
arena_lib.on_load("skywars", function(arena)
if arena.reset == false then
minetest.place_schematic(arena.pos1, arena.schematic)
if minetest.get_modpath("exschem") == "" or minetest.get_modpath("exschem") == nil then
minetest.place_schematic(arena.pos1, arena.schematic)
else
skywars.load_exschem_schematic(arena.pos1, arena.schematic)
end
arena.reset = true
end
skywars.place_chests(arena)
skywars.fill_chests(arena)
minetest.after(skywars_settings.loading_time, function()
skywars.place_chests(arena)
skywars.fill_chests(arena)
end)
for pl_name in pairs(arena.players) do
local player = minetest.get_player_by_name(pl_name)
-- preventing players with noclip to fall like idiots when placing blocks
if minetest.check_player_privs(pl_name, {noclip=true}) then
local privs = minetest.get_player_privs(pl_name)
privs.noclip = nil
minetest.set_player_privs(pl_name, privs)
end
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
@ -29,14 +28,13 @@ arena_lib.on_start("skywars", function(arena)
for pl_name in pairs(arena.players) do
local player = minetest.get_player_by_name(pl_name)
skywars.activate_hotbar(player)
skywars.generate_HUD(arena, pl_name)
player:set_physics_override({speed=arena.players[pl_name].speed})
-- saving original speed
arena.players[pl_name].speed = player:get_physics_override().speed
end
end)
@ -45,8 +43,8 @@ arena_lib.on_celebration("skywars", function(arena, winner_name)
for pl_name in pairs(arena.players) do
local player = minetest.get_player_by_name(pl_name)
skywars.deactivate_hotbar(player)
skywars.remove_HUD(arena, pl_name)
armor:remove_all(player)
end
end)
@ -57,8 +55,8 @@ 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_armor(player)
armor:remove_all(player)
-- restore player's original speed
player:set_physics_override({speed=arena.players[pl_name].speed})
end
@ -78,10 +76,11 @@ arena_lib.on_death("skywars", function(arena, pl_name, reason)
-- arena.HUDs[killer].players_killed[2] == players amount
reason.object:hud_change(arena.HUDs[killer].players_killed[1], "text", tostring(arena.HUDs[killer].players_killed[2] + 1))
end
else
arena_lib.send_message_players_in_arena(arena, skywars_settings.prefix .. skywars.T("@1 is dead", pl_name))
end
skywars.remove_all_armor(player)
skywars.deactivate_hotbar(player)
armor:remove_all(player)
arena_lib.remove_player_from_arena(pl_name, 1)
skywars.update_players_counter(arena)
end)
@ -91,30 +90,27 @@ 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)
armor:remove_all(player)
end)
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_armor(player)
armor:remove_all(player)
end)
arena_lib.on_kick("skywars", function(arena, pl_name)
arena_lib.on_kick("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_HUD(arena, pl_name)
skywars.remove_all_armor(player)
armor:remove_all(player)
end)
@ -139,10 +135,6 @@ end)
arena_lib.on_timer_tick("skywars", function(arena)
arena.time_passed = arena.time_passed + 1
for pl_name in pairs(arena.players) do
skywars.apply_armor_slots(minetest.get_player_by_name(pl_name))
end
if arena.time_passed % 5 == 0 then
skywars.kill_players_out_map(arena)
end
@ -154,4 +146,4 @@ arena_lib.on_timeout("skywars", function(arena)
arena_lib.load_celebration("skywars", arena, skywars.T("Nobody"))
arena_lib.send_message_players_in_arena(arena, skywars_settings.prefix .. skywars.T("Time is out, the match is over!"))
end)
end)

View File

@ -0,0 +1,13 @@
function skywars.create_exschem_schematic(sender, pos1, pos2, name, arena)
local path = minetest.get_worldpath() .."/schems/".. name
exschem.save(pos1, pos2, false, 10, name, 0)
skywars.print_msg(sender, skywars.T("Schematic @1 created! (Saved in @2)", name, path))
end
function skywars.load_exschem_schematic(pos1, schematic)
exschem.load(pos1, pos1, 0, {}, schematic, 0)
end

View File

@ -30,9 +30,17 @@ end
function skywars.create_schematic(sender, pos1, pos2, name, arena)
pos1, pos2 = reorder_positions(pos1, pos2)
minetest.create_schematic(pos1, pos2, nil, name, nil)
arena.schematic = name
if minetest.get_modpath("exschem") == "" or minetest.get_modpath("exschem") == nil then
local path = minetest.get_worldpath() .. "/" .. name .. ".mts"
skywars.print_msg(sender, skywars.T("Schematic @1 created! (Saved in @2)", name, path))
else
skywars.create_exschem_schematic(sender, pos1, pos2, name, arena)
end
arena.schematic = name
arena.pos1 = pos1
arena.pos2 = pos2
arena_lib.change_arena_property(sender, "skywars", arena.name, "pos1", pos1)
arena_lib.change_arena_property(sender, "skywars", arena.name, "pos2", pos2)
arena_lib.change_arena_property(sender, "skywars", arena.name, "schematic", arena.schematic)

View File

@ -876,9 +876,7 @@ function(cmd)
return
end
local schem_path = minetest.get_worldpath() .. "/" .. name .. ".mts"
skywars.create_schematic(sender, {x = pos1.x, y = pos1.y, z = pos1.z}, {x = pos2.x, y = pos2.y, z = pos2.z}, schem_path, arena)
skywars.print_msg(sender, skywars.T("Schematic @1 created! (Saved in @2)", name, schem_path))
skywars.create_schematic(sender, {x = pos1.x, y = pos1.y, z = pos1.z}, {x = pos2.x, y = pos2.y, z = pos2.z}, name, arena)
end)

View File

@ -39,7 +39,7 @@ arena_lib.register_minigame("skywars", {
dofile(minetest.get_modpath("skywars") .. "/chatcmdbuilder.lua")
dofile(minetest.get_modpath("skywars") .. "/_compatible_mods/_3d_armor/init.lua")
dofile(minetest.get_modpath("skywars") .. "/_compatible_mods/exschem/init.lua")
dofile(minetest.get_modpath("skywars") .. "/_storage/storage_manager.lua")
dofile(minetest.get_modpath("skywars") .. "/_hud/hud_manager.lua")
dofile(minetest.get_modpath("skywars") .. "/commands.lua")

View File

@ -1,2 +1,4 @@
name = skywars
description = Skywars is a PvP minigame where players battle each other on floating islands until there is only one survivor remaining. Each player spawns on their own island and when the round begins must prepare for battle before crossing to the other islands and fighting.
depends = arena_lib, default
optional_depends = exschem