Armi ottimizzate
parent
bb017e7ae6
commit
46bc24f530
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
4
init.lua
4
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 = {},
|
||||
}
|
||||
})
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue