inizio pulizie

master
Zughy 2020-10-28 01:07:22 +01:00
parent ac34f8b615
commit 2bed8da117
5 changed files with 204 additions and 187 deletions

View File

@ -1,15 +1,22 @@
local S = minetest.get_translator("block_league")
local function get_bullet_count() end
function block_league.weapons_hud_create(p_name)
local inv = minetest.get_player_by_name(p_name):get_inventory()
local sub_img_elems = {}
local sub_txt_elems = {}
local offset = -120
for i = 0,inv:get_size("main"),1 do
for i = 0, inv:get_size("main"), 1 do
local stack = inv:get_stack("main", i)
local item_name = stack:get_name()
local definition = minetest.registered_nodes[item_name]
if definition ~= nil and (definition.throwable_by_hand ~= nil or definition.bullet ~= nil) then
sub_img_elems[item_name .. "_icon"] = {
scale = { x = 2, y = 2 },
@ -26,26 +33,18 @@ function block_league.weapons_hud_create(p_name)
z_index = 0
}
local conto = 0
local count = 0
if definition.bullet then
for i=0,inv:get_size("main"),1 do
for i=0, inv:get_size("main"), 1 do
local stack = inv:get_stack("main", i)
local item_name = stack:get_name()
if item_name == definition.bullet then
conto = stack:get_count()
count = stack:get_count()
break
end
end
end
local conto_proiettili = definition.throwable_by_hand and stack:get_count() or conto
--[[
sub_txt_elems[definition.name .. "_count_txt"] = {
alignment = { x = 1, y = 0 },
offset = { x = 50, y = offset },
--text = ((definition.consume_bullets or definition.consume_on_throw) and conto_proiettili or "-1") .. " | " .. (definition.reload and definition.reload or "-1"),
text = (definition.consume_bullets or definition.consume_on_throw) and conto_proiettili or "-1",
z_index = 1
}]]
sub_txt_elems[definition.name .. "_reload_txt"] = {
alignment = { x = 3, y = 0 },
@ -58,49 +57,48 @@ function block_league.weapons_hud_create(p_name)
end
local panel = Panel:new({
name = "bullets_hud",
player = p_name,
bg = "",
position = { x = 0, y = 1 },
alignment = { x = -1, y = 0 },
title = "",
-- creo pannello
Panel:new({
name = "bullets_hud",
player = p_name,
bg = "",
position = { x = 0, y = 1 },
alignment = { x = -1, y = 0 },
title = "",
sub_img_elems = sub_img_elems,
sub_txt_elems = sub_txt_elems
})
sub_img_elems = sub_img_elems,
sub_txt_elems = sub_txt_elems
})
end
function get_bullet_count(definition, inv)
if definition.throwable_by_hand then
return stack:get_count()
else
local conto = 0
if definition.bullet then
for i=0,inv:get_size("main"),1 do
local stack = inv:get_stack("main", i)
local item_name = stack:get_name()
if item_name == definition.bullet then
return stack:get_count()
end
if not definition.bullet then return end
for i=0,inv:get_size("main"),1 do
local stack = inv:get_stack("main", i)
local item_name = stack:get_name()
if item_name == definition.bullet then
return stack:get_count()
end
end
end
end
function block_league.weapons_hud_update(arena, p_name, item_name, bullet_count, reload_count)
local definition = minetest.registered_nodes[item_name]
local panel = panel_lib.get_panel(p_name, "bullets_hud")
panel:update(nil,
{
--[[
[definition.name .. "_count_txt"] = {
--text = ((bullet_count ~= nil) and bullet_count or (panel[definition.name .. "_count_txt"].text - 1)) .. " | " .. ((reload_count ~= nil) and reload_count or (panel[definition.name .. "_reload_txt"].text - 1))
text = (bullet_count ~= nil) and bullet_count or (panel[definition.name .. "_count_txt"].text ~= "-1" and (panel[definition.name .. "_count_txt"].text - 1) or "-1")
},]]
[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")
}

View File

@ -15,7 +15,6 @@ arena_lib.on_load("block_league", function(arena)
block_league.HUD_teams_score_create(pl_name)
block_league.energy_create(arena, pl_name)
panel_lib.get_panel(pl_name, "blockleague_teams_score"):show()
panel_lib.get_panel(pl_name, "blockleague_energy"):show()
@ -30,26 +29,12 @@ arena_lib.on_load("block_league", function(arena)
end
minetest.after(0.01, function()
block_league.scoreboard_update(arena)
end)
end)
function block_league.add_default_weapons(inv, arena)
local default_weapons = {"block_league:smg", "block_league:sword", "block_league:pixelgun", "block_league:bouncer"}
for i, weapon_name in pairs(default_weapons) do
inv:add_item("main", ItemStack(weapon_name))
end
end
function block_league.remove_default_weapons(inv, arena)
local default_weapons = {"block_league:smg", "block_league:sword", "block_league:pixelgun", "block_league:bouncer"}
for i, weapon_name in pairs(default_weapons) do
inv:remove_item("main", ItemStack(weapon_name .. "99"))
end
end
arena_lib.on_start("block_league", function(arena)
@ -57,6 +42,7 @@ 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)
block_league.add_default_weapons(player:get_inventory(), arena)
block_league.weapons_hud_create(pl_name)
panel_lib.get_panel(pl_name, "bullets_hud"):show()
@ -74,18 +60,15 @@ arena_lib.on_start("block_league", function(arena)
})
player:set_armor_groups({immortal = nil})
end
if arena.prototipo_spawn ~= nil then
-- se è TD, forza chunk entità e la aggiunge nel mondo
if arena.mod == 1 then
local pos1 = {x = arena.prototipo_spawn.x - 1, y = arena.prototipo_spawn.y - 1, z = arena.prototipo_spawn.z - 1}
local pos2 = {x = arena.prototipo_spawn.x + 1, y = arena.prototipo_spawn.y + 1, z = arena.prototipo_spawn.z + 1}
--minetest.load_area(pos1, pos2)
--minetest.emerge_area(pos1, pos2)
minetest.forceload_block(pos1, pos2)
minetest.after(3, function()
local ent = minetest.add_entity(arena.prototipo_spawn,"block_league:prototipo",arena.name)
end)
local ent = minetest.add_entity(arena.prototipo_spawn,"block_league:prototipo",arena.name)
end
block_league.energy_refill(arena)

View File

@ -1,3 +1,9 @@
local function weapon_reload() end
local function gestione_sparo() end
local function shoot_generic() end
local function after_shoot() end
local function kill() end
function block_league.register_weapon(name, def)
minetest.register_node(name, {
name = name,
@ -17,12 +23,12 @@ function block_league.register_weapon(name, def)
bullet = def.bullet or nil,
reload = def.reload or nil,
-- Q = reload
on_drop = function(itemstack, user, pointed_thing)
weapon_reload(user, def, name)
end,
-- RMB = secondary use
on_place = function(itemstack, user, pointed_thing)
if not def.on_right_click then return end
@ -49,10 +55,6 @@ function block_league.register_weapon(name, def)
end
local p_name = user:get_player_name()
-- Check if the player is in the arena and is fighting, if not it exits
if not arena_lib.is_player_in_arena(p_name) then return end
local arena = arena_lib.get_arena_by_player(p_name)
if not arena or not arena.in_game or user:get_hp() <= 0 or arena.weapons_disabled then return end
@ -62,11 +64,11 @@ function block_league.register_weapon(name, def)
end
end,
-- LMB = first fire
on_use = function(itemstack, user, pointed_thing)
local p_name = user:get_player_name()
if not gestione_sparo(p_name, user, def, name, nil) then return end
if def.weap_sound_shooting then
@ -201,124 +203,7 @@ function block_league.register_weapon(name, def)
end
function weapon_reload(user, def, name)
local p_name = user:get_player_name()
if not arena_lib.is_player_in_arena(p_name) then return false end
local arena = arena_lib.get_arena_by_player(p_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("reloading") == 0 then
user:get_meta():set_int("reloading", 1)
minetest.after(def.reload_delay, function()
if user and user:get_meta() then
local inv = user:get_inventory()
if inv:contains_item("main", "block_league:match_over") then return false end
user:get_meta():set_int("blockleague_weap_delay", 0)
user:get_meta():set_int("reloading", 0)
block_league.weapons_hud_update(arena, p_name, name, nil, def.reload)
arena.players[p_name].weapons_reload[name] = 0
end
end)
end
end
function gestione_sparo(p_name, user, def, name, inv)
-- Check if the player is in the arena and is fighting, if not it exits
if not arena_lib.is_player_in_arena(p_name) then return false end
local arena = arena_lib.get_arena_by_player(p_name)
----- gestione delay dell'arma -----
if user:get_meta():get_int("blockleague_weap_delay") == 1 or
user:get_meta():get_int("blockleague_death_delay") == 1 or
user:get_meta():get_int("reloading") == 1 then
return false end
user:get_meta():set_int("blockleague_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
end
end
if not inv then
inv = user:get_inventory()
end
minetest.after(def.weap_delay, function()
if user and user:get_meta() then
if inv:contains_item("main", "block_league:match_over") then return false end
if def.reload and user:get_meta():get_int("reloading") == 0 then
user:get_meta():set_int("blockleague_weap_delay", 0)
elseif not def.reload then
user:get_meta():set_int("blockleague_weap_delay", 0)
end
end
end)
----- fine gestione delay -----
-- se sono immune e sparo, perdo l'immunità
if user:get_armor_groups().immortal and user:get_armor_groups().immortal == 1 then
user:set_armor_groups({immortal = nil})
end
if not arena or not arena.in_game or user:get_hp() <= 0 or arena.weapons_disabled then return false end
if def.consume_bullets then
if inv:contains_item("main", def.bullet) then
inv:remove_item("main", def.bullet)
block_league.weapons_hud_update(arena, p_name, name, nil, nil)
else
return false
end
end
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("reloading") == 0 then
user:get_meta():set_int("reloading", 1)
minetest.after(def.reload_delay, function()
if user and user:get_meta() then
if inv:contains_item("main", "block_league:match_over") then return false end
user:get_meta():set_int("blockleague_weap_delay", 0)
user:get_meta():set_int("reloading", 0)
block_league.weapons_hud_update(arena, p_name, name, nil, def.reload)
arena.players[p_name].weapons_reload[name] = 0
end
end)
end
end
if def.type and def.type ~= 3 then
block_league.weapons_hud_update(arena, p_name, name, nil, nil)
end
return true
end
function shoot_generic(def, name, itemstack, user, pointed_thing)
if def.type == 1 or def.type == 2 then
local bullet_definition = def.bullet and minetest.registered_nodes[def.bullet] or nil
if def.type == 1 then
block_league.shoot_hitscan(name, def, bullet_definition, itemstack, user, pointed_thing)
elseif def.type == 2 then
block_league.shoot_bullet(name, def, bullet_definition, itemstack, user, pointed_thing)
end
elseif def.type == 3 then
if pointed_thing.type == "object" and pointed_thing.ref:is_player() then
local dir = user:get_look_dir()
block_league.shoot(user, pointed_thing.ref, def.weap_damage, def.knockback, false, dir)
end
end
end
function block_league.shoot_hitscan(name, def, bullet_definition, itemstack, user, pointed_thing)
local dir = user:get_look_dir()
@ -330,6 +215,8 @@ function block_league.shoot_hitscan(name, def, bullet_definition, itemstack, use
end
end
function block_league.shoot_bullet(name, def, def2, itemstack, user, pointed_thing)
local yaw = user:get_look_horizontal()
local pitch = user:get_look_vertical()
@ -364,6 +251,7 @@ function block_league.shoot_bullet(name, def, def2, itemstack, user, pointed_thi
end
function block_league.get_dist(pos1, pos2)
local lenx = math.abs(pos1.x - pos2.x)
local leny = math.abs(pos1.y - pos2.y)
@ -551,6 +439,7 @@ function block_league.get_pointed_players(head_pos, dir, dist1, dist2, user, par
end
--block_league.shoot(user, pointed_players, bullet_definition.bullet_damage, bullet_definition.knockback, bullet_definition.decrease_damage_with_distance)
-- può avere uno o più target: formato ObjectRef
function block_league.shoot(user, targets, damage, knockback, decrease_damage_with_distance, knockback_dir)
@ -614,6 +503,154 @@ end
function block_league.add_default_weapons(inv, arena)
local default_weapons = {"block_league:smg", "block_league:sword", "block_league:pixelgun", "block_league:bouncer"}
for i, weapon_name in pairs(default_weapons) do
inv:add_item("main", ItemStack(weapon_name))
end
end
function block_league.remove_default_weapons(inv, arena)
local default_weapons = {"block_league:smg", "block_league:sword", "block_league:pixelgun", "block_league:bouncer"}
for i, weapon_name in pairs(default_weapons) do
inv:remove_item("main", ItemStack(weapon_name .. "99"))
end
end
----------------------------------------------
---------------FUNZIONI LOCALI----------------
----------------------------------------------
function weapon_reload(user, def, name)
local p_name = user:get_player_name()
if not arena_lib.is_player_in_arena(p_name) then return false end
local arena = arena_lib.get_arena_by_player(p_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("reloading") == 0 then
user:get_meta():set_int("reloading", 1)
minetest.after(def.reload_delay, function()
if user and user:get_meta() then
local inv = user:get_inventory()
if inv:contains_item("main", "block_league:match_over") then return false end
user:get_meta():set_int("blockleague_weap_delay", 0)
user:get_meta():set_int("reloading", 0)
block_league.weapons_hud_update(arena, p_name, name, nil, def.reload)
arena.players[p_name].weapons_reload[name] = 0
end
end)
end
end
function gestione_sparo(p_name, user, def, name, inv)
-- Check if the player is in the arena and is fighting, if not it exits
if not arena_lib.is_player_in_arena(p_name) then return false end
local arena = arena_lib.get_arena_by_player(p_name)
----- gestione delay dell'arma -----
if user:get_meta():get_int("blockleague_weap_delay") == 1 or
user:get_meta():get_int("blockleague_death_delay") == 1 or
user:get_meta():get_int("reloading") == 1 then
return false end
user:get_meta():set_int("blockleague_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
end
end
if not inv then
inv = user:get_inventory()
end
minetest.after(def.weap_delay, function()
if user and user:get_meta() then
if inv:contains_item("main", "block_league:match_over") then return false end
if def.reload and user:get_meta():get_int("reloading") == 0 then
user:get_meta():set_int("blockleague_weap_delay", 0)
elseif not def.reload then
user:get_meta():set_int("blockleague_weap_delay", 0)
end
end
end)
----- fine gestione delay -----
-- se sono immune e sparo, perdo l'immunità
if user:get_armor_groups().immortal and user:get_armor_groups().immortal == 1 then
user:set_armor_groups({immortal = nil})
end
if not arena or not arena.in_game or user:get_hp() <= 0 or arena.weapons_disabled then return false end
if def.consume_bullets then
if inv:contains_item("main", def.bullet) then
inv:remove_item("main", def.bullet)
block_league.weapons_hud_update(arena, p_name, name, nil, nil)
else
return false
end
end
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("reloading") == 0 then
user:get_meta():set_int("reloading", 1)
minetest.after(def.reload_delay, function()
if user and user:get_meta() then
if inv:contains_item("main", "block_league:match_over") then return false end
user:get_meta():set_int("blockleague_weap_delay", 0)
user:get_meta():set_int("reloading", 0)
block_league.weapons_hud_update(arena, p_name, name, nil, def.reload)
arena.players[p_name].weapons_reload[name] = 0
end
end)
end
end
if def.type and def.type ~= 3 then
block_league.weapons_hud_update(arena, p_name, name, nil, nil)
end
return true
end
function shoot_generic(def, name, itemstack, user, pointed_thing)
if def.type == 1 or def.type == 2 then
local bullet_definition = def.bullet and minetest.registered_nodes[def.bullet] or nil
if def.type == 1 then
block_league.shoot_hitscan(name, def, bullet_definition, itemstack, user, pointed_thing)
elseif def.type == 2 then
block_league.shoot_bullet(name, def, bullet_definition, itemstack, user, pointed_thing)
end
elseif def.type == 3 then
if pointed_thing.type == "object" and pointed_thing.ref:is_player() then
local dir = user:get_look_dir()
block_league.shoot(user, pointed_thing.ref, def.weap_damage, def.knockback, false, dir)
end
end
end
function after_shoot(arena, p_name, killed_players)
-- eventuale achievement doppia/tripla uccisione

View File

@ -65,10 +65,10 @@ dofile(minetest.get_modpath("block_league") .. "/_arena_lib/arena_properties.lua
-- HUD
dofile(minetest.get_modpath("block_league") .. "/_HUD/hud_achievements.lua")
dofile(minetest.get_modpath("block_league") .. "/_HUD/hud_broadcast.lua")
dofile(minetest.get_modpath("block_league") .. "/_HUD/hud_bullets.lua")
dofile(minetest.get_modpath("block_league") .. "/_HUD/hud_energy.lua")
dofile(minetest.get_modpath("block_league") .. "/_HUD/hud_scoreboard.lua")
dofile(minetest.get_modpath("block_league") .. "/_HUD/hud_teams_score.lua")
dofile(minetest.get_modpath("block_league") .. "/_HUD/bullets_hud.lua")
-- abstract weapons
dofile(minetest.get_modpath("block_league") .. "/_weapons/bullets.lua")
dofile(minetest.get_modpath("block_league") .. "/_weapons/weapons.lua")
@ -87,7 +87,6 @@ dofile(minetest.get_modpath("block_league") .. "/_weapons/smg_bullet.lua")
-- misc
dofile(minetest.get_modpath("block_league") .. "/_misc/ball.lua")
dofile(minetest.get_modpath("block_league") .. "/_misc/energy.lua")
-- immunity
dofile(minetest.get_modpath("block_league") .. "/_immunity/immunity.lua")
dofile(minetest.get_modpath("block_league") .. "/_misc/immunity.lua")
block_league.init_storage()