[Aporte] Funciones Útiles

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
HERMES
Administrador General
Administrador General
Mensajes: 2829
Registrado: 20 Sep 2014 12:53
Ubicación: localhost
Reputación: 121

17 Nov 2014 19:13

Funciones Útiles


~ La idea de este tema es, como lo dice el título, postear funciones y/o callbacks útiles.

~ Cualquier usuario está invitado a compartir sus funciones con la comunidad. Preferentemente funciones/callbacks que no sean para un GM en específico, sino que funcione con sólo copiarla y pegarla en un script vacío.


~ Formato a seguir (No es necesario poner cada título ni usar color):


- Nombre de la función

- Breve descripción de lo que hace

- Función y ejemplo de uso con etiqueta [ pawn ] [ /pawn ]

- Créditos


Comienzo yo con un ejemplo:


- NombreJugador (playerid)

- Obtiene el nombre de un jugador y devuelve el string.
 Codigo Pawno:
1
2
3
4
5
6

stock NombreJugador(playerid)
{
    new PNombre[MAX_PLAYER_NAME];
    GetPlayerName(playerid, PNombre, sizeof(PNombre));
    return PNombre;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 6
 Codigo Pawno:
1
2
3
4

// Ejemplo de uso:
new Mensaje[39];
format(Mensaje, sizeof(Mensaje), "Tu nombre es: %s", NombreJugador(playerid));
SendClientMessage(playerid, -1, Mensaje);
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 4
- Resultado: "Tu nombre es: HERMES"

- Créditos: HERMES
Avatar de Usuario
Tusso4
Senior
Senior
Mensajes: 1379
Registrado: 10 Jun 2014 12:43
Ubicación: Aincrad
Reputación: 71

17 Nov 2014 19:56

Esto no iria en off topic?
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10

stock VerTiempo(bool:seeconds)
{
new tiempoo[5][5], Horax, Minutox, seegundosx;
gettime(Horax, Minutox, seeconds);
if(Horax<10){format(tiempoo[1], 20, "0%d",Horax);}else{format(tiempoo[1], 20,"%d", Horax);}
if(Minutox<10){format(tiempoo[2], 20, "0%d",Minutox);}else{format(tiempoo[2], 20,"%d", Minutox);}
if(seegundosx<10){format(tiempoo[3], 20, "0%d",seegundosx);}else{format(tiempoo[3], 20,"%d", seegundosx);}
if(seeconds==false){format(tiempoo[4], 20, "%s:%s", tiempoo[1], tiempoo[2]);}else if(seeconds==true){format(tiempoo[4], 20, "%s:%s:%s", tiempoo[1], tiempoo[2], tiempoo[3]);}
return tiempoo[4];
}
  Cantidad de llaves: Abiertas(9)-Cerradas(9) | Lineas Totales: 10
Uso:
 Codigo Pawno:
1
2
3

new string[100];
format(string, 100, "Hora del servidor: %s", VerTiempo(false)); //True para ver los segundos, False para solo hora y minuto
SendClientMessage(playerid, -1, string);
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 3
Resultado: "Hora del servidor hora:minuto"
Creditos: Tusso4
Se venden PCUs adaptado a GMs. MP para contacto

Avatar de Usuario
HERMES
Administrador General
Administrador General
Mensajes: 2829
Registrado: 20 Sep 2014 12:53
Ubicación: localhost
Reputación: 121

17 Nov 2014 20:27

Tusso4 escribió:Esto no iria en off topic?
Lo pensé pero como son funciones que se pueden usar en pawno y son aportes de los usuarios lo puse aquí.
Con respecto al código:
 Codigo Pawno:
1
2
3
4
5
6
7
8

stock VerTiempo(bool:seeconds)
{
    new tiempo[16], Horax, Minutox, Segundosx;
    gettime(Horax, Minutox, Segundosx);
    if(seeconds==false) format(tiempo, sizeof(tiempo), "%02d:%02d", Horax, Minutox);
    else format(tiempo, sizeof(tiempo), "%02d:%02d:%02d", Horax, Minutox, Segundosx);
    return tiempo;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
Me parece mucho más eficiente así.
ViruZz
Aprendiz
Aprendiz
Mensajes: 73
Registrado: 01 May 2014 16:00
Reputación: 0

18 Nov 2014 02:50

Muy bueno estos aportes, ayudaran a los mas nuevos y a los basicos :) Siempre haciendo cosas utiles Hermes! Grande
Scripter
   15%
Mapper
   50%
Avatar de Usuario
HERMES
Administrador General
Administrador General
Mensajes: 2829
Registrado: 20 Sep 2014 12:53
Ubicación: localhost
Reputación: 121

18 Nov 2014 19:03

- IDJugador (Nombre)

- Obtiene el ID de un jugador a partir del nombre (string). Devuelve el ID del jugador si está conectado; INVALID_PLAYER_ID si no lo está.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

stock IDJugador(const String[])
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            new PNombre[MAX_PLAYER_NAME];
            GetPlayerName(i, PNombre, sizeof(PNombre));
            if(strcmp(String, PNombre, true, strlen(String)) == 0)
            {
                return i;
            }
        }
    }
    return INVALID_PLAYER_ID;
}
  Cantidad de llaves: Abiertas(4)-Cerradas(4) | Lineas Totales: 16
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

// Ejemplo de uso:
if(strcmp(cmd, "/CheckJugador", true) == 0)
{    
    new id;
    cmd = strtok(cmdtext, idx);
    if(!strlen(cmd) || strlen(cmd) > 24) return SendClientMessage(playerid, -1, "USO: /CheckJugador [Nombre]");
    id = IDJugador(cmd); // id = Resultado de la función.
    if(id != INVALID_PLAYER_ID) // Si hay un jugador con el nombre proporcionado
    {
        new Mensaje[38];
        format(Mensaje, sizeof(Mensaje), "ID de %s: %d.", cmd, id);
        SendClientMessage(playerid, -1, Mensaje);
    } else { // Sino
        new Mensaje[55];
        format(Mensaje, sizeof(Mensaje), "El Jugador %s no está conectado.", cmd);
        SendClientMessage(playerid, -1, Mensaje);
    }
    return 1;
}
  Cantidad de llaves: Abiertas(3)-Cerradas(3) | Lineas Totales: 19
- Resultado si está conectado: "ID de HERMES: 0."
- Resultado si no está conectado: "El Jugador HERMES no está conectado."

- Créditos: HERMES
Avatar de Usuario
HERMES
Administrador General
Administrador General
Mensajes: 2829
Registrado: 20 Sep 2014 12:53
Ubicación: localhost
Reputación: 121

19 Nov 2014 20:35

- SetPlayerVehicleInterior (playerid, AInterior)

- Cambia el Interior del vehículo en el cual está el jugador.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10

stock SetPlayerVehicleInterior(playerid, AInterior)
{
    if(AInterior < 0) return 0;
    if(IsPlayerConnected(playerid) && IsPlayerInAnyVehicle(playerid))
    {
        LinkVehicleToInterior(GetPlayerVehicleID(playerid), AInterior);
        return 1;
    }
    return 0;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 10
 Codigo Pawno:
1
2

// Ejemplo de uso:
SetPlayerVehicleInterior(playerid, 5); // Cambia el interior del vehículo del jugador al ID: 5
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 2
- Créditos: HERMES

________________________________________________________________________________________________


- SetPlayerVehicleVirtualWorld (playerid, AVirtualWorld)

- Cambia el Mundo (VirtualWorld) del vehículo en el cual está el jugador.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10

stock SetPlayerVehicleVirtualWorld(playerid, AVirtualWorld)
{
    if(AVirtualWorld < 0) return 0;
    if(IsPlayerConnected(playerid) && IsPlayerInAnyVehicle(playerid))
    {
        SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), AVirtualWorld);
        return 1;
    }
    return 0;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 10
 Codigo Pawno:
1
2

// Ejemplo de uso:
SetPlayerVehicleVirtualWorld(playerid, 5); // Cambia el virtualworld del vehículo del jugador al ID: 5
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 2
- Créditos: HERMES
Avatar de Usuario
#Zeus
Junior
Junior
Mensajes: 413
Registrado: 23 Jul 2014 16:14
Ubicación: España
Reputación: 16

20 Nov 2014 11:09

buen aporte para algo servira ´

+ reputacion .saludos
Aportes
- Mapeos

- Taller Mecánico Los Santos /Apartado Mapeos
- Escondite adaptado a unas colinas , valido para cualquier tipo de servidor RP ect /Apartado Mapeos
- Comisaría de Los Santos diferente estructura /Apartado Mapeos
- Carpintería de Los Santos Cerca de Unity /Apartado Mapeos
- Estación Market punto de spawn texturizado /Apartado Mapeos
- Filtrescripts

- Sistema de cajas de armas dinámico /Apartado Filtrescripts

- Proyectos Anteriores

- Uniti City Roleplay
- Rock Hills Roleplay
- UrbanCenter Roleplay
- Coldplay Roleplay
- Fortress City junto a Pony Negro
- Laurel Country Roleplay
- Lost Gamers Roleplay junto a Nicolas176
Algunos me recordarán como Frank Stark
pabloalber84
Baneado
Baneado
Mensajes: 772
Registrado: 09 Jul 2014 20:12
Reputación: 7

