Problemilla con codigo.
#1

Hola buenas tardes compaсeros, llevo visitando el foro bastante tiempo pero no como registrado si no como visitante y es un foro extraordinario, hace unos dias decidi iniciarme en esto de samp para montar un servidor en el cual podamos jugar los amigos o quien quiera jugar

El problema esta en el codigo de las puertas automaticas por proximidad, voy a intentar explicarlo correctamente para que me entiendan.

El codigo en cuestion es el siguiente:

Timer en OnGameModeInit;

Код:
SetTimer("PuertaJefe_LSPD", 1500, true);
Код:
forward PuertaJefe_LSPD();
public PuertaJefe_LSPD()
{
  new estado_puerta;
  for(new i;i<MAX_PLAYERS;i++)
  {
  if(!IsPlayerConnected(i)) continue;
  if(PlayerInfo[i][pLeader] == 1 && PlayerInfo[i][pRank] == 6)
  {
  if(IsPlayerInRangeOfPoint(i, 1.5, 222.5448, 69.8252, 1004.3806))estado_puerta=1;
  else estado_puerta=0;
  }
  if(estado_puerta == 1)
  {
  MoveDynamicObject(puertajefelspd, 222.2207, 66.8460, 1004.8606, 1.5);
  }
  else
  {
  MoveDynamicObject(puertajefelspd, 222.2207, 68.6660, 1004.8606, 1.5);  //cierra la puerta
  }
  }
  return 1;
}
Bien el codigo como pueden ver es de la oficina del jefe de la faccion LSPD el cual tiene acceso a esa zona, el resto que no tenga rango 6 no podra abrir dicha puerta ahora llega el problema si por ejemplo entro yo al server (digo yo por poner un ejemplo pero puede a ver alguien ya antes que yo dentro) y voy a la puerta se abre perfectamente, pero si despues conecta otro jugador que tiene el mismo rango y lider que yo de la misma faccion automaticamente a mi ya no me abre la puerta y a el si... ese es el problema no se a que es debido es como si al conectarse despues perdieras el acceso a esa funcion... si alguien puede iluminarme se lo agradeceria muchisimo.

saludos
Reply
#2

Estб mal porque la variable estado_puerta no es global. La forma correcta serнa esta:
pawn Код:
new
    bool:estado_puertaLSPD
;

//---OnGameModeInit
SetTimer("VerificarPuertas", 1500, true);

//---Nueva callback.
forward ActualizarPuertas();
public ActualizarPuertas() {
    for (new i; i < MAX_PLAYERS; i++) {
        if (!IsPlayerConnected(i)) continue;
        //---Puerta LSPD
        if (IsPlayerInRangeOfPoint(i, 1.5, 222.5448, 69.8252, 1004.3806)) {
            if (PlayerInfo[i][pLeader] != 1 && PlayerInfo[i][pRank] != 6) continue;
            switch(estado_puertaLSPD) {
                case false: {
                    //Abrimos
                    estado_puertaLSPD = true;
                    SetTimerEx("CerrarPuerta", 5000, false, "i", 1); //El 1 digamos que es el ID de la puerta.
                    /*
                    Y ahora deberнas poner un SetTimerEx para cerrarla
                    ya que si el jugador se queda cerca de la puerta,
                    entrarнa en un bucle infinito de abrirse/cerrarse.
                   
                    Y si usamos tu tйcnica solo funcionarнa UNA vez correctamente,
                    ya luego no se abrirб mбs.
                    */

                }
            }
        }
       
        //---Otra puerta (1)
        if (IsPlayerInRangeOfPoint(.........)) {
            /*
                Esto es un ejemplo para otra puerta de facciуn, y solo usamos un timer.
            */

        }
       
        //---Otra puerta (2)
        if (IsPlayerInRangeOfPoint(.........)) {
        }
    }
    return 1;
}

forward CerrarPuerta(id);
public CerrarPuerta(id) {
    switch(id) {
        case 1: {
            /*
            case 1, el 1 es la ID que mencionamos en SetTimerEx,
            cada puerta debe tener una ID diferente.
            */

            //Cerramos con MoveDynamicObject o la funcion que tu uses.
            //Y reseteamos variable:
            estado_puertaLSPD = false;
        }
    }
    return 1;
}
Reply
#3

ok es un poco mas confuso de entender pero aun asi voy a intentarlo, en cuanto lo pruebe te verifico como a ido.

saludos

PD: Lo he probado tio y funciona a las mil maravillas, te lo agradezco muchisimo tio me has librado de un buen dolor de cabeza. Un saludo y gracias nuevamente.
Reply


Forum Jump:


Users browsing this thread: