Color en mensaje...
#1

їQuй tal?,

Bueno, resulta quй tengo йsta funciуn (estarб mбs abajo) el cual trabaja todo perfecto, pero, el problema estб es que ' no continъa con el color asignado con el formato HTML, ejemplo: {FFFF00} ', aparece el mensaje con el color principal del primer mensaje.

Les dejarй un ejemplo:

Код:
new string[32];
format(string, sizeof(string), "hola mundo {FFFF00}hello world");
SCM2(playerid, -1, string);
Obviamente no saldrб la doble lнnea por que no supera los 100 caracteres, pero lo que quiero a dar a entender es que el primer color (-1) que en йste caso es blanco, y {FFFF00} que es amarillo, en la segunda lнnea manda el primero, їcуmo harнa para continuar con el color de la anterior lнnea?.


funciуn:

Код:
stock SCM2(playerid, color, text[])
{
    if(strlen(text) > 99)
	{
		new text1[100],
			text2[100],
			string[144];

		strmid(text2, text, 99, 144);
		strmid(text1, text, 0, 99);

		format(string, 144, "%s...", text1);
		SCM(playerid, color, string);

		format(string, 144, "...%s", text2);
		SCM(playerid, color, string);
	}
	else SCM(playerid, color, text);
    return 1;
}
saludos.
Reply
#2

Bueno, aquн les hice unas modificaciones..

Код:
stock SCM2(playerid, color, text[])
{
    if(strlen(text) > 99)
	{
		new text1[120],
			text2[120],
			pos = -1,
			hexant[10];

		strmid(text2, text, 99, 144);
		strmid(text1, text, 0, 99);

		for(new pos_a; pos_a != -1; pos_a = strfind(text1, "{", false, (pos_a == 0 ? pos_a : pos_a+7)))
			pos = pos_a;
		if(pos == 0) pos = -1;
		if(pos+7 > 99)
		{
        	new a = strfind(text2, "}")+1;
			strmid(hexant, text2, 0, a),
			strdel(text2, 0, a),
			strins(text1, hexant, strlen(text1));
		}

		if(pos != -1)
            strmid(hexant, text1, pos, pos+8),
			strins(text2, hexant, 0);
			
        strins(text1, "...", strlen(text1));
		strins(text2, "...", 0);
		
		SCM(playerid, color, text1);
		SCM(playerid, color, text2);
	}
	else SCM(playerid, color, text);
    return 1;
}
solo debes usarlo de manera normal.. es decir tu puedes escribir lo que desees y harб lo que deseas, es decir puede hacer que continuй la lнnea del mismo color y tambiйn puedes ubicar cuantos puedas, por ejemplo:

Код:
SCM2(0, -1, "hola mundoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo {FFFF00}hello world oooooooooooooooooooooooooooooooooooooooooooo{FFFFFF}xDDDD");
El resultado serнa:
Код:
hola mundoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo {FFFF00}hello world ooooooooooo...
...{FFFF00}ooooooooooooooooooooooooooooooooo{FFFFFF}xDDD
Tambiйn si llegas al mбximo de carбcteres y el color se quedo por ejemplo asн "{FF" pues te lo completarб para evitar errores.

PD: Para evitar que falle la funciуn necesitas poner los colores rgb bien, es decir entre {} y con los 6 caracteres dentro.
Reply
#3

Ahora no aparece la segunda lнnea...
Reply
#4

Quote:
Originally Posted by LatinZ
Посмотреть сообщение
Ahora no aparece la segunda lнnea...
hem.. es extraсo, yo lo probй y funciona perfectamente.. їQuй exactamente le estбs poniendo? o.. їCуmo la estбs usando?
Reply
#5

ЎSaludos! Mira a ver si este te sirve como guнa.

https://sampforum.blast.hk/showthread.php?tid=600791
Reply
#6

Quote:
Originally Posted by Jastak
Посмотреть сообщение
hem.. es extraсo, yo lo probй y funciona perfectamente.. їQuй exactamente le estбs poniendo? o.. їCуmo la estбs usando?
Ya funciona, ahora el pequeсo problema es que los 3 puntos suspensivos de la segunda lнnea aparece con el color de la primera, osea:

SCM2(playerid, red, "hola mundo {ffff00}hello world");

Hola mundo serнa lo rojo, hello world amarillo, pero si lo separamos entre hola mundo y hello world, los 3 puntos suspensivos de la segunda lнnea aparecen rojo, cuando deberнan aparecer amarillo ya que es el color asignado antes de la separaciуn, no sй si me di a entender.

otro ejemplo:

hola mundo texxxxxxxxxxxxxxxxxxxxxxxxxxxto amarillo...
... hello world
Reply
#7

Cambia el cуdigo por este:

Код:
stock SCM2(playerid, color, text[])
{
    if(strlen(text) > 99)
	{
		new text1[120],
			text2[120],
			pos = -1,
			hexant[10];

		strmid(text2, text, 99, 144);
		strmid(text1, text, 0, 99);
		
		strins(text1, "...", strlen(text1));
		strins(text2, "...", 0);

		for(new pos_a; pos_a != -1; pos_a = strfind(text1, "{", false, (pos_a == 0 ? pos_a : pos_a+7)))
			pos = pos_a;
		if(pos == 0) pos = -1;
		if(pos+7 > 99)
		{
        	new a = strfind(text2, "}")+1;
			strmid(hexant, text2, 0, a),
			strdel(text2, 0, a),
			strins(text1, hexant, strlen(text1));
		}

		if(pos != -1)
            strmid(hexant, text1, pos, pos+8),
			strins(text2, hexant, 0);

		SCM(playerid, color, text1);
		SCM(playerid, color, text2);
	}
	else SCM(playerid, color, text);
    return 1;
}
Reply
#8

Listo, analizarй el cуdigo para ver y aprender sobre lo que tocaste, gracias.
Reply
#9

vale, me parece bien, pero el que te pasй va dar un error en una circunstancia especнfica, cбmbialo por este:

Код:
stock SCM2(playerid, color, text[])
{
    if(strlen(text) > 99)
	{
		new text1[120],
			text2[120],
			pos = -1,
			hexant[10];

		strmid(text2, text, 99, 144);
		strmid(text1, text, 0, 99);
		
		strins(text1, "...", strlen(text1));
		strins(text2, "...", 0);

		for(new pos_a; pos_a != -1; pos_a = strfind(text1, "{", false, (pos_a == 0 ? pos_a : pos_a+7)))
			pos = pos_a;
		if(pos == 0) pos = -1;
		if(pos+7 > 99)
		{
        	new a = strfind(text2, "}")+1;
			strmid(hexant, text2, 3, a), // estaba en 0, pero como van a ir los "..." primero se debe poner desde ese punto
			strdel(text2, 3, a), // estaba en 0, pero como van a ir los "..." primero se debe poner desde ese punto
			strins(text1, hexant, strlen(text1));
		}

		if(pos != -1)
            strmid(hexant, text1, pos, pos+8),
			strins(text2, hexant, 0);

		SCM(playerid, color, text1);
		SCM(playerid, color, text2);
	}
	else SCM(playerid, color, text);
    return 1;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)