145 lines
3.7 KiB
Lua
145 lines
3.7 KiB
Lua
|
arena_lib.register_minigame("assaltello", {
|
||
|
name = "Assaltello",
|
||
|
teams = {"Cavalieri", "Assalitori"}, -- 1, 2
|
||
|
teams_color_overlay = {"blue", "red"},
|
||
|
is_team_chat_default = true,
|
||
|
hotbar = {
|
||
|
slots = 2,
|
||
|
background_image = "arenalib_gui_hotbar2.png"
|
||
|
},
|
||
|
time_mode = "decremental",
|
||
|
disable_inventory = true,
|
||
|
can_drop = false,
|
||
|
|
||
|
properties = {
|
||
|
prigione = {x=0,y=0,z=0}
|
||
|
},
|
||
|
|
||
|
temp_properties = {
|
||
|
re = {},
|
||
|
}
|
||
|
})
|
||
|
|
||
|
|
||
|
|
||
|
-- fasi dell'arena: caricamento -> gioco -> celebrazione
|
||
|
arena_lib.on_load("assaltello", function(arena)
|
||
|
for pl_name, _ in pairs(arena.players) do -- arena.players = nome / dati (teamID)
|
||
|
local inv = minetest.get_player_by_name(pl_name):get_inventory()
|
||
|
inv:add_item("main", "default:sword_steel")
|
||
|
inv:add_item("main", "default:apple 5")
|
||
|
end
|
||
|
|
||
|
arena_lib.HUD_send_msg_team("hotbar", arena, 1, "Difendi il re!")
|
||
|
arena_lib.HUD_send_msg_team("hotbar", arena, 2, "Annienta il re!")
|
||
|
end)
|
||
|
|
||
|
arena_lib.on_start("assaltello", function(arena)
|
||
|
arena_lib.HUD_send_msg_all("hotbar", arena, "Tempo rimasto: " .. arena.initial_time)
|
||
|
|
||
|
arena.re = minetest.add_entity(arena.spawn_points[1][1], "assaltello:re", arena.name)
|
||
|
end)
|
||
|
|
||
|
arena_lib.on_end("assaltello", function(arena)
|
||
|
if arena.re then
|
||
|
arena.re:remove()
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
|
||
|
|
||
|
-- comportamento del tempo
|
||
|
arena_lib.on_timeout("assaltello", function(arena)
|
||
|
arena_lib.load_celebration("assaltello", arena, 1)
|
||
|
arena_lib.HUD_hide("hotbar", arena)
|
||
|
end)
|
||
|
|
||
|
arena_lib.on_time_tick("assaltello", function(arena)
|
||
|
arena_lib.HUD_send_msg_all("hotbar", arena, "Tempo rimasto: " .. arena.current_time)
|
||
|
end)
|
||
|
|
||
|
|
||
|
-- comportamento giocatore
|
||
|
arena_lib.on_death("assaltello", function(arena, p_name, reason)
|
||
|
if arena.players[p_name].teamID == 1 then return end
|
||
|
|
||
|
local player = minetest.get_player_by_name(p_name)
|
||
|
local p_meta = player:get_meta()
|
||
|
|
||
|
p_meta:set_int("assaltello_prigione", 1)
|
||
|
|
||
|
minetest.after(5, function()
|
||
|
if player then -- potrebbe essersi disconnessə
|
||
|
p_meta:set_int("assaltello_prigione", 0)
|
||
|
|
||
|
-- se è in prigione, teletrasportalə sul primo punto di rinascita assalitore
|
||
|
if arena.players[p_name] and player:get_hp() > 0 then
|
||
|
player:set_pos(arena.spawn_points[2][1])
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
end)
|
||
|
|
||
|
arena_lib.on_respawn("assaltello", function(arena, p_name)
|
||
|
if arena.players[p_name].teamID == 1 then return end
|
||
|
|
||
|
local player = minetest.get_player_by_name(p_name)
|
||
|
local p_meta = player:get_meta()
|
||
|
|
||
|
if p_meta:get_int("assaltello_prigione") == 1 then
|
||
|
player:set_pos(arena.prigione)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
local re = {
|
||
|
initial_properties = {
|
||
|
hp_max = 100,
|
||
|
physical = true,
|
||
|
collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3},
|
||
|
visual = "mesh",
|
||
|
mesh = "character.b3d",
|
||
|
textures = {"character.png"},
|
||
|
nametag = "Re - 100♥"
|
||
|
},
|
||
|
|
||
|
-- dove salveremo l'arena associata al re, da usare nei richiami che seguono
|
||
|
arena = {},
|
||
|
|
||
|
-- se il server crasha, rimuoviamo istantaneamente il re rimasto al riavvio
|
||
|
-- (staticdata equivale al nome dell'arena se invocato dalla mod, sennò è vuoto)
|
||
|
on_activate = function(self, staticdata, dtime_s)
|
||
|
if staticdata == "" then
|
||
|
self.object:remove()
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local _, arena = arena_lib.get_arena_by_name("assaltello", staticdata)
|
||
|
self.arena = arena
|
||
|
end,
|
||
|
|
||
|
on_death = function(self, killer)
|
||
|
arena_lib.load_celebration("assaltello", self.arena, 2)
|
||
|
end,
|
||
|
|
||
|
on_punch = function(self, puncher, v1, v2, v3, damage)
|
||
|
if self.arena.in_celebration then return true end
|
||
|
|
||
|
local p_name = puncher:get_player_name()
|
||
|
|
||
|
if self.arena.players[p_name].teamID == 1 then
|
||
|
minetest.chat_send_player(p_name, "Lunga vita al re! (Ao, che stai a fa'?)")
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
local king = self.object
|
||
|
|
||
|
king:set_nametag_attributes({text = "Re - " .. king:get_hp() - damage .. "♥"})
|
||
|
end
|
||
|
}
|
||
|
|
||
|
minetest.register_entity("assaltello:re", re)
|