Instâncias do motor

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

As APIs de Nuvem Aberta do Motor permitem que você gerencie Instance objetos em suas experiências do Roblox na web.

Restrições beta

Essas APIs estão atualmente em beta e têm as seguintes restrições:

  • Você só pode ler e atualizar Script , LocalScript e ModuleScript objetos.

  • Você não pode atualizar scripts que estão atualmente abertos no Roblox Studio.

  • Você não pode atualizar scripts que fazem parte de um pacote.

  • Você só pode usar a autenticação de chave da API. Crie uma chave da API com instâncias de lugar do universo adicionadas como um sistema de API.

    Você deve especificar as experiências que deseja que a chave tenha acesso, bem como os escopos de permissão de leitura e gravação desejados.

  • Você deve ter uma sessão colaborativa habilitada para a experiência que deseja acesso.

  • Corpos de solicitação, como para Atualizar Instância, são limitados a 200 KB.

Listar filhos

Liste todos os filhos de uma instância específica especificando um ID de instância e chamando o método Listar Filhos de Instância.


import requests
# Gerar em https://create.roblox.com/ashboard/credenciais
apiKey = "<API_KEY>"
# Encontre em https://create.roblox.com/dashboard/creations no menu de transbordamento de um tijolode experiência
universeId = "<UNIVERSE_ID>"
# Encontre o ID do local de início em https://create.roblox.com/dashboard/creations no menu de sobreposição de um tijolode experiência
placeId = "<PLACE_ID>"
# O ID padrão para a raiz do modelo de dados de qualquer local
instanceId = "root"
# Cabeceio de solicitação
apiKeyHeaderKey = "x-api-key"
# URL de endpoint para método List Children
listChildrenUrl = "https://apis.roblox.com/cloud/v2/universes/%s/places/%s/instances/%s:listChildren"
def ListChildren():
url = listChildrenUrl % (universeId, placeId, instanceId)
headerData = {apiKeyHeaderKey: apiKey}
results = requests.get(url, headers = headerData)
return results
response = ListChildren()
print("Operation Results:", response.status_code, response.text)
# Analise o caminho do Objetode Operação para obter mais tarde o recurso de Instância. Veja a seção de Polling for Results para mais informações.
operationPath = response.json()['path']

Em vez de apenas listar as crianças, a resposta inclui um objeto Operation com um ponto de extremidade diferente. Vote neste ponto final para recuperar assincronamente a lista real de crianças.Um exemplo de código mais completo parece assim:


import requests
import time
apiKey = "<API_KEY>"
universeId = "<UNIVERSE_ID>"
placeId = "<PLACE_ID>"
instanceId = "root"
apiKeyHeaderKey = "x-api-key"
listChildrenUrl = "https://apis.roblox.com/cloud/v2/universes/%s/places/%s/instances/%s:listChildren"
getOperationUrl = "https://apis.roblox.com/cloud/v2/%s"
numberOfRetries = 10
retryPollingCadence = 5
doneJSONKey = "done"
def ListChildren():
url = listChildrenUrl % (universeId, placeId, instanceId)
headerData = {apiKeyHeaderKey: apiKey}
results = requests.get(url, headers = headerData)
return results
def GetOperation(operationPath):
url = getOperationUrl % (operationPath)
headerData = {apiKeyHeaderKey: apiKey}
results = requests.get(url, headers = headerData)
return results
def PollForResults(operationPath):
currentRetries = 0
while (currentRetries < numberOfRetries):
time.sleep(retryPollingCadence)
results = GetOperation(operationPath)
currentRetries += 1
if (results.status_code != 200 or results.json()[doneJSONKey]):
return results
response = ListChildren()
print("Operation Results:", response.status_code, response.text)
# Analise o caminho do Objetode Operação para usar na pesquisa para a instância de recursos.
operationPath = response.json()['path']
response = PollForResults(operationPath)
print("Response:", response.status_code, response.text)

A resposta final pode parecer algo assim:


{
"path": "universes/1234567890/places/98765432109/instances/root/operations/a1a2a3a4-a1a2-a1a2-a1a2-a1a2a3a4a5a6",
"done": true,
"response": {
"@type": "type.googleapis.com/roblox.open_cloud.cloud.v2.ListInstanceChildrenResponse",
"instances": [
{
"path": "universes/1234567890/places/98765432109/instances/b1b2b3b4-b1b2-b1b2-b1b2-b1b2b3b4b5b6",
"hasChildren": true,
"engineInstance": {
"Id": "b1b2b3b4-b1b2-b1b2-b1b2-b1b2b3b4b5b6",
"Parent": "a1a2a3a4-a1a2-a1a2-a1a2-a1a2a3a4a5a6",
"Name": "Workspace",
"Details": {}
}
},
...
]
}
}

