Rust Server Versions Save

DCS gRPC server written in Rust. Get data out of DCS and send commands into DCS.

0.7.1

1 year ago

DCS-gRPC 0.7.1 Released!

For an exaplantion of DCS-gRPC is please see this page

Version 0.7.1 is a hotfix for 0.7.0 which fixes an issue that caused OverlordBot to not report tripwires. For the full 0.7.0 release notes see here

Changelog

Fixed

  • Fixed velocity and orientation not getting updated in units stream

Support & Contact

You can reach us via the Github issues and Discord. We don't think DCS-gRPC requires yet another Discord so we have instead created a DCS-gRPC section on the OverlordBot Discord . You can also find Binary, RurouniJones, j5bit on other DCS related Discords (e.g. The Hoggit Discord).

0.7.0

1 year ago

DCS-gRPC 0.7.0 Released!

For an exaplantion of DCS-gRPC is please see this page

We are pleased to announce version 0.7.0 of DCS-gRPC. The main feature of this release is the implementation of a Text-To-Speech (TTS) system that transmits on Simple Radio Standalone (SRS). This allows DCS-gRPC clients as well as lua scripts running inside DCS access to TTS functionality. The TTS system in DCS-gRPC supports the following back-ends for generating speech.

  • Windows TTS (Server 2019 and later)
  • Google Cloud TTS
  • Microsoft Azure TTS
  • Amazon Web Services TTS

This provides a wide variety of voices and providers that can be used together inside a single mission.

We have added a summary of currently implemented APIs online which can be viewed here. For full documentation of current APIs see the 0.7.0 API Documentation page.

Please note that this release is not 100% backwards compatible with 0.7.0 clients. Although we try to avoid breaking changes there is no guarantee while we in the 0 major version. For more information on our versioning policy please see here. Please test any client applications you have written that use DCS-gRPC before deployment.

There are a number of demo client applications for DCS-gRPC. Please see this page for more information on them.

Changelog

Fixed

  • Fixed error when retrieving mark panels (WorldService.GetMarkPanels) when the mark panel was created by a game master / JTAC, or when the player who created the mark panel left. MarkPanel.initiator is now optional. (#156)
  • Fixed scale of blocking time percentage in stats logs.

Added

  • Added SimulationFps event that is fired every second and contains simulation fps information since the last event (i.e. for the past ~1sec).
  • Added GetSessionId API which is refreshed every mission restart to allow clients to know if a new mission has started on client reconnect.
  • Added GetDetectedTargets API. Method follows the DCS implementation of controller's getDetectedTargets. Can optionally also return the unit or weapon objects tracked by the radar.
  • Added orientation and velocity to Unit object
  • Added u/v coordinates (offset from DCS map origin in meters) to Positions used in responses. To not require them in requests, all positions provided in requests got changed to a new InputPosition type (you'll have to update your requests, simply replace Position with InputPosition in them).
  • GetRealTime API
  • Added orientation and velocity to Weapon object
  • Added DCS time of the update to units stream (StreamUnitsResponse)
  • Added GetBallisticsCount API
  • Added TtsService/Transmit to synthesize text to speech and transmit it over SRS
  • Added GRPC.tts(ssml, frequency[, options]) Lua API

Changed

  • Unit objects now return the full group object in the group field to make event processing easier. This replaces the group_name and group_category fields and is a backwards incompatible change.
  • Updated all vectors to be in DCS' coordinate system (+x north, -x south, +z is east, -z west, +y up and -y down)
  • Scenery objects now have an id instead of a name, since dcs associates them with a number.

A New Client Application

We have also added a new client application called lso which saves carrier trap information and optionally allows them to be posted to Discord. This trap information includes LSO comments, a graphical representation of the approach and a Tacview file of the Trap that can be downloaded for closer review.

image

Support & Contact

You can reach us via the Github issues and Discord. We don't think DCS-gRPC requires yet another Discord so we have instead created a DCS-gRPC section on the OverlordBot Discord . You can also find Binary, RurouniJones, j5bit on other DCS related Discords (e.g. The Hoggit Discord).

0.6.0

1 year ago

DCS-gRPC 0.6.0 Released!

For an exaplantion of DCS-gRPC is please see this page

We are pleased to announce version 0.6.0 of DCS-gRPC. This release includes more command and control related APIs for mission loading, static spawn APIs and EDs new OutTextForUnit API as well as some APIs that allow for drawing on the F10 map. We also have a new contributor in the form of MorpheusXAUT of Buddyspike fame who added the GetUnitType API.

We have added a summary of currently implemented APIs online which can be viewed here. For full documentation of current APIs see the 0.6.0 API Documentation page.

Please note that this release is not 100% backwards compatible with 0.5.0 clients. Although we try to avoid breaking changes there is no guarantee while we in the 0 major version. For more information on our versioning policy please see here.

There are a number of demo client applications for DCS-gRPC. Please see this page for more information on them.

Changelog

Added

  • OutTextForUnit API
  • GetStaticObjects API
  • AddStaticObject API (for standard static objects)
  • AddLinkedStatic API (for statics linked to units such as ships)
  • MarkupToAll API
  • MarkupToCoalition API
  • GetTheatre API
  • GetUnitType API
  • ReloadCurrentMission API
  • LoadNextMission API
  • LoadMission API

Fixed

  • Fixed event handler error log missing actual error message (contained nil instead of the message).

Please see the full changelog for the changelog that shows all historical changes.

A New Sample Application

We have also added a new sample application called Custodian which is a Discord Bot that integrates with the new Discord Slash commands to provide you with easy to use, autocompleting, administration APIs for your DCS servers.

Currently these support sending announcements into your servers as well as kicking and banning players using the built-in DCS ban system.

Custodian Demonstration

Custodian is ready to go and can be downloaded here

Installation

To install please download the DCS-gRPC-0.6.0.zip and extract into your DCS Saved Games folder. The README.md contains instructions on how to enable DCS-gRPC on a per-mission basis or on a per-server basis. For ease of use we recommend using the per-server basis.

Make sure your DCS server instance is completely stopped (Not just the mission) when installing DCS-gRPC.

An example mission with DCS-gRPC integration called DCS-gRPC-Example.miz is included in the Missions folder; this example will start DCS-gRPC with the default settings if you have set it up on a per-mission basis. Note that this is not needed if you are setting up DCS-gRPC using the per-server method.

Support & Contact

You can reach us via the Github issues and Discord. We don't think DCS-gRPC requires yet another Discord so we have instead created a DCS-gRPC section on the OverlordBot Discord . You can also find Binary, RurouniJones, j5bit on other DCS related Discords (e.g. The Hoggit Discord).

0.5.0

2 years ago

DCS-gRPC 0.5.0 Released!

We are pleased to announce version 0.5.0 of DCS-gRPC. The main feature of this release is the addition of DCS server command and control APIs that allow DCS-gRPC clients to administer the server.

Note that the new Ban APIs used the built-in DCS ban mechanism. If you want to use SLMod then you can use the SendChat command to send an SLMod formatted chat message to enable SLMod bans.

There will be another 0.6.0 release that will include the mission management APIs such as loading missions and managing the mission rotation list.

We have added a summary of currently implemented APIs online which can be viewed here. For full documentation of current APIs see the 0.5.0 API Documentation page.

Please note that this release is not 100% backwards compatible with 0.4.0. Although we try to avoid breaking changes there is no guarantee while we in the 0 major version. For more information on our versioning policy please see here.

There are a number of demo client applications for DCS-gRPC. Please see this page for more information on them.

Changelog

Added

  • GetMissionFilename API
  • GetPaused API
  • SetPaused API
  • StopMission API
  • ExitProcess API
  • KickPlayer API
  • IsMultiplayer API
  • IsServer API
  • GetMissionDescription API
  • BanPlayer API
  • GetBannedPlayers API
  • UnbanPlayer API

Changed

  • Replaced groupName field in the GroupCommand event with all the group details as exposed by the group exporter (currently id, name, coalition, category). This change was made based on experience writing a client that processes these events where only having the groupName was a limitation. This change breaks backwards compatibility with 0.4.0 where the GroupCommand event was first added.

Please see the full changelog for the changelog that shows all historical changes.

Installation

To install please download the DCS-gRPC-0.5.0.zip and extract into your DCS Saved Games folder. The README.md contains instructions on how to enable DCS-gRPC on a per-mission basis or on a per-server basis. For ease of use we recommend using the per-server basis.

Make sure your DCS server instance is completely stopped (Not just the mission) when installing DCS-gRPC.

An example mission with DCS-gRPC integration called DCS-gRPC-Example.miz is included in the Missions folder; this example will start DCS-gRPC with the default settings if you have set it up on a per-mission basis. Note that this is not needed if you are setting up DCS-gRPC using the per-server method.

Support & Contact

You can reach us via the Github issues and Discord. We don't think DCS-gRPC requires yet another Discord so we have instead created a DCS-gRPC section on the OverlordBot Discord . You can also find Binary and RurouniJones on other DCS related Discords (e.g. The Hoggit Discord).

0.4.0

2 years ago

DCS-gRPC 0.4.0 Released!

We are pleased to announce version 0.3.0 of DCS-gRPC. The main feature of this release is the addition of the Command APIs that allow DCS-gRPC clients to create a command menu structure in the F10 command menu and recieve events when players trigger those commands. This API was created with contributions from Andrei Zbikowski. As well as this we have other new APIs, enhancements to existing APIs, and bug-fixes.

We have added a summary of currently implemented APIs online which can be viewed here. For full documentation of current APIs see the 0.4.0 API Documentation page.

Please note that this release is not 100% backwards compatible with 0.3.0. Although we try to avoid breaking changes there is no guarantee while we in the 0 major version. For more information on our versioning policy please see here.

There are a number of demo client applications for DCS-gRPC. Please see this page for more information on them.

Changelog

Added

  • ForcePlayerSlot API
  • PlayerChangeSlotEvent emitted when player changes slot
  • StreamUnits can optionally specify the category of the units which may be monitored.
  • APIs for creating the F10 radio menus and letting players run them. These will emit events to DCS-gRPC clients when run.

Fixed

  • MarkToCoalition was sending the mark to the incorrect coalition.
  • NetService.GetPlayers overwrote CoalitionService.GetPlayers (see Breaking Changes for details)
  • Corrected proto files from camel-casing to snake-casing; not a runtime breaking change but some code generators may generate different casing by convention, creating a compiler only issue.
    • net.proto - GetPlayerInfo.remote_address
    • mission.proto - PlayerSendChatEvent.player_id
  • Corrected proto files with enumerations to be named correct; compiler-only breaking change, not runtime.
    • coalition.proto - AddGroupRequest.Point - enum Type has been renamed to PointType
    • coalition.proto - AddGroupRequest - enum members of Skill has been prefixed with SKILL_
  • CoalitionService.GetPlayers did not filter correctly on specified coalition
  • StreamUnits would only monitor the Plane groups; now monitors all groups with the default option of GROUP_CATEGORY_UNSPECIFIED

Breaking Changes

  • Added GROUP_CATEGORY_UNSPECIFIED to dcs.v0.common.GroupCategory; breaking change as all indexes have changed.
  • CoalitionService.GetPlayers was renamed to CoalitionService.GetPlayerUnits; fixes conflict with NetService.GetPlayers

Please see the full changelog for the changelog that shows all historical changes.

Installation

To install please download the DCS-gRPC-0.4.0.zip and extract into your DCS Saved Games folder. The README.md contains instructions on how to enable DCS-gRPC on a per-mission basis or on a per-server basis. For ease of use we recommend using the per-server basis.

Make sure your DCS server instance is completely stopped (Not just the mission) when installing DCS-gRPC.

An example mission with DCS-gRPC integration called DCS-gRPC-Example.miz is included in the Missions folder; this example will start DCS-gRPC with the default settings if you have set it up on a per-mission basis. Note that this is not needed if you are setting up DCS-gRPC using the per-server method.

Support & Contact

You can reach us via the Github issues and Discord. We don't think DCS-gRPC requires yet another Discord so we have instead created a DCS-gRPC section on the OverlordBot Discord . You can also find Binary and RurouniJones on other DCS related Discords (e.g. The Hoggit Discord).

0.3.0

2 years ago

DCS-gRPC 0.3.0 Released!

We are happy to announce version 0.3.0 of DCS-gRPC. Development for this release has focused on on simplifying the ways in which DCS-gRPC is configured and initialized. As well as this we have added some more APIs (Thanks to Justin Lovell who is a new contributor), bug fixing, and made some internal reoganisation to make our lives easier. For a list of current APIs see the 0.3.0 API Documentation

Please note that this release is not 100% backwards compatible with 0.2.0. Specifically we have updated the way in which DCS-gRPC is configured and initialised and chat message streaming has been updated. Please see the README.md for information on what has changed. The summary is that we have moved all configuration and initialization out of MissionScripting.lua and that you can choose to do so instead in a new file or in your missions. Please see the README.md for information on how to do it now.

Although we hope to be able to minimise breaking changes from this version going forwards. For more information on our versioning policy please see here.

There are a number of demo client applications for DCS-gRPC. Please see this page for more information on them.

Changelog

Added

  • Generated scaffolding for the net.* scope into NetService
  • SendChat API
  • SendChatTo API
  • GetPlayers API
  • Optional config file at Saved Games\DCS\Config\dcs-grpc.lua
  • Connect and Disconnect events
  • INFO log entry for the the host and port he server listens on
  • DEBUG log entry for all current settings
  • place to LandingQualityMark event

Changed

  • Stream PlayerSendChatEvent to the MissionService.StreamEvents for clients to observe the chat as part of the event stream
  • Fixed an issue where units updates were not being stream after initial load

Removed

  • HookService.StreamChatMessages has been removed in favor for PlayerSendChatEvent
  • Option to specify settings inside of the MissionScripting.lua

Fixed

  • Speed and heading in units stream

Please see here for the changelog that shows all historical changes.

Installation

To install please download the DCS-gRPC-0.3.0.zip and extract into your DCS Saved Games folder. The README.md contains instructions on how to enable DCS-gRPC on a per-mission basis or on a per-server basis.

Make sure your DCS server instance is completely stopped (Not just the mission) when installing DCS-gRPC.

An example mission with DCS-gRPC integration called DCS-gRPC-Example.miz is included in the Missions folder; this example will start DCS-gRPC with the default settings if you have set it up on a per-mission basis.

Support & Contact

You can reach us via the Github issues and Discord. We don't think DCS-gRPC requires yet another Discord so we have instead created a DCS-gRPC section on the OverlordBot Discord . You can also find Binary and RurouniJones on other DCS related Discords (e.g. The Hoggit Discord).

0.2.0

2 years ago

DCS-gRPC 0.2.0 Released!

We are happy to announce version 0.2.0 of DCS-gRPC. Development for this release has focused on reorganising the public API layout to conform to gRPC idoms and make them easier to manage going forwards. We have also added some new APIs and started working on the major task of implementing the AddGroup API. For a list of current APIs see the 0.2.0 API Documentation

Please note that this release is not backwards compatible with 0.1.0 although we hope to be able to minimise breaking changes from this version going forwards. For more information on our versioning policy please see here.

The other major change is in the initialization which removes the need for sanitisation in MissionScripting.lua and also enables the ability to run DCS-gRPC in all missions on the server without needing mission editing.

There are a number of demo client applications for DCS-gRPC. Please see this page for more information on them.

Changelog

Added

  • SetEmission API
  • GetMissionStartTime API
  • GetScenarioCurrentTime API
  • GetBullseye API
  • GetTransform API
  • AddGroup API (Initial version suitable for spawning fixed SAM sites)
  • Eval API executable in the DCS hook environment along with command-line tool
  • Ability to include DCS-gRPC on all server missions without needing to edit the mission
  • Updated Rust version and many Rust dependencies

Changed

  • Split and reorganised APIs into versioned namespaces
  • Switched to a different way of initialising the DCS-gRPC server that does not require sanitisation
  • Changed Enum numbering to allow more idiomatic gRPC usage

Installation

To install please download the DCS-gRPC-0.2.0.zip and extract into your DCS Saved Games folder. The README.md contains instructions on how to enable DCS-gRPC on a per-mission basis or on a per-server basis.

An example mission with DCS-gRPC integration called DCS-gRPC-Example.miz is included in the Missions folder

Support & Contact

You can reach us via the Github issues and Discord. We don't think DCS-gRPC requires yet another Discord so we have instead created a DCS-gRPC section on the OverlordBot Discord . You can also find Binary and RurouniJones on other DCS related Discords (e.g. The Hoggit Discord).

0.1.0

2 years ago

DCS-gRPC 0.1.0 Released!

Binary (the creator of DATIS, DCS-Scratchpad and many other DCS related projects) and RurouniJones (the creator of Overlordbot) are proud to announce our initial 0.1.0 release of DCS-gRPC; an Open Source Remote Procedure Call server for DCS powered by Google's RPC framework and written in Rust.

To install please download the DCS-gRPC-0.1.0.zip and extract into your DCS Saved Games folder. An example mission with DCS-gRPC integration called DCS-gRPC-Example.miz is included in the Missions folder

What is DCS-gRPC?

DCS-gRPC allows you to remotely interact with the scripting environment on a running DCS mission.

This allows scripters to move code, that previously had to run inside the DCS server process, outside of the process. This allows for complex code to be executed with less performance impact on the DCS server itself.

For example: Instead of having an IADS (Integrated Air Defence System) script running inside the DCS process it can do all the detection calculations externally and then only has to tell the DCS mission to turn SAM sites on and off.

Another advantage of using an RPC system is that the scripter has a much greater choice in what scripting language they use. Instead of having to use Lua they can choose to use Python, JavaScript, C#, Java, Ruby and any language supported by gRPC

Sounds nice. But is this relevant to me?

DCS-gRPC is aimed at scripters, mission makers, application developers and multiplayer server-admins who wish to add functionality to their servers and missions while limiting the performance impact. We have already implemented a number of APIs that cover a wide variety of use-cases and are adding more as time goes on. For a list of currently implemented APIs have a look at our API Documentation which is also available in the Docs folder of the download.

Adding new APIs can be done quite easily by anyone as it is 95% lua code and just a bit of Rust boilerplate code. See this commit for an example.

Since this is the initial 0.1.0 release we are still potentially modifying existing APIs as we improve the design so this release is mainly for people to play around, experiment and start prototyping their applications.

DCS-gRPC has already been deployed to the Hoggit servers without any issues.

Do you have some example applications that use DCS-gRPC?

Yes! The server comes with a repl and a copy of grpcurl.exe which can be used for experimentation. These are available in the Tools folder of the download.

As part of this initial release we are also releasing some example client applications that communicate with the DCS-gRPC server. The following examples are all written in C# but you can choose to write your clients in a variety of languages.

Jupiter

Jupiter is an application that will allow someone to act as a GameMaster for a mission. It will allow real-time control of units and other things (Such as placing smoke, flares and Illumination bombs). This application is very much in very incomplete ALPHA state and is included here to demonstrate what is possible.

Download here

Jupiter screenshot

DCScribe

DCScribe is a program that makes use of the unit streaming ability of DCS-gRPC to stream the position information of units and write them to a PotsgreSQL database. This data in the database can then be used for various purposes such as an online map.

Download here

DCScribe & PostgreSQL screenshot

SimpleAirDefence

A simple example Integrated Air Defence System. Note that this is a very simple example. It does not have most of the features that Skynet IADS has for example. However it demonstrates the possibilities.

Download here

SimpleAirDefense screenshot

OverlordBot

OverlordBot already uses DCS-gRPC on the Syria-At-War server to implement the mission request and mission join functionality. It also uses DCS-gRPC to send start-up and shutdown messages into the server. As time goes on more and more functions in OverlordBot will start using DCS-gRPC to make OverlordBot better.

Support & Contact

You can reach us via the Github issues and Discord. We don't think DCS-gRPC requires yet another Discord so we have instead created a DCS-gRPC section on the OverlordBot Discord . You can also find Binary and RurouniJones on other DCS related Discords (e.g. The Hoggit Discord).