From 46bc24f530c77a066e83f85a8d54eb08fcaaec1b Mon Sep 17 00:00:00 2001 From: Zughy <4279489-marco_a@users.noreply.gitlab.com> Date: Thu, 29 Oct 2020 23:06:24 +0100 Subject: [PATCH] Armi ottimizzate --- bl_HUD/hud_bullets.lua | 13 ++++---- bl_arena_lib/arena_manager.lua | 57 ++++++++++++++-------------------- bl_modes/game_main.lua | 15 ++++++--- bl_weapons/pixelgun.lua | 2 +- bl_weapons/sample.lua | 4 +-- bl_weapons/smg.lua | 2 +- bl_weapons/weapons.lua | 42 +++++++++++++------------ init.lua | 4 +-- player_manager.lua | 20 +++++++----- 9 files changed, 84 insertions(+), 75 deletions(-) diff --git a/bl_HUD/hud_bullets.lua b/bl_HUD/hud_bullets.lua index 13fe68b..87faf08 100644 --- a/bl_HUD/hud_bullets.lua +++ b/bl_HUD/hud_bullets.lua @@ -4,7 +4,7 @@ local function get_bullet_count() end -function block_league.weapons_hud_create(p_name) +function block_league.bullets_hud_create(p_name) local inv = minetest.get_player_by_name(p_name):get_inventory() local sub_img_elems = {} @@ -49,7 +49,7 @@ function block_league.weapons_hud_create(p_name) sub_txt_elems[definition.name .. "_reload_txt"] = { alignment = { x = 3, y = 0 }, offset = { x = 50, y = offset }, - text = definition.reload and definition.reload or "-1", + text = definition.magazine and definition.magazine or "-1", z_index = 1 } offset = offset - 50 @@ -94,13 +94,14 @@ end -function block_league.weapons_hud_update(arena, p_name, item_name, bullet_count, reload_count) - local definition = minetest.registered_nodes[item_name] +function block_league.weapons_hud_update(arena, p_name, item_name, magazine) + local weapon_def = minetest.registered_nodes[item_name] local panel = panel_lib.get_panel(p_name, "bl_bullets") + panel:update(nil, { - [definition.name .. "_reload_txt"] = { - text = (reload_count ~= nil) and reload_count or (panel[definition.name .. "_reload_txt"].text ~= "-1" and (panel[definition.name .. "_reload_txt"].text - 1) or "- 1") + [weapon_def.name .. "_reload_txt"] = { + text = magazine } }) end diff --git a/bl_arena_lib/arena_manager.lua b/bl_arena_lib/arena_manager.lua index 4578c7d..3accee2 100644 --- a/bl_arena_lib/arena_manager.lua +++ b/bl_arena_lib/arena_manager.lua @@ -11,11 +11,10 @@ arena_lib.on_load("block_league", function(arena) for pl_name, stats in pairs(arena.players) do reset_meta(pl_name) + equip_weapons(pl_name, arena) create_and_show_HUD(arena, pl_name) - minetest.sound_play("bl_voice_countdown", { - to_player = pl_name, - }) + minetest.sound_play("bl_voice_countdown", {to_player = pl_name}) end minetest.after(0.01, function() @@ -29,18 +28,8 @@ end) arena_lib.on_start("block_league", function(arena) for pl_name, stats in pairs(arena.players) do - - local player = minetest.get_player_by_name(pl_name) - - equip_weapons(player:get_inventory(), arena) - block_league.weapons_hud_create(pl_name) - panel_lib.get_panel(pl_name, "bl_bullets"):show() - - minetest.sound_play("bl_voice_fight", { - to_player = pl_name, - }) - - player:set_armor_groups({immortal = nil}) + minetest.get_player_by_name(pl_name):set_armor_groups({immortal = nil}) + minetest.sound_play("bl_voice_fight", {to_player = pl_name}) end block_league.round_start(arena) @@ -53,19 +42,12 @@ end) arena_lib.on_join("block_league", function(p_name, arena) reset_meta(p_name) + equip_weapons(p_name, arena) create_and_show_HUD(arena, p_name) - local player = minetest.get_player_by_name(p_name) + minetest.get_player_by_name(p_name):set_armor_groups({immortal = nil}) - equip_weapons(player:get_inventory(), arena) - block_league.weapons_hud_create(p_name) - panel_lib.get_panel(p_name, "bl_bullets"):show() - - minetest.sound_play("bl_voice_fight", { - to_player = p_name, - }) - - player:set_armor_groups({immortal = nil}) + minetest.sound_play("bl_voice_fight", {to_player = p_name}) minetest.after(0.01, function() block_league.scoreboard_update(arena) @@ -93,11 +75,9 @@ arena_lib.on_end("block_league", function(arena, players) for pl_name, stats in pairs(players) do remove_HUD(pl_name) - block_league.HUD_broadcast_remove(pl_name) + minetest.get_player_by_name(pl_name):set_armor_groups({immortal = nil}) block_league.update_storage(pl_name) - - minetest.get_player_by_name(pl_name):set_armor_groups({immortal = nil}) end end) @@ -115,7 +95,6 @@ arena_lib.on_death("block_league", function(arena, p_name, reason) team.deaths = team.deaths + 1 block_league.scoreboard_update(arena) end - end) @@ -123,13 +102,11 @@ end) arena_lib.on_quit("block_league", function(arena, p_name) remove_HUD(p_name) - block_league.HUD_broadcast_remove(p_name) local player = minetest.get_player_by_name(p_name) player:set_armor_groups({immortal = nil}) player:get_meta():set_int("bl_has_ball", 0) - end) @@ -160,9 +137,11 @@ function create_and_show_HUD(arena, p_name) block_league.scoreboard_create(arena, p_name) block_league.teams_score_create(p_name) block_league.energy_create(arena, p_name) + block_league.bullets_hud_create(p_name) panel_lib.get_panel(p_name, "bl_teams_score"):show() panel_lib.get_panel(p_name, "bl_energy"):show() + panel_lib.get_panel(p_name, "bl_bullets"):show() end @@ -172,14 +151,26 @@ function remove_HUD(p_name) panel_lib.get_panel(p_name, "bl_teams_score"):remove() panel_lib.get_panel(p_name, "bl_bullets"):remove() panel_lib.get_panel(p_name, "bl_energy"):remove() + block_league.HUD_broadcast_remove(p_name) end -function equip_weapons(inv, arena) +function equip_weapons(p_name, arena) + + local inv = minetest.get_player_by_name(p_name):get_inventory() + -- TODO: ottenere armi in database giocatori, dato che potranno cambiarle - local default_weapons = {"block_league:smg", "block_league:sword", "block_league:pixelgun", "block_league:bouncer"} + local default_weapons = {"block_league:smg", "block_league:sword", "block_league:pixelgun"} + for i, weapon_name in pairs(default_weapons) do + local magazine = minetest.registered_nodes[weapon_name].magazine + + if magazine then + arena.players[p_name].weapons_magazine[weapon_name] = magazine + end inv:add_item("main", ItemStack(weapon_name)) end + + inv:add_item("main", ItemStack("block_league:bouncer")) end diff --git a/bl_modes/game_main.lua b/bl_modes/game_main.lua index 479759e..6580536 100644 --- a/bl_modes/game_main.lua +++ b/bl_modes/game_main.lua @@ -11,11 +11,18 @@ function block_league.round_start(arena) arena.players[p_name].energy = 100 player:get_meta():set_int("bl_reloading", 0) - panel_lib.get_panel(p_name, "bl_bullets"):remove() - arena.players[p_name].weapons_reload = {} - block_league.weapons_hud_create(p_name) - panel_lib.get_panel(p_name, "bl_bullets"):show() + -- TEMP: da rimuovere quando giocatori avranno tabella armi + local default_weapons = {"block_league:smg", "block_league:sword", "block_league:pixelgun"} + + for i, weapon_name in pairs(default_weapons) do + local magazine = minetest.registered_nodes[weapon_name].magazine + + if magazine then + arena.players[p_name].weapons_magazine[weapon_name] = magazine + block_league.weapons_hud_update(arena, p_name, weapon_name, magazine) + end + end block_league.energy_update(arena, p_name) player:set_pos(arena_lib.get_random_spawner(arena, stats.teamID)) diff --git a/bl_weapons/pixelgun.lua b/bl_weapons/pixelgun.lua index d5081e5..53fcdbb 100644 --- a/bl_weapons/pixelgun.lua +++ b/bl_weapons/pixelgun.lua @@ -9,7 +9,7 @@ block_league.register_weapon("block_league:pixelgun", { inventory_image = "bl_pixelgun_icon.png", weap_sound_shooting = "bl_pixelgun_shoot", consume_bullets = false, - reload = 4, + magazine = 4, reload_delay = 4, type = 1, weap_delay = 0.9, diff --git a/bl_weapons/sample.lua b/bl_weapons/sample.lua index 0bf7735..f81ce57 100644 --- a/bl_weapons/sample.lua +++ b/bl_weapons/sample.lua @@ -21,7 +21,7 @@ block_league.register_weapon("block_league:nomearma", { continuos_fire = false, --Se può sparare tenendo premuto il sinistro slow_down_when_firing = true, --Se rallentare chi spara consume_bullets = true, --Se usa proiettili - reload = 0, --Dopo quanti colpi ricaricare + magazine = 0, --Dopo quanti colpi ricaricare reload_delay = 5, bullet = "block_league:nomeproiettile", --Che proiettile/granata spara aka quello che viene consumato all'uso on_right_click = function(arena, name, def, itemstack, user, pointed_thing) end, --Cosa fare quando si clicca destro @@ -30,7 +30,7 @@ block_league.register_weapon("block_league:nomearma", { continuos_fire = false, --Se può sparare tenendo premuto il sinistro slow_down_when_firing = true, --Se rallentare chi spara consume_bullets = true, --Se usa proiettili - reload = 0, --Dopo quanti colpi ricaricare + magazine = 0, --Dopo quanti colpi ricaricare reload_delay = 5, launching_force = 10, bullet = "block_league:nomeproiettile", --Che proiettile/granata spara diff --git a/bl_weapons/smg.lua b/bl_weapons/smg.lua index 118e71c..a64b47e 100644 --- a/bl_weapons/smg.lua +++ b/bl_weapons/smg.lua @@ -14,7 +14,7 @@ block_league.register_weapon("block_league:smg", { bullet = "block_league:smg_bullet", consume_bullets = false, - reload = 30, + magazine = 30, reload_delay = 2, range = 30, --Se non hitscan calcolarsi il tempo necessario per percorrere quello diff --git a/bl_weapons/weapons.lua b/bl_weapons/weapons.lua index 370e02a..2a1571f 100644 --- a/bl_weapons/weapons.lua +++ b/bl_weapons/weapons.lua @@ -21,7 +21,7 @@ function block_league.register_weapon(name, def) weap_damage = def.weap_damage or nil, consume_bullets = def.consume_bullets or nil, bullet = def.bullet or nil, - reload = def.reload or nil, + magazine = def.magazine or nil, -- Q = reload on_drop = function(itemstack, user, pointed_thing) @@ -505,7 +505,7 @@ function weapon_reload(user, def, name) if not arena or not arena.in_game or user:get_hp() <= 0 or arena.weapons_disabled then return end if def.type == 3 then return end - if def.reload and def.reload > 0 and user:get_meta():get_int("bl_reloading") == 0 then + if def.magazine and def.magazine > 0 and user:get_meta():get_int("bl_reloading") == 0 then local p_meta = user:get_meta() p_meta:set_int("bl_reloading", 1) @@ -514,8 +514,9 @@ function weapon_reload(user, def, name) if not user then return end p_meta:set_int("bl_weap_delay", 0) p_meta:set_int("bl_reloading", 0) - block_league.weapons_hud_update(arena, p_name, name, nil, def.reload) - arena.players[p_name].weapons_reload[name] = 0 + + arena.players[p_name].weapons_magazine[name] = def.magazine + block_league.weapons_hud_update(arena, p_name, name, arena.players[p_name].weapons_magazine[name]) end) end @@ -537,17 +538,17 @@ function gestione_sparo(p_name, user, def, name) return false end p_meta:set_int("bl_weap_delay", 1) - if def.reload then - if not arena.players[p_name].weapons_reload[name] then - arena.players[p_name].weapons_reload[name] = 0 + if def.magazine then + if not arena.players[p_name].weapons_magazine[name] then + arena.players[p_name].weapons_magazine[name] = 0 end end minetest.after(def.weap_delay, function() if not user then return end - if def.reload and user:get_meta():get_int("bl_reloading") == 0 then + if def.magazine and user:get_meta():get_int("bl_reloading") == 0 then user:get_meta():set_int("bl_weap_delay", 0) - elseif not def.reload then + elseif not def.magazine then user:get_meta():set_int("bl_weap_delay", 0) end end) @@ -560,6 +561,7 @@ function gestione_sparo(p_name, user, def, name) if user:get_hp() <= 0 or arena.weapons_disabled then return end + --[[ Per quando si avranno caricatori limitati if def.consume_bullets then if inv:contains_item("main", def.bullet) then inv:remove_item("main", def.bullet) @@ -567,25 +569,27 @@ function gestione_sparo(p_name, user, def, name) else return false end - end + end]] + + -- controllo caricamento + if def.magazine and def.magazine > 0 then + arena.players[p_name].weapons_magazine[name] = arena.players[p_name].weapons_magazine[name] - 1 + if arena.players[p_name].weapons_magazine[name] == 0 and user:get_meta():get_int("bl_reloading") == 0 then + p_meta:set_int("bl_reloading", 1) - if def.reload and def.reload > 0 then - arena.players[p_name].weapons_reload[name] = arena.players[p_name].weapons_reload[name] + 1 - if arena.players[p_name].weapons_reload[name] == def.reload and user:get_meta():get_int("bl_reloading") == 0 then - user:get_meta():set_int("bl_reloading", 1) minetest.after(def.reload_delay, function() if user and user:get_meta() then - user:get_meta():set_int("bl_weap_delay", 0) - user:get_meta():set_int("bl_reloading", 0) - block_league.weapons_hud_update(arena, p_name, name, nil, def.reload) - arena.players[p_name].weapons_reload[name] = 0 + p_meta:set_int("bl_weap_delay", 0) + p_meta:set_int("bl_reloading", 0) + arena.players[p_name].weapons_magazine[name] = def.magazine + block_league.weapons_hud_update(arena, p_name, name, arena.players[p_name].weapons_magazine[name]) end end) end end if def.type and def.type ~= 3 then - block_league.weapons_hud_update(arena, p_name, name, nil, nil) + block_league.weapons_hud_update(arena, p_name, name, arena.players[p_name].weapons_magazine[name]) end return true end diff --git a/init.lua b/init.lua index f224d4f..3f7d69a 100644 --- a/init.lua +++ b/init.lua @@ -38,7 +38,7 @@ arena_lib.register_minigame("block_league", { min_y = 0, }, temp_properties = { - weapons_disabled = false, + weapons_disabled = true, }, team_properties = { TDs = 0, @@ -47,7 +47,7 @@ arena_lib.register_minigame("block_league", { }, player_properties = { energy = 100, - weapons_reload = {}, + weapons_magazine = {}, } }) diff --git a/player_manager.lua b/player_manager.lua index 124277d..cfb564e 100644 --- a/player_manager.lua +++ b/player_manager.lua @@ -39,7 +39,7 @@ minetest.register_on_dieplayer(function(player) arena.players[p_name].energy = 100 block_league.energy_update(arena, p_name) player:get_meta():set_int("bl_death_delay", 1) - arena.players[p_name].weapons_reload = {} + arena.players[p_name].weapons_magazine = {} minetest.after(6, function() if not player or not player:get_meta() then return end @@ -58,20 +58,26 @@ minetest.register_on_respawnplayer(function(player) local pos = player:get_pos() death_delay(player, pos) - local arena = arena_lib.get_arena_by_player(player:get_player_name()) player:set_physics_override({ speed = block_league.SPEED, jump = 1.5 }) - local pl_name = player:get_player_name() - panel_lib.get_panel(pl_name, "bl_bullets"):remove() + -- TEMP: da rimuovere quando giocatori avranno tabella armi + local p_name = player:get_player_name() + local arena = arena_lib.get_arena_by_player(p_name) + local default_weapons = {"block_league:smg", "block_league:sword", "block_league:pixelgun"} - block_league.weapons_hud_create(pl_name) - panel_lib.get_panel(pl_name, "bl_bullets"):show() + for i, weapon_name in pairs(default_weapons) do + local magazine = minetest.registered_nodes[weapon_name].magazine + + if magazine then + arena.players[p_name].weapons_magazine[weapon_name] = magazine + block_league.weapons_hud_update(arena, p_name, weapon_name, magazine) + end + end block_league.immunity(player) - end)