[Funciones] ¡Publica tu código aquí!

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
Roberth Clouthier
Aprendiz
Aprendiz
Mensajes: 36
Registrado: 25 Jul 2018 18:58
Reputación: 2

10 Ago 2018 17:33

Bueno, se que este código es muy simple, pero bueno.. xd

Anti-Jetpack
 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

//Esto va en OnGameModeInit
SetTimer("AntiJet",1000,true);  //cada 1 segundo checa al jugador


//Esto va abajo de su gm v:
forward AntiJet(playerid);
public AntiJet(playerid)
{
	for(new i=0;i<MAX_PLAYERS;i++)
	{
		if(IsPlayerConnected(i))
		{
                if(GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK)
			{
			  	new string[200];
				format(string, sizeof(string), "[%s] {FFFFFF}fue baneado por el anticheat. Razón: {F5C800}Cheats de volar{FFFFFF}.", NombreJugador(i));
				SendClientMessageToAll(0xF5C600FF, string);
                                Ban(playerid); //si quieres que le solo kick pon Kick(playerid)
			}
		}
	}
}

  Cantidad de llaves: Abiertas(7)-Cerradas(7) | Lineas Totales: 23
Avatar de Usuario
#Fede
Moderador Global
Moderador Global
Mensajes: 3134
Registrado: 12 Ene 2015 06:32
Ubicación: Montevideo, Uruguay.
Reputación: 75

11 Ago 2018 23:06

Roberth Clouthier escribió:
10 Ago 2018 17:33
Bueno, se que este código es muy simple, pero bueno.. xd

Anti-Jetpack
 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

//Esto va en OnGameModeInit
SetTimer("AntiJet",1000,true);  //cada 1 segundo checa al jugador


//Esto va abajo de su gm v:
forward AntiJet(playerid);
public AntiJet(playerid)
{
	for(new i=0;i<MAX_PLAYERS;i++)
	{
		if(IsPlayerConnected(i))
		{
                if(GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK)
			{
			  	new string[200];
				format(string, sizeof(string), "[%s] {FFFFFF}fue baneado por el anticheat. Razón: {F5C800}Cheats de volar{FFFFFF}.", NombreJugador(i));
				SendClientMessageToAll(0xF5C600FF, string);
                                Ban(playerid); //si quieres que le solo kick pon Kick(playerid)
			}
		}
	}
}

  Cantidad de llaves: Abiertas(7)-Cerradas(7) | Lineas Totales: 23
Ese codigo no va a funcionar, dudo que compile.

Es innecesario el parametro "playerid", estas pasando por todos los jugadores, y usas playerid como si fuese un unico el marcado. No todos los GameModes tienen la funcion NombreJugador (Ademas, recuerda que no es bueno retornar strings!).
 Codigo Pawno:
1
2
3
4

