Main/resources/[voice]/saltychat/README.md

280 lines
12 KiB
Markdown
Raw Normal View History

2025-06-07 08:51:21 +02:00
# Salty Chat in Lua for [FiveM](https://fivem.net/)
[![Hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2FFirstWiseman%2Fsaltychat-fivem-lua&count_bg=%239B0000&title_bg=%23202020&icon=lua.svg&icon_color=%23E7E7E7&title=Lua+Lovers&edge_flat=false)](https://hits.seeyoufarm.com)
An example implementation of Salty Chat for [FiveM](https://fivem.net/) OneSync and OneSync Infinity.
Join the [Discord](https://gaming.v10networks.com/Discord) of @v10networkscom and start with [Salty Chat](https://gaming.v10networks.com/SaltyChat)!
Also checkout my [Discord](https://wise-scripts.vip/discord) for any questions about the Saltychat Lua version.
You can report bugs or make sugguestions via issues, or contribute via pull requests - we appreciate any contribution.
# Setup Steps
Before starting with the setup, make sure you have OneSync enabled and your server artifacts are up to date.
1. Download the latest [release](https://github.com/FirstWiseman/saltychat-fivem-lua/releases) and extract it into your resources
2. Add `start saltychat` in your `server.cfg`
3. Open `shared/Configuration.lua` and adjust the [variables](https://github.com/v10networkscom/saltychat-docs/blob/master/setup.md#config-variables)
```
"VoiceEnabled": true,
"ServerUniqueIdentifier": "NMjxHW5psWaLNmFh0+kjnQik7Qc=",
"MinimumPluginVersion": "",
"SoundPack": "default",
"IngameChannelId" : 25,
"IngameChannelPassword": "5V88FWWME615",
"SwissChannelIds": [ 61, 62 ],
```
4. (Optional) Change keybinds in `shared/Configuration.lua`, see [default values](https://github.com/FirstWiseman/saltychat-fivem-lua#keybinds) below
5. (Optional) Look into our recommended [TeamSpeak server settings](https://github.com/v10networkscom/saltychat-docs#teamspeak-server-settings)
**Attantion**: CFX team implemented a NUI blacklist and blocked local (`127.0.0.1` and `localhost`) WebSocket connections.
If the clientside can't connect to the WebSocket, make sure that you can resolve `lh.v10.network`:
1. Open `Windows Command Prompt` by searching `cmd`
2. Execute `nslookup lh.v10.network`
If it resolved to `127.0.0.1` then your issue is probably somewhere else, if not then you can use e.g. [Google DNS servers](https://developers.google.com/speed/public-dns/docs/using#addresses).
# Config
Variable | Type | Description
------------- | ------------- | -------------
VoiceRanges | `float[]` | Array of possible voice ranges
EnableVoiceRangeNotification | `bool` | Enables/disables a notification when chaning the voice range
VoiceRangeNotification | `string` | Text of the notification when changing the voice range, `{voicerange}` will be replaced by the voice range
IgnoreInvisiblePlayers | `bool` | Sets invisible players as distance culled to ignore them in proximity calculations
RadioType | `int` | Radio type which will be used for radio communication - [see possible values](https://github.com/v10networkscom/saltychat-docs/blob/master/enums.md#radio-type)
EnableRadioHardcoreMode | `bool` | Limits some radio functions like using the radio while swimming/diving and allows only one sender at a time
UltraShortRangeDistance | `float` | Maximum range of USR radio mode
ShortRangeDistance | `float` | Maximum range of SR radio mode
LongRangeDistace | `float` | Maximum range of LR radio mode
MegaphoneRange | `float` | Range of the megaphone (only available while driving a police car)
VariablePhoneDistortion | `bool` | Enables/disables variable phone distortion based on position of players
NamePattern | `string` | Naming schema of TeamSpeak clients, `{serverid}` will be replaced by the FiveM server ID of the client, `{playername}` by the name of the client and `{guid}` by a generated GUID
RequestTalkStates | `bool` | Enables/disables [TalkState's](https://github.com/v10networkscom/saltychat-docs/blob/master/commands.md#11--talkstate)
RequestRadioTrafficStates | `bool` | Enables/disables [RadioTrafficState's](https://github.com/v10networkscom/saltychat-docs/blob/master/commands.md#33--radiotrafficstate)
# Keybinds
Below are the default keybinds which will be written to your client config (`%appdata%\CitizenFX\fivem.cfg`).
Changing the default values wont change the values saved to your config.
Keybinds can be changed in game through the keybinding options of GTA V (`ESC` > `Settings` > `Key Bindings` > `FiveM`).
Default keybinds can be changed in `shared/Configuration.lua`, see [FiveM docs](https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/) for possible values.
Variable | Description | Default
:---: | :---: | :---:
ToggleRange | Toggles voice range | F1
TalkPrimary | Talk on primary radio | N
TalkSecondary | Talk on secondary radio | Caps
TalkMegaphone | Use the Megaphone (only in police vehicles) | B
# Events
## Client
### SaltyChat_PluginStateChanged
Parameter | Type | Description
------------ | ------------- | -------------
pluginState | `int` | Current state of the plugin (e.g. client is in a swiss channel), see [GameInstanceState](https://github.com/v10networkscom/saltychat-docs/blob/master/enums.md#game-instance-state) for possible values
### SaltyChat_TalkStateChanged
Parameter | Type | Description
------------ | ------------- | -------------
isTalking | `bool` | `true` when player starts talking, `false` when the player stops talking
### SaltyChat_VoiceRangeChanged
Parameter | Type | Description
------------ | ------------- | -------------
voiceRange | `float` | current voice range
index | `int` | index of the current voice range (starts at `0`)
availableVoiceRanges | `int` | count of available voice ranges
### SaltyChat_MicStateChanged
Parameter | Type | Description
------------ | ------------- | -------------
isMicrophoneMuted | `bool` | `true` when player mutes mic, `false` when the player unmutes mic
### SaltyChat_MicEnabledChanged
Parameter | Type | Description
------------ | ------------- | -------------
isMicrophoneEnabled | `bool` | `false` when player disabled mic, `true` when the player enabled mic
### SaltyChat_SoundStateChanged
Parameter | Type | Description
------------ | ------------- | -------------
isSoundMuted | `bool` | `true` when player mutes sound, `false` when the player unmutes sound
### SaltyChat_SoundEnabledChanged
Parameter | Type | Description
------------ | ------------- | -------------
isSoundEnabled | `bool` | `false` when player disabled sound, `true` when the player enabled sound
### SaltyChat_RadioChannelChanged
Parameter | Type | Description
------------ | ------------- | -------------
radioChannel | `string` | Name of the radio channel, `null` if channel was left
isPrimaryChannel | `bool` | `true` when chanel is primary, `false` when secondary
### SaltyChat_RadioTrafficStateChanged
Parameter | Type | Description
------------ | ------------- | -------------
primaryReceive | `bool` | `true` when radio traffic is received on primary radio channel
primaryTransmit | `bool` | `true` when radio traffic is transmitted on primary radio channel
secondaryReceive | `bool` | `true` when radio traffic is received on secondary radio channel
secondaryTransmit | `bool` | `true` when radio traffic is transmitted on secondary radio channel
# Exports
## Client
### GetVoiceRange
Returns the current voice range as float.
### GetRadioChannel
Get the current radio channel.
Parameter | Type | Description
------------ | ------------- | -------------
primary | `bool` | Whether to get the primary or secondary channel
### GetRadioVolume
Returns the current radio volume as float (0.0f - 1.6f).
### GetRadioSpeaker
Returns the current state of the radio speaker as bool (`true` speaker on, `false` speaker off).
### GetMicClick
Returns the current state of radio mic clicks as bool (`true` enabled, `false` disabled).
### SetRadioChannel
Set the current radio channel.
Parameter | Type | Description
------------ | ------------- | -------------
radioChannelName | `string` | Name of the radio channel
primary | `bool` | Whether to set the primary or secondary channel
### SetRadioVolume
Adjust the radio's volume
Parameter | Type | Description
------------ | ------------- | -------------
volumeLevel | `float` | Overrides the volume in percent (0f - 1.6f / 0 - 160%)
### SetRadioSpeaker
Turn the radio speaker on (`true`) or off (`false`).
Parameter | Type | Description
------------ | ------------- | -------------
isRadioSpeakEnabled | `bool` | `true` to enable speaker, `false` to disable speaker
### SetMicClick
Turn radio mic clicks on (`true`) or off (`false`).
Parameter | Type | Description
------------ | ------------- | -------------
isMicClickEnabled | `bool` | `true` to enable mic clicks, `false` to disable mic clicks
## Server
### GetPlayerAlive
Returns player `IsAlive` flag as `bool`.
Parameter | Type | Description
------------ | ------------- | -------------
netId | `int` | Server ID of the player
### SetPlayerAlive
Sets player `IsAlive` flag.
Parameter | Type | Description
------------ | ------------- | -------------
netId | `int` | Server ID of the player
isAlive | `bool` | `true` if player is alive, otherwise `false`
### GetPlayerVoiceRange
Returns player voice range as `float`.
Parameter | Type | Description
------------ | ------------- | -------------
netId | `int` | Server ID of the player
### SetPlayerVoiceRange
Sets player voice range.
Parameter | Type | Description
------------ | ------------- | -------------
netId | `int` | Server ID of the player
voiceRange | `float` | Voice range that should be set
### AddPlayerToCall
Adds a player to a call, creates call if it doesn't exist.
Parameter | Type | Description
------------ | ------------- | -------------
callIdentifier | `string` | Identifier of the call
playerHandle | `int` | Server ID of the player
### AddPlayersToCall
Adds an array of players to a call, creates call if it doesn't exist.
Parameter | Type | Description
------------ | ------------- | -------------
callIdentifier | `string` | Identifier of the call
playerHandles | `int[]` | Server IDs of the players
### RemovePlayerFromCall
Removes a player from a call.
Parameter | Type | Description
------------ | ------------- | -------------
callIdentifier | `string` | Identifier of the call
playerHandle | `int` | Server ID of the player
### RemovePlayersFromCall
Removes an array of players from a call.
Parameter | Type | Description
------------ | ------------- | -------------
callIdentifier | `string` | Identifier of the call
playerHandles | `int[]` | Server IDs of the players
### SetPhoneSpeaker
Turns phone speaker of an player on/off.
Parameter | Type | Description
------------ | ------------- | -------------
playerHandle | `int` | Server ID of the player
toggle | `bool` | `true` to turn on speaker, `false` to turn it off
### SetPlayerRadioSpeaker
Turns radio speaker of an player on/off.
Parameter | Type | Description
------------ | ------------- | -------------
netId | `int` | Server ID of the player
toggle | `bool` | `true` to turn on speaker, `false` to turn it off
### GetPlayersInRadioChannel
Returns an `int` array with all player handles that are members of the specified radio channel.
Parameter | Type | Description
------------ | ------------- | -------------
radioChannelName | `string` | Name of the radio channel
### SetPlayerRadioChannel
Sets a player's radio channel.
Parameter | Type | Description
------------ | ------------- | -------------
netId | `int` | Server ID of the player
radioChannelName | `string` | Name of the radio channel
isPrimary | `bool` | `true` to set the channel as primary, `false` to set it as secondary
### RemovePlayerRadioChannel
Removes a player from the radio channel.
Parameter | Type | Description
------------ | ------------- | -------------
netId | `int` | Server ID of the player
radioChannelName | `string` | Name of the radio channel
### SetRadioTowers
Sets the radio towers.
Parameter | Type | Description
------------ | ------------- | -------------
towers | `float[][]` | Array with radio tower positions and ranges (X, Y, Z, range)