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

180 lines
5.5 KiB
SourcePawn

#include <chill_helper>
#include <morecolors>
#include <sourcemod>
#pragma newdecls required
#pragma semicolon 1
static char PLUGIN_VERSION[8] = "1.0.0";
public Plugin myinfo = {
name = "Chill Skies - Menus",
author = "Fartsy",
description = "Menu plugin for Chill Skies",
version = PLUGIN_VERSION,
url = "https://forums.firehostredux.com"
};
public void OnPluginStart() {
RegisterAllMenus();
RegConsoleCmd("sm_discord", Command_ShowDiscordMenu, "Show the chill skies discord thing");
RegConsoleCmd("sm_rules", Command_ShowRulesMenu, "Show the chill skies rules thing");
RegConsoleCmd("sm_votes", Command_ShowVotesMenu, "Show the chill skies votes thing");
}
//Send client Discord menu
public Action Command_ShowDiscordMenu(int client, int args) {
if (IsValidClient(client)) {
Menu menu = new Menu(MenuHandlerDiscord, MENU_ACTIONS_DEFAULT);
char buffer[100];
menu.SetTitle(DiscordMenu[0].title);
for (int i = 0; i < DiscordMenu[0].size; i++) menu.AddItem(buffer, DiscordMenu[i].item);
menu.ExitButton = true;
menu.Display(client, 20);
}
return Plugin_Handled;
}
public int MenuHandlerDiscord(Menu menu, MenuAction action, int client, int choice) {
if (action == MenuAction_Select) {
//DiscordMenu[choice].select();
switch (choice) {
case 0: {
ShowMOTDPanel(client, DiscordMenu[0].alias, DiscordMenu[0].url, MOTDPANEL_TYPE_URL);
CPrintToChat(client, "Our Discord server invite is {violet}%s", DiscordMenu[0].url);
}
}
} else if (action == MenuAction_End) CloseHandle(menu);
return 0;
}
//Send client rules menu
public Action Command_ShowRulesMenu(int client, int args) {
if (IsValidClient(client)) {
Menu menu = new Menu(MenuHandlerRules, MENU_ACTIONS_DEFAULT);
char buffer[100];
menu.SetTitle(RulesMenu[0].title);
for (int i = 0; i < RulesMenu[0].size; i++) menu.AddItem(buffer, RulesMenu[i].item);
menu.ExitButton = true;
menu.Display(client, 20);
}
return Plugin_Handled;
}
public int MenuHandlerRules(Menu menu, MenuAction action, int client, int choice) {
if (action == MenuAction_Select) {
PrintHintText(client, RulesMenu[choice].hintText);
Command_ShowRulesMenu(client, 0);
} else if (action == MenuAction_End) CloseHandle(menu);
return 0;
}
//Send clients votes menu
public Action Command_ShowVotesMenu(int client, int args) {
if (IsValidClient(client)) {
Menu menu = new Menu(MenuHandlerVotes, MENU_ACTIONS_DEFAULT);
char buffer[100];
menu.SetTitle("Chill Skies Votes"); //VotesMenu[0].title
menu.AddItem(buffer, "Toggle AllTalk");
menu.AddItem(buffer, "Toggle RTD");
//menu.AddItem(buffer, "Example Vote");
menu.ExitButton = true;
menu.Display(client, 20);
}
return Plugin_Handled;
}
public int MenuHandlerVotes(Menu menu, MenuAction action, int client, int choice) {
if (action == MenuAction_Select) {
menuData = choice;
PrintToChatAll("%i", menuData);
ShowVoteMenu(client);
}
return 0;
}
public void ShowVoteMenu(int client) {
switch (menuData) {
case 0: {
if (!IsVoteInProgress()) {
Menu menu = new Menu(MenuHandlerVoting);
menu.SetTitle("Enable AllTalk?");
menu.AddItem("yes", "Yes");
menu.AddItem("no", "No");
menu.ExitButton = false;
menu.DisplayVoteToAll(20);
PrintToChatAll("[Chill Skies] AllTalk vote has started! Vote now!");
}
}
case 1: {
if (!IsVoteInProgress()) {
Menu menu = new Menu(MenuHandlerVoting);
menu.SetTitle("Enable RTD?");
menu.AddItem("yes", "Yes");
menu.AddItem("no", "No");
menu.ExitButton = false;
menu.DisplayVoteToAll(20);
PrintToChatAll("[Chill Skies] RTD vote has started! Vote now!");
}
}
/* To add a new menu, add a new case and copy the template above. */
/*
case 2:{
if (!IsVoteInProgress()){
Menu menu = new Menu(MenuHandlerVoting);
menu.SetTitle("Example Vote?");
menu.AddItem("yes", "Yes");
menu.AddItem("no", "No");
menu.ExitButton = false;
menu.DisplayVoteToAll(20);
PrintToChatAll("[Chill Skies] Example vote has started! Vote now!");
}
}
*/
}
}
public int MenuHandlerVoting(Menu menu, MenuAction action, int result, int choice) {
if (action == MenuAction_End) delete menu;
if (action == MenuAction_VoteStart) {
CPrintToChatAll("{red} Voting. %N chose %i", result, choice);
}
else if (action == MenuAction_VoteEnd) {
switch (menuData) {
case 0: {
if (result == 0) {
PrintToChatAll("[Chill Skies] AllTalk vote has ended! AllTalk will turn on!");
ServerCommand("sv_alltalk 1");
}
if (result == 1) {
PrintToChatAll("[Chill Skies] AllTalk vote has ended! AllTalk will turn off!");
ServerCommand("sv_alltalk 0");
}
}
case 1: {
if (result == 0) {
PrintToChatAll("[Chill Skies] RTD vote has ended! RTD will be enabled!");
ServerCommand("sm_cvar sm_rtd2_enabled 1");
}
if (result == 1) {
PrintToChatAll("[Chill Skies] RTD vote has ended! RTD will be disabled!");
ServerCommand("sm_cvar sm_rtd2_enabled 0");
}
}
/* When adding new votes, make sure to increment case #. */
/*
case 2:{
if(result == 0){
PrintToChatAll("[Chill Skies] This is an example vote. The result was yes.");
ServerCommand("sm_thingToDoWhenYES");
}
if(result == 1){
PrintToChatAll("[Chill Skies] This is an example vote. The result was no.");
ServerCommand("sm_thingToDoWhenNO");
}
}
*/
}
}
return 0;
}