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) reset_meta(pl_name)
equip_weapons(pl_name, arena) equip_weapons(pl_name, arena)
create_and_show_HUD(arena, pl_name) create_and_show_HUD(arena, pl_name)
block_league.refill_weapons(arena, pl_name)
minetest.sound_play("bl_voice_countdown", {to_player = pl_name}) minetest.sound_play("bl_voice_countdown", {to_player = pl_name})
end end
@ -44,6 +45,7 @@ arena_lib.on_join("block_league", function(p_name, arena)
reset_meta(p_name) reset_meta(p_name)
equip_weapons(p_name, arena) equip_weapons(p_name, arena)
create_and_show_HUD(arena, p_name) 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}) minetest.get_player_by_name(p_name):set_armor_groups({immortal = nil})
@ -158,19 +160,12 @@ end
function equip_weapons(p_name, arena) 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() 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 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)) inv:add_item("main", ItemStack(weapon_name))
end end
inv:add_item("main", ItemStack("block_league:bouncer")) inv:add_item("main", ItemStack("block_league:bouncer"))
end end

View File

@ -10,15 +10,28 @@ function block_league.round_start(arena)
player:set_hp(20) player:set_hp(20)
arena.players[p_name].energy = 100 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({ player:set_physics_override({
speed = vel, speed = vel,
jump = 1.5 jump = 1.5
}) })
player:get_meta():set_int("bl_reloading", 0)
player:set_pos(arena_lib.get_random_spawner(arena, stats.teamID)) player:set_pos(arena_lib.get_random_spawner(arena, stats.teamID))
end
-- TEMP: da rimuovere quando giocatori avranno tabella armi if arena.mod == 1 then
load_ball(arena)
end
arena.weapons_disabled = false
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"} local default_weapons = {"block_league:smg", "block_league:sword", "block_league:pixelgun"}
for i, weapon_name in pairs(default_weapons) do for i, weapon_name in pairs(default_weapons) do
@ -29,14 +42,6 @@ function block_league.round_start(arena)
block_league.weapons_hud_update(arena, p_name, weapon_name, magazine) block_league.weapons_hud_update(arena, p_name, weapon_name, magazine)
end end
end end
end
if arena.mod == 1 then
load_ball(arena)
end
arena.weapons_disabled = false
end end

View File

@ -10,7 +10,7 @@
tiles = def.tiles or nil, tiles = def.tiles or nil,
wield_image = def.wield_image or nil, wield_image = def.wield_image or nil,
impaling = def.impaling, pierce = def.pierce,
knockback = def.knockback, knockback = def.knockback,
decrease_damage_with_distance = def.decrease_damage_with_distance, decrease_damage_with_distance = def.decrease_damage_with_distance,
bullet_damage = def.bullet_damage, 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}, wield_scale = {x=1.5, y=1.5, z=1.5},
inventory_image = "bl_grenade_icon.png", inventory_image = "bl_grenade_icon.png",
stack_max = 99, stack_max = 99,
impaling = false, pierce = false,
throwable_by_hand = true, throwable_by_hand = true,
bullet_damage = 10, bullet_damage = 10,
decrease_damage_with_distance = false, decrease_damage_with_distance = false,

View File

