L'odio per Zaizen continua a crescere

master
Zughy 2020-10-30 11:27:32 +01:00
parent a213ba333c
commit 85e5e97d60
13 changed files with 98 additions and 176 deletions

View File

@ -13,6 +13,7 @@ arena_lib.on_load("block_league", function(arena)
reset_meta(pl_name)
equip_weapons(pl_name, arena)
create_and_show_HUD(arena, pl_name)
block_league.refill_weapons(arena, pl_name)
minetest.sound_play("bl_voice_countdown", {to_player = pl_name})
end
@ -44,6 +45,7 @@ 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)
block_league.refill_weapons(arena, p_name)
minetest.get_player_by_name(p_name):set_armor_groups({immortal = nil})
@ -158,19 +160,12 @@ end
function equip_weapons(p_name, arena)
--TODO avere una tabella per giocatore che tenga traccia delle armi equipaggiate
local default_weapons = {"block_league:smg", "block_league:sword", "block_league:pixelgun"}
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"}
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

@ -10,26 +10,15 @@ function block_league.round_start(arena)
player:set_hp(20)
arena.players[p_name].energy = 100
block_league.refill_weapons(arena, p_name)
player:get_meta():set_int("bl_reloading", 0)
player:set_physics_override({
speed = vel,
jump = 1.5
})
player:get_meta():set_int("bl_reloading", 0)
player:set_pos(arena_lib.get_random_spawner(arena, stats.teamID))
-- 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
end
if arena.mod == 1 then
@ -41,6 +30,22 @@ end
function block_league.refill_weapons(arena, p_name)
--TODO avere una tabella per giocatore che tenga traccia delle armi equipaggiate
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
end
----------------------------------------------

View File

@ -10,7 +10,7 @@
tiles = def.tiles or nil,
wield_image = def.wield_image or nil,
impaling = def.impaling,
pierce = def.pierce,
knockback = def.knockback,
decrease_damage_with_distance = def.decrease_damage_with_distance,
bullet_damage = def.bullet_damage,

View File

@ -5,7 +5,7 @@ block_league.register_bullet("block_league:grenade", {
wield_scale = {x=1.5, y=1.5, z=1.5},
inventory_image = "bl_grenade_icon.png",
stack_max = 99,
impaling = false,
pierce = false,
throwable_by_hand = true,
bullet_damage = 10,
decrease_damage_with_distance = false,

View File

@ -10,7 +10,7 @@ block_league.register_weapon("block_league:pixelgun", {
weap_sound_shooting = "bl_pixelgun_shoot",
consume_bullets = false,
magazine = 4,
reload_delay = 4,
reload_time = 4,
type = 1,
weap_delay = 0.9,
slow_down_when_firing = true,

View File

@ -6,7 +6,7 @@ block_league.register_bullet("block_league:pixelgun_bullet", {
inventory_image = "bl_grenade_icon.png",
stack_max = 99,
throwable_by_hand = false,
impaling = true,
pierce = true,
knockback = 0,
decrease_damage_with_distance = false,
bullet_damage = 777,

View File

@ -8,7 +8,7 @@ block_league.register_bullet("block_league:rocket",{
bullet_damage = 10,
throwable_by_hand = false,
duration = 5,
impaling = false,
pierce = false,
decrease_damage_with_distance = false,
bullet_trail = {
image = "bl_bullet_rocket.png",

View File

@ -22,7 +22,7 @@ block_league.register_weapon("block_league:nomearma", {
slow_down_when_firing = true, --Se rallentare chi spara
consume_bullets = true, --Se usa proiettili
magazine = 0, --Dopo quanti colpi ricaricare
reload_delay = 5,
reload_time = 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
@ -31,7 +31,7 @@ block_league.register_weapon("block_league:nomearma", {
slow_down_when_firing = true, --Se rallentare chi spara
consume_bullets = true, --Se usa proiettili
magazine = 0, --Dopo quanti colpi ricaricare
reload_delay = 5,
reload_time = 5,
launching_force = 10,
bullet = "block_league:nomeproiettile", --Che proiettile/granata spara
on_right_click = function(arena, name, def, itemstack, user, pointed_thing) end, --Cosa fare quando si clicca destro
@ -61,7 +61,7 @@ block_league.register_bullet("block_league:nomeproiettile", {
throwable_by_hand = true, --Se si può lanciare a mano
consume_on_throw = true,
impaling = true, --Se può attraversare il bersaglio NB: Utilizzabile solo con proiettili hitscan
pierce = true, --Se può attraversare il bersaglio NB: Utilizzabile solo con proiettili hitscan
knockback = 0, --Il contraccolpo da applicare al bersaglio
decrease_damage_with_distance = true, --Se il danno diminuisce con la distanza
bullet_damage = 10, --Danno inflitto

View File

@ -15,7 +15,7 @@ block_league.register_weapon("block_league:smg", {
consume_bullets = false,
magazine = 30,
reload_delay = 2,
reload_time = 2,
range = 30, --Se non hitscan calcolarsi il tempo necessario per percorrere quello
--spazio in base alla velocità

View File

@ -6,7 +6,7 @@ block_league.register_bullet("block_league:smg_bullet", {
stack_max = 99,
throwable_by_hand = false,
impaling = false,
pierce = false,
knockback = 0,
decrease_damage_with_distance = true,
bullet_damage = 3,

View File

@ -17,7 +17,7 @@ block_league.register_weapon("block_league:sword", {
local dir = user:get_look_dir()
local pos = user:get_pos()
local pos_head = {x = pos.x, y = pos.y+1.475, z = pos.z}
local pointed_players = block_league.get_pointed_players(pos_head, dir, 0, 5, user, nil, true)
local pointed_players = block_league.get_pointed_players(pos_head, dir, 5, user, nil, true)
dir.y = 0

View File

@ -1,4 +1,5 @@
local function get_dist() end
local function draw_particles() end
local function weapon_reload() end
local function weapon_right_click() end
local function gestione_sparo() end
@ -142,7 +143,7 @@ function block_league.shoot_hitscan(name, def, bullet_definition, itemstack, use
local dir = user:get_look_dir()
local pos = user:get_pos()
local pos_head = {x = pos.x, y = pos.y+1.475, z = pos.z}
local pointed_players = block_league.get_pointed_players(pos_head, dir, 0, def.range, user, bullet_definition.bullet_trail, bullet_definition.impaling)
local pointed_players = block_league.get_pointed_players(pos_head, dir, def.range, user, bullet_definition.bullet_trail, bullet_definition.pierce)
if pointed_players then
block_league.apply_damage(user, pointed_players, bullet_definition.bullet_damage, bullet_definition.knockback, bullet_definition.decrease_damage_with_distance)
end
@ -182,12 +183,13 @@ end
-- ritorna un array di player con il numero di player trovati a index 1. Se non
-- trova player diversi da se stessi ritorna nil
function block_league.get_pointed_players(head_pos, dir, dist1, dist2, user, particle, trafigge)
-- ritorna un array di giocatori con il numero di giocatori trovati a indice 1.
-- Se non trova giocatori diversi da se stesso ritorna nil
function block_league.get_pointed_players(head_pos, dir, range, user, particle, has_piercing)
local p1 = vector.add(head_pos, vector.multiply(dir, 0))
local p2 = vector.add(head_pos, vector.multiply(dir, range))
local p1 = vector.add(head_pos, vector.multiply(dir, dist1))
local p2 = vector.add(head_pos, vector.multiply(dir, dist2))
local ray = minetest.raycast(p1, p2, true, false)
local players = {}
@ -195,24 +197,22 @@ function block_league.get_pointed_players(head_pos, dir, dist1, dist2, user, par
for hit in ray do
-- se è un oggetto
if hit.type == "object" then
if hit.ref then
-- se è un giocatore
if hit.ref:is_player() then
-- e non è colui che spara
if hit.ref ~= user then
table.insert(players, hit.ref)
end
elseif hit.ref:get_luaentity() then
local entity = hit.ref:get_luaentity()
if entity.initial_properties ~= nil then
if hit.ref and hit.ref:is_player() then
-- e non è colui che spara
if hit.ref ~= user then
table.insert(players, hit.ref)
end
elseif hit.ref:get_luaentity() then
local entity = hit.ref:get_luaentity()
if entity.initial_properties ~= nil then
if entity.initial_properties.is_bullet or entity.initial_properties.is_grenade then
--distrugge sia il proiettile con cui collide che se stesso
entity.old_p_name = entity.p_name
entity.p_name = user:get_player_name()
if entity.initial_properties.is_bullet or entity.initial_properties.is_grenade then
--distrugge sia il proiettile con cui collide che se stesso
entity.old_p_name = entity.p_name
entity.p_name = user:get_player_name()
entity:_destroy()
end
entity:_destroy()
end
end
end
@ -221,58 +221,19 @@ function block_league.get_pointed_players(head_pos, dir, dist1, dist2, user, par
if hit.type == "node" then
if #players > 0 then
if particle ~= nil and particle ~= false then
if not trafigge then
if not has_piercing then
local dist3 = get_dist(head_pos, players[1]:get_pos())
minetest.add_particlespawner({
amount = particle.amount,
time = 0.3,
minpos = p1,
maxpos = p1,
minvel = vector.multiply(dir, dist2),
maxvel = vector.multiply(dir, dist2),
minexptime = dist3/(dist2 * 1.5),
maxexptime = dist3/(dist2 * 1.5),
size = 2,
collisiondetection = false,
vertical = false,
texture = particle.image
})
draw_particles(particle, dir, p1, range, dist3)
else
local dist3 = get_dist(head_pos, hit.intersection_point)
minetest.add_particlespawner({
amount = particle.amount,
time = 0.3,
minpos = p1,
maxpos = p1,
minvel = vector.multiply(dir, dist2),
maxvel = vector.multiply(dir, dist2),
minexptime = dist3/(dist2 * 1.5),
maxexptime = dist3/(dist2 * 1.5),
size = 2,
collisiondetection = false,
vertical = false,
texture = particle.image
})
draw_particles(particle, dir, p1, range, dist3)
end
end
return players
else
if particle ~= nil and particle ~= false then
local dist3 = get_dist(head_pos, hit.intersection_point)
minetest.add_particlespawner({
amount = particle.amount,
time = 0.3,
minpos = p1,
maxpos = p1,
minvel = vector.multiply(dir, dist2),
maxvel = vector.multiply(dir, dist2),
minexptime = dist3/(dist2 * 1.5),
maxexptime = dist3/(dist2 * 1.5),
size = 2,
collisiondetection = false,
vertical = false,
texture = particle.image
})
draw_particles(particle, dir, p1, range, dist3)
end
return nil
end
@ -280,64 +241,21 @@ function block_league.get_pointed_players(head_pos, dir, dist1, dist2, user, par
end
end
-- se ho sparato a qualcuno puntando in aria (quindi senza incrociare blocchi)
if #players > 0 then
if trafigge then
if particle ~= nil and particle ~= false then
minetest.add_particlespawner({
amount = particle.amount,
time = 0.3,
minpos = p1,
maxpos = p1,
minvel = vector.multiply(dir, 120),
maxvel = vector.multiply(dir, 120),
minexptime = dist2/120,
maxexptime = dist2/120,
size = 2,
collisiondetection = false,
vertical = false,
texture = particle.image
})
end
return players
else
if particle ~= nil and particle ~= false then
local dist3 = get_dist(head_pos, players[1]:get_pos())
minetest.add_particlespawner({
amount = particle.amount,
time = 0.3,
minpos = p1,
maxpos = p1,
minvel = vector.multiply(dir, dist2),
maxvel = vector.multiply(dir, dist2),
minexptime = dist3/(dist2 * 1.5),
maxexptime = dist3/(dist2 * 1.5),
size = 2,
collisiondetection = false,
vertical = false,
texture = particle.image
})
end
return {players[1]}
end
else
-- se ho sparato a qualcuno senza incrociare blocchi
if #players > 0 then
if particle ~= nil and particle ~= false then
minetest.add_particlespawner({
amount = particle.amount,
time = 0.3,
minpos = p1,
maxpos = p1,
minvel = vector.multiply(dir, 120),
maxvel = vector.multiply(dir, 120),
minexptime = dist2/120,
maxexptime = dist2/120,
size = 2,
collisiondetection = false,
vertical = false,
texture = particle.image
})
if has_piercing then
draw_particles(particle, dir, p1, range, 120)
return players
else
local dist3 = get_dist(head_pos, players[1]:get_pos())
draw_particles(particle, dir, p1, range, dist3)
return {players[1]}
end
end
else
if particle ~= nil and particle ~= false then
draw_particles(particle, dir, p1, range, 120)
end
return nil
end
@ -425,6 +343,25 @@ end
function draw_particles(particle, dir, p1, dist2, dist3)
minetest.add_particlespawner({
amount = particle.amount,
time = 0.3,
minpos = p1,
maxpos = p1,
minvel = vector.multiply(dir, dist2),
maxvel = vector.multiply(dir, dist2),
minexptime = dist3/(dist2 * 1.5),
maxexptime = dist3/(dist2 * 1.5),
size = 2,
collisiondetection = false,
vertical = false,
texture = particle.image
})
end
function weapon_reload(user, def, name)
local p_name = user:get_player_name()
@ -438,7 +375,7 @@ function weapon_reload(user, def, name)
p_meta:set_int("bl_reloading", 1)
minetest.after(def.reload_delay, function()
minetest.after(def.reload_time, function()
if not arena_lib.is_player_in_arena(p_name, "block_league") then return end
p_meta:set_int("bl_weap_delay", 0)
p_meta:set_int("bl_reloading", 0)
@ -538,7 +475,7 @@ function gestione_sparo(p_name, user, def, name)
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)
minetest.after(def.reload_delay, function()
minetest.after(def.reload_time, function()
if user and user:get_meta() then
p_meta:set_int("bl_weap_delay", 0)
p_meta:set_int("bl_reloading", 0)

View File

@ -55,28 +55,13 @@ minetest.register_on_respawnplayer(function(player)
if not arena_lib.is_player_in_arena(player:get_player_name(), "block_league") then return end
local pos = player:get_pos()
death_delay(player, pos)
death_delay(player, player:get_pos())
player:set_physics_override({
speed = block_league.SPEED,
jump = 1.5
})
-- 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"}
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.refill_weapons(arena, p_name)
block_league.immunity(player)
end)
@ -89,7 +74,7 @@ end)
----------------------------------------------
function death_delay(player, pos)
if player and player:get_meta() then
if player then
local delay = player:get_meta():get_int("bl_death_delay")
if delay == 1 and arena_lib.is_player_in_arena(player:get_player_name(), "block_league") then
player:set_pos(pos)
@ -97,7 +82,7 @@ function death_delay(player, pos)
return
end
end
minetest.after(0.1, function() death_delay(player, pos) end)
minetest.after(0.2, function() death_delay(player, pos) end)
end