Files
SMScripts/scripting/include/fartsy/ass_commands.inc
Professor Fartsalot 94696de3ef v.8.4.0 - full audiosystem rewrite again
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.
2025-08-23 06:25:03 -04:00

164 lines
7.8 KiB
SourcePawn

#include <sourcemod>
public Action Command_AOE(int client, int args){
float pos[3];
pos[0] = GetCmdArgFloat(1);
pos[1] = GetCmdArgFloat(2);
pos[2] = GetCmdArgFloat(3);
PrintToChat(client, "pos %f %f %f", pos[0], pos[1], pos[2]);
DispatchCircleAOE(pos);
return Plugin_Handled;
}
public Action Command_SetFogDensity(int client, int args){
char arg1[5];
GetCmdArg(1, arg1, sizeof(arg1));
WeatherManager.fogTarget = StringToFloat(arg1);
PrintToChatAll("Changing fog density to %s", arg1);
return Plugin_Handled;
}
public Action Command_SetFogSEU(int client, int args){
char arg01[5];
char arg02[5];
char arg03[5];
GetCmdArg(1, arg01, sizeof(arg01));
GetCmdArg(2, arg02, sizeof(arg02));
GetCmdArg(3, arg03, sizeof(arg03));
WeatherManager.SetFogStartQueued(arg01);
WeatherManager.SetFogEndQueued(arg02);
if (StringToInt(arg03) == 1) WeatherManager.StartFogTransition();
PrintToChatAll("Received fog start: %s, fog end: %s, begin transition: %s", arg01, arg02, arg03);
return Plugin_Handled;
}
//Get client's stats via command
public Action Command_MyStats(int client, int args) {
int steamID = GetSteamAccountID(client);
if (!Get_Ass_Database() || !steamID || steamID <= 10000) return Plugin_Stop;
char queryID[256];
Format(queryID, sizeof(queryID), "SELECT * from ass_activity WHERE steamid = %i;", steamID);
Get_Ass_Database().Query(MyStats, queryID, client);
return Plugin_Continue;
}
public void MyStats(Database db, DBResultSet results, const char[] error, int client) {
if (!results) {
LogError("Failed to query database: %s", error);
return;
}
char name[64];
char class [64];
int health, healthMax, steamID, damagedealt, damagedealtsession, kills, killssession, deaths, deathssession, bombsreset, bombsresetsession, sacrifices, sacrificessession;
char lastkilledname[128];
char lastusedweapon[128];
char killedbyname[128];
char killedbyweapon[128];
if (results.FetchRow()) {
results.FetchString(0, name, 64); //name
steamID = results.FetchInt(1); //steamid
results.FetchString(4, class, 64); //class
health = results.FetchInt(5); //health
healthMax = results.FetchInt(6); //health
damagedealt = results.FetchInt(7); //damage dealt
damagedealtsession = results.FetchInt(8); //damage dealt session
kills = results.FetchInt(9); //kills
killssession = results.FetchInt(10); //kills session
deaths = results.FetchInt(11); //deaths
deathssession = results.FetchInt(12); //deaths session
bombsreset = results.FetchInt(13); //bombs reset
bombsresetsession = results.FetchInt(14); //bombs reset session
sacrifices = results.FetchInt(15); //sacrifices
sacrificessession = results.FetchInt(16); //sacrifices session
results.FetchString(17, lastkilledname, sizeof(lastkilledname)); //last client killed
results.FetchString(18, lastusedweapon, sizeof(lastusedweapon)); //using weapon
results.FetchString(19, killedbyname, sizeof(killedbyname)); //last client that killed
results.FetchString(20, killedbyweapon, sizeof(killedbyweapon)); //using weapon
CPrintToChat(client, "\x07AAAAAA[CORE] Showing stats of %s [%s, %i/%i hp] || SteamID: %i ", name, class, health, healthMax, steamID);
CPrintToChat(client, "{white}Damage Dealt: %i (Session: %i) || Kills: %i (Session: %i) || Deaths: %i (Session: %i) || Bombs Reset: %i (Session: %i)", damagedealt, damagedealtsession, kills, killssession, deaths, deathssession, bombsreset, bombsresetsession);
CPrintToChat(client, "Sacrifices: %i(Session:%i) || Killed %s (using %s) || Last killed by: %s (using %s)", sacrifices, sacrificessession, lastkilledname, lastusedweapon, killedbyname, killedbyweapon);
}
return;
}
//Fartsy's A.S.S
public Action Command_SacrificePointShop(int client, int args) {
ShowFartsysAss(client);
return Plugin_Handled;
}
//Fartsy's A.S.S
public void ShowFartsysAss(int client) {
CPrintToChat(client, (!core.isWave ? "{darkviolet}[{forestgreen}CORE{darkviolet}] {forestgreen}The sacrificial points counter is currently at %i of %i maximum for this wave." : core.sacPoints <= 9 ? "{darkviolet}[{forestgreen}CORE{darkviolet}] {red}You do not have enough sacrifice points to use this shop. You have %i / 10 required." : ""), core.sacPoints, core.sacPointsMax);
if (!core.isWave || core.sacPoints < 10) return;
Menu menu = new Menu(MenuHandlerFartsysAss, MENU_ACTIONS_DEFAULT);
char buffer[100];
menu.SetTitle("Fartsy's Annihilation Supply Shop");
menu.ExitButton = true;
for (int i = 0; i < RoundToFloor(core.sacPoints / 10.0); i++) menu.AddItem(buffer, ass[i].name);
menu.Display(client, 20);
}
//Also Fartsy's A.S.S
public int MenuHandlerFartsysAss(Menu menu, MenuAction action, int client, int item) {
if (action == MenuAction_Select) {
if (core.sacPoints < ass[item].price) return 0;
if(WeatherManager.TornadoWarning && item == 5){
CPrintToChatAll("{darkred}[Fartsy's Operator] {limegreen}-> {red}%N {darkred}I'm sorry, it is too late for that.. You are doomed...", client);
}
else sudo(ass[item].purchase);
AssLogger(LOGLVL_INFO, "%N opted for %s via the A.S.S.", client, ass[item].name);
} else if (action == MenuAction_End) CloseHandle(menu);
return 0;
}
//Command action definitions
//Get current song
public Action Command_GetCurrentSong(int client, int args) {
char buffer[16];
char tbuffer[16];
int sPos = RoundToFloor(AudioManager[client].engineSecondsAdjusted() - AudioManager[client].timeSeconds);
int tPos = RoundToFloor(AudioManager[client].loopSeconds);
Format(buffer, 16, "%02d:%02d", sPos / 60, sPos % 60);
Format(tbuffer, 16, "%02d:%02d", tPos / 60, tPos % 60);
CPrintToChat(client, "The current song (%i) is: {limegreen}%s {orange}(%s / %s)", AudioManager[client].indexBGM, AudioManager[client].songName, buffer, tbuffer);
return Plugin_Handled;
}
//Determine which bomb has been recently pushed and tell the client if a bomb is ready or not.
public Action Command_FBBombStatus(int client, int args) {
char bombStatusMsg[256];
Format(bombStatusMsg, sizeof(bombStatusMsg), (bombState[0].isMoving ? "{darkviolet}[{forestgreen}CORE{darkviolet}] {white}(%i/%i) Your team is currently pushing a %s!" : bombState[0].isReady ? "{darkviolet}[{forestgreen}CORE{darkviolet}] {white}(%i/%i) Your team's %s is ready!" : "{darkviolet}[{forestgreen}CORE{darkviolet}] {white}(%i/%i) Your team recently deployed a %s! Please wait for the next bomb."), bombState[0].state, bombState[0].stateMax, bombState[RoundToFloor(bombState[0].state / 8.0)].name);
CPrintToChat(client, bombStatusMsg);
return Plugin_Handled;
}
//Return the client to spawn
public Action Command_Return(int client, int args) {
if (!IsPlayerAlive(client)) {
CPrintToChat(client, "{red}[Core] You must be alive to use this command...");
return Plugin_Handled;
}
char name[128];
GetClientName(client, name, sizeof(name));
CPrintToChatAll("{darkviolet}[{forestgreen}CORE{darkviolet}] {white}Client {red}%s {white}began casting {darkviolet}/return{white}.", name);
CustomSoundEmitter(SFXArray[41].realPath, 65, false, 0, 1.0, 100);
CreateTimer(5.0, ReturnClient, client);
return Plugin_Handled;
}
//Return the client to spawn
public Action ReturnClient(Handle timer, int clientID) {
TeleportEntity(clientID, Return, NULL_VECTOR, NULL_VECTOR);
CSEClient(clientID, SFXArray[42].realPath, 65, false, 0, 1.0, 100);
return Plugin_Handled;
}
//Join us on Discord!
public Action Command_Discord(int client, int args) {
CPrintToChat(client, "{darkviolet}[{forestgreen}CORE{darkviolet}] {white}Our Discord server URL is {darkviolet}https://discord.com/invite/ZfUUQWxCmw{white}.");
ShowMOTDPanel(client, "FireHostRedux Discord", "https://discord.com/invite/ZfUUQWxCmw", MOTDPANEL_TYPE_URL);
return Plugin_Handled;
}
//Operator, core of the entire map
public Action Command_Operator(int args) {
char arg1[16];
GetCmdArg(1, arg1, sizeof(arg1));
sudo(StringToInt(arg1));
return Plugin_Continue;
}