263 lines
9.6 KiB
SourcePawn
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;
|
|
} |