First commit to an independent mod, broken as hell

master
Marco 2020-04-15 02:18:56 +02:00
parent fac8542ff8
commit 11a02736fd
8 changed files with 80 additions and 57 deletions

110
api.lua
View File

@ -1,40 +1,37 @@
arena_lib = {}
arena_lib.arenas = {}
arena_lib.mod_name = minetest.get_current_modname()
arena_lib.mods = {}
dofile(minetest.get_modpath(arena_lib.mod_name) .. "/arena_lib/debug_utilities.lua")
--dofile(minetest.get_modpath(arena_lib.mod_name) .. "/arena_lib/input_manager.lua")
dofile(minetest.get_modpath(arena_lib.mod_name) .. "/arena_lib/items.lua")
dofile(minetest.get_modpath(arena_lib.mod_name) .. "/arena_lib/player_manager.lua")
dofile(minetest.get_modpath(arena_lib.mod_name) .. "/arena_lib/signs.lua")
local hub_spawnpoint = { x = 0, y = 20, z = 0}
----------------------------------------------
--------------GESTIONE STORAGE----------------
----------------------------------------------
local storage = minetest.get_mod_storage()
--storage:set_string("arenas", nil) -- PER RESETTARE LO STORAGE
--storage:set_string("mods", nil) -- PER RESETTARE LO STORAGE
if minetest.deserialize(storage:get_string("arenas")) ~= nil then
arena_lib.arenas = minetest.deserialize(storage:get_string("arenas"))
if minetest.deserialize(storage:get_string("mods")) ~= nil then
arena_lib.mods = minetest.deserialize(storage:get_string("mods"))
-- resetto lo stato delle arene, nel caso il server sia crashato o sia stato
-- stoppato con partite in corso. L'alternativa è mettere una cosa simile in
-- update_storage() copiando ricorsivamente la tabella e rimuovendo il tutto
-- nella tabella copiata, ma è più pesante. E non posso metterlo in
-- minetest.register_on_shutdown() perché se crasha non viene chiamato
for id, arena in pairs(arena_lib.arenas) do
arena.players = {}
arena.kill_leader = ""
arena.in_queue = false
arena.in_loading = false
arena.in_game = false
arena.in_celebration = false
for mod, arenas in pairs(arena_lib.mods) do
-- resetto lo stato delle arene, nel caso il server sia crashato o sia stato
-- stoppato con partite in corso. L'alternativa è mettere una cosa simile in
-- update_storage() copiando ricorsivamente la tabella e rimuovendo il tutto
-- nella tabella copiata, ma è più pesante. E non posso metterlo in
-- minetest.register_on_shutdown() perché se crasha non viene chiamato
for id, arena in pairs(arenas) do
arena.players = {}
arena.kill_leader = ""
arena.in_queue = false
arena.in_loading = false
arena.in_game = false
arena.in_celebration = false
minetest.after(0.01, function()
if not arena.sign.x then return end --se non è ancora stato registrato nessun cartello per l'arena, evito il crash
arena_lib.update_sign(arena.sign, arena)
end)
minetest.after(0.01, function()
if not arena.sign.x then return end --se non è ancora stato registrato nessun cartello per l'arena, evito il crash
arena_lib.update_sign(arena.sign, arena)
end)
end
end
end
@ -71,60 +68,78 @@ local arena_default = {
enabled = false
}
local prefix = "[Arena_lib] "
local hub_spawn_point = { x = 0, y = 20, z = 0}
local load_time = 3
local celebration_time = 3
local immunity_time = 3
local immunity_slot = 9 --people may have tweaked the slots, hence the custom parameter
-- call this in your mod to override the default parameters
function arena_lib.settings(modname, def)
-- call this in your mod to override the last block of values
function arena_lib.settings(def)
local mod_tab = arena_lib.mods[modname]
mod_tab.arenasID
--default parameters
mod_tab.prefix = "[Arena_lib] "
mod_tab.hub_spawn_point = { x = 0, y = 20, z = 0}
mod_tab.load_time = 3 --time in the loading phase (the pre-match)
mod_tab.celebration_time = 3 --time in the celebration phase
mod_tab.immunity_time = 3
mod_tab.immunity_slot = 9 --people may have tweaked the slots, hence the custom parameter
if def.prefix then
prefix = def.prefix
mod_tab.prefix = def.prefix
end
if def.hub_spawn_point then
hub_spawn_point = def.hub_spawn_point
mod_tab.hub_spawn_point = def.hub_spawn_point
end
if def.load_time then
load_time = def.load_time
mod_tab.load_time = def.load_time
end
if def.celebration_time then
celebration_time = def.celebration_time
mod_tab.celebration_time = def.celebration_time
end
if def.immunity_time then
immunity_time = def.immunity_time
mod_tab.immunity_time = def.immunity_time
end
if def.immunity_slot then
immunity_slot = def.immunity_slot
mod_tab.immunity_slot = def.immunity_slot
end
end
function arena_lib.initialize(mod_name)
if arena_lib.mods[mod_name] ~= nil then return end
arena_lib.mods[mod_name] = {}
arena_lib.mods[mod_name].arenasID = 1
end
----------------------------------------------
---------------GESTIONE ARENA-----------------
----------------------------------------------
function arena_lib.create_arena(sender, arena_name, min_players, max_players)
function arena_lib.create_arena(sender, mod, arena_name, min_players, max_players)
arenasID = next_ID()
local arena = arena_lib.mods[mod]
arena.arenasID = next_ID()
-- controllo che non ci siano duplicati
if arenasID > 1 and arena_lib.get_arena_by_name(arena_name) ~= nil then
if arenasID > 1 and arena_lib.get_arena_by_name(mod, arena_name) ~= nil then
minetest.chat_send_player(sender, minetest.colorize("#e6482e", "[!] Esiste già un'arena con quel nome!"))
return end
-- creo l'arena e la rinomino, aggiornando anche lo storage
arena_lib.arenas[arenasID] = new_arena(arena_default)
arena_lib.mods[mod][arenasID] = new_arena(arena_default)
arena_lib.arenas[arenasID].name = arena_name
if min_players and max_players then
arena_lib.arenas[arenasID].min_players = min_players
@ -541,7 +556,8 @@ end
----------------------------------------------
function arena_lib.get_hub_spawnpoint()
return hub_spawn_point
return hub_spawnpoint
--return { x = 0, y = 20, z = 0}
end
@ -552,9 +568,9 @@ end
function arena_lib.get_arena_by_name(arena_name)
function arena_lib.get_arena_by_name(mod, arena_name)
for id, arena in pairs(arena_lib.arenas) do
for id, arena in pairs(arena_lib.mods[mod]) do
if arena.name == arena_name then
return id, arena end
end

