# 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="https://2818543518-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvGiawlnUQy629isMoQhj%2Fuploads%2FhrkT8tBo4OzRX4o58u6h%2Fimage.png?alt=media&#x26;token=67e5f289-99d7-4b8d-b466-c191973ed9bb" 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="https://2818543518-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvGiawlnUQy629isMoQhj%2Fuploads%2FbCQOPSBjuTnKyhVdH0fh%2Fimage.png?alt=media&#x26;token=4b704161-3a08-4d21-9bbd-8c5ebd2e17b7" 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
```
