Releases: DCS-gRPC/rust-server
Land/Takeoff events added after ED change in 2.9.6
DCS-gRPC 0.8.1 Released!
For context:
In release 2.9.6 a change to the behaviour of land and takeoff events was made by ED.
This might cause some unexpected delay/issues.
To summize the new behaviour since 2.9.6:
S_EVENT_LAND
: Occurs when an aircraft lands at an airbase, farp or ship and sufficiently slows down.S_EVENT_TAKEOFF
: Occurs when an aircraft takes off from an airbase, farp, or ship. Occurs several seconds after take-off.S_EVENT_RUNWAY_TOUCH
: Occurs the moment when the player aircraft aircraft lands at an airbase, farp or ship.S_EVENT_RUNWAY_TAKEOFF
: Occurs when an aircraft leaves the ground and takes off.
Previously the S_EVENT_LAND
and S_EVENT_TAKEOFF
would trigger instantly, but they only change now when DCS logically assumes a successful takeoff/landing.
S_EVENT_RUNWAY_TOUCH
and S_EVENT_RUNWAY_TAKEOFF
were (assumingly) added to still expose the earlier behaviour.
With Version 0.8.1 of DCS-gRPC these new events are now added for implementation by clients.
Changelog
Added
- Events
OnRunwayTouch
andRunwayTakeoff
for "changed" TakeOff and Landing logic in DCS.
SRS Client Info and gRPC client authentication
DCS-gRPC 0.8.0 Released!
We are pleased to announce version 0.8.0 of DCS-gRPC
Main features of this release are improved SRS interfacing, with connect and disconnect events and the ability to get all clients with their frequency, and a optional gRPC client authentication layer for more fine grained control of applications connecting to the rust-server.
Aside from these changes there have been more APIs for DCS functionality exposed.
We have added a summary of currently implemented APIs online which can be viewed here. For full documentation of current APIs see the 0.8.0 API Documentation page.
Changelog
Breaking Changes
- Renamed
TtsService
toSrsService
Added
- Added
ActivateGroup
API which allows to activate groups with late activation. - Added
DestroyGroup
API which removes the entire group from the game world. - Added
DestroyUnit
API - Added
GetClients
toSrsService
, which retrieves a list of units that are connected to SRS and the frequencies they are connected to. - Added
SrsConnectEvent
andSrsDisconnectEvent
events - Added
GetDrawArgumentValue
API for units, which returns the value for drawing. (useful for "hook down", "doors open" checks) - Added
MetadataService
withGetHealth
andGetVersion
for quick checks on health (even when DCS mission is unresponsive) and version. - Added Authentication Interceptor. This enables authentication on a per client basis.
Fixed
- Fixed
MarkAddEvent
,MarkChangeEvent
andMarkRemoveEvent
position - Fixed crash of concurrent Windows TTS synthesis (#223)
- Fixed file handler left open: Closing config file again after reading it in LUA
- Fixed the config value for
tts.defaultProvider
for Google Cloud to be lowercasegcloud
(instead ofgCloud
) - Fixed error with getCategory due to API changes in DCS (#246)
- Fixed export of airbase objects by filtering out ships that are no longer part of a group due to damage
- Fixed `onPlayerTrySendChat``returning a value and therefore stopping other scripts from reacting to the event
Hotfix and Tripwires
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).
Five by five
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
andvelocity
toUnit
object - Added
u
/v
coordinates (offset from DCS map origin in meters) toPosition
s used in responses. To not require them in requests, all positions provided in requests got changed to a newInputPosition
type (you'll have to update your requests, simply replacePosition
withInputPosition
in them). GetRealTime
API- Added
orientation
andvelocity
toWeapon
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 thegroup_name
andgroup_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 aname
, 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.
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).
We control the vertical
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
APIGetStaticObjects
APIAddStaticObject
API (for standard static objects)AddLinkedStatic
API (for statics linked to units such as ships)MarkupToAll
APIMarkupToCoalition
APIGetTheatre
APIGetUnitType
APIReloadCurrentMission
APILoadNextMission
APILoadMission
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 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).
We control the horizontal
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
APIGetPaused
APISetPaused
APIStopMission
APIExitProcess
APIKickPlayer
APIIsMultiplayer
APIIsServer
APIGetMissionDescription
APIBanPlayer
APIGetBannedPlayers
APIUnbanPlayer
API
Changed
- Replaced
groupName
field in theGroupCommand
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 theGroupCommand
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).
At your command!
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
APIPlayerChangeSlotEvent
emitted when player changes slotStreamUnits
can optionally specify thecategory
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
overwroteCoalitionService.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
- enumType
has been renamed toPointType
coalition.proto
-AddGroupRequest
- enum members ofSkill
has been prefixed withSKILL_
CoalitionService.GetPlayers
did not filter correctly on specified coalitionStreamUnits
would only monitor thePlane
groups; now monitors all groups with the default option ofGROUP_CATEGORY_UNSPECIFIED
Breaking Changes
- Added
GROUP_CATEGORY_UNSPECIFIED
todcs.v0.common.GroupCategory
; breaking change as all indexes have changed. CoalitionService.GetPlayers
was renamed toCoalitionService.GetPlayerUnits
; fixes conflict withNetService.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).
More Progress
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 intoNetService
SendChat
APISendChatTo
APIGetPlayers
API- Optional config file at
Saved Games\DCS\Config\dcs-grpc.lua
Connect
andDisconnect
events- INFO log entry for the the host and port he server listens on
- DEBUG log entry for all current settings
place
toLandingQualityMark
event
Changed
- Stream
PlayerSendChatEvent
to theMissionService.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 forPlayerSendChatEvent
- 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).
API Refactoring Release
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
APIGetMissionStartTime
APIGetScenarioCurrentTime
APIGetBullseye
APIGetTransform
APIAddGroup
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).
Initial Release
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
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
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
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).