# How to... ?

## Connect

All Clients have to connect to a Replication Server, which can [run locally](https://docs.coherence.io/setup-a-project/local-development#run-a-local-replication-server) or [in our cloud](https://docs.coherence.io/getting-started/setup-a-project/test-in-the-cloud/deploy-replication-server).

## Spawn the player

There is no specific place to designate a special [player Prefab](https://docs.coherence.io/manual/networking-state-changes/instantiate-and-destroy-objects#how-do-i-specify-a-prefab-to-spawn-for-the-player). Any script can create it, by just instantiating a Prefab.

## Spawn or destroy a network entity

Spawning is done by simply instantiating a Prefab that has a CoherenceSync, using the `Instantiate()` API. Same for removing entities, using the `Destroy()` API. Read more about [instantiating and destroying](https://docs.coherence.io/manual/networking-state-changes/instantiate-and-destroy-objects).

## Synchronise a value over the network

Syncing individual values of the [supported types](https://docs.coherence.io/manual/networking-state-changes/supported-types) can simply be done using the [CoherenceSync component](https://docs.coherence.io/manual/components/coherence-sync). If a type is not supported, you can send the value using a [Network Command](https://docs.coherence.io/manual/networking-state-changes/commands) as an index, or by reducing it to a byte array, and reconstructing it on arrival.

## Find other connected Clients

[ClientConnections](https://docs.coherence.io/manual/client-connections) provide a view on who is connected at any given time.

## Send a message to another Client

Messages (or RPCs) in coherence are called [Network Commands](https://docs.coherence.io/manual/networking-state-changes/commands). We also have a video on <img src="https://content.gitbook.com/content/CMCtKgV0bk1lwR4tWK3W/blobs/90wxk5XKmganF0PRry86/Youtube%20Play%20Button.png" alt="" data-size="line"> [Authority and Commands](https://youtu.be/Ql2w10nJl80?si=oP7ma7LElsCRB76p).

## Move all connected Clients to a new scene together

To make all connected Clients move to a new scene, you can create a method that loads the scene and mark it as a [Network Command](https://docs.coherence.io/manual/networking-state-changes/commands). Then, from one of the Clients you would send that Network Command on all others (and to themselves) by selecting as destination `MessageTarget.All`.

## Run logic on the server

Servers in coherence are called [Simulators](https://docs.coherence.io/manual/simulation-server). You can also watch an <img src="https://content.gitbook.com/content/CMCtKgV0bk1lwR4tWK3W/blobs/90wxk5XKmganF0PRry86/Youtube%20Play%20Button.png" alt="" data-size="line"> [Overview of Simulators](https://www.youtube.com/watch?v=v5Ch701Poqg).

## Do client-side prediction

To allow client-side prediction, start by [disabling automatic updates](https://docs.coherence.io/manual/authority/server-authoritative-setup#client-side-prediction) on the properties you want to do prediction for. Implement your prediction code, and listen for incoming updates by [hooking into update callbacks](https://docs.coherence.io/manual/authority/server-authoritative-setup#misprediction-and-reconciliation). When the update arrives, you can reconcile the predicted state and the new, incoming sample in a way that fits your game best.

## Create a chat

To create a [simple in-game chat](https://docs.coherence.io/getting-started/samples-and-tutorials/campfire-project/a-simple-text-chat) functionality, you can leverage Network Commands to send strings (or byte arrays) to all connected Clients.

A pre-game chat can also be created by leveraging [Lobbies](https://docs.coherence.io/hosting/coherence-cloud/game-services/lobbies).
