Keys aren't working...
#1

Okay, so I have this code:

pawn Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if(vehDashboardToggled[playerid] == true)
    {
        if(IsPlayerInAnyVehicle(playerid))
        {
            new iVehicleID = GetPlayerVehicleID(playerid);
            if(RELEASED(KEY_DOWN))
            {
                if(vehDashboardArrow[playerid] == 1)
                {
                    TextDrawHideForPlayer(playerid, vehMenuArrow1TD[playerid]);
                    TextDrawShowForPlayer(playerid, vehMenuArrow2TD[playerid]);
                    PlayerPlaySound(playerid, 1083, -1, -1, -1);
                    vehDashboardArrow[playerid] = 2;
                }
                else if(vehDashboardArrow[playerid] == 2)
                {
                    TextDrawHideForPlayer(playerid, vehMenuArrow2TD[playerid]);
                    TextDrawShowForPlayer(playerid, vehMenuArrow3TD[playerid]);
                    PlayerPlaySound(playerid, 1083, -1, -1, -1);
                    vehDashboardArrow[playerid] = 3;
                }
            }
            else if(RELEASED(KEY_UP))
            {
                if(vehDashboardArrow[playerid] == 3)
                {
                    TextDrawHideForPlayer(playerid, vehMenuArrow3TD[playerid]);
                    TextDrawShowForPlayer(playerid, vehMenuArrow2TD[playerid]);
                    PlayerPlaySound(playerid, 1083, -1, -1, -1);
                    vehDashboardArrow[playerid] = 2;
                }
                else if(vehDashboardArrow[playerid] == 2)
                {
                    TextDrawHideForPlayer(playerid, vehMenuArrow2TD[playerid]);
                    TextDrawShowForPlayer(playerid, vehMenuArrow1TD[playerid]);
                    PlayerPlaySound(playerid, 1083, -1, -1, -1);
                    vehDashboardArrow[playerid] = 1;
                }
            }
            else if(RELEASED(KEY_LEFT))
            {
                if(vehDashboardArrow[playerid] == 1)
                {
                    PlayerPlaySound(playerid, 1083, -1, -1, -1);
                    if(engine != 1)
                    {
                        TextDrawSetString(vehicleEngineTD[playerid], "~g~ENGINE");
                        GetVehicleParamsEx(iVehicleID, engine, lights, alarm, doors, bonnet, boot, objective);
                        SetVehicleParamsEx(iVehicleID, 1, lights, alarm, doors, bonnet, boot, objective);
                    }
                    else
                    {
                        TextDrawSetString(vehicleEngineTD[playerid], "~r~ENGINE");
                        GetVehicleParamsEx(iVehicleID, engine, lights, alarm, doors, bonnet, boot, objective);
                        SetVehicleParamsEx(iVehicleID, 0, lights, alarm, doors, bonnet, boot, objective);
                    }
                }
                if(vehDashboardArrow[playerid] == 2)
                {
                    PlayerPlaySound(playerid, 1083, -1, -1, -1);
                    if(engine != 1)
                    {
                        TextDrawSetString(vehicleEngineTD[playerid], "~g~LIGHTS");
                        GetVehicleParamsEx(iVehicleID, engine, lights, alarm, doors, bonnet, boot, objective);
                        SetVehicleParamsEx(iVehicleID, engine, 1, alarm, doors, bonnet, boot, objective);
                    }
                    else
                    {
                        TextDrawSetString(vehicleEngineTD[playerid], "~r~LIGHTS");
                        GetVehicleParamsEx(iVehicleID, engine, lights, alarm, doors, bonnet, boot, objective);
                        SetVehicleParamsEx(iVehicleID, engine, 0, alarm, doors, bonnet, boot, objective);
                    }
                }
                if(vehDashboardArrow[playerid] == 3)
                {
                    PlayerPlaySound(playerid, 1083, -1, -1, -1);
                    if(doors != 1)
                    {
                        TextDrawSetString(vehicleDoorsTD[playerid], "~g~DOORS");
                        GetVehicleParamsEx(iVehicleID, engine, lights, alarm, doors, bonnet, boot, objective);
                        SetVehicleParamsEx(iVehicleID, engine, lights, alarm, 1, bonnet, boot, objective);
                    }
                    else
                    {
                        TextDrawSetString(vehicleEngineTD[playerid], "~r~DOORS");
                        GetVehicleParamsEx(iVehicleID, engine, lights, alarm, doors, bonnet, boot, objective);
                        SetVehicleParamsEx(iVehicleID, engine, lights, alarm, 0, bonnet, boot, objective);
                    }
                }
            }
            else if(RELEASED(KEY_SECONDARY_ATTACK))
            {
                vehDashboardToggled[playerid] = false;
                PlayerPlaySound(playerid, 1084, -1, -1, -1);
                TogglePlayerControllable(playerid, true);
            }
        }
    }
    return 1;
}
I went in-game and tried using these keys, but for some reason, they just don't seem to do anything. This is the command that goes with this whole setup.

