Tutoriales de pawn by a_lleras
  Tutoriales
 
Aki viene lo interesante!!:

Comandos para equipos:


Muy bien, primero les dejo el ejemplo:

Código:

EnviarMensajeAEquipo(color, text[]) {
    for(new i = 0; i < MAX_PLAYERS; i ++) {
       if(IsPlayerConnected(i)) {
          if (gTeam[i] == TEAM_EQUIPO) {
               SendClientMessage(i, color, text);
            }
        }
    }
}



1er paso: Ok primero se debe definir el nombre, en este caso:

Código:

EnviarMensajeAEquipo


Y a la derecha lleva: (color,text[]){

2do paso: Despues se pone el for, esto va a decirle al compilador que "i" es "playerid":

Código:

    for(new i = 0; i < MAX_PLAYERS; i ++) {


3er paso: Ahora se pone el if:

Código:

if(gTeam == EQUIPO){


4to paso: Ponemos paraa que envie el mensaje, seria asi:
Código:

SendClientMessage(i,color,text);


5to paso: Cerramos con las llaves, como hay 4 llaves en los if, cerramos con cuatro llaves:
Código:

           }
       }
   }
}


Y listo!!!!, despues se pone en el comando el EnviarMensajeAEquipo

Ejemplo:

Código:

if(strcmp,"/hola",cmdtext, true) == 0
{
EnviarMensajeAEquipo(COLOR_YELLOW,"Hola... xD");
return 1;
}

Recuerda que EQUIPO lo tienes que definir, es decir, tienes que poner un define con el nombre del equipo y el numero al lado. Para hacer a alguien de un equipo se utiliza:
gTeam[playerid] = EQUIPO;

Agregar jugadores por equipos:


Aki les dejo un pequeño tutorial para agregar Jugadores por equipos

Ok, primero les voy a dejar algo como la formula del AddPlayerClassEx:


(id_del_equipo, skin, Float:x, Float:y, Float:z, Float:Angle, arma1, arma1_balas, arma2, arma2_balas, arma3, arma3_balas)


Id: Id de el equipo

Skin: el skin de la persona que va a elegir ese personaje

Float:x Coordenada x donde va a aparecer el jugador

Float:y Coordenada y donde va a aparecer el jugador

Float:z Coordenada z donde va a aparecer el jugador

Float:angulo Angulo donde va a estar mirando el jugador

Arma: El arma que va a tener ese personaje

Arma_balas: La cantidad de balas que va a tener un arma de el personaje


Ok vamos ahora a lo real:

un ejemplo:


Código:
public OnGameModeInit( )
{
    //El jugador que elija ese personaje va a usar el skin de cj y su equipo es 15
    AddPlayerClassEx( 15, 0, 1958.33, 1343.12, 15.36, 269.15, 26, 36, 28, 150, 0, 0 );
//equipo,skin,x,y,z,angulo,arma1,arma1_balas,arma2,arma2_balas,arma3,arma3_balas
    return 1;
}

Tutorial para agregar menues:


Primero hay que saber todas las funciones para los menues y que hacen:

Código:

(1) Menu:CreateMenu(const title[], columns, Float:x, Float:y, Float:col1width, Float:col2width = 0.0);

Para crear los menues, devuelve el ID por lo que necesitamos variables GLOBALES donde alacenarlo, hay que pasarle: el titulo, cuantas columnas (1 o 2) la posicion en la pantalla (800x600) y el ancho de las columnas.
Ej:
MenuEjemplo = CreateMenu("Menu Ejemplo",2,25.0,150.0,100.0,55.0);

Código:

(2) DestroyMenu(Menu:menuid);

Destruye un menu para siempre, ejemplo
DestroyMenu(MenuEjemplo);

Código:

(3) AddMenuItem(Menu:menuid, column, const menutext[]);