AntiJet(){
     foreach(new i : Player) if(GetPlayerSpecialAction(i) == SPECIAL_ACTION_USEJETPACK) Kick(i);
     return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 4
Estoy fuera de SA-MP, no me envíen mensajes privados invitándome a proyectos.


scriptnoob escribió:Cada día se va mejorando el foro, nuestro objetivo es como el de una empresa:

Misión: Brindar ayuda y aportes a los usuarios.
Visión: Ser la página de mayor calidad de servicio de soporte referidos a lenguajes de programación.
Lee las reglas del foro para evitar ser sancionado




Avatar de Usuario
Roberth Clouthier
Aprendiz
Aprendiz
Mensajes: 36
Registrado: 25 Jul 2018 18:58
Reputación: 2

21 Ago 2018 11:05

#Fede escribió:
11 Ago 2018 23:06
Roberth Clouthier escribió:
10 Ago 2018 17:33
Bueno, se que este código es muy simple, pero bueno.. xd

Anti-Jetpack
 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

//Esto va en OnGameModeInit
SetTimer("AntiJet",1000,true);  //cada 1 segundo checa al jugador


//Esto va abajo de su gm v:
forward AntiJet(playerid);
public AntiJet(playerid)
{
	for(new i=0;i<MAX_PLAYERS;i++)
	{
		if(IsPlayerConnected(i))
		{
                if(GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK)
			{
			  	new string[200];
				format(string, sizeof(string), "[%s] {FFFFFF}fue baneado por el anticheat. Razón: {F5C800}Cheats de volar{FFFFFF}.", NombreJugador(i));
				SendClientMessageToAll(0xF5C600FF, string);
                                Ban(playerid); //si quieres que le solo kick pon Kick(playerid)
			}
		}
	}
}

  Cantidad de llaves: Abiertas(7)-Cerradas(7) | Lineas Totales: 23
Ese codigo no va a funcionar, dudo que compile.

Es innecesario el parametro "playerid", estas pasando por todos los jugadores, y usas playerid como si fuese un unico el marcado. No todos los GameModes tienen la funcion NombreJugador (Ademas, recuerda que no es bueno retornar strings!).
 Codigo Pawno:
1
2
3
4

AntiJet(){
     foreach(new i : Player) if(GetPlayerSpecialAction(i) == SPECIAL_ACTION_USEJETPACK) Kick(i);
     return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 4
-hi Gracias
Abu-Dhabi
Junior
Junior
Mensajes: 316
Registrado: 23 Ago 2014 15:20
Ubicación: Buenos Aires - Argentina
Reputación: 21

17 Sep 2018 17:33

Sirve para eliminar las 'virgulillas' de un texto, por ejemplo textdraws o gametexts...
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

stock primeClear(const [email protected][64]) // By Abu-Dhabi
{
	new [email protected][sizeof([email protected])], [email protected], tmpPrime = 3;
	format([email protected], sizeof([email protected]), [email protected]);
	repeat_Fix:
	if ([email protected] < strlen([email protected]) / tmpPrime)
	{
	    if(strfind([email protected], "~", true) != -1)
	 	{
		 	strdel([email protected], strfind([email protected], "~", true), strfind([email protected], "~", true) + tmpPrime);
		}
	    [email protected] ++;
	    goto repeat_Fix;
	}
    return [email protected];
}
  Cantidad de llaves: Abiertas(3)-Cerradas(3) | Lineas Totales: 16
Ejemplo:
 Codigo Pawno:
1
2
3
4
5
6

public OnGameModeInit()
{
	printf("primeClear(%s);", "~R~Te entiendo, ~W~pero... ~Y~nada que ver.");
	printf("sin virgulillas: %s", primeClear("~R~Te entiendo, ~W~pero... ~Y~nada que ver.")); // imprimirá "Te entiendo, pero... nada que ver" en la consola.
	return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 6
La utilidad, y razón por la cual hice el código fue para traspasar textos de TextDraw's a SendClientMessage...
Avatar de Usuario
#Fede
Moderador Global
Moderador Global
Mensajes: 3134
Registrado: 12 Ene 2015 06:32
Ubicación: Montevideo, Uruguay.
Reputación: 75

24 Sep 2018 08:37

Obtener velocidad del jugador en Nudos.

Creditos del calculo en KM/H: Misco.
Creditos de la funcion: Its me, carl.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9

stock GetPlayerSpeed(playerid) // by Misco
{
    new Float:ST[4];
    if(IsPlayerInAnyVehicle(playerid))
        GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[2]);
        else GetPlayerVelocity(playerid,ST[0],ST[1],ST[2]);
    ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) * 100.3;
   return floatround(ST[3]/0.53995) ;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 9
EDIT: Uhm, tuve que probar esto antes de publicarlo, ahora si debería funcionar.
Estoy fuera de SA-MP, no me envíen mensajes privados invitándome a proyectos.


scriptnoob escribió:Cada día se va mejorando el foro, nuestro objetivo es como el de una empresa:

Misión: Brindar ayuda y aportes a los usuarios.
Visión: Ser la página de mayor calidad de servicio de soporte referidos a lenguajes de programación.
Lee las reglas del foro para evitar ser sancionado




Avatar de Usuario
Dji_
Baneado
Baneado
Mensajes: 224
Registrado: 17 Oct 2017 06:37
Reputación: 9

25 Sep 2018 15:26

Esta última cosa de FenixZone, muy fácil de hacer. Gracias Kanox por los desafíos.
"Los jugadores de nivel 1 recuperarán la salud al recibir daño."
Ahora peguen esto por debajo de 'OnPlayerTakeDamage'

 Codigo Pawno:
1
2
3
4
5
6
7
8

	"text-italics">if(PlayerInfo[playerid][jNivel] < 1) return 1;
	{
	new Float:Vida;
	GetPlayerHealth(playerid,Vida);
	SetPlayerHealth(playerid,Vida);
	}

  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8

Volviendo...
 Codigo Pawno:
1
2
3
4
5
6
7
8
9

CMD:hablidades(playerid,params[])
{
if(PlayerInfo[playerid][pKanope] < 666) return SendClientMessage(playerid, -1, "No perteneces a mi gang.");
SendClientMessage(playerid, COLOR_KANOPE, "Scripter: 82%");
SendClientMessage(playerid, COLOR_KANOPE, "Maper: 70%");
SendClientMessage(playerid, COLOR_KANOPE, "PHP: 15%");
SendClientMessage(playerid, COLOR_KANOPE, "HTML: 20%");
SendClientMessage(playerid, COLOR_KANOPE, "Vivir al límite: 100%");
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 9

Avatar de Usuario
TutosScript
Aprendiz
Aprendiz
Mensajes: 37
Registrado: 01 Sep 2018 18:19
Reputación: 0

04 Oct 2018 22:01

Pequeño comando oculto para su servidor

 Codigo Pawno:
1
2
3
4
5
6
7
8
9

CMD:editarcomandooculto(playerid, params[])
{
        new string[126];
	PlayerInfo[playerid][jAdminNvl] = 6; // En jAdminNvl colocan su referencia a administrador
	format(string, sizeof(string), "{0D92DE}¡Felicitaciones! %s{FFFFFF}, ahora eres {2AFF00}Administrador{FFFFFF}",NombreJugador(playerid));
	SendClientMessage(playerid,0xFFFFFF00, string);
	Log("logs/cmds-oculto.log", string);
	return 1;
}
  Cantidad de llaves: Abiertas(5)-Cerradas(5) | Lineas Totales: 9
Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1666
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

04 Oct 2018 23:32

TutosScript escribió:
04 Oct 2018 22:01
Pequeño comando oculto para su servidor

 Codigo Pawno:
1
2
3
4
5
6
7
8
9

CMD:editarcomandooculto(playerid, params[])
{
        new string[126];
	PlayerInfo[playerid][jAdminNvl] = 6; // En jAdminNvl colocan su referencia a administrador
	format(string, sizeof(string), "{0D92DE}¡Felicitaciones! %s{FFFFFF}, ahora eres {2AFF00}Administrador{FFFFFF}",NombreJugador(playerid));
	SendClientMessage(playerid,0xFFFFFF00, string);
	Log("logs/cmds-oculto.log", string);
	return 1;
}
  Cantidad de llaves: Abiertas(5)-Cerradas(5) | Lineas Totales: 9
Hola, -hi

Primer dato: Desperdicias celdas en la variable "string".
Segundo dato: NombreJugador no es una función que exista.
Tercer Dato: Log no es una función que exista.
Quinto dato: ¿Para que crear una variable formateada con un mensaje tan basico? LoL
Sexto dato: "jAdminNvl" no es lo único que hay que cambiar para la "referencia a administrador"...
Arregla tu código, o hazlo compilar al menos.

Saludos, -bye
Avatar de Usuario
Graber
Junior
Junior
Mensajes: 194
Registrado: 10 Abr 2016 19:16
Contactar:
Reputación: 22

21 Oct 2018 14:48

Dji_ escribió:
25 Sep 2018 15:26
Esta última cosa de FenixZone, muy fácil de hacer. Gracias Kanox por los desafíos.
"Los jugadores de nivel 1 recuperarán la salud al recibir daño."
Ahora peguen esto por debajo de 'OnPlayerTakeDamage'

 Codigo Pawno:
1
2
3
4
5
6
7
8

	"text-italics">if(PlayerInfo[playerid][jNivel] < 1) return 1;
	{
	new Float:Vida;
	GetPlayerHealth(playerid,Vida);
	SetPlayerHealth(playerid,Vida);
	}

  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8

Por que aportan código basura y sin testear? Veamos bien:
 Codigo Pawno:
1
2
3
4
5
6
7

	if(PlayerInfo[playerid][jNivel] < 1) return 1;
	{
	new Float:Vida;
	GetPlayerHealth(playerid,Vida);
	SetPlayerHealth(playerid,Vida);
	}

  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 7
El if ya esta haciendo lo suyo con el return 1, asi que podemos sacar esos { y } que en realidad estan ahi de adorno:

 Codigo Pawno:
1
2
3
4

	if(PlayerInfo[playerid][jNivel] < 1) return 1;
	new Float:Vida;
	GetPlayerHealth(playerid,Vida);
	SetPlayerHealth(playerid,Vida);
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 4
Vamos a ver linea por linea.

Primera línea: Si el player tiene un nivel menor a 1, terminar la función y no ejecutar nada de lo que se viene. Obviamente nadie tiene un nivel menor a 1, y ese return nunca sucederá. El código se aplicará para TODO el server.

Luego estas declarando las variables y obtienes la vida, y se la vuelves a poner. Y eso? estas obteniendo la misma vida que recibio daño y se la estas volviendo a poner! OnPlayerTakeDamage no garantiza que se llama antes o despues de recibir daño, solo tiene la cantidad. Eso no funcionará siempre, quiza con metralletas pero no funcionará normal como debe.

EDIT: Código correcto (Va en OnPlayerTakeDamage):
 Codigo Pawno:
1
2
3
4
5
6

if(PlayerInfo[playerid][jNivel] == 1)
{
    new Float:old_health;
    GetPlayerHealth(playerid, old_health);
    SetPlayerHealth(playerid, old_health + amount);
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 6
Imagen

No doy soporte por privado y no estoy disponible para ningún trabajo/proyecto/lo que sea. Eviten MPs de ese tema

Avatar de Usuario
#Fede
Moderador Global
Moderador Global
Mensajes: 3134
Registrado: 12 Ene 2015 06:32
Ubicación: Montevideo, Uruguay.
Reputación: 75

25 Oct 2018 09:54

No es un codigo, pero es algo bastante util. Todos los colores de y_colours, la fotografía no es de mi propiedad.
Estoy fuera de SA-MP, no me envíen mensajes privados invitándome a proyectos.


scriptnoob escribió:Cada día se va mejorando el foro, nuestro objetivo es como el de una empresa:

Misión: Brindar ayuda y aportes a los usuarios.
Visión: Ser la página de mayor calidad de servicio de soporte referidos a lenguajes de programación.
Lee las reglas del foro para evitar ser sancionado




Ware
Aprendiz
Aprendiz
Mensajes: 14
Registrado: 08 Jun 2014 08:31
Reputación: 1

27 Oct 2018 14:28

Publico todas las callbacks nativas de SA-MP operativas en la versión 0.3.7-R2, esto se puede encontrar cuando bajamos un gamemode de la página de SA-MP en la carpeta pawno llamado new.pwn, pero este archivo por lo visto está desactualizado durante un par de versiones.

Para descargar el archivo actualizado «new.pwn» haz clic aquí.
Avatar de Usuario
Blezi
Aprendiz
Aprendiz
Mensajes: 18
Registrado: 27 Nov 2018 00:24
Ubicación: V774104
Contactar:
Reputación: 3

27 Nov 2018 05:49

* Para usar estas funciónes necesitas el plugin Pawn.RakNet de urShadow (link)
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10

ToggleWidescreen(playerid, bool:toggle)
{
	new BitStream:bs = BS_New();

	BS_WriteValue(bs, PR_BOOL, toggle);
	BS_RPC(bs, playerid, 111, PR_LOW_PRIORITY, PR_RELIABLE_ORDERED);

	BS_Delete(bs);
	return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 10
Función: Crea unas barras negras que se suelen usar para cinemáticas en el modo historia, esto se podría replicar con textdraw's pero la diferencia con esta función es que también oculta el hud y no se necesitan crear textdraw's.

Imagen

 Codigo Pawno:
1
2
3
4
5

public OnOutcomingRPC(playerid, rpcid, BitStream:bs)
{
	if (rpcid == 101 || rpcid == 93) return 0;
	return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 5
Función: Bloquea el chat, el usuario no puede enviar mensajes ni leer mensajes enviados por usuarios ni por el servidor.
Si quieres que solamente bloqueé mensajes de los usuarios elimina || rpcid == 93 del código. (si se usa SendClientMessage para enviar mensajes de usuarios estos se mostrarán, ya que el servidor estaría enviando el mensaje mediante el servidor).
Avatar de Usuario
DarkFireYT
Baneado
Baneado
Mensajes: 601
Registrado: 12 Dic 2016 18:05
Contactar:
Reputación: 35

27 Nov 2018 22:03

TheMasterNico escribió:
30 Sep 2016 19:31
Bienvenido Invitado.

Aquí podrás publicar y/o encontrar funciones cortas y de gran utilidad para sus códigos.

Desde un comando que solo muestre un mensaje hasta una función que busque la posición delantera de un vehículo, o algo así. Todas son bienvenidas.
Recuerda leer las reglas generales del foro.
Si tu aporte es para un GameMode en especifico (Solo funciona en ese), deja claramente escrito para cual es. Ademas, deja escrito como usarlo y/o donde poner tu código para que funcione bien.
Si el código que publicas no es tuyo deja los créditos de quien son.
No dejes link de descargas acá, usa siempre el bbcode [*pawn] para dejar tu código
Solo publica mensajes que contengan un aporte para el tema, no publiques pidiendo ayuda
La verdad es muy simple :P
 Codigo Pawno:
1
2
3
4
5
6

stock Esperar(time)
{
    new stamp = tickcount();
    while (tickcount() - stamp < time){}
    return 1;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 6
En un comando por ejemplo de ban podrías poner esto en vez de un settimer o settimerex
 Codigo Pawno:
1

Esperar(1000); // 1 segundo
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
que hace esto?
hace un tiempo de "espera" entre acciones:
un ejemplo seria :
Si tengo un sendclientmessage y despues un Esperar, la accion que sigue tendría un pequeño retraso antes de producirse (el retraso en milisegundos de Esperar)
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.
Responder