pawn Код:
CMD:dashboard(playerid, params[])
{
    if(!IsPlayerInAnyVehicle(playerid))
        return false;
    if(vehDashboardToggled[playerid] == true)
        return false;

    vehDashboardArrow[playerid] = 1;
    vehDashboardToggled[playerid] = true;
    TogglePlayerControllable(playerid, false);
    PlayerPlaySound(playerid, 1083, -1, -1, -1);
    TextDrawShowForPlayer(playerid, vehMenuArrow1TD[playerid]);
    return 1;
}
I don't think I'm checking the keys incorrectly, according to the SA-MP Wiki. Does anyone have some insight?
Reply
#2

why are you using released and not pressed? also show us the micro released?
Reply
#3

I tried pressed and it didn't work so I tried released, but it's the same thing.

pawn Код:
#define RELEASED(%0) \
    (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))

#define PRESSED(%0) \
    (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
Reply
#4

meh idk about secondary_attack but for keys up,down,left,right u can try using GetPlayerKeys...

can u help me with mine?

https://sampforum.blast.hk/showthread.php?tid=311112
Reply
#5

Quote:
Originally Posted by jamesbond007
Посмотреть сообщение
meh idk about secondary_attack but for keys up,down,left,right u can try using GetPlayerKeys...

can u help me with mine?

https://sampforum.blast.hk/showthread.php?tid=311112
Doesn't seem to be working. And as for your problem, I'm not really familiar with that either, sorry.
Reply
#6

Try debugging your code, see where the print stops and post back here.
Reply
#7

Okay, this is some debug info:

Код:
[08:32:44] OnPlayerKeyStateChange called.
[08:32:44] OnPlayerKeyStateChange called.
[08:32:47] OnPlayerKeyStateChange called.
[08:32:47] OnPlayerKeyStateChange called.
[08:32:55] OnPlayerKeyStateChange called.
[08:32:55] OnPlayerKeyStateChange called.
[08:33:10] OnPlayerKeyStateChange called.
[08:33:10] After if:Bool
[08:33:10] After IsPlayerInAnyVehicle
[08:33:10] OnPlayerKeyStateChange called.
[08:33:10] After if:Bool
[08:33:10] After IsPlayerInAnyVehicle
[08:33:12] OnPlayerKeyStateChange called.
[08:33:12] After if:Bool
[08:33:12] After IsPlayerInAnyVehicle
[08:33:12] OnPlayerKeyStateChange called.
[08:33:12] After if:Bool
[08:33:12] After IsPlayerInAnyVehicle
[08:33:12] RELEASED(KEY_SECONDARY_ATTACK))
[08:33:13] OnPlayerKeyStateChange called.
[08:34:43] OnPlayerKeyStateChange called.
[08:34:47] OnPlayerKeyStateChange called.
[08:34:47] After if:Bool
[08:34:47] After IsPlayerInAnyVehicle
[08:34:48] OnPlayerKeyStateChange called.
[08:34:48] After if:Bool
[08:34:48] After IsPlayerInAnyVehicle
[08:34:48] RELEASED(KEY_SECONDARY_ATTACK))
[08:34:51] OnPlayerKeyStateChange called.
[08:34:51] OnPlayerKeyStateChange called.
[08:34:53] OnPlayerKeyStateChange called.
[08:35:03] OnPlayerKeyStateChange called.
Notice that I am actually pressing the up, down, left, right keys, but they aren't proceeding through the code. Here's the new code:

pawn Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    print("OnPlayerKeyStateChange called.");

    new keys, ud, lr;
    GetPlayerKeys(playerid, keys, ud, lr);
    if(vehDashboardToggled[playerid] == true)
    {
        print("After if:Bool");
        if(IsPlayerInAnyVehicle(playerid))
        {
            print("After IsPlayerInAnyVehicle");
            new iVehicleID = GetPlayerVehicleID(playerid);
            if(ud > 0)
            {
                print("After ud > 0");
                if(vehDashboardArrow[playerid] == 1)
                {
                    print("ud > 0 -- vehDashArrow[playerid] == 1");
                    TextDrawHideForPlayer(playerid, vehMenuArrow1TD[playerid]);
                    TextDrawShowForPlayer(playerid, vehMenuArrow2TD[playerid]);
                    PlayerPlaySound(playerid, 1083, -1, -1, -1);
                    vehDashboardArrow[playerid] = 2;
                }
                else if(vehDashboardArrow[playerid] == 2)
                {
                    print("ud > 0 -- vehDashArrow[playerid] == 2");
                    TextDrawHideForPlayer(playerid, vehMenuArrow2TD[playerid]);
                    TextDrawShowForPlayer(playerid, vehMenuArrow3TD[playerid]);
                    PlayerPlaySound(playerid, 1083, -1, -1, -1);
                    vehDashboardArrow[playerid] = 3;
                }
            }
            else if(ud < 0)
            {
                print("After ud < 0");
                if(vehDashboardArrow[playerid] == 3)
                {
                    print("ud < 0 -- vehDashArrow[playerid] == 3");
                    TextDrawHideForPlayer(playerid, vehMenuArrow3TD[playerid]);
                    TextDrawShowForPlayer(playerid, vehMenuArrow2TD[playerid]);
                    PlayerPlaySound(playerid, 1083, -1, -1, -1);
                    vehDashboardArrow[playerid] = 2;
                }
                else if(vehDashboardArrow[playerid] == 2)
                {
                    print("ud < 0 -- vehDashArrow[playerid] == 2");
                    TextDrawHideForPlayer(playerid, vehMenuArrow2TD[playerid]);
                    TextDrawShowForPlayer(playerid, vehMenuArrow1TD[playerid]);
                    PlayerPlaySound(playerid, 1083, -1, -1, -1);
                    vehDashboardArrow[playerid] = 1;
                }
            }
            else if(lr > 0 || lr < 0)
            {
                print("lr > 0 || lr < 0");
                if(vehDashboardArrow[playerid] == 1)
                {
                    print("lr > 0 || lr < 0 -- vehDashArrow[playerid] == 1");
                    PlayerPlaySound(playerid, 1083, -1, -1, -1);
                    if(engine != 1)
                    {
                        print("engine != 1");
                        TextDrawSetString(vehicleEngineTD[playerid], "~g~ENGINE");
                        GetVehicleParamsEx(iVehicleID, engine, lights, alarm, doors, bonnet, boot, objective);
                        SetVehicleParamsEx(iVehicleID, 1, lights, alarm, doors, bonnet, boot, objective);
                    }
                    else
                    {
                        print("else ENGINE");
                        TextDrawSetString(vehicleEngineTD[playerid], "~r~ENGINE");
                        GetVehicleParamsEx(iVehicleID, engine, lights, alarm, doors, bonnet, boot, objective);
                        SetVehicleParamsEx(iVehicleID, 0, lights, alarm, doors, bonnet, boot, objective);
                    }
                }
                if(vehDashboardArrow[playerid] == 2)
                {
                    print("lr > 0 || lr < 0 -- vehDashArrow[playerid] == 2");
                    PlayerPlaySound(playerid, 1083, -1, -1, -1);
                    if(lights != 1)
                    {
                        print("lights != 1");
                        TextDrawSetString(vehicleEngineTD[playerid], "~g~LIGHTS");
                        GetVehicleParamsEx(iVehicleID, engine, lights, alarm, doors, bonnet, boot, objective);
                        SetVehicleParamsEx(iVehicleID, engine, 1, alarm, doors, bonnet, boot, objective);
                    }
                    else
                    {
                        print("else LIGHTS");
                        TextDrawSetString(vehicleEngineTD[playerid], "~r~LIGHTS");
                        GetVehicleParamsEx(iVehicleID, engine, lights, alarm, doors, bonnet, boot, objective);
                        SetVehicleParamsEx(iVehicleID, engine, 0, alarm, doors, bonnet, boot, objective);
                    }
                }
                if(vehDashboardArrow[playerid] == 3)
                {
                    print("lr > 0 || lr < 0 -- vehDashArrow[playerid] == 3");
                    PlayerPlaySound(playerid, 1083, -1, -1, -1);
                    if(doors != 1)
                    {
                        print("doors != 1");
                        TextDrawSetString(vehicleDoorsTD[playerid], "~g~DOORS");
                        GetVehicleParamsEx(iVehicleID, engine, lights, alarm, doors, bonnet, boot, objective);
                        SetVehicleParamsEx(iVehicleID, engine, lights, alarm, 1, bonnet, boot, objective);
                    }
                    else
                    {
                        print("else DOORS");
                        TextDrawSetString(vehicleEngineTD[playerid], "~r~DOORS");
                        GetVehicleParamsEx(iVehicleID, engine, lights, alarm, doors, bonnet, boot, objective);
                        SetVehicleParamsEx(iVehicleID, engine, lights, alarm, 0, bonnet, boot, objective);
                    }
                }
            }
            else if(RELEASED(KEY_SECONDARY_ATTACK))
            {
                print("RELEASED(KEY_SECONDARY_ATTACK))");

                TextDrawHideForPlayer(playerid, vehMenuArrow1TD[playerid]);
                TextDrawHideForPlayer(playerid, vehMenuArrow2TD[playerid]);
                TextDrawHideForPlayer(playerid, vehMenuArrow3TD[playerid]);

                vehDashboardToggled[playerid] = false;
                PlayerPlaySound(playerid, 1084, -1, -1, -1);
                TogglePlayerControllable(playerid, true);
            }
        }
    }
    return 1;
}
Reply
#8

Up down left right buttons doesn't actually call OnPlayerKeyStateChange.
You have to check it with GetPlayerKeys in OnPlayerUpdate.
(ncbs.inc supports OnPlayerAnalogKeysChange callback)

Btw your PRESSED and RELEASED makros does check it bitwise and recheck if it is really this key.
Mine does only check it faster anyhow..

pawn Код:
#define PRESSED(%0)     (newkeys&(%0))&&!(oldkeys&(%0))
#define RELEASED(%0)    (oldkeys&(%0))&&!(newkeys&(%0))
Reply
#9

Quote:
Originally Posted by BigETI
Посмотреть сообщение
Up down left right buttons doesn't actually call OnPlayerKeyStateChange.
You have to check it with GetPlayerKeys in OnPlayerUpdate.

Btw your PRESSED and RELEASED makros does check it bitwise and recheck if it is really this key.
Mine does only check it faster anyhow..

pawn Код:
#define PRESSED(%0)     (newkeys&(%0))&&!(oldkeys&(%0))
#define RELEASED(%0)    (oldkeys&(%0))&&!(newkeys&(%0))
So are you saying I need to check the UD and LR keys under OnPlayerUpdate?
Reply
#10

GetPlayerKeys indeed is not called with OnPlayerKeyStateChange. I suggest using a timer, as OPU is usally called to fast, making it very hard to use the keys ingame. (for example I had a skin selection, with OPU I skipped a few skins every time I just touched the key for a copple miliseconds.)
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)