Skip to content
View in the app

A better way to browse. Learn more.

LCPDFR.com

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

GrammarPolice 1.8.3

(82 reviews)

4 Screenshots

 


Welcome to Grammar Police!  This plugin began as a replacement for VocalDispatch but has grown into much more!

 

Speech Recognition

  • Issue commands to the dispatcher using your microphone
  • Includes a "hold to talk" feature that simulates a real radio
  • Supports StopThePed and UltimateBackup out of the box
  • Contains multiple sets of "10 codes" or customize yourself
  • Request backup, run plate checks, accept callouts and more!

 

Non-Verbal Interactions

  • Use an on-screen radio to interact with the dispatcher
  • Also includes a Officer Plugin Status style menu system
  • Both systems are fully customizable!

 

Language Support

  • English
  • French
  • German
  • Spanish

 

Technical Support

 

Tutorial Videos

Edited by opus49

What's New in Version 1.8.3

Released

Grammar Police 1.8

  • Restored player status display on PTT release (thanks OfficialFlipPlayz)
  • Restored the "say again" and generic response functionality
  • Restored emergency status on panic (thanks L’ère de l’a-paix)
  • Hardened radio check to prevent crash when there aren't any results
  • Adjusted timings of (non-chest) animations to look and sound more natural
  • Invalid callsigns no longer cause a failure but instead fallback to default
  • Moved speech engine handling to a separate thread to minimize UI freezes
  • Updated the radio check feature and added it to the settings menu
  • Fixed bug in felony backup request where it incorrectly saw no pullover
  • Detect Dynamic Traffic Stop from CalloutInterface and set status accordingly
  • Made configuration loading more resilient, no longer crashing on bad values
  • HoldToTalk now defaults to true and should benefit from engine worker thread
  • Made the delay between speech recognition and action execution configurable
  • Added config option for using the LSPDFR animation when using on screen radio
  • Added support for multiple handlers (e.g. UltimateBackup, PolicingRedefined)
  • Added command for cancelling backup without ending callouts, pullovers, etc
  • Fixed bug with INI where it wasn't allowing the hotkey modifier to be none
  • Added script generated HTML-based speech guides for all languages

    NOTE: THIS VERSION REQURES MICROSOFT SPEECH PLATFORM
    Microsoft has removed the interface for Windows Speech Recognition in recent versions of Windows 11.  Starting with this version of Grammar Police you will need to install Microsoft Speech Platform and the language pack you wish to use:


    Instructional video here:

    Microsoft Speech Platform: https://www.microsoft.com/en-us/download/details.aspx?id=27225
    Language Packs:  https://www.microsoft.com/en-us/download/details.aspx?id=27224
    Community Translations:   https://github.com/Immersive-Plugins-Team/GrammarPolice-Translations

Short Description

Interact with the dispatcher.

User Feedback

Recommended Comments

Been having issues with Grammar Police not responding at all to my voice lately. When holding the Rmenu (Alt) key, I hear the PTT sound as I used to, but after giving a command to the dispatcher, I hear silence. There at least used to be a generic response that I had set to true when it didn't understand me. Any possible fixes?

opus49

Insiders Author

29 minutes ago, SevenADAMFifteen said:

Been having issues with Grammar Police not responding at all to my voice lately. When holding the Rmenu (Alt) key, I hear the PTT sound as I used to, but after giving a command to the dispatcher, I hear silence. There at least used to be a generic response that I had set to true when it didn't understand me. Any possible fixes?

 

Need your RagePluginHook.log

opus49

Insiders Author

@SevenADAMFifteen

 

First, you have the blips:

Spoiler

[7/9/2020 3:50:44 PM.138] LSPD First Response: [WARN] Error while hiding ambient game blips: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
[7/9/2020 3:50:44 PM.138] at Rage.Native.NativeFunction.CallByAddress(IntPtr address, Type returnType, NativeArgument[] arguments)
[7/9/2020 3:50:44 PM.138] at Rage.Native.NativeFunction.CallByHash(UInt64 nativeHash, Type returnType, NativeArgument[] arguments)
[7/9/2020 3:50:44 PM.138] at Rage.Native.NativeFunction.CallByHash[ReturnType](UInt64 nativeHash, NativeArgument[] arguments)
[7/9/2020 3:50:44 PM.138] at ?A0x240afc68.jXaszBkY2YUciv5K5UAr9S5o0vBFpNHW[ReturnType](UInt64 nativeHash, NativeArgument[] arguments)
[7/9/2020 3:50:44 PM.138] at Rage.World.GetBlipByHandle(PoolHandle handle)
[7/9/2020 3:50:44 PM.138] at MQ/7l Sd6fdxJbsxiADueFcD.c#&u(I^KSi>{+;_\zml)lMpg!() in E:\GTA V\LSPD First Response\LSPD First Response\Mod\Ambient\AmbientGameBlips.cs:line 82

 

Solution here: 

 

 

You also have this which I would suggest fixing:

Spoiler

[7/9/2020 3:50:48 PM.565] LSPD First Response: Error while initializing plugin: ‪‭‪‪‪‮‬‌‏‍‫‎‎‭‏‮‬‮: Could not load file or assembly 'Stealth.Common, Version=2.0.6684.38422, Culture=neutral, PublicKeyToken=null' or one of its dependencies. Invalid pointer (Exception from HRESULT: 0x80004003 (E_POINTER))   at ‫‭‪‍‫‍‪‌‪‫‍‪‮‪‪‮‏‍‮‫‏‍‬‫‮.‭‭‪‌‏‮‎‬‏‮‌‮‏‏‮‌‬‬‌‫‬‫‮()
[7/9/2020 3:50:48 PM.565] at ‪‭‪‪‪‮‬‌‏‍‫‎‎‭‏‮‬‮.‮‭‮‏‫‎‌‎‍‌‬‎‪‭‍‬‏‬‫‎‮()
[7/9/2020 3:50:48 PM.565] at }qtN\]S"~D86<\*myV\\n$aS>(D#.v_8 1&Iqq4/x+:2^\!V(fq}v)() in E:\GTA V\LSPD First Response\LSPD First Response\Mod\Callouts\CalloutManager.cs:line 699
[7/9/2020 3:50:48 PM.567] LSPD First Response: Error while creating plugin: ‪‭‪‪‪‮‬‌‏‍‫‎‎‭‏‮‬‮: System.NullReferenceException: Object reference not set to an instance of an object.
[7/9/2020 3:50:48 PM.567] at LSPD_First_Response.Mod.API.Functions.GetAllUserPlugins() in E:\GTA V\LSPD First Response\LSPD First Response\Mod\API\Functions.cs:line 151
[7/9/2020 3:50:48 PM.567] at Interaction_.EntryPoint.LSPDFRResolveEventHandler(Object sender, ResolveEventArgs args)
[7/9/2020 3:50:48 PM.567] at System.AppDomain.OnAssemblyResolveEvent(RuntimeAssembly assembly, String assemblyFullName)

 

And this, which looks like Vocal Dispatch:

Spoiler

[7/9/2020 3:50:48 PM.586] LSPD First Response: Error while initializing plugin: VocalDispatch.Main: Could not find a part of the path 'C:\Program Files (x86)\Steam\steamapps\common\Grand Theft Auto V\plugins\lspdfr\VocalDispatch'.   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
[7/9/2020 3:50:48 PM.586] at System.IO.FileSystemEnumerableIterator`1.CommonInit()
[7/9/2020 3:50:48 PM.586] at System.IO.FileSystemEnumerableIterator`1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler, Boolean checkHost)
[7/9/2020 3:50:48 PM.586] at System.IO.Directory.GetFiles(String path)
[7/9/2020 3:50:48 PM.586] at  . . ()
[7/9/2020 3:50:48 PM.586] at }qtN\]S"~D86<\*myV\\n$aS>(D#.v_8 1&Iqq4/x+:2^\!V(fq}v)() in E:\GTA V\LSPD First Response\LSPD First Response\Mod\Callouts\CalloutManager.cs:line 699

 

And then finally you have this:

[7/9/2020 4:00:33 PM.943] LSPD First Response: GrammarPolice [RecognizeCompletedHandler] ERROR: Internal error occurred in the recognition process.

 

I suspect you have Vocal Dispatch and Grammar Police bound to the same key.  

30 minutes ago, opus49 said:

@SevenADAMFifteen

 

First, you have the blips:

  Reveal hidden contents

[7/9/2020 3:50:44 PM.138] LSPD First Response: [WARN] Error while hiding ambient game blips: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
[7/9/2020 3:50:44 PM.138] at Rage.Native.NativeFunction.CallByAddress(IntPtr address, Type returnType, NativeArgument[] arguments)
[7/9/2020 3:50:44 PM.138] at Rage.Native.NativeFunction.CallByHash(UInt64 nativeHash, Type returnType, NativeArgument[] arguments)
[7/9/2020 3:50:44 PM.138] at Rage.Native.NativeFunction.CallByHash[ReturnType](UInt64 nativeHash, NativeArgument[] arguments)
[7/9/2020 3:50:44 PM.138] at ?A0x240afc68.jXaszBkY2YUciv5K5UAr9S5o0vBFpNHW[ReturnType](UInt64 nativeHash, NativeArgument[] arguments)
[7/9/2020 3:50:44 PM.138] at Rage.World.GetBlipByHandle(PoolHandle handle)
[7/9/2020 3:50:44 PM.138] at MQ/7l Sd6fdxJbsxiADueFcD.c#&u(I^KSi>{+;_\zml)lMpg!() in E:\GTA V\LSPD First Response\LSPD First Response\Mod\Ambient\AmbientGameBlips.cs:line 82

 

Solution here: 

 

 

You also have this which I would suggest fixing:

  Reveal hidden contents

[7/9/2020 3:50:48 PM.565] LSPD First Response: Error while initializing plugin: ‪‭‪‪‪‮‬‌‏‍‫‎‎‭‏‮‬‮: Could not load file or assembly 'Stealth.Common, Version=2.0.6684.38422, Culture=neutral, PublicKeyToken=null' or one of its dependencies. Invalid pointer (Exception from HRESULT: 0x80004003 (E_POINTER))   at ‫‭‪‍‫‍‪‌‪‫‍‪‮‪‪‮‏‍‮‫‏‍‬‫‮.‭‭‪‌‏‮‎‬‏‮‌‮‏‏‮‌‬‬‌‫‬‫‮()
[7/9/2020 3:50:48 PM.565] at ‪‭‪‪‪‮‬‌‏‍‫‎‎‭‏‮‬‮.‮‭‮‏‫‎‌‎‍‌‬‎‪‭‍‬‏‬‫‎‮()
[7/9/2020 3:50:48 PM.565] at }qtN\]S"~D86<\*myV\\n$aS>(D#.v_8 1&Iqq4/x+:2^\!V(fq}v)() in E:\GTA V\LSPD First Response\LSPD First Response\Mod\Callouts\CalloutManager.cs:line 699
[7/9/2020 3:50:48 PM.567] LSPD First Response: Error while creating plugin: ‪‭‪‪‪‮‬‌‏‍‫‎‎‭‏‮‬‮: System.NullReferenceException: Object reference not set to an instance of an object.
[7/9/2020 3:50:48 PM.567] at LSPD_First_Response.Mod.API.Functions.GetAllUserPlugins() in E:\GTA V\LSPD First Response\LSPD First Response\Mod\API\Functions.cs:line 151
[7/9/2020 3:50:48 PM.567] at Interaction_.EntryPoint.LSPDFRResolveEventHandler(Object sender, ResolveEventArgs args)
[7/9/2020 3:50:48 PM.567] at System.AppDomain.OnAssemblyResolveEvent(RuntimeAssembly assembly, String assemblyFullName)

 

And this, which looks like Vocal Dispatch:

  Reveal hidden contents

[7/9/2020 3:50:48 PM.586] LSPD First Response: Error while initializing plugin: VocalDispatch.Main: Could not find a part of the path 'C:\Program Files (x86)\Steam\steamapps\common\Grand Theft Auto V\plugins\lspdfr\VocalDispatch'.   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
[7/9/2020 3:50:48 PM.586] at System.IO.FileSystemEnumerableIterator`1.CommonInit()
[7/9/2020 3:50:48 PM.586] at System.IO.FileSystemEnumerableIterator`1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler, Boolean checkHost)
[7/9/2020 3:50:48 PM.586] at System.IO.Directory.GetFiles(String path)
[7/9/2020 3:50:48 PM.586] at  . . ()
[7/9/2020 3:50:48 PM.586] at }qtN\]S"~D86<\*myV\\n$aS>(D#.v_8 1&Iqq4/x+:2^\!V(fq}v)() in E:\GTA V\LSPD First Response\LSPD First Response\Mod\Callouts\CalloutManager.cs:line 699

 

And then finally you have this:

[7/9/2020 4:00:33 PM.943] LSPD First Response: GrammarPolice [RecognizeCompletedHandler] ERROR: Internal error occurred in the recognition process.

 

I suspect you have Vocal Dispatch and Grammar Police bound to the same key.  

Awesome, thank you for the help! And,  yes, I tried using Vocal Dispatch after Grammar Police encountered some issues. I'll get to fixing this ASAP. You rock.

LtRob

Members

im getting this error with grammar police and op immersive dispatch, just installed immersive dispatch

[12:27 AM]

7/11/2020 12:26:16 AM.765] LSPD First Response: [7/11/2020 12:26:16 AM.765] LSPD First Response: ============================== [7/11/2020 12:26:16 AM.765] LSPD First Response: UNHANDLED EXCEPTION DURING GAME FIBER TICK [7/11/2020 12:26:16 AM.765] LSPD First Response: ------------------------------ [7/11/2020 12:26:16 AM.765] LSPD First Response: Origin: Game fiber "grammarpolice-transmit-start-746bcb60-0939-42f3-b01b-9919aea363e4". [7/11/2020 12:26:16 AM.765] LSPD First Response: ------------------------------ [7/11/2020 12:26:16 AM.765] LSPD First Response: Exception type: System.NullReferenceException [7/11/2020 12:26:16 AM.765] LSPD First Response: Exception message: Object reference not set to an instance of an object. [7/11/2020 12:26:16 AM.765] LSPD First Response: ------------------------------ [7/11/2020 12:26:16 AM.765] LSPD First Response: Inner exceptions: [7/11/2020 12:26:16 AM.765] LSPD First Response: ------------------------------ [7/11/2020 12:26:16 AM.765] LSPD First Response: Stack trace: [7/11/2020 12:26:16 AM.765] LSPD First Response: at GrammarPolice.Handlers.GrammarHandler.<OnKeyPressChanged>b__19_0() [7/11/2020 12:26:16 AM.765] at Rage.GameFiber.Main() [7/11/2020 12:26:16 AM.765] LSPD First Response: ==============================

opus49

Insiders Author

(edited)

@LtRob I need the whole log

Edited by opus49

opus49

Insiders Author

Looks like an issue with your Immersive Dispatch installation:

Spoiler

[7/11/2020 12:33:44 AM.518] LSPD First Response: GrammarPolice failed to load action from G:\GAMES\steamapps\common\Grand Theft Auto V/plugins/LSPDFR/GrammarPolice/grammar/en-US/custom/actions\backupgroup.xml: Could not load file or assembly 'OP_Immersive_Dispatch' or one of its dependencies. The system cannot find the file specified.

 

This is caused by a problem with your custom XML files:

Spoiler

[7/11/2020 12:33:45 AM.987] LSPD First Response: GrammarPolice [ERROR] SpeechRecogitionEngine initialization failed!
[7/11/2020 12:33:45 AM.987] LSPD First Response: GrammarPolice [ERROR] Message: 'one-of' must contain at least one 'item' element.
[7/11/2020 12:33:45 AM.987] LSPD First Response: GrammarPolice [ERROR] StackTrace:
[7/11/2020 12:33:45 AM.988] LSPD First Response: GrammarPolice [ERROR]    at System.Speech.Internal.SrgsParser.XmlParser.ThrowSrgsException(SRID id, Object[] args)
[7/11/2020 12:33:45 AM.988] at System.Speech.Internal.SrgsCompiler.OneOf.System.Speech.Internal.SrgsParser.IElement.PostParse(IElement parentElement)

 

Officer Toshi

Insiders

So be honest.. who else added "I'M JUST AT THE LIL COFFEE SHOP 'ROUND THE CORNER" to accept.xml? xD

I couldn't resist.

P0LL0

Members

can you do an italian version ? thank you 

Huner73

Members

What should the location of PLD if you have your status on screen?

AvLife

Members

23 minutes ago, Huner73 said:

What should the location of PLD if you have your status on screen?

[ GENERAL ] LocTextPosX = 320 LocTextPosY = 980 LocTextPosX_RadarLrg = 500 LocTextPosY_RadarLrg = 1000 LocTextSizeMult = 1.25 DisplayGameTime = true AllowRadarSizeToggle = true AllowControllerUse = false

On 7/13/2020 at 8:10 PM, P0LL0 said:

can you do an italian version ? thank you 

The MicrosoftSystem.Speech library doesnt support Italian sadly

Awesome I was thinking that when calling for a tow truck we could ask for what type of tow truck want to come instead of a menu just popping up and having us select the option. Example we could say " Dispatch send me a large flatbed to my location" etc...

opus49

Insiders Author

5 hours ago, NYPDDetectiveODonnell said:

Awesome I was thinking that when calling for a tow truck we could ask for what type of tow truck want to come instead of a menu just popping up and having us select the option. Example we could say " Dispatch send me a large flatbed to my location" etc...

 

A good idea, but not possible currently with Stop The Ped.  BejoIjo would have to add that to his public API.

opus49

Insiders Author

To anyone who follows this plugin, I'm sorry if you got a zillion notifications about a new version.  I was just trying to get a new screenshot uploaded and didn't realize until I was done that you can toggle the little switch to not send a notification.  Sorry 😞

GwiazdekOPP

Members

 

please add the possibility to choose animation on the chest

 

opus49

Insiders Author

4 minutes ago, szako1156 said:

 

please add the possibility to choose animation on the chest

 

 

I would if I could find it. 

P0LL0

Members

17 hours ago, Messiah023 said:

[ GENERAL ] LocTextPosX = 320 LocTextPosY = 980 LocTextPosX_RadarLrg = 500 LocTextPosY_RadarLrg = 1000 LocTextSizeMult = 1.25 DisplayGameTime = true AllowRadarSizeToggle = true AllowControllerUse = false

The MicrosoftSystem.Speech library doesnt support Italian sadly

thank you anyway

 

 

Officer Toshi

Insiders

Hm the grammarpolice.ini in /plugins/lspdfr is no longer needed? It doesn't seem to be reading it anyway

 

 

opus49

Insiders Author

51 minutes ago, mctosh said:

Hm the grammarpolice.ini in /plugins/lspdfr is no longer needed? It doesn't seem to be reading it anyway

 

 

Read the documentation 🙂

Bardeous

Members

Is it possible to refer to dispatch as county and then say your unit number? i can't seem to do so, (e.g: county, this is 1-lincoln-18, or county 1-lincoln-18) it works when i call dispatch dispatch, and say "dispatch this is 1-lincoln-18" or "dispatch 1-lincoln-18" though.

 

opus49

Insiders Author

31 minutes ago, mat10193 said:

Is it possible to refer to dispatch as county and then say your unit number? i can't seem to do so, (e.g: county, this is 1-lincoln-18, or county 1-lincoln-18) it works when i call dispatch dispatch, and say "dispatch this is 1-lincoln-18" or "dispatch 1-lincoln-18" though.

 

 

You create a custom preface.xml file to add your own phrases.  

 

I cover this exact scenario in the tutorial: 

 

 

 

Create an account or sign in to comment

Latest Mods

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.