[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
#2

muy Bien
Reply
#3

oye men y como hago para saber las coordenadas de la puerta abirta o cerrada.?
Reply
#4

Usa un editor de mapas como MTA race editor o busca uno en el foro en ingles.
Reply
#5

Quote:
Originally Posted by SAWC™
Usa un editor de mapas como MTA race editor o busca uno en el forum en ingles.
Reply
#6

Muy bueno el tuto, pero me tira un error diciendo:

Код:
new YKZDoor


  CreateObject(3055,283.32315063477,-1185.1712646484,81.859893798828,37.849975585938);

public OnPlayerCommandText(playerid, cmdtext[])
{
  if (strcmp("/pykz", cmdtext, true) == 0) //para abrir la puerta
  {

      MoveObject(3055,277.12109375,-1190.1922607422,81.859893798828, 3.0);  //mueve nuestra puerta hasta las coordenadas de la puerta abierta.
      SendClientMessage(playerid, 0x28F943FF, "Has abierto la puerta Yakuza, recuerda cerrarla");
  }

  if (strcmp("/cykz", cmdtext, true) == 0) //cerrar
  {

      MoveObject(3055,283.32315063477,-1185.1712646484,81.859893798828, 3.0);  //mueve nuestra puerta hasta las coordenadas de la puerta abierta. (Reemplazar las coordenadas por las coordenadas de nuestra puerta (CERRADA))
      SendClientMessage(playerid, 0x28F943FF, "Server: Has cerrado la puerta");
  }
  return 0;
}
Lo pongo asн y me tira este error:
Код:
filterscripts\Puertas.pwn(24) : error 021: symbol already defined: "CreateObject"
Me pueden ayudar? gracias.
Reply
#7

Buen aporte, realmente casi no trabajo con objetos y no estaba muy seguro de como crear una puerta automatica xP. Gracias
Reply
#8

Quote:
Originally Posted by Sandman-x
Muy bueno el tuto, pero me tira un error diciendo:

Код:
new YKZDoor


  CreateObject(3055,283.32315063477,-1185.1712646484,81.859893798828,37.849975585938);

public OnPlayerCommandText(playerid, cmdtext[])
{
  if (strcmp("/pykz", cmdtext, true) == 0) //para abrir la puerta
  {

      MoveObject(3055,277.12109375,-1190.1922607422,81.859893798828, 3.0);  //mueve nuestra puerta hasta las coordenadas de la puerta abierta.
      SendClientMessage(playerid, 0x28F943FF, "Has abierto la puerta Yakuza, recuerda cerrarla");
  }

  if (strcmp("/cykz", cmdtext, true) == 0) //cerrar
  {

      MoveObject(3055,283.32315063477,-1185.1712646484,81.859893798828, 3.0);  //mueve nuestra puerta hasta las coordenadas de la puerta abierta. (Reemplazar las coordenadas por las coordenadas de nuestra puerta (CERRADA))
      SendClientMessage(playerid, 0x28F943FF, "Server: Has cerrado la puerta");
  }
  return 0;
}
Lo pongo asн y me tira este error:
Код:
filterscripts\Puertas.pwn(24) : error 021: symbol already defined: "CreateObject"
Me pueden ayudar? gracias.
dentro de OnFilterScriptInit
pawn Код:
new YKZDoor;
YKZDoor = CreateObject(3055,283.32315063477,-1185.1712646484,81.859893798828,37.849975585938);
Reply
#9

Buen tuto xd
Reply
#10

Yo lo pongo asн y:



y me tira este error:

Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)