Entendiendo el ChatColor
#26
vformat(Buffer, charsmax(Buffer), Msg, 3)

Creo que no necesito decirlo Whatever

PD: Te recomiendo MSG_ONE_UNRELIABLE.
Responder
#27
jajajajajjaa, me re olvidé

sobre eso de MSG_ONE y unrealiable tengo una duda, quisiera saber cuando es posible que un mensaje no se envíe, porque la verdad que hay ciertos momentos en los que es necesario enviarlo.
no quiero depender de unreliable y luego que empiecen a faltar mensajes por ahí...

y otra cosa sobre lo que dijiste del 33, no hay que enviar 33 sino el valor de get_maxplayers() + 1, que en el caso de ser 32 slots sí que sería 33, pero no siempre.
(17/04/2015, 03:36 PM)Neeeeeeeeeel.- escribió: No se va a volver a conectar a internet en toda su puta vida... nadie sube porno a mi foro y vive para contarlo.
Responder
#28
(06/08/2014, 12:01 PM)RauliTop escribió: jajajajajjaa, me re olvidé

sobre eso de MSG_ONE y unrealiable tengo una duda, quisiera saber cuando es posible que un mensaje no se envíe, porque la verdad que hay ciertos momentos en los que es necesario enviarlo.
no quiero depender de unreliable y luego que empiecen a faltar mensajes por ahí...

y otra cosa sobre lo que dijiste del 33, no hay que enviar 33 sino el valor de get_maxplayers() + 1, que en el caso de ser 32 slots sí que sería 33, pero no siempre.

cuando tienes mucho ping por ejemplo, o cuando te mandan muchos mensajes al mismo tiempo es posible que alguno se pierda.
Ingeniero agrónomo y desarrollador de Software.

tutoriales-allied
buscas un zp?

"La imitación es la forma más sincera de admiración con la que puede pagar la mediocridad a la grandeza"

Merci Alliedmodders pour m'introduire dans la programmation.
Responder
#29
(06/08/2014, 02:18 PM)roccoxx escribió: cuando tienes mucho ping por ejemplo, o cuando te mandan muchos mensajes al mismo tiempo es posible que alguno se pierda.

Se pierden con MSG_ONE? Con MSG_ONE_UNRELIABLE no se pierden?
Believe, be yourself and don't hold on to just one dream ❤

https://github.com/FEDERICOMB96
Responder
#30
(06/08/2014, 02:19 PM)Federicomb escribió:
(06/08/2014, 02:18 PM)roccoxx escribió: cuando tienes mucho ping por ejemplo, o cuando te mandan muchos mensajes al mismo tiempo es posible que alguno se pierda.

Se pierden con MSG_ONE? Con MSG_ONE_UNRELIABLE no se pierden?

se pierden con los mensajes del canal no seguro, en este caso MSG_ONE_UNRELIABLE.
Ingeniero agrónomo y desarrollador de Software.

tutoriales-allied
buscas un zp?

"La imitación es la forma más sincera de admiración con la que puede pagar la mediocridad a la grandeza"

Merci Alliedmodders pour m'introduire dans la programmation.
Responder
#31
(06/08/2014, 12:01 PM)RauliTop escribió: jajajajajjaa, me re olvidé

sobre eso de MSG_ONE y unrealiable tengo una duda, quisiera saber cuando es posible que un mensaje no se envíe, porque la verdad que hay ciertos momentos en los que es necesario enviarlo.
no quiero depender de unreliable y luego que empiecen a faltar mensajes por ahí...

y otra cosa sobre lo que dijiste del 33, no hay que enviar 33 sino el valor de get_maxplayers() + 1, que en el caso de ser 32 slots sí que sería 33, pero no siempre.

No hace falta get_maxplayers, no se ganaría nada si con 33 funcionará igual. Así tengas 8 slots, 33 seguirá siendo seguro; eso lo probé.
Es difícil que un mensaje SayText no llegue a enviarse, a menos que estés lidiando con 2000 de latency o algo así... es posible que se pierdan como también es posible que mañana haya una invasión alienígena Whatever
Responder
#32
vale gracias, entonces es muy probable

pd:roccox marica comprame el go
(17/04/2015, 03:36 PM)Neeeeeeeeeel.- escribió: No se va a volver a conectar a internet en toda su puta vida... nadie sube porno a mi foro y vive para contarlo.
Responder
#33
Yo se que ustedes son los Dioses del Pawn, que estan aprendiendo desde hace 2.000 años A.C pero:

[Imagen: thump_9111539aimmapdeagle0000.jpg]

Código PHP:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Otro fracaso mio c:"
#define VERSION "1.0"
#define AUTHOR ";LuKks.-'"


public plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
register_clcmd("say /chatcolor""msj")
    
register_clcmd("say /chatcolor2""msj2")
}

public 
msj(idchatcolor(id"!g[amxmodx-es.com]!team ;LuKks.-' !y--- !teamPrimero replace_all luego vformat.")
public 
msj2(idchatcolor2(id"!g[amxmodx-es.com]!team ;LuKks.-' !y--- !teamPrimero vformat luego replace_all.")

stock chatcolor(id, const input[], any:...)
{
    static 
szMsg[191], msgSayText;
    
    if (!
msgSayText)
        
msgSayText get_user_msgid("SayText");

    
replace_all(szMsg190"!g""^4");
    
replace_all(szMsg190"!y""^1");
    
replace_all(szMsg190"!team""^3");
    
// MAL
    
vformat(szMsg190input3);
    
    
message_begin(id MSG_ONE_UNRELIABLE MSG_BROADCASTmsgSayText, .player id);
    
write_byte(id id 33);
    
write_string(szMsg);
    
message_end();

/*
--------------> --------------> -------------->
*/
stock chatcolor2(id, const input[], any:...)
{
    static 
szMsg[191], msgSayText;
    
    if (!
msgSayText)
        
msgSayText get_user_msgid("SayText");

    
vformat(szMsg190input3);
    
// BIEN
    
replace_all(szMsg190"!g""^4");
    
replace_all(szMsg190"!y""^1");
    
replace_all(szMsg190"!team""^3");
    
    
message_begin(id MSG_ONE_UNRELIABLE MSG_BROADCASTmsgSayText, .player id);
    
write_byte(id id 33);
    
write_string(szMsg);
    
message_end();

Responder
#34
Personalmente utilizo esto:
Código PHP:
enum {
    
color_team=0,
    
color_grey,
    
color_red,
    
color_blue
}

new 
g_msgSayTextg_msgTeamInfo

public plugin_init()
{
    
g_msgSayText get_user_msgid("SayText")
    
g_msgTeamInfo get_user_msgid("TeamInfo")
}

public 
plugin_natives()
{
    
register_native("baseoa_chat_color""native_chat_color")
}

public 
client_putinserver(id)
{
    
set_task(0.2"task_send_teaminfo"id)
}

public 
task_send_teaminfo(id)
{
    if(!
is_user_connected(id)) return
    
    
send_teaminfo(id33""// Creo que si entra a un servidor que mande un teaminfo al slot 33 no se limpia al entrar a otro.
    
send_teaminfo(id34"TERRORIST")
    
send_teaminfo(id35"CT")
}

public 
native_chat_color(iPluginiParams)
{
    static 
msg[128], id
    
    id 
get_param(1)
    
    if(
id && !is_user_connected(id)) return
    
    if(
iParams == 3get_string(3msgcharsmax(msg))
    else 
vdformat(msgcharsmax(msg), 34)
    
    
chat_color_footer(idget_param(1)%4msgcharsmax(msg))
}

stock chat_color(idcolor=color_team, const input[], any:...)
{
    static 
msg[128]
    
    if(
id && !is_user_connected(id)) return
    
    if(
numargs() == 3)  copy(msgcharsmax(msg), input)
    else 
vformat(msgcharsmax(msg), input4)
    
    
chat_color_footer(idcolor%4msgcharsmax(msg))
}

chat_color_footer(idcolormsg[], len)
{
    
replace_all(msglen"!g""^4")
    
replace_all(msglen"!y""^1")
    
replace_all(msglen"!t""^3")
    
    if(
id || color) {
        
send_saytext(idcolormsg)
        return
    }
    static 
players[32], count

    get_players
(playerscount"ch")
    for( ; 
id countid++)
        
send_saytext(players[id], 0msg)
}

send_teaminfo(receiverplayeridteam[])
{
    
message_begin(MSG_ONEg_msgTeamInfo_receiver)
    
write_byte(playerid)
    
write_string(team)
    
message_end()
}

send_saytext(receivercolormsg[])
{
    
message_begin(receiver?MSG_ONE_UNRELIABLE:MSG_BROADCASTg_msgSayText_receiver)
    
write_byte(color?(32+color):receiver)
    
write_string(msg)
    
message_end()

No es algo "portable" como para meter en unos stocks, la idea es que este en un plugin base y utilizar la native.
El funcionamiento es similar al ColorChat de ConnorMcLeod con algunas mejoras y sin soporte para lang.
Responder
#35
Alguien podria poner un ejemplo del printf de rak editado para mostrarle el mensaje a todos..

seria asi no? printf(0, DEFAULT, "%s Acme Inc.- %s", AUTHOR, PLUGIN) // comun
Responder
#36
(08/12/2014, 04:49 AM)wicho escribió: Alguien podria poner un ejemplo del printf de rak editado para mostrarle el mensaje a todos..

seria asi no? printf(0, DEFAULT, "%s Acme Inc.- %s", AUTHOR, PLUGIN) // comun

fijate porque hay 2, hay uno que no soporta mensaje para todos y solo index
si usas el 2do, si... es asi
Responder
#37
Este stock esta mal echo cierto?

Código PHP:
stock zp_colored_print(target, const message[], any:...)
{
    static 
buffer[512], msg_SayText 0
    
if( !msg_SayText msg_SayText get_user_msgid("SayText")
    
    
// Send to everyone
    
if (!target)
    {
        static 
playermaxplayersargscount
        maxplayers 
get_maxplayers()
        
argscount numargs()
        
        for (
player 1player <= maxplayersplayer++)
        {
            
// Not connected
            
if (!is_user_connected(player))
                continue;
            
            
// Remember changed arguments
            
static arg_indexchanged_args[20], changedcount // [20] = max LANG_PLAYER occurencies    
            
changedcount 0
            
            
// Replace LANG_PLAYER with player id
            
for (arg_index 2arg_index argscountarg_index++)
            {
                if (
getarg(arg_index) == LANG_PLAYER && arg_index argscount)
                {
                    
// Check if next param string is a registered language translation
                    
static lang_key[64], arg_subindex
                    arg_subindex 
0
                    
while ((lang_key[arg_subindex] = getarg(arg_index 1arg_subindex++))) { /* keep looping */ }
                    if (
GetLangTransKey(lang_key) != TransKey_Bad)
                    {
                        
setarg(arg_index0player)
                        
changed_args[changedcount++] = arg_index
                        arg_index
++ // skip next argument since we know it's a translation key
                    
}
                }
            }
            
            
// Format message for player (+add ZP prefix)
            
vformat(buffercharsmax(buffer), message3)
            
format(buffercharsmax(buffer), "%s%s"ZP_PREFIXbuffer)
            
            
// Send it
            
message_begin(MSG_ONE_UNRELIABLEmsg_SayText_player)
            
write_byte(player)
            
write_string(buffer)
            
message_end()
            
            
// Replace back player id's with LANG_PLAYER
            
for (arg_index 0arg_index changedcountarg_index++)
                
setarg(changed_args[arg_index], 0LANG_PLAYER)
        }
    }
    
// Send to specific target
    
else
    {
        
// Format message for player (+add ZP prefix)
        
vformat(buffercharsmax(buffer), message3)
        
format(buffercharsmax(buffer), "%s%s"ZP_PREFIXbuffer)
        
        
// Send it
        
message_begin(MSG_ONEmsg_SayText_target)
        
write_byte(target)
        
write_string(buffer)
        
message_end()
    }
}
stock zp_colored_print(target, const message[], any:...)
{
    static 
buffer[512], msg_SayText 0
    
if( !msg_SayText msg_SayText get_user_msgid("SayText")
    
    
// Send to everyone
    
if (!target)
    {
        static 
playermaxplayersargscount
        maxplayers 
get_maxplayers()
        
argscount numargs()
        
        for (
player 1player <= maxplayersplayer++)
        {
            
// Not connected
            
if (!is_user_connected(player))
                continue;
            
            
// Remember changed arguments
            
static arg_indexchanged_args[20], changedcount // [20] = max LANG_PLAYER occurencies    
            
changedcount 0
            
            
// Replace LANG_PLAYER with player id
            
for (arg_index 2arg_index argscountarg_index++)
            {
                if (
getarg(arg_index) == LANG_PLAYER && arg_index argscount)
                {
                    
// Check if next param string is a registered language translation
                    
static lang_key[64], arg_subindex
                    arg_subindex 
0
                    
while ((lang_key[arg_subindex] = getarg(arg_index 1arg_subindex++))) { /* keep looping */ }
                    if (
GetLangTransKey(lang_key) != TransKey_Bad)
                    {
                        
setarg(arg_index0player)
                        
changed_args[changedcount++] = arg_index
                        arg_index
++ // skip next argument since we know it's a translation key
                    
}
                }
            }
            
            
// Format message for player (+add ZP prefix)
            
vformat(buffercharsmax(buffer), message3)
            
format(buffercharsmax(buffer), "%s%s"ZP_PREFIXbuffer)
            
            
// Send it
            
message_begin(MSG_ONE_UNRELIABLEmsg_SayText_player)
            
write_byte(player)
            
write_string(buffer)
            
message_end()
            
            
// Replace back player id's with LANG_PLAYER
            
for (arg_index 0arg_index changedcountarg_index++)
                
setarg(changed_args[arg_index], 0LANG_PLAYER)
        }
    }
    
// Send to specific target
    
else
    {
        
// Format message for player (+add ZP prefix)
        
vformat(buffercharsmax(buffer), message3)
        
format(buffercharsmax(buffer), "%s%s"ZP_PREFIXbuffer)
        
        
// Send it
        
message_begin(MSG_ONEmsg_SayText_target)
        
write_byte(target)
        
write_string(buffer)
        
message_end()
    }

Responder
#38
No parece que está mal, hay un par de natives que se llaman más de una vez por nada pero no es algo grave. Ese stock tiene la particularidad de poder mostrar multilang con index 0, algo que otros stocks de chat color no hacen...
Responder
#39
Hola revivo este tema porque tengo una duda sobre el chatcolor. Lo que quería saber si hay alguna forma para que en el say el color que yo elija. Por ejemplo: si yo escribo "HOLA A TODOS" para que salga en blanco o en gris para todos los jugadores tanto para los cts como para los tts. Nosé si me explique bien. Porque si yo pongo "^3HOLA A TODOS" sale el color del mismo equipo. Muchas Gracias. Saludos!
Steam
Responder
#40
[*]
Código PHP:
write_byte(id
Vamos otra vez con "SayText". El primer argumento en este mensaje es un byte, que es el ID del jugador que envia el mensaje. El color depende del equipo de este jugador. El id puede ser un jugador no conectado, no tendremos problemas con ello, en este caso el color será el del equipo del último jugador que tuvo ese número de ID.
DATO (Gracias Destro por la información): Podemos "hacer creer" a los jugadores que el jugador (o entidad) con ID 33, 34, 35, etc pertenece a un equipo, así al utilizar estos IDs en este byte del mensaje obtendremos los colores deseados. (Más info en los stocks).
Responder
#41
y cual seria el símbolo a utilizar? si quiero que salga azul o rojo para todos? ^1 ^3 ^4?
Osea me refiero a que si yo pongo "HOLA A TODOS" ¿que le pondría antes del mensaje a enviar del mismo color para todos los jugadores? ^1,^2(no existe no?),^3,^4?
Steam
Responder
#42
(28/08/2017, 02:44 PM)Pablo_1998 escribió: y cual seria el símbolo a utilizar? si quiero que salga azul o rojo para todos? ^1 ^3 ^4?
Osea me refiero a que si yo pongo "HOLA A TODOS" ¿que le pondría antes del mensaje a enviar del mismo color para todos los jugadores? ^1,^2(no existe no?),^3,^4?

^3 es el color depende del equipo, si está en T va a ser rojo, si está en CT va a ser celeste y si esta de SPECT va a ser gris.

Responder
#43
si eso lo se, pero yo digo que si quiero poner "HOLA A TODOS" en blanco o gris para que le salga a todos el mismo color.
Steam
Responder
#44
Lee la parte de los stocks, encontrarás lo que necesitas.
Responder
#45
El stock que pasó Destro se lo puede adaptar al plugins de "ad_manager"? daría algún erro?
Steam
Responder
#46
Aunque esté esto un poco antiguo ya pero bueno, recomiendo usar para el AMXX >= 1.8.3:
Código PHP:
native client_print_color(indexsender, const message[], any:...); 
y no el stock que está. Y si no, aquí un colorchat.inc más adecuado: client_print_color para < AMXX 1.8.3.

Código PHP:
#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[i] = 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[i] == 0) break;
        if (
szMessage[i] == '%' ||
            
szMessage[i] == '#')
            
szMessage[i] = ' ';
    }
    
    
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 
Plugins:
En GitHub
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)