# Compatibility with pma-voice

This guide explains how to make the **Advanced Megaphone System** compatible with **PMA-Voice**.

***

## **1. Installation & Basic Setup**

{% embed url="<https://www.youtube.com/watch?v=Ga_gMOXyyIk>" %}

1. **Install PMA-Voice and the LATEST version of r\_megaphone on your server.**
2. **Enable PMA-Voice compatibility in the `config.lua` file of r\_megaphone:**
   * Open the `config.lua` file of **r\_megaphone**.
   * Modify the following settings:

     ```lua
     Config.Compatibility.PMAVoice.enabled = true
     Config.Compatibility.PMAVoice.resourceName = 'pma-voice'
     ```
3. **Manually create the `megaphone.lua` file in pma-voice:**
   * Navigate to the folder:

     ```
     ../pma-voice/client/
     ```
   * Create a new file named `megaphone.lua`.
4. **Add the following code to `megaphone.lua`:**

You can change the distance of the megaphone's range using the first line.

```lua
table.insert(Cfg.voiceModes, {35.0, 'Megaphone'})

exports('setMegaphone', function(previousVoiceRange)
    if not previousVoiceRange then
        mode = #Cfg.voiceModes
        setProximityState(Cfg.voiceModes[#Cfg.voiceModes][1], true)
    else
        mode = previousVoiceRange
        setProximityState(Cfg.voiceModes[previousVoiceRange][1], false)
    end
end)

exports('getMegaphone', function()
    return mode
end)

RegisterCommand('cycleproximity', function()
    if GetConvarInt('voice_enableProximityCycle', 1) ~= 1 or disableProximityCycle then return end
    
    local newMode = mode + 1
    if newMode <= #Cfg.voiceModes and newMode ~= #Cfg.voiceModes - 1 then
    	mode = newMode
    else
    	mode = 1
    end
    
    setProximityState(Cfg.voiceModes[mode][1], false)
    TriggerEvent('pma-voice:setTalkingMode', mode)
end, false)

if gameVersion == 'fivem' then
    RegisterKeyMapping('cycleproximity', 'Cycle Proximity', 'keyboard', GetConvar('voice_defaultCycle', 'F11'))
end
```

1. **Modify `fxmanifest.lua` in pma-voice:**
   * Open the `fxmanifest.lua` file of **pma-voice**.
   * Add the following line at the end of the file:

     ```lua
     client_script 'client/megaphone.lua'
     ```
2. **Ensure the correct startup order in `server.cfg`:** Make sure **pma-voice** is started before **r\_megaphone** in your **`server.cfg`**:

   ```txt
   ensure pma-voice  
   ensure r_megaphone
   ```
3. **Restart your server to apply the changes.**

***

### **2. Common Errors & Solutions**

**Why does this issue occur?**\
This error typically appears when `r_megaphone` is started for the first time without restarting the server. The script tries to auto-generate a file named `megaphone.lua` inside the `pma-voice` script.\
However, it might fail due to:

#### **2.1 Error: `r_megaphone`** must contain the following line in your server.cfg **file to work**

<figure><img src="/files/OTiCx5GwS0UOA8caFZeo" alt=""><figcaption></figcaption></figure>

**Cause:**\
The r\_megaphone script needs this line to produce the appropriate voice effects.

**Solution:**\
Check that this line appears in the `server.cfg`. If not, add it.

```cfg
setr voice_enableSubmix 1
```

***

#### **2.2 Error: `r_megaphone` must be started after `pma-voice` in the server.cfg file!**

<figure><img src="/files/grTuhwIjrPNPC1TtzjCD" alt=""><figcaption></figcaption></figure>

**Cause:**\
`r_megaphone` depends on `pma-voice` and must load afterward to access its functions.

**Solution:**\
Adjust your `server.cfg`:

```cfg
ensure pma-voice  
ensure r_megaphone
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.rytrak.fr/scripts/advanced-megaphone-system/compatibility-with-pma-voice.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