2
depends.txt Normal file
View File

@ -0,0 +1,2 @@
default
signs_lib

6
init.lua Normal file
View File

@ -0,0 +1,6 @@
dofile(minetest.get_modpath("arena_lib") .. "/api.lua")
dofile(minetest.get_modpath("arena_lib") .. "/debug_utilities.lua")
--dofile(minetest.get_modpath(arena_lib.mod_name) .. "/arena_lib/input_manager.lua")
dofile(minetest.get_modpath("arena_lib") .. "/items.lua")
dofile(minetest.get_modpath("arena_lib") .. "/player_manager.lua")
dofile(minetest.get_modpath("arena_lib") .. "/signs.lua")

View File

@ -1,4 +1,4 @@
minetest.register_tool(arena_lib.mod_name .. ":immunity", {
minetest.register_tool("arena_lib:immunity", {
description = "Sei immune!",
inventory_image = "arena_immunity.png",
@ -10,7 +10,7 @@ minetest.register_tool(arena_lib.mod_name .. ":immunity", {
--[[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.mod_name .. ":create_sign", {
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",

1
mod.conf Normal file
View File

@ -0,0 +1 @@
name = arena_lib

View File

@ -3,11 +3,6 @@
--
local queue_waiting_time = 5
local prefix
minetest.after(0.01, function()
prefix = arena_lib.get_prefix()
end)
local function in_game_txt(arena) end
@ -22,6 +17,7 @@ minetest.override_item("default:sign_wall", {
local sign_arena = arena_lib.arenas[arenaID]
local p_name = puncher:get_player_name()
local prefix = "AGGIUNGIMI PER BENE"
if not sign_arena then return end -- nel caso qualche cartello dovesse buggarsi, si può rompere e non fa crashare
if not sign_arena.enabled then
@ -116,16 +112,18 @@ minetest.override_item("default:sign_wall", {
function arena_lib.set_sign(sender, arena_name)
function arena_lib.set_sign(mod, sender, arena_name)
local arena_ID, arena = arena_lib.get_arena_by_name(arena_name)
local arena_ID, arena = arena_lib.get_arena_by_name(mod, arena_name)
if arena == nil then minetest.chat_send_player(sender, minetest.colorize("#e6482e", "[!] Quest'arena non esiste!"))
return end
-- assegno item creazione arene con ID arena nei metadati da restituire al premere sul cartello
local stick = ItemStack(arena_lib.mod_name .. ":create_sign")
local stick = ItemStack("arena_lib:create_sign")
local meta = stick:get_meta()
meta:set_int("mod", mod)
meta:set_int("arenaID", arena_ID)
minetest.get_player_by_name(sender):set_wielded_item(stick)

View File

Before

Width:  |  Height:  |  Size: 313 B

After

Width:  |  Height:  |  Size: 313 B

View File

Before

Width:  |  Height:  |  Size: 390 B

After

Width:  |  Height:  |  Size: 390 B