Definiзгo por keys
#1

Bem, й o seguinte, estou a fazer um FS de AirBrk para o 0.3b, nгo eh anti-... eh um AirBrk, entгo fiz os seguintes codes abaixo:

pawn Код:
new Float:X, Float:Y, Float:Z;

new AirBrk[MAX_PLAYERS];

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    // PRESSED(keys)
    #define PRESSED(%0) \
    (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
    //-=-=-=-=-=-=-
    GetPlayerPos(playerid, X, Y, Z);
    if ((newkeys & KEY_SUBMISSION))
    {
        if(AirBrk[playerid] == 0)
        {
            if(!IsPlayerInAnyVehicle(playerid))
            {
                GameTextForPlayer(playerid, "] ~b~~>~AirBrk ~g~Ligado ]", 2000, 1);
                AirBrk[playerid] = 1;
                TogglePlayerControllable(playerid, false);
            }
            else
            {
                GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~Saia do veнculo para ligar o AirBrk", 2000, 5);
            }
        }
        else
        {
            GameTextForPlayer(playerid, "] ~b~~>~AirBrk ~r~Desligado ]", 2000, 1);
            AirBrk[playerid] = 0;
            TogglePlayerControllable(playerid, true);
        }
    }
    //-=-=-=-=-=-=-
   
    if ((newkeys & KEY_UP) || (PRESSED(KEY_UP)))
    {
        if((AirBrk[playerid] = 1))//-=---------------- Subir
        {
            if(!IsPlayerInAnyVehicle(playerid))
            {
            SetPlayerPos(playerid, X, Y, Z+2);
            }
        }
    }
   
    //-=-=-=-=-=-=-
   
    if ((newkeys & KEY_DOWN) || (PRESSED(KEY_DOWN)))
    {
        if((AirBrk[playerid] = 1))//-=---------------- Descer
        {
            if(!IsPlayerInAnyVehicle(playerid))
            {
            SetPlayerPos(playerid, X, Y, Z-2);
            }
        }
    }
   
    //-=-=-=-=-=-=-
   
    if ((newkeys & KEY_WALK) || (PRESSED(KEY_WALK)))//-=--------------- Ir para frente
    {
        if((AirBrk[playerid] = 1))
        {
            if(!IsPlayerInAnyVehicle(playerid))
            {
            SetPlayerPos(playerid, X+5, Y, Z);
            }
        }
    }
   
    //-=-=-=-=-=-=-
   
    return 1;
}
Mas nada funfa, apenas quando eu aperto o botгo SUBMISSION (bolinha do mouse), q ele seta a
pawn Код:
Z+2
somente isso que funciona e quando aperto botгo direito do mouse ele seta a
pawn Код:
Z-2
nгo to entendendo pq ta acontecendo issso, alguem pode me explicar o que aconteces de errado

nгo estou pedindo pra me passarem o code pronto, apenas quero saber o que hб de errado !!!

EDIT:
enquanto estava jogando percebi, q ao apertar alt, eh como se eu tivesse apertado KEY_WALK
Reply
#2

Whats that 2 dias e ninguem respondeu .... Tуpico ressucitado, UP UP UP
Reply
#3

PQP,
Como vocк vai definir uma coisa dentro de uma public ?~
pawn Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
 new Flat:X,Flat:Y,Float:Z;
 if(newkeys & KEY_SUBMISSION )
   {
        if(!IsPlayerAnyInVehicle(GetVehicleID(playerid))
                  {
                          GetPlayerPos(playerid, X,Y,Z);
                          SetPlayerPos(playerid, X,Y,Z+10);
                   }
         else
                   {
                          SendClientMessage(playerid,COR,"Vocк estб em um veiculo, saia que podera usar o Air");
                   }
        }
return 1;
}

Fiz isto agora, nem copilei, mais deve funcionar.
Pensei que sabia esta.
Reply
#4

ja havia feito isso garfield, e eu sei disso sim e acho q nao tem diferenзa nenhuma ...

Flat = Fail
Reply
#5

alguem ja faz 3 dias e ninguem deu uma resposta que sirva, alguem
Reply
#6

Quote:
Originally Posted by [Full]Garfield[XDB]
Посмотреть сообщение
Pensei que sabia esta.
Nem vocк sabe...
Ele nгo definiu nada dentro da Public ao nгo ser a PRESSED,que nгo tem nada haver pois ela й definida quando compila o cуdigo,FAIL para vocк..

Dentro da Public logo Encima:

pawn Код:
new AirBrk[MAX_PLAYERS];new Float:x,Float:y,Float:z;
#define PRESSED(%0)  (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0))) GetPlayerPos(playerid, X, Y, Z);
Agora tente Algo do Tipo logo Abaixo:

pawn Код:
if(PRESSED(KEY_SUBMISSION))
{
    TogglePlayerControllable(playerid, false);
}
if(PRESSED(KEY_UP) && AirBrk[playerid] = 1 && !IsPlayerInAnyVehicle(playerid)
{
     SetPlayerPos(playerid, X, Y, Z+2);  
}
Reply
#7

ok, mas nao precisa mais do GetPlayerPos

Explicando mais:

Key_SUBMISSION liga ou desliga AirBrk

KEY_UP seta altura + 2, se tiver ligado

e assim por diante com RIGHT LEFT DOWN WALK


KEY_WALK eh o "w" se nao for, qual eh o w ?
Reply
#8

KEY_WALK = alt esquerdo ou seja la qual for sua tecla de anda devagar
KEY_UP = W
KEY_DOWN = S
KEY_LEFT = A
KEY_RIGHT = D
KEY_SPRINT = tecla de correr
Reply
#9

e as setas ? nao seriam RIGHT LEFT UP DOWN
Reply
#10

Й impossivel detectar setas no OnPlayerKeyStateChange usando cуdigo como esse, essas teclas sгo separadas.
O que se tem que fazer й usar o OnPlayerUpdate, timer, ou GetPlayerKeys(nгo consegui usar essa funзгo pra detectar essas teclas no OnPlayerKeyStateChange mas posso ter feito algo errado).
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)