add "/snowball leave" command for people to be able to quit early
This commit is contained in:
parent
51ec90122b
commit
ff31a5ed9e
@ -18,7 +18,7 @@ local function set_player_participation(player_name, participates)
|
|||||||
-- if was in a game, leave
|
-- if was in a game, leave
|
||||||
local game = yl_snowball.games_by_player[player_name]
|
local game = yl_snowball.games_by_player[player_name]
|
||||||
if game then
|
if game then
|
||||||
game:on_leaveplayer(player_name)
|
game:leave(player_name)
|
||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
@ -50,16 +50,25 @@ core.register_chatcommand(
|
|||||||
{
|
{
|
||||||
--params = "opt-out|opt-in|hud",
|
--params = "opt-out|opt-in|hud",
|
||||||
--description = "Opt-out or opt-in from the snowball games. Hide/show game HUD",
|
--description = "Opt-out or opt-in from the snowball games. Hide/show game HUD",
|
||||||
params = "opt-out|opt-in",
|
params = "opt-out|opt-in|leave",
|
||||||
description = "Opt-out or opt-in from the snowball games.",
|
description = "Opt-out or opt-in from the snowball games. Or just leave the current one.",
|
||||||
privs = {},
|
privs = {},
|
||||||
func = function(player_name, param)
|
func = function(player_name, param)
|
||||||
if param == "opt-out" then
|
if param == "opt-out" then
|
||||||
local res = set_player_participation(player_name, false)
|
set_player_participation(player_name, false)
|
||||||
return true, "You opt-out from snowball games."
|
return true, "You opt-out from snowball games."
|
||||||
|
|
||||||
elseif param == "opt-in" then
|
elseif param == "opt-in" then
|
||||||
local res = set_player_participation(player_name, true)
|
set_player_participation(player_name, true)
|
||||||
return true, "You opt-in into snowball games."
|
return true, "You opt-in into snowball games."
|
||||||
|
|
||||||
|
elseif param == "leave" then
|
||||||
|
local game = yl_snowball.games_by_player[player_name]
|
||||||
|
if game then
|
||||||
|
game:leave(player_name)
|
||||||
|
return true, "You've left the current game."
|
||||||
|
end
|
||||||
|
return false, "You're not participating in any ongoing games."
|
||||||
-- elseif param == "hud" then
|
-- elseif param == "hud" then
|
||||||
-- return false, "Not implemented yet, sorry."
|
-- return false, "Not implemented yet, sorry."
|
||||||
end
|
end
|
||||||
|
42
game.lua
42
game.lua
@ -44,7 +44,7 @@ core.register_on_leaveplayer(
|
|||||||
if player_name ~= "" then
|
if player_name ~= "" then
|
||||||
local game = games_by_player[player_name]
|
local game = games_by_player[player_name]
|
||||||
if game then
|
if game then
|
||||||
game:on_leaveplayer(player_name)
|
game:leave(player_name)
|
||||||
end
|
end
|
||||||
games_by_player[player_name] = nil
|
games_by_player[player_name] = nil
|
||||||
end
|
end
|
||||||
@ -165,13 +165,24 @@ end
|
|||||||
|
|
||||||
|
|
||||||
function Game:add_player(player_name, game_player)
|
function Game:add_player(player_name, game_player)
|
||||||
if not game_player then
|
if self.players[player_name] then
|
||||||
game_player = GamePlayer(player_name)
|
if game_player and game_player.active then
|
||||||
|
self.players[player_name] = game_player
|
||||||
|
games_by_player[player_name] = self
|
||||||
|
end
|
||||||
|
-- Do nothing here: player merged their old scores from the
|
||||||
|
-- game there weren't active in
|
||||||
|
else
|
||||||
|
if (not game_player) or (not game_player.active) then
|
||||||
|
game_player = GamePlayer(player_name)
|
||||||
|
end
|
||||||
|
self.players[player_name] = game_player
|
||||||
|
games_by_player[player_name] = self
|
||||||
|
|
||||||
|
-- this is a new player, increase player count
|
||||||
|
self.player_num = self.player_num + 1
|
||||||
end
|
end
|
||||||
self.players[player_name] = game_player
|
end
|
||||||
games_by_player[player_name] = self
|
|
||||||
self.player_num = self.player_num + 1
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function Game:get_player(player_name)
|
function Game:get_player(player_name)
|
||||||
@ -179,9 +190,9 @@ function Game:get_player(player_name)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function Game:on_leaveplayer(player_name)
|
function Game:leave(player_name)
|
||||||
game_hud:set_enabled(core.get_player_by_name(player_name), false)
|
game_hud:set_enabled(core.get_player_by_name(player_name), false)
|
||||||
-- TODO set active = false
|
self.players[player_name].active = false
|
||||||
games_by_player[player_name] = nil
|
games_by_player[player_name] = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -226,17 +237,15 @@ function Game:stop()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if self.player_num > 1 then
|
if self.player_num > 1 then
|
||||||
for p_name, player in pairs(self.players) do
|
for player_name, player in pairs(self.players) do
|
||||||
if get_player_participation(p_name) then
|
if games_by_player[player_name] then
|
||||||
core.chat_send_player(p_name, table.concat(lines, "\n"))
|
core.chat_send_player(player_name, table.concat(lines, "\n"))
|
||||||
|
player:quit()
|
||||||
|
games_by_player[player_name] = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
for player_name, player in pairs(self.players) do
|
|
||||||
player:quit()
|
|
||||||
games_by_player[player_name] = nil
|
|
||||||
end
|
|
||||||
active_games[self] = nil
|
active_games[self] = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -276,6 +285,7 @@ function snowgame.register_shot(shooter_name)
|
|||||||
-- started shooting first time, started a game
|
-- started shooting first time, started a game
|
||||||
s_game = Game()
|
s_game = Game()
|
||||||
s_game:add_player(shooter_name)
|
s_game:add_player(shooter_name)
|
||||||
|
games_by_player[shooter_name] = s_game
|
||||||
end
|
end
|
||||||
s_game:register_shot(shooter_name)
|
s_game:register_shot(shooter_name)
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user