From 8883818c88cb3535d34a57ec00142e4f3e2ea7b8 Mon Sep 17 00:00:00 2001 From: Marco <4279489-marco_a@users.noreply.gitlab.com> Date: Tue, 31 Mar 2020 17:08:42 +0200 Subject: [PATCH] Suddivisione mod con arena_lib --- .../chatcmdbuilder.lua => chatcmdbuilder.lua | 0 quake/commands.lua => commands.lua | 0 quake/depends.txt => depends.txt | 2 +- init.lua | 60 +++ quake/mod.conf => mod.conf | 0 {quake/models => models}/railgun.blend | Bin {quake/models => models}/railgun.obj | 0 quake/playermanager.lua => playermanager.lua | 0 quake/privs.lua => privs.lua | 0 quake/api.lua | 353 ------------------ quake/init.lua | 151 -------- {quake/sounds => sounds}/quake_kill.ogg | Bin .../sounds => sounds}/quake_railgun_shoot.ogg | Bin {quake/textures => textures}/bubble.png | Bin .../creative_clear_icon.png | Bin .../creative_next_icon.png | Bin .../creative_prev_icon.png | Bin .../default_acacia_leaves.png | Bin .../default_acacia_leaves_simple.png | Bin .../default_acacia_tree.png | Bin .../default_acacia_tree_top.png | Bin .../default_acacia_wood.png | Bin .../textures => textures}/default_apple.png | Bin .../default_aspen_leaves.png | Bin .../default_aspen_tree.png | Bin .../default_aspen_tree_top.png | Bin .../default_aspen_wood.png | Bin .../default_blueberry_bush_leaves.png | Bin .../default_blueberry_overlay.png | Bin .../textures => textures}/default_brick.png | Bin .../default_coniferous_litter.png | Bin .../default_coniferous_litter_side.png | Bin {quake/textures => textures}/default_dirt.png | Bin .../default_dry_dirt.png | Bin .../default_dry_grass.png | Bin .../default_dry_grass_side.png | Bin .../textures => textures}/default_fern_1.png | Bin .../textures => textures}/default_fern_2.png | Bin .../textures => textures}/default_fern_3.png | Bin .../textures => textures}/default_glass.png | Bin .../textures => textures}/default_grass.png | Bin .../textures => textures}/default_grass_1.png | Bin .../textures => textures}/default_grass_2.png | Bin .../textures => textures}/default_grass_3.png | Bin .../textures => textures}/default_grass_4.png | Bin .../textures => textures}/default_grass_5.png | Bin .../default_grass_side.png | Bin .../textures => textures}/default_gravel.png | Bin .../default_junglewood.png | Bin .../textures => textures}/default_leaves.png | Bin .../default_leaves_simple.png | Bin .../default_marram_grass_1.png | Bin .../default_marram_grass_2.png | Bin .../default_marram_grass_3.png | Bin .../default_mineral_coal.png | Bin .../default_pine_needles.png | Bin .../default_pine_tree.png | Bin .../default_pine_tree_top.png | Bin .../default_pine_wood.png | Bin .../default_river_water.png | Bin .../default_river_water_flowing_animated.png | Bin .../default_river_water_source_animated.png | Bin {quake/textures => textures}/default_sand.png | Bin .../default_silver_sand.png | Bin {quake/textures => textures}/default_snow.png | Bin .../default_snow_side.png | Bin .../textures => textures}/default_stone.png | Bin {quake/textures => textures}/default_tree.png | Bin .../default_tree_top.png | Bin .../textures => textures}/default_water.png | Bin .../default_water_flowing_animated.png | Bin .../default_water_source_animated.png | Bin {quake/textures => textures}/default_wood.png | Bin .../textures => textures}/doors_door_wood.png | Bin {quake/textures => textures}/flintlock.png | Bin .../flowers_geranium.png | Bin .../flowers_mushroom_red.png | Bin {quake/textures => textures}/flowers_rose.png | Bin {quake/textures => textures}/gui_formbg.png | Bin {quake/textures => textures}/gui_hotbar.png | Bin .../gui_hotbar_selected.png | Bin {quake/textures => textures}/heart.png | Bin .../quake_lobby_enter.png | Bin {quake/textures => textures}/railgun.png | Bin {quake/textures => textures}/trickerytown.png | Bin {quake/textures => textures}/wieldhand.png | Bin quake/weapons.lua => weapons.lua | 22 +- 87 files changed, 76 insertions(+), 512 deletions(-) rename quake/chatcmdbuilder.lua => chatcmdbuilder.lua (100%) rename quake/commands.lua => commands.lua (100%) rename quake/depends.txt => depends.txt (70%) create mode 100644 init.lua rename quake/mod.conf => mod.conf (100%) rename {quake/models => models}/railgun.blend (100%) rename {quake/models => models}/railgun.obj (100%) rename quake/playermanager.lua => playermanager.lua (100%) rename quake/privs.lua => privs.lua (100%) delete mode 100644 quake/api.lua delete mode 100644 quake/init.lua rename {quake/sounds => sounds}/quake_kill.ogg (100%) rename {quake/sounds => sounds}/quake_railgun_shoot.ogg (100%) rename {quake/textures => textures}/bubble.png (100%) rename {quake/textures => textures}/creative_clear_icon.png (100%) rename {quake/textures => textures}/creative_next_icon.png (100%) rename {quake/textures => textures}/creative_prev_icon.png (100%) rename {quake/textures => textures}/default_acacia_leaves.png (100%) rename {quake/textures => textures}/default_acacia_leaves_simple.png (100%) rename {quake/textures => textures}/default_acacia_tree.png (100%) rename {quake/textures => textures}/default_acacia_tree_top.png (100%) rename {quake/textures => textures}/default_acacia_wood.png (100%) rename {quake/textures => textures}/default_apple.png (100%) rename {quake/textures => textures}/default_aspen_leaves.png (100%) rename {quake/textures => textures}/default_aspen_tree.png (100%) rename {quake/textures => textures}/default_aspen_tree_top.png (100%) rename {quake/textures => textures}/default_aspen_wood.png (100%) rename {quake/textures => textures}/default_blueberry_bush_leaves.png (100%) rename {quake/textures => textures}/default_blueberry_overlay.png (100%) rename {quake/textures => textures}/default_brick.png (100%) rename {quake/textures => textures}/default_coniferous_litter.png (100%) rename {quake/textures => textures}/default_coniferous_litter_side.png (100%) rename {quake/textures => textures}/default_dirt.png (100%) rename {quake/textures => textures}/default_dry_dirt.png (100%) rename {quake/textures => textures}/default_dry_grass.png (100%) rename {quake/textures => textures}/default_dry_grass_side.png (100%) rename {quake/textures => textures}/default_fern_1.png (100%) rename {quake/textures => textures}/default_fern_2.png (100%) rename {quake/textures => textures}/default_fern_3.png (100%) rename {quake/textures => textures}/default_glass.png (100%) rename {quake/textures => textures}/default_grass.png (100%) rename {quake/textures => textures}/default_grass_1.png (100%) rename {quake/textures => textures}/default_grass_2.png (100%) rename {quake/textures => textures}/default_grass_3.png (100%) rename {quake/textures => textures}/default_grass_4.png (100%) rename {quake/textures => textures}/default_grass_5.png (100%) rename {quake/textures => textures}/default_grass_side.png (100%) rename {quake/textures => textures}/default_gravel.png (100%) rename {quake/textures => textures}/default_junglewood.png (100%) rename {quake/textures => textures}/default_leaves.png (100%) rename {quake/textures => textures}/default_leaves_simple.png (100%) rename {quake/textures => textures}/default_marram_grass_1.png (100%) rename {quake/textures => textures}/default_marram_grass_2.png (100%) rename {quake/textures => textures}/default_marram_grass_3.png (100%) rename {quake/textures => textures}/default_mineral_coal.png (100%) rename {quake/textures => textures}/default_pine_needles.png (100%) rename {quake/textures => textures}/default_pine_tree.png (100%) rename {quake/textures => textures}/default_pine_tree_top.png (100%) rename {quake/textures => textures}/default_pine_wood.png (100%) rename {quake/textures => textures}/default_river_water.png (100%) rename {quake/textures => textures}/default_river_water_flowing_animated.png (100%) rename {quake/textures => textures}/default_river_water_source_animated.png (100%) rename {quake/textures => textures}/default_sand.png (100%) rename {quake/textures => textures}/default_silver_sand.png (100%) rename {quake/textures => textures}/default_snow.png (100%) rename {quake/textures => textures}/default_snow_side.png (100%) rename {quake/textures => textures}/default_stone.png (100%) rename {quake/textures => textures}/default_tree.png (100%) rename {quake/textures => textures}/default_tree_top.png (100%) rename {quake/textures => textures}/default_water.png (100%) rename {quake/textures => textures}/default_water_flowing_animated.png (100%) rename {quake/textures => textures}/default_water_source_animated.png (100%) rename {quake/textures => textures}/default_wood.png (100%) rename {quake/textures => textures}/doors_door_wood.png (100%) rename {quake/textures => textures}/flintlock.png (100%) rename {quake/textures => textures}/flowers_geranium.png (100%) rename {quake/textures => textures}/flowers_mushroom_red.png (100%) rename {quake/textures => textures}/flowers_rose.png (100%) rename {quake/textures => textures}/gui_formbg.png (100%) rename {quake/textures => textures}/gui_hotbar.png (100%) rename {quake/textures => textures}/gui_hotbar_selected.png (100%) rename {quake/textures => textures}/heart.png (100%) rename {quake/textures => textures}/quake_lobby_enter.png (100%) rename {quake/textures => textures}/railgun.png (100%) rename {quake/textures => textures}/trickerytown.png (100%) rename {quake/textures => textures}/wieldhand.png (100%) rename quake/weapons.lua => weapons.lua (80%) diff --git a/quake/chatcmdbuilder.lua b/chatcmdbuilder.lua similarity index 100% rename from quake/chatcmdbuilder.lua rename to chatcmdbuilder.lua diff --git a/quake/commands.lua b/commands.lua similarity index 100% rename from quake/commands.lua rename to commands.lua diff --git a/quake/depends.txt b/depends.txt similarity index 70% rename from quake/depends.txt rename to depends.txt index 7fdf8c7..5b3628e 100644 --- a/quake/depends.txt +++ b/depends.txt @@ -1,4 +1,4 @@ +arena_lib default -signs_lib doors? flowers? diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..55269f7 --- /dev/null +++ b/init.lua @@ -0,0 +1,60 @@ +-- load other scripts +dofile(minetest.get_modpath("quake") .. "/chatcmdbuilder.lua") +dofile(minetest.get_modpath("quake") .. "/commands.lua") +dofile(minetest.get_modpath("quake") .. "/playermanager.lua") +dofile(minetest.get_modpath("quake") .. "/privs.lua") +dofile(minetest.get_modpath("quake") .. "/weapons.lua") + + +--[[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_node("quake:create_sign", { + + description = "Left click on a sign to create an entrance or to remove it", + tiles = {"trickerytown.png"}, + groups = {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 = quake.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 + quake.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) + + --TODO: rimuovere item + else + minetest.chat_send_player(user:get_player_name(), minetest.colorize("#e6482e", "[!] L'oggetto non è un cartello!")) + end + end, + +}) diff --git a/quake/mod.conf b/mod.conf similarity index 100% rename from quake/mod.conf rename to mod.conf diff --git a/quake/models/railgun.blend b/models/railgun.blend similarity index 100% rename from quake/models/railgun.blend rename to models/railgun.blend diff --git a/quake/models/railgun.obj b/models/railgun.obj similarity index 100% rename from quake/models/railgun.obj rename to models/railgun.obj diff --git a/quake/playermanager.lua b/playermanager.lua similarity index 100% rename from quake/playermanager.lua rename to playermanager.lua diff --git a/quake/privs.lua b/privs.lua similarity index 100% rename from quake/privs.lua rename to privs.lua diff --git a/quake/api.lua b/quake/api.lua deleted file mode 100644 index 13cf353..0000000 --- a/quake/api.lua +++ /dev/null @@ -1,353 +0,0 @@ -local storage = minetest.get_mod_storage() -storage:set_string("arenas", nil) -- PER RESETTARE LO STORAGE - -quake = { arenas = {} } - -if minetest.deserialize(storage:get_string("arenas")) ~= nil then - quake.arenas = minetest.deserialize(storage:get_string("arenas")) -end - -local function newArena() end -local function nextID() end -local function in_game_txt(arena) end - -local arenasID -local players_in_game = {} --KEY: player name, INDEX: arenaID - -local arena_default_max_players = 4 -local arena_default_min_players = 2 -local arena_default_kill_cap = 10 - -quake.arena_default = { - name = "", - sign = {}, - players = {}, --KEY: player name, INDEX: kills, deaths, killstreak - spawn_points = {}, - max_players = arena_default_max_players, - min_players = arena_default_min_players, - kill_cap = arena_default_kill_cap, - kill_leader = "", - in_queue = false, - in_game = false, - in_celebration = false -} - - -function quake.create_arena(sender, arena_name) - - arenasID = nextID() - - -- controllo che non ci siano duplicati - if arenasID > 1 and quake.get_arena_by_name(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 - quake.arenas[arenasID] = newArena(quake.arena_default) - quake.arenas[arenasID].name = arena_name - quake.update_storage() - minetest.chat_send_player(sender, "Arena " .. arena_name .. " creata con successo") - -end - - - -function quake.remove_arena(sender, arena_name) - - local id, arena = quake.get_arena_by_name(arena_name) - - if not arena then minetest.chat_send_player(sender, minetest.colorize("#e6482e", "[!] Non c'è nessun'arena chiamata " .. arena_name .. "!")) - return end - - if arena.in_game then - minetest.chat_send_player(sender, minetest.colorize("#e6482e", "[!] Una partita è in corso nell'arena " .. arena_name .. ": impossibile rimuoverla")) - return end - - --TODO: -chiedere conferma - - -- rimozione cartello coi rispettivi metadati - if arena.sign ~= nil then minetest.set_node(arena.sign, {name = "air"}) end - - quake.send_message_players_in_arena(id, "[Quake] L'arena per la quale eri in coda è stata rimossa... :(") - - -- rimozione arena e aggiornamento storage - quake.arenas[id] = nil - quake.update_storage() - minetest.chat_send_player(sender, "Arena " .. arena_name .. " rimossa con successo") - -end - - - -function quake.set_sign(sender, arena_name) - - local arena_ID, arena = quake.get_arena_by_name(arena_name) - - if arena == nil then minetest.chat_send_player(sender, minetest.colorize("#e6482e", "[!] Quest'arena non esiste!")) - return end - - if quake.get_arena_spawners_count(arena_ID) < arena.max_players then minetest.chat_send_player(sender, minetest.colorize("#e6482e", "[!] Gli spawner devono essere quanto i giocatori massimi prima di impostare il cartello!")) - return end - - -- assegno item creazione arene con ID arena nei metadati da restituire al premere sul cartello - local stick = ItemStack("quake:create_sign") - local meta = stick:get_meta() - meta:set_int("arenaID", arena_ID) - - minetest.get_player_by_name(sender):set_wielded_item(stick) - minetest.chat_send_player(sender, "Click sinistro su un cartello per settare l'arena") -end - -function quake.update_storage() - storage:set_string("arenas", minetest.serialize(quake.arenas)) -end - - - -function quake.update_sign(pos, arena) - - -- essendo chiave non numerica, va contata così. Non uso il getter perché dovrei richiamare 2 funzioni (ID e count) - local p_count = 0 - for pl, stats in pairs(arena.players) do - p_count = p_count +1 - end - - signs_lib.update_sign(pos, {text = [[ - - ]] .. arena.name .. [[ - ]] .. p_count .. "/".. arena.max_players .. [[ - ]] .. in_game_txt(arena) .. [[ - - ]]}) -end - - -function quake.is_player_in_arena(pl_name) - - if players_in_game[pl_name] ~= nil then return true - else return false end -end - - ---[[ - ------------------------ - In game - ------------------------ -]] - --- per il player singolo a match iniziato -function quake.join_arena(arena_ID) - --TODO -end - - - --- per tutti i giocatori quando finisce la coda -function quake.load_arena(arena_ID) - - local count = 1 - local weapon = ItemStack("quake:railgun") - local arena = quake.arenas[arena_ID] - - -- teletrasporto giocatori e sostituisco l'inventario - for pl_name, stats in pairs(arena.players) do - - local player = minetest.get_player_by_name(pl_name) - - player:set_nametag_attributes({color = {a = 0, r = 255, g = 255, b = 255}}) - player: set_physics_override({ - speed = 1.7, - jump = 1.5, - gravity = 1.15, - }) - - player:set_pos(arena.spawn_points[count]) - player:get_inventory():set_list("main",{}) - player:get_inventory():add_item("main", weapon) - players_in_game[pl_name] = arena_ID -- registro giocatori nella tabella apposita - - count = count +1 - end - -end - - ---a partita finita -function quake.end_arena(arena_ID, winner_name) - - local arena = quake.arenas[arena_ID] - arena.in_celebration = true - - quake.update_sign(arena.sign, arena) - quake.update_storage() - - 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) - - 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, "[Quake] " .. winner_name .. " ha vinto la partita") - end - - minetest.after(0.01, function() - - for pl_name, stats in pairs(arena.players) do - minetest.get_player_by_name(pl_name):get_inventory():remove_item("main", ItemStack("quake:railgun")) - end - - end) - - - -- momento celebrazione (evita anche bug inventario con railgun che rimane al vincitore) - minetest.after(3, function() - - for pl_name, stats in pairs(arena.players) do - - arena.players[pl_name] = nil - players_in_game[pl_name] = nil - - arena.in_celebration = false - arena.in_game = false - quake.update_sign(arena.sign, arena) - quake.update_storage() - - minetest.get_player_by_name(pl_name):set_physics_override({ - speed = 1, - jump = 1, - gravity = 1, - }) - - --TODO: teleport lobby, metti variabile locale - - end - end) - -end - - -function quake.remove_player_from_arena(p_name) - - local arena_ID = players_in_game[p_name] - - arena[arena_ID].players[p_name] = nil - players_in_game[p_name] = nil - - quake.send_message_players_in_arena(arena_ID, "[Quake] " .. p_name .. " ha abbandonato la partita") - - --TODO: se in arena è rimasto solo un giocatore, ha vinto e end arena - -end - - -function quake.send_message_players_in_arena(arena_ID, msg) - - local arena = quake.arenas[arena_ID] - - for pl_name, stats in pairs(arena.players) do - minetest.chat_send_player(pl_name, msg) - end - -end - - -function quake.calc_kill_leader(arena, killer) - - if arena.players[killer].kills > arena.kill_leader then - arena.kill_leader = killer - end - -end - - ---[[ - ------------------------ - Getter - ------------------------ -]] - -function quake.get_arena_by_name(arena_name) - - for id, arena in pairs(quake.arenas) do - if arena.name == arena_name then - return id, arena end - end -end - - -function quake.get_arena_spawners_count(arena_ID) - return table.maxn(quake.arenas[arena_ID].spawn_points) -end - - -function quake.get_arena_players_count(arena_ID) - - local count = 0 - local arena = quake.arenas[arena_ID] - - for id, spawn in pairs(arena.players) do - count = count+1 - end - - return count -end - - -function quake.get_arenaID_by_player(p_name) - return players_in_game[p_name] -end - - -function quake.get_random_spawner(arena_ID) - return quake.arenas[arena_ID].spawn_points[math.random(1,quake.get_arena_spawners_count(arena_ID))] -end - - - - ---[[ - ------------------------ - Funzioni locali - ------------------------ -]] - ---[[ Dato che in Lua non è possibile istanziare le tabelle copiandole, bisogna istanziare ogni campo in una nuova tabella. - Ricorsivo per le sottotabelle. Codice da => http://lua-users.org/wiki/CopyTable]] -function newArena(orig) - local orig_type = type(orig) - local copy - if orig_type == 'table' then - copy = {} - for orig_key, orig_value in next, orig, nil do - copy[newArena(orig_key)] = newArena(orig_value) - end - setmetatable(copy, newArena(getmetatable(orig))) - else -- number, string, boolean, etc - copy = orig - end - return copy -end - - ---[[ l'ID di base parte da 1 (n+1) per non generare errori, tipo "if arenaID == 0" al verificare se non esiste. - In una sequenza 0, 1, 2, 3 se si rimuove "2" e si aggiunge un nuovo ID perciò si avrà 0, 1, 3, 4]] -function nextID() - local n = 0 - for id, arena in pairs(quake.arenas) do - if id > n then n = id end - end - return n+1 -end - - -function in_game_txt(arena) - local txt - - if arena.in_celebration then txt = "Concludendo" - elseif arena.in_game then txt = "In partita" - else txt = "In attesa" end - - return txt -end diff --git a/quake/init.lua b/quake/init.lua deleted file mode 100644 index 165b9cc..0000000 --- a/quake/init.lua +++ /dev/null @@ -1,151 +0,0 @@ --- load other scripts -dofile(minetest.get_modpath("quake") .. "/api.lua") -dofile(minetest.get_modpath("quake") .. "/chatcmdbuilder.lua") -dofile(minetest.get_modpath("quake") .. "/commands.lua") -dofile(minetest.get_modpath("quake") .. "/playermanager.lua") -dofile(minetest.get_modpath("quake") .. "/privs.lua") -dofile(minetest.get_modpath("quake") .. "/weapons.lua") - - ---[[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.override_item("default:sign_wall", { - - on_punch = function(pos, node, puncher, pointed_thing) - - local arenaID = minetest.get_meta(pos):get_int("arenaID") - if arenaID == 0 then return end - - local sign_arena = quake.arenas[arenaID] - local p_name = puncher:get_player_name() - - if not sign_arena then return end -- nel caso qualche cartello dovesse buggarsi, si può rompere e non fa crashare - - -- se è già in coda o viene fermato (cartello diverso) o si toglie dalla coda (cartello uguale) - if quake.is_player_in_arena(p_name) then - - if quake.get_arenaID_by_player(p_name) ~= arenaID then - minetest.chat_send_player(p_name, "[Quake]" .. minetest.colorize("#e6482e", "Devi prima uscire dalla coda di " .. arena.name .. "!")) - else - - sign_arena.players[p_name] = nil - quake.update_sign(pos, sign_arena) - minetest.chat_send_player(p_name, "[Quake] Sei uscito dalla coda") - quake.send_message_players_in_arena(arenaID, "[Quake] " .. p_name .. " ha abbandonato la coda") - - -- se non ci sono più abbastanza giocatori, annullo la coda - if quake.get_arena_players_count(arenaID) < sign_arena.min_players and sign_arena.in_queue then - timer:stop() - quake.send_message_players_in_arena(arenaID, "[Quake] La coda è stata annullata per troppi pochi giocatori") - end - end - return end - - -- se l'arena è piena - if quake.get_arena_players_count(arenaID) == sign_arena.max_players then - minetest.chat_send_player(p_name, minetest.colorize("#e6482e", "[!] L'arena è già piena!")) - return end - - -- notifico i vari giocatori del nuovo player - if sign_arena.in_game then - - --TODO: butta dentro alla partita in corso. Sì, si può entrare mentre è in corso -------- quake.join_arena(arenaID) - - quake.send_message_players_in_arena(arenaID, "[Quake] " .. p_name .. " si è aggiunto alla partita") - minetest.chat_send_player(p_name, "[Quake] Sei entrato nell'arena " .. sign_arena.name) - else - quake.send_message_players_in_arena(arenaID, "[Quake] " .. p_name .. " si è aggiunto alla coda") - minetest.chat_send_player(p_name, "[Quake] Ti sei aggiunto alla coda per " .. sign_arena.name) - end - - -- aggiungo il giocatore e aggiorno il cartello - sign_arena.players[p_name] = {kills = 0, deaths = 0, killstreak = 0} - quake.update_storage() - quake.update_sign(pos, sign_arena) - - local timer = minetest.get_node_timer(pos) - local waiting_time = 5 - - -- se ci sono abbastanza giocatori, parte il timer di attesa - if quake.get_arena_players_count(arenaID) == sign_arena.min_players and not sign_arena.in_queue and not sign_arena.in_game then - quake.send_message_players_in_arena(arenaID, "[Quake] La partita inizierà tra " .. waiting_time .. " secondi!") - sign_arena.in_queue = true - timer:start(waiting_time) - end - - -- se raggiungo i giocatori massimi e la partita non è iniziata, parte subito - if quake.get_arena_players_count(arenaID) == sign_arena.max_players and sign_arena.in_queue then - timer:stop() - timer:start(0.01) - end - - --TODO: timer ciclico che avvisa i giocatori quanto tempo manca ogni N secondi - - end, - - -- quello che succede una volta che il timer raggiunge lo 0 - on_timer = function(pos) - - local arenaID = minetest.get_meta(pos):get_int("arenaID") - local sign_arena = quake.arenas[arenaID] - - sign_arena.in_queue = false - sign_arena.in_game = true - quake.update_sign(pos, sign_arena) - - quake.load_arena(arenaID) - - return false - end, - -}) - - -minetest.register_node("quake:create_sign", { - - description = "Left click on a sign to create an entrance or to remove it", - tiles = {"trickerytown.png"}, - groups = {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 = quake.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 - quake.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) - - --TODO: rimuovere item - else - minetest.chat_send_player(user:get_player_name(), minetest.colorize("#e6482e", "[!] L'oggetto non è un cartello!")) - end - end, - -}) diff --git a/quake/sounds/quake_kill.ogg b/sounds/quake_kill.ogg similarity index 100% rename from quake/sounds/quake_kill.ogg rename to sounds/quake_kill.ogg diff --git a/quake/sounds/quake_railgun_shoot.ogg b/sounds/quake_railgun_shoot.ogg similarity index 100% rename from quake/sounds/quake_railgun_shoot.ogg rename to sounds/quake_railgun_shoot.ogg diff --git a/quake/textures/bubble.png b/textures/bubble.png similarity index 100% rename from quake/textures/bubble.png rename to textures/bubble.png diff --git a/quake/textures/creative_clear_icon.png b/textures/creative_clear_icon.png similarity index 100% rename from quake/textures/creative_clear_icon.png rename to textures/creative_clear_icon.png diff --git a/quake/textures/creative_next_icon.png b/textures/creative_next_icon.png similarity index 100% rename from quake/textures/creative_next_icon.png rename to textures/creative_next_icon.png diff --git a/quake/textures/creative_prev_icon.png b/textures/creative_prev_icon.png similarity index 100% rename from quake/textures/creative_prev_icon.png rename to textures/creative_prev_icon.png diff --git a/quake/textures/default_acacia_leaves.png b/textures/default_acacia_leaves.png similarity index 100% rename from quake/textures/default_acacia_leaves.png rename to textures/default_acacia_leaves.png diff --git a/quake/textures/default_acacia_leaves_simple.png b/textures/default_acacia_leaves_simple.png similarity index 100% rename from quake/textures/default_acacia_leaves_simple.png rename to textures/default_acacia_leaves_simple.png diff --git a/quake/textures/default_acacia_tree.png b/textures/default_acacia_tree.png similarity index 100% rename from quake/textures/default_acacia_tree.png rename to textures/default_acacia_tree.png diff --git a/quake/textures/default_acacia_tree_top.png b/textures/default_acacia_tree_top.png similarity index 100% rename from quake/textures/default_acacia_tree_top.png rename to textures/default_acacia_tree_top.png diff --git a/quake/textures/default_acacia_wood.png b/textures/default_acacia_wood.png similarity index 100% rename from quake/textures/default_acacia_wood.png rename to textures/default_acacia_wood.png diff --git a/quake/textures/default_apple.png b/textures/default_apple.png similarity index 100% rename from quake/textures/default_apple.png rename to textures/default_apple.png diff --git a/quake/textures/default_aspen_leaves.png b/textures/default_aspen_leaves.png similarity index 100% rename from quake/textures/default_aspen_leaves.png rename to textures/default_aspen_leaves.png diff --git a/quake/textures/default_aspen_tree.png b/textures/default_aspen_tree.png similarity index 100% rename from quake/textures/default_aspen_tree.png rename to textures/default_aspen_tree.png diff --git a/quake/textures/default_aspen_tree_top.png b/textures/default_aspen_tree_top.png similarity index 100% rename from quake/textures/default_aspen_tree_top.png rename to textures/default_aspen_tree_top.png diff --git a/quake/textures/default_aspen_wood.png b/textures/default_aspen_wood.png similarity index 100% rename from quake/textures/default_aspen_wood.png rename to textures/default_aspen_wood.png diff --git a/quake/textures/default_blueberry_bush_leaves.png b/textures/default_blueberry_bush_leaves.png similarity index 100% rename from quake/textures/default_blueberry_bush_leaves.png rename to textures/default_blueberry_bush_leaves.png diff --git a/quake/textures/default_blueberry_overlay.png b/textures/default_blueberry_overlay.png similarity index 100% rename from quake/textures/default_blueberry_overlay.png rename to textures/default_blueberry_overlay.png diff --git a/quake/textures/default_brick.png b/textures/default_brick.png similarity index 100% rename from quake/textures/default_brick.png rename to textures/default_brick.png diff --git a/quake/textures/default_coniferous_litter.png b/textures/default_coniferous_litter.png similarity index 100% rename from quake/textures/default_coniferous_litter.png rename to textures/default_coniferous_litter.png diff --git a/quake/textures/default_coniferous_litter_side.png b/textures/default_coniferous_litter_side.png similarity index 100% rename from quake/textures/default_coniferous_litter_side.png rename to textures/default_coniferous_litter_side.png diff --git a/quake/textures/default_dirt.png b/textures/default_dirt.png similarity index 100% rename from quake/textures/default_dirt.png rename to textures/default_dirt.png diff --git a/quake/textures/default_dry_dirt.png b/textures/default_dry_dirt.png similarity index 100% rename from quake/textures/default_dry_dirt.png rename to textures/default_dry_dirt.png diff --git a/quake/textures/default_dry_grass.png b/textures/default_dry_grass.png similarity index 100% rename from quake/textures/default_dry_grass.png rename to textures/default_dry_grass.png diff --git a/quake/textures/default_dry_grass_side.png b/textures/default_dry_grass_side.png similarity index 100% rename from quake/textures/default_dry_grass_side.png rename to textures/default_dry_grass_side.png diff --git a/quake/textures/default_fern_1.png b/textures/default_fern_1.png similarity index 100% rename from quake/textures/default_fern_1.png rename to textures/default_fern_1.png diff --git a/quake/textures/default_fern_2.png b/textures/default_fern_2.png similarity index 100% rename from quake/textures/default_fern_2.png rename to textures/default_fern_2.png diff --git a/quake/textures/default_fern_3.png b/textures/default_fern_3.png similarity index 100% rename from quake/textures/default_fern_3.png rename to textures/default_fern_3.png diff --git a/quake/textures/default_glass.png b/textures/default_glass.png similarity index 100% rename from quake/textures/default_glass.png rename to textures/default_glass.png diff --git a/quake/textures/default_grass.png b/textures/default_grass.png similarity index 100% rename from quake/textures/default_grass.png rename to textures/default_grass.png diff --git a/quake/textures/default_grass_1.png b/textures/default_grass_1.png similarity index 100% rename from quake/textures/default_grass_1.png rename to textures/default_grass_1.png diff --git a/quake/textures/default_grass_2.png b/textures/default_grass_2.png similarity index 100% rename from quake/textures/default_grass_2.png rename to textures/default_grass_2.png diff --git a/quake/textures/default_grass_3.png b/textures/default_grass_3.png similarity index 100% rename from quake/textures/default_grass_3.png rename to textures/default_grass_3.png diff --git a/quake/textures/default_grass_4.png b/textures/default_grass_4.png similarity index 100% rename from quake/textures/default_grass_4.png rename to textures/default_grass_4.png diff --git a/quake/textures/default_grass_5.png b/textures/default_grass_5.png similarity index 100% rename from quake/textures/default_grass_5.png rename to textures/default_grass_5.png diff --git a/quake/textures/default_grass_side.png b/textures/default_grass_side.png similarity index 100% rename from quake/textures/default_grass_side.png rename to textures/default_grass_side.png diff --git a/quake/textures/default_gravel.png b/textures/default_gravel.png similarity index 100% rename from quake/textures/default_gravel.png rename to textures/default_gravel.png diff --git a/quake/textures/default_junglewood.png b/textures/default_junglewood.png similarity index 100% rename from quake/textures/default_junglewood.png rename to textures/default_junglewood.png diff --git a/quake/textures/default_leaves.png b/textures/default_leaves.png similarity index 100% rename from quake/textures/default_leaves.png rename to textures/default_leaves.png diff --git a/quake/textures/default_leaves_simple.png b/textures/default_leaves_simple.png similarity index 100% rename from quake/textures/default_leaves_simple.png rename to textures/default_leaves_simple.png diff --git a/quake/textures/default_marram_grass_1.png b/textures/default_marram_grass_1.png similarity index 100% rename from quake/textures/default_marram_grass_1.png rename to textures/default_marram_grass_1.png diff --git a/quake/textures/default_marram_grass_2.png b/textures/default_marram_grass_2.png similarity index 100% rename from quake/textures/default_marram_grass_2.png rename to textures/default_marram_grass_2.png diff --git a/quake/textures/default_marram_grass_3.png b/textures/default_marram_grass_3.png similarity index 100% rename from quake/textures/default_marram_grass_3.png rename to textures/default_marram_grass_3.png diff --git a/quake/textures/default_mineral_coal.png b/textures/default_mineral_coal.png similarity index 100% rename from quake/textures/default_mineral_coal.png rename to textures/default_mineral_coal.png diff --git a/quake/textures/default_pine_needles.png b/textures/default_pine_needles.png similarity index 100% rename from quake/textures/default_pine_needles.png rename to textures/default_pine_needles.png diff --git a/quake/textures/default_pine_tree.png b/textures/default_pine_tree.png similarity index 100% rename from quake/textures/default_pine_tree.png rename to textures/default_pine_tree.png diff --git a/quake/textures/default_pine_tree_top.png b/textures/default_pine_tree_top.png similarity index 100% rename from quake/textures/default_pine_tree_top.png rename to textures/default_pine_tree_top.png diff --git a/quake/textures/default_pine_wood.png b/textures/default_pine_wood.png similarity index 100% rename from quake/textures/default_pine_wood.png rename to textures/default_pine_wood.png diff --git a/quake/textures/default_river_water.png b/textures/default_river_water.png similarity index 100% rename from quake/textures/default_river_water.png rename to textures/default_river_water.png diff --git a/quake/textures/default_river_water_flowing_animated.png b/textures/default_river_water_flowing_animated.png similarity index 100% rename from quake/textures/default_river_water_flowing_animated.png rename to textures/default_river_water_flowing_animated.png diff --git a/quake/textures/default_river_water_source_animated.png b/textures/default_river_water_source_animated.png similarity index 100% rename from quake/textures/default_river_water_source_animated.png rename to textures/default_river_water_source_animated.png diff --git a/quake/textures/default_sand.png b/textures/default_sand.png similarity index 100% rename from quake/textures/default_sand.png rename to textures/default_sand.png diff --git a/quake/textures/default_silver_sand.png b/textures/default_silver_sand.png similarity index 100% rename from quake/textures/default_silver_sand.png rename to textures/default_silver_sand.png diff --git a/quake/textures/default_snow.png b/textures/default_snow.png similarity index 100% rename from quake/textures/default_snow.png rename to textures/default_snow.png diff --git a/quake/textures/default_snow_side.png b/textures/default_snow_side.png similarity index 100% rename from quake/textures/default_snow_side.png rename to textures/default_snow_side.png diff --git a/quake/textures/default_stone.png b/textures/default_stone.png similarity index 100% rename from quake/textures/default_stone.png rename to textures/default_stone.png diff --git a/quake/textures/default_tree.png b/textures/default_tree.png similarity index 100% rename from quake/textures/default_tree.png rename to textures/default_tree.png diff --git a/quake/textures/default_tree_top.png b/textures/default_tree_top.png similarity index 100% rename from quake/textures/default_tree_top.png rename to textures/default_tree_top.png diff --git a/quake/textures/default_water.png b/textures/default_water.png similarity index 100% rename from quake/textures/default_water.png rename to textures/default_water.png diff --git a/quake/textures/default_water_flowing_animated.png b/textures/default_water_flowing_animated.png similarity index 100% rename from quake/textures/default_water_flowing_animated.png rename to textures/default_water_flowing_animated.png diff --git a/quake/textures/default_water_source_animated.png b/textures/default_water_source_animated.png similarity index 100% rename from quake/textures/default_water_source_animated.png rename to textures/default_water_source_animated.png diff --git a/quake/textures/default_wood.png b/textures/default_wood.png similarity index 100% rename from quake/textures/default_wood.png rename to textures/default_wood.png diff --git a/quake/textures/doors_door_wood.png b/textures/doors_door_wood.png similarity index 100% rename from quake/textures/doors_door_wood.png rename to textures/doors_door_wood.png diff --git a/quake/textures/flintlock.png b/textures/flintlock.png similarity index 100% rename from quake/textures/flintlock.png rename to textures/flintlock.png diff --git a/quake/textures/flowers_geranium.png b/textures/flowers_geranium.png similarity index 100% rename from quake/textures/flowers_geranium.png rename to textures/flowers_geranium.png diff --git a/quake/textures/flowers_mushroom_red.png b/textures/flowers_mushroom_red.png similarity index 100% rename from quake/textures/flowers_mushroom_red.png rename to textures/flowers_mushroom_red.png diff --git a/quake/textures/flowers_rose.png b/textures/flowers_rose.png similarity index 100% rename from quake/textures/flowers_rose.png rename to textures/flowers_rose.png diff --git a/quake/textures/gui_formbg.png b/textures/gui_formbg.png similarity index 100% rename from quake/textures/gui_formbg.png rename to textures/gui_formbg.png diff --git a/quake/textures/gui_hotbar.png b/textures/gui_hotbar.png similarity index 100% rename from quake/textures/gui_hotbar.png rename to textures/gui_hotbar.png diff --git a/quake/textures/gui_hotbar_selected.png b/textures/gui_hotbar_selected.png similarity index 100% rename from quake/textures/gui_hotbar_selected.png rename to textures/gui_hotbar_selected.png diff --git a/quake/textures/heart.png b/textures/heart.png similarity index 100% rename from quake/textures/heart.png rename to textures/heart.png diff --git a/quake/textures/quake_lobby_enter.png b/textures/quake_lobby_enter.png similarity index 100% rename from quake/textures/quake_lobby_enter.png rename to textures/quake_lobby_enter.png diff --git a/quake/textures/railgun.png b/textures/railgun.png similarity index 100% rename from quake/textures/railgun.png rename to textures/railgun.png diff --git a/quake/textures/trickerytown.png b/textures/trickerytown.png similarity index 100% rename from quake/textures/trickerytown.png rename to textures/trickerytown.png diff --git a/quake/textures/wieldhand.png b/textures/wieldhand.png similarity index 100% rename from quake/textures/wieldhand.png rename to textures/wieldhand.png diff --git a/quake/weapons.lua b/weapons.lua similarity index 80% rename from quake/weapons.lua rename to weapons.lua index 250f320..35bcd46 100644 --- a/quake/weapons.lua +++ b/weapons.lua @@ -79,8 +79,8 @@ function shoot(p_name, pointed_thing) local pos = minetest.get_pointed_thing_position(pointed_thing) local target = pointed_thing.ref - local arena_ID = quake.get_arenaID_by_player(p_name) - local arena = quake.arenas[arena_ID] + local arena_ID = arena_lib.get_arenaID_by_player(p_name) + local arena = arena_lib.arenas[arena_ID] if not arena then return end -- uno potrebbe sparare nel decimo di secondo di sostituzione arma a fine match e far crashare @@ -114,7 +114,7 @@ function shoot(p_name, pointed_thing) local p_stats = arena.players[p_name] p_stats.kills = p_stats.kills +1 p_stats.killstreak = p_stats.killstreak +1 - quake.calc_kill_leader(arena, p_name) + arena_lib.calc_kill_leader(arena, p_name) for pl_name, stats in pairs(arena.players) do if arena.kill_leader == pl_name then @@ -126,16 +126,24 @@ function shoot(p_name, pointed_thing) --TODO: aggiungere effetti sonori if p_stats.killstreak == 3 then - quake.send_message_players_in_arena(arena_ID, "[Quake] " .. minetest.colorize("#eea160", p_name) .. " è in una " .. minetest.colorize("#eea160", "serie d'uccisioni").. "!") + arena_lib.send_message_players_in_arena(arena_ID, "[Quake] " .. minetest.colorize("#eea160", p_name) .. " è in una " .. minetest.colorize("#eea160", "serie d'uccisioni").. "!") elseif p_stats.killstreak == 5 then - quake.send_message_players_in_arena(arena_ID, "[Quake] " .. minetest.colorize("#eea160", p_name) .. " è " .. minetest.colorize("#eea160", "inarrestabile").. "!") + arena_lib.send_message_players_in_arena(arena_ID, "[Quake] " .. minetest.colorize("#eea160", p_name) .. " è " .. minetest.colorize("#eea160", "inarrestabile").. "!") elseif p_stats.killstreak == 7 then - quake.send_message_players_in_arena(arena_ID, "[Quake] " .. minetest.colorize("#eea160", p_name) .. " è una " .. minetest.colorize("#eea160", "FURIA OMICIDA").. "!") + arena_lib.send_message_players_in_arena(arena_ID, "[Quake] " .. minetest.colorize("#eea160", p_name) .. " è una " .. minetest.colorize("#eea160", "FURIA OMICIDA").. "!") end -- se kill cap raggiunto finisce match if arena.players[p_name].kills == arena.kill_cap then - quake.end_arena(quake.get_arenaID_by_player(p_name), p_name) + + --rimuovo l'arma a tutti + minetest.after(0, function() + for pl_name, stats in pairs(arena.players) do + minetest.get_player_by_name(pl_name):get_inventory():remove_item("main", ItemStack("quake:railgun")) + end + end) + + arena_lib.load_celebration(arena_lib.get_arenaID_by_player(p_name), p_name) end end