279 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			279 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Salty Chat in Lua for [FiveM](https://fivem.net/)
 | |
| 
 | |
| [](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)
 | 
