Programación en Pawn - SAMP

[Aporte]: Como realizar un sistema de acentos optimizado.

Aprende lo que no sabes de este lenguaje y encuentra herramientas y códigos útiles.
Reglas del Foro

  • Si tu código es corto, no crees un tema nuevo para liberarlo, publica un mensaje en el tema [Funciones] ¡Publica tu código aquí!.
  • Si creas una guía, debes explicar el código claramente. Evita poner la explicación en forma de comentarios dentro del mismo y no olvides utilizar el BBCode correspondiente: [Pawn]Código aquí[/Pawn].
  • Si tu aporte es para un GameMode en específico, debes aclararlo en el mensaje.
  • Si tu código necesita plugins, includes u otros códigos adicionales para funcionar, debes mencionarlo en el mensaje.

Moderador: Ayudantes

Hola, muy buenas noches a todos, hoy en este maravilloso día les enseñaré un método de como crear un algoritmo de acentos de lo más eficiente que se pueda hacer.

Solo sigan mis pasos y verán que todo saldrá excelente.

1. Creamos nuestras constantes y un array monodimensional.
 Codigo Pawno:
1
2
3
4

#define DIALOG_ACENTO 0
#define NO_ACENTO -1

new Acento[MAX_PLAYERS];
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 4
2. Ponemos esta asignación en nuestro array al momento que el jugador se conecte.
 Codigo Pawno:
1
2
3
4
5

public OnPlayerConnect(playerid)
{
Acento[playerid] = NO_ACENTO;
return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 5
3. Creamos 1 función (GetNameAccent) que obtendrá el nombre del acento que tenga el jugador + un proceso (ProxDetector) que contendrá una pieza de código que verificará si la distancia de ese jugador se encuentra cerca del usuario que escribió.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

GetNameAccent(playerid)
{
new NameAccent[19][15] = {{"Britanico"},{"Asiático"},{"Escocés"},{"Irlandés"},{"Ruso"},{"Americano"},{"Español"},{"Colombiano"},{"Francés"},{"Italiano"},{"Ganster"},{"Australiano"},{"Árabe"},{"Argentino"},{"Canadiense"},{"Cubano"},{"Israeli"},{"Alemán"},{"Hippie"}};
return NameAccent[Acento[playerid]];
}

ProxDetector(playerid, Float:distance, color, string[])
{
new Float:vX, Float:vY, Float: vZ;
GetPlayerPos(playerid, vX, vY, vZ);
for(new userid = GetPlayerPoolSize(); userid > -1; userid--)
{
if(!((IsPlayerConnected(userid) == 1) && (IsPlayerInRangeOfPoint(userid, distance, vX, vY, vZ) == 1)))continue;
SendClientMessage(userid, color, string);
}
}
  Cantidad de llaves: Abiertas(23)-Cerradas(23) | Lineas Totales: 16
4. Desarrollamos un subalgoritmo dentro de la función OnDialogResponse para darle un código a cada botón del dialogo.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

public OnDialogResponse(playerid, dialogid, response, listitem)
{
switch(dialogid)
{
case DIALOG_ACENTO:
{
if(!(response != 0)) return GameTextForPlayer(playerid, "DIALOGO CERRADO", 5000, 3);
if(!(listitem <= 0 && listitem >= 19))
{
Acento[playerid] = listitem;
new texto1[128];
format(texto1, sizeof(texto1), "Ahora tu acento es %s, usa /acento para cambiarlo.", GetNameAccent(playerid));
SendClientMessage(playerid,-1, texto1);
}
}
}
return 1;
}
  Cantidad de llaves: Abiertas(4)-Cerradas(4) | Lineas Totales: 18
5. Modificamos la forma como se va a ver al momento que un jugador escriba en el chat para todos los usuarios.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17


public OnPlayerText(playerid, text[])
{
new chat[128], name[24];
GetPlayerName(playerid, name, sizeof(name));

if(!(Acento[playerid] <= 0))
{
format(chat, sizeof(chat), "[Acento %s] %s dice: %s" , GetNameAccent(playerid), name, text);
ProxDetector(playerid, 2.0, 0xFFFFFFAA, chat);
return 0;
}

format(chat, sizeof(chat), "%s dice: %s" , name, text);
ProxDetector(playerid, 2.0, 0xFFFFFFAA, chat);
return 0;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 17
6. Por ultimo creamos nuestro comando para que el jugador pueda cambiar de acento.
 Codigo Pawno:
1
2
3
4
5
6

CMD:acento(playerid)
{
ShowPlayerDialog(playerid, DIALOG_ACENTO, DIALOG_STYLE_LIST, "Acentos Disponibles","Britanico\nAsiático\nEscocés\nIrlandés\nRuso\nAmericano\nEspañol\nColombiano\nFrancés\nItaliano\nGangster\nAustraliano\nÁrabe\nArgentino\nCanadiense\nCubano\nIsraeli\nAlemán\nHippie", "Aceptar", "");
PlayerPlaySound(playerid,1139,0,0,0);
return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 6
Aquí te dejo todo el código fuente:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

#define DIALOG_ACENTO 0
#define NO_ACENTO -1

new Acento[MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
Acento[playerid] = NO_ACENTO;
return 1;
}

public OnPlayerText(playerid, text[])
{
new chat[128], name[24];
GetPlayerName(playerid, name, sizeof(name));

if(!(Acento[playerid] <= 0))
{
format(chat, sizeof(chat), "[Acento %s] %s dice: %s" , GetNameAccent(playerid), name, text);
ProxDetector(playerid, 2.0, 0xFFFFFFAA, chat);
return 0;
}

format(chat, sizeof(chat), "%s dice: %s" , name, text);
ProxDetector(playerid, 2.0, 0xFFFFFFAA, chat);
return 0;
}

public OnDialogResponse(playerid, dialogid, response, listitem)
{
switch(dialogid)
{
case DIALOG_ACENTO:
{
if(!(response != 0)) return GameTextForPlayer(playerid, "DIALOGO CERRADO", 5000, 3);
if(!(listitem <= 0 && listitem >= 19))
{
Acento[playerid] = listitem;
new texto1[128];
format(texto1, sizeof(texto1), "Ahora tu acento es %s, usa /acento para cambiarlo.", GetNameAccent(playerid));
SendClientMessage(playerid,-1, texto1);
}
}
}
return 1;
}

GetNameAccent(playerid)
{
new NameAccent[19][15] = {{"Britanico"},{"Asiático"},{"Escocés"},{"Irlandés"},{"Ruso"},{"Americano"},{"Español"},{"Colombiano"},{"Francés"},{"Italiano"},{"Ganster"},{"Australiano"},{"Árabe"},{"Argentino"},{"Canadiense"},{"Cubano"},{"Israeli"},{"Alemán"},{"Hippie"}};
return NameAccent[Acento[playerid]];
}

ProxDetector(playerid, Float:distance, color, string[])
{
new Float:vX, Float:vY, Float: vZ;
GetPlayerPos(playerid, vX, vY, vZ);
for(new userid = GetPlayerPoolSize(); userid > -1; userid--)
{
if(!((IsPlayerConnected(userid) == 1) && (IsPlayerInRangeOfPoint(userid, distance, vX, vY, vZ) == 1)))continue;
SendClientMessage(userid, color, string);
}
}

CMD:acento(playerid)
{
ShowPlayerDialog(playerid, DIALOG_ACENTO, DIALOG_STYLE_LIST, "Acentos Disponibles","Britanico\nAsiático\nEscocés\nIrlandés\nRuso\nAmericano\nEspañol\nColombiano\nFrancés\nItaliano\nGangster\nAustraliano\nÁrabe\nArgentino\nCanadiense\nCubano\nIsraeli\nAlemán\nHippie", "Aceptar", "");
PlayerPlaySound(playerid,1139,0,0,0);
return 1;
}
  Cantidad de llaves: Abiertas(31)-Cerradas(31) | Lineas Totales: 70
Como verán hemos creado algo muy sencillo pero ahorrando muchas lineas de código, ya que he visto sistemas de acentos que usan demasiadas instrucciones para una cosa tan fácil que se puede hacer.
Si te sirvió mi aporte para algo no te olvides de darme un +1 de reputación. -punk -grin
Les deseo a todos una feliz noche. -thumbup
+1 Buen aporte amigo lo usare en la Gm que estoy trabajando respetando los créditos -thumbup -thumbup
Es buen aporte , pero esperaria que pongas mas acentos la prox o almenos digas como hacerlo , aun asi , sin mas que decir +1
MrDave escribió:
22 Nov 2017 20:54
Hola, muy buenas noches a todos, hoy en este maravilloso día les enseñaré un método de como crear un algoritmo de acentos de lo más eficiente que se pueda hacer.

Solo sigan mis pasos y verán que todo saldrá excelente.

1. Creamos nuestras constantes y un array monodimensional.
 Codigo Pawno:
1
2
3
4

#define DIALOG_ACENTO 0
#define NO_ACENTO -1

new Acento[MAX_PLAYERS];
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 4
2. Ponemos esta asignación en nuestro array al momento que el jugador se conecte.
 Codigo Pawno:
1
2
3
4
5

public OnPlayerConnect(playerid)
{
Acento[playerid] = NO_ACENTO;
return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 5
3. Creamos 1 función (GetNameAccent) que obtendrá el nombre del acento que tenga el jugador + un proceso (ProxDetector) que contendrá una pieza de código que verificará si la distancia de ese jugador se encuentra cerca del usuario que escribió.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

GetNameAccent(playerid)
{
new NameAccent[19][15] = {{"Britanico"},{"Asiático"},{"Escocés"},{"Irlandés"},{"Ruso"},{"Americano"},{"Español"},{"Colombiano"},{"Francés"},{"Italiano"},{"Ganster"},{"Australiano"},{"Árabe"},{"Argentino"},{"Canadiense"},{"Cubano"},{"Israeli"},{"Alemán"},{"Hippie"}};
return NameAccent[Acento[playerid]];
}

ProxDetector(playerid, Float:distance, color, string[])
{
new Float:vX, Float:vY, Float: vZ;
GetPlayerPos(playerid, vX, vY, vZ);
for(new userid = GetPlayerPoolSize(); userid > -1; userid--)
{
if(!((IsPlayerConnected(userid) == 1) && (IsPlayerInRangeOfPoint(userid, distance, vX, vY, vZ) == 1)))continue;
SendClientMessage(userid, color, string);
}
}
  Cantidad de llaves: Abiertas(23)-Cerradas(23) | Lineas Totales: 16
4. Desarrollamos un subalgoritmo dentro de la función OnDialogResponse para darle un código a cada botón del dialogo.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

public OnDialogResponse(playerid, dialogid, response, listitem)
{
switch(dialogid)
{
case DIALOG_ACENTO:
{
if(!(response != 0)) return GameTextForPlayer(playerid, "DIALOGO CERRADO", 5000, 3);
if(!(listitem <= 0 && listitem >= 19))
{
Acento[playerid] = listitem;
new texto1[128];
format(texto1, sizeof(texto1), "Ahora tu acento es %s, usa /acento para cambiarlo.", GetNameAccent(playerid));
SendClientMessage(playerid,-1, texto1);
}
}
}
return 1;
}
  Cantidad de llaves: Abiertas(4)-Cerradas(4) | Lineas Totales: 18
5. Modificamos la forma como se va a ver al momento que un jugador escriba en el chat para todos los usuarios.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17


public OnPlayerText(playerid, text[])
{
new chat[128], name[24];
GetPlayerName(playerid, name, sizeof(name));

if(!(Acento[playerid] <= 0))
{
format(chat, sizeof(chat), "[Acento %s] %s dice: %s" , GetNameAccent(playerid), name, text);
ProxDetector(playerid, 2.0, 0xFFFFFFAA, chat);
return 0;
}

format(chat, sizeof(chat), "%s dice: %s" , name, text);
ProxDetector(playerid, 2.0, 0xFFFFFFAA, chat);
return 0;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 17
6. Por ultimo creamos nuestro comando para que el jugador pueda cambiar de acento.
 Codigo Pawno:
1
2
3
4
5
6

CMD:acento(playerid)
{
ShowPlayerDialog(playerid, DIALOG_ACENTO, DIALOG_STYLE_LIST, "Acentos Disponibles","Britanico\nAsiático\nEscocés\nIrlandés\nRuso\nAmericano\nEspañol\nColombiano\nFrancés\nItaliano\nGangster\nAustraliano\nÁrabe\nArgentino\nCanadiense\nCubano\nIsraeli\nAlemán\nHippie", "Aceptar", "");
PlayerPlaySound(playerid,1139,0,0,0);
return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 6
Aquí te dejo todo el código fuente:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

#define DIALOG_ACENTO 0
#define NO_ACENTO -1

new Acento[MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
Acento[playerid] = NO_ACENTO;
return 1;
}

public OnPlayerText(playerid, text[])
{
new chat[128], name[24];
GetPlayerName(playerid, name, sizeof(name));

if(!(Acento[playerid] <= 0))
{
format(chat, sizeof(chat), "[Acento %s] %s dice: %s" , GetNameAccent(playerid), name, text);
ProxDetector(playerid, 2.0, 0xFFFFFFAA, chat);
return 0;
}

format(chat, sizeof(chat), "%s dice: %s" , name, text);
ProxDetector(playerid, 2.0, 0xFFFFFFAA, chat);
return 0;
}

public OnDialogResponse(playerid, dialogid, response, listitem)
{
switch(dialogid)
{
case DIALOG_ACENTO:
{
if(!(response != 0)) return GameTextForPlayer(playerid, "DIALOGO CERRADO", 5000, 3);
if(!(listitem <= 0 && listitem >= 19))
{
Acento[playerid] = listitem;
new texto1[128];
format(texto1, sizeof(texto1), "Ahora tu acento es %s, usa /acento para cambiarlo.", GetNameAccent(playerid));
SendClientMessage(playerid,-1, texto1);
}
}
}
return 1;
}

GetNameAccent(playerid)
{
new NameAccent[19][15] = {{"Britanico"},{"Asiático"},{"Escocés"},{"Irlandés"},{"Ruso"},{"Americano"},{"Español"},{"Colombiano"},{"Francés"},{"Italiano"},{"Ganster"},{"Australiano"},{"Árabe"},{"Argentino"},{"Canadiense"},{"Cubano"},{"Israeli"},{"Alemán"},{"Hippie"}};
return NameAccent[Acento[playerid]];
}

ProxDetector(playerid, Float:distance, color, string[])
{
new Float:vX, Float:vY, Float: vZ;
GetPlayerPos(playerid, vX, vY, vZ);
for(new userid = GetPlayerPoolSize(); userid > -1; userid--)
{
if(!((IsPlayerConnected(userid) == 1) && (IsPlayerInRangeOfPoint(userid, distance, vX, vY, vZ) == 1)))continue;
SendClientMessage(userid, color, string);
}
}

CMD:acento(playerid)
{
ShowPlayerDialog(playerid, DIALOG_ACENTO, DIALOG_STYLE_LIST, "Acentos Disponibles","Britanico\nAsiático\nEscocés\nIrlandés\nRuso\nAmericano\nEspañol\nColombiano\nFrancés\nItaliano\nGangster\nAustraliano\nÁrabe\nArgentino\nCanadiense\nCubano\nIsraeli\nAlemán\nHippie", "Aceptar", "");
PlayerPlaySound(playerid,1139,0,0,0);
return 1;
}
  Cantidad de llaves: Abiertas(31)-Cerradas(31) | Lineas Totales: 70
Como verán hemos creado algo muy sencillo pero ahorrando muchas lineas de código, ya que he visto sistemas de acentos que usan demasiadas instrucciones para una cosa tan fácil que se puede hacer.
Si te sirvió mi aporte para algo no te olvides de darme un +1 de reputación. -punk -grin
Les deseo a todos una feliz noche. -thumbup
Oye pero tengo que reemplazar la linea de OnPlayerConnect ?
Linea de mi GM :
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

public OnPlayerConnect(playerid)
{
	new mensaje[60];
	format(mensaje, 60, "-----%s-----", NombreJugador(playerid));
	SCM(playerid, 1, mensaje);

	if(IsPlayerNPC(playerid)) return 1;
	InitFly(playerid);
	LimpiarCuenta(playerid);
	PlayerPlaySound(playerid, 3402, 0.0, 0.0, 0.0);
	GetPlayerIp(playerid, PlayerInfo[playerid][IP], 16);
	PermisoSalon[playerid] = false;
	Boleto[playerid] = false;
	Escuchando[playerid] = true;

	for(new i=0;i<MAX_PLAYERS;i++)
	{
		if(PlayerInfo[i][jAdminNvl] > 2563)
		{
			new string[128];
			format(string, 128, "%s [%d] ha ingresado al servidor [IP: %s]",NombreJugador(playerid),playerid,PlayerInfo[playerid][IP]);
			SCM(i, COLOR_GREY,string);
		}
	}

	SetPlayerColor(playerid,0xFFFFFF00);

	TextDrawShowForPlayer(playerid, CN);
	TextDrawShowForPlayer(playerid, CN2);
	TextDrawShowForPlayer(playerid, CN3);
	TextDrawShowForPlayer(playerid, CN4);

	LoginTimer[playerid] = SetTimerEx("TimerLogin",40000,0,"d",playerid);

	SetProgressBarMaxValue(Cargando[playerid], 10.0);
	SetProgressBarMaxValue(Descargando[playerid], 10.0);
	SetProgressBarMaxValue(speedbar[playerid], 200);
	SetProgressBarMaxValue(speedbar2[playerid], 100);
	SetProgressBarValue(Cargando[playerid], 0);

	new name[MAX_PLAYER_NAME];
	GetPlayerName(playerid,name,sizeof(name));
	new plname[MAX_PLAYER_NAME];
	GetPlayerName(playerid, plname, sizeof(plname));
	new CadenaDeNombres = strfind(plname, "_", true);
	
	if(CadenaDeNombres == -1)
	{
		new string[180];
		Kick(playerid);
		NombreErroneo[playerid] = 1;
		string="{DBED15}Departamento de inmigración:{FFFFFF} Tu nombre no es aceptable.\n{DBED15}Formato para el nombre:{FFFFFF} Nombre_Apellido\nPor favor, vuelve con un nombre válido.";
		ShowPlayerDialog(playerid, INMIGRACION, DIALOG_STYLE_MSGBOX, "Nombre inválido",string,"Aceptar","");
		return 1;
	}

	if(strfind(plname, "1", true) != -1 || strfind(plname, "2", true) != -1 || strfind(plname, "3", true) != -1 || strfind(plname, "4", true) != -1 || strfind(plname, "5", true) != -1 || strfind(plname, "6", true) != -1 || strfind(plname, "7", true) != -1 ||strfind(plname, "8", true) != -1 || strfind(plname, "9", true) != -1 || strfind(plname, "0", true) != -1	|| strfind(plname, "[", true) != -1 || strfind(plname, "]", true) != -1 || strfind(plname, "(", true) != -1 || strfind(plname, ")", true) != -1 || strfind(plname, ".", true) != -1)
 	{
		new string[180];
		Kick(playerid);
		NombreErroneo[playerid] = 1;
		string="{DBED15}Departamento de inmigración:{FFFFFF} Tu nombre no es aceptable.\n{DBED15}Formato para el nombre:{FFFFFF} Nombre_Apellido\nPor favor, vuelve con un nombre válido.";
		ShowPlayerDialog(playerid, INMIGRACION, DIALOG_STYLE_MSGBOX, "Nombre inválido", string,"Aceptar","");
		return 1;
	}
  Cantidad de llaves: Abiertas(13)-Cerradas(12) | Lineas Totales: 65
Donde coloco la tuya o como la coloco ?
MrDave escribió:
22 Nov 2017 20:54
Hola, muy buenas noches a todos, hoy en este maravilloso día les enseñaré un método de como crear un algoritmo de acentos de lo más eficiente que se pueda hacer.

Solo sigan mis pasos y verán que todo saldrá excelente.

1. Creamos nuestras constantes y un array monodimensional.
 Codigo Pawno:
1
2
3
4

#define DIALOG_ACENTO 0
#define NO_ACENTO -1

new Acento[MAX_PLAYERS];
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 4
2. Ponemos esta asignación en nuestro array al momento que el jugador se conecte.
 Codigo Pawno:
1
2
3
4
5

public OnPlayerConnect(playerid)
{
Acento[playerid] = NO_ACENTO;
return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 5
3. Creamos 1 función (GetNameAccent) que obtendrá el nombre del acento que tenga el jugador + un proceso (ProxDetector) que contendrá una pieza de código que verificará si la distancia de ese jugador se encuentra cerca del usuario que escribió.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

GetNameAccent(playerid)
{
new NameAccent[19][15] = {{"Britanico"},{"Asiático"},{"Escocés"},{"Irlandés"},{"Ruso"},{"Americano"},{"Español"},{"Colombiano"},{"Francés"},{"Italiano"},{"Ganster"},{"Australiano"},{"Árabe"},{"Argentino"},{"Canadiense"},{"Cubano"},{"Israeli"},{"Alemán"},{"Hippie"}};
return NameAccent[Acento[playerid]];
}

ProxDetector(playerid, Float:distance, color, string[])
{
new Float:vX, Float:vY, Float: vZ;
GetPlayerPos(playerid, vX, vY, vZ);
for(new userid = GetPlayerPoolSize(); userid > -1; userid--)
{
if(!((IsPlayerConnected(userid) == 1) && (IsPlayerInRangeOfPoint(userid, distance, vX, vY, vZ) == 1)))continue;
SendClientMessage(userid, color, string);
}
}
  Cantidad de llaves: Abiertas(23)-Cerradas(23) | Lineas Totales: 16
4. Desarrollamos un subalgoritmo dentro de la función OnDialogResponse para darle un código a cada botón del dialogo.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

public OnDialogResponse(playerid, dialogid, response, listitem)
{
switch(dialogid)
{
case DIALOG_ACENTO:
{
if(!(response != 0)) return GameTextForPlayer(playerid, "DIALOGO CERRADO", 5000, 3);
if(!(listitem <= 0 && listitem >= 19))
{
Acento[playerid] = listitem;
new texto1[128];
format(texto1, sizeof(texto1), "Ahora tu acento es %s, usa /acento para cambiarlo.", GetNameAccent(playerid));
SendClientMessage(playerid,-1, texto1);
}
}
}
return 1;
}
  Cantidad de llaves: Abiertas(4)-Cerradas(4) | Lineas Totales: 18
5. Modificamos la forma como se va a ver al momento que un jugador escriba en el chat para todos los usuarios.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17


public OnPlayerText(playerid, text[])
{
new chat[128], name[24];
GetPlayerName(playerid, name, sizeof(name));

if(!(Acento[playerid] <= 0))
{
format(chat, sizeof(chat), "[Acento %s] %s dice: %s" , GetNameAccent(playerid), name, text);
ProxDetector(playerid, 2.0, 0xFFFFFFAA, chat);
return 0;
}

format(chat, sizeof(chat), "%s dice: %s" , name, text);
ProxDetector(playerid, 2.0, 0xFFFFFFAA, chat);
return 0;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 17
6. Por ultimo creamos nuestro comando para que el jugador pueda cambiar de acento.
 Codigo Pawno:
1
2
3
4
5
6

CMD:acento(playerid)
{
ShowPlayerDialog(playerid, DIALOG_ACENTO, DIALOG_STYLE_LIST, "Acentos Disponibles","Britanico\nAsiático\nEscocés\nIrlandés\nRuso\nAmericano\nEspañol\nColombiano\nFrancés\nItaliano\nGangster\nAustraliano\nÁrabe\nArgentino\nCanadiense\nCubano\nIsraeli\nAlemán\nHippie", "Aceptar", "");
PlayerPlaySound(playerid,1139,0,0,0);
return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 6
Aquí te dejo todo el código fuente:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

#define DIALOG_ACENTO 0
#define NO_ACENTO -1

new Acento[MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
Acento[playerid] = NO_ACENTO;
return 1;
}

public OnPlayerText(playerid, text[])
{
new chat[128], name[24];
GetPlayerName(playerid, name, sizeof(name));

if(!(Acento[playerid] <= 0))
{
format(chat, sizeof(chat), "[Acento %s] %s dice: %s" , GetNameAccent(playerid), name, text);
ProxDetector(playerid, 2.0, 0xFFFFFFAA, chat);
return 0;
}

format(chat, sizeof(chat), "%s dice: %s" , name, text);
ProxDetector(playerid, 2.0, 0xFFFFFFAA, chat);
return 0;
}

public OnDialogResponse(playerid, dialogid, response, listitem)
{
switch(dialogid)
{
case DIALOG_ACENTO:
{
if(!(response != 0)) return GameTextForPlayer(playerid, "DIALOGO CERRADO", 5000, 3);
if(!(listitem <= 0 && listitem >= 19))
{
Acento[playerid] = listitem;
new texto1[128];
format(texto1, sizeof(texto1), "Ahora tu acento es %s, usa /acento para cambiarlo.", GetNameAccent(playerid));
SendClientMessage(playerid,-1, texto1);
}
}
}
return 1;
}

GetNameAccent(playerid)
{
new NameAccent[19][15] = {{"Britanico"},{"Asiático"},{"Escocés"},{"Irlandés"},{"Ruso"},{"Americano"},{"Español"},{"Colombiano"},{"Francés"},{"Italiano"},{"Ganster"},{"Australiano"},{"Árabe"},{"Argentino"},{"Canadiense"},{"Cubano"},{"Israeli"},{"Alemán"},{"Hippie"}};
return NameAccent[Acento[playerid]];
}

ProxDetector(playerid, Float:distance, color, string[])
{
new Float:vX, Float:vY, Float: vZ;
GetPlayerPos(playerid, vX, vY, vZ);
for(new userid = GetPlayerPoolSize(); userid > -1; userid--)
{
if(!((IsPlayerConnected(userid) == 1) && (IsPlayerInRangeOfPoint(userid, distance, vX, vY, vZ) == 1)))continue;
SendClientMessage(userid, color, string);
}
}

CMD:acento(playerid)
{
ShowPlayerDialog(playerid, DIALOG_ACENTO, DIALOG_STYLE_LIST, "Acentos Disponibles","Britanico\nAsiático\nEscocés\nIrlandés\nRuso\nAmericano\nEspañol\nColombiano\nFrancés\nItaliano\nGangster\nAustraliano\nÁrabe\nArgentino\nCanadiense\nCubano\nIsraeli\nAlemán\nHippie", "Aceptar", "");
PlayerPlaySound(playerid,1139,0,0,0);
return 1;
}
  Cantidad de llaves: Abiertas(31)-Cerradas(31) | Lineas Totales: 70
Como verán hemos creado algo muy sencillo pero ahorrando muchas lineas de código, ya que he visto sistemas de acentos que usan demasiadas instrucciones para una cosa tan fácil que se puede hacer.
Si te sirvió mi aporte para algo no te olvides de darme un +1 de reputación. -punk -grin
Les deseo a todos una feliz noche. -thumbup
Si Mejor explicas como colocarlo en un FS ? Por favor -beg -beg -beg
R.Spell escribió:
12 Mar 2018 08:13
MrDave escribió:
22 Nov 2017 20:54
Hola, muy buenas noches a todos, hoy en este maravilloso día les enseñaré un método de como crear un algoritmo de acentos de lo más eficiente que se pueda hacer.

Solo sigan mis pasos y verán que todo saldrá excelente.

1. Creamos nuestras constantes y un array monodimensional.
 Codigo Pawno:
1
2
3
4

#define DIALOG_ACENTO 0
#define NO_ACENTO -1

new Acento[MAX_PLAYERS];
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 4
2. Ponemos esta asignación en nuestro array al momento que el jugador se conecte.
 Codigo Pawno:
1
2
3
4
5

public OnPlayerConnect(playerid)
{
Acento[playerid] = NO_ACENTO;
return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 5
3. Creamos 1 función (GetNameAccent) que obtendrá el nombre del acento que tenga el jugador + un proceso (ProxDetector) que contendrá una pieza de código que verificará si la distancia de ese jugador se encuentra cerca del usuario que escribió.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

GetNameAccent(playerid)
{
new NameAccent[19][15] = {{"Britanico"},{"Asiático"},{"Escocés"},{"Irlandés"},{"Ruso"},{"Americano"},{"Español"},{"Colombiano"},{"Francés"},{"Italiano"},{"Ganster"},{"Australiano"},{"Árabe"},{"Argentino"},{"Canadiense"},{"Cubano"},{"Israeli"},{"Alemán"},{"Hippie"}};
return NameAccent[Acento[playerid]];
}

ProxDetector(playerid, Float:distance, color, string[])
{
new Float:vX, Float:vY, Float: vZ;
GetPlayerPos(playerid, vX, vY, vZ);
for(new userid = GetPlayerPoolSize(); userid > -1; userid--)
{
if(!((IsPlayerConnected(userid) == 1) && (IsPlayerInRangeOfPoint(userid, distance, vX, vY, vZ) == 1)))continue;
SendClientMessage(userid, color, string);
}
}
  Cantidad de llaves: Abiertas(23)-Cerradas(23) | Lineas Totales: 16
4. Desarrollamos un subalgoritmo dentro de la función OnDialogResponse para darle un código a cada botón del dialogo.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

public OnDialogResponse(playerid, dialogid, response, listitem)
{
switch(dialogid)
{
case DIALOG_ACENTO:
{
if(!(response != 0)) return GameTextForPlayer(playerid, "DIALOGO CERRADO", 5000, 3);
if(!(listitem <= 0 && listitem >= 19))
{
Acento[playerid] = listitem;
new texto1[128];
format(texto1, sizeof(texto1), "Ahora tu acento es %s, usa /acento para cambiarlo.", GetNameAccent(playerid));
SendClientMessage(playerid,-1, texto1);
}
}
}
return 1;
}
  Cantidad de llaves: Abiertas(4)-Cerradas(4) | Lineas Totales: 18
5. Modificamos la forma como se va a ver al momento que un jugador escriba en el chat para todos los usuarios.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17


public OnPlayerText(playerid, text[])
{
new chat[128], name[24];
GetPlayerName(playerid, name, sizeof(name));

if(!(Acento[playerid] <= 0))
{
format(chat, sizeof(chat), "[Acento %s] %s dice: %s" , GetNameAccent(playerid), name, text);
ProxDetector(playerid, 2.0, 0xFFFFFFAA, chat);
return 0;
}

format(chat, sizeof(chat), "%s dice: %s" , name, text);
ProxDetector(playerid, 2.0, 0xFFFFFFAA, chat);
return 0;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 17
6. Por ultimo creamos nuestro comando para que el jugador pueda cambiar de acento.
 Codigo Pawno:
1
2
3
4
5
6

CMD:acento(playerid)
{
ShowPlayerDialog(playerid, DIALOG_ACENTO, DIALOG_STYLE_LIST, "Acentos Disponibles","Britanico\nAsiático\nEscocés\nIrlandés\nRuso\nAmericano\nEspañol\nColombiano\nFrancés\nItaliano\nGangster\nAustraliano\nÁrabe\nArgentino\nCanadiense\nCubano\nIsraeli\nAlemán\nHippie", "Aceptar", "");
PlayerPlaySound(playerid,1139,0,0,0);
return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 6
Aquí te dejo todo el código fuente:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

#define DIALOG_ACENTO 0
#define NO_ACENTO -1

new Acento[MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
Acento[playerid] = NO_ACENTO;
return 1;
}

public OnPlayerText(playerid, text[])
{
new chat[128], name[24];
GetPlayerName(playerid, name, sizeof(name));

if(!(Acento[playerid] <= 0))
{
format(chat, sizeof(chat), "[Acento %s] %s dice: %s" , GetNameAccent(playerid), name, text);
ProxDetector(playerid, 2.0, 0xFFFFFFAA, chat);
return 0;
}

format(chat, sizeof(chat), "%s dice: %s" , name, text);
ProxDetector(playerid, 2.0, 0xFFFFFFAA, chat);
return 0;
}

public OnDialogResponse(playerid, dialogid, response, listitem)
{
switch(dialogid)
{
case DIALOG_ACENTO:
{
if(!(response != 0)) return GameTextForPlayer(playerid, "DIALOGO CERRADO", 5000, 3);
if(!(listitem <= 0 && listitem >= 19))
{
Acento[playerid] = listitem;
new texto1[128];
format(texto1, sizeof(texto1), "Ahora tu acento es %s, usa /acento para cambiarlo.", GetNameAccent(playerid));
SendClientMessage(playerid,-1, texto1);
}
}
}
return 1;
}

GetNameAccent(playerid)
{
new NameAccent[19][15] = {{"Britanico"},{"Asiático"},{"Escocés"},{"Irlandés"},{"Ruso"},{"Americano"},{"Español"},{"Colombiano"},{"Francés"},{"Italiano"},{"Ganster"},{"Australiano"},{"Árabe"},{"Argentino"},{"Canadiense"},{"Cubano"},{"Israeli"},{"Alemán"},{"Hippie"}};
return NameAccent[Acento[playerid]];
}

ProxDetector(playerid, Float:distance, color, string[])
{
new Float:vX, Float:vY, Float: vZ;
GetPlayerPos(playerid, vX, vY, vZ);
for(new userid = GetPlayerPoolSize(); userid > -1; userid--)
{
if(!((IsPlayerConnected(userid) == 1) && (IsPlayerInRangeOfPoint(userid, distance, vX, vY, vZ) == 1)))continue;
SendClientMessage(userid, color, string);
}
}

CMD:acento(playerid)
{
ShowPlayerDialog(playerid, DIALOG_ACENTO, DIALOG_STYLE_LIST, "Acentos Disponibles","Britanico\nAsiático\nEscocés\nIrlandés\nRuso\nAmericano\nEspañol\nColombiano\nFrancés\nItaliano\nGangster\nAustraliano\nÁrabe\nArgentino\nCanadiense\nCubano\nIsraeli\nAlemán\nHippie", "Aceptar", "");
PlayerPlaySound(playerid,1139,0,0,0);
return 1;
}
  Cantidad de llaves: Abiertas(31)-Cerradas(31) | Lineas Totales: 70
Como verán hemos creado algo muy sencillo pero ahorrando muchas lineas de código, ya que he visto sistemas de acentos que usan demasiadas instrucciones para una cosa tan fácil que se puede hacer.
Si te sirvió mi aporte para algo no te olvides de darme un +1 de reputación. -punk -grin
Les deseo a todos una feliz noche. -thumbup
Oye pero tengo que reemplazar la linea de OnPlayerConnect ?
Linea de mi GM :
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

public OnPlayerConnect(playerid)
{
	new mensaje[60];
	format(mensaje, 60, "-----%s-----", NombreJugador(playerid));
	SCM(playerid, 1, mensaje);

	if(IsPlayerNPC(playerid)) return 1;
	InitFly(playerid);
	LimpiarCuenta(playerid);
	PlayerPlaySound(playerid, 3402, 0.0, 0.0, 0.0);
	GetPlayerIp(playerid, PlayerInfo[playerid][IP], 16);
	PermisoSalon[playerid] = false;
	Boleto[playerid] = false;
	Escuchando[playerid] = true;

	for(new i=0;i<MAX_PLAYERS;i++)
	{
		if(PlayerInfo[i][jAdminNvl] > 2563)
		{
			new string[128];
			format(string, 128, "%s [%d] ha ingresado al servidor [IP: %s]",NombreJugador(playerid),playerid,PlayerInfo[playerid][IP]);
			SCM(i, COLOR_GREY,string);
		}
	}

	SetPlayerColor(playerid,0xFFFFFF00);

	TextDrawShowForPlayer(playerid, CN);
	TextDrawShowForPlayer(playerid, CN2);
	TextDrawShowForPlayer(playerid, CN3);
	TextDrawShowForPlayer(playerid, CN4);

	LoginTimer[playerid] = SetTimerEx("TimerLogin",40000,0,"d",playerid);

	SetProgressBarMaxValue(Cargando[playerid], 10.0);
	SetProgressBarMaxValue(Descargando[playerid], 10.0);
	SetProgressBarMaxValue(speedbar[playerid], 200);
	SetProgressBarMaxValue(speedbar2[playerid], 100);
	SetProgressBarValue(Cargando[playerid], 0);

	new name[MAX_PLAYER_NAME];
	GetPlayerName(playerid,name,sizeof(name));
	new plname[MAX_PLAYER_NAME];
	GetPlayerName(playerid, plname, sizeof(plname));
	new CadenaDeNombres = strfind(plname, "_", true);
	
	if(CadenaDeNombres == -1)
	{
		new string[180];
		Kick(playerid);
		NombreErroneo[playerid] = 1;
		string="{DBED15}Departamento de inmigración:{FFFFFF} Tu nombre no es aceptable.\n{DBED15}Formato para el nombre:{FFFFFF} Nombre_Apellido\nPor favor, vuelve con un nombre válido.";
		ShowPlayerDialog(playerid, INMIGRACION, DIALOG_STYLE_MSGBOX, "Nombre inválido",string,"Aceptar","");
		return 1;
	}

	if(strfind(plname, "1", true) != -1 || strfind(plname, "2", true) != -1 || strfind(plname, "3", true) != -1 || strfind(plname, "4", true) != -1 || strfind(plname, "5", true) != -1 || strfind(plname, "6", true) != -1 || strfind(plname, "7", true) != -1 ||strfind(plname, "8", true) != -1 || strfind(plname, "9", true) != -1 || strfind(plname, "0", true) != -1	|| strfind(plname, "[", true) != -1 || strfind(plname, "]", true) != -1 || strfind(plname, "(", true) != -1 || strfind(plname, ")", true) != -1 || strfind(plname, ".", true) != -1)
 	{
		new string[180];
		Kick(playerid);
		NombreErroneo[playerid] = 1;
		string="{DBED15}Departamento de inmigración:{FFFFFF} Tu nombre no es aceptable.\n{DBED15}Formato para el nombre:{FFFFFF} Nombre_Apellido\nPor favor, vuelve con un nombre válido.";
		ShowPlayerDialog(playerid, INMIGRACION, DIALOG_STYLE_MSGBOX, "Nombre inválido", string,"Aceptar","");
		return 1;
	}
  Cantidad de llaves: Abiertas(13)-Cerradas(12) | Lineas Totales: 65
Donde coloco la tuya o como la coloco ?

Solamente copias y pegas esto en el onplayerconnect...

 Codigo Pawno:
1

Acento[playerid] = NO_ACENTO;
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
¿Tan dificil es? :P

¿Quién está conectado?

En total hay 6 usuarios conectados :: 2 registrados, 0 ocultos y 4 invitados (basados en usuarios activos en los últimos 5 minutos)
La mayor cantidad de usuarios identificados fue 855 el 27 May 2018 00:03

Usuarios navegando por este Foro: BonerMap, Junior Luna Amador y 4 invitados