Raised This Month: $ Target: $400
 0% 

Solved print_team_* always white


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
CrazY.
Veteran Member
Join Date: May 2015
Location: SP, Brazil
Old 03-01-2019 , 09:30   print_team_* always white
Reply With Quote #1

Hello, I'm trying to replicate client_print_color native just for backward compatibility. The color it's working but for some reason print_team_blue and print_team_red always output white colored text. Here's the code:

Code:
#if AMXX_VERSION_NUM < 183 #define MAX_PLAYERS 32 /**  * Color types for client_print_color()  */ enum {     print_team_default = 0,     print_team_grey = -1,     print_team_red = -2,     print_team_blue = -3, }; stock client_print_color(index, sender, const message[], any:...) {     static iMaxPlayers, msgSayText;     if (!iMaxPlayers)         iMaxPlayers = get_maxplayers();     if (!msgSayText)         msgSayText = get_user_msgid("SayText");     new pPlayer, szBuffer[191];     if (sender < print_team_blue || sender > iMaxPlayers)         sender = print_team_default;     else if (sender < print_team_default)         sender = abs(sender) + 32;     vformat(szBuffer, charsmax(szBuffer), message, 4);     server_print("[DEBUG] sender = %d", sender);     if (!index)     {         new Players[MAX_PLAYERS];         new i, iPlayerCount;         get_players(Players, iPlayerCount, "ch");         for (i = 0; i < iPlayerCount; i++)         {             pPlayer = Players[i];             message_begin(MSG_ONE, msgSayText, .player = pPlayer);             write_byte(sender ? sender : pPlayer);             write_string(szBuffer);             message_end();         }     }     else     {     }     return strlen(szBuffer); } #endif
__________________









Last edited by CrazY.; 03-01-2019 at 10:04.
CrazY. is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 03-01-2019 , 09:35   Re: print_team_* always white
Reply With Quote #2

You need to send a "TeamInfo" message to modify the team color.
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
CrazY.
Veteran Member
Join Date: May 2015
Location: SP, Brazil
Old 03-01-2019 , 10:04   Re: print_team_* always white
Reply With Quote #3

Code:
#if AMXX_VERSION_NUM < 183 #define MAX_PLAYERS 32 /**  * Color types for client_print_color()  */ enum {     print_team_default = 0,     print_team_grey = -1,     print_team_red = -2,     print_team_blue = -3, }; stock client_print_color(index, sender, const message[], any:...) {     static iMaxPlayers;     if (!iMaxPlayers)         iMaxPlayers = get_maxplayers();     new const TeamNames[][] =     {         "UNASSIGNED",         "SPECTATOR",         "TERRORIST",         "CT"     };     new pPlayer, szBuffer[191], iTeamIndex;     if (sender < print_team_blue || sender > iMaxPlayers)     {         sender = print_team_default;     }     else if (sender < print_team_default)     {         iTeamIndex = abs(sender);         sender = iTeamIndex + 32;     }     vformat(szBuffer, charsmax(szBuffer), message, 4);     if (!index)     {         new Players[MAX_PLAYERS];         new i, iPlayerCount;         get_players(Players, iPlayerCount, "ch");         for (i = 0; i < iPlayerCount; i++)         {             pPlayer = Players[i];             if (iTeamIndex)                 UTIL_TeamInfo(pPlayer, sender, TeamNames[iTeamIndex]);             //UTIL_TeamInfo(pPlayer, "CT");             UTIL_ClientSayText(pPlayer, sender ? sender : pPlayer, szBuffer);         }     }     else     {         if (index < 1 || index > iMaxPlayers)         {             log_error(AMX_ERR_NATIVE, "Invalid player index %d", index);             return 0;         }         if (is_user_connected(index) && !is_user_bot(index) && !is_user_hltv(index))         {             if (iTeamIndex)                 UTIL_TeamInfo(index, sender, TeamNames[iTeamIndex]);             //UTIL_TeamInfo(index, "CT");             UTIL_ClientSayText(index, sender ? sender : index, szBuffer);         }     }     return strlen(szBuffer); } UTIL_ClientSayText(pPlayer, iSender, const szMessage[]) {     static msgSayText;     if (!msgSayText)         msgSayText = get_user_msgid("SayText");     message_begin(MSG_ONE, msgSayText, .player = pPlayer);     write_byte(iSender);     write_string(szMessage);     message_end(); } UTIL_TeamInfo(pPlayer, iSender, const szTeamName[]) {     static msgTeamInfo;     if (!msgTeamInfo)         msgTeamInfo = get_user_msgid("TeamInfo");     message_begin(MSG_ONE, msgTeamInfo, .player = pPlayer);     write_byte(iSender);     write_string(szTeamName);     message_end(); } #endif
__________________