@ -10,7 +10,7 @@ block_league.register_weapon("block_league:pixelgun", {
weap_sound_shooting = "bl_pixelgun_shoot", weap_sound_shooting = "bl_pixelgun_shoot",
consume_bullets = false, consume_bullets = false,
magazine = 4, magazine = 4,
reload_delay = 4, reload_time = 4,
type = 1, type = 1,
weap_delay = 0.9, weap_delay = 0.9,
slow_down_when_firing = true, 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", inventory_image = "bl_grenade_icon.png",
stack_max = 99, stack_max = 99,
throwable_by_hand = false, throwable_by_hand = false,
impaling = true, pierce = true,
knockback = 0, knockback = 0,
decrease_damage_with_distance = false, decrease_damage_with_distance = false,
bullet_damage = 777, bullet_damage = 777,

View File

@ -8,7 +8,7 @@ block_league.register_bullet("block_league:rocket",{
bullet_damage = 10, bullet_damage = 10,
throwable_by_hand = false, throwable_by_hand = false,
duration = 5, duration = 5,
impaling = false, pierce = false,
decrease_damage_with_distance = false, decrease_damage_with_distance = false,
bullet_trail = { bullet_trail = {
image = "bl_bullet_rocket.png", 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 slow_down_when_firing = true, --Se rallentare chi spara
consume_bullets = true, --Se usa proiettili consume_bullets = true, --Se usa proiettili
magazine = 0, --Dopo quanti colpi ricaricare 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 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 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 slow_down_when_firing = true, --Se rallentare chi spara
consume_bullets = true, --Se usa proiettili consume_bullets = true, --Se usa proiettili
magazine = 0, --Dopo quanti colpi ricaricare magazine = 0, --Dopo quanti colpi ricaricare
reload_delay = 5, reload_time = 5,
launching_force = 10, launching_force = 10,
bullet = "block_league:nomeproiettile", --Che proiettile/granata spara 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 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 throwable_by_hand = true, --Se si può lanciare a mano
consume_on_throw = true, 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 knockback = 0, --Il contraccolpo da applicare al bersaglio
decrease_damage_with_distance = true, --Se il danno diminuisce con la distanza decrease_damage_with_distance = true, --Se il danno diminuisce con la distanza
bullet_damage = 10, --Danno inflitto bullet_damage = 10, --Danno inflitto

View File

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

View File

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

View File

@ -17,7 +17,7 @@ block_league.register_weapon("block_league:sword", {
local dir = user:get_look_dir() local dir = user:get_look_dir()
local pos = user:get_pos() local pos = user:get_pos()
local pos_head = {x = pos.x, y = pos.y+1.475, z = pos.z} 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 dir.y = 0

View File

@ -1,4 +1,5 @@
local function get_dist() end local function get_dist() end
local function draw_particles() end
local function weapon_reload() end local function weapon_reload() end
local function weapon_right_click() end local function weapon_right_click() end
local function gestione_sparo() 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 dir = user:get_look_dir()
local pos = user:get_pos() local pos = user:get_pos()
local pos_head = {x = pos.x, y = pos.y+1.475, z = pos.z} 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 if pointed_players then
block_league.apply_damage(user, pointed_players, bullet_definition.bullet_damage, bullet_definition.knockback, bullet_definition.decrease_damage_with_distance) block_league.apply_damage(user, pointed_players, bullet_definition.bullet_damage, bullet_definition.knockback, bullet_definition.decrease_damage_with_distance)
end end
@ -182,12 +183,13 @@ end
-- ritorna un array di player con il numero di player trovati a index 1. Se non -- ritorna un array di giocatori con il numero di giocatori trovati a indice 1.
-- trova player diversi da se stessi ritorna nil -- Se non trova giocatori diversi da se stesso ritorna nil
function block_league.get_pointed_players(head_pos, dir, dist1, dist2, user, particle, trafigge) 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 ray = minetest.raycast(p1, p2, true, false)
local players = {} local players = {}
@ -195,9 +197,8 @@ function block_league.get_pointed_players(head_pos, dir, dist1, dist2, user, par
for hit in ray do for hit in ray do
-- se è un oggetto -- se è un oggetto
if hit.type == "object" then if hit.type == "object" then
if hit.ref then
-- se è un giocatore -- se è un giocatore
if hit.ref:is_player() then if hit.ref and hit.ref:is_player() then
-- e non è colui che spara -- e non è colui che spara
if hit.ref ~= user then if hit.ref ~= user then
table.insert(players, hit.ref) table.insert(players, hit.ref)
@ -214,65 +215,25 @@ function block_league.get_pointed_players(head_pos, dir, dist1, dist2, user, par
entity:_destroy() entity:_destroy()
end end
end end
end
end end
else else
-- se è un nodo mi fermo, e ritorno l'array se > 0 (ovvero ha trovato giocatori) -- se è un nodo mi fermo, e ritorno l'array se > 0 (ovvero ha trovato giocatori)
if hit.type == "node" then if hit.type == "node" then
if #players > 0 then if #players > 0 then
if particle ~= nil and particle ~= false 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()) local dist3 = get_dist(head_pos, players[1]:get_pos())
minetest.add_particlespawner({ draw_particles(particle, dir, p1, range, dist3)
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
})
else else
local dist3 = get_dist(head_pos, hit.intersection_point) local dist3 = get_dist(head_pos, hit.intersection_point)
minetest.add_particlespawner({ draw_particles(particle, dir, p1, range, dist3)
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 end
end end
return players return players
else else
if particle ~= nil and particle ~= false then if particle ~= nil and particle ~= false then
local dist3 = get_dist(head_pos, hit.intersection_point) local dist3 = get_dist(head_pos, hit.intersection_point)
minetest.add_particlespawner({ draw_particles(particle, dir, p1, range, dist3)
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 end
return nil return nil
end end
@ -280,64 +241,21 @@ function block_league.get_pointed_players(head_pos, dir, dist1, dist2, user, par
end end
end end
-- se ho sparato a qualcuno puntando in aria (quindi senza incrociare blocchi) -- se ho sparato a qualcuno senza incrociare blocchi
if #players > 0 then if #players > 0 then
if trafigge then
if particle ~= nil and particle ~= false then if particle ~= nil and particle ~= false then
minetest.add_particlespawner({ if has_piercing then
amount = particle.amount, draw_particles(particle, dir, p1, range, 120)
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 return players
else else
if particle ~= nil and particle ~= false then
local dist3 = get_dist(head_pos, players[1]:get_pos()) local dist3 = get_dist(head_pos, players[1]:get_pos())
minetest.add_particlespawner({ draw_particles(particle, dir, p1, range, dist3)
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]} return {players[1]}
end end
end
else else
if particle ~= nil and particle ~= false then if particle ~= nil and particle ~= false then
minetest.add_particlespawner({ draw_particles(particle, dir, p1, range, 120)
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 end
return nil return nil
end 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) function weapon_reload(user, def, name)
local p_name = user:get_player_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) 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 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_weap_delay", 0)
p_meta:set_int("bl_reloading", 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 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) 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 if user and user:get_meta() then
p_meta:set_int("bl_weap_delay", 0) p_meta:set_int("bl_weap_delay", 0)
p_meta:set_int("bl_reloading", 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 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, player:get_pos())
death_delay(player, pos)
player:set_physics_override({ player:set_physics_override({
speed = block_league.SPEED, speed = block_league.SPEED,
jump = 1.5 jump = 1.5
}) })
-- TEMP: da rimuovere quando giocatori avranno tabella armi block_league.refill_weapons(arena, p_name)
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.immunity(player) block_league.immunity(player)
end) end)
@ -89,7 +74,7 @@ end)
---------------------------------------------- ----------------------------------------------
function death_delay(player, pos) 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") 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 if delay == 1 and arena_lib.is_player_in_arena(player:get_player_name(), "block_league") then
player:set_pos(pos) player:set_pos(pos)
@ -97,7 +82,7 @@ function death_delay(player, pos)
return return
end end
end end
minetest.after(0.1, function() death_delay(player, pos) end) minetest.after(0.2, function() death_delay(player, pos) end)
end end