#1

Hola de nuevo.
Necesito ayuda con las Keys, lo que quiero es que los jugadores elijan sus vehнculos.
Ejemplo:

Cuando presione la tecla "hacia izquierda( < )" cambie a otro vehнculo, o cuando presione la tecla "hacia arriba( /\ )" o "hacia abajo( \/ )" o "hacia derecha( > )".ґ

Estuve viendo el Filterscript "fsdebug" porque en el se usan las Keys para cambiar de vehнculo, pero no le entendн. xd
Espero que me puedan ayudar. :]
Reply
#2

Ya sabes que no lo podes hacer en OnPlayerKeyStateChange porque no detecta el arriba-abajo ni el izquierda-derecha.

Tenes que hacer un timer que puede ser de medio segundo en el cual se encuentre la funcion GetPlayerKeys.

Aca tenes un pequeсo ejempo (no lo uses textual esta aca):

pawn Код:
new numero[MAX_PLAYERS];
forward Timer_Test();
public Timer_Test()
{
    new
        keys,
        arr_ab,
        izq_der;
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            GetPlayerKeys(i, keys, arr_ab, izq_der);
            if(arr_ab > 0) {numero[i] = numero[i] + 10;} // esta no es la forma mas simplificada de ponerlo, pero
                                                         // lo hago asi para que lo entiendas sin dificultad.
            else if(arr_ab < 0) {numero[i] = numero[i] - 10;}
            else if(izq_der > 0) {numero[i] = numero[i] + 1;} // (numero = numero + 1) es igual a (numero ++)
            else if(izq_der < 0) {numero[i] = numero[i] - 1;}
        }

    }

}
Aca tenes una funcion que si apretas arriba te suma 10, si apretas abajo te resta 10, si apretas para la derecha te suma 1, y si apretas para la izquierda te suma 1.


Para que funcione tenes que hacer que el temporizador corra:

pawn Код:
public OnGameModeInit()
{
    SetTimer("Timer_Test", 500, true);

    // resto del codigo
}
HASTA ACA LO IMPORTANTE, EL RESTO DEL MENSAJE ES POR LAS DUDAS

Y para ver el resultado:

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(!strcmp(cmdtext, "/resultado", true))
    {
        new s[70];
        format(s, sizeof(s), "Tu resultado es:{FFFF00} %d", numero[playerid]);
        SendClientMessage(playerid, 0xFFFFFFFF, s);
        printf("Id: %d -- Resultado: %d", playerid, numero[playerid]);
        numero[playerid] = 0; // reinicia el contador
        return 1;
    }
    // resto del codigo
}
Y por ultimo si queres que se reinicie cada vez que un jugador entra al juego solo agregas:

pawn Код:
public OnPlayerConnect(playerid)
{
    numero[playerid] = 0;
    // resto del codigo...
}
Aclaro que no esta probado...
Reply
#3

Eso ya mas o menos sabia, gracias, pero їen donde agrego para que se cree el vehнculo que esta viendo el jugador? їse podrнa usar CreateVehicle?
Reply
#4

Si, pero no te olvides de borrarlo cuando lo cambie...


_______________________
Aclaro por las dudas.

pawn Код:
new autoseleccionado[MAX_PLAYERS];

// bla, bla, bla ...
    autoseleccionado[playerid] = CreateVehicle(...);

// bla, bla, bla ...
    DestroyVehicle(autoseleccionado[playerid]);
Reply
#5

Mmm, creo que no funciona lo que me has dicho, esto es lo que agregue:

pawn Код:
new autoseleccionado[MAX_PLAYERS];
forward Timer_Test();
public Timer_Test()
{
    new
        keys,
        arr_ab,
        izq_der;
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            GetPlayerKeys(i, keys, arr_ab, izq_der);
            if(arr_ab > 0) {autoseleccionado[i] = CreateVehicle(401, -1950.3544,264.4378,35.0948,66.3593, 1 ,1, 100);}
            else if(arr_ab < 0) {autoseleccionado[i] = CreateVehicle(401, -1950.3544,264.4378,35.0948,66.3593, 1 ,1, 100);}
            else if(izq_der > 0) {autoseleccionado[i] = CreateVehicle(401, -1950.3544,264.4378,35.0948,66.3593, 1 ,1, 100);}
            else if(izq_der < 0) {autoseleccionado[i] = CreateVehicle(401, -1950.3544,264.4378,35.0948,66.3593, 1 ,1, 100);}
        }

    }

}
Reply
#6

pawn Код:
public OnPlayerUpdate(playerid)
{
    new Keys,ud,lr;
    GetPlayerKeys(playerid,Keys,ud,lr);
 
    if(ud > 0)
    {
       Lo que pasarнa con la tecla para abajo.
    }
    else if(ud < 0)
    {
       Lo que pasarнa con la tecla para arriba.
    }
 
    if(lr > 0)
    {
       Derecha.  
    }
    else if(lr < 0)
    {
        Izquierda.
    }
    return 1;
}
https://sampwiki.blast.hk/wiki/GetPlayerKeys
Reply
#7

Quote:
Originally Posted by arturo clark
Посмотреть сообщение
Mmm, creo que no funciona lo que me has dicho, esto es lo que agregue:

pawn Код:
new autoseleccionado[MAX_PLAYERS];
forward Timer_Test();
public Timer_Test()
{
    new
        keys,
        arr_ab,
        izq_der;
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            GetPlayerKeys(i, keys, arr_ab, izq_der);
            if(arr_ab > 0) {autoseleccionado[i] = CreateVehicle(401, -1950.3544,264.4378,35.0948,66.3593, 1 ,1, 100);}
            else if(arr_ab < 0) {autoseleccionado[i] = CreateVehicle(401, -1950.3544,264.4378,35.0948,66.3593, 1 ,1, 100);}
            else if(izq_der > 0) {autoseleccionado[i] = CreateVehicle(401, -1950.3544,264.4378,35.0948,66.3593, 1 ,1, 100);}
            else if(izq_der < 0) {autoseleccionado[i] = CreateVehicle(401, -1950.3544,264.4378,35.0948,66.3593, 1 ,1, 100);}
        }

    }

}
Comenzaste el timer en algun momento?...



te falta borrar el vehiculo.. ejem:

pawn Код:
if(arr_ab > 0)
{
    if(autoseleccionado[i] != 0)
    {
        DestroyVehicle(autoseleccionado[i]);
    }
    autoseleccionado[i] = CreateVehicle(401, -1950.3544,264.4378,35.0948,66.3593, 1 ,1, 100);
}
Asi en todas...


otra cosa...


Lo que tenes que hacer es definir cuando esta el jugador cambiando de vehiculo...
y asi te quedaria todo:

pawn Код:
new autoseleccionado[MAX_PLAYERS];
new cambiandoauto[MAX_PLAYERS];
forward Timer_Test();
public Timer_Test()
{
    new
        keys,
        arr_ab,
        izq_der;
    new
        Float:x,
        Float:y,
        Float:z;
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i) && cambiandoauto[i])
        {
            GetPlayerPos(playerid, x, y, z);
            GetPlayerKeys(i, keys, arr_ab, izq_der);
            if(arr_ab > 0)
            {
                if(autoseleccionado[i] != 0)
                {
                    DestroyVehicle(autoseleccionado[i]);
                }
                autoseleccionado[i] = CreateVehicle(463, x,y+2,z+1,0, random(126),1, 100);
            }
            else if(arr_ab < 0)
            {
                if(autoseleccionado[i] != 0)
                {
                    DestroyVehicle(autoseleccionado[i]);
                }
                autoseleccionado[i] = CreateVehicle(411, x,y+2,z+1,0, random(126),1, 100);
            }
            else if(izq_der > 0)
            {
                if(autoseleccionado[i] != 0)
                {
                    DestroyVehicle(autoseleccionado[i]);
                }
                autoseleccionado[i] = CreateVehicle(522, x,y+2,z+1,0, random(126),1, 100);
            }
            else if(izq_der < 0)
            {
                if(autoseleccionado[i] != 0)
                {
                    DestroyVehicle(autoseleccionado[i]);
                }
                autoseleccionado[i] = CreateVehicle(451, x,y+2,z+1,0, random(126),1, 100);
            }
        }

    }

}

public OnPlayerConnect(playerid)
{
    cambiandoauto[playerid] = 0;

    // resto del codigo
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    if(!strcmp(cmdtext, "/cambiarauto", true))
    {
        cambiandoauto[i] = 1;
    }
    else if(!strcmp(cmdtext, "/auto definido", true))
    {
        cambiandoauto[i] = 0;
    }
    //resto del codigo
}
Ahi tenes ... no te olvides de hacer correr el temporizador.
Reply
#8

Me sirviу tu cуdigo Julian, pero si quiero agregar mas de 4 vehнculos porque el el cуdigo que hiciste nomas se pueden agregar 4 vehнculos їo, si se puede?
Reply
#9

Quote:
Originally Posted by arturo clark
Посмотреть сообщение
Me sirviу tu cуdigo Julian, pero si quiero agregar mas de 4 vehнculos porque el el cуdigo que hiciste nomas se pueden agregar 4 vehнculos їo, si se puede?
Si, se puede. Sуlo tenes que destruir uno y luego crear otro.
Reply
#10

їComo se hace?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)