Full code. Only last line of GlowMenu.txt gets added to the menu.
PHP Code:
/* Sublime AMXX Editor v2.2 */
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <colorchat>
#define iRandom random_num(10, 255) // Used to set random colors.
#pragma semicolon 1
new const szVersion[] = "2.0.0";
new const szLangData[] = "glowmenulang.txt";
#if AMXX_VERSION_NUM < 183
new szTemp[250]
#endif
// say & say_team commands.
new const szCommands[][] = {
"/glowmenu",
"/gm",
"/glow",
"!glowmenu",
"!gm",
"!glow"
};
// ML Support for menu's.
new const szMainMenuText[][] = {
"MENU_GLOW_TARGET",
"MENU_GLOW_SELF",
"MENU_ALL_RANDOM",
"MENU_GLOW_ALL",
"MENU_REMOVE_GLOW"
};
new const szRemoveMenuText[][] = {
"MENU_REMOVE_OWN_GLOW",
"MENU_REMOVE_PLAYER_GLOW",
"MENU_REMOVE_ALL_GLOW"
};
new Trie:tColors;
enum _:eColors {
szColorName[20],
r,
g,
b
};
new szColorData[eColors];
// Used to find player later on.
new iGlowTarget; // Declare global since we have to enter one more menu.
// pCvars
new pAdminsOnly;
new pMessages;
// bools
new bool:bGlowTarget;
new bool:bGlowAll;
public plugin_init() {
register_plugin("Advanced Glow Menu", szVersion, "NapoleoN#");
register_dictionary(szLangData); // Register our ML File.
#if AMXX_VERSION_NUM < 183
new szChat[150];
#endif
for(new i; i < sizeof(szCommands); i++) {
#if AMXX_VERSION_NUM < 183
formatex(szChat, charsmax(szChat), "say %s", szCommands[i]);
register_clcmd(szChat, "CheckSettings");
formatex(szChat, charsmax(szChat), "say_team %s", szCommands[i]);
register_clcmd(szChat, "CheckSettings");
#else
register_clcmd(fmt("say %s", szCommands[i]), "CheckSettings");
register_clcmd(fmt("say_team %s", szCommands[i]), "CheckSettings");
#endif
}
pAdminsOnly = register_cvar("glow_adminsonly", "1");
pMessages = register_cvar("glow_messages", "1");
tColors = TrieCreate();
ReadFile();
}
public CheckSettings(id) {
if(get_user_flags(id) & ADMIN_KICK || !get_pcvar_num(pAdminsOnly)) {
new iMainMenu;
#if AMXX_VERSION_NUM < 183
formatex(szTemp, charsmax(szTemp), "%L", id, "MAIN_MENU_HEADER");
iMainMenu = menu_create(szTemp, "MainMenuHandler");
#else
iMainMenu = menu_create(fmt("%L", id, "MAIN_MENU_HEADER"), "MainMenuHandler");
#endif
for(new i; i < sizeof(szMainMenuText); i++) {
#if AMXX_VERSION_NUM < 183
formatex(szTemp, charsmax(szTemp), "%L", id, szMainMenuText[i]);
menu_additem(iMainMenu, szTemp);
#else
menu_additem(iMainMenu, fmt("%L", id, szMainMenuText[i]));
#endif
}
menu_display(id, iMainMenu);
}
}
public MainMenuHandler(id, iMainMenu, item) {
switch(item) {
case 0: GlowTarget(id);
case 1: GlowYourSelf(id);
case 2: GlowAllRandom(id);
case 3: GlowAll(id);
case 4: RemoveGlowMenu(id);
// case 5: GlowAimTarget(id);
}
menu_destroy(iMainMenu);
}
public ColorMenuHandler(id, iColorMenu, item) {
if(item != MENU_EXIT) {
new szRGB[50], szR[4], szG[4], szB[4], szItem[15], iRed, iGreen, iBlue, iAccess;
menu_item_getinfo(iColorMenu, item, iAccess, szRGB, charsmax(szRGB));
parse(szRGB, szR, charsmax(szR), szG, charsmax(szG), szB, charsmax(szB), szItem, charsmax(szItem));
iRed = str_to_num(szR);
iGreen = str_to_num(szG);
iBlue = str_to_num(szB);
if(bGlowTarget) {
if(is_user_alive(iGlowTarget)) {
new szTargName[32];
get_user_name(iGlowTarget, szTargName, charsmax(szTargName));
set_user_glow(iGlowTarget, iRed, iGreen, iBlue);
bGlowTarget = false;
if(get_pcvar_num(pMessages)) {
new szName[32];
get_user_name(id, szName, charsmax(szName));
ColorChat(0, GREEN, "%L", LANG_PLAYER, "MSG_TARGET", szName, szTargName, szItem);
}
}
}
else if(bGlowAll) {
new iPlayers[32], iNum;
get_players(iPlayers, iNum, "a");
for(new i; i < iNum; i++) {
set_user_glow(iPlayers[i], iRed, iGreen, iBlue);
}
bGlowAll = false;
if(get_pcvar_num(pMessages)) {
new szName[32];
get_user_name(id, szName, charsmax(szName));
ColorChat(0, GREEN, "%L", LANG_PLAYER, "MSG_GLOW_ALL", szName, szItem);
}
}
else if(is_user_alive(id)) {
set_user_glow(id, iRed, iGreen, iBlue);
if(get_pcvar_num(pMessages)) {
new szName[32];
get_user_name(id, szName, charsmax(szName));
ColorChat(0, GREEN, "%L", LANG_PLAYER, "MSG_GLOWING", szName, szItem);
}
}
}
else if((bGlowTarget || bGlowAll) && item == MENU_EXIT) {
bGlowTarget = false;
bGlowAll = false;
}
}
public GlowTarget(id) {
new iPlayerMenu;
FormatPlayerMenu(id, iPlayerMenu, "%L", "CHOOSE_PLAYER_GLOW", "GlowPlayerHandler");
bGlowTarget = true;
}
public GlowPlayerHandler(id, iPlayerMenu, item) {
if(item != MENU_EXIT) {
new szData[6], szName[64], iAccess, iCallBack;
menu_item_getinfo(iPlayerMenu, item, iAccess, szData, charsmax(szData), szName, charsmax(szName), iCallBack);
new iUserId = str_to_num(szData);
iGlowTarget = find_player("k", iUserId);
if(iGlowTarget) {
new iColorMenu;
if(TrieGetArray(tColors, szColorData[szColorName], szColorData, sizeof(szColorData))) {
#if AMXX_VERSION_NUM < 183
formatex(szTemp, charsmax(szTemp), "%L", id, "MENU_CHOOSE_COLOR");
iColorMenu = menu_create(szTemp, "ColorMenuHandler");
#else
iColorMenu = menu_create(fmt("%L", id, "MENU_CHOOSE_COLOR"), "ColorMenuHandler");
#endif
new szInfo[50], szItem[250];
formatex(szInfo, charsmax(szInfo), "%i %i %i %s", szColorData[r], szColorData[g], szColorData[b], szColorData[szColorName]);
formatex(szItem, charsmax(szItem), "%s", szColorData[szColorName]);
menu_additem(iColorMenu, szItem, szInfo);
ColorChat(id, GREEN, "%s", szInfo);
ColorChat(id, GREEN, "%s", szItem);
}
menu_display(id, iColorMenu);
}
}
else {
bGlowTarget = false;
}
menu_destroy(iPlayerMenu);
}
public GlowYourSelf(id) {
//menu_display(id, iColorMenu);
}
public GlowAllRandom(id) {
new iPlayers[32], iNum;
get_players(iPlayers, iNum);
for(new i; i < iNum; i++) {
set_user_glow(iPlayers[i], iRandom, iRandom, iRandom);
}
if(get_pcvar_num(pMessages)) {
new szName[32];
get_user_name(id, szName, charsmax(szName));
ColorChat(0, GREEN, "%L", LANG_PLAYER, "MSG_RANDOM_GLOW", szName);
}
}
public GlowAll(id) {
//menu_display(id, iColorMenu);
bGlowAll = true;
}
public RemoveGlowMenu(id) {
new iRemoveMenu;
#if AMXX_VERSION_NUM < 183
formatex(szTemp, charsmax(szTemp), "%L", id, "REMOVE_MENU_HEADER");
iRemoveMenu = menu_create(szTemp, "RemoveGlowHandler");
#else
iRemoveMenu = menu_create(fmt("%L", id, "REMOVE_MENU_HEADER"), "RemoveGlowHandler");
#endif
for(new i; i < sizeof(szRemoveMenuText); i++) {
#if AMXX_VERSION_NUM < 183
formatex(szTemp, charsmax(szTemp), "%L", id, szRemoveMenuText[i]);
menu_additem(iRemoveMenu, szTemp);
#else
menu_additem(iRemoveMenu, fmt("%L", id, szRemoveMenuText[i]));
#endif
}
menu_display(id, iRemoveMenu);
}
public RemoveGlowHandler(id, iRemoveMenu, item) {
switch(item) {
case 0: set_user_glow(id);
case 1: RemoveGlowPlayer(id);
case 2: RemoveGlowAll(id);
}
menu_destroy(iRemoveMenu);
}
public RemoveGlowPlayer(id) {
new iPlayerMenu;
FormatPlayerMenu(id, iPlayerMenu, "%L", "CHOOSE_PLAYER_REMOVE", "RemovePlayerHandler");
}
public RemovePlayerHandler(id, iPlayerMenu, item) {
if(item != MENU_EXIT) {
new szData[6], szTargName[64], iAccess, iCallBack;
menu_item_getinfo(iPlayerMenu, item, iAccess, szData, charsmax(szData), szTargName, charsmax(szTargName), iCallBack);
new iUserId = str_to_num(szData);
new iTarget = find_player("k", iUserId);
if(iTarget && is_user_alive(iTarget)) {
set_user_glow(iTarget);
if(get_pcvar_num(pMessages)) {
new szName[32];
get_user_name(id, szName, charsmax(szName));
get_user_name(iTarget, szTargName, charsmax(szTargName));
ColorChat(0, GREEN, "%L", LANG_PLAYER, "MSG_REMOVE_GLOW", szName, szTargName);
}
}
}
menu_destroy(iPlayerMenu);
}
public RemoveGlowAll(id) {
new iPlayers[32], iNum;
get_players(iPlayers, iNum);
for(new i; i < iNum; i++) {
set_user_glow(iPlayers[i]);
}
if(get_pcvar_num(pMessages)) {
new szName[32];
get_user_name(id, szName, charsmax(szName));
ColorChat(0, GREEN, "%L", LANG_PLAYER, "MSG_REMOVE_ALL", szName);
}
}
stock set_user_glow(id, iR = 0, iG = 0, iB = 0) {
set_user_rendering(id, kRenderFxGlowShell, iR, iG, iB, kRenderNormal, 25);
}
ReadFile() {
/*#if AMXX_VERSION_NUM < 183
formatex(szTemp, charsmax(szTemp), "%L", LANG_PLAYER, "MENU_CHOOSE_COLOR");
iColorMenu = menu_create(szTemp, "ColorMenuHandler");
#else
iColorMenu = menu_create(fmt("%L", LANG_PLAYER, "MENU_CHOOSE_COLOR"), "ColorMenuHandler");
#endif*/
new iFilePointer = fopen("addons/amxmodx/configs/GlowMenu.txt", "rt");
//new szLine[64], szText[32], szColor[16];
new szLine[64], szRed[4], szGreen[4], szBlue[4];
while(fgets(iFilePointer, szLine, charsmax(szLine))) {
trim(szLine);
if(szLine[0] == EOS || szLine[0] == ';' || (szLine[0] == '/' && szLine[1] == '/')) {
continue;
}
parse(szLine, szColorData[szColorName], charsmax(szColorData[szColorName]), szRed, charsmax(szRed), szGreen, charsmax(szGreen), szBlue, charsmax(szBlue));
szColorData[r] = str_to_num(szRed);
szColorData[g] = str_to_num(szGreen);
szColorData[b] = str_to_num(szBlue);
TrieSetArray(tColors, szColorData[szColorName], szColorData, sizeof(szColorData));
log_amx("Color: %s | RGB: %i %i %i", szColorData[szColorName], szColorData[r], szColorData[g], szColorData[b]);
log_amx("%s", szColorData);
/*split(szLine, szColor, charsmax(szColor), szLine, charsmax(szLine), " ");
remove_quotes(szColor);
format(szText, charsmax(szText), "%s", szColor);
log_amx("Color: %s - RGB: %s", szText, szLine);
add(szLine, charsmax(szLine), szColor);
menu_additem(iColorMenu, szText, szLine);*/
}
fclose(iFilePointer);
}
public FormatPlayerMenu(id, iPlayerMenu, szHeader[], szData[], szHandler[]) {
#if AMXX_VERSION_NUM < 183
formatex(szTemp, charsmax(szTemp), szHeader, id, szData);
iPlayerMenu = menu_create(szTemp, szHandler);
#else
iPlayerMenu = menu_create(fmt(szHeader, id, szData), szHandler);
#endif
new iPlayers[32], iNum, szName[32], szUserId[32];
get_players(iPlayers, iNum, "a");
for(new i; i < iNum; i++) {
get_user_name(iPlayers[i], szName, charsmax(szName));
num_to_str(get_user_userid(iPlayers[i]), szUserId, charsmax(szUserId));
menu_additem(iPlayerMenu, szName, szUserId);
}
menu_display(id, iPlayerMenu);
}