Summary of VoN improvements: - A new codec implementation based on Opus. Selection of the codec implementation is possible with 'vonCodec' parameter in server.cfg (https://community.bistudio.com/wiki/server.cfg). - Optimization of the VoN messages retranslation: Previously when a client wanted to send a message to a list of targets (receivers), for every target a decision was made - to send it directly or to request retranslation through the server. That behaviour could result in many messages being sent to the server for retranslation differing only in the receive target, the data was identical. Thus exceeding the network bandwidth-limitation some messages were delayed or omitted. The situation worsened as the client's connection quality decreased or the number of targets increased. The optimization is based on the idea to send the message data to the server only once with a list of retranslation targets. - Match-global settings for communications usage: Along with the separation of the Chat and VoN channels came a way to configure how those can be used through the server.cfg or description.ext. The syntax for 'disableChannels' was expanded so that there are two ways to configure this:
disableChannels[]={channelID, channelID, ...}; // old syntax
disableChannels[]={{channelID, disableChat<bool>, disableVoice<bool>},{channelID, disableChat<bool>, disableVoice<bool>},...}; // new syntax
The 'disableChannels' attribute can be specified both in server.cfg and description.ext and the following are the conflicts resolution rules:
if (desc.ext has 'disableChannels') then {
// settings from desc.ext will be used
} else if (server.cfg has 'disableChannels') then {
// settings from server.cfg will be used
}
if ('disableChannels' in server.cfg was overriden in desc.ext)
// Print a warning message into the server RPT
if ('disableChannels' is an array) then {
if (its first element is an array) then {
if (it has 3 elements) then {
// We assume the new syntax is used.
} else {
// Print a warning message into the server RPT that
// a 3-element array was expected.
}
} else {
// We assume the old syntax is used.
}
}
Simply put, the settings from description.ext have higher priority over those in server.cfg, if any. This was done so to preserve the mission maker's intentions to how communications should be used. On the script side two existing commands were extended to support working with Chat and Voice channels separately:
<channel> enableChannel [<VoN>, <chat>];
Example:
1 enableChannel [false, true]; // Will disable chat and enable voice on the side channel.
The old format for 'channelEnabled' <bool> = channelEnabled <channel> is now deprecated, please use the following syntax:
[<chatEnabled>, <voiceEnabled>] = channelEnabled <channel>
Example:
_isGlobalChatEnabled = (channelEnabled 0) select 0; // Check if user can use text on global channel
_isGlobalVoiceEnabled = (channelEnabled 0) select 1; // Check if user can use the VoN on global channel
We're considering improving the whole communication system even further, especially on the part of the player's safety - going away from direct (P2P) VoN will prevent the inventive players (hackers?) to misuse other players' IPs, which are easily available when there is no retranslation through the server, for any kinds of exploitation or DoS abuse. On the usability side a massive overhaul is in progress, including but not limited to separation of Chat and VoN channels, easily accessible muting of specific players or the whole channels and match-global settings for the communications usage. Our internal tests already show significant improvements both in the network traffic and overall performance of VoN communications during massive multiplayer battles with the purposely highly stressed server, and yet there is even more to come.