# CFX::ADD_CONVAR_CHANGE_LISTENER

- **Hash:** `0xAB7F7241`
- **Namespace:** CFX
- **Runtime name (Lua/JS):** `AddConvarChangeListener`
- **Side:** shared (Cfx runtime native)
- **Name status:** official
- **Documentation:** described with examples
- **URL:** https://natives.borderlinerp.com/natives/CFX/ADD_CONVAR_CHANGE_LISTENER

## Signature

```c
int ADD_CONVAR_CHANGE_LISTENER(char* conVarFilter, func handler);
```

## Parameters

- `conVarFilter` (`char*`) — The Console Variable to listen for, this can be a pattern like "test:\*", or null for any
- `handler` (`func`) — The handler function.

## Returns

`int` — A cookie to remove the change handler.

## Description

*Source: Cfx.re native reference*

Adds a listener for Console Variable changes.

The function called expects to match the following signature:

```ts
function ConVarChangeListener(conVarName: string, reserved: any);
```

*   **conVarName**: The ConVar that changed.
*   **reserved**: Currently unused.

## Usage

### Lua

```lua
local retval = AddConvarChangeListener(conVarFilter, handler)

-- always available, by hash
local retval = Citizen.InvokeNative(0xab7f7241, conVarFilter, handler, Citizen.ResultAsInteger())
```

### JavaScript

```js
const retval = AddConvarChangeListener(conVarFilter, handler);

// by hash
const retval = Citizen.invokeNative('0xab7f7241', conVarFilter, handler, Citizen.returnResultAnyway(), Citizen.resultAsInteger());
```

### C#

```csharp
int retval = Function.Call<int>((Hash)0xab7f7241, conVarFilter, handler);
```

## Examples

*Source: Cfx.re native reference*

```js
// listen for all convar changes
AddConvarChangeListener(null, (conVarName, reserved) => {
    print(GetConvarInt(conVarName))
})

// listen to convars that start with "script:"
AddConvarChangeListener("script:*", (conVarName, reserved) => {
    print(GetConvarInt(conVarName))
})
```

## See also

- [CFX::REMOVE_CONVAR_CHANGE_LISTENER](https://natives.borderlinerp.com/natives/CFX/REMOVE_CONVAR_CHANGE_LISTENER.md)

*Sources: Cfx.re native reference.*