Você pode então iterar sobre o JSON para encontrar um ID de instância específico:


instances = response.json()['response']['instances']
replicatedStorageId = ""
for i in instances:
if i['engineInstance']['Name'] == "ReplicatedStorage":
replicatedStorageId = i['engineInstance']['Id']
if replicatedStorageId:
# Você agora tem um ID de instância e pode obter ou atualizá-lo.
else:
# The name wasn't found.

Scripts contêm algumas informações adicionais no ObjetoDetails, como o digitarde script, a originale se estão habilitados.

Obtenha uma instância

Este método retorna uma única Instância.


import requests
# Gerar em https://create.roblox.com/ashboard/credenciais
apiKey = "<API_KEY>"
# Encontre em https://create.roblox.com/dashboard/creations no menu de transbordamento de um tijolode experiência
universeId = "<UNIVERSE_ID>"
# Encontre o ID do local de início em https://create.roblox.com/dashboard/creations no menu de sobreposição de um tijolode experiência
placeId = "<PLACE_ID>"
# O ID padrão para a raiz do modelo de dados de qualquer local
instanceId = "<INSTANCE_ID>"
# Cabeceio de solicitação
apiKeyHeaderKey = "x-api-key"
# URL de endpoint para o método Obter Instância
getInstanceUrl = "https://apis.roblox.com/cloud/v2/universes/%s/places/%s/instances/%s"
def GetInstance():
url = getInstanceUrl % (universeId, placeId, instanceId)
headerData = {apiKeyHeaderKey: apiKey}
return requests.get(url, headers = headerData)
response = GetInstance()
print("Response:", response.status_code, response.text)
# Analise o caminho do Objetode operação na resposta. Veja a seção de Polling for Results para mais informações.
operationPath = response.json()['path']

Assim como o método List Institute Children, a resposta inclui um objeto Operation que você solicita para recuperar a instância real.Veja Votação para resultados para mais informações.

Atualizar instâncias

Depois de obter o ID de instância apropriado, você pode atualizá-lo. Vote nos resultados após fazer o solicitar / pedirde atualização inicial.


import json
import requests
# Gerar em https://create.roblox.com/ashboard/credenciais
apiKey = "<API_KEY>"
# Encontre em https://create.roblox.com/dashboard/creations no menu de transbordamento de um tijolode experiência
universeId = "<UNIVERSE_ID>"
# Encontre o ID do local de início em https://create.roblox.com/dashboard/creations no menu de sobreposição de um tijolode experiência
placeId = "<PLACE_ID>"
instanceId = "<INSTANCE_ID>"
instanceType = ""
propertyName = ""
propertyValue = ""
# Cabeceio de solicitação
apiKeyHeaderKey = "x-api-key"
contentTypeHeaderKey = "Content-type"
contentTypeHeaderValue = "application/json"
# URL de endpoint para o método Update Instance
updateInstanceUrl = "https://apis.roblox.com/cloud/v2/universes/%s/places/%s/instances/%s"
# ChavesJSON
detailsJSONKey = "Details"
engineInstanceJSONKey = "engineInstance"
def GeneratePostData():
propertiesDict = {propertyName: propertyValue}
detailsDict = {instanceType: propertiesDict}
instanceDict = {detailsJSONKey: detailsDict}
outerDict = {engineInstanceJSONKey: instanceDict}
return json.dumps(outerDict)
def UpdateInstance(postData):
url = updateInstanceUrl % (universeId, placeId, instanceId)
headerData = {apiKeyHeaderKey: apiKey,
contentTypeHeaderKey: contentTypeHeaderValue}
return requests.patch(url, headers = headerData, data = postData)
postData = GeneratePostData()
response = UpdateInstance(postData)
print("Response:", response.status_code, response.text)
# Analise o caminho do Objetode Operação a partir da resposta. Vote nos resultados a serem executados
# a atualização.
operationPath = response.json()['path']

Votação para resultados

Todos os métodos atuais de Instância retornam um objeto Operation em vez do recurso solicitado.Este objeto permite que você execute de forma assíncrona a operação original.Use o caminho do ObjetoOperation para solicitar quando a recursa está pronta.

Você pode usar uma variedade de estratégias de pesquisa, como usar um recuo exponencial ou um atraso fixo entre solicitações.O seguinte exemplo pesquisa a cada cinco segundos, até 10 vezes.