20 Nov 2014 18:06

Funcion ZC para poder hacer que todos los jugadores obtengan dicho color del personaje.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11

stock ColorTodos(color, string[])
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
                                SetPlayerColor(i, color);
                SendClientMessageToAllEx(color, string);
        }
    }
}
  Cantidad de llaves: Abiertas(3)-Cerradas(3) | Lineas Totales: 11
Comando:
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:colortodos(playerid, params[])
{
    new texto[128], color;
        if(Info[playerid][pAdminZC] < 4) return SendClientMessage(playerid, COLOR_RED, "No Autorizado");
    if(sscanf(params, "ds[128]", color, texto)) return SendClientMessageEx(playerid,  COLOR_GRAD2, "/colortodos [Color] [Razon]");
        ColorTodos(color, texto)
     return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
Es raro, nose porque se me ocurrio hacerlo xD -laughing

ARREGLADO
Última edición por pabloalber84 el 21 Nov 2014 17:25, editado 1 vez en total.
Avatar de Usuario
Tusso4
Senior
Senior
Mensajes: 1379
Registrado: 10 Jun 2014 12:43
Ubicación: Aincrad
Reputación: 71

20 Nov 2014 18:30

e_e una dudita e.e porque la razon ene l comando si no la usas para nada? x'D no se solo digo
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11

CMD:colortodos(playerid, params[])
{
    new texto[128], string[128], color;
        if(Info[playerid][pAdminZC] < 4) return SendClientMessage(playerid, COLOR_RED, "No Autorizado");
    if(sscanf(params, "ds[128]", color, texto)) return SendClientMessageEx(playerid,  COLOR_GRAD2, "/colortodos [Color] [Razon]");
        ColorTodos(color, string)
    new s[100];
    format(s, 100, "El color de los jugadores cambió a %d razón %s", color, texto);
    SendClientMessageToAll(-1, s);
     return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 11
Se venden PCUs adaptado a GMs. MP para contacto

Avatar de Usuario
HERMES
Administrador General
Administrador General
Mensajes: 2829
Registrado: 20 Sep 2014 12:53
Ubicación: localhost
Reputación: 121

20 Nov 2014 21:40

- GetPlayerVehicleHealth (playerid)

- Obtiene la vida/salud del vehículo en el cual está el jugador. Devuelve un valor flotante.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10

stock Float:GetPlayerVehicleHealth(playerid)
{
    if(IsPlayerConnected(playerid) && IsPlayerInAnyVehicle(playerid))
    {
        new Float:VSalud;
        GetVehicleHealth(GetPlayerVehicleID(playerid), VSalud);
        return VSalud;
    }
    return 0.0;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 10
 Codigo Pawno:
1
2
3
4

// Ejemplo de uso:
new Mensaje[50];
format(Mensaje, sizeof(Mensaje), "La salud de tu vehículo es: %f", GetPlayerVehicleHealth(playerid));
SendClientMessage(playerid, -1, Mensaje);
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 4
- Resultado si está en un vehículo: "La salud de tu vehículo es: 1000.0000."

- Créditos: HERMES

________________________________________________________________________________________________


- SetPlayerVehicleHealth (playerid, Salud)

- Cambia la vida/salud del vehículo en el cual está el jugador.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10

stock SetPlayerVehicleHealth(playerid, Float:Salud)
{
    if(Salud < 0.0) return 0;
    if(IsPlayerConnected(playerid) && IsPlayerInAnyVehicle(playerid))
    {
        SetVehicleHealth(GetPlayerVehicleID(playerid), Salud);
        return 1;
    }
    return 0;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 10
 Codigo Pawno:
1
2

// Ejemplo de uso:
SetPlayerVehicleHealth(playerid, 1000.0); // Cambia la vida del vehículo del jugador por 1000.0 (Máxima)
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 2
- Créditos: HERMES
pabloalber84
Baneado
Baneado
Mensajes: 772
Registrado: 09 Jul 2014 20:12
Reputación: 7

21 Nov 2014 17:24

Tusso4 escribió:e_e una dudita e.e porque la razon ene l comando si no la usas para nada? x'D no se solo digo
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11

CMD:colortodos(playerid, params[])
{
    new texto[128], string[128], color;
        if(Info[playerid][pAdminZC] < 4) return SendClientMessage(playerid, COLOR_RED, "No Autorizado");
    if(sscanf(params, "ds[128]", color, texto)) return SendClientMessageEx(playerid,  COLOR_GRAD2, "/colortodos [Color] [Razon]");
        ColorTodos(color, string)
    new s[100];
    format(s, 100, "El color de los jugadores cambió a %d razón %s", color, texto);
    SendClientMessageToAll(-1, s);
     return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 11
Esque mira, si pongo haci como dices, estaria mejor en un mismo stock, y la razon, ustedes pondrian, para que no diga como el texto que pusiste, es mejor como le puse, ejemplo: /colortodos 0xFFFFFF Jojo Si

ERROR QUE ACABO DE NOTAR, NO PUSE QUE DIGA ESO XD, YA LO ARREGLE; ENVEZ DE STRING EN EL COMANDO; DEVERIA DE DECIR TEXTO, ASI:
 Codigo Pawno:
1
2
3
4
5
6
7
8

CMD:colortodos(playerid, params[])
{
    new texto[128], color;
        if(Info[playerid][pAdminZC] < 4) return SendClientMessage(playerid, COLOR_RED, "No Autorizado");
    if(sscanf(params, "ds[128]", color, texto)) return SendClientMessageEx(playerid,  COLOR_GRAD2, "/colortodos [Color] [Razon]");
        ColorTodos(color, texto)
     return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
Epic Fail mio -sorry
xD
Saludos.
Avatar de Usuario
HERMES
Administrador General
Administrador General
Mensajes: 2829
Registrado: 20 Sep 2014 12:53
Ubicación: localhost
Reputación: 121

24 Nov 2014 14:18

- EstaEnUso (vehicleid)

- Verifica si el vehículo está en uso. Devuelve "true" (verdadero) si lo está; "false" (falso) si no lo está.
 Codigo Pawno:
1
2
3
4
5
6
7
8

stock EstaEnUso(vehicleid)
{
    for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)
    {
        if(IsPlayerConnected(i) && IsPlayerInVehicle(i, vehicleid)) return true;
    }
    return false;
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 8
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

// Ejemplo de uso
if(strcmp(cmd, "/CheckVehiculo", true) == 0)
{
    new Mensaje[33], VID;
    cmd = strtok(cmdtext, idx);
    if(!strlen(cmd)) return SendClientMessage(playerid, -1, "USO: /CheckVehiculo [ID]");
    VID = strval(cmd);
    if(VID < 1 || VID >= MAX_VEHICLES) return SendClientMessage(playerid, -1, "ID Inválido.");
    if(EstaEnUso(VID)
    {
        format(Mensaje, sizeof(Mensaje), "El vehículo ID: %d está en uso.", VID);
        SendClientMessage(playerid, -1, Mensaje);
    } else {
        format(Mensaje, sizeof(Mensaje), "El vehículo ID: %d no está en uso.", VID);
        SendClientMessage(playerid, -1, Mensaje);
    }
    return 1;
}
  Cantidad de llaves: Abiertas(3)-Cerradas(3) | Lineas Totales: 18
- Resultado si está en uso: "El vehículo ID: 10 está en uso."
- Resultado si no está en uso: "El vehículo ID: 10 no está en uso."

- Créditos: HERMES
________________________________________________________________________________________________

- RespawnSinUso ()

- Devuelve al lugar de spawn (lugar donde fueron creados) a todos los vehículos del servidor que estén sin ocupantes.
 Codigo Pawno:
1
2
3
4
5
6
7

stock RespawnSinUso()
{
    for(new v = 1, j = GetVehiclePoolSize(); v <= j; v++)
    {
        if(!EstaEnUso(v)) RespawnVehicle(v);
    }    
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 7
 Codigo Pawno:
1
2
3

// Ejemplo de uso
RespawnSinUso();
SendClientMessage(playerid, -1, "Has repawneado todos los vehículos sin ocupantes.");
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 3
- Créditos: HERMES


- DestruirSinUso ()

- Destruye todos los vehículos del servidor que estén sin ocupantes.
 Codigo Pawno:
1
2
3
4
5
6
7

stock DestruirSinUso()
{
    for(new v = 1, j = GetVehiclePoolSize(); v <= j; v++)
    {
        if(!EstaEnUso(v)) DestroyVehicle(v);
    }    
}
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 7
 Codigo Pawno:
1
2
3

// Ejemplo de uso
DestruirSinUso();
SendClientMessage(playerid, -1, "Has destruido todos los vehículos sin ocupantes.");
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 3
- Créditos: HERMES


Nota: Estas dos últimas funciones utilizan y necesitan la función "EstaEnUso" anteriormente publicada para funcionar.
Zo0mer
Junior
Junior
Mensajes: 464
Registrado: 16 Oct 2014 19:56
Ubicación: Please wait....
Reputación: 13

12 Dic 2014 20:50

Me funcionaron -mu
Programando...Que tal

Responder