[Tutorial] Crear puertas automaticas o por comando
#1

Bueno este es un tutorial muy simple para crear puertas por comando o automaticas:

Ya sea para crear una puerta automatica o por comando debemos definir la variable que contendra la puerta:
pawn Код:
new Puerta;
Una vez definida la variable debemos crear nuestra puerta y asignarla a la variable anteriormente creada:
pawn Код:
//Si van a crear la puerta en un GameMode, en OnGameModeInit() agregamos
  Puerta =  CreateObject(modelodepuerta, coordenadaX, coordenadaY, coordenadaZ, rotacionX, rotacionY, rotacionZ);

//Si por el contrario la van a crear en un FilterScript, en OnFilterScriptInit() agregamos
  Puerta =  CreateObject(modelodepuerta, coordenadaX, coordenadaY, coordenadaZ, rotacionX, rotacionY, rotacionZ);
Bien ya tenemos nuestra puerta creada y asignada a nuestra variable.

Puerta Por Comandos

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
  if (strcmp("/abrir", cmdtext, true) == 0) //para abrir la puerta
  {
     
    if(IsPlayerInRangeOfPoint(playerid, 15.0, coordenadaX, coordenadaY, coordenadaZ)){  //si el jugador no esta en un radio de 15.0 a la puerta no lo dejara usar el comando. (Reemplazar las coordenadas por las coordenadas de nuestra puerta (CERRADA))
      MoveObject(Puerta, coordenadaX, coordenadaY, coordenadaZ, 3.0);  //mueve nuestra puerta hasta las coordenadas de la puerta abierta. (Reemplazar las coordenadas por las coordenadas de nuestra puerta (ABIERTA))
      return SendClientMessage(playerid, 0x28F943FF, "Server: Has abierto la puerta");
    }else return SendClientMessage(playerid, 0xFF0000FF, "ERROR: Debes estar cerca de la puerta para usar este comando");
  }

  if (strcmp("/cerrar", cmdtext, true) == 0) //cerrar
  {
     
    if(IsPlayerInRangeOfPoint(playerid, 15.0, coordenadaX, coordenadaY, coordenadaZ)){  //si el jugador no esta en un radio de 15.0 a la puerta no lo dejara usar el comando. (Reemplazar las coordenadas por las coordenadas de nuestra puerta (CERRADA))
      MoveObject(Puerta, coordenadaX, coordenadaY, coordenadaZ, 3.0);  //mueve nuestra puerta hasta las coordenadas de la puerta abierta. (Reemplazar las coordenadas por las coordenadas de nuestra puerta (CERRADA))
      return SendClientMessage(playerid, 0x28F943FF, "Server: Has cerrado la puerta");
    }else return SendClientMessage(playerid, 0xFF0000FF, "ERROR: Debes estar cerca de la puerta para usar este comando");
  }
  return 0;
}
y de este modo ya tendriamos nuestra puerta con comandos.


Puerta Automatica
Para la puerta automatica vamos a usar timers:
pawn Код:
//Si es unGameMode
public OnGameModeInit()
{
  SetTimer("PuertaCheck", 1000, 1);
}

//Si por el contrario es un FilterScript
public OnFilterScriptInit()
{
  SetTimer("PuertaCheck", 1000, 1);
}
Ahora que ya tenemos nuestro timer, debemos crearle su respectivo forward y luego decirle que hacer al timer:
pawn Код:
forward PuertaCheck();
public PuertaCheck()
{
  for(new i=0; i<MAX_PLAYERS; i++){  //Creamos una variable i con cada valor de los jugadores,(seria un reemplazo de playerid)
    if(IsPlayerConnected(i)){ //si nuestro jugador (i) esta conectado entonces...
      if(IsPlayerInRangeOfPoint(i, 15.0, coordenadaX, coordenadaY, coordenadaZ)){  /si el jugador i esta dentro del rango de 15 a la puerta entonces...
        MoveObject(Puerta, coordenadaX, coordenadaY, coordenadaZ, 3.0); //abre la puerta
        //Reemplazar las coordenadas por las de la puerta abierta
      }
      else{  //si no esta en un rango de 15 a la puerta...
        MoveObject(Puerta, coordenadaX, coordenadaY, coordenadaZ, 3.0);  //cierra la puerta
        //Reemplazar las coordenadas por las de la puerta cerrada
      }
    }

  }
}
Y de este modo ya tenemos nuestra puerta automatica.

Explicacion de las Funciones Utilizadas
pawn Код:
CreateObject(objecto, coordenadaX, coordenadaY, coordenadaZ, rotacionX, rotacionY, rotacionZ);
IsPlayerInRangeOfPoint(jugador, radio, coordenadaX, coordenadaY, coordenadaZ);
MoveObject(ojecto, coordenadaX, coordenadaY, coordenadaZ, velocidad);
SendClientMessage(jugador, color, "mensaje");
SetTimer("NombredelTimer", tiempo, 0/1) // para que no se repita 0, para que se repita 1.
//Nota: el tiempo va en milisegundos (1 segundo = 1000 milisegundos).
IsPlayerConnected(jugador); //retorna el valor 1 si el jugador esta conectado y 0 si no lo esta.
Espero que les sirva
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 2 Guest(s)