Raised This Month: $ Target: $400
 0% 

Solved FormatPlayerMenu()


Post New Thread Reply   
 
Thread Tools Display Modes
Napoleon_be
Veteran Member
Join Date: Jul 2011
Location: Belgium
Old 04-12-2020 , 11:10   Re: FormatPlayerMenu()
Reply With Quote #11

Quote:
Originally Posted by HamletEagle View Post
Read the file in a data structure(like an array/dynamic array/trie depending on the data and how it will be used) and use the structure to build the menu.
I/O is slow so you should interact with files as few times as possible.
Could you give me an example? This is what i have atm.
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"
};

// Global Menu's
new iColorMenu;

// 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 isizeof(szCommands); i++) {
        
#if AMXX_VERSION_NUM < 183
        
formatex(szChatcharsmax(szChat), "say %s"szCommands[i]);
        
register_clcmd(szChat"CheckSettings");

        
formatex(szChatcharsmax(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");

    
ReadFile();
}

public 
CheckSettings(id) {
    if(
get_user_flags(id) & ADMIN_KICK || !get_pcvar_num(pAdminsOnly)) {
        new 
iMainMenu;

        
#if AMXX_VERSION_NUM < 183
        
formatex(szTempcharsmax(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 isizeof(szMainMenuText); i++) {
            
#if AMXX_VERSION_NUM < 183
            
formatex(szTempcharsmax(szTemp), "%L",  idszMainMenuText[i]);
            
menu_additem(iMainMenuszTemp);
            
#else
            
menu_additem(iMainMenufmt("%L"idszMainMenuText[i]));
            
#endif
        
}
        
menu_display(idiMainMenu);
    }
}

public 
MainMenuHandler(idiMainMenuitem) {
    switch(
item) {
        case 
0GlowTarget(id);
        case 
1GlowYourSelf(id);
        case 
2GlowAllRandom(id);
        case 
3GlowAll(id);
        case 
4RemoveGlowMenu(id);
        
// case 5: GlowAimTarget(id);
    
}
    
menu_destroy(iMainMenu);
}

public 
ColorMenuHandler(idiColorMenuitem) {
    if(
item != MENU_EXIT) {
        new 
szRGB[50], szR[4], szG[4], szB[4], szItem[15], iRediGreeniBlueiAccess;
        
menu_item_getinfo(iColorMenuitemiAccessszRGBcharsmax(szRGB));

        
parse(szRGBszRcharsmax(szR), szGcharsmax(szG), szBcharsmax(szB), szItemcharsmax(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(iGlowTargetszTargNamecharsmax(szTargName));
                
set_user_glow(iGlowTargetiRediGreeniBlue);
                
bGlowTarget false;
                if(
get_pcvar_num(pMessages)) {
                    new 
szName[32];
                    
get_user_name(idszNamecharsmax(szName));

                    
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_TARGET"szNameszTargNameszItem);
                }
            }
        }

        else if(
bGlowAll) {
            new 
iPlayers[32], iNum;
            
get_players(iPlayersiNum"a");

            for(new 
iiNumi++) {
                
set_user_glow(iPlayers[i], iRediGreeniBlue);
            }

            
bGlowAll false;
            if(
get_pcvar_num(pMessages)) {
                new 
szName[32];
                
get_user_name(idszNamecharsmax(szName));

                
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_GLOW_ALL"szNameszItem);
            }
        }

        else if(
is_user_alive(id)) {
            
set_user_glow(idiRediGreeniBlue);
            if(
get_pcvar_num(pMessages)) {
                new 
szName[32];
                
get_user_name(idszNamecharsmax(szName));

                
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_GLOWING"szNameszItem);
            }
        }
    }

    else if((
bGlowTarget || bGlowAll) && item == MENU_EXIT) {
        
bGlowTarget false;
        
bGlowAll false;
    }
}

public 
GlowTarget(id) {
    new 
iPlayerMenu;
    
FormatPlayerMenu(idiPlayerMenu"%L""CHOOSE_PLAYER_GLOW""GlowPlayerHandler");
    
bGlowTarget true;
}

public 
GlowPlayerHandler(idiPlayerMenuitem) {
    if(
item != MENU_EXIT) {
        new 
szData[6], szName[64], iAccessiCallBack;
        
menu_item_getinfo(iPlayerMenuitemiAccessszDatacharsmax(szData), szNamecharsmax(szName), iCallBack);

        new 
iUserId str_to_num(szData);
        
iGlowTarget find_player("k"iUserId);

        if(
iGlowTarget) {
            
menu_display(idiColorMenu);
        }
    }

    else {
        
bGlowTarget false;
    }
    
menu_destroy(iPlayerMenu);
}

public 
GlowYourSelf(id) {
    
menu_display(idiColorMenu);
}

public 
GlowAllRandom(id) {
    new 
iPlayers[32], iNum;
    
get_players(iPlayersiNum);

    for(new 
iiNumi++) {
        
set_user_glow(iPlayers[i], iRandomiRandomiRandom);
    }

    if(
get_pcvar_num(pMessages)) {
        new 
szName[32];
        
get_user_name(idszNamecharsmax(szName));

        
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_RANDOM_GLOW"szName);
    }
}

public 
GlowAll(id) {
    
menu_display(idiColorMenu);
    
bGlowAll true;
}

public 
RemoveGlowMenu(id) {
    new 
iRemoveMenu;

    
#if AMXX_VERSION_NUM < 183
    
formatex(szTempcharsmax(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 isizeof(szRemoveMenuText); i++) {
        
#if AMXX_VERSION_NUM < 183
        
formatex(szTempcharsmax(szTemp), "%L"idszRemoveMenuText[i]);
        
menu_additem(iRemoveMenuszTemp);
        
#else
        
menu_additem(iRemoveMenufmt("%L"idszRemoveMenuText[i]));
        
#endif
    
}
    
menu_display(idiRemoveMenu);
}

public 
RemoveGlowHandler(idiRemoveMenuitem) {
    switch(
item) {
        case 
0set_user_glow(id);
        case 
1RemoveGlowPlayer(id);
        case 
2RemoveGlowAll(id);
    }
    
menu_destroy(iRemoveMenu);
}

public 
RemoveGlowPlayer(id) {
    new 
iPlayerMenu;
    
FormatPlayerMenu(idiPlayerMenu"%L""CHOOSE_PLAYER_REMOVE""RemovePlayerHandler");
}

public 
RemovePlayerHandler(idiPlayerMenuitem) {
    if(
item != MENU_EXIT) {
        new 
szData[6], szTargName[64], iAccessiCallBack;
        
menu_item_getinfo(iPlayerMenuitemiAccessszDatacharsmax(szData), szTargNamecharsmax(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(idszNamecharsmax(szName));
                
get_user_name(iTargetszTargNamecharsmax(szTargName));

                
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_REMOVE_GLOW"szNameszTargName);
            }
        }
    }
    
menu_destroy(iPlayerMenu);
}

public 
RemoveGlowAll(id) {
    new 
iPlayers[32], iNum;
    
get_players(iPlayersiNum);

    for(new 
iiNumi++) {
        
set_user_glow(iPlayers[i]);
    }

    if(
get_pcvar_num(pMessages)) {
        new 
szName[32];
        
get_user_name(idszNamecharsmax(szName));
        
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_REMOVE_ALL"szName);
    }
}

stock set_user_glow(idiR 0iG 0iB 0) {
    
set_user_rendering(idkRenderFxGlowShelliRiGiBkRenderNormal25);
}

ReadFile() {
    
#if AMXX_VERSION_NUM < 183
    
formatex(szTempcharsmax(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];

    while(
fgets(iFilePointerszLinecharsmax(szText))) {
        
trim(szLine);

        if(
szLine[0] == EOS || szLine[0] == ';' || (szLine[0] == '/' && szLine[1] == '/')) {
            continue;
        }

        
split(szLineszColorcharsmax(szColor), szLinecharsmax(szLine), " ");
        
remove_quotes(szColor);
        
format(szTextcharsmax(szText), "%s"szColor);

        
log_amx("Color: %s - RGB: %s"szTextszLine);

        
add(szLinecharsmax(szLine), szColor);

        
menu_additem(iColorMenuszTextszLine);
    }
    
fclose(iFilePointer);
}

public 
FormatPlayerMenu(idiPlayerMenuszHeader[], szData[], szHandler[]) {
    
#if AMXX_VERSION_NUM < 183
    
formatex(szTempcharsmax(szTemp), szHeaderidszData);
    
iPlayerMenu menu_create(szTempszHandler);
    
#else
    
iPlayerMenu menu_create(fmt(szHeaderidszData), szHandler);
    
#endif

    
new iPlayers[32], iNumszName[32], szUserId[32];
    
get_players(iPlayersiNum"a");

    for(new 
iiNumi++) {
        
get_user_name(iPlayers[i], szNamecharsmax(szName));
        
num_to_str(get_user_userid(iPlayers[i]), szUserIdcharsmax(szUserId));
        
menu_additem(iPlayerMenuszNameszUserId);
    }
    
menu_display(idiPlayerMenu);

__________________

Last edited by Napoleon_be; 04-12-2020 at 11:24.
Napoleon_be is offline
Send a message via Skype™ to Napoleon_be
Napoleon_be
Veteran Member
Join Date: Jul 2011
Location: Belgium
Old 04-12-2020 , 12:55   Re: FormatPlayerMenu()
Reply With Quote #12

This is what i have, the log output is what i need, but i can't seem to retrieve my data from the Trie

PHP Code:
new Trie:tColors;

enum _:eColors {
    
szColorName[20],
    
r,
    
g,
    
b
}; 
PHP Code:
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], szData[eColors];

    while(
fgets(iFilePointerszLinecharsmax(szLine))) {
        
trim(szLine);

        if(
szLine[0] == EOS || szLine[0] == ';' || (szLine[0] == '/' && szLine[1] == '/')) {
            continue;
        }
        
parse(szLineszData[szColorName], charsmax(szData[szColorName]), szRedcharsmax(szRed), szGreencharsmax(szGreen), szBluecharsmax(szBlue));

        
szData[r] = str_to_num(szRed);
        
szData[g] = str_to_num(szGreen);
        
szData[b] = str_to_num(szBlue);

        
TrieSetArray(tColorsszData[szColorName], szDatasizeof(szData));

        
log_amx("Color: %s | RGB: %i %i %i"szData[szColorName], szData[r], szData[g], szData[b]);

        
/*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);

So all this is good, log
Code:
L 04/12/2020 - 18:49:40: [AdvancedGlowMenu.amxx] Color: Red | RGB: 255 0 0
L 04/12/2020 - 18:49:40: [AdvancedGlowMenu.amxx] Color: Green | RGB: 0 255 0
L 04/12/2020 - 18:49:40: [AdvancedGlowMenu.amxx] Color: Blue | RGB: 0 0 255
L 04/12/2020 - 18:49:40: [AdvancedGlowMenu.amxx] Color: White | RGB: 255 255 255
Now here's the problem...

PHP Code:
if(iGlowTarget) {
            new 
iColorMenu;

            if(
TrieGetArray(tColorsszColorData[szColorName], szColorDatasizeof(szColorData))) {

                
#if AMXX_VERSION_NUM < 183
                
formatex(szTempcharsmax(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[15], szItem[250];
                
formatex(szInfocharsmax(szInfo), "%i %i %i"szColorData[r], szColorData[g], szColorData[b]);
                
formatex(szItemcharsmax(szItem), "%s"szColorData[szColorName]);

                
menu_additem(iColorMenuszItemszInfo);
                
ColorChat(idGREEN"%s"szInfo);
            }
            
menu_display(idiColorMenu);
        } 
__________________

Last edited by Napoleon_be; 04-12-2020 at 14:12.
Napoleon_be is offline
Send a message via Skype™ to Napoleon_be
HamletEagle
AMX Mod X Plugin Approver
Join Date: Sep 2013
Location: Romania
Old 04-12-2020 , 14:22   Re: FormatPlayerMenu()
Reply With Quote #13

Quote:
Now here's the problem...
What is the problem?

Also, I would prefer to see your entire code(with the Trie added).
__________________
HamletEagle is offline
Napoleon_be
Veteran Member
Join Date: Jul 2011
Location: Belgium
Old 04-12-2020 , 14:25   Re: FormatPlayerMenu()
Reply With Quote #14

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 isizeof(szCommands); i++) {
        
#if AMXX_VERSION_NUM < 183
        
formatex(szChatcharsmax(szChat), "say %s"szCommands[i]);
        
register_clcmd(szChat"CheckSettings");

        
formatex(szChatcharsmax(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(szTempcharsmax(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 isizeof(szMainMenuText); i++) {
            
#if AMXX_VERSION_NUM < 183
            
formatex(szTempcharsmax(szTemp), "%L",  idszMainMenuText[i]);
            
menu_additem(iMainMenuszTemp);
            
#else
            
menu_additem(iMainMenufmt("%L"idszMainMenuText[i]));
            
#endif
        
}
        
menu_display(idiMainMenu);
    }
}

public 
MainMenuHandler(idiMainMenuitem) {
    switch(
item) {
        case 
0GlowTarget(id);
        case 
1GlowYourSelf(id);
        case 
2GlowAllRandom(id);
        case 
3GlowAll(id);
        case 
4RemoveGlowMenu(id);
        
// case 5: GlowAimTarget(id);
    
}
    
menu_destroy(iMainMenu);
}

public 
ColorMenuHandler(idiColorMenuitem) {
    if(
item != MENU_EXIT) {
        new 
szRGB[50], szR[4], szG[4], szB[4], szItem[15], iRediGreeniBlueiAccess;
        
menu_item_getinfo(iColorMenuitemiAccessszRGBcharsmax(szRGB));

        
parse(szRGBszRcharsmax(szR), szGcharsmax(szG), szBcharsmax(szB), szItemcharsmax(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(iGlowTargetszTargNamecharsmax(szTargName));
                
set_user_glow(iGlowTargetiRediGreeniBlue);
                
bGlowTarget false;
                if(
get_pcvar_num(pMessages)) {
                    new 
szName[32];
                    
get_user_name(idszNamecharsmax(szName));

                    
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_TARGET"szNameszTargNameszItem);
                }
            }
        }

        else if(
bGlowAll) {
            new 
iPlayers[32], iNum;
            
get_players(iPlayersiNum"a");

            for(new 
iiNumi++) {
                
set_user_glow(iPlayers[i], iRediGreeniBlue);
            }

            
bGlowAll false;
            if(
get_pcvar_num(pMessages)) {
                new 
szName[32];
                
get_user_name(idszNamecharsmax(szName));

                
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_GLOW_ALL"szNameszItem);
            }
        }

        else if(
is_user_alive(id)) {
            
set_user_glow(idiRediGreeniBlue);
            if(
get_pcvar_num(pMessages)) {
                new 
szName[32];
                
get_user_name(idszNamecharsmax(szName));

                
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_GLOWING"szNameszItem);
            }
        }
    }

    else if((
bGlowTarget || bGlowAll) && item == MENU_EXIT) {
        
bGlowTarget false;
        
bGlowAll false;
    }
}

public 
GlowTarget(id) {
    new 
iPlayerMenu;
    
FormatPlayerMenu(idiPlayerMenu"%L""CHOOSE_PLAYER_GLOW""GlowPlayerHandler");
    
bGlowTarget true;
}

public 
GlowPlayerHandler(idiPlayerMenuitem) {
    if(
item != MENU_EXIT) {
        new 
szData[6], szName[64], iAccessiCallBack;
        
menu_item_getinfo(iPlayerMenuitemiAccessszDatacharsmax(szData), szNamecharsmax(szName), iCallBack);

        new 
iUserId str_to_num(szData);
        
iGlowTarget find_player("k"iUserId);

        if(
iGlowTarget) {
            new 
iColorMenu;

            if(
TrieGetArray(tColorsszColorData[szColorName], szColorDatasizeof(szColorData))) {

                
#if AMXX_VERSION_NUM < 183
                
formatex(szTempcharsmax(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(szInfocharsmax(szInfo), "%i %i %i %s"szColorData[r], szColorData[g], szColorData[b], szColorData[szColorName]);
                
formatex(szItemcharsmax(szItem), "%s"szColorData[szColorName]);

                
menu_additem(iColorMenuszItemszInfo);
                
ColorChat(idGREEN"%s"szInfo);
                
ColorChat(idGREEN"%s"szItem);
            }
            
menu_display(idiColorMenu);
        }
    }

    else {
        
bGlowTarget false;
    }
    
menu_destroy(iPlayerMenu);
}

public 
GlowYourSelf(id) {
    
//menu_display(id, iColorMenu);
}

public 
GlowAllRandom(id) {
    new 
iPlayers[32], iNum;
    
get_players(iPlayersiNum);

    for(new 
iiNumi++) {
        
set_user_glow(iPlayers[i], iRandomiRandomiRandom);
    }

    if(
get_pcvar_num(pMessages)) {
        new 
szName[32];
        
get_user_name(idszNamecharsmax(szName));

        
ColorChat(0GREEN"%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(szTempcharsmax(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 isizeof(szRemoveMenuText); i++) {
        
#if AMXX_VERSION_NUM < 183
        
formatex(szTempcharsmax(szTemp), "%L"idszRemoveMenuText[i]);
        
menu_additem(iRemoveMenuszTemp);
        
#else
        
menu_additem(iRemoveMenufmt("%L"idszRemoveMenuText[i]));
        
#endif
    
}
    
menu_display(idiRemoveMenu);
}

public 
RemoveGlowHandler(idiRemoveMenuitem) {
    switch(
item) {
        case 
0set_user_glow(id);
        case 
1RemoveGlowPlayer(id);
        case 
2RemoveGlowAll(id);
    }
    
menu_destroy(iRemoveMenu);
}

public 
RemoveGlowPlayer(id) {
    new 
iPlayerMenu;
    
FormatPlayerMenu(idiPlayerMenu"%L""CHOOSE_PLAYER_REMOVE""RemovePlayerHandler");
}

public 
RemovePlayerHandler(idiPlayerMenuitem) {
    if(
item != MENU_EXIT) {
        new 
szData[6], szTargName[64], iAccessiCallBack;
        
menu_item_getinfo(iPlayerMenuitemiAccessszDatacharsmax(szData), szTargNamecharsmax(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(idszNamecharsmax(szName));
                
get_user_name(iTargetszTargNamecharsmax(szTargName));

                
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_REMOVE_GLOW"szNameszTargName);
            }
        }
    }
    
menu_destroy(iPlayerMenu);
}

public 
RemoveGlowAll(id) {
    new 
iPlayers[32], iNum;
    
get_players(iPlayersiNum);

    for(new 
iiNumi++) {
        
set_user_glow(iPlayers[i]);
    }

    if(
get_pcvar_num(pMessages)) {
        new 
szName[32];
        
get_user_name(idszNamecharsmax(szName));
        
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_REMOVE_ALL"szName);
    }
}

stock set_user_glow(idiR 0iG 0iB 0) {
    
set_user_rendering(idkRenderFxGlowShelliRiGiBkRenderNormal25);
}

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(iFilePointerszLinecharsmax(szLine))) {
        
trim(szLine);

        if(
szLine[0] == EOS || szLine[0] == ';' || (szLine[0] == '/' && szLine[1] == '/')) {
            continue;
        }
        
parse(szLineszColorData[szColorName], charsmax(szColorData[szColorName]), szRedcharsmax(szRed), szGreencharsmax(szGreen), szBluecharsmax(szBlue));

        
szColorData[r] = str_to_num(szRed);
        
szColorData[g] = str_to_num(szGreen);
        
szColorData[b] = str_to_num(szBlue);

        
TrieSetArray(tColorsszColorData[szColorName], szColorDatasizeof(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(idiPlayerMenuszHeader[], szData[], szHandler[]) {
    
#if AMXX_VERSION_NUM < 183
    
formatex(szTempcharsmax(szTemp), szHeaderidszData);
    
iPlayerMenu menu_create(szTempszHandler);
    
#else
    
iPlayerMenu menu_create(fmt(szHeaderidszData), szHandler);
    
#endif

    
new iPlayers[32], iNumszName[32], szUserId[32];
    
get_players(iPlayersiNum"a");

    for(new 
iiNumi++) {
        
get_user_name(iPlayers[i], szNamecharsmax(szName));
        
num_to_str(get_user_userid(iPlayers[i]), szUserIdcharsmax(szUserId));
        
menu_additem(iPlayerMenuszNameszUserId);
    }
    
menu_display(idiPlayerMenu);

__________________
Napoleon_be is offline
Send a message via Skype™ to Napoleon_be
HamletEagle
AMX Mod X Plugin Approver
Join Date: Sep 2013
Location: Romania
Old 04-12-2020 , 14:54   Re: FormatPlayerMenu()
Reply With Quote #15

Your problem is not the trie. The tried dis exactly what you told it to do: retrieve the data from key szColorData[ColorName].
Now see where you set that variable and what it contains after that function is finished.
__________________
HamletEagle is offline
Napoleon_be
Veteran Member
Join Date: Jul 2011
Location: Belgium
Old 04-12-2020 , 15:01   Re: FormatPlayerMenu()
Reply With Quote #16

Quote:
Originally Posted by HamletEagle View Post
Your problem is not the trie. The tried dis exactly what you told it to do: retrieve the data from key szColorData[ColorName].
Now see where you set that variable and what it contains after that function is finished.
szColorData[ColorName] output = White. (Last line in the GlowMenu.txt file).

How can i retrieve every line stored in there? Output of szColorData[ColorName] is correct at the ReadFile() Function. =
Code:
L 04/12/2020 - 20:56:18: [AdvancedGlowMenu.amxx] Color: Red | RGB: 255 0 0
L 04/12/2020 - 20:56:18: [AdvancedGlowMenu.amxx] Red
L 04/12/2020 - 20:56:18: [AdvancedGlowMenu.amxx] Color: Green | RGB: 0 255 0
L 04/12/2020 - 20:56:18: [AdvancedGlowMenu.amxx] Green
L 04/12/2020 - 20:56:18: [AdvancedGlowMenu.amxx] Color: Blue | RGB: 0 0 255
L 04/12/2020 - 20:56:18: [AdvancedGlowMenu.amxx] Blue
L 04/12/2020 - 20:56:18: [AdvancedGlowMenu.amxx] Color: White | RGB: 255 255 255
L 04/12/2020 - 20:56:18: [AdvancedGlowMenu.amxx] White
__________________
Napoleon_be is offline
Send a message via Skype™ to Napoleon_be
HamletEagle
AMX Mod X Plugin Approver
Join Date: Sep 2013
Location: Romania
Old 04-12-2020 , 15:13   Re: FormatPlayerMenu()
Reply With Quote #17

Of course it is correct. But it is a single variable, it can have only one value and at the end of the function it will contain the last color read from the file. Data is inserted correctly, but you lose alI keys except the last and when retrieving you can only get the last color(the only key you have). I hope this is obvious now.

If you need all data from the file then a trie is not the right dolution. Tries are good when you want to find data based on some identifier we call key. For example if you wanted to translate red to 255 0 0 then a trie would be perfect.
But here it appears you just want to list every color it the menu, so use a dynamic array.
__________________

Last edited by HamletEagle; 04-12-2020 at 15:15.
HamletEagle is offline
Napoleon_be
Veteran Member
Join Date: Jul 2011
Location: Belgium
Old 04-12-2020 , 15:58   Re: FormatPlayerMenu()
Reply With Quote #18

Quote:
Originally Posted by HamletEagle View Post
Of course it is correct. But it is a single variable, it can have only one value and at the end of the function it will contain the last color read from the file. Data is inserted correctly, but you lose alI keys except the last and when retrieving you can only get the last color(the only key you have). I hope this is obvious now.

If you need all data from the file then a trie is not the right dolution. Tries are good when you want to find data based on some identifier we call key. For example if you wanted to translate red to 255 0 0 then a trie would be perfect.
But here it appears you just want to list every color it the menu, so use a dynamic array.
I've been reading your tutorial and this is what i got so far. ReadFile is doing everything it should, but i can't seem to get ArrayGetString() to work.

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 < 190
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 Array:
aColorInfo;

// 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 isizeof(szCommands); i++) {
        
#if AMXX_VERSION_NUM < 183
        
formatex(szChatcharsmax(szChat), "say %s"szCommands[i]);
        
register_clcmd(szChat"CheckSettings");

        
formatex(szChatcharsmax(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");

    
aColorInfo ArrayCreate(1);
    
ReadFile();
}

public 
plugin_end() {
    
ArrayDestroy(aColorInfo);
}

public 
CheckSettings(id) {
    if(
get_user_flags(id) & ADMIN_KICK || !get_pcvar_num(pAdminsOnly)) {
        new 
iMainMenu;

        
#if AMXX_VERSION_NUM < 183
        
formatex(szTempcharsmax(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 isizeof(szMainMenuText); i++) {
            
#if AMXX_VERSION_NUM < 183
            
formatex(szTempcharsmax(szTemp), "%L",  idszMainMenuText[i]);
            
menu_additem(iMainMenuszTemp);
            
#else
            
menu_additem(iMainMenufmt("%L"idszMainMenuText[i]));
            
#endif
        
}
        
menu_display(idiMainMenu);
    }
}

public 
MainMenuHandler(idiMainMenuitem) {
    switch(
item) {
        case 
0GlowTarget(id);
        case 
1GlowYourSelf(id);
        case 
2GlowAllRandom(id);
        case 
3GlowAll(id);
        case 
4RemoveGlowMenu(id);
        
// case 5: GlowAimTarget(id);
    
}
    
menu_destroy(iMainMenu);
}

public 
ColorMenuHandler(idiColorMenuitem) {
    if(
item != MENU_EXIT) {
        new 
szRGB[50], szR[4], szG[4], szB[4], szItem[15], iRediGreeniBlueiAccess;
        
menu_item_getinfo(iColorMenuitemiAccessszRGBcharsmax(szRGB));

        
parse(szRGBszRcharsmax(szR), szGcharsmax(szG), szBcharsmax(szB), szItemcharsmax(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(iGlowTargetszTargNamecharsmax(szTargName));
                
set_user_glow(iGlowTargetiRediGreeniBlue);
                
bGlowTarget false;
                if(
get_pcvar_num(pMessages)) {
                    new 
szName[32];
                    
get_user_name(idszNamecharsmax(szName));

                    
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_TARGET"szNameszTargNameszItem);
                }
            }
        }

        else if(
bGlowAll) {
            new 
iPlayers[32], iNum;
            
get_players(iPlayersiNum"a");

            for(new 
iiNumi++) {
                
set_user_glow(iPlayers[i], iRediGreeniBlue);
            }

            
bGlowAll false;
            if(
get_pcvar_num(pMessages)) {
                new 
szName[32];
                
get_user_name(idszNamecharsmax(szName));

                
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_GLOW_ALL"szNameszItem);
            }
        }

        else if(
is_user_alive(id)) {
            
set_user_glow(idiRediGreeniBlue);
            if(
get_pcvar_num(pMessages)) {
                new 
szName[32];
                
get_user_name(idszNamecharsmax(szName));

                
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_GLOWING"szNameszItem);
            }
        }
    }

    else if((
bGlowTarget || bGlowAll) && item == MENU_EXIT) {
        
bGlowTarget false;
        
bGlowAll false;
    }
}

public 
GlowTarget(id) {
    new 
iPlayerMenu;
    
FormatPlayerMenu(idiPlayerMenu"%L""CHOOSE_PLAYER_GLOW""GlowPlayerHandler");
    
bGlowTarget true;
}

public 
GlowPlayerHandler(idiPlayerMenuitem) {
    if(
item != MENU_EXIT) {
        new 
szData[6], szName[64], iAccessiCallBack;
        
menu_item_getinfo(iPlayerMenuitemiAccessszDatacharsmax(szData), szNamecharsmax(szName), iCallBack);

        new 
iUserId str_to_num(szData);
        
iGlowTarget find_player("k"iUserId);

        if(
iGlowTarget) {
            new 
iColorMenu;

            
#if AMXX_VERSION_NUM < 183
            
formatex(szTempcharsmax(szTemp), "%L"id"MENU_CHOOSE_COLOR");
            
iColorMenu menu_create(szTemp"ColorMenuHandler");
            
#else
            
iColorMenu menu_create(fmt("%L"id"MENU_CHOOSE_COLOR"), "ColorMenuHandler");
            
#endif

            
new /*szColor[20], szRGB[20],*/ szColorData[200];
            for(new 
iArraySize(aColorInfo); i++) {
                
ArrayGetString(aColorInfoiszColorDatacharsmax(szColorData));
                
//split(szColorData, szColor, charsmax(szColor), szRGB, charsmax(szRGB), " ");
                #if AMXX_VERSION_NUM < 183
                
formatex(szTempcharsmax(szTemp), "%s"szColorData);
                
menu_additem(iColorMenuszTemp);
                
#else
                
menu_additem(iColorMenufmt("%s"szColorData));
                
#endif
            
}

            
ColorChat(idGREEN"%s"szColorData);
            
menu_display(idiColorMenu);
        }
    }

    else {
        
bGlowTarget false;
    }
    
menu_destroy(iPlayerMenu);
}

public 
GlowYourSelf(id) {
    
//menu_display(id, iColorMenu);
}

public 
GlowAllRandom(id) {
    new 
iPlayers[32], iNum;
    
get_players(iPlayersiNum);

    for(new 
iiNumi++) {
        
set_user_glow(iPlayers[i], iRandomiRandomiRandom);
    }

    if(
get_pcvar_num(pMessages)) {
        new 
szName[32];
        
get_user_name(idszNamecharsmax(szName));

        
ColorChat(0GREEN"%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(szTempcharsmax(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 isizeof(szRemoveMenuText); i++) {
        
#if AMXX_VERSION_NUM < 183
        
formatex(szTempcharsmax(szTemp), "%L"idszRemoveMenuText[i]);
        
menu_additem(iRemoveMenuszTemp);
        
#else
        
menu_additem(iRemoveMenufmt("%L"idszRemoveMenuText[i]));
        
#endif
    
}
    
menu_display(idiRemoveMenu);
}

public 
RemoveGlowHandler(idiRemoveMenuitem) {
    switch(
item) {
        case 
0set_user_glow(id);
        case 
1RemoveGlowPlayer(id);
        case 
2RemoveGlowAll(id);
    }
    
menu_destroy(iRemoveMenu);
}

public 
RemoveGlowPlayer(id) {
    new 
iPlayerMenu;
    
FormatPlayerMenu(idiPlayerMenu"%L""CHOOSE_PLAYER_REMOVE""RemovePlayerHandler");
}

public 
RemovePlayerHandler(idiPlayerMenuitem) {
    if(
item != MENU_EXIT) {
        new 
szData[6], szTargName[64], iAccessiCallBack;
        
menu_item_getinfo(iPlayerMenuitemiAccessszDatacharsmax(szData), szTargNamecharsmax(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(idszNamecharsmax(szName));
                
get_user_name(iTargetszTargNamecharsmax(szTargName));

                
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_REMOVE_GLOW"szNameszTargName);
            }
        }
    }
    
menu_destroy(iPlayerMenu);
}

public 
RemoveGlowAll(id) {
    new 
iPlayers[32], iNum;
    
get_players(iPlayersiNum);

    for(new 
iiNumi++) {
        
set_user_glow(iPlayers[i]);
    }

    if(
get_pcvar_num(pMessages)) {
        new 
szName[32];
        
get_user_name(idszNamecharsmax(szName));
        
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_REMOVE_ALL"szName);
    }
}

stock set_user_glow(idiR 0iG 0iB 0) {
    
set_user_rendering(idkRenderFxGlowShelliRiGiBkRenderNormal25);
}

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];

    while(
fgets(iFilePointerszLinecharsmax(szLine))) {
        
trim(szLine);

        if(
szLine[0] == EOS || szLine[0] == ';' || (szLine[0] == '/' && szLine[1] == '/')) {
            continue;
        }

        
ArrayPushString(aColorInfoszLine);

        
log_amx("%s"szLine);

        
/*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(idiPlayerMenuszHeader[], szData[], szHandler[]) {
    
#if AMXX_VERSION_NUM < 183
    
formatex(szTempcharsmax(szTemp), szHeaderidszData);
    
iPlayerMenu menu_create(szTempszHandler);
    
#else
    
iPlayerMenu menu_create(fmt(szHeaderidszData), szHandler);
    
#endif

    
new iPlayers[32], iNumszName[32], szUserId[32];
    
get_players(iPlayersiNum"a");

    for(new 
iiNumi++) {
        
get_user_name(iPlayers[i], szNamecharsmax(szName));
        
num_to_str(get_user_userid(iPlayers[i]), szUserIdcharsmax(szUserId));
        
menu_additem(iPlayerMenuszNameszUserId);
    }
    
menu_display(idiPlayerMenu);

__________________
Napoleon_be is offline
Send a message via Skype™ to Napoleon_be
HamletEagle
AMX Mod X Plugin Approver
Join Date: Sep 2013
Location: Romania
Old 04-12-2020 , 16:03   Re: FormatPlayerMenu()
Reply With Quote #19

What good is a string of length 1?(Hint: ArrayCreate)
__________________
HamletEagle is offline
Old 04-12-2020, 16:17
thEsp
This message has been deleted by thEsp.
Napoleon_be
Veteran Member
Join Date: Jul 2011
Location: Belgium
Old 04-12-2020 , 16:17   Re: FormatPlayerMenu()
Reply With Quote #20

Quote:
Originally Posted by HamletEagle View Post
What good is a string of length 1?(Hint: ArrayCreate)
thanks lol, it's working now

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 < 190
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 Array:
aColorInfo;

// 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 isizeof(szCommands); i++) {
        
#if AMXX_VERSION_NUM < 183
        
formatex(szChatcharsmax(szChat), "say %s"szCommands[i]);
        
register_clcmd(szChat"CheckSettings");

        
formatex(szChatcharsmax(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");

    
aColorInfo ArrayCreate(250);
    
ReadFile();
}

public 
plugin_end() {
    
ArrayDestroy(aColorInfo);
}

public 
CheckSettings(id) {
    if(
get_user_flags(id) & ADMIN_KICK || !get_pcvar_num(pAdminsOnly)) {
        new 
iMainMenu;

        
#if AMXX_VERSION_NUM < 183
        
formatex(szTempcharsmax(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 isizeof(szMainMenuText); i++) {
            
#if AMXX_VERSION_NUM < 183
            
formatex(szTempcharsmax(szTemp), "%L",  idszMainMenuText[i]);
            
menu_additem(iMainMenuszTemp);
            
#else
            
menu_additem(iMainMenufmt("%L"idszMainMenuText[i]));
            
#endif
        
}
        
menu_display(idiMainMenu);
    }
}

public 
MainMenuHandler(idiMainMenuitem) {
    switch(
item) {
        case 
0GlowTarget(id);
        case 
1GlowYourSelf(id);
        case 
2GlowAllRandom(id);
        case 
3GlowAll(id);
        case 
4RemoveGlowMenu(id);
        
// case 5: GlowAimTarget(id);
    
}
    
menu_destroy(iMainMenu);
}

public 
ColorMenuHandler(idiColorMenuitem) {
    if(
item != MENU_EXIT) {
        new 
szRGB[50], szR[4], szG[4], szB[4], szItem[15], iRediGreeniBlueiAccess;
        
menu_item_getinfo(iColorMenuitemiAccessszRGBcharsmax(szRGB));

        
parse(szRGBszRcharsmax(szR), szGcharsmax(szG), szBcharsmax(szB), szItemcharsmax(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(iGlowTargetszTargNamecharsmax(szTargName));
                
set_user_glow(iGlowTargetiRediGreeniBlue);
                
bGlowTarget false;
                if(
get_pcvar_num(pMessages)) {
                    new 
szName[32];
                    
get_user_name(idszNamecharsmax(szName));

                    
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_TARGET"szNameszTargNameszItem);
                }
            }
        }

        else if(
bGlowAll) {
            new 
iPlayers[32], iNum;
            
get_players(iPlayersiNum"a");

            for(new 
iiNumi++) {
                
set_user_glow(iPlayers[i], iRediGreeniBlue);
            }

            
bGlowAll false;
            if(
get_pcvar_num(pMessages)) {
                new 
szName[32];
                
get_user_name(idszNamecharsmax(szName));

                
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_GLOW_ALL"szNameszItem);
            }
        }

        else if(
is_user_alive(id)) {
            
set_user_glow(idiRediGreeniBlue);
            if(
get_pcvar_num(pMessages)) {
                new 
szName[32];
                
get_user_name(idszNamecharsmax(szName));

                
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_GLOWING"szNameszItem);
            }
        }
    }

    else if((
bGlowTarget || bGlowAll) && item == MENU_EXIT) {
        
bGlowTarget false;
        
bGlowAll false;
    }
}

public 
GlowTarget(id) {
    new 
iPlayerMenu;
    
FormatPlayerMenu(idiPlayerMenu"%L""CHOOSE_PLAYER_GLOW""GlowPlayerHandler");
    
bGlowTarget true;
}

public 
GlowPlayerHandler(idiPlayerMenuitem) {
    if(
item != MENU_EXIT) {
        new 
szData[6], szName[64], iAccessiCallBack;
        
menu_item_getinfo(iPlayerMenuitemiAccessszDatacharsmax(szData), szNamecharsmax(szName), iCallBack);

        new 
iUserId str_to_num(szData);
        
iGlowTarget find_player("k"iUserId);

        if(
iGlowTarget) {
            new 
iColorMenu;

            
#if AMXX_VERSION_NUM < 183
            
formatex(szTempcharsmax(szTemp), "%L"id"MENU_CHOOSE_COLOR");
            
iColorMenu menu_create(szTemp"ColorMenuHandler");
            
#else
            
iColorMenu menu_create(fmt("%L"id"MENU_CHOOSE_COLOR"), "ColorMenuHandler");
            
#endif

            
new szColor[20], szRGB[20], szColorData[200];
            for(new 
iArraySize(aColorInfo); i++) {
                
ArrayGetString(aColorInfoiszColorDatacharsmax(szColorData));

                
split(szColorDataszColorcharsmax(szColor), szRGBcharsmax(szRGB), " ");
                
remove_quotes(szColor);
                
formatex(szColorDatacharsmax(szColorData), "%s %s"szRGBszColor);

                
#if AMXX_VERSION_NUM < 183
                
formatex(szTempcharsmax(szTemp), "%s"szColor);
                
menu_additem(iColorMenuszTempszColorData);
                
#else
                
menu_additem(iColorMenufmt("%s"szColor), szColorData);
                
#endif
            
}
            
menu_display(idiColorMenu);
        }
    }

    else {
        
bGlowTarget false;
    }
    
menu_destroy(iPlayerMenu);
}

public 
GlowYourSelf(id) {
    
//menu_display(id, iColorMenu);
}

public 
GlowAllRandom(id) {
    new 
iPlayers[32], iNum;
    
get_players(iPlayersiNum);

    for(new 
iiNumi++) {
        
set_user_glow(iPlayers[i], iRandomiRandomiRandom);
    }

    if(
get_pcvar_num(pMessages)) {
        new 
szName[32];
        
get_user_name(idszNamecharsmax(szName));

        
ColorChat(0GREEN"%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(szTempcharsmax(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 isizeof(szRemoveMenuText); i++) {
        
#if AMXX_VERSION_NUM < 183
        
formatex(szTempcharsmax(szTemp), "%L"idszRemoveMenuText[i]);
        
menu_additem(iRemoveMenuszTemp);
        
#else
        
menu_additem(iRemoveMenufmt("%L"idszRemoveMenuText[i]));
        
#endif
    
}
    
menu_display(idiRemoveMenu);
}

public 
RemoveGlowHandler(idiRemoveMenuitem) {
    switch(
item) {
        case 
0set_user_glow(id);
        case 
1RemoveGlowPlayer(id);
        case 
2RemoveGlowAll(id);
    }
    
menu_destroy(iRemoveMenu);
}

public 
RemoveGlowPlayer(id) {
    new 
iPlayerMenu;
    
FormatPlayerMenu(idiPlayerMenu"%L""CHOOSE_PLAYER_REMOVE""RemovePlayerHandler");
}

public 
RemovePlayerHandler(idiPlayerMenuitem) {
    if(
item != MENU_EXIT) {
        new 
szData[6], szTargName[64], iAccessiCallBack;
        
menu_item_getinfo(iPlayerMenuitemiAccessszDatacharsmax(szData), szTargNamecharsmax(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(idszNamecharsmax(szName));
                
get_user_name(iTargetszTargNamecharsmax(szTargName));

                
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_REMOVE_GLOW"szNameszTargName);
            }
        }
    }
    
menu_destroy(iPlayerMenu);
}

public 
RemoveGlowAll(id) {
    new 
iPlayers[32], iNum;
    
get_players(iPlayersiNum);

    for(new 
iiNumi++) {
        
set_user_glow(iPlayers[i]);
    }

    if(
get_pcvar_num(pMessages)) {
        new 
szName[32];
        
get_user_name(idszNamecharsmax(szName));
        
ColorChat(0GREEN"%L"LANG_PLAYER"MSG_REMOVE_ALL"szName);
    }
}

stock set_user_glow(idiR 0iG 0iB 0) {
    
set_user_rendering(idkRenderFxGlowShelliRiGiBkRenderNormal25);
}

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];

    while(
fgets(iFilePointerszLinecharsmax(szLine))) {
        
trim(szLine);

        if(
szLine[0] == EOS || szLine[0] == ';' || (szLine[0] == '/' && szLine[1] == '/')) {
            continue;
        }

        
ArrayPushString(aColorInfoszLine);

        
log_amx("%s"szLine);

        
/*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(idiPlayerMenuszHeader[], szData[], szHandler[]) {
    
#if AMXX_VERSION_NUM < 183
    
formatex(szTempcharsmax(szTemp), szHeaderidszData);
    
iPlayerMenu menu_create(szTempszHandler);
    
#else
    
iPlayerMenu menu_create(fmt(szHeaderidszData), szHandler);
    
#endif

    
new iPlayers[32], iNumszName[32], szUserId[32];
    
get_players(iPlayersiNum"a");

    for(new 
iiNumi++) {
        
get_user_name(iPlayers[i], szNamecharsmax(szName));
        
num_to_str(get_user_userid(iPlayers[i]), szUserIdcharsmax(szUserId));
        
menu_additem(iPlayerMenuszNameszUserId);
    }
    
menu_display(idiPlayerMenu);

__________________
Napoleon_be is offline
Send a message via Skype™ to Napoleon_be
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 12:07.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode