SA-MP Forums Archive
Keys aren't working... - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Keys aren't working... (/showthread.php?tid=311109)



Keys aren't working... - Scenario - 15.01.2012

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?


Re: Keys aren't working... - jamesbond007 - 15.01.2012

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


Re: Keys aren't working... - Scenario - 15.01.2012

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)))



Re: Keys aren't working... - jamesbond007 - 15.01.2012

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


Re: Keys aren't working... - Scenario - 15.01.2012

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.


Re: Keys aren't working... - wildcookie007 - 15.01.2012

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


Re: Keys aren't working... - Scenario - 15.01.2012

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;
}



AW: Keys aren't working... - BigETI - 15.01.2012

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))



Re: AW: Keys aren't working... - Scenario - 15.01.2012

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?


Re: Keys aren't working... - playbox12 - 15.01.2012

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.)