---
title: "OnPlayerKeyStateChange | open.mp"
description: "Deze callback wordt aangeroepen wanneer de status van een ondersteunde toets verandert (ingedrukt/losgelaten)."
canonical: https://omp.itsneufox.com/nl/docs/scripting/callbacks/OnPlayerKeyStateChange
language: nl
---

# OnPlayerKeyStateChange

## Beschrijving

Deze callback wordt aangeroepen wanneer de status van een [ondersteunde](https://omp.itsneufox.com/nl/docs/scripting/resources/keys) toets verandert (ingedrukt/losgelaten).  
Richtingstoetsen triggeren OnPlayerKeyStateChange niet (omhoog/omlaag/links/rechts).

| Naam | Beschrijving |
| --- | --- |
| playerid | Het ID van de speler die een toets indrukte of losliet. |
| KEY:newkeys | Een bitmask van de toetsen die momenteel ingedrukt zijn - [zie hier](https://omp.itsneufox.com/nl/docs/scripting/resources/keys) |
| KEY:oldkeys | Een bitmask van de toetsen die vóór de verandering ingedrukt waren - [zie hier](https://omp.itsneufox.com/nl/docs/scripting/resources/keys). |

## Returns

-   Deze callback heeft geen returns.
-   Wordt altijd als eerste aangeroepen in gamemode.

## Notities

notitie

Deze callback kan ook door NPC’s worden aangeroepen.

tip

Richtingstoetsen triggeren OnPlayerKeyStateChange niet (omhoog/omlaag/links/rechts).  
Deze zijn alleen te detecteren met [GetPlayerKeys](https://omp.itsneufox.com/nl/docs/scripting/functions/GetPlayerKeys) (in [OnPlayerUpdate](https://omp.itsneufox.com/nl/docs/scripting/callbacks/OnPlayerUpdate) of een timer).

## Gerelateerde Functies

-   [GetPlayerKeys](https://omp.itsneufox.com/nl/docs/scripting/functions/GetPlayerKeys): Controleer welke toetsen een speler ingedrukt houdt.

## Extra informatie

### Introductie

Deze callback wordt aangeroepen wanneer een speler één van de ondersteunde toetsen indrukt of loslaat (zie [Keys](https://omp.itsneufox.com/nl/docs/scripting/resources/keys)).  
De ondersteunde toetsen zijn geen echte toetsenbordtoetsen, maar San Andreas-functietoetsen. Je kunt bijvoorbeeld niet detecteren wanneer iemand de spatiebalk indrukt, maar wel wanneer de sprint-toets wordt ingedrukt (die standaard aan de spatiebalk is gekoppeld).

### Parameters

De parameters zijn een lijst van alle toetsen die momenteel ingedrukt zijn en alle toetsen die net ingedrukt waren. De callback wordt aangeroepen wanneer een toestsatus verandert en geeft de staten van alle toetsen vóór en na de verandering door. Slechts één bit vertegenwoordigt een toets, dus direct vergelijken werkt niet altijd – gebruik bitmasking.

### Hoe NIET te checken

```c
if (newkeys == KEY_FIRE)
```

Crouchen en schieten tegelijk laat dit stuk code falen, omdat `newkeys` dan meerdere bits bevat.

### Correct checken (bitmask)

```c
if (newkeys & KEY_FIRE)
```

Gebruik `oldkeys` om “net ingedrukt”/“net losgelaten” te detecteren:

```c
if ((newkeys & KEY_FIRE) && !(oldkeys & KEY_FIRE)) // pressed
if ((oldkeys & KEY_FIRE) && !(newkeys & KEY_FIRE)) // released
```

### Meerdere toetsen

```c
if ((newkeys & (KEY_FIRE | KEY_CROUCH)) == (KEY_FIRE | KEY_CROUCH)
 && (oldkeys & (KEY_FIRE | KEY_CROUCH)) != (KEY_FIRE | KEY_CROUCH))
```

### Defines om te vereenvoudigen

```c
#define HOLDING(%0) (((newkeys & (%0)) == (%0)))
#define PRESSED(%0) ((((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0))))
#define PRESSING(%0,%1) ((%0) & (%1))
#define RELEASED(%0) ((((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0))))
```

Voorbeelden met deze macros staan in het origineel en werken 1:1 in het Nederlands.

## Voorbeelden

```c
public OnPlayerKeyStateChange(playerid, KEY:newkeys, KEY:oldkeys)
{
	if (PRESSED(KEY_FIRE))
	{
		if (IsPlayerInAnyVehicle(playerid))
		{
			AddVehicleComponent(GetPlayerVehicleID(playerid), 1010);
		}
	}
	return 1;
}
```

```c
public OnPlayerKeyStateChange(playerid, KEY:newkeys, KEY:oldkeys)
{
	if (PRESSED(KEY_JUMP))
	{
		new
			Float:x,
			Float:y,
			Float:z;
		GetPlayerPos(playerid, x, y, z);
		SetPlayerPos(playerid, x, y, z + 10.0);
	}
	return 1;
}
```

```c
new
	Float:gPlayerHealth[MAX_PLAYERS];

#if !defined INFINITY
	#define INFINITY (Float:0x7F800000)
#endif

public OnPlayerKeyStateChange(playerid, KEY:newkeys, KEY:oldkeys)
{
	if (PRESSED(KEY_ACTION))
	{
		// They just pressed the action key, save their
		// old health for restoration.
		GetPlayerHealth(playerid, gPlayerHealth[playerid]);
		SetPlayerHealth(playerid, INFINITY);
	}
	else if (RELEASED(KEY_ACTION))
	{
		// They just let go of action - restore
		// their old health again.
		SetPlayerHealth(playerid, gPlayerHealth[playerid]);
	}
	return 1;
}
```
