Sistemas de jogo

Loja no jogo: vitrines, ofertas e preços

Como funciona a loja pronta do iDos Games: vitrines com ofertas que se revezam, preços em moeda do jogo ou dinheiro de verdade, presentes grátis e limites de compra, e como configurá-la no painel sem código.

A loja é um sistema pronto: a tela de loja do seu jogo mais a lógica de compras no servidor. Você configura vitrines e ofertas no painel, e a cada compra o servidor confere sozinho o preço, os limites e o rodízio. Não dá para falsificar uma compra pelo jogo, e a loja não precisa de servidor próprio.

O que o jogador vê

  • Vitrines em abas. A primeira seção de uma vitrine é um carrossel; as outras são grades de cartões.
  • Um presente diário grátis que brilha até ser recolhido.
  • Contadores nos cartões: "renova em", "abre em", "esgotado".
  • Uma janela de confirmação de compra (um painel inferior no celular).
  • A animação "Você ganhou": as recompensas voam até os contadores de saldo.
  • Um selo na aba da loja quando há uma oferta grátis à espera.
Loja
12 450
320
Diárias1
Moeda
Pacotes
Ofertas do dia Renova em 15:40:12
Presente do dia
GRÁTIS
Espada do herói
1 200
Baú de equipamento
90
Esgotado
500 moedas
$0.99
Melhor custo1 200 moedas
$1.99
x2 na 1ª compra
As vitrines são abas; o selo conta os itens grátis à espera.
Tempo de rotação: quando acaba, o servidor troca os itens do slot.
Um presente diário grátis brilha até ser recolhido.
Esgotado: o limite desta janela acabou.
Fitas e o bônus da primeira compra vêm das configurações do item.
Exemplo. A tela da loja como o jogador vê, no visual padrão. O visual é alterado em src/ui.config.ts.

Como a loja é montada

A loja é uma árvore: vitrine → seções → slots → oferta.

  • Oferta: o que é vendido. Preço, recompensas, limites, fitas ("melhor custo", "x2"). As ofertas ficam em um catálogo único.
  • Slot: um lugar na prateleira da vitrine. Uma oferta só pode ser comprada por um slot: oferta fora de qualquer slot não é vendida.
  • Rodízio: um slot pode mostrar uma oferta de um conjunto e trocá-la por um cronograma, como uma loja diária. O servidor calcula o rodízio, então o jogador vê a mesma loja em qualquer aparelho.
Vitrine“Loja do dia”
Seção“Ofertas do dia”
Slots
Slot 1: sempre o presente do dia
Slot 2: um de 6 itens, novo a cada 24 h
Slot 3: vazio até a janela abrir
Catálogo de itenspreço, recompensas, limites
Um item fora de qualquer slot não é vendido
Exemplo. Como uma vitrine é montada no painel: um item só é vendido por meio de um slot.

Preços

O que o jogador pagaComo funciona
Moeda do jogo, itensDescontado do saldo do jogador
Dinheiro de verdadeUma compra na loja de apps; o servidor confere o recibo
Assistir a um anúncioO jogador gasta uma visualização de anúncio que ganhou (versões com anúncios)
NadaUma oferta grátis; o limite é obrigatório, senão o servidor não vende

Você pode mostrar um preço "antigo" riscado, e o servidor calcula o percentual de desconto. Uma oferta pode ter várias opções de preço, por exemplo moedas ou gemas.

Limites de compra

  • Para sempre: por exemplo, um pacote inicial uma única vez.
  • Por dia: zera à meia-noite UTC.
  • Intervalo: a próxima compra só depois de um tempo definido.
  • Por janela de rodízio: o limite do slot enquanto esta oferta está na prateleira.

O servidor calcula para cada jogador os selos "primeira compra" e "esgotado" e os contadores.

Passo 01Adicione a loja ao seu projeto

O modelo de RPG idle já tem uma loja com uma vitrine de exemplo. Em qualquer outro projeto quem adiciona é o programador de IA: escreva "Adicione uma loja" no chat. Ele instala o sistema pronto em vez de escrever uma loja do zero. A aba da loja aparece para os jogadores quando houver algo para vender.

Passo 02Configure ofertas e uma vitrine

Abra o painel, escolha seu projeto e vá em Operações ao vivo → v2 → Loja.

  • Na aba Ofertas, crie uma oferta: nome, preço, o que o jogador recebe e um limite.
  • Na aba Vitrines, crie uma vitrine, adicione uma seção e slots e coloque ofertas nos slots.
  • Predefinições são configurações compartilhadas que você aplica a muitas ofertas de uma vez.

O painel avisa sobre ofertas sem slot e ofertas grátis sem limite. O botão IA da página abre um assistente: descreva o que vender ("um pacote de 500 moedas por US$ 0,99 e um baú diário grátis"), ele propõe as mudanças, e você revisa e aperta Salvar.

Passo 03Teste e lance

Confira a loja na versão de teste do seu app. As configurações vão para o app ao vivo em uma ação separada, então um lançamento de código nunca as sobrescreve. Mais em publicação e links.

Para desenvolvedores

A loja funciona por meio de client.store no @idosgames/core. Desenhe a tela a partir de getStorefront(): a vitrine já calculada para este jogador (rodízio, limites, contadores). getDefinitions() é só a configuração, igual para todos.

TypeScript
const res = await client.store.getStorefront()
if (!res.ok) return showError(res.error)

for (const store of res.data.Stores ?? [])
  for (const section of store.Sections ?? [])
    for (const slot of section.Slots ?? []) {
      // Um slot vazio chega com Offer === null: desenhe uma moldura vazia para a prateleira não pular.
      if (!slot.Offer) continue
      drawCard(slot.Offer, slot.RefreshesAtUtc)
    }

const buy = await client.store.purchase(offer.OfferID, 1, {
  selectedOptionID: option.OptionID,
  slot: { storeID: store.StoreID, sectionID: section.SectionID, slotID: slot.SlotID },
})
  • Se a compra retornar OFFER_NOT_IN_ROTATION, a vitrine mudou: recarregue-a sem mostrar erro.
  • Desative o botão "Comprar" enquanto a requisição estiver em andamento: cada chamada de purchase é uma compra separada.
  • Conte os contadores a partir de ServerTimeUtc na resposta, não do relógio do aparelho.
  • null em um limite restante significa "sem limite"; 0 significa "esgotado".

Todos os campos estão descritos na habilidade store-system, servida pelo servidor MCP do SDK.

Perguntas frequentes

Por que uma oferta está no catálogo mas não pode ser comprada?

Uma oferta só é comprada por meio de um slot da vitrine. Se ela não está em nenhum slot, não pode ser comprada. O painel lista essas ofertas sob um aviso separado "Fora de qualquer prateleira".

Posso criar um presente diário grátis?

Sim. Uma oferta sem preço é uma oferta grátis comum, mas precisa ter um limite, por exemplo uma vez por dia. O servidor se recusa a vender uma oferta grátis sem limite.

Preciso verificar as compras no meu próprio servidor?

Não. O servidor do iDos Games confere o preço, os limites e o rodízio em cada compra. O jogo só mostra a vitrine e pede a compra.

Os descontos do premium se aplicam?

Sim. O servidor aplica sozinho os descontos e bônus do nível premium. O jogo lê na resposta da compra o que foi de fato cobrado e entregue.

Veja também

Crie o seu próprio jogo

Descreva a ideia em uma frase: o programador de IA cria o jogo, e ele vai ao ar com um link próprio.