PRESSED and HOLDING the same key?
#1

Hi, I have being trying to get round his for sometime now, if anyone can help me it will be appreciated.

pawn Код:
#define PRESSED(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
#define HOLDING(%0) ((newkeys & (%0)) == (%0))
pawn Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if(HOLDING(KEY_FIRE))
    {
        SendClientMessage(playerid, COLOR_WHITE, "Holding...");
    }
    else if(PRESSED(KEY_FIRE))
    {
        SendClientMessage(playerid, COLOR_WHITE, "Pressed...");
    }
}
When I press LMB, I always get "Holding..." no matter what I do. Anyone know how to make it so if I just tap LMB, it acts as PRESSED, and holding it down acts as HOLDING?
Reply
#2

pawn Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
     if(HOLDING(KEY_FIRE))
    {
        SendClientMessage(playerid, COLOR_WHITE, "Holding...");
    }
   else if (HOLDING(KEY_FIRE))
    {
        SendClientMessage(playerid, COLOR_WHITE, "Pressed...");
    }
}
try this
Reply
#3

Same result, it only responds to the first if statement.
Reply
#4

https://sampwiki.blast.hk/wiki/OnPlayerKeyStateChange
Reply
#5

Already checked the wiki, it doesn't help me for this situation...

pawn Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if(HOLDING(KEY_FIRE))
    {
         SendClientMessage(playerid, COLOR_WHITE, "Holding...");
    }
}
Even HOLDING on its own doesn't work. Even if I tap LMB it says I'm holding.
Reply
#6

then
pawn Код:
if (HOLDING(KEY_FIRE))
isn't
pawn Код:
if(HOLDING(KEY_FIRE))
all
pawn Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if (HOLDING(KEY_FIRE))
    {
        SendClientMessage(playerid, COLOR_WHITE, "Holding...");
    }
    else if (PRESSED(KEY_FIRE))
    {
        SendClientMessage(playerid, COLOR_WHITE, "Pressed...");
    }
}
Reply
#7

*sigh*

Could I get a reply from someone who knows what they're talking about? Thanks
Reply
#8

What about:

pawn Код:
#define RELEASED(%0) \
    (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
pawn Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if(PRESSED(KEY_FIRE))
    {
        SendClientMessage(playerid, COLOR_WHITE, "You pressed it, hold it.");
    }
    else if(RELEASED(KEY_FIRE))
    {
        SendClientMessage(playerid, COLOR_WHITE, "Hey, you released it!");
    }
    return 1;
}
Reply
#9

That works. I guess I'll have use the interval between pressing and releasing to know if the player was holding or not. Thanks.
Reply
#10

Exactly. That's the same way how I did it for my script.
Reply


Forum Jump:


Users browsing this thread: