/*
* CSB Random Fun Events
* Copyright (C) 2026 counter-strike-boost.com
*
* Every round there is a chance for a random fun event to fire. Each event is a
* small apply/revert pair applied to every player and cleanly reverted when the
* round ends: low gravity, giant players (model scale), hyper speed, all-knife
* combat, or a rocket-slap party that launches everyone into the air. The event
* is announced in chat and re-applied to anyone who spawns while it is active.
*
* 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
#include
new const PLUGIN[] = "CSB Random Fun Events"
new const VERSION[] = "1.0.0"
new const AUTHOR[] = "counter-strike-boost.com"
enum (+= 1)
{
EV_NONE = 0,
EV_LOWGRAV,
EV_GIANTS,
EV_SPEED,
EV_KNIVES,
EV_ROCKET
}
#define EV_COUNT 5
new const g_szEventName[][] =
{
"",
"LOW GRAVITY",
"GIANTS",
"HYPER SPEED",
"KNIVES ONLY",
"ROCKET SLAP PARTY"
}
new g_pEnabled, g_pChance
new g_iEvent
new g_iHudSync
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
g_pEnabled = register_cvar("csb_events_enabled", "1")
g_pChance = register_cvar("csb_events_chance", "33")
register_logevent("eventRoundStart", 2, "1=Round_Start")
register_logevent("eventRoundEnd", 2, "1=Round_End")
register_event("ResetHUD", "eventSpawn", "b")
g_iHudSync = CreateHudSyncObj()
}
public eventRoundStart()
{
if (g_iEvent != EV_NONE)
endEvent()
if (!get_pcvar_num(g_pEnabled))
return
if (random_num(1, 100) > get_pcvar_num(g_pChance))
return
g_iEvent = random_num(1, EV_COUNT)
client_print(0, print_chat, "[CSB] Random event: %s!", g_szEventName[g_iEvent])
set_hudmessage(255, 160, 0, -1.0, 0.20, 0, 0.0, 5.0, 0.2, 0.5, -1)
ShowSyncHudMsg(0, g_iHudSync, "EVENT: %s", g_szEventName[g_iEvent])
new players[32], num
get_players(players, num, "a")
for (new i = 0; i < num; i++)
applyToPlayer(players[i])
if (g_iEvent == EV_ROCKET)
set_task(2.5, "taskRocket", 4455, _, _, "b")
}
public eventSpawn(id)
{
if (g_iEvent != EV_NONE && is_user_alive(id))
applyToPlayer(id)
}
applyToPlayer(id)
{
if (!is_user_alive(id))
return
switch (g_iEvent)
{
case EV_LOWGRAV: set_user_gravity(id, 0.35)
case EV_GIANTS:
{
set_pev(id, pev_scale, 1.6)
set_user_health(id, 150)
}
case EV_SPEED: set_user_maxspeed(id, 500.0)
case EV_KNIVES:
{
strip_user_weapons(id)
give_item(id, "weapon_knife")
}
}
}
revertPlayer(id)
{
if (!is_user_connected(id))
return
set_user_gravity(id, 1.0)
set_pev(id, pev_scale, 1.0)
if (is_user_alive(id))
set_user_maxspeed(id, 250.0)
}
public eventRoundEnd()
{
endEvent()
}
endEvent()
{
if (g_iEvent == EV_NONE)
return
new was = g_iEvent
g_iEvent = EV_NONE
for (new id = 1; id <= 32; id++)
revertPlayer(id)
if (was == EV_ROCKET)
remove_task(4455)
}
public taskRocket()
{
if (g_iEvent != EV_ROCKET)
{
remove_task(4455)
return
}
new players[32], num
get_players(players, num, "a")
for (new i = 0; i < num; i++)
{
new id = players[i]
static Float:fVel[3]
pev(id, pev_velocity, fVel)
fVel[2] += 450.0
set_pev(id, pev_velocity, fVel)
client_print(id, print_chat, "[CSB] Wheee!")
}
}
public plugin_end()
{
for (new id = 1; id <= 32; id++)
revertPlayer(id)
}