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

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

Moderador: Ayudantes

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].
  • No postear códigos sin probar. Publicar códigos con errores (que impidan compilar el script para el cual está destinado) en este apartado es motivo de sanción.
  • Si tu código necesita plugins, includes u otros códigos adicionales para funcionar, debes mencionarlo en el mensaje.
  • Si has utilizado códigos de otros autores, recuerda colocar los créditos correspondientes. (El plagio es motivo de sanción).
  • Si tu aporte es para un GameMode en específico, debes publicar el tema en el apartado "Guías y Aportes para GameModes específicos".
Responder
Avatar de Usuario
MrDave
Ayudante
Ayudante
Mensajes: 1048
Registrado: 05 Oct 2017 12:13
Reputación: 113

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

- Temporalmente estoy retirado de SA-MP; por lo tanto no me envíen propuestas de proyectos.
- No respondo dudas por privado, usa la sección de preguntas.
Lolito
Mensajes: 222
Registrado: 11 Oct 2017 18:09
Ubicación: Narnia
Reputación: -6

23 Nov 2017 08:18

+1 Buen aporte amigo lo usare en la Gm que estoy trabajando respetando los créditos -thumbup -thumbup
Avatar de Usuario
DarkFireYT
Baneado
Baneado
Mensajes: 601
Registrado: 12 Dic 2016 18:05
Contactar:
Reputación: 35

23 Nov 2017 08:54

Es buen aporte , pero esperaria que pongas mas acentos la prox o almenos digas como hacerlo , aun asi , sin mas que decir +1
PandaBoy / DarkFireYT
"La vida es sagrada"
[ Imagen Externa ]
DarkFireYT´s Design....
Cualquier pregunta al privado no me molesta.
Todos nos equivocamos, sino no seriamos humanos.

Si me equivoco agradezco de antemano al que me corrija.
Avatar de Usuario
MrDave
Ayudante
Ayudante
Mensajes: 1048
Registrado: 05 Oct 2017 12:13
Reputación: 113

23 Nov 2017 11:42

Lolito escribió:
23 Nov 2017 08:18
+1 Buen aporte amigo lo usare en la Gm que estoy trabajando respetando los créditos -thumbup -thumbup
Gracias bro, me da mucho gusto que te haya servido. -punk

- Temporalmente estoy retirado de SA-MP; por lo tanto no me envíen propuestas de proyectos.
- No respondo dudas por privado, usa la sección de preguntas.
Avatar de Usuario
Im[S]pell
Junior
Junior
Mensajes: 530
Registrado: 21 Ene 2018 11:03
Ubicación: En tu cama <3
Contactar:
Reputación: 14

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 ?
• Conserva bien lo tuyo y NO CODICIES lo ajeno. Si haces eso, nada podrá impedirte ser FELIZ

PawnScript & R.Spell User Pawno

-----------------------------------------------------------------------------------------------------------------------------------------------------------


● Proyectos & Ex Servidores

-----------------------------------------------------------------------------------------------------------------------------------------------------------


Imagen

Aportes en Samp: Mostrar
[GM] Call Of Duty BLACK: viewtopic.php?f=41&t=26501
[APORTE] Sistema de Robo al Banco: viewtopic.php?f=40&t=26482
[En Creacion:] Sistema de Registro por Textdraw COD
[Guía:] Actualizar GameMode a 0.3.7 R2: viewtopic.php?f=40&t=26961
[Aporte:] ¡TDEditor! Crea TextDraw: viewtopic.php?f=40&t=26913
[Guía:] Reparar Run Time Error 19 Not Found: viewtopic.php?f=40&t=26568
[Aporte:] Nuevo Anticheat ¡Nex-AC! Perfecto para DM/RP: viewtopic.php?f=40&t=27326


Hostname: |•|»PlazeWorld City Roleplay [PZ:RP]«|•| - [Re-Apertura]

Adress: 192.95.53.4:1150


Avatar de Usuario
Im[S]pell
Junior
Junior
Mensajes: 530
Registrado: 21 Ene 2018 11:03
Ubicación: En tu cama <3
Contactar:
Reputación: 14

12 Mar 2018 08:22

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
• Conserva bien lo tuyo y NO CODICIES lo ajeno. Si haces eso, nada podrá impedirte ser FELIZ

PawnScript & R.Spell User Pawno

-----------------------------------------------------------------------------------------------------------------------------------------------------------


● Proyectos & Ex Servidores

-----------------------------------------------------------------------------------------------------------------------------------------------------------


Imagen

Aportes en Samp: Mostrar
[GM] Call Of Duty BLACK: viewtopic.php?f=41&t=26501
[APORTE] Sistema de Robo al Banco: viewtopic.php?f=40&t=26482
[En Creacion:] Sistema de Registro por Textdraw COD
[Guía:] Actualizar GameMode a 0.3.7 R2: viewtopic.php?f=40&t=26961
[Aporte:] ¡TDEditor! Crea TextDraw: viewtopic.php?f=40&t=26913
[Guía:] Reparar Run Time Error 19 Not Found: viewtopic.php?f=40&t=26568
[Aporte:] Nuevo Anticheat ¡Nex-AC! Perfecto para DM/RP: viewtopic.php?f=40&t=27326


Hostname: |•|»PlazeWorld City Roleplay [PZ:RP]«|•| - [Re-Apertura]

Adress: 192.95.53.4:1150


Avatar de Usuario
Alfon
Baneado
Baneado
Mensajes: 693
Registrado: 17 Ene 2016 18:39
Ubicación: YOVIVOENALGUNAPARTEDEESTE INSIGNIFICANTEMUNDOLLENODE RARITOSYANORMALES PERONOPASANADACARNAL YOLOSAMO
Reputación: 24

13 Mar 2018 03:29

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
Renfer
Aprendiz
Aprendiz
Mensajes: 82
Registrado: 12 Feb 2016 04:56
Reputación: 0

14 Jul 2018 14:51

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
DA DEMASIADOS ERRORES
xTexTx
Aprendiz
Aprendiz
Mensajes: 90
Registrado: 23 Jul 2014 21:21
Reputación: 6

20 Jul 2018 17:48

 Codigo Pawno:
1
2
3
4
5

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]];
}
  Cantidad de llaves: Abiertas(21)-Cerradas(21) | Lineas Totales: 5
Me resulta medio al pedo definir la variable cada vez que se llama a la función
Responder