> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Início rápido de Lua para Defold

> Configure um projeto Defold e faça sua primeira chamada à API do PlayFab em Lua usando o SDK de cliente do PlayFab para Defold no desenvolvimento de jogos multiplataforma.

Este início rápido ajuda você a fazer sua primeira chamada à API do PlayFab usando o Defold.

Antes de chamar qualquer API do PlayFab, você precisa ter uma [conta de desenvolvedor do PlayFab](https://developer.playfab.com).

## Configuração do projeto Defold

SO: Este guia foi escrito para o Windows 10. Ele também deve funcionar bem em um Mac.

1. Crie uma conta e baixe o Defold, ou entre em [https://www.defold.com/](https://www.defold.com/) (usa Google O-Auth): [https://d.defold.com/stable/](https://d.defold.com/stable/).

2. Se você ainda não concluiu o "Getting Started Tutorial" do Defold, faça isso agora.

3. Crie um novo projeto no Defold Dashboard, conforme mostrado abaixo.

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/lua/defold-add-project.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=cb5e329e814177d3456031004cccfe39" alt="Create new Defold project" width="162" height="376" data-path="images/playfab/sdks/lua/defold-add-project.png" />

4. Execute o **Defold** e carregue seu novo projeto. Você verá várias janelas parecidas com o exemplo mostrado abaixo.

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/lua/defold-dashboard.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=3451047b4d248b54063ae35d647b01f4" alt="Defold dashboard" width="1626" height="1360" data-path="images/playfab/sdks/lua/defold-dashboard.png" />

5. Atualize as configurações do projeto (Project Settings) e inclua o PlayFab nas dependências:

   [https://github.com/PlayFab/LuaSdk/raw/master/Defold/PlayFabClientSdk.zip](https://github.com/PlayFab/LuaSdk/raw/master/Defold/PlayFabClientSdk.zip)

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/lua/defold-dependency-1.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=801a76d9fbd6fd3c4d1c2674a6cae4be" alt="Add PlayFab to dependencies" width="865" height="294" data-path="images/playfab/sdks/lua/defold-dependency-1.png" />

6. Selecione: **Project** -> **Fetch Libraries**, e você verá uma nova pasta interna do PlayFab, conforme mostrado abaixo.

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/lua/defold-dependency-2.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=ce12f4685d293dc015acdf6132997d53" alt="Project fetch libraries" width="812" height="289" data-path="images/playfab/sdks/lua/defold-dependency-2.png" />

7. Crie alguns arquivos:

   * **main/PfGettingStarted.gui**

   * Selecione a pasta "main" -> **new** -> **Gui File** -> **PfGettingStarted.gui**.

   * **main/PfGettingStarted.gui\_script**

   * Selecione a pasta "main" -> **new** -> **Gui Script File** -> **PfGettingStarted.gui\_script**.

8. Conecte nossa nova GUI em main.collection.

   * Selecione main.collection para abri-lo.

   * No painel Outline:
     * Selecione **Add Game Object** (opcionalmente, renomeie para **PfGui**).
       * Selecione o novo objeto, **Add Component From File...**
         * PfGettingStarted.gui (criado acima).

   * O painel Outline exibindo main.collection deve ficar parecido com o exemplo mostrado abaixo.

     <img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/lua/defold-main-outline.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=cdc7b1fa9078bf5fcd4bb85877858a7a" alt="Main Outline panel" width="259" height="110" data-path="images/playfab/sdks/lua/defold-main-outline.png" />

A instalação do PlayFab está concluída. Este projeto ainda não está pronto para ser compilado, mas vamos corrigir isso na próxima etapa.

## Configurar sua primeira chamada à API

Este guia fornecerá as etapas mínimas para fazer sua primeira chamada à API do PlayFab. A confirmação ficará visível na janela do jogo.

1. No editor do Defold, clique duas vezes em **PfGettingStarted.gui\_script**.

2. Isso deve abrir o arquivo para edição de texto.

3. Atualize o conteúdo de PfGettingStarted.gui\_script conforme mostrado abaixo.

<Note>
  Para consultar o formato correto do objeto loginRequest neste exemplo, consulte a referência da API de [LoginWithCustomID](xref:titleid.playfabapi.com.client.authentication.loginwithcustomid).
</Note>

```gui_script theme={null}
local PlayFabClientApi = require("PlayFab.PlayFabClientApi")
local IPlayFabHttps = require("PlayFab.IPlayFabHttps")
local PlayFabHttps_Defold = require("PlayFab.PlayFabHttps_Defold")
IPlayFabHttps.SetHttp(PlayFabHttps_Defold) -- Assign the Defold-specific IHttps wrapper

PlayFabClientApi.settings.titleId = "144" -- Please change this value to your own titleId from PlayFab Game Manager

function init(self)
    local loginRequest = {
        -- See the API reference for LoginWithCustomID
        TitleId = PlayFabClientApi.settings.titleId,
        CustomId = "GettingStartedGuide",
        CreateAccount = true
    }
    PlayFabClientApi.LoginWithCustomID(loginRequest, OnLoginSuccess, OnLoginFailed)
end

function OnLoginSuccess(result)
    local pfTestOutput = gui.get_node("pfOutput")
    gui.set_text(pfTestOutput, "Congratulations, you made your first successful API call!")
end

function OnLoginFailed(error)
    local pfTestOutput = gui.get_node("pfOutput")
    local message = "Something went wrong with your first API call.\n"
    local message = message .. "Here's some debug information:\n"
    local message = message .. error.GenerateErrorReport()
    gui.set_text(pfTestOutput, message)
end
```

4. No editor do **Defold**, clique com o botão direito em **PfGettingStarted.gui** -> **Open With** -> **Text Editor**. Infelizmente, isso altera uma configuração interna do Defold, então:

   * Abra-o novamente: clique com o botão direito em **PfGettingStarted.gui** -> **Open With** -> **GUI Editor**. Isso restaura o padrão normal.

   * Selecione a guia de edição de texto de **PfGettingStarted.gui**.

   * Atualize o conteúdo de texto de PfGettingStarted.gui conforme mostrado abaixo.

```gui_script theme={null}
script: "/main/PfGettingStarted.gui_script"
fonts {
  name: "system_font"
  font: "/builtins/fonts/system_font.font"
}
background_color {
  x: 0.0
  y: 0.0
  z: 0.0
  w: 1.0
}
nodes {
  position {
    x: 100.0
    y: 620.0
    z: 0.0
    w: 1.0
  }
  rotation {
    x: 0.0
    y: 0.0
    z: 0.0
    w: 1.0
  }
  scale {
    x: 1.0
    y: 1.0
    z: 1.0
    w: 1.0
  }
  size {
    x: 1080.0
    y: 520.0
    z: 0.0
    w: 1.0
  }
  color {
    x: 1.0
    y: 1.0
    z: 1.0
    w: 1.0
  }
  type: TYPE_TEXT
  blend_mode: BLEND_MODE_ADD
  text: "Logging in..."
  font: "system_font"
  id: "pfOutput"
  xanchor: XANCHOR_LEFT
  yanchor: YANCHOR_TOP
  pivot: PIVOT_NW
  outline {
    x: 1.0
    y: 1.0
    z: 1.0
    w: 1.0
  }
  shadow {
    x: 1.0
    y: 1.0
    z: 1.0
    w: 1.0
  }
  adjust_mode: ADJUST_MODE_FIT
  line_break: false
  layer: ""
  inherit_alpha: true
  clipping_mode: CLIPPING_MODE_NONE
  clipping_visible: true
  clipping_inverted: false
  alpha: 1.0
  outline_alpha: 1.0
  shadow_alpha: 1.0
  template_node_child: false
  text_leading: 1.0
  text_tracking: 0.0
  size_mode: SIZE_MODE_AUTO
}
material: "/builtins/materials/gui.material"
adjust_reference: ADJUST_REFERENCE_PARENT
max_nodes: 512
```

## Concluir e executar

Primeiro, verifique se tudo foi salvo e selecione outra guia. Em seguida, procure marcadores " \* " — às vezes o Defold não atualiza.

Depois, compile seu jogo (Ctrl+b ou menus suspensos: **Project** -> **Build and Launch**). Você verá o seguinte texto na tela:

"Congratulations, you made your first successful API call!"

Para obter uma lista de todas as chamadas disponíveis da API de cliente, consulte nossa documentação de [Referências de API do PlayFab](/pt-BR/services/playfab/api-references).

Boa programação!

## Desconstruir o código

* `PfGettingStarted.gui`
  * Nossas instruções para `PfGettingStarted.gui` visam a praticidade, não o ensino. Este arquivo é uma definição de GUI que adiciona uma caixa de texto à tela e a vincula ao nosso outro script: `PfGettingStarted.gui_script`. Normalmente, você NÃO editaria esses arquivos em formato de texto.
  * Para obter instruções adequadas sobre como criar widgets de GUI no Defold, leia este guia:
  * [GUI scenes in Defold](https://www.defold.com/manuals/gui/)

* `PfGettingStarted.gui_script`
  * Instruções require e configuração.
    * `PlayFabClientApi` permite fazer chamadas à API de cliente — é por isso que você está aqui.
    * IPlayFabHttps e PlayFabHttps\_Defold:
      * Os plug-ins do PlayFab para Defold são criados sobre o PlayFab LuaSdk. A linguagem Lua não tem um módulo HTTPS adequado. Cada mecanismo de jogo que usa Lua implementa o seu próprio. Essas duas variáveis informam ao PlayFabSdk como acessar HTTPS. Você só precisa fazer isso uma vez no projeto, na primeira cena. Fora isso, é um código clichê obrigatório

  * `PlayFabClientApi.settings.titleId = "144"`
    * Todo projeto que usa o PlayFab deve criar um título exclusivo no site do PlayFab, que chamamos de Game Manager. Encontre seu `titleId` no Game Manager e substitua `144` pelo seu `titleId`.

  * `function init(self)`
    * Função do Defold — é chamada quando a GUI é inicializada.

  * `local loginRequest = { TitleId = PlayFabClientApi.settings.titleId, CustomId = "GettingStartedGuide", CreateAccount = true }`
    * A maioria dos métodos da API do PlayFab exige parâmetros de entrada, e esses parâmetros são empacotados em um objeto de requisição
    * Cada método da API exige um objeto de requisição exclusivo, com uma combinação de parâmetros opcionais e obrigatórios
      * Para `LoginWithCustomIDRequest`, há um parâmetro obrigatório `CustomId`, que identifica um jogador de forma exclusiva, e `CreateAccount`, que permite a criação de uma nova conta com essa chamada.
    * Para o logon, a maioria dos desenvolvedores vai querer usar um método de logon mais adequado
      * Consulte a [documentação de logon do PlayFab](xref:titleid.playfabapi.com.client.authentication) para obter uma lista de todos os métodos de logon e parâmetros de entrada. As opções comuns são:
        * [LoginWithAndroidDeviceID](xref:titleid.playfabapi.com.client.authentication.loginwithandroiddeviceid)
        * [LoginWithIOSDeviceID](xref:titleid.playfabapi.com.client.authentication.loginwithiosdeviceid)
        * [LoginWithEmailAddress](xref:titleid.playfabapi.com.client.authentication.loginwithemailaddress)

  * `PlayFabClientApi.LoginWithCustomID(loginRequest, OnLoginSuccess, OnLoginFailed)`
    * Isso executa a chamada à API usando a requisição e fornece funções de callback para as condições de sucesso e falha.

  * `function OnLoginSuccess(result)`
    * O objeto result de muitos callbacks de sucesso da API conterá as informações solicitadas.
    * `LoginResult` contém algumas informações básicas sobre o jogador, mas, para a maioria dos usuários, o logon é simplesmente uma etapa obrigatória antes de chamar outras APIs.

  * `function OnLoginFailed(error)`
    * As chamadas à API podem falhar por vários motivos, e você deve sempre tentar tratar a falha.

    * Por que as chamadas à API falham (em ordem de probabilidade)
      * PlayFabSettings.TitleId não está definido. Se você se esquecer de definir titleId para o seu título, nada funcionará.

      * Parâmetros da requisição. Se você não tiver fornecido as informações corretas ou obrigatórias para uma determinada chamada à API, ela falhará. Consulte `error.errorMessage`, `error.errorDetails` ou `error.GenerateErrorReport()` para obter mais informações.

      * Problema de conectividade do dispositivo. Celulares perdem e recuperam a conectividade constantemente, portanto qualquer chamada à API pode falhar aleatoriamente a qualquer momento e funcionar logo em seguida. Entrar em um túnel pode desconectar você completamente.

      * Problema no servidor do PlayFab. Como em qualquer software, podem ocorrer problemas. Consulte nossas [notas de versão](/pt-BR/services/playfab/release-notes) para obter atualizações.

      * A internet não é 100% confiável. Às vezes, a mensagem é corrompida ou não chega ao servidor do PlayFab.

    * Se você estiver com dificuldades para depurar um problema e as informações do erro não forem suficientes, visite nossos [fóruns](https://community.playfab.com/index.html)

  * `local pfTestOutput = gui.get_node("pfOutput")`
    * Esta é outra função de GUI do Defold. Ela busca o objeto de GUI `pfOutput` definido no nosso arquivo PfGettingStarted.gui e atribui a ele o texto a ser exibido ao usuário.


## Related topics

- [Início rápido de Lua para Corona](/pt-BR/services/playfab/sdks/lua/quickstart-corona.md)
- [Início rápido de C++ para Linux](/pt-BR/services/playfab/sdks/playfab-cpp/quickstart-linux.md)
- [Início rápido de C++ para Windows](/pt-BR/services/playfab/sdks/playfab-cpp/quickstart-windows.md)
- [Início rápido do Unity](/pt-BR/services/playfab/sdks/unity3d/quickstart.md)
- [Início rápido de C/C++ para GDK](/pt-BR/services/playfab/sdks/playfab-cpp/quickstart-gdk.md)
