8th time rewriting it... + Make audio manager be an array - one entry for each possible client. + Added global audio manager for setting everyone's music at once and ticking all audio managers that are set to tick. This does not apply to clients who are experiencing "an event". + Made audio managers check if their clients are valid - if not, stop the manager immediately. + Use g_indexBGM for setting global bgm indexes. + Automatically set and update music for each client that joins the server + Automatically set and update music for each client when the game mode changes + Made /song command immediately reflect the current playing song + Changed how instant stopping works, unnecessary but yknow, tests??? + Added a timer to delay music startup on plugin reload - Removed old timer system used for playing music to new clients in favor of event based system.
1214 lines
46 KiB
SourcePawn
1214 lines
46 KiB
SourcePawn
public char PLUGIN_VERSION[8] = "8.4.0";
|
|
void sudo(int task) {
|
|
AssLogger(LOGLVL_DEBUG, "Calling sudo with %i", task);
|
|
switch (task) {
|
|
//When the map is complete
|
|
case 0: {
|
|
CPrintToChatAll(core.tacobell ? "WOWIE YOU DID IT! The server will restart in 30 seconds, prepare to do it again! LULW" : "{darkviolet}[{forestgreen}CORE{darkviolet}] {white}YOU HAVE SUCCESSFULLY COMPLETED PROF'S ASS ! THE SERVER WILL RESTART IN 10 SECONDS.");
|
|
CreateTimer(10.0, TimedOperator, 100);
|
|
}
|
|
//Prepare yourself!
|
|
case 1: {
|
|
GlobalAudio.Reset();
|
|
core.tacobell = false;
|
|
ServerCommand("fb_startmoney 50000");
|
|
CPrintToChatAll("{darkviolet}[{yellow}INFO{darkviolet}] {red}PROFESSOR'S ASS {white}v0x22 (Core-v%s). Prepare yourself for the unpredictable... [{limegreen}by TTV/ProfessorFartsalot{white}]", PLUGIN_VERSION);
|
|
FastFire2("rain", "Alpha", "0", 0.0, false);
|
|
UpdateGamemode();
|
|
PrintToChatAll("%i", core.gamemode);
|
|
if (core.gamemode == 2) {
|
|
PrintToChatAll("UH OH");
|
|
}
|
|
}
|
|
//Wave init
|
|
case 2: {
|
|
UpdateGamemode();
|
|
core.curWave = GetCurWave();
|
|
PerformWaveSetup();
|
|
float hwn = GetRandomFloat(core.HWNMin, core.HWNMax);
|
|
CreateTimer(hwn, HWBosses);
|
|
GlobalAudio.setBGM(core.tacobell ? tacoBellBGMIndex[core.curWave] : DefaultsArray[core.curWave].defBGMIndex, true);
|
|
PrintToChatAll("WARNING, AUDIOMANAGER'S CHANGEBGM FUNCTION IS DEPRECATED IN FAVOR OF THE NEW CONFIGS. FIX THIS IMMEDIATELY.");
|
|
return;
|
|
}
|
|
//Force Tornado
|
|
case 3: {
|
|
if (core.isWave && WeatherManager.canTornado && !WeatherManager.hasTornado) {
|
|
CreateTimer(0.1, TimedOperator, 41);
|
|
PrintCenterTextAll("OH NOES... PREPARE YOUR ANUS!");
|
|
} else PrintToServer("Error spawning manual tornado... Perhaps we are not in a wave, tornadoes are banished, or a tornado has already spawned???");
|
|
return;
|
|
}
|
|
//Signal that previous boss should spawn.
|
|
case 4: {
|
|
core.waveFlags--;
|
|
}
|
|
//Signal that a boss should spawn
|
|
case 5: {
|
|
if (core.waveFlags < 0) core.waveFlags = 0;
|
|
switch (core.waveFlags) {
|
|
case 0: {
|
|
PrintToChatAll("Caught unhandled exception: core.waveFlags 0 but operator 5 was invoked.");
|
|
return;
|
|
}
|
|
case 1: {
|
|
FastFire2("FB.OnslaughterBase", "SetModelScale", "0.19", 0.0, false);
|
|
FastFire2("FB.BruteJusticeTrain", "TeleportToPathTrack", "tank_path_a_10", 0.0, false);
|
|
FastFire2("FB.BruteJustice", "Enable", "", 3.0, false);
|
|
FastFire2("FB.BruteJusticeTrain", "StartForward", "", 3.0, false);
|
|
FastFire2("FB.BruteJusticeParticles", "Start", "", 3.0, false);
|
|
CreateTimer(5.0, OnslaughterATK);
|
|
FastFire2("tank_boss", "AddOutput", "rendermode 10", 3.0, false);
|
|
FastFire2("tank_boss", "AddOutput", "rendermode 10", 7.0, false);
|
|
CreateTimer(10.0, BossHPTimer);
|
|
}
|
|
case 2: {
|
|
FastFire2("FB.Sephiroth", "Enable", "", 0.0, false);
|
|
FastFire2("SephMeteor", "SetParent", "FB.Sephiroth", 0.0, false);
|
|
FastFire2("SephTrain", "SetSpeedReal", "12", 0.0, false);
|
|
FastFire2("SephTrain", "TeleportToPathTrack", "Seph01", 0.0, false);
|
|
FastFire2("SephTrain", "StartForward", "", 0.1, false);
|
|
FastFire2("SephTrain", "SetSpeedReal", "12", 20.5, false);
|
|
FastFire2("FB.SephParticles", "Start", "", 3.0, false);
|
|
FastFire2("tank_boss", "AddOutput", "rendermode 10", 3.0, false);
|
|
FastFire2("tank_boss", "AddOutput", "rendermode 10", 7.0, false);
|
|
FastFire2("FB.BruteJusticeDMGRelay", "Kill", "", 0.0, false);
|
|
switch (GetClientCount(true)) {
|
|
case 1: {
|
|
FastFire2("SephTrain", "SetSpeedReal", "40", 23.0, false);
|
|
FastFire2("tank_boss", "SetHealth", "409600", 1.0, false);
|
|
FastFire2("FB.SephDMGRelay", "SetHealth", "32768000", 1.0, false);
|
|
}
|
|
case 2: {
|
|
FastFire2("SephTrain", "SetSpeedReal", "35", 23.0, false);
|
|
FastFire2("tank_boss", "SetHealth", "614400", 1.0, false);
|
|
FastFire2("FB.SephDMGRelay", "SetHealth", "32768000", 1.0, false);
|
|
}
|
|
case 3: {
|
|
FastFire2("SephTrain", "SetSpeedReal", "35", 23.0, false);
|
|
FastFire2("tank_boss", "SetHealth", "614400", 1.0, false);
|
|
FastFire2("FB.SephDMGRelay", "SetHealth", "131072000", 1.0, false);
|
|
}
|
|
case 4: {
|
|
FastFire2("SephTrain", "SetSpeedReal", "30", 23.0, false);
|
|
FastFire2("tank_boss", "SetHealth", "819200", 1.0, false);
|
|
FastFire2("FB.SephDMGRelay", "SetHealth", "262144000", 1.0, false);
|
|
}
|
|
case 5, 6, 7, 8, 9, 10: {
|
|
FastFire2("SephTrain", "SetSpeedReal", "25", 23.0, false);
|
|
FastFire2("tank_boss", "SetHealth", "819200", 1.0, false);
|
|
FastFire2("FB.SephDMGRelay", "SetHealth", "655360000", 1.0, false);
|
|
}
|
|
}
|
|
CreateTimer(30.0, BossHPTimer);
|
|
}
|
|
}
|
|
}
|
|
//Signal that next boss should spawn
|
|
case 6: {
|
|
core.waveFlags++;
|
|
}
|
|
//Signal to fastforward boss spawn.
|
|
case 7: {
|
|
core.waveFlags = 2;
|
|
if (core.curWave == 8 && !core.tacobell) {
|
|
sudo(1001);
|
|
CreateTimer(0.0, TimedOperator, 8);
|
|
}
|
|
}
|
|
//When a tornado intersects a tank.
|
|
case 8: {
|
|
FastFire2("FB.FakeTankSpawner", "ForceSpawn", "", 0.1, false);
|
|
}
|
|
//Client was Sacrificed.
|
|
case 10: {
|
|
core.sacrificedByClient = true;
|
|
}
|
|
//Damage relay took damage
|
|
case 11: {
|
|
FastFire2("TankRelayDMG", "Enable", "", 0.0, false);
|
|
FastFire2("TankRelayDMG", "Disable", "", 0.5, false);
|
|
}
|
|
//dmg relay was killed
|
|
case 12: {
|
|
FastFire2("tank_boss", "SetHealth", "1", 0.0, false);
|
|
FastFire2("TankRelayDMG", "Enable", "", 0.1, false);
|
|
FastFire2("TankRelayDMG", "Enable", "", 0.5, false);
|
|
FastFire2("TankRelayDMG", "Enable", "", 1.0, false);
|
|
FastFire2("TankRelayDMG", "Disable", "", 60.0, false);
|
|
}
|
|
//Tank Destroyed (+1), includes disabling onslaughter.
|
|
case 13: {
|
|
switch (core.waveFlags) {
|
|
case 0: {
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {white}A tank has been destroyed. ({limegreen}+1 pt{white})");
|
|
core.sacPoints++;
|
|
}
|
|
case 1: {
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {red}ONSLAUGHTER {white}has been destroyed. ({limegreen}+25 pts{white})");
|
|
FastFire2("TankRelayDMG", "Enable", "", 1.0, false);
|
|
FastFire2("TankRelayDMG", "Disable", "", 60.0, false);
|
|
FastFire2("FB.BruteJustice", "Disable", "", 0.0, false);
|
|
FastFire2("FB.BruteJusticeTrain", "Stop", "", 0.0, false);
|
|
FastFire2("FB.BruteJusticeParticles", "Stop", "", 0.0, false);
|
|
FastFire2("FB.BruteJusticeDMGRelay", "Break", "", 0.0, false);
|
|
FastFire2("FB.BruteJusticeTrain", "TeleportToPathTrack", "tank_path_a_10", 0.5, false);
|
|
core.waveFlags = 0;
|
|
core.sacPoints += 25;
|
|
}
|
|
case 2: {
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {red}SEPHIROTH {white}has been destroyed. ({limegreen}+100 pts{white})");
|
|
FastFire2("TankRelayDMG", "Enable", "", 1.0, false);
|
|
FastFire2("TankRelayDMG", "Disable", "", 60.0, false);
|
|
FastFire2("FB.Sephiroth", "Disable", "", 0.0, false);
|
|
FastFire2("SephTrain", "TeleportToPathTrack", "Seph01", 0.0, false);
|
|
FastFire2("SephTrain", "Stop", "", 0.0, false);
|
|
core.canSephNuke = false;
|
|
core.sacPoints += 100;
|
|
core.waveFlags = 0;
|
|
WeatherManager.canTornado = false;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
//Bomb Reset (+5)
|
|
case 14: {
|
|
core.bombReset = true;
|
|
core.sacPoints += 5;
|
|
}
|
|
//Bomb Deployed
|
|
case 15: {
|
|
FastFire2("FB.PayloadWarning", "Disable", "", 0.0, false);
|
|
if (!core.isWave) return;
|
|
if (bombState[0].state == 69) {
|
|
bombState[7].explode(false);
|
|
bombState[0].stateMax = 64;
|
|
CreateTimer(5.0, TimedOperator, 99);
|
|
}
|
|
bombState[bombState[0].getCurBomb()].explode(true);
|
|
bombState[0].stateMax += 10;
|
|
if (bombState[0].state >= bombState[0].stateMax) return;
|
|
else bombState[0].state += 2;
|
|
return;
|
|
}
|
|
//Tank deployed its bomb
|
|
case 16: {
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {white}A tank has deployed its bomb! ({limegreen}+1 pt{white})");
|
|
}
|
|
//Shark Enable & notify bomb push began
|
|
case 20: {
|
|
bombState[0].isMoving = true;
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {forestgreen}Bomb push in progress.");
|
|
FastFire2("FB.PayloadWarning", "Enable", "", 0.0, false);
|
|
CreateTimer(3.0, SharkTimer);
|
|
}
|
|
//Shark Disable
|
|
case 21: {
|
|
bombState[0].isMoving = false;
|
|
core.canSENTShark = false;
|
|
}
|
|
//HINDENBOOM ACTIVATION
|
|
case 28: {
|
|
EmitSoundToAll(SFXArray[5].realPath);
|
|
FastFire2("HindenTrain", "StartForward", "", 0.0, false);
|
|
FastFire2("DeliveryBurg", "Lock", "", 0.0, false);
|
|
FastFire2("Boom", "Enable", "", 0.0, false);
|
|
FastFire2("Bombs.TheHindenburg", "Enable", "", 0.0, false);
|
|
FastFire2("Boom", "Disable", "", 1.0, false);
|
|
}
|
|
//HINDENBOOM!!!
|
|
case 29: {
|
|
CPrintToChatAll("{darkviolet}[{red}CORE{darkviolet}] {white}OH GOD, THEY'RE {red}CRASHING THE HINDENBURG{white}!!!");
|
|
EmitSoundToAll(SFXArray[36].realPath);
|
|
CreateTimer(4.0, TimedOperator, 21);
|
|
CreateTimer(7.0, TimedOperator, 37);
|
|
FastFire2("LargeExplosion", "Explode", "", 7.0, false);
|
|
FastFire2("LargeExploShake", "StartShake", "", 7.0, false);
|
|
FastFire2("NukeAll", "Enable", "", 7.0, false);
|
|
FastFire2("FB.Fade", "Fade", "", 7.0, false);
|
|
FastFire2("NukeAll", "Disable", "", 9.0, false);
|
|
FastFire2("Bombs.TheHindenburg", "Disable", "", 7.0, false);
|
|
FastFire2("HindenTrain", "TeleportToPathTrack", "Hinden01", 7.0, false);
|
|
FastFire2("HindenTrain", "Stop", "", 7.0, false);
|
|
CreateTimer(8.0, TimedOperator, 99);
|
|
bombState[0].state = 4;
|
|
bombState[0].stateMax = 8;
|
|
}
|
|
//Bath Salts spend
|
|
case 30: {
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {white}INSTANT BATH SALT DETONATION! BOTS ARE FROZEN FOR 10 SECONDS! ({red}-10 pts{white})");
|
|
ServerCommand("sm_freeze @blue 10");
|
|
core.sacPoints -= 10;
|
|
bombState[3].explode(false);
|
|
}
|
|
//Goob/Kirb spend
|
|
case 31: {
|
|
int i = GetRandomInt(1, 2);
|
|
if (i == 1) CreateTimer(1.5, TimedOperator, 21);
|
|
FastFire2(i == 1 ? "FB.GiantGoobTemplate" : "FB.BlueKirbTemplate", "ForceSpawn", "", 0.0, false);
|
|
CPrintToChatAll(i == 1 ? "{darkviolet}[{forestgreen}CORE{darkviolet}] {white}GOOBBUE COMING IN FROM ORBIT! ({red}-20 pts{white})" : "{darkviolet}[{forestgreen}CORE{darkviolet}] {white}BLUE KIRBY FALLING OUT OF THE SKY! ({red}-20 pts{white})");
|
|
CustomSoundEmitter(i == 1 ? SFXArray[51].realPath : SFXArray[21].realPath, 65, false, 0, 1.0, 100);
|
|
core.sacPoints -= 20;
|
|
}
|
|
//35K ubup cash spend
|
|
case 32: {
|
|
if (!core.doFailsafe) {
|
|
core.doFailsafe = true;
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {white}Wave fail-safe activated! ({red}-30 pts{white})");
|
|
core.sacPoints -= 30;
|
|
} else return;
|
|
}
|
|
//Explosive paradise spend
|
|
case 33: {
|
|
CustomSoundEmitter(SFXArray[10].realPath, 65, false, 0, 1.0, 100);
|
|
FastFire2("FB.FadeBLCK", "Fade", "", 0.0, false);
|
|
ServerCommand("sm_evilrocket @blue");
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {white}We're spending most our lives living in an EXPLOSIVE PARADISE! Robots will be launched into orbit, too! ({red}-40 pts{white})");
|
|
//Add this to explosion array?
|
|
FastFire2("NukeAll", "Enable", "", 11.50, false);
|
|
FastFire2("HUGEExplosion", "Explode", "", 11.50, false);
|
|
FastFire2("FB.Fade", "Fade", "", 11.50, false);
|
|
FastFire2("FB.ShakeBOOM", "StartShake", "", 11.50, false);
|
|
FastFire2("NukeAll", "Disable", "", 12.30, false);
|
|
core.sacPoints -= 40;
|
|
}
|
|
//Banish Tornadoes
|
|
case 34: {
|
|
if (WeatherManager.canTornado && !WeatherManager.hasTornado) core.sacPoints -= 50;
|
|
CPrintToChatAll(WeatherManager.canTornado && !WeatherManager.hasTornado ? "{darkviolet}[{forestgreen}CORE{darkviolet}] {white}A PINK KIRBY HAS BANISHED TORNADOES FOR THIS WAVE! ({red}-50 pts{white})" : !WeatherManager.canTornado ? "{red}TTV/professorfartsalot {white}: Please do not, the tornado button. Thanks. ({red} -0 pts{white})" : "{red}TTV/professorfartsalot {white}: You fool. It is much too late for you. ({red} -0 pts{white})");
|
|
WeatherManager.canTornado = !WeatherManager.hasTornado ? false : true;
|
|
WeatherManager.Dissipate();
|
|
}
|
|
//Ass Gas spend
|
|
case 35: {
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {white}ANYTHING BUT THE ASS GAS!!!! ({red}-60 pts{white})");
|
|
core.sacPoints -= 60;
|
|
FastFire2("HurtAll", "AddOutput", "damagetype 524288", 0.0, false);
|
|
FastFire2("FB.ShakeBOOM", "StartShake", "", 0.1, false);
|
|
FastFire2("HurtAll", "AddOutput", "damage 400", 0.0, false);
|
|
FastFire2("HurtAll", "Enable", "", 0.1, false);
|
|
FastFire2("HurtAll", "Disable", "", 4.1, false); //Add a sound to this in the future. Maybe gas sound from gbombs? Maybe custom fart sounds? hmm....
|
|
FastFire2("FB.ShakeBOOM", "StopShake", "", 4.1, false);
|
|
}
|
|
//Nuclear fallout spend
|
|
case 36: {
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {white}INSTANT FAT MAN DETONATION! ({red}-70 pts{white})");
|
|
core.sacPoints -= 70;
|
|
bombState[7].explode(false);
|
|
}
|
|
//Meteor shower spend
|
|
case 37: {
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {white}COSMIC DEVASTATION IMMINENT. ({red}-80 pts{white})");
|
|
core.sacPoints -= 80;
|
|
core.canSENTMeteors = true;
|
|
CreateTimer(1.0, SENTMeteorTimer);
|
|
CreateTimer(30.0, TimedOperator, 12);
|
|
}
|
|
//300K UbUp Cash
|
|
case 38: {
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {white}150K UbUp Cash Granted to {red}RED{white}! ({red}-90 pts{white})");
|
|
core.sacPoints -= 90;
|
|
ServerCommand("sm_addcash @red 300000");
|
|
}
|
|
//Fartsy of the Seventh Taco Bell
|
|
case 39: {
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {white}NOW PRESENTING... PROFESSOR FARTSALOT OF THE SEVENTH TACO BELL! ({red}-100 points{white})");
|
|
core.sacPoints -= 100;
|
|
bombState[0].stateMax = 69;
|
|
bombState[0].state = 69;
|
|
FastFire2("Delivery", "Unlock", "", 0.0, false);
|
|
FastFire2("BombExplo*", "Disable", "", 0.0, false);
|
|
FastFire2("Bombs*", "Disable", "", 0.0, false);
|
|
FastFire2("Bombs.Professor", "Enable", "", 3.0, false);
|
|
}
|
|
//Found blue ball
|
|
case 40: {
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {forestgreen}What on earth IS that? It appears to be a... \x075050FFBLUE BALL{white}!");
|
|
CustomSoundEmitter(SFXArray[21].realPath, 65, false, 0, 1.0, 100);
|
|
FastFire2("FB.BlueKirbTemplate", "ForceSpawn", "", 4.0, false);
|
|
CreateTimer(4.0, TimedOperator, 21);
|
|
}
|
|
//Found burrito
|
|
case 41: {
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {forestgreen}Why would you even eat {red}The Forbidden Burrito{white}?");
|
|
CustomSoundEmitter("vo/sandwicheat09.mp3", 65, false, 0, 1.0, 100);
|
|
FastFire2("HurtAll", "AddOutput", "damagetype 8", 0.0, false);
|
|
FastFire2("HurtAll", "AddOutput", "damage 2000", 0.0, false);
|
|
FastFire2("HurtAll", "Enable", "", 4.0, false);
|
|
FastFire2("HurtAll", "Disable", "", 8.0, false);
|
|
}
|
|
//Found goobbue
|
|
case 42: {
|
|
isGoobbue = true;
|
|
CustomSoundEmitter(SFXArray[51].realPath, 65, false, 0, 1.0, 100);
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {forestgreen}ALL HAIL \x07FF00FFGOOBBUE{forestgreen}!");
|
|
CreateTimer(4.0, TimedOperator, 21);
|
|
FastFire2("FB.GiantGoobTemplate","ForceSpawn", "", 4.0, false);
|
|
}
|
|
//Found Mario
|
|
case 43: {
|
|
CustomSoundEmitter(SFXArray[52].realPath, 65, false, 0, 1.0, 100);
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {forestgreen}Welp, someone is playing \x0700FF00Mario{white}...");
|
|
}
|
|
//Found Waffle
|
|
case 44: {
|
|
CustomSoundEmitter(SFXArray[53].realPath, 65, false, 0, 1.0, 100);
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {forestgreen}Oh no, someone has found and (probably) consumed a {red}WAFFLE OF MASS DESTRUCTION{white}!");
|
|
//Yup, another one for the explosion array
|
|
FastFire2("HurtAll", "AddOutput", "damagetype 262144", 10.0, false);
|
|
FastFire2("HurtAll", "AddOutput", "damage 2000000", 0.0, false);
|
|
FastFire2("ShakeBOOM", "StartShake", "", 10.3, false);
|
|
FastFire2("HUGEExplosion", "Explode", "", 10.3, false);
|
|
FastFire2("FB.Fade", "Fade", "", 10.3, false);
|
|
FastFire2("HurtAll", "Enable", "", 10.3, false);
|
|
FastFire2("HurtAll", "Disable", "", 12.3, false);
|
|
}
|
|
//Medium Explosion (defined again, but we aren't using a bomb this time)
|
|
case 51: {
|
|
CustomSoundEmitter(SFXArray[3].realPath, 65, false, 0, 1.0, 100);
|
|
}
|
|
//Probably for the hindenburg... EDIT: NOPE. THIS IS FOR KIRB LANDING ON THE GROUND
|
|
case 52: {
|
|
EmitSoundToAll(SFXArray[35].realPath);
|
|
FastFire2("FB.BOOM", "StartShake", "", 0.0, false);
|
|
FastFire2("BlueBall*", "Kill", "", 0.0, false);
|
|
FastFire2("HUGEExplosion", "Explode", "", 0.0, false);
|
|
FastFire2("BlueKirb", "Kill", "", 0.0, false);
|
|
FastFire2("HurtAll", "AddOutput", "damagetype 32768", 0.0, false);
|
|
FastFire2("HurtAll", "AddOutput", "damage 777777.777", 0.0, false);
|
|
FastFire2("HurtAll", "Enable", "", 0.1, false);
|
|
FastFire2("HurtAll", "Disable", "", 2.1, false);
|
|
isGoobbue = false;
|
|
}
|
|
//Giant Goobbue
|
|
case 53: {
|
|
EmitSoundToAll(SFXArray[35].realPath);
|
|
FastFire2("FB.BOOM", "StartShake", "", 0.0, false);
|
|
FastFire2("GiantGoob*", "Kill", "", 0.0, false);
|
|
FastFire2("HUGEExplosion", "Explode", "", 0.0, false);
|
|
FastFire2("HurtAll", "AddOutput", "damagetype 1048576", 0.0, false);
|
|
FastFire2("HurtAll", "AddOutput", "damage 777777.777", 0.0, false);
|
|
FastFire2("HurtAll", "Enable", "", 0.1, false);
|
|
FastFire2("HurtAll", "Disable", "", 2.1, false);
|
|
}
|
|
//Prev wave
|
|
case 98: {
|
|
int prev_wave = GetCurWave() - 1;
|
|
if (prev_wave < 1) return;
|
|
JumpToWave(prev_wave);
|
|
}
|
|
//Next wave
|
|
case 99: {
|
|
int ent = FindEntityByClassname(-1, "tf_objective_resource");
|
|
if (ent == -1) {
|
|
LogMessage("tf_objective_resource not found");
|
|
return;
|
|
}
|
|
int max_wave = GetEntData(ent, FindSendPropInfo("CTFObjectiveResource", "m_nMannVsMachineMaxWaveCount"));
|
|
int next_wave = GetCurWave() + 1;
|
|
if (next_wave > max_wave) {
|
|
int flags = GetCommandFlags("tf_mvm_force_victory");
|
|
SetCommandFlags("tf_mvm_force_victory", flags & ~FCVAR_CHEAT);
|
|
ServerCommand("tf_mvm_force_victory 1");
|
|
FakeClientCommand(0, ""); //Not sure why, but this has to be here. Otherwise the specified commands simply refuse to work...
|
|
SetCommandFlags("tf_mvm_force_victory", flags | FCVAR_CHEAT);
|
|
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {white}VICTORY HAS BEEN FORCED! THE SERVER WILL RESTART IN 10 SECONDS.");
|
|
CreateTimer(10.0, TimedOperator, 100);
|
|
return;
|
|
}
|
|
JumpToWave(next_wave);
|
|
}
|
|
//Code Entry from FC Keypad
|
|
case 100: {
|
|
if (core.CodeEntry == 17) {
|
|
FastFire2("FB.BOOM", "StartShake", "", 0.0, false);
|
|
CustomSoundEmitter(SFXArray[3].realPath, 65, false, 0, 1.0, 100);
|
|
FastFire2("FB.CodeCorrectKill", "Enable", "", 0.0, false);
|
|
FastFire2("FB.KP*", "Lock", "", 0.0, false);
|
|
FastFire2("FB.CodeCorrectKill", "Disable", "", 1.0, false);
|
|
} else {
|
|
core.CodeEntry = 0;
|
|
FastFire2("FB.CodeFailedKill", "Enable", "", 0.0, false);
|
|
FastFire2("FB.CodeFailedKill", "Disable", "", 1.0, false);
|
|
CustomSoundEmitter("fartsy/memes/priceisright_fail.wav", 65, false, 0, 1.0, 100);
|
|
}
|
|
}
|
|
case 101: {
|
|
core.CodeEntry++;
|
|
}
|
|
case 102: {
|
|
core.CodeEntry += 2;
|
|
}
|
|
case 103: {
|
|
core.CodeEntry += 3;
|
|
}
|
|
case 104: {
|
|
core.CodeEntry += 4;
|
|
}
|
|
case 105: {
|
|
core.CodeEntry += 5;
|
|
}
|
|
case 106: {
|
|
core.CodeEntry += 6;
|
|
}
|
|
case 107: {
|
|
core.CodeEntry += 7;
|
|
}
|
|
case 108: {
|
|
core.CodeEntry += 8;
|
|
}
|
|
case 109: {
|
|
core.CodeEntry += 9;
|
|
}
|
|
//Lighting Repairs
|
|
case 110: {
|
|
MapLighting[0].Repair();
|
|
}
|
|
case 111: {
|
|
MapLighting[1].Repair();
|
|
}
|
|
case 112:{
|
|
MapLighting[2].Repair();
|
|
}
|
|
case 113:{
|
|
MapLighting[3].Repair();
|
|
}
|
|
case 114:{
|
|
MapLighting[4].Repair();
|
|
}
|
|
case 115:{
|
|
MapLighting[5].Repair();
|
|
}
|
|
case 116:{
|
|
MapLighting[6].Repair();
|
|
}
|
|
case 117:{
|
|
MapLighting[7].Repair();
|
|
}
|
|
case 118:{
|
|
MapLighting[8].Repair();
|
|
}
|
|
case 119:{
|
|
MapLighting[9].Repair();
|
|
}
|
|
case 120:{
|
|
MapLighting[10].Repair();
|
|
}
|
|
case 121:{
|
|
MapLighting[11].Repair();
|
|
}
|
|
//Spoopy
|
|
case 130:{
|
|
FastFire2("gTrain", "StartForward", "", 0.0, false);
|
|
FastFire2("gTelefect", "Start", "", 0.0, false);
|
|
FastFire2("gTelefect", "Stop", "", 3.0, false);
|
|
FastFire2("gTrainSndHaunt", "PlaySound", "", GetRandomFloat(3.0, 7.0), false);
|
|
}
|
|
//Despawn ghosty boi in like 3 seconds
|
|
case 131:{
|
|
FastFire2("gTelefect", "Start", "", 3.0, false);
|
|
FastFire2("gTelefect", "Stop", "", 6.0, false);
|
|
FastFire2("gTrain", "TeleportToPathTrack", "gPathHome", 3.0, false);
|
|
}
|
|
//Determine what boss just deployed.
|
|
case 132:{
|
|
// if(MetalFaceDidIt){
|
|
//Force phase 4 metal face here
|
|
// }
|
|
switch(BossHandler.bossID){
|
|
// brute justice
|
|
case 0:{
|
|
FastFire2("bots_win", "roundwin", "", 0.0, false);
|
|
}
|
|
}
|
|
}
|
|
//Metal Face reached spawn point
|
|
case 133:{
|
|
CustomSoundEmitter(SFXArray[3].realPath, 45, false, 0, 1.0, 100);
|
|
FastFire2("FB.MetalFace.Train", "Stop", "", 0.0, false);
|
|
FastFire2("FB.MetalFace.Train", "SetSpeedReal", "50", 3.0, false);
|
|
FastFire2("FB.MetalFace.SpawnShake", "StartShake", "", 0.0, false);
|
|
FastFire2("FB.MetalFace.SpawnParticle", "Stop", "", 0.0, false);
|
|
}
|
|
//Tank deployed its bomb
|
|
case 134:{
|
|
BossHandler.TriggerVictory();
|
|
FastFire2("boss_deploy_relay", "Trigger", "", 5.0, false);
|
|
}
|
|
//Spawn metal face
|
|
case 135:{
|
|
BossHandler.TriggerSpawn(2);
|
|
}
|
|
//Metal Face dead
|
|
case 136:{
|
|
if(BossHandler.iBossPhase != 4){
|
|
BossHandler.iBossPhase = 4;
|
|
}
|
|
}
|
|
//Onslaughter dead
|
|
case 137:{
|
|
BossHandler.shouldTick = false;
|
|
FastFire2("OnslaughterTank", "SetHealth", "1", 0.0, false);
|
|
FastFire2("TankRelayDMG", "Enable", "", 0.0, false);
|
|
FastFire2("TankRelayDMG", "Disable", "", 10.0, false);
|
|
BossHandler.isAlive = false;
|
|
}
|
|
//Sephiroth dead (future code)
|
|
case 138:{
|
|
|
|
}
|
|
//Wipe mechanic down (MetalFace)
|
|
case 139:{
|
|
BossHandler.shouldTick = false;
|
|
FastFire2("FB.MetalFace", "Kill", "", 0.0, false);
|
|
FastFire2("FB.MetalFace.Train", "Kill", "", 0.0, false);
|
|
FastFire2("FB.MetalFace.SpawnParticle", "Kill", "", 0.0, false);
|
|
FastFire2("FB.MetalFace.SummonRockets", "Kill", "", 0.0, false);
|
|
FastFire2("FB.MetalFace.GigaBusterSNDTimer", "Kill", "", 0.0, false);
|
|
FastFire2("FB.MetalFace.GigaBuster.Explosion", "Kill", "", 0.0, false);
|
|
FastFire2("FB.MetalFace.GigaBusterMDL", "Kill", "", 0.0, false);
|
|
FastFire2("FB.MetalFace.GigaBusterSND", "Kill", "", 0.0, false);
|
|
BossHandler.TriggerDeath();
|
|
}
|
|
//Debug, somethingsomething aoe blah blah blah
|
|
case 200: {
|
|
CreateTimer(0.1, TimedOperator, 201);
|
|
}
|
|
//Debug, somethingsomething siren explosion thingy
|
|
case 201:{
|
|
WeatherManager.sirenPitch = 300.0;
|
|
}
|
|
case 203:{
|
|
BossHandler.bDoTankBuster = true;
|
|
}
|
|
case 205:{
|
|
PrintToChatAll("%N has the max emnity.", GetEmnityMax());
|
|
}
|
|
//Taco Bell Edition
|
|
case 210: {
|
|
core.tacobell = true;
|
|
ServerCommand("fb_startmoney 200000");
|
|
CPrintToChatAll("{darkviolet}[{orange}INFO{darkviolet}] {white}You have chosen {red}DOVAH'S ASS - TACO BELL EDITION{white}. Warning: All upgrade progress will be lost if you fail the wave. DO NOT FAIL US.");
|
|
}
|
|
//Reset Map
|
|
case 300: {
|
|
GlobalAudio.Reset();
|
|
BossHandler.shouldTick = false;
|
|
core.Reset();
|
|
for (int i = 0; i < sizeof(EmnityManager); i++) EmnityManager[i].Reset();
|
|
for (int i = 0; i < sizeof(MapLighting); i++) MapLighting[i].Repair();
|
|
WeatherManager.Reset();
|
|
bombState[0].isReady = false;
|
|
bombState[0].stateMax = 7;
|
|
bombState[0].state = 5;
|
|
iDmgHealingTotal = 0;
|
|
CreateTimer(1.0, PerformAdverts);
|
|
CreateTimer(40.0, SelectAdminTimer);
|
|
FastFire2("Barricade_Rebuild_Relay", "Trigger", "", 0.0, false);
|
|
FastFire2("FB.KP*", "Lock", "", 0.0, false);
|
|
FastFire2("OldSpawn", "Disable", "", 0.0, false);
|
|
FastFire2("NewSpawn", "Enable", "", 0.0, false);
|
|
FastFire2("CommonSpells", "Disable", "", 0.0, false);
|
|
FastFire2("RareSpells", "Disable","", 0.0, false);
|
|
FastFire2("dovahsassprefer", "Disable", "", 0.0, false);
|
|
FastFire2("bombpath_left_arrows", "Disable", "", 0.0, false);
|
|
FastFire2("bombpath_right_arrows", "Disable", "", 0.0, false);
|
|
sudo(1000);
|
|
sudo(1002);
|
|
sudo(1007);
|
|
}
|
|
//TEMP FUNCTIONS
|
|
case 301: {
|
|
EmitSoundToAll(BGMArray[5].realPath, _, g_chanBGM, BGMArray[5].SNDLVL, SND_CHANGEVOL, 0.05, _, _, _, _, _, _);
|
|
}
|
|
//TEMP FUNCTIONS
|
|
case 302: {
|
|
EmitSoundToAll(BGMArray[5].realPath, _, g_chanBGM, BGMArray[5].SNDLVL, SND_CHANGEVOL, 1.0, _, _, _, _, _, _);
|
|
}
|
|
case 304: {
|
|
EmitSoundToAll(BGMArray[6].realPath, _, g_chanBGM, BGMArray[6].SNDLVL, SND_CHANGEVOL, 0.05, _, _, _, _, _, _);
|
|
}
|
|
case 305: {
|
|
EmitSoundToAll(BGMArray[6].realPath, _, g_chanBGM, BGMArray[6].SNDLVL, SND_CHANGEVOL, 1.0, _, _, _, _, _, _);
|
|
}
|
|
case 420:{ // Init/Reset Wave Null.
|
|
CPrintToChatAll("{red} [CORE] WARNING: Initializing Wave Null... Welcome to a new kind of tension, everything isn't meant to be okay. :')");
|
|
UpdateGamemode();
|
|
FastFire2("Weather.Sky", "Skin", "3", 0.0, false);
|
|
WeatherManager.fogDensity = 0.1;
|
|
}
|
|
case 421:{
|
|
FastFire2("weather.sky", "Skin", "2", 0.0, false);
|
|
GlobalAudio.setBGM(28, false);
|
|
WeatherManager.fogColorRTarget = 95.0;
|
|
WeatherManager.fogColorGTarget = 35.0;
|
|
WeatherManager.fogColorBTarget = 35.0;
|
|
}
|
|
case 422:{
|
|
GlobalAudio.setBGM(29, false);
|
|
}
|
|
case 423:{
|
|
GlobalAudio.setBGM(30, false);
|
|
}
|
|
case 424:{
|
|
GlobalAudio.setBGM(31, false);
|
|
}
|
|
case 425:{
|
|
for (int i = 0; i < 32; i++) {
|
|
if (IsValidClient(i)) BossHandler.bustNukeTarget = i;
|
|
}
|
|
BossHandler.tickBusterNuclear = true;
|
|
}
|
|
case 426:{
|
|
// FastFire2("NukeTankBusterThing", "ForceSpawn", "", 0.0, false);
|
|
FastFire2("PL.CannonPitch", "SetPosition", "1.0", 0.0, false);
|
|
FastFire2("PL.SentCart", "ForceSpawn", "", 5.0, false);
|
|
FastFire2("PL.SentPhys", "Wake", "", 5.1, false);
|
|
FastFire2("PL.CannonFodder", "Enable", "", 5.1, false);
|
|
FastFire2("PL.CannonSND", "PlaySound", "", 5.1, false);
|
|
FastFire2("PL.CannonFodder", "Disable", "", 5.3, false);
|
|
FastFire2("PL.SentCartPhys", "Break", "", 6.0, false);
|
|
}
|
|
case 427:{
|
|
FastFire2("PL.NukeCart", "ForceSpawn", "", 0.0, false);
|
|
FastFire2("PL.NukeCartPhys", "Break", "", 1.25, false);
|
|
FastFire2("PL.NukeCartParticle", "Start", "", 1.25, false);
|
|
FastFire2("PL.NukeCartShake", "StartShake", "", 1.25, false);
|
|
FastFire2("PL.NukeCartExplo", "Explode", "", 1.25, false);
|
|
}
|
|
//LOOP SYSTEM
|
|
case 500: {
|
|
GlobalAudio.setBGM(9, false);
|
|
}
|
|
case 501: {
|
|
GlobalAudio.setBGM(10, false);
|
|
}
|
|
case 502: {
|
|
PrintToChatAll("Got 502 but not implemented in popfile, please report this to fartsy!");
|
|
PrintToConsoleAll("[CORE] Phase Change started... phase 4!");
|
|
GlobalAudio.setBGM(11, false);
|
|
}
|
|
// FINAL Music system rewrite (again) AGAINNNNNNNNNNNN.... and again!... and again :p and again!
|
|
case 1000: {
|
|
GlobalAudio.UpdateBGM();
|
|
}
|
|
//Stop current song
|
|
case 1001: {
|
|
for (int i = 1; i <= MaxClients; i++){
|
|
if (StrEqual(BGMArray[AudioManager[i].indexBGM].realPath, "null")) continue;
|
|
StopSound(i, g_chanBGM, BGMArray[AudioManager[i].indexBGM].realPath);
|
|
}
|
|
return;
|
|
}
|
|
//Feature an admin
|
|
case 1002: {
|
|
char index[2];
|
|
int i = GetRandomInt(1, 10);
|
|
if (i == core.lastAdmin) i = GetRandomInt(1, 10);
|
|
IntToString(i, index, sizeof(index));
|
|
FastFire2("AdminPicker", "SetTextureIndex", index, 0.0, false);
|
|
core.lastAdmin = i;
|
|
return;
|
|
}
|
|
//Flash Lightning
|
|
case 1003: {
|
|
for (int i = 0; i < sizeof(lightningFlash); i++) FastFire2(lightningFlash[i].fireStr, "", "", 0.0, true);
|
|
}
|
|
//Activate Tornado Timer
|
|
case 1004: {
|
|
if (!core.isWave || !WeatherManager.canTornado || WeatherManager.hasTornado) return;
|
|
WeatherManager.TornadoTimerActive = true;
|
|
float f = (core.curWave == 4 ? GetRandomFloat(30.0, 60.0) : GetRandomFloat(90.0, 210.0));
|
|
CreateTimer(f - 20.0, TimedOperator, 40);
|
|
CreateTimer((f + GetRandomFloat(5.0, 25.0)), TimedOperator, 41);
|
|
}
|
|
//Despawn the tornado
|
|
case 1005: {
|
|
if (GetRandomInt(0, 9) != 9){
|
|
CPrintToChatAll("{red}TTV/professorfartsalot{white}: Nope :>");
|
|
return;
|
|
}
|
|
WeatherManager.Dissipate();
|
|
return;
|
|
}
|
|
//Crusader
|
|
case 1006: {
|
|
GlobalAudio.shouldTick = false;
|
|
sudo(1001);
|
|
core.crusader = true;
|
|
CreateTimer(1.75, CRUSADERINCOMING);
|
|
CreateTimer(25.20, TimedOperator, 9);
|
|
CreateTimer(25.20, TimedOperator, 78);
|
|
CreateTimer(42.60, TimedOperator, 10);
|
|
CreateTimer(63.20, TimedOperator, 80);
|
|
PrintToServer("Starting Crusader via plugin!");
|
|
EmitSoundToAll("fartsy/misc/fartsyscrusader_bgm_locus.mp3");
|
|
CreateTimer(80.0, TimedOperator, 79);
|
|
for (int i = 0; i < sizeof(crusaderAtk); i++) FastFire2(crusaderAtk[i].fireStr, "", "", 0.0, true);
|
|
}
|
|
//Choose bomb path
|
|
case 1007: {
|
|
FastFire2("Nest_*", "Disable", "", 0.0, false);
|
|
FastFire2("bombpath_right_prefer_flankers", "Disable", "", 0.0, false);
|
|
FastFire2("bombpath_left_prefer_flankers", "Disable", "", 0.0, false);
|
|
FastFire2("bombpath_left_navavoid", "Disable", "", 0.0, false);
|
|
FastFire2("bombpath_right_navavoid", "Disable", "", 0.0, false);
|
|
FastFire2("bombpath_right_arrows", "Disable", "", 0.0, false);
|
|
FastFire2("bombpath_left_arrows", "Disable", "", 0.0, false);
|
|
switch (GetRandomInt(1, 3)) {
|
|
case 1: {
|
|
FastFire2("Nest_R*", "Enable", "", 0.25, false);
|
|
FastFire2("bombpath_right_prefer_flankers", "Enable", "", 0.25, false);
|
|
FastFire2("bombpath_right_navavoid", "Enable", "", 0.25, false);
|
|
FastFire2("bombpath_right_arrows", "Enable", "", 0.25, false);
|
|
}
|
|
case 2: {
|
|
FastFire2("Nest_L*", "Enable", "", 0.25, false);
|
|
FastFire2("bombpath_left_prefer_flankers", "Enable", "", 0.25, false);
|
|
FastFire2("bombpath_left_navavoid", "Enable", "", 0.25, false);
|
|
FastFire2("bombpath_left_arrows", "Enable", "", 0.25, false);
|
|
}
|
|
case 3: {
|
|
FastFire2("dovahsassprefer", "Enable", "", 0.25, false);
|
|
FastFire2("Nest_EN*", "Enable","", 0.25, false);
|
|
FastFire2("bombpath_right_prefer_flankers", "Enable", "", 0.25, false);
|
|
FastFire2("bombpath_right_navavoid", "Enable", "", 0.25, false);
|
|
FastFire2("bombpath_right_arrows", "Enable", "", 0.25, false);
|
|
}
|
|
}
|
|
}
|
|
//Monitor power up/down!
|
|
case 1008: {
|
|
core.monitorOn = (!core.monitorOn ? true : false);
|
|
FastFire2("FB.MonitorSprite", "Color", !core.monitorColor && core.monitorOn ? "0 0 255" : core.monitorOn ? "0 255 0" : "255 0 0", 0.0, false);
|
|
FastFire2(!core.monitorColor && core.monitorOn ? "FB.MonitorBW" : core.monitorOn ? "FB.Monitor" : "FB.Monitor*", core.monitorOn ? "Enable" : "Disable", "", 0.0, false);
|
|
FastFire2(!core.monitorColor && core.monitorOn ? "FB.Monitor" : core.monitorOn ? "FB.MonitorBW" : "FB.MonitorBlank", core.monitorOn ? "Disable" : "Enable", "", 0.0, false);
|
|
FastFire2("FB.MonitorBlank", core.monitorOn ? "Disable" : "Enable", "", 0.2, false);
|
|
}
|
|
//Cycle monitor forward
|
|
case 1009: {
|
|
core.camSel++;
|
|
if (core.camSel >= 5) core.camSel = 0;
|
|
FastFire2("FB.Monitor", "SetCamera", SelectedCamera[core.camSel], 0.0, false);
|
|
FastFire2("FB.MonitorBW", "SetCamera", SelectedCamera[core.camSel], 0.0, false);
|
|
}
|
|
//Cycle monitor back
|
|
case 1010: {
|
|
core.camSel--;
|
|
if (core.camSel <= -1) core.camSel = 4;
|
|
FastFire2("FB.Monitor", "SetCamera", SelectedCamera[core.camSel], 0.0, false);
|
|
FastFire2("FB.MonitorBW", "SetCamera", SelectedCamera[core.camSel], 0.0, false);
|
|
}
|
|
//Toggle black and white mode.
|
|
case 1011: {
|
|
if (!core.monitorOn) return;
|
|
core.monitorColor = (!core.monitorColor ? true : false);
|
|
FastFire2("FB.MonitorSprite", "Color", core.monitorColor ? "0 255 0" : "0 0 255", 0.0, false);
|
|
FastFire2(core.monitorColor ? "FB.MonitorBW" : "FB.Monitor", "Disable", "", 0.0, false);
|
|
FastFire2(core.monitorColor ? "FB.Monitor" : "FB.MonitorBW", "Enable", "", 0.0, false);
|
|
}
|
|
case 6942: {
|
|
core.sacPoints = 2147483647;
|
|
}
|
|
//Do not EVER EVER execute this unless it's an emergency...
|
|
case 6969: {
|
|
CPrintToChatAll(!core.isWave ? "{darkred} [CORE] ERROR, attempted to invoke function without an active wave." : core.brawler_emergency ? "{darkred}[CORE] Failed to enter emergency mode, it is already active." : "{darkred}[CORE] EMERGENCY MODE ACTIVATED...");
|
|
if (!core.isWave || core.brawler_emergency) return;
|
|
Emerge(0);
|
|
}
|
|
//DEBUG
|
|
case 7500:{
|
|
FastFire2("LargeExplosion", "Explode", "", 0.5, false);
|
|
}
|
|
case 8000: {
|
|
SephBoss[GetRandomInt(0, 6)].attack();
|
|
}
|
|
case 9000: {
|
|
CreateTimer(10.0, BossHPTimer);
|
|
}
|
|
case 9010: {
|
|
CustomSoundEmitter(TBGM6, 65, true, 1, 1.0, 100);
|
|
CustomSoundEmitter(TBGM4, 65, true, 1, 0.05, 100);
|
|
CustomSoundEmitter(TBGM5, 65, true, 1, 0.05, 100);
|
|
CustomSoundEmitter(TBGM3, 65, true, 1, 0.05, 100);
|
|
}
|
|
case 9011: {
|
|
CustomSoundEmitter(TBGM6, 65, true, 1, 1.0, 100);
|
|
CustomSoundEmitter(TBGM4, 65, true, 1, 1.0, 100);
|
|
CustomSoundEmitter(TBGM5, 65, true, 1, 0.05, 100);
|
|
CustomSoundEmitter(TBGM3, 65, true, 1, 0.05, 100);
|
|
}
|
|
case 9012: {
|
|
CustomSoundEmitter(TBGM6, 65, true, 1, 1.0, 100);
|
|
CustomSoundEmitter(TBGM4, 65, true, 1, 1.0, 100);
|
|
CustomSoundEmitter(TBGM5, 65, true, 1, 1.0, 100);
|
|
CustomSoundEmitter(TBGM3, 65, true, 1, 0.05, 100);
|
|
}
|
|
case 9013: {
|
|
CustomSoundEmitter(TBGM6, 65, true, 1, 1.0, 100);
|
|
CustomSoundEmitter(TBGM4, 65, true, 1, 1.0, 100);
|
|
CustomSoundEmitter(TBGM5, 65, true, 1, 1.0, 100);
|
|
CustomSoundEmitter(TBGM3, 65, true, 1, 1.0, 100);
|
|
}
|
|
case 9014: {
|
|
CustomSoundEmitter(TBGM6, 65, true, 1, 0.05, 100);
|
|
CustomSoundEmitter(TBGM4, 65, true, 1, 1.0, 100);
|
|
CustomSoundEmitter(TBGM5, 65, true, 1, 1.0, 100);
|
|
CustomSoundEmitter(TBGM3, 65, true, 1, 1.0, 100);
|
|
}
|
|
case 9015: {
|
|
CustomSoundEmitter(TBGM6, 65, true, 1, 0.05, 100);
|
|
CustomSoundEmitter(TBGM4, 65, true, 1, 0.05, 100);
|
|
CustomSoundEmitter(TBGM5, 65, true, 1, 1.0, 100);
|
|
CustomSoundEmitter(TBGM3, 65, true, 1, 1.0, 100);
|
|
}
|
|
case 9016: {
|
|
CustomSoundEmitter(TBGM6, 65, true, 1, 0.05, 100);
|
|
CustomSoundEmitter(TBGM4, 65, true, 1, 0.05, 100);
|
|
CustomSoundEmitter(TBGM5, 65, true, 1, 0.05, 100);
|
|
CustomSoundEmitter(TBGM3, 65, true, 1, 1.0, 100);
|
|
}
|
|
//Play Instrumental
|
|
case 9020: {
|
|
CustomSoundEmitter(TBGM0, 65, true, 1, 1.0, 100);
|
|
CustomSoundEmitter(TBGM1, 65, true, 1, 0.05, 100);
|
|
}
|
|
//Play Both
|
|
case 9021: {
|
|
CustomSoundEmitter(TBGM0, 65, true, 1, 1.0, 100);
|
|
CustomSoundEmitter(TBGM1, 65, true, 1, 1.0, 100);
|
|
}
|
|
//Play vocal only
|
|
case 9022: {
|
|
CustomSoundEmitter(TBGM0, 65, true, 1, 0.05, 100);
|
|
CustomSoundEmitter(TBGM1, 65, true, 1, 1.0, 100);
|
|
}
|
|
//Test
|
|
case 10000:{
|
|
int ent = FindEntityByClassname(-1, "tf_objective_resource");
|
|
if (ent != -1){
|
|
PrintToChatAll("%i / 3", GetEntData(ent, FindSendPropInfo("CTFObjectiveResource", "m_nFlagCarrierUpgradeLevel")));
|
|
}
|
|
}
|
|
case 20000:{
|
|
BossHandler.EmitSpawnSound(2);
|
|
}
|
|
// WAVE NULL Init
|
|
case 40000: {
|
|
UpdateGamemode();
|
|
if (core.gamemode != 2) return;
|
|
CPrintToChatAll("{fartsyred} [WARNING]: YOU HAVE CHOSEN TO LAUNCH WAVE NULL.");
|
|
CPrintToChatAll("{fartsyred} [WARNING]: SHOULD YOU FAIL THIS WAVE, YOU *WILL* BE RESTARTING FROM THE VERY BEGINNING WITH NO UPGRADES.");
|
|
CPrintToChatAll("{fartsyred} [WARNING]: THE FATE OF THIS SERVER IS IN YOUR HANDS. DO. NOT. FAIL.");
|
|
}
|
|
// WAVE NULL started!
|
|
case 40001: {
|
|
UpdateGamemode();
|
|
if (core.gamemode != 2) return;
|
|
core.curWave = GetCurWave();
|
|
PerformWaveSetup();
|
|
float hwn = GetRandomFloat(core.HWNMin, core.HWNMax);
|
|
CreateTimer(hwn, HWBosses);
|
|
GlobalAudio.setBGM(29, true);
|
|
return;
|
|
}
|
|
case 42690:{
|
|
BossHandler.bossID = 69;
|
|
BossHandler.shouldTick = true;
|
|
BossHandler.isAlive = true;
|
|
EmitSoundToAll("fartsy/misc/brawler/fartsy_dll/intro.mp3");
|
|
PrintToConsoleAll("Loading FARTSY.DLL from C:\\Windows\\System32 ...");
|
|
PrintToServer("Loading FARTSY.IMG from /boot/efi ...");
|
|
PrintToChatAll("FARTSY.DLL has joined the game");
|
|
ServerCommand("sm_mortal @all");
|
|
AddCommandListener(CommandOverride, "sm_buddha");
|
|
AddCommandListener(CommandOverride, "sm_gimme");
|
|
AddCommandListener(CommandOverride, "sm_givew");
|
|
AddCommandListener(CommandOverride, "sm_gi");
|
|
AddCommandListener(CommandOverride, "sm_god");
|
|
AddCommandListener(CommandOverride, "sm_admin");
|
|
AddCommandListener(CommandOverride, "sm_noclip");
|
|
AddCommandListener(CommandOverride, "sm_noclipme");
|
|
CreateTimer(6.1, TimedOperator, 50000);
|
|
}
|
|
case 42696:{
|
|
RemoveCommandListener(CommandOverride, "sm_buddha");
|
|
RemoveCommandListener(CommandOverride, "sm_god");
|
|
RemoveCommandListener(CommandOverride, "sm_gimme");
|
|
RemoveCommandListener(CommandOverride, "sm_givew");
|
|
RemoveCommandListener(CommandOverride, "sm_gi");
|
|
RemoveCommandListener(CommandOverride, "sm_admin");
|
|
RemoveCommandListener(CommandOverride, "sm_noclip");
|
|
RemoveCommandListener(CommandOverride, "sm_noclipme");
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
public Action CommandOverride(int client, const char[] command, int argc)
|
|
{
|
|
ServerCommand(GetRandomInt(0, 1 == 1) ? "sm_slay #%i" : "sm_smite #i", GetClientUserId(client));
|
|
PrintToChatAll ("[FARTSY.DLL] Did you REALLY think I would let you cheat, %N? How about instead of using %s you actually play the game, loser!", client, command);
|
|
return Plugin_Handled;
|
|
}
|
|
|
|
//Timed commands
|
|
public Action TimedOperator(Handle timer, int job) {
|
|
switch (job) {
|
|
case 0: {
|
|
for (int i = 0; i < MaxClients; ++i) CPrintToChat(i, GlobalAudio.VIPBGM >= 0 ? "{darkviolet}[{forestgreen}CORE{darkviolet}] {white}Wave %i: {forestgreen}%s{white} (requested by VIP {forestgreen}%N{white})" : "{darkviolet}[{forestgreen}CORE{darkviolet}] {white}Wave %i: {forestgreen}%s", core.curWave, AudioManager[i].songName, GlobalAudio.VIPIndex);
|
|
}
|
|
//Boss script
|
|
case 2: {
|
|
ServerCommand("fb_operator 1001"); //Stop all bgm.
|
|
CreateTimer(0.0, TimedOperator, 3);
|
|
}
|
|
//Boss script pt 2
|
|
case 3: {
|
|
GlobalAudio.setBGM(16, true);
|
|
FastFire2("FB.FadeTotalBLCK", "Fade", "", 0.0, false);
|
|
FastFire2("FB.FadeTotalBLCK", "Fade", "", 3.0, false);
|
|
FastFire2("FB.FadeTotalBLCK", "Fade", "", 7.0, false);
|
|
FastFire2("FB.FadeTotalBLCK", "Fade", "", 12.0, false);
|
|
FastFire2("SephMeteor", "ForceSpawn", "", 19.6, false);
|
|
CreateTimer(23.0, TimedOperator, 4);
|
|
}
|
|
//Boss script pt 3
|
|
case 4: {
|
|
CustomSoundEmitter(SFXArray[9].realPath, 65, false, 0, 1.0, 100);
|
|
CreateTimer(4.1, TimedOperator, 5);
|
|
}
|
|
//Boss script pt 4
|
|
case 5: {
|
|
CustomSoundEmitter(SFXArray[58].realPath, 65, false, 0, 1.0, 100);
|
|
FastFire2("SephNuke", "ForceSpawn", "", 3.0, false);
|
|
CreateTimer(3.2, TimedOperator, 6);
|
|
}
|
|
//Boss script pt 5
|
|
case 6: {
|
|
CustomSoundEmitter(SFXArray[35].realPath, 65, false, 0, 1.0, 100);
|
|
FastFire2("FB.Fade", "Fade", "", 0.0, false);
|
|
CreateTimer(1.0, SephATK);
|
|
CreateTimer(1.7, TimedOperator, 7);
|
|
}
|
|
//DO THE THING ALREADY
|
|
case 7: {
|
|
core.sephiroth = true;
|
|
//AudioManager.ticksBGM = 0;
|
|
//AudioManager.loopSeconds = BGMArray[16].loopSeconds;
|
|
}
|
|
//Signal boss to actually spawn after delay.
|
|
case 8: {
|
|
CustomSoundEmitter(SFXArray[57].realPath, 65, false, 0, 1.0, 100);
|
|
CPrintToChatAll("{darkgreen}[CORE] You did it!!! {darkred}Or... did you...?");
|
|
FastFire2("FB.FadeBLCK", "Fade", "", 0.0, false);
|
|
CreateTimer(4.8, TimedOperator, 2);
|
|
}
|
|
//Crusader Nuke activation
|
|
case 9: {
|
|
core.canCrusaderNuke = true;
|
|
CreateTimer(1.0, NukeTimer, 1);
|
|
}
|
|
//Crusader Nuke Deactivation
|
|
case 10: {
|
|
core.canCrusaderNuke = false;
|
|
return Plugin_Stop;
|
|
}
|
|
//Seph Nuke Deactivation
|
|
case 11: {
|
|
core.canSephNuke = false;
|
|
return Plugin_Stop;
|
|
}
|
|
//SENTMeteor Timeout
|
|
case 12: {
|
|
core.canSENTMeteors = false;
|
|
return Plugin_Stop;
|
|
}
|
|
//SENTStars Timeout
|
|
case 14: {
|
|
core.canSENTStars = false;
|
|
return Plugin_Stop;
|
|
}
|
|
//Incoming
|
|
case 21: {
|
|
CustomSoundEmitter(SFXArray[37].realPath, 65, false, 0, 1.0, 100);
|
|
return Plugin_Stop;
|
|
}
|
|
case 37: {
|
|
EmitSoundToAll(SFXArray[35].realPath);
|
|
return Plugin_Stop;
|
|
}
|
|
//Severe storm coming!!!
|
|
case 40: {
|
|
if (core.isWave && WeatherManager.canTornado && !WeatherManager.sirenExploded) WeatherManager.IssueTornadoWarning();
|
|
return Plugin_Stop;
|
|
}
|
|
// start tornado
|
|
case 41: {
|
|
if (!core.isWave || !WeatherManager.canTornado || WeatherManager.hasTornado) return Plugin_Stop;
|
|
WeatherManager.FormTornado();
|
|
return Plugin_Stop;
|
|
}
|
|
case 42: {
|
|
WeatherManager.TornadoWarning = false;
|
|
WeatherManager.Dissipate();
|
|
sudo(1004);
|
|
}
|
|
case 60: {
|
|
CustomSoundEmitter(SFXArray[40].realPath, 65, false, 0, 1.0, 100);
|
|
return Plugin_Stop;
|
|
}
|
|
case 70: {
|
|
if (core.isWave) {
|
|
FastFire2("FB.KP*", "Unlock", "", 0.0, false);
|
|
CustomSoundEmitter(SFXArray[0].realPath, 65, false, 0, 1.0, 100);
|
|
}
|
|
return Plugin_Stop;
|
|
}
|
|
case 71: {
|
|
CustomSoundEmitter("fartsy/eee/the_horn.wav", 65, false, 0, 1.0, 100);
|
|
return Plugin_Stop;
|
|
}
|
|
case 78: {
|
|
EmitSoundToAll(SFXArray[7].realPath);
|
|
return Plugin_Handled;
|
|
}
|
|
case 79: {
|
|
core.crusader = false;
|
|
core.curWave = GetCurWave();
|
|
if (core.isWave && (core.curWave == 3 || core.curWave == 5)) {
|
|
sudo(99);
|
|
}
|
|
return Plugin_Stop;
|
|
}
|
|
case 80: {
|
|
EmitSoundToAll(SFXArray[59].realPath);
|
|
return Plugin_Stop;
|
|
}
|
|
case 99: {
|
|
if (core.isWave) sudo(99);
|
|
return Plugin_Stop;
|
|
}
|
|
case 100: {
|
|
ServerCommand("_restart");
|
|
}
|
|
case 200:{
|
|
for (int i = 0; i < sizeof(CircleAOEenabled); i++){
|
|
CircleAOEenabled[i] = true;
|
|
}
|
|
}
|
|
case 201:{
|
|
int i = GetRandomInt(0, sizeof(CircleAOEpos)-1);
|
|
if (!CircleAOEenabled[i]){
|
|
if (attemptSpawn >= sizeof(CircleAOEpos)) return Plugin_Stop;
|
|
attemptSpawn++;
|
|
ServerCommand("fb_operator 200");
|
|
return Plugin_Stop;
|
|
}
|
|
attemptSpawn = 0;
|
|
DispatchCircleAOE(CircleAOEpos[i]);
|
|
PrintToChatAll("AOE %i CircleAOEen[i] = %i attempt %i sizeof %i", i, CircleAOEenabled[i], attemptSpawn, sizeof(CircleAOEpos));
|
|
CircleAOEenabled[i] = false;
|
|
CreateTimer(3.0, TimedOperator, 200);
|
|
return Plugin_Stop;
|
|
}
|
|
case 6969: {
|
|
if (!core.isWave){
|
|
ExitEmergencyMode();
|
|
return Plugin_Stop;
|
|
}
|
|
BEM++;
|
|
Emerge(BEM);
|
|
return Plugin_Stop;
|
|
}
|
|
case 42690: {
|
|
BossHandler.sOverflow = false;
|
|
return Plugin_Stop;
|
|
}
|
|
case 50000: {
|
|
ServerCommand("sv_cheats 1");
|
|
for (int client = 1; client <= MaxClients; client++) if (IsClientInGame(client)) ClientCommand(client, "r_screenoverlay fartsy/fartsy_dll_core");
|
|
ServerCommand("sv_cheats 0");
|
|
FastFire2("FB.FadeBLCK", "Alpha", "127", 0.0, false);
|
|
FastFire2("FB.FadeBLCK", "Fade", "", 0.0, false);
|
|
SendHudTextAll(1, "Did you think this would be easy...?", 0.1, 0.15, 9.0, {0, 160, 0, 255}, {0, 255, 0, 255}, 2, 0.5, 0.05, 0.75);
|
|
EmitSoundToAll("fartsy/misc/brawler/fartsy_dll/terror.mp3");
|
|
CreateTimer(3.0, TimedOperator, 50001);
|
|
return Plugin_Stop;
|
|
}
|
|
case 50001: {
|
|
FastFire2("FB.FadeBLCK", "Alpha", "127", 0.0, false);
|
|
FastFire2("FB.FadeBLCK", "Fade", "", 0.0, false);
|
|
SendHudTextAll(2, "You can't possibly expect the same old tricks to work.... can you?~", 0.2, 0.2, 3.0, {0, 160, 0, 192}, {0, 255, 0, 192}, 2, 0.75, 0.05, 0.75);
|
|
CreateTimer(5.0, TimedOperator, 50002);
|
|
return Plugin_Stop;
|
|
}
|
|
case 50002: {
|
|
FastFire2("FB.FadeBLCK", "Alpha", "127", 0.0, false);
|
|
FastFire2("FB.FadeBLCK", "Fade", "", 0.0, false);
|
|
SendHudTextAll(1, "LAUGH IT UP. You and I both know this is 'just another boss fight'...", 0.15, 0.25, 7.0, {0, 160, 0, 192}, {0, 255, 0, 192}, 2, 0.5, 0.05, 0.75);
|
|
CreateTimer(5.0, TimedOperator, 50003);
|
|
return Plugin_Stop;
|
|
}
|
|
case 50003: {
|
|
FastFire2("FB.FadeBLCK", "Alpha", "192", 0.0, false);
|
|
FastFire2("FB.FadeBLCK", "Fade", "", 0.0, false);
|
|
SendHudTextAll(2, "...or is it?~", 0.2, 0.3, 2.0, {0, 160, 0, 192}, {0, 255, 0, 192}, 2, 0.5, 0.05, 0.75);
|
|
CreateTimer(4.0, TimedOperator, 50004);
|
|
return Plugin_Stop;
|
|
}
|
|
case 50004:{
|
|
FastFire2("FB.FadeBLCK", "Alpha", "224", 0.0, false);
|
|
FastFire2("FB.FadeBLCK", "Fade", "", 0.0, false);
|
|
SendHudTextAll(1, "ARE YOU HAPPY? All of you who knew what was happening...~", 0.25, 0.35, 7.0, {0, 160, 0, 192}, {0, 255, 0, 192}, 2, 0.5, 0.05, 0.75);
|
|
CreateTimer(5.0, TimedOperator, 50005);
|
|
return Plugin_Stop;
|
|
}
|
|
case 50005:{
|
|
FastFire2("FB.FadeBLCK", "Alpha", "224", 0.0, false);
|
|
FastFire2("FB.FadeBLCK", "Fade", "", 0.0, false);
|
|
SendHudTextAll(2, "Every last one of you...", 0.35, 0.4, 5.0, {0, 160, 0, 192}, {0, 255, 0, 192}, 1, 0.5, 0.5, 0.75);
|
|
CreateTimer(5.0, TimedOperator, 50006);
|
|
return Plugin_Stop;
|
|
}
|
|
case 50006:{
|
|
FastFire2("FB.FadeBLCK", "Alpha", "192", 0.0, false);
|
|
FastFire2("FB.FadeBLCK", "Fade", "", 0.0, false);
|
|
SendHudTextAll(1, "I hope you're as happy as I am...~", 0.15, 0.45, 7.0, {0, 160, 0, 192}, {0, 255, 0, 192}, 2, 0.5, 0.05, 0.75);
|
|
CreateTimer(4.0, TimedOperator, 50007);
|
|
return Plugin_Stop;
|
|
}
|
|
case 50007:{
|
|
FastFire2("FB.FadeBLCK", "Fade", "", 0.0, false);
|
|
SendHudTextAll(2, "...knowing you all just spent all your time here~", 0.25, 0.5, 5.0, {0, 160, 0, 192}, {0, 255, 0, 192}, 2, 0.5, 0.05, 0.75);
|
|
CreateTimer(5.0, TimedOperator, 50008);
|
|
return Plugin_Stop;
|
|
}
|
|
case 50008:{
|
|
FastFire2("FB.FadeBLCK", "Alpha", "255", 0.0, false);
|
|
FastFire2("FB.FadeBLCK", "Fade", "", 0.0, false);
|
|
ServerCommand("sv_cheats 1");
|
|
for (int client = 1; client <= MaxClients; client++) if (IsClientInGame(client)) ClientCommand(client, "r_screenoverlay fartsy/fartsy_dll_anon");
|
|
ServerCommand("sv_cheats 0");
|
|
FastFire2("FB.FadeBLCK", "Fade", "", 3.0, false);
|
|
SendHudTextAll(1, "JUST TO DIE!!!", 0.4, 0.6, 7.0, {255, 0, 0, 255}, {255, 0, 0, 255}, 1, 0.5, 0.05, 0.75);
|
|
CreateTimer(5.75, TimedOperator, 50009);
|
|
return Plugin_Stop;
|
|
}
|
|
case 50009:{
|
|
ServerCommand("sv_cheats 1");
|
|
for (int client = 1; client <= MaxClients; client++) if (IsClientInGame(client)) ClientCommand(client, "r_screenoverlay \\");
|
|
ServerCommand("sv_cheats 0");
|
|
EmitSoundToAll("fartsy/music/tcmusic/humanhypothesis.wav");
|
|
return Plugin_Stop;
|
|
}
|
|
case 51000:{
|
|
|
|
}
|
|
case 99999:{
|
|
AssLogger(LOGLVL_INFO, "Server empty for 600s, restarting!");
|
|
ServerCommand("_restart");
|
|
}
|
|
}
|
|
return Plugin_Stop;
|
|
} |