import requests
import time
# Gerar em https://create.roblox.com/ashboard/credenciais
apiKey = "<API_KEY>"
# Use o caminho de operação da sua solicitar / pedirinicial
# Assume a forma de "universos/<UNIVERSE_ID>/locais/<PLACE_ID>/instâncias/<INSTANCE_ID>/operações/<OPERATION_ID>"
operationPath = "<OPERATION_PATH>"
# Constantes de pesquisa
numberOfRetries = 10
retryPollingCadence = 5
# Cabeceio de solicitação
apiKeyHeaderKey = "x-api-key"
# URL de endpoint para pesquisa de operação de longa duração
getOperationUrl = "https://apis.roblox.com/cloud/v2/%s"
# ChavesJSON
doneJSONKey = "done"
def GetOperation(operationPath):
url = getOperationUrl % (operationPath)
headerData = {apiKeyHeaderKey: apiKey}
results = requests.get(url, headers = headerData)
return results
def PollForResults(operationPath):
currentRetries = 0
while (currentRetries < numberOfRetries):
time.sleep(retryPollingCadence)
results = GetOperation(operationPath)
currentRetries += 1
if (results.status_code != 200 or results.json()[doneJSONKey]):
return results
response = PollForResults(operationPath)
print("Response:", response.status_code, response.text)

Demo da Loja de Poções

A demonstração da Loja de Poções do Google Sheets mostra como atualizar o script de uma experiência da web. A demonstração consiste no seguindo:

  • Um local desbloqueado sem cópia com uma interface de mock que exibe várias poções e seus preços.
  • Um arquivo .ods que você importa para planilhas do Google. Esta planilha permite que você especifique e atualize valores para propriedades dentro da experiência.
  • Código para um Script do Google Apps que lê dados da Planilha Google e atualiza o script ReplicatedStorage > ItemList na experiência da Loja de Poções.

Configure a demonstração

  1. Vá para a página Demonstração da Loja de Poções Descubra.Clique no menu de transbordamento, e então Editar no Studio .O Studio abre com uma cópia do local.

  2. Clique em ArquivoSalvar no Roblox e preencha as informações necessárias para salvar a Demonstração da Loja de Poções como o local padrão para sua experiência.Teste a experiência.Você deve ver a interface de usuário para a Demonstração da Loja de Poções.Faça um registro do nome, custo e cores das poções.Você as alterará mais tarde usando a Nuvem Aberta!

Configurar a folha

  1. Baixar o arquivo da planilha da Loja de Poções.
  2. Vá para Folhas do Google e clique em Folha em branco .
  3. Na folha que aparece, clique em Arquivo > Importar e clique na aba Carregar .
  4. Arraste o arquivo da planilha da Loja de Poções para a janela de upload.
  5. Escolha Substituir planilha e depois Importar dados .
  6. Na aba AppScript da folha, copie o código na célula A1.
  7. Clique no menu Extensões> Apps Script e cole o código no arquivo Code.gs. Em seguida, salve o projeto.
  8. De volta na planilha, selecione a aba Atualizar Loja de Poções .Clique no botão Atualizar Script , clique no menu de transbordamento e selecione Atribuir script .
  9. Na janela Atribuir script , insira UpdateScript e clique em OK .

Crie uma chave de API

  1. Vá para a página Criar Hub de Nuvem Aberta API Chaves do Criador e clique em Criar Chave da API .

  2. Preencha o formulário com as seguintes informações.

    • Nome : PotionShop
    • Sistema de API : Adicione o sistema de API universal-place-instances .Adicione a sua experiência na Loja de Poções ao sistema.Para Operações de Experiência , adicione acesso de leitura e gravação.
    • Endereços IP Aceitos : Adicione 0.0.0.0/0 como um endereço IP
    • Expiração : Sem Expiração
    • Clique em Salvar e Gerar Chave e depois em Copiar Chave para a Área de Transferência .
  3. Cole a chave da API na célula de Chave da API (D2) na aba Intro do seu Google Sheet.

Obtenha o ID do universo e do local

  1. Vá para a página Criações do Hub do Criador, passe o mouse sobre o tijoloda experiência da Loja de Poções e clique no menu de sobreposição.
  2. Selecione Copiar ID do Universo e cole-o na célula ID do Universo (E2) na aba Intro do seu Google Sheet.
  3. Selecione Copiar ID do Local de Partida e cole-o na célula ID do Local (F2) na aba Intro do seu Google Sheet.

Atualize os valores do script

  1. Na aba Loja de Poções de Atualização da folha, modifique quaisquer valores que você deseje e clique no botão Atualizar Script .
  2. Se o Google Sheets solicitar sua autorização, clique em OK e permita que sua conta execute o script.
  3. No Studio, teste o PlayShop de Poções para ver quaisquer alterações refletidas.Da janela Explorer , você também pode abrir o script ReplicatedStorage > ItemList para inspecionar as alterações.