Armi ottimizzate

master
Zughy 2020-10-29 23:06:24 +01:00
parent bb017e7ae6
commit 46bc24f530
9 changed files with 84 additions and 75 deletions

View File

@ -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

View File

@ -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

View File

@ -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))

View File

@ -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,

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 = {},
}
})

View File

@ -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)