public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys & KEY_SECONDARY_FIRE)
{
// Do something here...
}
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys); { if((newkeys == KEY_SECONDARY_ATTACK)) { your code from /enter /exit command } return 1; }
Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys); { if((newkeys == KEY_SECONDARY_ATTACK)) { your code from /enter /exit command } return 1; } |
How NOT to check for a key Let's presume that you want to detect when a player presses their FIRE button, the obvious code would be: pawn Код:
How to check for a key So, if the variable can contain multiple keys at once, how do you check for just a single one? The answer is bit masking. Each key has its own bit in the variable (some keys have the same bit, but they are onfoot/incar keys, so can never be pressed at the same time anyway) and you need to check for just that single bit: pawn Код:
Now if you test this code it will work whether you are crouching or standing when you press the fire key. However there is still one slight problem - it will fire as long as you are holding the key. OnPlayerKeyStateChange is called every time a key changes and that code is true whenever the the fire key is held down. If you press fire the code will fire, if that key is held and you press crouch - that code will fire again because a key (crouch) has changed and fire is still held down How do you detect when a key is first pressed, but not trigger again when it's still held and another key changes? |
Use OnPlayerKeyStateChange.
EG: pawn Код:
|
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { new string[128]; new sendername[MAX_PLAYER_NAME]; new pveh = GetVehicleModel(GetPlayerVehicleID(playerid)); new newcar = GetPlayerVehicleID(playerid); new gun1 = GetPlayerWeapon(playerid); new gunname1[24]; GetWeaponName(gun1,gunname1,sizeof(gunname1)); if(IsKeyJustDown(KEY_HANDBRAKE,newkeys,oldkeys)) { StopLoopingAnim(playerid); TextDrawHideForPlayer(playerid,txtAnimHelper); animation[playerid] = 0; }
else if(newkeys & KEY_SECONDARY_FIRE) { for(new i = 0; i < sizeof(HouseInfo); i++) { if (IsPlayerInRangeOfPoint(playerid, 10,HouseInfo[i][hEntrancex], HouseInfo[i][hEntrancey], HouseInfo[i][hEntrancez])) { //printf("Found House :%d",i); if(PlayerInfo[playerid][pPhousekey] == i || HouseInfo[i][hLock] == 0) { if(PlayerInfo[playerid][pWanted] == 0) { SafeSetPlayerInterior(playerid,HouseInfo[i][hInt]); SetPlayerVirtualWorld(playerid,HouseInfo[i][hWorld]); SafeSetPlayerPos(playerid,HouseInfo[i][hExitx],HouseInfo[i][hExity],HouseInfo[i][hExitz]); GameTextForPlayer(playerid, "~w~Welcome Home", 5000, 1); PlayerInfo[playerid][pLocal] = i; PlayerInfo[playerid][pVirWorld] = HouseInfo[i][hWorld]; HouseEntered[playerid] = i; PlayerInfo[playerid][pInteriorNr] = 39; } else { GameTextForPlayer(playerid, "~r~Criminals can't hide in houses!", 5000, 1); return 1; } } else { GameTextForPlayer(playerid, "~r~Locked", 5000, 1); return 1; } } }
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { new string[128]; new sendername[MAX_PLAYER_NAME]; new pveh = GetVehicleModel(GetPlayerVehicleID(playerid)); new newcar = GetPlayerVehicleID(playerid); new gun1 = GetPlayerWeapon(playerid); new gunname1[24]; GetWeaponName(gun1,gunname1,sizeof(gunname1)); if(IsKeyJustDown(KEY_HANDBRAKE,newkeys,oldkeys)) { StopLoopingAnim(playerid); TextDrawHideForPlayer(playerid,txtAnimHelper); animation[playerid] = 0; } else if(newkeys & KEY_SECONDARY_FIRE) { for(new i = 0; i < sizeof(HouseInfo); i++) { if (IsPlayerInRangeOfPoint(playerid, 10,HouseInfo[i][hEntrancex], HouseInfo[i][hEntrancey], HouseInfo[i][hEntrancez])) { //printf("Found House :%d",i); if(PlayerInfo[playerid][pPhousekey] == i || HouseInfo[i][hLock] == 0) { if(PlayerInfo[playerid][pWanted] == 0) { SafeSetPlayerInterior(playerid,HouseInfo[i][hInt]); SetPlayerVirtualWorld(playerid,HouseInfo[i][hWorld]); SafeSetPlayerPos(playerid,HouseInfo[i][hExitx],HouseInfo[i][hExity],HouseInfo[i][hExitz]); GameTextForPlayer(playerid, "~w~Welcome Home", 5000, 1); PlayerInfo[playerid][pLocal] = i; PlayerInfo[playerid][pVirWorld] = HouseInfo[i][hWorld]; HouseEntered[playerid] = i; PlayerInfo[playerid][pInteriorNr] = 39; } else { GameTextForPlayer(playerid, "~r~Criminals can't hide in houses!", 5000, 1); return 1; } } else { GameTextForPlayer(playerid, "~r~Locked", 5000, 1); return 1; } } }
find this in your gamemode
Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { new string[128]; new sendername[MAX_PLAYER_NAME]; new pveh = GetVehicleModel(GetPlayerVehicleID(playerid)); new newcar = GetPlayerVehicleID(playerid); new gun1 = GetPlayerWeapon(playerid); new gunname1[24]; GetWeaponName(gun1,gunname1,sizeof(gunname1)); if(IsKeyJustDown(KEY_HANDBRAKE,newkeys,oldkeys)) { StopLoopingAnim(playerid); TextDrawHideForPlayer(playerid,txtAnimHelper); animation[playerid] = 0; } Код:
else if(newkeys & KEY_SECONDARY_FIRE) { for(new i = 0; i < sizeof(HouseInfo); i++) { if (IsPlayerInRangeOfPoint(playerid, 10,HouseInfo[i][hEntrancex], HouseInfo[i][hEntrancey], HouseInfo[i][hEntrancez])) { //printf("Found House :%d",i); if(PlayerInfo[playerid][pPhousekey] == i || HouseInfo[i][hLock] == 0) { if(PlayerInfo[playerid][pWanted] == 0) { SafeSetPlayerInterior(playerid,HouseInfo[i][hInt]); SetPlayerVirtualWorld(playerid,HouseInfo[i][hWorld]); SafeSetPlayerPos(playerid,HouseInfo[i][hExitx],HouseInfo[i][hExity],HouseInfo[i][hExitz]); GameTextForPlayer(playerid, "~w~Welcome Home", 5000, 1); PlayerInfo[playerid][pLocal] = i; PlayerInfo[playerid][pVirWorld] = HouseInfo[i][hWorld]; HouseEntered[playerid] = i; PlayerInfo[playerid][pInteriorNr] = 39; } else { GameTextForPlayer(playerid, "~r~Criminals can't hide in houses!", 5000, 1); return 1; } } else { GameTextForPlayer(playerid, "~r~Locked", 5000, 1); return 1; } } } Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { new string[128]; new sendername[MAX_PLAYER_NAME]; new pveh = GetVehicleModel(GetPlayerVehicleID(playerid)); new newcar = GetPlayerVehicleID(playerid); new gun1 = GetPlayerWeapon(playerid); new gunname1[24]; GetWeaponName(gun1,gunname1,sizeof(gunname1)); if(IsKeyJustDown(KEY_HANDBRAKE,newkeys,oldkeys)) { StopLoopingAnim(playerid); TextDrawHideForPlayer(playerid,txtAnimHelper); animation[playerid] = 0; } else if(newkeys & KEY_SECONDARY_FIRE) { for(new i = 0; i < sizeof(HouseInfo); i++) { if (IsPlayerInRangeOfPoint(playerid, 10,HouseInfo[i][hEntrancex], HouseInfo[i][hEntrancey], HouseInfo[i][hEntrancez])) { //printf("Found House :%d",i); if(PlayerInfo[playerid][pPhousekey] == i || HouseInfo[i][hLock] == 0) { if(PlayerInfo[playerid][pWanted] == 0) { SafeSetPlayerInterior(playerid,HouseInfo[i][hInt]); SetPlayerVirtualWorld(playerid,HouseInfo[i][hWorld]); SafeSetPlayerPos(playerid,HouseInfo[i][hExitx],HouseInfo[i][hExity],HouseInfo[i][hExitz]); GameTextForPlayer(playerid, "~w~Welcome Home", 5000, 1); PlayerInfo[playerid][pLocal] = i; PlayerInfo[playerid][pVirWorld] = HouseInfo[i][hWorld]; HouseEntered[playerid] = i; PlayerInfo[playerid][pInteriorNr] = 39; } else { GameTextForPlayer(playerid, "~r~Criminals can't hide in houses!", 5000, 1); return 1; } } else { GameTextForPlayer(playerid, "~r~Locked", 5000, 1); return 1; } } } |
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { new string[256]; new sendername[MAX_PLAYER_NAME]; new pveh = GetVehicleModel(GetPlayerVehicleID(playerid)); new newcar = GetPlayerVehicleID(playerid); if(newkeys == KEY_JUMP) { if(IsPlayerInAnyVehicle(playerid)) { if(IsPlayerConnected(playerid)) { if(!engineOn[GetPlayerVehicleID(playerid)]) { if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER) { return 1; } if(IsAnOwnableCar(newcar)) { if(PlayerInfo[playerid][pPcarkey] == newcar) { } else if(PlayerInfo[playerid][pPcarkey2] == newcar) { } else if(PlayerInfo[playerid][pPcarkey3] == newcar) { } else { return 1; } } if(pveh == 510 || pveh == 462 || pveh == 481 || pveh == 509) { return 1; } if(newcar == 59 || newcar == 60) { return 1; } if(newcar >= 135 && newcar <= 154) { if(HireCar[playerid] != newcar) { return 1; } } if(IsAHarvest(newcar)) { return 1; } if(IsADrugHarvest(newcar)) { return 1; } if(IsAPlane(newcar)) { return 1; } if(IsASweeper(newcar)) { return 1; } if(gEngine[playerid] == 1) { return 1; } PutPlayerInVehicle(playerid, newcar, 0); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "* %s spins a key and tries to start vehicle engine.", sendername); ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); SetTimerEx("StartingTheVehicle",3500,0,"i",playerid); GameTextForPlayer(playerid, "~w~Starting vehicle engine...",3500,3); gEngine[playerid] = 1; return 1; } } } } else if(newkeys == KEY_SECONDARY_ATTACK) { if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { if(gEngine[playerid] == 0 && engineOn[newcar] == 0) { RemovePlayerFromVehicle(playerid); TogglePlayerControllable(playerid, 1); return 1; } else if(NoFuel[playerid] == 1) { TogglePlayerControllable(playerid, 1); RemovePlayerFromVehicle(playerid); NoFuel[playerid] = 0; return 1; } } } return 1; }
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { new string[256]; new sendername[MAX_PLAYER_NAME]; new pveh = GetVehicleModel(GetPlayerVehicleID(playerid)); new newcar = GetPlayerVehicleID(playerid); if(newkeys == KEY_JUMP) { if(IsPlayerInAnyVehicle(playerid)) { if(IsPlayerConnected(playerid)) { if(!engineOn[GetPlayerVehicleID(playerid)]) { if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER) { return 1; } if(IsAnOwnableCar(newcar)) { if(PlayerInfo[playerid][pPcarkey] == newcar) { } else if(PlayerInfo[playerid][pPcarkey2] == newcar) { } else if(PlayerInfo[playerid][pPcarkey3] == newcar) { } else { return 1; } } if(pveh == 510 || pveh == 462 || pveh == 481 || pveh == 509) { return 1; } if(newcar == 59 || newcar == 60) { return 1; } if(newcar >= 135 && newcar <= 154) { if(HireCar[playerid] != newcar) { return 1; } } if(IsAHarvest(newcar)) { return 1; } if(IsADrugHarvest(newcar)) { return 1; } if(IsAPlane(newcar)) { return 1; } if(IsASweeper(newcar)) { return 1; } if(gEngine[playerid] == 1) { return 1; } PutPlayerInVehicle(playerid, newcar, 0); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "* %s spins a key and tries to start vehicle engine.", sendername); ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); SetTimerEx("StartingTheVehicle",3500,0,"i",playerid); GameTextForPlayer(playerid, "~w~Starting vehicle engine...",3500,3); gEngine[playerid] = 1; return 1; } } } } else if(newkeys & KEY_SECONDARY_FIRE) { for(new i = 0; i < sizeof(HouseInfo); i++) { if (PlayerToPoint(3, playerid,HouseInfo[i][hEntrancex], HouseInfo[i][hEntrancey], HouseInfo[i][hEntrancez])) { //printf("Found House :%d",i); if(PlayerInfo[playerid][pPhousekey] == i || HouseInfo[i][hLock] == 0) { SetPlayerInterior(playerid,HouseInfo[i][hInt]); SetPlayerVirtualWorld(playerid,HouseInfo[i][hWorld]); SetPlayerPos(playerid,HouseInfo[i][hExitx],HouseInfo[i][hExity],HouseInfo[i][hExitz]); GameTextForPlayer(playerid, "~w~Welcome Home", 5000, 1); PlayerInfo[playerid][pInt] = HouseInfo[i][hInt]; PlayerInfo[playerid][pLocal] = i; HouseEntered[playerid] = i; } else { GameTextForPlayer(playerid, "~r~Locked", 5000, 1); } } } } else if(newkeys == KEY_SECONDARY_ATTACK) { if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { if(gEngine[playerid] == 0 && engineOn[newcar] == 0) { RemovePlayerFromVehicle(playerid); TogglePlayerControllable(playerid, 1); return 1; } else if(NoFuel[playerid] == 1) { TogglePlayerControllable(playerid, 1); RemovePlayerFromVehicle(playerid); NoFuel[playerid] = 0; return 1; } } } return 1; }
here it is
Code:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { new string[256]; new sendername[MAX_PLAYER_NAME]; new pveh = GetVehicleModel(GetPlayerVehicleID(playerid)); new newcar = GetPlayerVehicleID(playerid); if(newkeys == KEY_JUMP) { if(IsPlayerInAnyVehicle(playerid)) { if(IsPlayerConnected(playerid)) { if(!engineOn[GetPlayerVehicleID(playerid)]) { if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER) { return 1; } if(IsAnOwnableCar(newcar)) { if(PlayerInfo[playerid][pPcarkey] == newcar) { } else if(PlayerInfo[playerid][pPcarkey2] == newcar) { } else if(PlayerInfo[playerid][pPcarkey3] == newcar) { } else { return 1; } } if(pveh == 510 || pveh == 462 || pveh == 481 || pveh == 509) { return 1; } if(newcar == 59 || newcar == 60) { return 1; } if(newcar >= 135 && newcar <= 154) { if(HireCar[playerid] != newcar) { return 1; } } if(IsAHarvest(newcar)) { return 1; } if(IsADrugHarvest(newcar)) { return 1; } if(IsAPlane(newcar)) { return 1; } if(IsASweeper(newcar)) { return 1; } if(gEngine[playerid] == 1) { return 1; } PutPlayerInVehicle(playerid, newcar, 0); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "* %s spins a key and tries to start vehicle engine.", sendername); ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); SetTimerEx("StartingTheVehicle",3500,0,"i",playerid); GameTextForPlayer(playerid, "~w~Starting vehicle engine...",3500,3); gEngine[playerid] = 1; return 1; } } } } else if(newkeys & KEY_SECONDARY_FIRE) { for(new i = 0; i < sizeof(HouseInfo); i++) { if (PlayerToPoint(3, playerid,HouseInfo[i][hEntrancex], HouseInfo[i][hEntrancey], HouseInfo[i][hEntrancez])) { //printf("Found House :%d",i); if(PlayerInfo[playerid][pPhousekey] == i || HouseInfo[i][hLock] == 0) { SetPlayerInterior(playerid,HouseInfo[i][hInt]); SetPlayerVirtualWorld(playerid,HouseInfo[i][hWorld]); SetPlayerPos(playerid,HouseInfo[i][hExitx],HouseInfo[i][hExity],HouseInfo[i][hExitz]); GameTextForPlayer(playerid, "~w~Welcome Home", 5000, 1); PlayerInfo[playerid][pInt] = HouseInfo[i][hInt]; PlayerInfo[playerid][pLocal] = i; HouseEntered[playerid] = i; } else { GameTextForPlayer(playerid, "~r~Locked", 5000, 1); } } } } else if(newkeys == KEY_SECONDARY_ATTACK) { if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { if(gEngine[playerid] == 0 && engineOn[newcar] == 0) { RemovePlayerFromVehicle(playerid); TogglePlayerControllable(playerid, 1); return 1; } else if(NoFuel[playerid] == 1) { TogglePlayerControllable(playerid, 1); RemovePlayerFromVehicle(playerid); NoFuel[playerid] = 0; return 1; } } } return 1; } |
\gamemodes\gtarp.pwn(43568) : error 017: undefined symbol "KEY_SECONDARY_FIRE"9
Now im getting error
Code:
\gamemodes\gtarp.pwn(43568) : error 017: undefined symbol "KEY_SECONDARY_FIRE"9 |
https://sampwiki.blast.hk/wiki/GetPlayerKeys There's the available keys.
|
You also have to check if the player is close the the pickup.
You can do it with picking up the pickup or by checking if the player is in range of the point (entrance marker). |
KEY_SECONDARY_FIRE is not for F you can use KEY_SECONDARY_ATTACK
|
here it is
Code:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { new string[256]; new sendername[MAX_PLAYER_NAME]; new pveh = GetVehicleModel(GetPlayerVehicleID(playerid)); new newcar = GetPlayerVehicleID(playerid); if(newkeys == KEY_JUMP) { if(IsPlayerInAnyVehicle(playerid)) { if(IsPlayerConnected(playerid)) { if(!engineOn[GetPlayerVehicleID(playerid)]) { if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER) { return 1; } if(IsAnOwnableCar(newcar)) { if(PlayerInfo[playerid][pPcarkey] == newcar) { } else if(PlayerInfo[playerid][pPcarkey2] == newcar) { } else if(PlayerInfo[playerid][pPcarkey3] == newcar) { } else { return 1; } } if(pveh == 510 || pveh == 462 || pveh == 481 || pveh == 509) { return 1; } if(newcar == 59 || newcar == 60) { return 1; } if(newcar >= 135 && newcar <= 154) { if(HireCar[playerid] != newcar) { return 1; } } if(IsAHarvest(newcar)) { return 1; } if(IsADrugHarvest(newcar)) { return 1; } if(IsAPlane(newcar)) { return 1; } if(IsASweeper(newcar)) { return 1; } if(gEngine[playerid] == 1) { return 1; } PutPlayerInVehicle(playerid, newcar, 0); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "* %s spins a key and tries to start vehicle engine.", sendername); ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); SetTimerEx("StartingTheVehicle",3500,0,"i",playerid); GameTextForPlayer(playerid, "~w~Starting vehicle engine...",3500,3); gEngine[playerid] = 1; return 1; } } } } else if(newkeys & KEY_SECONDARY_FIRE) { for(new i = 0; i < sizeof(HouseInfo); i++) { if (PlayerToPoint(3, playerid,HouseInfo[i][hEntrancex], HouseInfo[i][hEntrancey], HouseInfo[i][hEntrancez])) { //printf("Found House :%d",i); if(PlayerInfo[playerid][pPhousekey] == i || HouseInfo[i][hLock] == 0) { SetPlayerInterior(playerid,HouseInfo[i][hInt]); SetPlayerVirtualWorld(playerid,HouseInfo[i][hWorld]); SetPlayerPos(playerid,HouseInfo[i][hExitx],HouseInfo[i][hExity],HouseInfo[i][hExitz]); GameTextForPlayer(playerid, "~w~Welcome Home", 5000, 1); PlayerInfo[playerid][pInt] = HouseInfo[i][hInt]; PlayerInfo[playerid][pLocal] = i; HouseEntered[playerid] = i; } else { GameTextForPlayer(playerid, "~r~Locked", 5000, 1); } } } } else if(newkeys == KEY_SECONDARY_ATTACK) { if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { if(gEngine[playerid] == 0 && engineOn[newcar] == 0) { RemovePlayerFromVehicle(playerid); TogglePlayerControllable(playerid, 1); return 1; } else if(NoFuel[playerid] == 1) { TogglePlayerControllable(playerid, 1); RemovePlayerFromVehicle(playerid); NoFuel[playerid] = 0; return 1; } } } return 1; } |