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

BlueLine Vibes

Members

@opus49  You might want to put in the description of this plugin above in the lspdfr.com site that it is for US English only for now anyways.  You will get flooded with people saying it is crashing or not working.  I know from doing tutorials on my channel that once you see a pattern of people having the same problem, it is best to nip it in the bud before it gets out of hand lol.  There are a lot of people that speak different languages here and a lot of people just don't read descriptions in Read Mes.   I would put it in bold letters too with larger font 😉

(edited)

Update on my situation: I was just not saying it right sorry for the trouble. Could you possibly make a guide sometime about adding custom actions as well? (Like spike strips, roadblocks, etc from ultimate backup or so on or really any additional stuff and so on.

 

Edited by Talia Kuznetsova

Flashwing

Members

This is an excellent mod, thank you very much for innovating within the vocal dispatch realm. I suspect this one is going to be a hit and you'll be busy with lots of requests. The interaction is much better, the ability to add or edit the voice commands is much easier this way, and the small but very effective detail of changing your callout status with various 10 commands is a HUGE help. When RP'ing on a scene, I hate getting bombarded with additional calls and have to set myself to unavailable but I also forget to make myself available for calls when the scene clears.

 

I think the next generation of this would be an integration with the Officer's Status Plugin. It isn't tough to edit the files on your own to achieve a similar result. For example, I added 10-15 (returning to station with someone in custody) as a call that would mark me as unavailable. 

 

Nice work on this, can't wait to see the next iteration! 

opus49

Insiders Author

11 minutes ago, Flashwing said:

 When RP'ing on a scene, I hate getting bombarded with additional calls

 

It's funny you mention this because that's one of the biggest reasons I wrote this.  I was often finding myself cleaning up scenes with tow trucks and coroners and new calls would keep coming in.  I really wanted the ability to control my call status vocally. 

 

Thanks so much for the positive feedback!!

opus49

Insiders Author

1 hour ago, Talia Kuznetsova said:

Update on my situation: I was just not saying it right sorry for the trouble. Could you possibly make a guide sometime about adding custom actions as well? (Like spike strips, roadblocks, etc from ultimate backup or so on or really any additional stuff and so on.

 

Glad it's working for you.  There should be a Documentation folder included in the archive that contains instructions on how to customize the grammar.  Let me know if you have any questions with it and I'll do my best to help.

MrSwatPL

Members

(edited)

'Requesting Fire Department' doesnt work 😕

So is it compatibile to UB at all? 😛 

And  btw i have STP, and when i say "Requesting Tow Truck' it says i need STP or AM 😕 

Edited by MrSwatPL

opus49

Insiders Author

2 minutes ago, MrSwatPL said:

'Requesting Fire Department' doesnt work 😕

So is it compatibile to UB at all? 😛 

 

Yes, if you are using the most recent version of UB, then code 2, code 3, ambulence, etc backups will all default to UB.

 

Although I will try to include it in the future, you can add fire department right now if you like.  There is documentation that explains how to add a new action.

 

The public static call for UB's firetruck is  UltimateBackup.API.Functions.callFireDepartment()

X4vBond

Members

What is the trello board?

opus49

Insiders Author

42 minutes ago, MrSwatPL said:

And  btw i have STP, and when i say "Requesting Tow Truck' it says i need STP or AM 😕 

This is likely a version mismatch.  You need the most recent version of STP.

28 minutes ago, fowkes49 said:

@opus49 can u help me plz

I can try.  Shoot me a PM if you like.

36 minutes ago, X4vBond said:

What is the trello board?

Trello is a tool for managing tasks.  Since people have been kind enough to make suggestions, I thought I would offer up a place where they can see the progress.

opus49

Insiders Author

Adding UB's Fire Department seems to be a popular request.  Here is how you can do it without any update:

 

Add this to your actions.xml file before the closing </Actions> tag:

 

<Action>
    <Name>firetruck</Name>
    <Library>UltimateBackup.dll</Library>
    <Target>UltimateBackup.API.Functions.callFireDepartment</Target>

</Action>

 

 

Add this to your grammar.xml inside the <Request><Options> section (e.g. after platecheck):

 

<Option>
    <Action>firetruck</Action>
    <Phrases>
        <string>firetruck</string>
        <string>fire department</string>
    </Phrases>
</Option>

 

Of course you can customize the phrases all you like.  If you put <string>a big red truck</string>   then you should be able to say, "dispatch i need a big red truck" and it should work.

EmberWolfGaming

Members

So, does dispatch tell the officer if either the vehicle or the ped has a warrant like VD? For example, like how VD says "A warrant issued." If not i would like to see a feature where she says the warrants

X4vBond

Members

51 minutes ago, opus49 said:

This is likely a version mismatch.  You need the most recent version of STP.

I can try.  Shoot me a PM if you like.

Trello is a tool for managing tasks.  Since people have been kind enough to make suggestions, I thought I would offer up a place where they can see the progress.

Ok. Is it required?

opus49

Insiders Author

3 minutes ago, EmberWolf0w0 said:

So, does dispatch tell the officer if either the vehicle or the ped has a warrant like VD? For example, like how VD says "A warrant issued." If not i would like to see a feature where she says the warrants

 

There is no audio for that, but I can add that to the list of requests.  I appreciate the suggestion!

 

There does seems to be some funny business between StopThePed and Compulite in terms of the vehicle flags, so I'm not 100% sure what's going on there.  I'm still trying to track that down.

3 minutes ago, X4vBond said:

Ok. Is it required?

 

The Trello board?  No, it's just a dashboard for seeing the upcoming features and fixes.

Ellementalforce

Members

great job, its amazing 

just a question, can this cause a lost of texture in the game or drop fps?

opus49

Insiders Author

1 minute ago, Ellementalforce said:

great job, its amazing 

just a question, can this cause a lost of texture in the game or drop fps?

 

It shouldn't.  The only thing it really does is watch for a keypress and then act if it receives one.  So 99% of the time it's just one thread listening for a keypress.

Is there a way to get it to page better EMS and helicopter assistance? it doesnt seem to want to work with a simple name change.

opus49

Insiders Author

2 minutes ago, Talia Kuznetsova said:

Is there a way to get it to page better EMS and helicopter assistance? it doesnt seem to want to work with a simple name change.

 

I'm not sure I understand what you mean.  It's not recognizing the request?  Or you don't like the ambulance?

OMG i just realized I've been misspelling "ambulance" this entire time 🙄

(edited)

2 minutes ago, opus49 said:

 

I'm not sure I understand what you mean.  It's not recognizing the request?  Or you don't like the ambulance?

It's recognizing the request but nothing is going on.
I have it set up like this:
<Target>BetterEMS.Actions.Backup.EMS</Target>
<Target>HeliAssistance.Actions.Backup.Air</Target>

but nothing happens. I dont get the generic response which means it's trying to run it but alas nothing. (Speaking of which could you see if there's a "please repeat" line for when it doesnt understand or atleast add a hud line)

Edited by Talia Kuznetsova

opus49

Insiders Author

(edited)

7 minutes ago, Talia Kuznetsova said:

It's recognizing the request but nothing is going on.
I have it set up like this:
<Target>BetterEMS.Actions.Backup.EMS</Target>
<Target>HeliAssistance.Actions.Backup.Air</Target>

 

My guess is it's either GP is not sucessfully loading those dll's or the method names aren't quite right.  Can you send me your latest RP log?

 

And I assume those are two different actions (air and EMS)?  You cannot have multiple targets for an action.

Edited by opus49

Just now, opus49 said:

 

My guess is it's either GP is not sucessfully loading those dll's or the method names aren't quite right.  Can you send me your latest RP log?

 

And I assume those are two different actions (air and EMS)?  You cannot have multiple targets for an action.

Yes those are seperate actions sorry i should of specified and certainly here's my log. I called air unit multiple different times so it should be most recent in the log. I'm also including my actions xml to see if that is also the issue.

RagePluginHook.log actions.xml

opus49

Insiders Author

5 minutes ago, Talia Kuznetsova said:

Yes those are seperate actions sorry i should of specified and certainly here's my log. I called air unit multiple different times so it should be most recent in the log. I'm also including my actions xml to see if that is also the issue.

 

It's not loading the actions:  

 

[5/30/2020 7:01:07 PM.954] LSPD First Response: GrammarPolice [ActionHandler] failed to load action.  Name: air  Target: HeliAssistance.Actions.Backup.Air
[5/30/2020 7:01:07 PM.955] LSPD First Response: GrammarPolice [ActionHandler] Object reference not set to an instance of an object.
[5/30/2020 7:01:07 PM.955] LSPD First Response: GrammarPolice [ActionHandler]    at GrammarPolice.Handlers.Action.GetMethodInfo()
[5/30/2020 7:01:07 PM.955] LSPD First Response: GrammarPolice [ActionHandler] failed to load action.  Name: ems  Target: BetterEMS.Actions.Backup.EMS
[5/30/2020 7:01:07 PM.955] LSPD First Response: GrammarPolice [ActionHandler] Object reference not set to an instance of an object.
[5/30/2020 7:01:07 PM.955] LSPD First Response: GrammarPolice [ActionHandler]    at GrammarPolice.Handlers.Action.GetMethodInfo()

 

Unfortunately, neither of those plugins has public static methods.  I will take a note to reach out to those plugin developers and see if we can work something out.

(edited)

3 minutes ago, opus49 said:

 

It's not loading the actions:  

 

[5/30/2020 7:01:07 PM.954] LSPD First Response: GrammarPolice [ActionHandler] failed to load action.  Name: air  Target: HeliAssistance.Actions.Backup.Air
[5/30/2020 7:01:07 PM.955] LSPD First Response: GrammarPolice [ActionHandler] Object reference not set to an instance of an object.
[5/30/2020 7:01:07 PM.955] LSPD First Response: GrammarPolice [ActionHandler]    at GrammarPolice.Handlers.Action.GetMethodInfo()
[5/30/2020 7:01:07 PM.955] LSPD First Response: GrammarPolice [ActionHandler] failed to load action.  Name: ems  Target: BetterEMS.Actions.Backup.EMS
[5/30/2020 7:01:07 PM.955] LSPD First Response: GrammarPolice [ActionHandler] Object reference not set to an instance of an object.
[5/30/2020 7:01:07 PM.955] LSPD First Response: GrammarPolice [ActionHandler]    at GrammarPolice.Handlers.Action.GetMethodInfo()

 

Unfortunately, neither of those plugins has public static methods.  I will take a note to reach out to those plugin developers and see if we can work something out.

Ah understandable thank you.

 

Actually is there a way to figure out what the static methods of plugins are? It would help with adding custom lines.

Edited by Talia Kuznetsova

opus49

Insiders Author

6 minutes ago, Talia Kuznetsova said:

Ah understandable thank you.

 

 

Actually BetterEMS does... let me keep at it.  I'll PM you if I come up with anything.

Just now, opus49 said:

 

Actually BetterEMS does... let me keep at it.  I'll PM you if I come up with anything.

Anything I can do on my end to help you?

Create an account or sign in to comment

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.