Files
SMScripts/scripting/purechaos_extended.sp
2025-04-15 22:27:20 -04:00

695 lines
29 KiB
SourcePawn

/*************************************************
** PURE CHAOS EXTENDED **
** **
** THE CHAOS HAS JUST GOTTEN AN ORDER OF **
** MAGNITUDE MORE INSANE. USE THIS PLUGIN **
** AT YOUR OWN RISK. I WILL BE RESPONSIBLE **
** FOR ANY TRUE CHAOS THAT HAPPENS WITHIN YOUR **
** SERVER, BUT I WILL NOT BE RESPONSIBLE FOR **
** THE TIMES WHEN EVERYTHING GOES EXTREMELY WAY **
** OUT OF CONTROL. IF YOUR SERVER BREAKS, I AM **
** NOT GOING TO TAKE RESPONSIBILITY. YOU HAVE **
** BEEN WARNED. -- Dovahkiin-Warrior **
*** ***
**** WARNING ****
**** THIS PLUGIN REQUIRES THE FOLLOWING OTHER ****
**** PLUGINS, PLEASE MAKE SURE THEY EXIST!!!! ****
**** ****
**** GODMODE ****
**** BE THE SENTRYBUSTER ****
**** BE THE ROBOT ****
**** TF2ITEMS GIVE WEAPON ****
**** ROLL THE DICE V2 ****
**** BE THE DEFLECTOR ****
**** BE THE HORSEMANN ****
**** BE THE SKELETON KING ****
**** BUILDING RESIZES ****
**** NECRO-MASHED ****
**** RESIZE PLAYERS ****
**** SET PLAYER SPEED ****
**** EVIL ADMIN: ROCKET ****
**** SOUNDS ****
**** TF2 SET CLASS ****
**** TF2 FULL INFINITE AMMO ****
**** TF2 RATE OF FIRE ****
**** TF2 ATTRIBUTES ****
**** TF2 THRILLER DANCE ****
**** TRAIN RAIN ****
**** ****
**** ****
**** AND THE TF2ITEMS EXTENSION ****
**** ****
**************************************************
*************************************************/
//Simple script setup
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#include <regex>
#define PLGVER "3.1.0"
#undef REQUIRE_PLUGIN
#undef REQUIRE_EXTENSIONS
#include <cstrike>
#define REQUIRE_EXTENSIONS
#define TEAMSWITCH_ARRAY_SIZE 64
#pragma newdecls required
// Team definitions
#define TEAM_1 2
#define TEAM_2 3
#define TEAM_SPEC 1
//Initiate booleans
bool cstrikeExtAvail = false;
bool DeathIsHooked = false;
bool PrettifyChat = true;
bool Chaos = false;
ConVar g_Prettify;
char teamName1[5];
char teamName2[5];
//Ints
int chaosIndex = 0;
int shuffled = 0;
//Give plugin info
public Plugin myinfo ={
name = "Pure Chaos [Extended]",
author = "ProfessorFartsalot",
description = "Create inhuman amounts of absolute pure and true chaos..",
version = PLGVER,
url = "https://forums.firehostredux.com"
};
//Enumerate Team switch module listener
enum SwitchModuleEvent{
SwitchModuleEvent_Now = 0
};
//Initiate the core, register required commands & Precache and Allocate files
public void OnPluginStart(){
ServerCommand("sm plugins unload chaos/instantrespawn; sm plugins unload chaos/train_rain"),
PrintToServer("[Pure Chaos] *******WARNING: PLEASE MAKE SURE YOU HAVE ALL THE PLUGINS REQUIRED TO RUN THIS PLUGIN, OTHERWISE THINGS WILL NOT WORK AS INTENDED. YOU HAVE BEEN WARNED."),
RegAdminCmd("sm_chaos", Command_LegacyChaos, ADMFLAG_ROOT, "Unleash Pure Chaos");
RegAdminCmd("sm_truechaos", Command_TrueChaos, ADMFLAG_ROOT, "Unleash Pure Chaos");
RegAdminCmd("sm_666", Command_DeleteThis, ADMFLAG_ROOT, "DELETE THIS");
RegAdminCmd("sm_randomizeall", Command_RandomizeAll, ADMFLAG_ROOT, "Randomize everyone to a single class");
g_Prettify = CreateConVar("sm_chaos_prettify", "1", " Prettify chat while chaos is active. 0/1 - On/off");
HookEvent("player_team", Event_PlayerTeam, EventHookMode_Pre);
HookEvent("server_cvar", Event_Cvar, EventHookMode_Pre);
PrecacheSound("chaos/warn.mp3", true),
AddFileToDownloadsTable("sound/chaos/warn.mp3"),
PrecacheSound("chaos/theme.mp3", true),
AddFileToDownloadsTable("sound/chaos/theme.mp3"),
PrecacheSound("chaos/bgm/canttouchthis.mp3", true),
AddFileToDownloadsTable("sound/chaos/bgm/canttouchthis.mp3"),
PrecacheSound("chaos/bgm/hampsterdance.mp3", true),
AddFileToDownloadsTable("sound/chaos/bgm/hampsterdance.mp3"),
PrecacheSound("chaos/bgm/finaldest.mp3", true),
AddFileToDownloadsTable("sound/chaos/bgm/finaldest.mp3"),
PrecacheSound("chaos/bgm/skeletons.mp3", true),
AddFileToDownloadsTable("sound/chaos/bgm/skeletons.mp3"),
PrecacheSound("chaos/bgm/somebody.mp3", true),
AddFileToDownloadsTable("sound/chaos/bgm/somebody.mp3"),
PrecacheSound("chaos/bgm/intro.mp3", true),
AddFileToDownloadsTable("sound/chaos/bgm/intro.mp3");
PrecacheSound("trainsawlaser/extra/sound1.wav", true),
AddFileToDownloadsTable("sound/trainsawlaser/extra/sound1.wav"),
PrecacheSound("trainsawlaser/extra/sound2.wav", true),
AddFileToDownloadsTable("sound/trainsawlaser/extra/sound2.wav");
}
//Mute Player Team Changes if allowed
public Action Event_PlayerTeam(Event event, const char[] name, bool dontBroadcast){
if(g_Prettify.BoolValue){
if(!event.GetBool("silent")){
event.BroadcastDisabled = true;
}
}
return Plugin_Continue;
}
//Mute CVar changes if allowed
public Action Event_Cvar(Event event, const char[] name, bool dontBroadcast){
if(g_Prettify.BoolValue){
event.BroadcastDisabled = true;
}
return Plugin_Continue;
}
//Get the current Team names and print team list to Server console
public void OnMapStart(){
GetTeamName(2, teamName1, sizeof(teamName1));
GetTeamName(3, teamName2, sizeof(teamName2));
PrintToChatAll("\x079A769A [True Chaos] Team Names: %s %s - Using CStrike: %s - Muting sv_tags & sv_gravity to purify chat: %s", teamName1, teamName2, (cstrikeExtAvail ? "yes" : "no" ), (PrettifyChat ? "yes" : "no")),
PrintToServer("[True Chaos] Team Names: %s %s - Using CStrike: %s - Muting sv_tags & sv_gravity to purify chat: %s", teamName1, teamName2, (cstrikeExtAvail ? "yes" : "no" ), (PrettifyChat ? "yes" : "no"));
}
//Execute switch command on player after they die
public Action playerDeath(Event Spawn_Event, const char[] Spawn_Name, bool Spawn_Broadcast){
if(!Chaos){
PrintToServer("[True Chaos] Chaos is not active."); //If this event is properly unhooked, we should never get here.
}
else{
bool toSpec = false;
//int client = GetClientOfUserId(GetEventInt(event, "userid"));
int client = GetClientOfUserId(Spawn_Event.GetInt("userid"));
int cTeam = GetClientTeam(client);
int toTeam = (toSpec ? TEAM_SPEC : TEAM_1 + TEAM_2 - cTeam);
if(cstrikeExtAvail && !toSpec){
CS_SwitchTeam(client, toTeam);
}
else{
ChangeClientTeam(client, toTeam);
PrintToChatAll("\x0700FF00 [True Chaos] %N has been switched by death.", client);
}
}
// new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
// new weapon = GetClientWeapon(attacker, "weapon", -1);
// PrintToChatAll("\x07888888 [True Chaos] %N was killed by %N", client, attacker); //Show that player was killed by attacker
}
//Randomize everyone to the same class, scramble classes
public Action Command_RandomizeAll(int client, int args){
int ClassVal, NewClassVal = 0;
while (ClassVal == NewClassVal){
ClassVal = GetRandomInt (1, 18);
}
NewClassVal = ClassVal;
switch(NewClassVal){
case 1:{
ServerCommand("sm_setclass @all scout");
}
case 2:{
ServerCommand("sm_setclass @all soldier");
}
case 3:{
ServerCommand("sm_setclass @all pyro");
}
case 4:{
ServerCommand("sm_setclass @all demo");
}
case 5:{
ServerCommand("sm_setclass @all heavy");
}
case 6:{
ServerCommand("sm_setclass @all engineer");
}
case 7:{
ServerCommand("sm_setclass @all medic");
}
case 8:{
ServerCommand("sm_setclass @all sniper");
}
case 9:{
ServerCommand("sm_setclass @all spy");
}
case 10:{
ServerCommand("sm_setclass @red scout"),
ServerCommand("sm_setclass @blue soldier");
}
case 11:{
ServerCommand("sm_setclass @red pyro"),
ServerCommand("sm_setclass @blue spy");
}
case 12:{
ServerCommand("sm_setclass @red demoman"),
ServerCommand("sm_setclass @blue engineer");
}
case 13:{
ServerCommand("sm_setclass @red heavy"),
ServerCommand("sm_setclass @blue medic");
}
case 14:{
ServerCommand("sm_setclass @red sniper"),
ServerCommand("sm_setclass @blue soldier");
}
case 15:{
ServerCommand("sm_setclass @red soldier"),
ServerCommand("sm_setclass @blue pyro");
}
case 16:{
ServerCommand("sm_setclass @red scout"),
ServerCommand("sm_setclass @red heavy");
}
case 17:{
ServerCommand("sm_setclass @red engineer"),
ServerCommand("sm_setclass @blue spy");
}
case 18:{
ServerCommand("sm_setclass @red pyro"),
ServerCommand("sm_setclass @blue scout");
}
}
}
/*******************************
* LEGACY CHAOS BEGINS HERE *
* *
* Fun fact, legacy chaos was *
* my first ever version of the *
* plugin. It executed cfgs by *
* using timers with a song in *
* the background playing. I've *
* decided to keep this as its *
* own little module because I *
* really just thought it's *
* kinda cute. And chaotic! :) *
*******************************/
//Execute chaos command and inform the server that true chaos is about to spawn
public Action Command_LegacyChaos(int client, int args)
{
PrintCenterTextAll("GET READY FOR PURE CHAOS....."),
PrintToChatAll("User %N has initiated two minutes of pure chaos... There will be many waves, prepare for absolute chaos and potential crashes!", client),
EmitSoundToAll("chaos/warn.mp3", client),
CreateTimer(3.0, Command_LegacyStart);
if (g_Prettify.BoolValue){
PrintToChatAll("\x07AA0000[Chaos Engine v2.1] \x07999999Limiting chat spam : \x07009900true");
}
if (!g_Prettify.BoolValue){
PrintToChatAll("\x07AA0000[Chaos Engine v2.1] \x07999999Limiting chat spam : \x07660000false");
}
}
//Execute when legacy initiated by command.
public Action Command_LegacyStart(Handle timer){
EmitSoundToAll("chaos/theme.mp3"),
CreateTimer(13.60, Command_Chaos1);
}
//Execute when true chaos requests initiation.
public Action Command_LegacyStartByHook(Handle timer){
PrintToChatAll("\x07AA0000 [True Chaos] Initiating Legacy Pure Chaos... It is likely that everyone is now in grave danger. I highly suggest you flee immediately while you have the chance before it's too late..."),
EmitSoundToAll("chaos/theme.mp3"),
CreateTimer(13.60, Command_Chaos1);
}
/************************************************************************
* This is the configuration timing of the original pure chaos, *
* feel free to edit if this is either lasting too long or doesn't *
* fit your needs. You may also change the path to the configurations *
* or you may change the events that occur when these timers fire. All *
* of the following timers may be modified to fit your needs, just be *
* very careful so as to not overdo things, as that is the job of True *
* Chaos' module which is listed farther down. This version will send *
* configuration execution requests to the server at a specified time, *
* and as such, the commands contained within these configuration files *
* will be executed when the server loads them individually. You should *
* not really NEED to edit these commands unless you TRULY wish to use *
* either more config files, or less config files. *
************************************************************************/
//Execute Configs in order.
public Action Command_Chaos1(Handle timer){
ServerCommand("exec sourcemod/chaos/1.cfg"),
CreateTimer(40.0, Command_Chaos2);
}
//Execute the Second Config
public Action Command_Chaos2(Handle timer){
ServerCommand("exec sourcemod/chaos/2.cfg"),
CreateTimer(25.40, Command_Chaos3);
}
//Execute the Third Config
public Action Command_Chaos3(Handle timer){
ServerCommand("exec sourcemod/chaos/3.cfg"),
CreateTimer(25.50, Command_Chaos4);
}
//Execute the Fourth Config
public Action Command_Chaos4(Handle timer){
ServerCommand("exec sourcemod/chaos/4.cfg"),
CreateTimer(25.50, Command_ChaosFinal);
}
//Execute the Final Config
public Action Command_ChaosFinal(Handle timer){
ServerCommand("exec sourcemod/chaos/5.cfg"),
PrintCenterTextAll("The chaos has settled.."),
EmitSoundToAll("player/taunt_sfx_bell_single.wav");
if (DeathIsHooked == true){
UnhookEvent("player_death", playerDeath), //Unhook Player Death
PrintToChatAll("\x07AA0000 [Pure Chaos] \x07AAAA00Unhooking Event: player_death"), //Notify that player death has been unhooked and thus teamswitch is off
DeathIsHooked = false;
}
}
//TRUE PURE CHAOS BEGINS HERE
public Action Command_TrueChaos(int client, int args){
PrintToChatAll("[True Chaos] Initiation began by user %N... There will be many waves, prepare for the end times!", client),
CreateTimer(1.0, Chaos_Operator, 0);
if (g_Prettify.BoolValue){
PrintToChatAll("\x07AA0000[Chaos Engine v2.1] \x07999999Limiting chat spam : \x07009900true");
}
else{
PrintToChatAll("\x07AA0000[Chaos Engine v2.1] \x07999999Limiting chat spam : \x07660000false");
}
}
//Screw this old system. Lets write an operator.
public Action Chaos_Operator(Handle timer, int operation){
switch(operation){
case 0:{
int chaosLvl = GetRandomInt(0, 5);
switch (chaosLvl){
case 0:{ //Difficulty 0. Lowest difficulty.
Chaos = true;
ServerCommand("sm plugins load chaos/instantrespawn; sm_buildingresizer_enabled 1; sm_building_minsize 0.8; sm_building_maxsize 1.4"),
EmitSoundToAll("chaos/bgm/canttouchthis.mp3"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07999999Ensuring all Hammers are sharpened, I's are crossed, and T's are dotted for \x0700CCCCLevel 0\x07999999..."),
CreateTimer(1.5, Chaos_TimedOperator, 0);
}
case 1:{ //Difficulty 1. Now we're talkin'!
Chaos = true;
ServerCommand("sm plugins load chaos/instantrespawn; sm_buildingresizer_enabled 1; sm_building_minsize 0.6; sm_building_maxsize 1.8"),
EmitSoundToAll("chaos/bgm/hampsterdance.mp3"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07999999Recruiting robot hampsters for \x0700AA00Level 1\x07999999..."),
CreateTimer(9.4, Chaos_TimedOperator, 10);
}
case 2:{ //Difficulty 2. Things are getting real.
Chaos = true;
ServerCommand("sm plugins load chaos/instantrespawn; sm_buildingresizer_enabled 1; sm_building_minsize 0.4; sm_building_maxsize 2.2"),
EmitSoundToAll("chaos/bgm/finaldest.mp3"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07999999Downloading more RAM for \x07AAAA00Level 2\x07999999..."),
CreateTimer(5.75, Chaos_TimedOperator, 20);
}
case 3:{
CreateTimer(0.05, Chaos_Operator, 0);
}
/* case 3:{ //Difficulty 3. Pure Chaos.
* Chaos = true;
* ServerCommand("sm plugins load chaos/instantrespawn; sm_buildingresizer_enabled 1; sm_building_minsize 0.2; sm_building_maxsize 2.6"),
* PrintToChatAll("\x07AA0000 [True Chaos] \x07999999Power of the Sorcerer, to great to be controlled! Now rises his greatest minions for \x07CC8000Level 3\x07999999..."),
* EmitSoundToAll("chaos/bgm/skeletons.mp3"),
* CreateTimer(13.0, Chaos_TimedOperator, 30);
}*/
case 4:{ //Difficulty 4. Madness.
Chaos = true;
ServerCommand("sm plugins load chaos/instantrespawn; sm_buildingresizer_enabled 1; sm_building_minsize 0.1; sm_building_maxsize 3.2"),
EmitSoundToAll("chaos/bgm/somebody.mp3"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07999999Asking Meme-chan out on a date for \x07CC0000Level 4\x07999999..."),
CreateTimer(18.50, Chaos_TimedOperator, 40);
}
case 5:{ //Difficulty 5. True Chaos.
Chaos = true;
PrintToServer("Got 5... PREPARE FOR THE END TIMES!!!"),
ServerCommand("sm plugins load chaos/instantrespawn; sm_buildingresizer_enabled 1; sm_building_minsize 0.0125; sm_building_maxsize 4.0"),
PrintToChatAll("\x07FF00FF [True Chaos] Very bad things are about to happen..."),
EmitSoundToAll("chaos/bgm/intro.mp3"),
CreateTimer(80.0, Chaos_TimedOperator, 50);
}
}
return Plugin_Stop;
}
}
return Plugin_Stop;
}
//Timed Operator, actually runs the chaos scripts.
public Action Chaos_TimedOperator(Handle timer, int operation){
switch (operation){
//Chaos lvl 0
case 0:{
Chaos = true;
HookEvent("player_death", playerDeath); //Begin hooking player_death for switch team functionality
DeathIsHooked = true;
PrintToChatAll("\x0700AAAA [True Chaos] Hooking event: player_death"); //Tell the chat we are hooking player death.
CreateTimer(1.5, Chaos_TimedOperator, 1);
}
case 1:{
ServerCommand("sm_god @all 1"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07707020<\x0700AAAA00\x07707020> \x07707020All players are now in God Mode. You can't touch this!"),
CreateTimer(3.5, Chaos_TimedOperator, 2);
}
case 2:{
ServerCommand("sm_slap @all 5"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07707020<\x0700AAAA00\x07707020> \x07707020Attempting to slap all players. Nope, still can't touch this!"),
CreateTimer(4.2, Chaos_TimedOperator, 3);
}
case 3:{
ServerCommand("sm_thriller @all 13"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07707020<\x0700AAAA00\x07707020> \x07707020Break it down!"),
CreateTimer(13.6, Chaos_TimedOperator, 4);
}
case 4:{
ServerCommand("sm_smash @all"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07707020<\x0700AAAA00\x07707020> \x07707020STOP! HAMMERTIME!!!"),
CreateTimer(1.0, Chaos_TimedOperator, 5);
}
case 5:{
ServerCommand("sm_bedeflector @all; sm_mortal @all"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07707020<\x0700AAAA00\x07707020> \x07707020Be the deflector, go with the flow!"),
CreateTimer(28.5, Chaos_TimedOperator, 6);
}
case 6:{
ServerCommand("sm_smash @all"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07707020<\x0700AAAA00\x07707020> \x07707020STOP! HAMMERTIME!!!"),
CreateTimer(3.0, Chaos_TimedOperator, 7);
}
case 7:{
ServerCommand("sm plugins unload chaos/instantrespawn; sm_slay @all; sm_buildingresizer_enabled 0"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07707020<\x0700AAAA00\x07707020> \x07707020STOP! Chaos is over!!!");
if (DeathIsHooked){
UnhookEvent("player_death", playerDeath), //Unhook Player Death
PrintToChatAll("\x07AA0000 [Pure Chaos] \x07AAAA00Unhooking Event: player_death"), //Notify that player death has been unhooked and thus teamswitch is off
DeathIsHooked = false;
}
Chaos = false;
return Plugin_Stop;
}
//Chaos lvl 1
case 10:{
PrintCenterTextAll("Current Song: The Hampsterdance"),
ServerCommand("sm_noclip @all; sm_givew @all 9205; sm plugins load chaos/train_rain"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07700070<\x0700AA0001\x07700070> \x07700070All players will receive noclip and Robin Walker's Rocket Launcher, Trains will rain from the sky"),
CreateTimer(9.4, Chaos_TimedOperator, 11);
}
case 11:{
PrintCenterTextAll("Current Song: The Hampsterdance"),
ServerCommand("sm_smite @all; sm_forcertd @all; sm_smash @all;sm_buddha @all; sm_forcertd @all"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07007700<\x0700AA0001\x07007700> \x07007700All players will receive random RTD, Buddha, then another random RTD"),
CreateTimer(14.6, Chaos_TimedOperator, 12);
}
case 12:{
ServerCommand("sm_slay @all"),
CreateTimer(0.25, Chaos_TimedOperator, 13);
}
case 13:{
PrintCenterTextAll("Current Song: The Hampsterdance"),
ServerCommand("sm_forcertd @all 2; sm_robot @all; sm_givew @all 9014"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07700070<\x0700AA0001\x07700070> \x07700070All players will receive lucky sandvich, robot, and a Valve Sniper Rifle"),
CreateTimer(15.80, Chaos_TimedOperator, 100);
CreateTimer(20.00, Chaos_TimedOperator, 14);
}
case 14:{
ServerCommand("sm_givew @blue 21; sm_fia @blue 1; sm_rof @blue 20; sm_givew @red 2228; sm_forcertd @red 13"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07700000<\x0700AA0001\x07700000> \x07700000LET'S PLAY DODGEBALL WITH SOME NUKES!!!"),
CreateTimer(29.0, Chaos_TimedOperator, 15);
}
case 15:{
ServerCommand("sm_slay @all; sm_rof @all 1"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07007000<\x0700AA0001\x07007000> \x07007000Shuffling classes....."),
CreateTimer(0.20, Chaos_TimedOperator, 102);
CreateTimer(16.20, Chaos_TimedOperator, 100);
CreateTimer(17.20, Chaos_TimedOperator, 16);
}
case 16:{
ServerCommand("sm_resizehands @all -2; sv_gravity 100"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07007070<\x0700AA0001\x07007070> \x07007070All players will have -2 hand size, gravity will be 100"),
CreateTimer(8.0, Chaos_TimedOperator, 17);
}
case 17:{
ServerCommand("sv_gravity 800; sm_thriller @all 8"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07707000<\x0700AA0001\x07707000> \x07707000Dance, fools!"),
CreateTimer(8.0, Chaos_TimedOperator, 18);
}
case 18:{
ServerCommand("sm_bedeflector @all"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07707020<\x0700AA0001\x07707020> \x07707020All players will become deflector"),
CreateTimer(12.0, Chaos_TimedOperator, 100);
CreateTimer(12.25, Chaos_TimedOperator, 19);
}
case 19:{
ServerCommand("sm_thriller @all 35; sm_resizehands @all 1"),
ServerCommand("sm plugins unload chaos/instantrespawn; sm_fia @all 0; sm_buildingresizer_enabled 0; sm plugins unload chaos/train_rain"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07999999<\x0700AA0001\x07999999> True Chaos at level *1* has ended");
if (DeathIsHooked == true)
{
UnhookEvent("player_death", playerDeath), //Unhook Player Death
PrintToChatAll("\x07AA0000 [Pure Chaos] \x07AAAA00Unhooking Event: player_death"), //Notify that player death has been unhooked and thus teamswitch is off
DeathIsHooked = false;
}
Chaos = false;
}
//Chaos lvl 2
case 20:{
PrintCenterTextAll("Current Song: Final Destination - Super Smash Bros. Brawl"),
ServerCommand("sm_bedeflector @blue; sm_behhh @red"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07E48C12<\x07AAAA0002\x07E48C12> \x07E48C12Blue team will become deflector, red team will become HHH"),
CreateTimer(10.0, Chaos_TimedOperator, 21);
}
case 21:{
ServerCommand("sm_setspeed @all 520; sm_behhh @blue; sm_bedeflector @red"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07E48C12<\x07AAAA0002\x07E48C12> Blue team will become HHH, red team will become Deflector"),
CreateTimer(15.0, Chaos_TimedOperator, 22);
}
case 22:{
ServerCommand("sm_givew @all 9205"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07700070<\x07AAAA0002\x07700070> All players will receive Robin Walker's Rocket Launcher"),
CreateTimer(10.0, Chaos_TimedOperator, 23);
}
case 23:
{
ServerCommand("sm_slay @all; sm_resizetorso @all -1000; sm_noclip @all"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07008000<\x07AAAA0002\x07008000> All players will have -1000 torso size and noclip"),
CreateTimer(12.0, Chaos_TimedOperator, 100);
CreateTimer(12.75, Chaos_TimedOperator, 24);
}
case 24:{
ServerCommand("sm_resizetorso @all 10; sv_gravity -800; sm_fia @all 1; sm_givew @all 2228; sm_forcertd @all 13"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07B41262<\x07AAAA0002\x07B41262> All players will have 10 torso size, gravity will be -800, full infinite ammo will be activated, and all players will receive a nuke launcher, as well as homing projectiles"),
CreateTimer(22.0, Chaos_TimedOperator, 25);
}
case 25:{
ServerCommand("sv_gravity 2000; sm_givew @all 2228; sm_rof @all 20; mp_friendlyfire 1"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07B41262<\x07AAAA0002\x07B41262> Gravity will be 2000, all players will receive a nuke launcher, rate of fire will be 20x, and friendly fire will be activated"),
CreateTimer(11.0, Chaos_TimedOperator, 26);
}
case 26:{
ServerCommand("sv_gravity -2000; sm_rof @all 1; sm_fia @all 0; sm_givew @all 9205; mp_friendlyfire 0; sm_resizetorso @all -1; sm_setspeed @all 5000"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07AA0090<\x07AAAA0002\x07AA0090> Gravity will be -2000, all players will receive Robin Walker's Rocket Launcher, all players will have -1 torso size"),
CreateTimer(35.0, Chaos_TimedOperator, 27);
}
case 27:{
ServerCommand("sv_gravity 800; sm_slay @all; sm plugins unload chaos/instantrespawn; sm_resizetorso @all 1; sm plugins reload bedeflector; sm_resetspeed @all; sm_buildingresizer_enabled 0"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07999999<\x07AAAA0002\x07999999> True chaos at level *2* has ended");
if (DeathIsHooked == true)
{
UnhookEvent("player_death", playerDeath), //Unhook Player Death
PrintToChatAll("\x07AA0000 [Pure Chaos] \x07AAAA00Unhooking Event: player_death"), //Notify that player death has been unhooked and thus teamswitch is off
DeathIsHooked = false;
}
Chaos = false;
}
//Chaos lvl 3
case 30:{
Chaos = true,
HookEvent("player_death", playerDeath), //Begin hooking player_death for switch team functionality
DeathIsHooked = true, //Tell the plugin Death has been hooked
ServerCommand("sm_beskeleton @all 1"),
PrintToChatAll("\x0700AAAA [True Chaos] \x07999999<\x07CC800004\x07999999> Spooky scary skeletons send shivers down your spine... Seal your doom tonight!"),
CreateTimer(18.5, Chaos_TimedOperator, 31);
}
case 31:{
ServerCommand("sm_beskeleton @all 1"),
PrintToChatAll("\x0700AAAA [True Chaos] \x07999999<\x07CC800004\x07999999> Spooky scary spooky scary..."),
CreateTimer(18.5, Chaos_TimedOperator, 32);
}
case 32:{
ServerCommand("sm_beskeleton @all 1"),
PrintToChatAll("\x0700AAAA [True Chaos] \x07999999<\x07CC800004\x07999999> You'll shake and shudder in surprise, when you hear these zombies shriek!"),
CreateTimer(12.5, Chaos_TimedOperator, 104);
CreateTimer(20.0, Chaos_TimedOperator, 104);
CreateTimer(28.0, Chaos_TimedOperator, 104);
CreateTimer(32.0, Chaos_TimedOperator, 104);
CreateTimer(34.0, Chaos_TimedOperator, 104);
CreateTimer(36.0, Chaos_TimedOperator, 104);
CreateTimer(52.0, Chaos_TimedOperator, 104);
CreateTimer(58.0, Chaos_TimedOperator, 104);
CreateTimer(64.0, Chaos_TimedOperator, 33);
}
case 33:{
PrintToChatAll("\x0700AAAA [True Chaos] \x07999999<\x07CC800004\x07999999> True chaos at level *3* has ended"),
ServerCommand("sm_slay @all");
if (DeathIsHooked == true)
{
UnhookEvent("player_death", playerDeath), //Unhook Player Death
PrintToChatAll("\x07AA0000 [Pure Chaos] \x07AAAA00Unhooking Event: player_death"), //Notify that player death has been unhooked and thus teamswitch is off
DeathIsHooked = false;
}
Chaos = false;
}
//Chaos lvl 4
case 40:{
Chaos = true,
HookEvent("player_death", playerDeath), //Begin hooking player_death for switch team functionality
DeathIsHooked = true, //Tell the plugin Death has been hooked
PrintToChatAll("\x07AA0000 [True Chaos] \x07999999<\x07CC000004\x07999999> Meme-chan said yes OMG!!! UNLEASH DA CHAOSSSS!!!"),
ServerCommand("sm_givew @all 9018; sm plugins load chaos/train_rain"),
CreateTimer(40.0, Chaos_Operator, 0),
CreateTimer(47.0, Chaos_TimedOperator, 41);
}
case 41:{
ServerCommand("sm_givew @all 9014"),
CreateTimer(20.0, Chaos_TimedOperator, 42);
}
case 42:{
ServerCommand("sm_evilrocket @all"),
PrintToChatAll("\x07AA0000 [True Chaos] \x07999999<\x07CC000004\x07999999> TO SPAAAAAAAAAAAAAAAAAAAAAAACE!!!"),
CreateTimer(20.0, Chaos_TimedOperator, 43);
}
case 43:{
UnhookEvent("player_death", playerDeath),
ServerCommand("sm_forcertd @all 13; sm plugins unload chaos/train_rain"),
CreateTimer(60.0, Chaos_Operator, 0);
}
//Chaos lvl 5
case 50:{
HookEvent("player_death", playerDeath), //Begin hooking player_death for switch team functionality
DeathIsHooked = true, //Tell the plugin Death has been hooked
PrintToChatAll("\x0700AAAA [True Chaos] Hooking event: player_death"), //Tell the chat we are hooking player death.
CreateTimer(60.0, Chaos_Operator, 0),
CreateTimer(120.0, Chaos_Operator, 0),
CreateTimer(0.05, Command_LegacyStartByHook);
}
//Special functions
case 100:{
ServerCommand("sm_slay @all");
switch (chaosIndex){
case 1:{
PrintToChatAll("Got one via case 100.");
}
}
}
case 102:{
if (shuffled < 15){
ServerCommand("sm_randomizeall"),
CreateTimer(1.0, Chaos_TimedOperator, 102);
shuffled++;
}
else{
ServerCommand("sm_slay @all");
}
}
case 104:{
ServerCommand("sm_beskeleton @all 1");
}
}
return Plugin_Stop;
}
//Seriously, you should delete this, as well as the RegConsoleCmd line for sm_666 up at the beginning of the code.
public Action Command_DeleteThis(int client, int args){
Chaos = true;
PrintToChatAll("\x07880000 OOF, WHO SUMMONED SATAN?! ... hint ... it was %N!", client),
CreateTimer(6.6, Command_UnleashSatan);
}
//Unleashes pure hell.
public Action Command_UnleashSatan(Handle timer){
Chaos = true,
CreateTimer(0.0, Chaos_TimedOperator, 0),
CreateTimer(1.0, Chaos_TimedOperator, 10),
CreateTimer(2.0, Chaos_TimedOperator, 20),
CreateTimer(3.0, Chaos_TimedOperator, 30),
CreateTimer(4.0, Chaos_TimedOperator, 40),
CreateTimer(5.0, Chaos_TimedOperator, 50),
CreateTimer(166.6, Command_EndSatan),
ServerCommand("tf_bot_add 32");
}
public Action Command_EndSatan (Handle timer){
PrintToChatAll("\x07AA0000 [Pure Chaos] \x07660000Satan has left.... for now..."),
ServerCommand("tf_bot_kick all");
if (DeathIsHooked){
UnhookEvent("player_death", playerDeath), //Unhook Player Death
PrintToChatAll("\x07AA0000 [Pure Chaos] \x07AAAA00Unhooking Event: player_death"), //Notify that player death has been unhooked and thus teamswitch is off
DeathIsHooked = false;
}
Chaos = false;
}