[Pedido] Chat normal con uno de entorno. -
Th3Cr4k3r - 13.02.2016
ЎSaludos! vengo a pedirles un gran favor.
Acabу de entrar a un servidor llamado UnPlayer y he visto que al colocar en el chat general ( DP - Dentro del personaje ) y cuando colocas un signo de * llama tambiйn al chat de rol de entorno, por ejemplo:
Hola, como estбs *rнe*. Al poner *rнe* este sale del color purpura, osea del color que viene el comando /me pero si no pones dicho asterisco con unas letras pegadas no salga el color del chat de entorno.
Aquн les dejу una pequeсa imagen de la muestra.
Re: [Pedido] Chat normal con uno de entorno. -
SickAttack - 13.02.2016
Esta facil hacerlo, ocupas usar strfind (este retorna la posicion inicial) y strmid.
Re: [Pedido] Chat normal con uno de entorno. -
Jastak - 13.02.2016
yo te puedo ayudar en tu pedido, pero es recomendable que no pidas y que pienses, lуgicamente te voy a dar todo listo pero bueh, espero que aprendas un poco mбs de este cуdigo simple. Yo lo usaba para decoraciуn cuando un usuario ubicada "" y eso, pues usaba esta funciуn que hice ya hace tiempo.
Код:
stock SyntaxString(const text[], const characterSpecial, const colorDefault[], const colorSpecial[])
{
new
sz_newText[800],
n_count,
bool: b_initialized,
n_countNewText
;
while(n_count < strlen(text))
{
if( text[n_count] == characterSpecial && n_count == 0 && !b_initialized ||
text[n_count] == characterSpecial && text[n_count-1] == ' ' && !b_initialized ||
text[n_count] == characterSpecial && n_count == (strlen(text)-1) && b_initialized ||
text[n_count] == characterSpecial && text[n_count+1] == ' ' && b_initialized
)
{
if(!b_initialized) {
b_initialized=true, n_count++,
format(sz_newText, sizeof(sz_newText), "%s{%s}", sz_newText, colorSpecial),
n_countNewText = strlen(sz_newText);
}
else {
b_initialized = false, n_count++,
format(sz_newText, sizeof(sz_newText), "%s{%s}", sz_newText, colorDefault),
n_countNewText = strlen(sz_newText);
}
}
sz_newText[n_countNewText] = text[n_count];
n_countNewText++;
n_count++;
}
return sz_newText;
}
El uso es simple.
text[] = serнa el texto a cambiar, es decir "aaaaaaaaaaaa *rнe*"
characterSpecial = serнa el nъmero ASCII que quieres que sea el que compare, por ejemplo puedes poner '*' para que capture el ASCII del * y poder comprarlo.
colorDefault[] = serнa el color por defecto, es decir el color que ya estaba por ejemplo "FFFFFF".
colorSpecial[] = serнa el color que quieres que se ponga al hacer la sintaxis, ejemplo: "FF0000".
Aquн de paso tienes un ejemplo:
Код:
public OnPlayerText(playerid, text[])
{
SendClientMessageToAll(-1, SyntaxString(text, '*', "FFFFFF", "FF0000"));
return 0;
}
Espero que te sirva.
Re: [Pedido] Chat normal con uno de entorno. -
SickAttack - 16.02.2016
Quote:
Originally Posted by Jastak
...
|
Esta exagerada tu funcion.
pawn Код:
// ** INCLUDES
#include <a_samp>
// ** DEFINES
// *** FUNCTIONS
#define strcpy(%0,%1,%2) strcat((%0[0] = '\0', %0), %1, %2)
// ** MAIN
main()
{
print("Loaded \"color_opening_and_closing_tags.amx\".");
}
// ** CALLBACKS
public OnGameModeInit()
{
return 1;
}
public OnGameModeExit()
{
return 1;
}
public OnPlayerConnect(playerid)
{
SetPlayerColor(playerid, 0xFF0000FF);
return 1;
}
public OnPlayerText(playerid, text[])
{
new opening_tag_pos = strfind(text, "*", true);
if(opening_tag_pos != -1)
{
new new_text[128], closing_tag_pos = strfind(text, "*", true, (opening_tag_pos + 1));
strcpy(new_text, text, 128);
if(closing_tag_pos != -1)
{
new string[256];
strdel(new_text, opening_tag_pos, (opening_tag_pos + 1));
strdel(new_text, (closing_tag_pos - 1), closing_tag_pos);
strins(new_text, "{FFFFFF}", (closing_tag_pos - 1), 128);
strins(new_text, "{FFF000}", opening_tag_pos, 128);
format(string, sizeof(string), "%s: {FFFFFF}%s", ReturnPlayerName(playerid), new_text);
SendClientMessageToAll(GetPlayerColor(playerid), string);
return 0;
}
}
return 1;
}
// ** FUNCTIONS
stock ReturnPlayerName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
return name;
}
Esto nomas te permitira usar una vez los dos "*", si mandas, por ejemplo "hola *hola* hola *hola*". Solo la primera "*hola*" cambiara de color. Y el otro sera omitido. Si quieres tu puedes aсadir eso.
Re: [Pedido] Chat normal con uno de entorno. -
Jastak - 16.02.2016
Quote:
Originally Posted by SickAttack
...
|
Esa es otra manera de hacerlo pero como dije yo lo usaba para otras cosas y el mio permite ** cuantos sea.. pues y eso, lуgicamente se puede usar con strfind para hacerlo ilimitados de igual manera.
Respuesta: [Pedido] Chat normal con uno de entorno. -
DesingMyCry - 16.02.2016
Hay mil y un forma de hacerlo. Pero si hablan de "cуdigo limpio", ninguno publicado es de agrado visual. Quizб esto:
pawn Код:
stock colorear(cadena[], colorear[] = "{000000}", defecto[] = "{FFFFFF}", caracter = '*')
{
// Cadena final
new retorno[256];
for(new i, z, estado, longitud = strlen(cadena); i < longitud; i++)
if(cadena[i] == caracter) strcat(retorno, estado ? colorear : defecto), z += estado ? strlen(defecto) : strlen(colorear), estado = !estado;
else retorno[z++] = cadena[i];
return retorno;
}
Re: [Pedido] Chat normal con uno de entorno. -
Jastak - 16.02.2016
se ve bien, mucho mejor optimizado de cara cуdigo (lнneas).
Re: [Pedido] Chat normal con uno de entorno. -
lucesita - 17.02.2016
Podrнas hacer asн:
pawn Код:
stock reemplazarColores(src[], firstColor[], secondaryColor[], character)
{
new bool:usingSecondaryColor = false;
for(new i; i<strlen(src);i++)
{
if (src[i]==character)
{
// invertir color
usingSecondaryColor = !usingSecondaryColor;
strins(src, usingSecondaryColor ? secondaryColor : primaryColor, i);
i += 8; // 8 caracteres que es el largo de un color
}
}
}
Re: Respuesta: [Pedido] Chat normal con uno de entorno. -
SickAttack - 18.02.2016
Quote:
Originally Posted by Jastak
Esa es otra manera de hacerlo pero como dije yo lo usaba para otras cosas y el mio permite ** cuantos sea.. pues y eso, lуgicamente se puede usar con strfind para hacerlo ilimitados de igual manera.
|
Muchos colores hace el limite no visual muy corto, seria mejor limitarlo a un uso. Pero eso depende del OP.
Quote:
Originally Posted by DesingMyCry
Hay mil y un forma de hacerlo. Pero si hablan de "cуdigo limpio", ninguno publicado es de agrado visual. Quizб esto:
pawn Код:
stock colorear(cadena[], colorear[] = "{000000}", defecto[] = "{FFFFFF}", caracter = '*') { // Cadena final new retorno[256];
for(new i, z, estado, longitud = strlen(cadena); i < longitud; i++) if(cadena[i] == caracter) strcat(retorno, estado ? colorear : defecto), z += estado ? strlen(defecto) : strlen(colorear), estado = !estado; else retorno[z++] = cadena[i];
return retorno; }
|
No funciona.
Respuesta: Re: [Pedido] Chat normal con uno de entorno. -
Th3Cr4k3r - 19.02.2016
Quote:
Originally Posted by SickAttack
Esta exagerada tu funcion.
pawn Код:
// ** INCLUDES
#include <a_samp>
// ** DEFINES
// *** FUNCTIONS
#define strcpy(%0,%1,%2) strcat((%0[0] = '\0', %0), %1, %2)
// ** MAIN
main() { print("Loaded \"color_opening_and_closing_tags.amx\"."); }
// ** CALLBACKS
public OnGameModeInit() { return 1; }
public OnGameModeExit() { return 1; }
public OnPlayerConnect(playerid) { SetPlayerColor(playerid, 0xFF0000FF); return 1; }
public OnPlayerText(playerid, text[]) { new opening_tag_pos = strfind(text, "*", true); if(opening_tag_pos != -1) { new new_text[128], closing_tag_pos = strfind(text, "*", true, (opening_tag_pos + 1)); strcpy(new_text, text, 128);
if(closing_tag_pos != -1) { new string[256]; strdel(new_text, opening_tag_pos, (opening_tag_pos + 1)); strdel(new_text, (closing_tag_pos - 1), closing_tag_pos);
strins(new_text, "{FFFFFF}", (closing_tag_pos - 1), 128); strins(new_text, "{FFF000}", opening_tag_pos, 128);
format(string, sizeof(string), "%s: {FFFFFF}%s", ReturnPlayerName(playerid), new_text); SendClientMessageToAll(GetPlayerColor(playerid), string); return 0; } } return 1; }
// ** FUNCTIONS
stock ReturnPlayerName(playerid) { new name[MAX_PLAYER_NAME]; GetPlayerName(playerid, name, MAX_PLAYER_NAME); return name; }
Esto nomas te permitira usar una vez los dos "*", si mandas, por ejemplo "hola *hola* hola *hola*". Solo la primera "*hola*" cambiara de color. Y el otro sera omitido. Si quieres tu puedes aсadir eso.
|
ЎSaludos!
Me gustу bastante estб, ya que me llamу a la atenciуn que puedas poner el Mensaje principal, luego el rol de entorno y la continuaciуn... Yo lo habнa hecho de otra manera.
PHP код:
[HTML]new Asterisco = strfind(text, "*");
new string[172], Mensaje[172];
strmid(Mensaje, text, 0, strlen(text));
if(Asterisco != -1)
{
strdel(Mensaje, Asterisco, Asterisco+1);
strins(Mensaje, "{00E673}", Asterisco, 172);
format(string, sizeof(string), "%s dice: %s", NombreJugador(playerid), Mensaje);
ProxDetector(15.0, playerid, string, Hablar, Hablar2, Hablar3, Hablar4, Hablar5);
SetPlayerChatBubble(playerid, Mensaje, 0xFFFFFFFF, 15.0, 5000);
}
else
{
format(string, sizeof(string), "%s dice: %s", NombreJugador(playerid), text);
ProxDetector(15.0, playerid, string, Hablar, Hablar2, Hablar3, Hablar4, Hablar5);
SetPlayerChatBubble(playerid, text, 0xFFFFFFFF, 15.0, 5000);
}[/HTML]
Pero como lo hiciste tu me gustу mбs, solo cambie unas cosas en el tuyo y le aсadн unas variables que tenнa

gracias.
PD: Gracias a todos los que pusieron una soluciуn u ayuda... Se les agradece de corazуn, y sobre el ъltimo que comento que no habнa seсal de mi, tuve algunos problemas personales por eso estaba ausente.