Here look at this. I'm wanting to enable and disable colors for the messages. How am I suppose to format it now? With the same trie?
PHP Code:
#pragma semicolon 1
#include <sourcemod>
#include <morecolors>
new Handle:message_trie;
new Handle:configFile = INVALID_HANDLE;
new String:MenuTitle[64];
public OnPluginStart()
{
RegAdminCmd("sm_message", Command_Message, ADMFLAG_SLAY, "Menu of Messages");
message_trie = CreateTrie();
}
public Action:Command_Message(client, args)
{
if(IsClientInGame(client))
{
decl Handle:Menu;
Menu = CreateMenu(MessageCallback);
SetMenuTitle(Menu, "Message Menu");
AddMenuItem(Menu, "0", "Sayings");
AddMenuItem(Menu, "1", "Enable / Disable Sayings");
AddMenuItem(Menu, "2", "Enable / Disable Colored Sayings");
DisplayMenu(Menu, client, MENU_TIME_FOREVER);
}
return Plugin_Handled;
}
public MessageCallback(Handle:menu, MenuAction:action, client, param2)
{
if(action == MenuAction_Select)
{
decl String:info[64];
GetMenuItem(menu, param2, info, sizeof(info));
if (StrEqual(info,"0"))
{
SayingsMenu(client);
}
if (StrEqual(info,"1"))
{
ControlSayingsMenu(client);
}
if (StrEqual(info,"2"))
{
SayingColorMenu(client);
}
}
else if(action == MenuAction_End)
{
CloseHandle(menu);
}
}
public SayingsMenu(client)
{
if(IsClientInGame(client))
{
decl Handle:menu;
menu = CreateMenu(SayingsCallback);
SetMenuTitle(menu, "Sayings");
new String:sMessage[32];
decl String:path[64];
configFile = CreateKeyValues("Sayings");
BuildPath(Path_SM, path, sizeof(path), "configs/Sayings.cfg");
if (FileToKeyValues(configFile, path))
{
KvRewind(configFile);
KvGotoFirstSubKey(configFile);
do
{
KvGetString(configFile, "saying", sMessage, sizeof(sMessage));
if(SayingEnabled(sMessage))
{
AddMenuItem(menu, sMessage, sMessage);
}
}
while(KvGotoNextKey(configFile));
}
SetMenuExitBackButton(menu, true);
DisplayMenu(menu, client, MENU_TIME_FOREVER);
}
}
public SayingsCallback(Handle:menu, MenuAction:action, client, param2)
{
if(action == MenuAction_End) CloseHandle(menu);
if(action == MenuAction_Cancel && param2 == MenuCancel_ExitBack) FakeClientCommand(client, "sm_message");
if(action == MenuAction_Select)
{
new String:info[32];
GetMenuItem(menu, param2, info, sizeof(info));
if(SayingColorEnabled(sMessage)) //Help on This
{
CPrintToChat(client, "{blue} %s", info);
}
else
{
PrintToChat(client, info);
}
}
}
public SayingColorMenu(client)
{
if(IsClientInGame(client))
{
decl Handle:Menu;
Menu = CreateMenu(ColorCallback);
SetMenuTitle(Menu, MenuTitle);
new String:sMessage[32];
decl String:path[64];
new String:dMessage[64];
configFile = CreateKeyValues("Chat Colors");
BuildPath(Path_SM, path, sizeof(path), "configs/Sayings.cfg");
if (FileToKeyValues(configFile, path))
{
KvRewind(configFile);
KvGotoFirstSubKey(configFile);
do
{
KvGetString(configFile, "saying", sMessage, sizeof(sMessage));
if(SayingColorEnabled(sMessage)) //Help on This
{
Format(dMessage, sizeof(dMessage), "Disable Color: %s", sMessage);
AddMenuItem(Menu, sMessage, dMessage);
}
else
{
Format(dMessage, sizeof(dMessage), "Enable Color: %s", sMessage);
AddMenuItem(Menu, sMessage, dMessage);
}
}
while(KvGotoNextKey(configFile));
}
SetMenuExitBackButton(Menu, true);
DisplayMenu(Menu, client, MENU_TIME_FOREVER);
}
}
public ColorCallback(Handle:menu, MenuAction:action, client, param2)
{
if(action == MenuAction_End) CloseHandle(menu);
if(action == MenuAction_Cancel && param2 == MenuCancel_ExitBack) FakeClientCommand(client, "sm_message");
if(action == MenuAction_Select)
{
new String:info[32];
GetMenuItem(menu, param2, info, sizeof(info));
SwitchColorMessage(info); //Help on This
}
}
public ControlSayingsMenu(client)
{
if(IsClientInGame(client))
{
decl Handle:Menu;
Menu = CreateMenu(ControlCallback);
SetMenuTitle(Menu, "Enable/Disable Sayings");
new String:sMessage[32];
decl String:path[64];
new String:dMessage[64];
configFile = CreateKeyValues("Chat Colors");
BuildPath(Path_SM, path, sizeof(path), "configs/Sayings.cfg");
if (FileToKeyValues(configFile, path))
{
KvRewind(configFile);
KvGotoFirstSubKey(configFile);
do
{
KvGetString(configFile, "saying", sMessage, sizeof(sMessage));
Format(dMessage, sizeof(dMessage), "%s", sMessage);
if(SayingEnabled(sMessage))
{
Format(dMessage, sizeof(dMessage), "Disable: %s", sMessage);
AddMenuItem(Menu, sMessage, dMessage);
}
else
{
Format(dMessage, sizeof(dMessage), "Enable: %s", sMessage);
AddMenuItem(Menu, sMessage, dMessage);
}
}
while(KvGotoNextKey(configFile));
}
SetMenuExitBackButton(Menu, true);
DisplayMenu(Menu, client, MENU_TIME_FOREVER);
}
}
public ControlCallback(Handle:menu, MenuAction:action, client, param2)
{
if(action == MenuAction_End) CloseHandle(menu);
if(action == MenuAction_Cancel && param2 == MenuCancel_ExitBack) FakeClientCommand(client, "sm_message");
if(action == MenuAction_Select)
{
new String:info[32];
GetMenuItem(menu, param2, info, sizeof(info));
SwitchMessage(info);
}
}
SwitchMessage(const String:message[32])
{
new value;
GetTrieValue(message_trie, message, value);
SetTrieValue(message_trie, message, (value+1)%2);
}
bool:SayingEnabled(const String:message[32])
{
new value;
new found = GetTrieValue(message_trie, message, value);
if(found)
{
if(value == 0)
{
return false;
}
return true;
}
SetTrieValue(message_trie, message, 1);
return true;
}