Le agrega opciones al menu, IMPORTANTE, la primera opcion es la "0", la segunda es la "1" etc, hay que pasarle, a que menu, en cual columna (la 0 o la 1) y el texto, ejemplo:
AddMenuItem(MenuEjemplo, 0, "Esta es la opcion:");
AddMenuItem(MenuEjemplo, 1, "N° 1");

Código:

(4) SetMenuColumnHeader(Menu:menuid, column, const columnheader[]);

Le pone titulo a cada columna, ejemplo:
SetMenuColumnHeader(MenuEjemplo, 0,"Columna 1");
SetMenuColumnHeader(MenuEjemplo, 1,"Columna 2");

Código:

(5) ShowMenuForPlayer(MenuEjemplo, playerid);

Le muestra a un jugador el menu, osea se lo mete en la pantalla, ejemplo:
ShowMenuForPlayer(MenuEjemplo, playerid);
(se puede usar en cualquier lado, ejemplo en un comando)

Código:

(6) HideMenuForPlayer(MenuEjemplo, playerid);

Le saca al jugador el menu, sin destruirlo (osea se puede volver a usar despues) Ej:
HideMenuForPlayer(MenuEjemplo, playerid);

Código:

(7) IsValidMenu(Menu:menuid);

Chequea si un menu existe, dice true si si y false sino, ej:
IsValidMenu(MenuEjemplo);

Código:

(8) DisableMenu(Menu:menuid);

Apaga un menu, (no la usen es de gusto)

Código:

(9) DisableMenuRow(Menu:menuid, row);

Saca una opcion del menu (recuerden la primera es la 0)

Código:

(10) Menu:GetPlayerMenu(playerid);

Dice cual es el menu que el jugador tiene en pantalla en este momento


y que hay dos eventos relacionados con los menues:
Código:

(11) OnPlayerSelectedMenuRow(playerid, row);

Este lo usaremos para saber que opcion elegio y hacer algo al respecto (util si sabemos usar switch)

Código:

(12) OnPlayerExitedMenu(playerid);

Si un jugador apreta enter, se le va el menu, con esto podemos destrabar al jugador si por ejemplo al abrir el menu lo congelamos o podemos volverle a poner el menu en pantalla para obligarlo a elegir una opcion


Para que se entienda mejor aca les va el ejemplo de arriba en un FS, osea con todo eso que yo dije ahi arriba ustedes podrian hace esto:
NOTA: usar /menu para abrir el menu
http://pastebin.com/f6b955e3b

Aca tienen una foto del ejemplo

Y si quieren aprender mas, aca hay 2 ejemplos mas bien completitos:

Ejemplo 1.
Un menu para comprar las armas, aca pueden ver mejor como se usan muchas opiones:
NOTA: usar /menuarmas para abrir el menu
http://pastebin.com/fa4d5b37

Ejemplo 2.
Un menu para teletransportarse, este es mas complejo, para que sea mas facil para editar, al principio simplemente editen los campos, les dejo dos ejemplos, el orden es:
Código:

NOMBRE, Costo del teleporte, InteriorID, Coordenada X, Coordenada Y, Coordenada Z

El resto si no se animan mejor no lo toquen, si quieren usar mas o menos de 7 destinos preguntenme que le digo como se cambia
NOTA: usar /Tmenu para abrir el menu


Link: http://pastebin.com/f648349cb

Ejemplo 3.
Igual que el anterior pero con interiores, para que vean como se usan los interiores:
NOTA: Dedicado a lorfirewall
SON TODOS LOS ESTADIOS DEL SA-MP!!! IMPERDIBLE!!!

Link: http://pastebin.com/ffa8db7


Ejemplo 4.
Igual que el ejemplo 3, PERO CON 2 MENUES y la posibilidad de agregar muchos mas.
NOTA:

Link: http://pastebin.com/f652bcc42


Tutorial by zeruel_angel

Timers:


1) Primero que nada, que es un timer?
Un timer es una cosa, que despues de un tiempo, llama a una funcion, una vez o siempre.

