L'odio per Zaizen continua a crescere
parent
a213ba333c
commit
85e5e97d60
|
@ -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
|
||||
|
|
|
@ -10,15 +10,28 @@ 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))
|
||||
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"}
|
||||
|
||||
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)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
if arena.mod == 1 then
|
||||
load_ball(arena)
|
||||
end
|
||||
|
||||
arena.weapons_disabled = false
|
||||
end
|
||||
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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à
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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,9 +197,8 @@ 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
|
||||
if hit.ref and hit.ref:is_player() then
|
||||
-- e non è colui che spara
|
||||
if hit.ref ~= user then
|
||||
table.insert(players, hit.ref)
|
||||
|
@ -214,65 +215,25 @@ function block_league.get_pointed_players(head_pos, dir, dist1, dist2, user, par
|
|||
entity:_destroy()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
-- se è un nodo mi fermo, e ritorno l'array se > 0 (ovvero ha trovato giocatori)
|
||||
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)
|
||||
-- se ho sparato a qualcuno 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
|
||||
if has_piercing then
|
||||
draw_particles(particle, dir, p1, range, 120)
|
||||
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
|
||||
draw_particles(particle, dir, p1, range, dist3)
|
||||
return {players[1]}
|
||||
end
|
||||
end
|
||||
else
|
||||
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
|
||||
})
|
||||
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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue