# Networking # Singleplayer Singleplayer is the easiest of all, as there's no networking, so everything is already synced for you! In singleplayer the global variable `CLIENT` is set to true and `Game.IsSingleplayer` is also true. # Server The server is responsible for receiving inputs from clients and syncing state with all other clients. The global variable `SERVER` is set to true if we are a server. The only difference between a **Dedicated Server** and a **Player-Hosted Server** in Barotrauma is the fact that the latter uses Steam Networking to communicate with clients, if you for some reason want to know if you are running inside a Dedicated Server, you can use `Game.IsDedicated`. # Client The client is the one who connects to servers. The global variable `CLIENT` is set to true and `Game.IsMultiplayer` is also true. # Syncing ## Serializable Properties Serializable Properties are special members that are able to be synced with clients (and also with the server in some cases), they are very useful for server-side only code. Example showing how to sync the sprite color of an item without any client-side code: ``` local item = ... item.SpriteColor = Color(0, 0, 255, 255) local property = item.SerializableProperties[Identifier("SpriteColor")] Networking.CreateEntityEvent(item, Item.ChangePropertyEventData(property, item)) ``` This is also possible to do with item components: ``` local item = ... local light = item.GetComponentString("LightComponent") light.LightColor = Color(0, 0, 255, 255) local property = light.SerializableProperties[Identifier("LightColor")] Networking.CreateEntityEvent(item, Item.ChangePropertyEventData(property, light)) ``` ## Sending Custom Net Messages This is one of the ways you can send data between the client and server. Example on sending data from client to server ``` if CLIENT then -- send from client to server local message = Networking.Start("something") message.WriteString("hello") Networking.Send(message) end if SERVER then -- receive in server Networking.Receive("something", function(message, client) print(client.Name .. " sent " .. message.ReadString()) end) end ``` Example on sending data from server to client ``` if CLIENT then Networking.Receive("something", function(message) print(message.ReadString()) end) end if SERVER then -- send from server to client local message = Networking.Start("something") message.WriteString("hello") Networking.Send(message, Client.ClientList[1].Connection) end ```