Esse modelo exclusivo do UEFN contém um jogo pequeno ao estilo de fábrica que apresenta persistência e progressão off-line.
Os tutoriais dentro do modelo requerem conhecimento básico do Unreal Editor para Fortnite (UEFN) e a capacidade de abrir um arquivo Verse. Não há outros requisitos. O próprio modelo fornece as instruções do tutorial.
Boas-vindas à Fábrica de Brinquedos do Papai Noel, um modelo LEGO® que se concentra na retenção de jogadores por meio de loops de jogo envolventes, usando:
Persistência: salvamento dos dados do jogador entre as sessões de jogo.
Progressão off-line: a fábrica continua produzindo jogos mesmo quando o jogador não está no jogo, desde que haja espaço no contêiner da fábrica enquanto a floresta de bengalas doces continua crescendo com ou sem jogadores.
Com essas duas mecânicas combinadas, você também pode criar mecânicas diárias que incentivam os jogadores a continuar voltando à sua ilha. Use este modelo para aprender a implementar essas mecânicas na sua própria ilha de fim de ano!
O modelo contém três tutoriais curtos.
Iniciante: mostra como alterar o tempo de crescimento da floresta de bengalas doces em Verse.
Intermediário: orienta ao longo da edição de uma variável em Verse.
Avançado: permite modificar e adicionar ao código Verse.
Cada tutorial dentro do projeto mostra como usar Verse para alcançar a mecânica usada.
O modelo está dividido em três partes:
Jogar: comece jogando por 5 a 10 minutos para ter uma ideia de como ele funciona.
Criar: em seguida, você criará três mods, seguindo os desafios do tutorial.
Explorar: por fim, você pode explorar por conta própria, separar todo o código documentado para ver como ele funciona e, em seguida, criar seu próprio jogo para as festas de fim de ano.
Jogar
No UEFN, carregue o modelo. Você o encontrará com os outros modelos da LEGO. Comece a jogar.
No jogo, para acompanhar a tarefa, aproxime-se do Sir Pawlar, que explicará o que fazer.
Siga as instruções no jogo.
Em algum momento, o tutorial solicitará que você encerre o jogo. Pressione Esc e depois Fim de Jogo.
Espere 2 minutos.
Depois dos 2 minutos, pressione Esc novamente e depois Começar Jogo.
Isso pode parecer algo estranho de se pedir, mas demonstra um ponto muito importante. Neste jogo, as coisas continuam acontecendo enquanto você não está jogando! A fábrica continua produzindo e a floresta de bengalas doces continua crescendo.
Essas são as mecânicas principais que podem incentivar os jogadores a voltar ao jogo para coletar ou coletar plantações que cresceram, ou recursos que foram produzidos ao longo do tempo.
Ao voltar ao jogo, você pode ver o que foi produzido enquanto não estava no jogo:
Isso é feito no arquivo factory_manager.verse. Ele mede quanto tempo se passou enquanto o jogador estava fora usando dados persistentes e o dispositivo Relógio de Tempo Real. Em seguida, calcula quanto a fábrica produziria durante esse período.
Depois de produzir a segunda compilação da fábrica, você receberá uma mensagem para voltar ao UEFN.
Seu primeiro tutorial foi concluído! Hora de avançar para os desafios criativos.
Criar
Hora da diversão! Três desafios te esperam.
Localize o primeiro, Freshman Flapjack. Ele te espera em um dos três quadrados amarelos.
Desafio para iniciantes: modificar o tempo de recrescimento das bengalas doces.
O primeiro desafio é simples. Ele mostrará o quanto você pode mudar o jogo apenas ajustando alguns valores — nesse caso, o tempo de ressurgimento dos campos de bengala doce.
Ao lado de Freshman Flapjack, você verá o dispositivo Bengala Doce criado com Verse.
Selecione-o e verifique se o painel Detalhes também está selecionado.
Ajuste o parâmetro
CandyCaneRegrowthTime: teste e veja como isso afeta a jogabilidade.
Desafio intermediário: modificar os valores de atualização.
O segundo desafio levará para o próprio código do Verse.
Novamente, você verá o quanto é possível mudar o ritmo e a sensação do jogo apenas ajustando os valores para atualizar sua fábrica.
Abra o arquivo upgrade_config.verse no Explorador do Verse.
Você pode ver todos os valores para atualização dos vários elementos da fábrica. O primeiro lote de valores se refere às esteiras da fábrica. Existem quatro esteiras na fábrica, então a tabela de valores contém quatro colunas. Cada linha da tabela corresponde ao preço do aprimoramento de uma esteira para esse nível.
Verse# This file contains the data used to configure the factory in the game. # This includes upgrade prices, max levels, production speeds, storage capacities and more. # It also contains functions for getting all this data. using { /Verse.org/Simulation } using { Persistence } # Blubberchops: "Looks like this is the place to modify the upgrade prices for belts."Siga o aviso de Bluebberchops e reduza o preço do aprimoramento das esteiras. Você também pode experimentar aumentar o preço para diminuir o ritmo do jogo.
Quando estiver pronto, crie o código Verse e envie as alterações em Verse para testá-las.
Consulte mais informações sobre o que está fazendo nesta etapa em Como modificar e executar seu primeiro programa em Verse.
Observe que sempre que você enviar alterações para a sessão, o progresso da fábrica será redefinido.
Desafio para especialistas: presente diário.
O terceiro e último desafio exige que você trabalhe no presente diário ao lado do Professor Flopkins.
Para isso, você precisará adicionar alguns dados persistentes extras para armazenar quando o presente foi aberto pela última vez. Você também precisará corrigir a lógica no dispositivo de autoria do presente diário em Verse.
Consulte mais informações sobre como trabalhar com dados persistentes em Verse em Como usar dados persistentes.
Se precisar de uma ajudinha nesse desafio, confira a seção Dispositivo Presente Diário a seguir!
Abra o arquivo player_info.verse no Explorador do Verse.
Procure os comentários do Professor Flopkins na parte superior do arquivo.
Certifique-se de adicionar um campo de matriz
date_and_timeà classeplayer_infopara armazenar a última vez que o presente foi aberto. Certifique-se também de que o valor do campo esteja definido no construtorMakePlayerInfo.Verse# This file defines player_info, the collection of persistable information stored for each player. # It also contains functions for creating, updating and returning information about a player. using { /Verse.org/Simulation } using { Config } using { Time } # Maps each player to their persisted information. var PlayerInfoMap:weak_map(player, player_info) = map{}Corrija as funções para obter e configurar o campo recém-adicionado. Dessa vez, procure os comentários do Professor Flopins na parte inferior do arquivo.
Preencha as linhas que faltam para fazer com que as funções se comportem corretamente. Você pode ver algumas das outras funções no arquivo para se inspirar.
Verse# This file defines player_info, the collection of persistable information stored for each player. # It also contains functions for creating, updating and returning information about a player. using { /Verse.org/Simulation } using { Config } using { Time } # Maps each player to their persisted information. var PlayerInfoMap:weak_map(player, player_info) = map{}Com a nova funcionalidade para dados persistentes pronta, abra o arquivo daily_gift.verse para alterar a lógica que faz com que o presente apareça apenas uma vez por dia.
Você verá que estão faltando duas peças essenciais:
Armazenar a hora atual em que o presente foi aberto e...
Verificar se a data foi revertida desde que o presente foi aberto pela última vez.
Siga os comentários do professor e adicione o código que está faltando.
Verse# When the gift is opened (harvested), give the selected player gold. OnHarvesting(Agent:agent):void= # Hide gift. set Opened = true PropManipulator.HideProps() # Show effect. spawn: ShowGiftEffect()Verse# Succeeds if the current date is different from the opening time. IsDateRolledOver()<decides><transacts>:void= # Get the current date. Now := RealTime.GetDateAndTime() # Professor Flopkins: "Hmm, the code to determine if the date has rolled over is also missing." # "Let's see.. first we'll get the selected player." # "Look in the OnHarvesting function to see how to do that."Agora está tudo pronto para testar sua solução! Compile o código Verse e envie as alterações em Verse para testá-lo em sua sessão.
Você pode usar o botão de depuração de Sub Zero como um atalho para avançar no tempo e testar se o presente ressurge quando a data mudar.
Explore
Agora que você venceu seus desafios, é hora de explorar alguns dos outros dispositivos usados neste modelo.
Dispositivo Relógio de Tempo Real
O dispositivo Relógio de Tempo Real apresenta a hora atual no Horário Universal Coordenado (UTC). Também anima os ponteiros de um relógio.
Você pode usá-lo para eventos de direção que devem acontecer em um determinado horário todos os dias, ou para acompanhar quanto tempo se passou.
Ele tem uma função de teste integrada que pode compensar a hora atual. Confira os arquivos real_time_device.verse, date_and_time.verse e time_interval.verse.
Dispositivo Campo de Bengalas Doces
O dispositivo de autoria em Verse Campo de Bengalas Doces rastreia um campo de bengalas doces que podem ser colhidas. Fornece recursos quando elas são colhidas e faz com que cresçam novamente com o passar do tempo. Você pode usá-lo para todos os tipos de recursos de regeneração. Confira o arquivo candy_cane_field.verse.
Módulo de persistência
Esse módulo contém todos os dados persistentes associados a cada jogador. A classe principal é a classe player_info no arquivo player_info.verse.
Esse arquivo também contém todas as funções para ler e gerenciar os dados. Você também deve conferir as outras classes no módulo, pois cada uma define alguns dos dados armazenados para cada jogador. Você pode modificá-los ou adicionar mais dados para atender às suas necessidades.
# This file defines player_info, the collection of persistable information stored for each player.
# It also contains functions for creating, updating and returning information about a player.
using { /Verse.org/Simulation }
using { Config }
using { Time }
# Maps each player to their persisted information.
var PlayerInfoMap:weak_map(player, player_info) = map{}
# This tracks all persistable information for a player.
player_info := class<final><persistable>:
# The version of the current player info.
Dispositivo Presente Diário
Esse dispositivo gera um presente todos os dias, ou pelo menos geraria se estivesse funcionando!
Aqui está a solução do desafio para especialistas para ajudar a aproveitar ao máximo o dispositivo Presente Diário criado em Verse. Você pode usá-lo para realizar todos os tipos de eventos e recompensas diárias.
Comece adicionando os dados necessários à classe
player_infoe modifique o construtorMakePlayerInfono arquivo player_info.verse:Verse# This tracks all persistable information for a player. player_info := class<final><persistable>: # The version of the current player info. Version:int = 0 # Latest harvest times of all candy canes. CandyCaneHarvestTimes:[]date_and_time = array{date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}} # The amount of gold the player has.Preencha as funções
SetGiftOpeningTimeeGetGiftOpeningTime:Verse# Sets the gift opening time for the player. SetGiftOpeningTime<public>(Player:player, GiftOpeningTime:date_and_time)<decides><transacts>:void= CheckPlayerInfoForPlayer[Player] SourceInfo := PlayerInfoMap[Player] set PlayerInfoMap[Player] = player_info: MakePlayerInfo<constructor>(SourceInfo) GiftOpeningTime := GiftOpeningTime # Gets the gift opening time for the player.Volte sua atenção para a classe
daily_giftno arquivo daily_gift.verse. Primeiro, preencha o armazenamento da hora atual ao abrir o presente:Verse# When the gift is opened (harvested), give the selected player gold. OnHarvesting(Agent:agent):void= # Hide gift. set Opened = true PropManipulator.HideProps() # Show effect. spawn: ShowGiftEffect()Implemente a função
IsDateRolledOver:Verse# Succeeds if the current date is different from the opening time. IsDateRolledOver()<decides><transacts>:void= # Get the current date. Now := RealTime.GetDateAndTime() SelectedPlayer := MaybeSelectedPlayer? GiftOpeningTime := GetGiftOpeningTime[SelectedPlayer] Now.Years <> GiftOpeningTime.Years or Now.Months <> GiftOpeningTime.Months or Now.Days <> GiftOpeningTime.Days
Dispositivo Gerenciador de Fábrica
O dispositivo Gerenciador de Fábrica criado em Verse inicializa e opera a fábrica. Ele lida com o cálculo de quantos produtos foram feitos enquanto o jogador estava fora.
Esse cálculo pode ser complexo, pois o armazenamento da fábrica é compartilhado entre várias esteiras da fábrica. Em uma configuração mais simples, você pode calcular o número de produtos feitos calculando quanto tempo se passou desde a última produção e, em seguida, dividindo esse valor pela velocidade de produção.