[Guía] OnPlayerDisconnect información de Kick o Ban

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
Abu-Dhabi
Junior
Junior
Mensajes: 316
Registrado: 23 Ago 2014 15:20
Ubicación: Buenos Aires - Argentina
Reputación: 21

09 Sep 2018 20:06

Con esta guía podremos saber específicamente la razón de kick o ban en OnPlayerDisconnect:

Primero crearemos una variable para almacenar la info
 Codigo Pawno:
1

new [email protected]_BEEN_KICKED[MAX_PLAYERS] = 0;
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Función para kickear a un jugador
 Codigo Pawno:
1
2
3
4
5

KickEx(playerid)
{
    [email protected]_BEEN_KICKED[playerid] = true; // fue kickeado
	return Kick(playerid);
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 5
Finalmente en OnPlayerDisconnect
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

public OnPlayerDisconnect(playerid, reason) // de: http://wiki.sa-mp.com/wiki/OnPlayerDisconnect
{
    new
        szString[64],
        playerName[MAX_PLAYER_NAME];

    GetPlayerName(playerid, playerName, MAX_PLAYER_NAME);

    new szDisconnectReason[4][] = // La 4 razón sería por kickeo
    {
        "Crash",
        "Salió",
        "Ban",
        "Kick"
    };
    format(szString, sizeof szString, "%s left the server (%s).", playerName, szDisconnectReason[reason + [email protected]_BEEN_KICKED[playerid]]); // sumamos el valor, si es kick sería true = +1
    SendClientMessageToAll(0xC4C4C4FF, szString);
    [email protected]_BEEN_KICKED[playerid] = false; // reseteamos la variable
	return 1;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 20
En el caso de kickear un jugador deberemos usar la función KickEx.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9

public OnPlayerCommandText(playerid, cmdtext[])
{
	if (strcmp("/mycommand", cmdtext, true, 10) == 0)
	{
		KickEx(playerid); // marcará como "Kick" en OnPlayerDisconnect
		return 1;
	}
	return 0;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 9
En el caso de banear un jugador, simplemente usar las funciones nativas de SAMP Ban y BanEx

Es algo muy sencillo, pero puede servir para ser más específicos a la hora de anunciar una desconexión.
JostinEduardo
Aprendiz
Aprendiz
Mensajes: 261
Registrado: 11 Jun 2014 16:02
Ubicación: Venezuela
Contactar:
Reputación: 2

10 Sep 2018 20:58

Esta guía sera útil.
— Tú creces, todos crecemos, estamos hechos para crecer. Tú o evolucionas o desapareces. —
Lucas_Moeller
Aprendiz
Aprendiz
Mensajes: 159
Registrado: 26 Ago 2015 14:21
Ubicación: Argentina
Reputación: 0

12 Sep 2018 13:53

JostinEduardo escribió:
10 Sep 2018 20:58
Esta guía sera útil.
Nadie le da importancia a esto, conozco servidores que ni siquiera tienen un aviso sobre los que se desconectan -laughing
-
Avatar de Usuario
MrDave
Ayudante
Ayudante
Mensajes: 1010
Registrado: 05 Oct 2017 12:13
Reputación: 112

12 Sep 2018 18:25


Buena explicación, sólo que hay un problema.
El arreglo "[email protected]_BEEN_KICKED" fue declarado como "integer", no como "booleano", por lo tanto dará una advertencia el compilador sí le asignas un "true or false".
Se debe agregar la etiqueta "bool:" en la declaración, así se evitará el "warning".
 Codigo Pawno:
1

new bool:[email protected]_BEEN_KICKED[MAX_PLAYERS];
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1

- 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.
Lucas_Moeller
Aprendiz
Aprendiz
Mensajes: 159
Registrado: 26 Ago 2015 14:21
Ubicación: Argentina
Reputación: 0

12 Sep 2018 19:20

MrDave escribió:
12 Sep 2018 18:25

Buena explicación, sólo que hay un problema.
El arreglo "[email protected]_BEEN_KICKED" fue declarado como "integer", no como "booleano", por lo tanto dará una advertencia el compilador sí le asignas un "true or false".
Se debe agregar la etiqueta "bool:" en la declaración, así se evitará el "warning".
 Codigo Pawno:
1

new bool:[email protected]_BEEN_KICKED[MAX_PLAYERS];
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
No, estás muy equivocado, warning le va a dar si hace lo contrario, si lo define booleano y lo usa como integer, te dejo una guía de pawn en Español, un saludo! -shock

[Tutorial] Aprender pawn (nivel basico/medio/avanzado)
-
Avatar de Usuario
MrDave
Ayudante
Ayudante
Mensajes: 1010
Registrado: 05 Oct 2017 12:13
Reputación: 112

13 Sep 2018 14:10

Spoiler:
Lucas_Moeller escribió:
12 Sep 2018 19:20
MrDave escribió:
12 Sep 2018 18:25

Buena explicación, sólo que hay un problema.
El arreglo "[email protected]_BEEN_KICKED" fue declarado como "integer", no como "booleano", por lo tanto dará una advertencia el compilador sí le asignas un "true or false".
Se debe agregar la etiqueta "bool:" en la declaración, así se evitará el "warning".
 Codigo Pawno:
1

new bool:[email protected]_BEEN_KICKED[MAX_PLAYERS];
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
No, estás muy equivocado, warning le va a dar si hace lo contrario, si lo define booleano y lo usa como integer, te dejo una guía de pawn en Español, un saludo! -shock

[Tutorial] Aprender pawn (nivel basico/medio/avanzado)

¿Por qué estaría equivocado?
Sí declaras una variable sin ningún "tag", será "integer" por defecto y sí luego le asignas un valor "true or false", saltará el "warning". Sí no me crees, compruébalo tú mismo.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9

#include <a_samp>

main()
{
	new x = 0;
	x = false; //warning
	printf("El valor de x es: %d", x);
	return 0;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 9

Sí el proceso es al revés, dará el mismo "warning", claro, sí lo declaras como "booleano" y luego le asignas un valor que sea diferente a "true or false".
 Codigo Pawno:
1
2
3
4
5
6
7
8
9

#include <a_samp>

main()
{
	new bool:x = false;
	x = 0; //warning
	printf("El valor de x es: %d", x);
	return 0;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 9

Sí quieres asignar un valor entero en una variable "booleana", debes aplicar un "casting", eso indicará al compilador que se está tratando de apilar en la variable un valor que es "booleano".
Algo así:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9

#include <a_samp>

main()
{
	new bool:x;
	x = bool:0; 
	printf("El valor de x es: %d", x);
	return 0;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 9

EDITO:
Acabo de probar y sí es verdad, me he equivocado.
Última edición por MrDave el 13 Sep 2018 16:01, editado 1 vez en total.

- 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.
Abu-Dhabi
Junior
Junior
Mensajes: 316
Registrado: 23 Ago 2014 15:20
Ubicación: Buenos Aires - Argentina
Reputación: 21

13 Sep 2018 15:03

MrDave escribió:
13 Sep 2018 14:10
Spoiler:

¿Por qué estaría equivocado?
Sí declaras una variable sin ningún "tag", será "integer" por defecto y sí luego le asignas un valor "true or false", saltará el "warning". Sí no me crees, compruébalo tú mismo.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9

#include <a_samp>

main()
{
	new x = 0;
	x = false; //warning
	printf("El valor de x es: %d", x);
	return 0;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 9
Prueba de compilarlo y después hablamos bro xD... no pasa nada no imprime warnings al ser un no ser un bool toma los valores de true = 1 y false = 0

Distinto sería el caso si por ejemplo uso:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10

new connection_dat;

public OnPlayerConnect(playerid)
{
    if(connection_dat == true) // aquí sí hay un warning por tag mismatch
    {
        connection_dat = false;
	}
	return 1;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 10
Última edición por Abu-Dhabi el 13 Sep 2018 15:09, editado 1 vez en total.
Abu-Dhabi
Junior
Junior
Mensajes: 316
Registrado: 23 Ago 2014 15:20
Ubicación: Buenos Aires - Argentina
Reputación: 21

13 Sep 2018 15:08

ELIMINAR, PROBLEMA DE CONEXION DOBLE POST.
Responder