Para muitos desenvolvedores, o desafio fundamental de se adaptar à scriptagem no Roblox é a importância da localização do arquivo e a propriedade Script.RunContext. Dependendo do tipo de script, da localização no Explorer e do contexto de execução, os scripts podem se comportar de maneiras muito diferentes. Certas chamadas de método podem falhar, objetos em seu jogo podem ser inacessíveis ou os scripts podem nem ser executados.
A razão para essa complexidade é que os jogos Roblox são multiplayer por padrão. Os scripts precisam ter a capacidade de serem executados apenas no servidor, apenas no cliente ou serem compartilhados entre ambos. A evolução da plataforma Roblox ao longo do tempo complicou ainda mais a situação.
Tipos de script
O Roblox possui três tipos de scripts:
- Script - Código que é executado no servidor ou no cliente, dependendo de sua localização e da propriedade Script.RunContext.
- LocalScript - Código que é executado apenas no cliente. Não possui um contexto de execução.
- ModuleScript - Código que você pode reutilizar em outros scripts. Não possui um contexto de execução.
Quando você cria um Script, seu contexto de execução padrão é Legacy, o que significa que a) é um script do lado do servidor e b) só é executado se estiver em um contêiner de servidor, como Workspace ou ServerScriptService.
- Se você alterar o contexto de execução do script para Server, ele também pode ser executado em ReplicatedStorage, mas isso não é recomendado. O conteúdo dessa localização é replicado para os clientes, portanto, é uma má localização para scripts do lado do servidor.
- Se você alterar o contexto de execução do script para Client, ele pode ser executado em ReplicatedStorage. Ele também pode ser executado em StarterCharacterScripts e StarterPlayerScripts. Os contêineres do Starter são copiados para os clientes, então, o script original e a cópia são executados, o que não é desejável.
Para alterar o contexto de execução de um script, selecione-o no Explorer e altere o valor na janela Properties.

Recomendações
Coloque scripts do cliente em ReplicatedStorage com um RunContext de Client ao lado de ModuleScripts apenas do cliente.
Ao depurar no Studio, você pode clicar em linhas na janela Output e ir para ReplicatedStorage.YourScript (a localização estável do script) em vez de Players.YourName.PlayerScripts.YourScript (a localização efêmera para a qual o script foi copiado em tempo de execução).
Coloque scripts do servidor em ServerScriptService com um RunContext de Server ao lado de ModuleScripts apenas do servidor.
Para compartilhar código entre scripts do servidor e do cliente, use ModuleScripts em ReplicatedStorage.
Coloque o menor número possível de scripts do cliente (como um script de carregamento) em ReplicatedFirst com um RunContext de Client. Para saber mais, veja Ordem de replicação.
Use LocalScripts em StarterCharacterScripts, StarterPlayerScripts, StarterGui e StarterPack.
Localizações de script
| Location | Description |
|---|---|
| Workspace | Representa o mundo 3D do jogo. Esta localização funciona bem para scripts de servidor que se conectam diretamente a objetos e controlam seu comportamento. |
| ReplicatedFirst | Contém objetos que são replicados para o cliente antes de qualquer outra coisa. Esta localização é ideal para o conjunto mínimo absoluto de objetos e scripts de cliente necessários para exibir uma tela de carregamento. |
| ReplicatedStorage | Contém objetos que são replicados tanto para o cliente quanto para o servidor. Esta localização é ideal para MódulosScript que você deseja usar tanto no servidor quanto no cliente. ScriptsLocais não são executados a partir desta localização, mas Scripts com um ContextoExecução de Cliente são. |
| ServerScriptService | Contém scripts do servidor. Esta localização é ideal para scripts que precisam acessar funcionalidades ou objetos do lado do servidor, como lógica de jogo e armazenamento em nuvem. |
| ServerStorage | Contém objetos do lado do servidor. Esta localização é ideal para objetos grandes que não precisam ser replicados imediatamente para os clientes quando eles entram no jogo. Scripts não são executados a partir desta localização, mas você pode armazenar MódulosScript do lado do servidor aqui. |
| StarterPlayer ⟩ StarterCharacterScripts | Contém ScriptsLocais que são executados quando o personagem surge. |
| StarterPlayer ⟩ StarterPlayerScripts | Contém ScriptsLocais de uso geral que são executados quando o jogador entra no jogo. |
| StarterGui | Contém elementos de GUI que o cliente exibe quando carrega o jogo. ScriptsLocais podem ser executados a partir desta localização. Esta localização é ideal para scripts que modificam a interface do usuário do jogo, como adicionar botões, menus e pop-ups. |
| StarterPack | Geralmente contém apenas Ferramentas, mas também pode incluir ScriptsLocais para configurar mochilas de jogadores. |
Esta imagem mostra quais localizações na janela Explorer podem conter scripts do cliente. Lembre-se, ReplicatedFirst e ReplicatedStorage podem conter Scripts com um RunContext de Client, enquanto os contêineres Starter[] devem usar LocalScripts.

Estrutura de projeto de exemplo
O projeto de referência Plant mostra como você pode organizar seu código em um jogo grande e complexo.
É particularmente notável como ele armazena a vasta maioria de seu código como ModuleScripts reutilizáveis em ReplicatedStorage e ServerStorage.