2) Que necesitas para usar un timer?
Simplemente una funcion que necesite ser llamada despues de un cierto tiempo, PERO, la funcion debe ser public y estar "forwareada"

3) Como se declara una funcion public y como se la "forwarea"?
Para declararla public, se le pone la palabra public antes del nombre cuando la escribimos (no cuando la llamamos) y para "forwarearla", arriba de todo en nuestro archivo ponemos "forward NOMBRE_DE_LA_FUNCION();"

4) No entendi nada, me das un ejemplo?
Si como no, supongamos que queremos saber cuantos minutos hace que nuestro server esta andando, tonces usamos una variable llamada "minutos" y una vez por minuto la hacemos "minutos++":
Código:

//arriba de todo
new minutos;
forward CadaMinutilloSumoUno();
//en cualquier lado
public CadaMinutilloSumoUno()
{
      Minutos++;
}



5) Si, entendi, pero... como se usa eso?
Como es algo que queremos que arranque junto con el server, tenemos que crear el timer junto con el server, osea adentro de "OnGameModeInit"

6) Si, pero que ponemos adentro de OnGameModeInit?
AH! si si, pones esto:
Código:

SetTimer("CadaMinutilloSumoUno",60000,1);

Ahora te explico... tranqui tronco
primero y entre comillas ( osea estas ->") pones el nombre de la funcion, eso si, tiene que ser el nombre EXACTO con mayusculas y munisculas, despues del nombre pones el tiempo, pero el tiempo va en milisegundos, osea 1 segundo -> 1000 milisegundos, yo queria 1 minuto -> 60 segundos -> 60000 milisegundos. El ultimo puede ser 0 o 1, 0 significa que solamente queres que pase una vez y 1 que queres que pase cada vez que pasa ese tiempo. (osea cada 60000 milisegundos).

7) Y si por que se me antoja no quiero que el timer este mas, se puede apagar un timer?
Mas bien! se hace asi, donde lo creas, por ejemplo
Código:

SetTimer("CadaMinutilloSumoUno",60000,1);

pones:
Código:

Variable = SetTimer("CadaMinutilloSumoUno",60000,1);

Y cuando lo queres apagar pones:
Código:

KillTimer(Variable);


Osea todo junto:
Código:


//arriba de todo
new minutos;
new CadaMinutilloSumoUno_timer_id;
forward CadaMinutilloSumoUno();
//en cualquier lado
public CadaMinutilloSumoUno()
{
   Minutos++;
}

//adentro de OnGameModeInit:
CadaMinutilloSumoUno_timer_id = SetTimer("CadaMinutilloSumoUno",60000,1);

//Donde quieras y te sirva, por ejemplo adentro de un comando:
KillTimer(CadaMinutilloSumoUno_timer_id);




Cool Se le puede pasar variables a un timer?
No, a un timer normal, a uno "Expecial", se usa asi:
SetTimerEx("nombre_de_la_funcion",Tiempo,repite,"parametros",valores)

9) Que significa eso?
Donde dice "nombre_de_la_funcion" se pone el nombre de la funcion igual q antes,
Donde dice "Tiempo" se pone el tiempo igual que antes
Donde dice "repite" igual que antes 0 no 1 si
Donde dice "parametros" se especifican los parametros como si fuera un string, a saber, si recibe numeros se pone "% d" si recibe numero con coma se pone "% f" si recibe un string se pone "% s" si recibe varios parametros se ponen todos pegados y en el orden asi por ejemplo si recibe 2 numeros y un string = "% d % d % s".
Donde dice "valores" se ponen, separados por comas los parametros, en el orden que deben ir.

Te voy a dar un ejemplo bastante completito en el que usamos un timer normal y uno expecial.

Supongamos que tenemos un sistema de login y si la persona no tiene una cuenta en nuestro server, queremos que una vez por minuto reciba un cartelito que le diga ("dale no seas gil, registrate") y que si tiene cuenta y no se logea a los 30 segundos de entrar, el server lo heche.
Como en el ejemplo no voy a poner el sistema de cuentas, supongamos que tenemos una varible que se llama "Tiene_Cuenta" y otra "Esta_Logueado", seria algo asi
Código:


//arriba de todo
new Tiene_Cuenta[MAX_PLAYERS];
new Esta_Logueado[MAX_PLAYERS];
new KickeadorAutomatico_timer_id[MAX_PLAYERS];
forward KickeadorAutomatico(playerid);
forward Propaganda();

//en cualquier lado
public KickeadorAutomatico(playerid)
{
   Kick(playerid);
}
public Propaganda()
{
   for (new i=0;i<MAX_PLAYERS;i++)
   {
      if ((IsPlayerConnected(i))&&(Tiene_Cuenta[i]==false))
      {
         SendClientMessage(playerid,0xAA33AA33,"No seas gil create una cuenta");
      }
   }
}
//Adentro de OnGameModeInit tenemos:
SetTimer("Propaganda",60000,1);
//Adentro de OnPlayerConnect tenemos un if mas o menos asi:
if (Tiene_Cuenta[playerid]==true)
{
   KickeadorAutomatico_timer_id[playerid]=SetTimerEx("KickeadorAutomatico",30000,0,"% d",playerid);
}

//Ahora adentro del comando /login ponemos el KILL asi no lo kickea despues que se logeo.
KillTimer(KickeadorAutomatico_timer_id[playerid]);

//FIN


Una MUY BUENA Y EXCELENTE COSTUMBRE es despues de matar un timer, setear su valor a -1, no pasa nada si no lo hacen, pero quizas algun dia les tire errores, asi que mejor atajarse no? ejemplo:
Código:

KillTimer(KickeadorAutomatico_timer_id[playerid]);
KickeadorAutomatico_timer_id[playerid]=-1;

Tutorial by zeruel_angel


Teleports con pickups:



1. Que necesitamos?


* Las coordenadas del pickup que vamos a usar
* Las coordenadas del lugar a donde vamos a ir
* Tener el callback "OnPlayerPickupPickUp(playerid,pickupid)"
* 1 nombre para nuestro pickup
* El backup de nuestro gm

2. "OnPlayerPickupPickUp"

* Esta callback esta relacionada con lo que pasara cuando el jugador
toque con el pickup X, aca un ejemplo:

Código:
new niidea;

//Ongamemodeinit
niidea = CreatePickUp(x,y,z);

//OnPlayerPickupPickUp
{
    if ( pickupid == niidea)
    {
        SendClientMessage(playerid, COLOR_YELLOW, "Has llegado a la zona de niidea");
      SetPlayerPos(playerid,x,y,z);
    }
    return 1;
}




3. Creando nuestro propio Telenstransporte


En este caso utilizare la que uso en mi gm.

*** Creando la variable global

Código:
new leatherface;


Sin la variable global, simplemente no funcionaria el teleport.

*** OnGamemodeInit


Código:
leatherface = CreatePickup(341,2,-32.1004,2336.2832,24.1406);


Como si se tratara de otro Pickup agregamos nuestro pickup con la funcion: CreatePickup(x,y,z);

*** OnPlayerPickupPickUp

Código:
public OnPlayerPickUpPickup(playerid, pickupid)
{
    if ( pickupid == leatherface)
    {
        SendClientMessage(playerid, COLOR_YELLOW, "Has llegado a la zona de Leatherface");
      SetPlayerPos(playerid,-245.2354,-2195.441,15);
    }
    return 1;
}


Esta es la parte mas importante, sin esta callback, no funcionaria el teleport. Ponemos si el pickup es el de leatherface, el gamemode mandara un mensaje y telenstransportara al jugador a las coordenadas , bla bla bla..., por ultimo ponemos el return , sin el aparecerian mil errores.
 
  Hoy habia 1 visitantes (1 clics a subpáginas) ¡Aqui en esta página!  
 
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis