79 lines
4.2 KiB
Lua
79 lines
4.2 KiB
Lua
local rand = PcgRandom(os.time())
|
|
|
|
|
|
|
|
arena_lib.on_time_tick("balloon_bop", function(arena)
|
|
arena.score = arena.score+1
|
|
arena.current_round_time = arena.current_round_time - 1
|
|
if arena.current_round_time == 0 then
|
|
arena.current_round_time = arena.round_time
|
|
arena.num_balloons = arena.num_balloons + 1
|
|
arena_lib.HUD_send_msg_all("broadcast", arena, arena.num_balloons .. " balloons!", 1, nil, "0xB6D53C")
|
|
end
|
|
|
|
-- handle player "fall death"
|
|
for pl_name,stats in pairs(arena.players) do -- it is a good convention to use "pl_name" in for loops and "p_name" elsewhere
|
|
local player = minetest.get_player_by_name( pl_name )
|
|
if player then
|
|
local pos = player:get_pos()
|
|
if pos.y < arena.player_die_level then
|
|
player:set_pos(arena_lib.get_random_spawner(arena))
|
|
end
|
|
player:hud_change(balloon_bop.infohuds[pl_name],"text",arena.score)
|
|
end
|
|
end
|
|
|
|
--handle balloons falling out or touching smth
|
|
local bal_c = 0
|
|
for _,obj in pairs(minetest.get_objects_inside_radius(arena.balloon_spawner, arena.arena_radius)) do
|
|
if obj and not( obj:is_player()) and obj:get_luaentity().name == "balloon_bop:balloon" then
|
|
|
|
bal_c = bal_c + 1
|
|
|
|
if obj:get_luaentity()._touching_ground == true or obj:get_pos().y <= arena.player_die_level then
|
|
-- minetest.chat_send_all(arena.arena_lives)
|
|
minetest.sound_play("lose", {
|
|
gain = 1.0, -- default
|
|
loop = false,
|
|
pos = obj:get_pos()
|
|
})
|
|
obj:remove()
|
|
arena.score = arena.score - 20
|
|
if arena.score < 0 then arena.score = 0 end
|
|
arena.arena_lives = arena.arena_lives - 1
|
|
if arena.arena_lives == 0 then
|
|
-- arena_lib.load_celebration(mod, arena, winner_name)
|
|
for pl_name,stats in pairs(arena.players) do -- it is a good convention to use "pl_name" in for loops and "p_name" elsewhere
|
|
if balloon_bop.infohuds[pl_name] then
|
|
player = minetest.get_player_by_name(pl_name)
|
|
if player then
|
|
player:hud_remove(balloon_bop.infohuds[pl_name])
|
|
balloon_bop.infohuds[pl_name] = nil
|
|
end
|
|
end
|
|
minetest.chat_send_player(pl_name,"Game Over! Your score is ".. arena.score .."!")
|
|
end
|
|
for _,obj in pairs(minetest.get_objects_inside_radius(arena.balloon_spawner, arena.arena_radius)) do
|
|
if not( obj:is_player()) and obj:get_luaentity().name == "balloon_bop:balloon" then
|
|
obj:remove()
|
|
end
|
|
end
|
|
arena_lib.force_arena_ending('balloon_bop', arena,'Game')
|
|
return
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if bal_c < arena.num_balloons then
|
|
balloon_bop.spawn(arena)
|
|
end
|
|
end)
|
|
|
|
|
|
arena_lib.on_quit("balloon_bop", function(arena, p_name, is_spectator)
|
|
player = minetest.get_player_by_name(p_name)
|
|
if player then
|
|
player:hud_remove(balloon_bop.infohuds[pl_name])
|
|
balloon_bop.infohuds[p_name] = nil
|
|
end
|
|
end) |