/*
* CSB LO3
* Copyright (C) 2026 counter-strike-boost.com
*
* amx_lo3 runs three sv_restartround restarts with a configurable delay and an
* on-screen countdown, then flashes LIVE! LIVE! LIVE! with a sound when the
* match goes live. amx_lo1 does the same with a single restart. The restart
* itself resets score and money via the engine.
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version. It is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See for details.
*/
#include
#include
new const PLUGIN[] = "CSB LO3"
new const VERSION[] = "1.0.0"
new const AUTHOR[] = "counter-strike-boost.com"
new g_pEnabled, g_pDelay
new g_iLeft, g_iTotal
new g_iSync
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
g_pEnabled = register_cvar("csb_lo3_enabled", "1")
g_pDelay = register_cvar("csb_lo3_delay", "3.0")
register_concmd("amx_lo3", "cmdLo3", ADMIN_BAN, "- 3 restarts then go LIVE")
register_concmd("amx_lo1", "cmdLo1", ADMIN_BAN, "- 1 restart then go LIVE")
g_iSync = CreateHudSyncObj()
}
public cmdLo3(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
beginLive(id, 3)
return PLUGIN_HANDLED
}
public cmdLo1(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
beginLive(id, 1)
return PLUGIN_HANDLED
}
beginLive(id, count)
{
if (!get_pcvar_num(g_pEnabled))
{
console_print(id, "[CSB LO3] Plugin is disabled.")
return
}
if (g_iLeft > 0)
{
console_print(id, "[CSB LO3] A restart sequence is already running.")
return
}
new name[32]
if (id)
get_user_name(id, name, charsmax(name))
else
copy(name, charsmax(name), "Console")
client_print(0, print_chat, "[CSB LO3] %s started the LIVE sequence (%d restart(s)).", name, count)
g_iTotal = count
g_iLeft = count
doRestart()
}
doRestart()
{
if (g_iLeft <= 0)
{
goLive()
return
}
new done = g_iTotal - g_iLeft + 1
/* classic knife-round style restart; resets score and money */
server_cmd("sv_restartround 1")
set_hudmessage(255, 160, 0, -1.0, 0.35, 0, 0.0, 3.0, 0.0, 0.0, -1)
ShowSyncHudMsg(0, g_iSync, "RESTART %d / %d", done, g_iTotal)
client_print(0, print_chat, "[CSB LO3] Restart %d of %d...", done, g_iTotal)
g_iLeft--
new Float:delay = get_pcvar_float(g_pDelay)
if (delay < 1.0)
delay = 1.0
set_task(delay, "taskNext")
}
public taskNext()
{
doRestart()
}
goLive()
{
g_iLeft = 0
g_iTotal = 0
set_hudmessage(0, 255, 0, -1.0, 0.30, 2, 0.5, 4.0, 0.1, 0.1, -1)
ShowSyncHudMsg(0, g_iSync, "LIVE! LIVE! LIVE!")
client_print(0, print_chat, "[CSB LO3] ^x04LIVE LIVE LIVE^x01 - good luck, have fun!")
/* audible go signal */
client_cmd(0, "spk fvox/beep")
}