Nuovo sistema immunità + continuata astrazione
parent
72f254693a
commit
86ddd78113
35
api.lua
35
api.lua
|
@ -17,7 +17,6 @@ local function nextID() end
|
|||
local arenasID
|
||||
local players_in_game = {} --KEY: player name, INDEX: arenaID
|
||||
local players_in_queue = {} --KEY: player name, INDEX: arenaID
|
||||
local immunity_time = 3
|
||||
|
||||
local arena_default_max_players = 2
|
||||
local arena_default_min_players = 1
|
||||
|
@ -40,6 +39,7 @@ arena_lib.arena_default = {
|
|||
local prefix = "[Arena_lib] "
|
||||
local load_time = 3
|
||||
local celebration_time = 3
|
||||
local immunity_time = 3
|
||||
|
||||
|
||||
function arena_lib.settings(def)
|
||||
|
@ -56,6 +56,10 @@ function arena_lib.settings(def)
|
|||
celebration_time = def.celebration_time
|
||||
end
|
||||
|
||||
if def.immunity_time then
|
||||
immunity_time = def.immunity_time
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
@ -172,12 +176,12 @@ function arena_lib.load_celebration(arena_ID, winner_name)
|
|||
for pl_name, stats in pairs(arena.players) do
|
||||
|
||||
local inv = minetest.get_player_by_name(pl_name):get_inventory()
|
||||
local weapon = inv:get_stack("main", 1)
|
||||
local meta = weapon:get_meta():set_int("immune", 1)
|
||||
inv:set_stack("main", 1, weapon)
|
||||
-- giocatori immortali
|
||||
if not inv:contains_item("main", "arena_lib.immunity") then
|
||||
inv:set_stack("main", 8, "arena_lib:immunity")
|
||||
end
|
||||
|
||||
minetest.get_player_by_name(pl_name):set_nametag_attributes({color = {a = 255, r = 255, g = 255, b = 255}})
|
||||
|
||||
minetest.chat_send_player(pl_name, prefix .. winner_name .. " ha vinto la partita")
|
||||
end
|
||||
|
||||
|
@ -204,6 +208,8 @@ function arena_lib.end_arena(arena)
|
|||
arena_lib.update_sign(arena.sign, arena)
|
||||
arena_lib.update_storage()
|
||||
|
||||
minetest.get_player_by_name(pl_name):get_inventory():set_list("main", {})
|
||||
|
||||
arena_lib.on_end()
|
||||
|
||||
--TODO: teleport lobby, metti variabile locale
|
||||
|
@ -312,18 +318,15 @@ end
|
|||
|
||||
function arena_lib.immunity(player)
|
||||
|
||||
local p_name = player:get_player_name()
|
||||
local weapon = player:get_inventory():get_stack("main", 1)
|
||||
local immunity_item = ItemStack("arena_lib:immunity")
|
||||
local inv = player:get_inventory()
|
||||
|
||||
weapon:get_meta():set_int("immune", 1)
|
||||
|
||||
player:get_inventory():set_stack("main", 1, weapon)
|
||||
inv:set_stack("main", 8, immunity_item)
|
||||
|
||||
minetest.after(immunity_time, function()
|
||||
if player == nil then return end -- he may disconnect
|
||||
if player:get_inventory():get_stack("main", 1):get_meta():get_int("immune") == 1 then
|
||||
weapon:get_meta():set_int("immune", 0)
|
||||
player:get_inventory():set_stack("main", 1, weapon)
|
||||
if player == nil then return end -- they may disconnect
|
||||
if inv:contains_item("main", immunity_item) then
|
||||
inv:remove_item("main", immunity_item)
|
||||
end
|
||||
end)
|
||||
|
||||
|
@ -382,9 +385,7 @@ end
|
|||
-----------------SETTERS----------------------
|
||||
----------------------------------------------
|
||||
|
||||
function arena_lib.set_immunity_time(time)
|
||||
immunity_time = time
|
||||
end
|
||||
|
||||
|
||||
----------------------------------------------
|
||||
---------------FUNZIONI LOCALI----------------
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
minetest.register_node("arena_lib:immunity", {
|
||||
|
||||
description = "Sei immune!"
|
||||
inventory_image = "arena_immunity.png"
|
||||
groups = {not_in_creative_inventory = 1, oddly_breakable_by_hand = "2"},
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
--[[sovrascrizione "on_punch" nodo base dei cartelli per farli entrare
|
||||
nell'arena se sono cartelli appositi e "on_timer" per teletrasportali in partita quando la queue finisce]]
|
||||
minetest.register_tool("arena_lib:create_sign", {
|
||||
|
||||
description = "Left click on a sign to create an entrance or to remove it",
|
||||
inventory_image = "arena_createsign.png",
|
||||
groups = {not_in_creative_inventory = 1, oddly_breakable_by_hand = "2"},
|
||||
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
|
||||
local pos = minetest.get_pointed_thing_position(pointed_thing)
|
||||
if pos == nil then return end -- nel caso sia aria, sennò crasha
|
||||
|
||||
local node = minetest.get_node(pos)
|
||||
local def = minetest.registered_items[node.name]
|
||||
|
||||
--controllo se è un cartello
|
||||
if def and def.entity_info then
|
||||
def.number_of_lines = 5
|
||||
|
||||
local arena_ID = itemstack:get_meta():get_int("arenaID")
|
||||
local arena = arena_lib.arenas[arena_ID]
|
||||
|
||||
-- controllo se c'è già un cartello assegnato a quell'arena. Se è lo stesso lo rimuovo, sennò annullo
|
||||
if next(arena.sign) ~= nil then
|
||||
if minetest.serialize(pos) == minetest.serialize(arena.sign) then
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
arena.sign = {}
|
||||
minetest.chat_send_player(user:get_player_name(), "Cartello dell'arena " .. arena.name .. " rimosso con successo")
|
||||
else
|
||||
minetest.chat_send_player(user:get_player_name(), minetest.colorize("#e6482e", "[!] Esiste già un cartello per quest'arena!"))
|
||||
end
|
||||
return end
|
||||
|
||||
-- cambio la scritta
|
||||
arena_lib.update_sign(pos, arena)
|
||||
|
||||
-- aggiungo il cartello ai cartelli dell'arena
|
||||
arena.sign = pos
|
||||
|
||||
-- salvo l'ID come metadato nel cartello
|
||||
minetest.get_meta(pos):set_int("arenaID", arena_ID)
|
||||
else
|
||||
minetest.chat_send_player(user:get_player_name(), minetest.colorize("#e6482e", "[!] L'oggetto non è un cartello!"))
|
||||
end
|
||||
end,
|
||||
|
||||
})
|
58
signs.lua
58
signs.lua
|
@ -1,6 +1,13 @@
|
|||
--
|
||||
-- For the item to set signs, being a declaration of a new item, look at items.lua
|
||||
--
|
||||
|
||||
|
||||
|
||||
local function in_game_txt(arena) end
|
||||
|
||||
|
||||
|
||||
minetest.override_item("default:sign_wall", {
|
||||
|
||||
on_punch = function(pos, node, puncher, pointed_thing)
|
||||
|
@ -99,57 +106,6 @@ minetest.override_item("default:sign_wall", {
|
|||
|
||||
|
||||
|
||||
--[[sovrascrizione "on_punch" nodo base dei cartelli per farli entrare
|
||||
nell'arena se sono cartelli appositi e "on_timer" per teletrasportali in partita quando la queue finisce]]
|
||||
minetest.register_tool("arena_lib:create_sign", {
|
||||
|
||||
description = "Left click on a sign to create an entrance or to remove it",
|
||||
inventory_image = "arena_createsign.png",
|
||||
groups = {not_in_creative_inventory = 1, oddly_breakable_by_hand = "2"},
|
||||
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
|
||||
local pos = minetest.get_pointed_thing_position(pointed_thing)
|
||||
if pos == nil then return end -- nel caso sia aria, sennò crasha
|
||||
|
||||
local node = minetest.get_node(pos)
|
||||
local def = minetest.registered_items[node.name]
|
||||
|
||||
--controllo se è un cartello
|
||||
if def and def.entity_info then
|
||||
def.number_of_lines = 5
|
||||
|
||||
local arena_ID = itemstack:get_meta():get_int("arenaID")
|
||||
local arena = arena_lib.arenas[arena_ID]
|
||||
|
||||
-- controllo se c'è già un cartello assegnato a quell'arena. Se è lo stesso lo rimuovo, sennò annullo
|
||||
if next(arena.sign) ~= nil then
|
||||
if minetest.serialize(pos) == minetest.serialize(arena.sign) then
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
arena.sign = {}
|
||||
minetest.chat_send_player(user:get_player_name(), "Cartello dell'arena " .. arena.name .. " rimosso con successo")
|
||||
else
|
||||
minetest.chat_send_player(user:get_player_name(), minetest.colorize("#e6482e", "[!] Esiste già un cartello per quest'arena!"))
|
||||
end
|
||||
return end
|
||||
|
||||
-- cambio la scritta
|
||||
arena_lib.update_sign(pos, arena)
|
||||
|
||||
-- aggiungo il cartello ai cartelli dell'arena
|
||||
arena.sign = pos
|
||||
|
||||
-- salvo l'ID come metadato nel cartello
|
||||
minetest.get_meta(pos):set_int("arenaID", arena_ID)
|
||||
else
|
||||
minetest.chat_send_player(user:get_player_name(), minetest.colorize("#e6482e", "[!] L'oggetto non è un cartello!"))
|
||||
end
|
||||
end,
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
function arena_lib.set_sign(sender, arena_name)
|
||||
|
||||
local arena_ID, arena = arena_lib.get_arena_by_name(arena_name)
|
||||
|
|
Loading…
Reference in New Issue