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

263 lines
9.6 KiB
SourcePawn

#include <sourcemod>
#include <sdktools>
#pragma newdecls required;
bool isStorm = false;
static char PLUGIN_VERSION[8] = "1.0.0";
static char GLOBALTHUNDER01[32] = "fartsy/weather/thunder1.wav";
static char GLOBALTHUNDER02[32] = "fartsy/weather/thunder2.wav";
static char GLOBALTHUNDER03[32] = "fartsy/weather/thunder3.wav";
static char GLOBALTHUNDER04[32] = "fartsy/weather/thunder4.wav";
static char GLOBALTHUNDER05[32] = "fartsy/weather/thunder5.wav";
static char GLOBALTHUNDER06[32] = "fartsy/weather/thunder6.wav";
static char GLOBALTHUNDER07[32] = "fartsy/weather/thunder7.wav";
static char GLOBALTHUNDER08[32] = "fartsy/weather/thunder8.wav";
static int SFXSNDLVL = 75;
static int SNDCHAN = 6;
public Plugin myinfo = {
name = "Operabay's Test Plugin",
author = "Fartsy#8998",
description = "Test weather system",
version = PLUGIN_VERSION,
url = "https://forums.firehostredux.com"
};
public void OnPluginStart(){
PrecacheSound(GLOBALTHUNDER01, true);
PrecacheSound(GLOBALTHUNDER02, true);
PrecacheSound(GLOBALTHUNDER03, true);
PrecacheSound(GLOBALTHUNDER04, true);
PrecacheSound(GLOBALTHUNDER05, true);
PrecacheSound(GLOBALTHUNDER06, true);
PrecacheSound(GLOBALTHUNDER07, true);
PrecacheSound(GLOBALTHUNDER08, true);
RegAdminCmd("sm_weather", Command_Weather, ADMFLAG_ROOT, "Change map weather conditions");
}
public void OnMapStart(){
FireEntityInput("OB.Rain", "Alpha", "0", 0.0);
}
public Action Command_Weather(int client, int args){
ShowWeatherMenu(client);
}
public void ShowWeatherMenu(int client) {
Menu menu = new Menu(MenuHandlerWeather, MENU_ACTIONS_DEFAULT);
char buffer[100];
menu.SetTitle("Operabay Weather Menu");
menu.AddItem(buffer, "Partly Cloudy");
menu.AddItem(buffer, "Mostly Cloudy");
menu.AddItem(buffer, "Rainy");
menu.AddItem(buffer, "Stormy");
menu.AddItem(buffer, "Night");
menu.Display(client, 20);
menu.ExitButton = true;
}
public int MenuHandlerWeather(Menu menu, MenuAction action, int p1, int p2) {
if (action == MenuAction_Select) {
int steamID = GetSteamAccountID(p1);
if (!steamID) {
return;
} else {
switch(p2){
case 0:{
PrintToChat(p1, "You selected Partly Cloudy.");
ChangeWeather(0);
}
case 1:{
PrintToChat(p1, "You selected Mostly Cloudy");
ChangeWeather(1);
}
case 2:{
PrintToChat(p1, "You selected Rainy");
ChangeWeather(2);
}
case 3:{
PrintToChat(p1, "You selected Stormy");
ChangeWeather(3);
}
case 4:{
PrintToChat(p1, "You selected Night.");
ChangeWeather(4);
}
}
}
} else if (action == MenuAction_End) {
CloseHandle(menu);
}
}
public void ChangeWeather(int type){
switch(type){
case 0:{
isStorm = false;
FireEntityInput("OB.Daylight", "TurnOn", "", 0.0);
FireEntityInput("OB.WeatherSystem", "Skin", "0", 0.0);
FireEntityInput("OB.Rain", "Alpha", "0", 0.0);
}
case 1:{
isStorm = false;
FireEntityInput("OB.Daylight", "TurnOn", "", 0.0);
FireEntityInput("OB.WeatherSystem", "Skin", "1", 0.0);
FireEntityInput("OB.Rain", "Alpha", "0", 0.0);
}
case 2:{
isStorm = false;
FireEntityInput("OB.Daylight", "TurnOff", "", 0.0);
FireEntityInput("OB.WeatherSystem", "Skin", "2", 0.0);
FireEntityInput("OB.Rain", "Alpha", "100", 0.0);
}
case 3:{
isStorm = true;
CreateTimer(1.0, RefireStorm);
FireEntityInput("OB.Daylight", "TurnOff", "", 0.0);
FireEntityInput("OB.WeatherSystem", "Skin", "3", 0.0);
FireEntityInput("OB.Rain", "Alpha", "200", 0.0);
}
case 4:{
isStorm = false;
FireEntityInput("OB.Daylight", "TurnOff", "", 0.0);
}
}
return;
}
public Action FireEntityInput(char[] strTargetname, char[] strInput, char[] strParameter, float flDelay) {
char strBuffer[255];
Format(strBuffer, sizeof(strBuffer), "OnUser1 %s:%s:%s:%f:1", strTargetname, strInput, strParameter, flDelay);
//PrintToChatAll("{limegreen}[CORE] {white}Firing entity %s with input %s , a parameter override of %s , and delay of %f ...", strTargetname, strInput, strParameter, flDelay);
int entity = CreateEntityByName("info_target");
if (IsValidEdict(entity)) {
DispatchSpawn(entity);
ActivateEntity(entity);
SetVariantString(strBuffer);
AcceptEntityInput(entity, "AddOutput");
AcceptEntityInput(entity, "FireUser1");
CreateTimer(0.0, DeleteEdict, entity);
return Plugin_Continue;
}
return Plugin_Handled;
}
public Action DeleteEdict(Handle timer, any entity) {
if (IsValidEdict(entity)) RemoveEdict(entity);
return Plugin_Stop;
}
public void StrikeLightning(){
FireEntityInput("lightning", "TurnOn", "", 0.0),
FireEntityInput("OB.WeatherSystem", "Skin", "4", 0.0),
FireEntityInput("OB.Daylight", "TurnOff", "", 0.0),
FireEntityInput("LightningLaser", "TurnOn", "", 0.0),
FireEntityInput("lightning" , "TurnOff", "", 0.1),
FireEntityInput("OB.WeatherSystem", "Skin", "3", 0.1),
FireEntityInput("LightningLaser", "TurnOff", "", 0.1),
FireEntityInput("lightning", "TurnOn", "", 0.17),
FireEntityInput("OB.WeatherSystem", "Skin", "4", 0.17),
FireEntityInput("LightningLaser", "TurnOn", "", 0.17),
FireEntityInput("lightning", "TurnOff", "", 0.25),
FireEntityInput("OB.WeatherSystem", "Skin", "3", 0.25),
FireEntityInput("LightningLaser", "TurnOff", "", 0.25);
}
//Timers
public Action RefireStorm(Handle timer) {
if (isStorm) {
float f = GetRandomFloat(7.0, 17.0);
CreateTimer(f, RefireStorm);
StrikeLightning();
int Thunder = GetRandomInt(1, 16);
switch (Thunder) {
case 1: {
CustomSoundEmitter(GLOBALTHUNDER01, SFXSNDLVL, false, 0, 1.0, 100);
FireEntityInput("LightningHurt00", "Enable", "", 0.0),
FireEntityInput("LightningHurt00", "Disable", "", 0.07);
}
case 2: {
CustomSoundEmitter(GLOBALTHUNDER02, SFXSNDLVL, false, 0, 1.0, 100);
FireEntityInput("LightningHurt01", "Enable", "", 0.0),
FireEntityInput("LightningHurt01", "Disable", "", 0.07);
}
case 3: {
CustomSoundEmitter(GLOBALTHUNDER03, SFXSNDLVL, false, 0, 1.0, 100);
FireEntityInput("LightningHurt02", "Enable", "", 0.0),
FireEntityInput("LightningHurt02", "Disable", "", 0.07);
}
case 4: {
CustomSoundEmitter(GLOBALTHUNDER04, SFXSNDLVL, false, 0, 1.0, 100);
FireEntityInput("LightningHurt03", "Enable", "", 0.0),
FireEntityInput("LightningHurt03", "Disable", "", 0.07);
}
case 5: {
CustomSoundEmitter(GLOBALTHUNDER05, SFXSNDLVL, false, 0, 1.0, 100);
FireEntityInput("LightningHurt04", "Enable", "", 0.0),
FireEntityInput("LightningHurt04", "Disable", "", 0.07);
}
case 6: {
CustomSoundEmitter(GLOBALTHUNDER06, SFXSNDLVL, false, 0, 1.0, 100);
FireEntityInput("LightningHurt05", "Enable", "", 0.0),
FireEntityInput("LightningHurt05", "Disable", "", 0.07);
}
case 7: {
CustomSoundEmitter(GLOBALTHUNDER07, SFXSNDLVL, false, 0, 1.0, 100);
FireEntityInput("LightningHurt06", "Enable", "", 0.0),
FireEntityInput("LightningHurt06", "Disable", "", 0.07);
}
case 8: {
CustomSoundEmitter(GLOBALTHUNDER08, SFXSNDLVL, false, 0, 1.0, 100);
FireEntityInput("LightningHurt07", "Enable", "", 0.0),
FireEntityInput("LightningHurt07", "Disable", "", 0.07);
}
case 9: {
CustomSoundEmitter(GLOBALTHUNDER01, SFXSNDLVL, false, 0, 1.0, 100);
FireEntityInput("LightningHurt08", "Enable", "", 0.0),
FireEntityInput("LightningHurt08", "Disable", "", 0.07);
}
case 10: {
CustomSoundEmitter(GLOBALTHUNDER02, SFXSNDLVL, false, 0, 1.0, 100);
FireEntityInput("LightningHurt09", "Enable", "", 0.0),
FireEntityInput("LightningHurt09", "Disable", "", 0.07);
}
case 11: {
CustomSoundEmitter(GLOBALTHUNDER03, SFXSNDLVL, false, 0, 1.0, 100);
FireEntityInput("LightningHurt0A", "Enable", "", 0.0),
FireEntityInput("LightningHurt0A", "Disable", "", 0.07);
}
case 12: {
CustomSoundEmitter(GLOBALTHUNDER04, SFXSNDLVL, false, 0, 1.0, 100);
FireEntityInput("LightningHurt0B", "Enable", "", 0.0),
FireEntityInput("LightningHurt0B", "Disable", "", 0.07);
}
case 13: {
CustomSoundEmitter(GLOBALTHUNDER05, SFXSNDLVL, false, 0, 1.0, 100);
FireEntityInput("LightningHurt0C", "Enable", "", 0.0),
FireEntityInput("LightningHurt0C", "Disable", "", 0.07);
}
case 14: {
CustomSoundEmitter(GLOBALTHUNDER06, SFXSNDLVL, false, 0, 1.0, 100);
FireEntityInput("LightningHurt0D", "Enable", "", 0.0),
FireEntityInput("LightningHurt0D", "Disable", "", 0.07);
}
case 15: {
CustomSoundEmitter(GLOBALTHUNDER07, SFXSNDLVL, false, 0, 1.0, 100);
FireEntityInput("LightningHurt0E", "Enable", "", 0.0),
FireEntityInput("LightningHurt0E", "Disable", "", 0.07);
}
case 16: {
CustomSoundEmitter(GLOBALTHUNDER08, SFXSNDLVL, false, 0, 1.0, 100);
FireEntityInput("LightningHurt0F", "Enable", "", 0.0),
FireEntityInput("LightningHurt0F", "Disable", "", 0.07);
}
}
}
return Plugin_Stop;
}
public Action CustomSoundEmitter(char[] sndName, int SNDLVL, bool isBGM, int flags, float vol, int pitch) {
for (int i = 1; i <= MaxClients; i++) {
if (IsClientInGame(i) && !IsFakeClient(i)){
EmitSoundToClient(i, sndName, _, SNDCHAN, SNDLVL, flags, vol, pitch, _, _, _, _, _);
}
}
return Plugin_Handled;
}