parent
329a240973
commit
647f57242a
|
@ -21,6 +21,7 @@ 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})
|
||||
|
@ -34,7 +35,11 @@ end)
|
|||
|
||||
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)
|
||||
skywars.remove_all(player)
|
||||
end
|
||||
end)
|
||||
|
||||
|
@ -46,6 +51,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)
|
||||
-- restore player's original speed
|
||||
player:set_physics_override({speed=arena.players[pl_name].speed})
|
||||
end
|
||||
|
@ -54,6 +60,8 @@ end)
|
|||
|
||||
|
||||
arena_lib.on_death("skywars", function(arena, pl_name, reason)
|
||||
local player = minetest.get_player_by_name(pl_name)
|
||||
|
||||
if reason.type == "punch" then
|
||||
if reason.object ~= nil and reason.object:is_player() then
|
||||
local killer = reason.object:get_player_name()
|
||||
|
@ -67,6 +75,8 @@ 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.deactivate_hotbar(player)
|
||||
arena_lib.remove_player_from_arena(pl_name, 1)
|
||||
skywars.update_players_counter(arena)
|
||||
end)
|
||||
|
@ -74,6 +84,7 @@ end)
|
|||
|
||||
|
||||
arena_lib.on_quit("skywars", function(arena, pl_name)
|
||||
skywars.deactivate_hotbar(minetest.get_player_by_name(pl_name))
|
||||
skywars.update_players_counter(arena, false)
|
||||
skywars.remove_HUD(arena, pl_name)
|
||||
end)
|
||||
|
@ -81,14 +92,21 @@ 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(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(player)
|
||||
end)
|
||||
|
||||
|
||||
|
@ -113,6 +131,10 @@ 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
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
for name in pairs(minetest.registered_items) do
|
||||
if armor:get_element(name) ~= nil then
|
||||
minetest.override_item(name, {
|
||||
on_secondary_use = function(itemstack, user)
|
||||
local pl_name = user:get_player_name()
|
||||
local arena
|
||||
if arena_lib.is_player_in_arena(pl_name, "skywars") and arena_lib.get_arena_by_player(pl_name).in_loading == false then
|
||||
skywars.add_armor(minetest.get_player_by_name(pl_name), itemstack:get_name())
|
||||
end
|
||||
end
|
||||
})
|
||||
end
|
||||
end
|
|
@ -0,0 +1,21 @@
|
|||
function skywars.activate_hotbar(player)
|
||||
local meta = player:get_meta()
|
||||
|
||||
meta:set_string("hotbar", player:hud_get_hotbar_image())
|
||||
meta:set_int("itemcount", player:hud_get_hotbar_itemcount())
|
||||
meta:set_string("hotbar_selected", player:hud_get_hotbar_selected_image())
|
||||
|
||||
player:hud_set_hotbar_itemcount(10)
|
||||
player:hud_set_hotbar_image("hotbar.png")
|
||||
player:hud_set_hotbar_selected_image("hotbar_selected.png")
|
||||
end
|
||||
|
||||
|
||||
|
||||
function skywars.deactivate_hotbar(player)
|
||||
local meta = player:get_meta()
|
||||
|
||||
player:hud_set_hotbar_itemcount(meta:get_int("itemcount"))
|
||||
player:hud_set_hotbar_image(meta:get_string("hotbar"))
|
||||
player:hud_set_hotbar_selected_image(meta:get_string("hotbar_selected"))
|
||||
end
|
|
@ -0,0 +1,16 @@
|
|||
minetest.register_on_mods_loaded(function()
|
||||
local mod_exists = false
|
||||
|
||||
for i=1, #minetest.get_modnames() do
|
||||
if minetest.get_modnames()[i] == "3d_armor" then
|
||||
mod_exists = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if mod_exists then
|
||||
dofile(minetest.get_modpath("skywars") .. "/_compatible_mods/_3d_armor/utils.lua")
|
||||
dofile(minetest.get_modpath("skywars") .. "/_compatible_mods/_3d_armor/hotbar.lua")
|
||||
dofile(minetest.get_modpath("skywars") .. "/_compatible_mods/_3d_armor/armors.lua")
|
||||
end
|
||||
end)
|
|
@ -0,0 +1,120 @@
|
|||
local slot_type = {[0] = "feet", [1] = "legs", [2] = "torso", [3] = "head"}
|
||||
|
||||
|
||||
local function move_armor_to_slot(player, armor_name)
|
||||
local armor_type = armor:get_element(armor_name)
|
||||
local slots = player:hud_get_hotbar_itemcount()
|
||||
local inv = player:get_inventory()
|
||||
|
||||
local function switch_items(slot_offset)
|
||||
local wielded_armor = inv:get_stack("main", slots-slot_offset)
|
||||
|
||||
inv:set_stack("main", slots-slot_offset, ItemStack(armor_name))
|
||||
minetest.after(0, function() inv:set_stack("main", player:get_wield_index(), ItemStack(wielded_armor:get_name())) end)
|
||||
end
|
||||
|
||||
-- if the armor is equal to one of the slot types then switch the items
|
||||
for i=0, 4 do
|
||||
if armor_type == slot_type[i] then
|
||||
switch_items(i)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
local function get_weared_armor(player)
|
||||
local pl_name, armor_inv = armor:get_valid_player(player, "[add_armor_inventory]")
|
||||
local weared_armor = {} -- "type" = "armor"
|
||||
|
||||
-- Stores the weared armor types and items
|
||||
for i=1, armor_inv:get_size("armor") do
|
||||
local item_name = armor_inv:get_stack("armor", i):get_name()
|
||||
local type = armor:get_element(item_name)
|
||||
|
||||
if type ~= nil then
|
||||
weared_armor[type] = item_name
|
||||
end
|
||||
end
|
||||
|
||||
return weared_armor
|
||||
end
|
||||
|
||||
|
||||
|
||||
function skywars.add_armor(player, armor_name, update_slots)
|
||||
local pl_name, armor_inv = armor:get_valid_player(player, "[add_armor_inventory]")
|
||||
|
||||
if not pl_name then
|
||||
return
|
||||
elseif armor:get_element(armor_name) == nil then
|
||||
return
|
||||
end
|
||||
|
||||
local weared_armor = get_weared_armor(player)
|
||||
local armor_type = armor:get_element(armor_name) -- (the type is called element by 3d_armor)
|
||||
|
||||
-- Checks if there's an armor with this type already
|
||||
if weared_armor[armor_type] ~= nil then
|
||||
armor_inv:remove_item("armor", ItemStack(weared_armor[armor_type]))
|
||||
end
|
||||
armor_inv:add_item("armor", ItemStack(armor_name))
|
||||
if update_slots == nil or update_slots then move_armor_to_slot(player, armor_name) end
|
||||
|
||||
armor:set_player_armor(player)
|
||||
armor:save_armor_inventory(player)
|
||||
end
|
||||
|
||||
|
||||
|
||||
function skywars.remove_all(player)
|
||||
local name, armor_inv = armor:get_valid_player(player, "[remove_all]")
|
||||
|
||||
if not name then
|
||||
return
|
||||
end
|
||||
|
||||
armor_inv:set_list("armor", {})
|
||||
armor:set_player_armor(player)
|
||||
armor:save_armor_inventory(player)
|
||||
end
|
||||
|
||||
|
||||
|
||||
function skywars.remove_armor(player, armor_name)
|
||||
local pl_name, armor_inv = armor:get_valid_player(player, "[add_armor_inventory]")
|
||||
|
||||
if not pl_name then
|
||||
return
|
||||
elseif armor:get_element(armor_name) == nil then
|
||||
return
|
||||
end
|
||||
|
||||
armor_inv:remove_item("armor", ItemStack(armor_name))
|
||||
|
||||
armor:set_player_armor(player)
|
||||
armor:save_armor_inventory(player)
|
||||
end
|
||||
|
||||
|
||||
|
||||
function skywars.apply_armor_slots(player)
|
||||
local name, armor_inv = armor:get_valid_player(player, "[apply_slots]")
|
||||
if not name then return end
|
||||
local slots = player:hud_get_hotbar_itemcount()
|
||||
local inv = player:get_inventory()
|
||||
local weared_armor = get_weared_armor(player) -- "type" = "armor"
|
||||
local function get_armor_type(slot_offset) return armor:get_element(inv:get_stack("main", slots-slot_offset):get_name()) end
|
||||
|
||||
-- iterate over each armor slot
|
||||
for slot = 0, 4 do
|
||||
-- if the slot is empty remove that armor type, otherwise add the armor that it contains
|
||||
if get_armor_type(slot) == nil and weared_armor[slot_type[slot]] ~= nil then
|
||||
skywars.remove_armor(player, weared_armor[slot_type[slot]])
|
||||
-- if the slot contains an armor and it is the same as the slot type equip it
|
||||
elseif get_armor_type(slot) ~= nil and get_armor_type(slot) == slot_type[slot] then
|
||||
skywars.add_armor(player, inv:get_stack("main", slots-slot):get_name(), false)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
|
@ -1,6 +1,5 @@
|
|||
ChatCmdBuilder.new("skywars",
|
||||
function(cmd)
|
||||
|
||||
cmd:sub("tutorial",
|
||||
function(sender)
|
||||
skywars.print_msg(sender, [[
|
||||
|
|
1
init.lua
1
init.lua
|
@ -33,6 +33,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") .. "/_storage/storage_manager.lua")
|
||||
dofile(minetest.get_modpath("skywars") .. "/_hud/hud_manager.lua")
|
||||
dofile(minetest.get_modpath("skywars") .. "/commands.lua")
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 563 B |
Binary file not shown.
After Width: | Height: | Size: 141 B |
Loading…
Reference in New Issue