CrazY. is offline
eat1k
Senior Member
Join Date: Apr 2018
Old 03-02-2019 , 05:18   Re: print_team_* always white
Reply With Quote #4

We already have a colorchat include for backward compability.

PHP Code:
#if defined _colorchat_included
    #endinput
#endif
#define _colorchat_included

/* ColorChat Support */
#define NORMAL    DontChange
#define GREEN    DontChange
#define RED        Red
#define BLUE    Blue
#define GREY    Grey
#define ColorChat client_print_color

#define MAX_TRANSLATION_LENGTH 2048

enum {
    
DontChange 0,
    
Grey = -1,
    
Red = -2,
    
Blue = -3
};

#define print_team_default  DontChange
#define print_team_grey     Grey
#define print_team_red      Red
#define print_team_blue     Blue

stock client_print_color(idsender, const fmt[], any:...)
{
    
// check if id is different from 0
    
if (id && !is_user_connected(id))
    {
        return 
0;
    }

    if (
sender Blue || sender 32)
    {
        
sender DontChange;
    }
    else if (
sender DontChange)
    {
        
sender = -sender 32// align indexes to the TeamInfo ones
    
}

    static const 
szTeamName[][] =
    {
        
"",
        
"TERRORIST",
        
"CT"
    
};

    new 
szMessage[191];

    new 
iParams numargs();

    
// Specific player code
    
if (id)
    {
        if (
iParams == 3)
        {
            
copy(szMessagecharsmax(szMessage), fmt); // copy so message length doesn't exceed critical 192 value
        
}
        else
        {
            
vformat(szMessagecharsmax(szMessage), fmt4);
        }

        if (
sender > (32 Grey))
        {
            if (
sender > (32 Blue))
            {
                
sender id;
            }
            else
            {
                
_CC_TeamInfo(idsenderszTeamName[sender - (32 Grey)]);
            }
        }
        
_CC_SayText(idsenderszMessage);
    }

    
// Send message to all players
    
else
    {
        
// Figure out if at least 1 player is connected
        // so we don't execute useless useless code if not
        
new iPlayers[32], iNum;
        
get_players(iPlayersiNum"ch");
        if (!
iNum)
        {
            return 
0;
        }

        new 
iMlNumberij;
        new Array:
aStoreML ArrayCreate();
        if (
iParams >= 5// ML can be used
        
{
            for (
3iParamsj++)
            {
                
// retrieve original param value and check if it's LANG_PLAYER value
                
if (getarg(j) == LANG_PLAYER)
                {
                    
0;
                    
// as LANG_PLAYER == -1, check if next parm string is a registered language translation
                    
while ((szMessage getarg(1i++))) {}
                    if (
GetLangTransKey(szMessage) != TransKey_Bad)
                    {
                        
// Store that arg as LANG_PLAYER so we can alter it later
                        
ArrayPushCell(aStoreMLj++);

                        
// Update ML array saire so we'll know 1st if ML is used,
                        // 2nd how many args we have to alterate
                        
iMlNumber++;
                    }
                }
            }
        }

        
// If arraysize == 0, ML is not used
        // we can only send 1 MSG_ALL message if sender != 0
        
if (!iMlNumber)
        {
            if (
iParams == 3)
            {
                
copy(szMessagecharsmax(szMessage), fmt);
            }
            else
            {
                
vformat(szMessagecharsmax(szMessage), fmt4);
            }
            if (
sender < (32 Blue)) // if 0 is passed, need to loop
            
{
                if (
sender > (32 Grey))
                {
                    
_CC_TeamInfo(0senderszTeamName[sender - (32 Grey)]);
                }
                
_CC_SayText(0senderszMessage);
                return 
1;
            }
        }

        if (
sender > (32 Blue))
        {
            
sender 0// use receiver index
        
}

        for (--
iNumiNum >= 0iNum--)
        {
            
id iPlayers[iNum];

            if (
iMlNumber)
            {
                for (
0iMlNumberj++)
                {
                    
// Set all LANG_PLAYER args to player index ( = id )
                    // so we can format the text for that specific player
                    
setarg(ArrayGetCell(aStoreMLj), _id);
                }

                
// format string for specific player
                
vformat(szMessagecharsmax(szMessage), fmt4);
            }

            if (
sender > (32 Grey))
            {
                
_CC_TeamInfo(idsenderszTeamName[sender - (32 Grey)]);
            }
            
_CC_SayText(idsenderszMessage);
        }

        
ArrayDestroy(aStoreML);
    }
    return 
1;
}

stock _CC_TeamInfo(iReceiveriSenderszTeam[])
{
    static 
iTeamInfo 0;
    if (!
iTeamInfo)
    {
        
iTeamInfo get_user_msgid("TeamInfo");
    }
    
message_begin(iReceiver MSG_ONE MSG_ALLiTeamInfo_iReceiver);
    
write_byte(iSender);
    
write_string(szTeam);
    
message_end();
}

stock _CC_SayText(iReceiveriSenderszMessage[])
{
    static 
iSayText 0;
    if (!
iSayText)
    {
        
iSayText get_user_msgid("SayText");
    }

    
// Prevent sending format and localization strings via chat
    
for (new 0192i++)
    {
        if (
szMessage == 0) break;
        if (
szMessage == '%' ||
            
szMessage == '#')
            
szMessage ' ';
    }
  
    
message_begin(iReceiver MSG_ONE MSG_ALLiSayText_iReceiver);
    
write_byte(iSender iSender iReceiver);
    if (
szMessage[0] > 4)
    {
        
write_byte(1);
        
szMessage[192 1] = 0;    // Two write_byte + string terminator
        
write_string(szMessage);
    }
    else
    {
        
szMessage[192 1] = 0;    // One write_byte + string terminator
        
write_string(szMessage);
    }
    
message_end();
}

new 
_translation_szBuffer[MAX_TRANSLATION_LENGTH];

stock register_dictionary_colored(const filename[])
{
    if (!
register_dictionary(filename))
    {
        return 
0;
    }

    new 
szFileName[256];
    
get_localinfo("amxx_datadir"szFileNamecharsmax(szFileName));
    
format(szFileNamecharsmax(szFileName), "%s/lang/%s"szFileNamefilename);
    new 
fp fopen(szFileName"rt");
    if (!
fp)
    {
        
log_amx("Failed to open %s"szFileName);
        return 
0;
    }

    new 
szLang[3], szKey[64], TransKey:iKey;

    while (!
feof(fp))
    {
        
fgets(fp_translation_szBuffercharsmax(_translation_szBuffer));
        
trim(_translation_szBuffer);

        if (
_translation_szBuffer[0] == '[')
        {
            
strtok(_translation_szBuffer[1], szLangcharsmax(szLang), _translation_szBuffer1']');
        }
        else if (
_translation_szBuffer[0])
        {
            
strbreak(_translation_szBufferszKeycharsmax(szKey), _translation_szBuffercharsmax(_translation_szBuffer));
            
iKey GetLangTransKey(szKey);
            if (
iKey != TransKey_Bad)
            {
                
replace_all(_translation_szBuffercharsmax(_translation_szBuffer), "!g""^4");
                
replace_all(_translation_szBuffercharsmax(_translation_szBuffer), "!t""^3");
                
replace_all(_translation_szBuffercharsmax(_translation_szBuffer), "!n""^1");
                
replace_all(_translation_szBuffercharsmax(_translation_szBuffer), "^^4""^4");
                
replace_all(_translation_szBuffercharsmax(_translation_szBuffer), "^^3""^3");
                
replace_all(_translation_szBuffercharsmax(_translation_szBuffer), "^^1""^1");
                
replace_all(_translation_szBuffercharsmax(_translation_szBuffer), "^^n""^n");
                
replace_all(_translation_szBuffercharsmax(_translation_szBuffer), "^^t""^t");
                
AddTranslation(szLangiKey_translation_szBuffer[2]);
            }
        }
    }

    
fclose(fp);
    return 
1;
}

/* ML from AMXX 1.8.3 support */
#define register_dictionary register_dictionary_colored 
Source: https://dev-cs.ru/threads/222/page-2#post-12669
__________________
eat1k is offline
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 14:13.


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