Diese nur für UEFN verfügbare Vorlage enthält ein kleines Spiel im Factory-Stil, das sowohl Persistenz als auch Offline-Fortschritt einsetzt.
Die Tutorials in der Vorlage erfordern Grundkenntnisse in Unreal Editor für Fortnite (UEFN) und die Fähigkeit, eine Verse-Datei zu öffnen. Es gibt keine weiteren Anforderungen. Die Vorlage selbst enthält die Anweisungen für das Tutorial.
Willkommen bei Santas Spielzeugfabrik, einer LEGO® Vorlage, die sich auf die Spielerbindung durch fesselnde Gameplay-Schleifen konzentriert und folgende Elemente verwendet:
Persistenz: Speichern von Spielerdaten zwischen Spielsitzungen.
Offline-Fortschritt: Die Spielzeugfabrik stellt auch dann weiter Spielzeug her, wenn der Spieler sich nicht im Spiel befindet, solange im Fabrikcontainer Platz ist, während der Zuckerstangenwald mit oder ohne Spieler weiter wächst.
Mit beiden in Kombination kannst du auch tägliche Mechaniken erstellen, die Spieler ermutigen, weiter zu deiner Insel zurückzukehren. Mit dieser Vorlage erfährst du, wie du diese Mechaniken auf deiner eigenen gemütlichen Insel umsetzen kannst!
Die Vorlage enthält drei kurze Tutorials.
Einsteiger: Zeigt dir, wie du die Vegetationszeit des Zuckerstangenwalds in Verse änderst.
Fortgeschrittener: Führt dich durch die Bearbeitung einer Variable in Verse.
Experte: Hier kannst du den Verse-Code ändern und ergänzen.
Jedes Tutorial innerhalb des Projekts zeigt dir, wie du Verse verwendest, um die verwendeten Mechaniken zu implementieren.
Die Vorlage ist in drei Teile unterteilt:
Spielen: Spiele das Spiel zu Beginn 5-10 Minuten, um ein Gefühl dafür zu bekommen, wie es funktioniert.
Erstellen: Als Nächstes erstellst du drei Mods und folgst dabei den Herausforderungen im Tutorial.
Erkunden: Endlich kannst du es auf eigene Faust erkunden und den gesamten dokumentierten Code zerlegen, um zu sehen, wie er funktioniert, und dann dein eigenes Spiel für die Festtage erstellen!
Wiedergabe
Lade die Vorlage aus UEFN. Du findest sie bei den anderen LEGO-Vorlagen. Beginne mit dem Spielen des Spiels.
Um dem Auftrag zu folgen, gehst du im Spiel zu Sir Pawlar, der dir erklärt, was du tun sollst.
Folge den Anweisungen im Spiel.
Irgendwann im Tutorial wirst du aufgefordert, das Spiel zu beenden. Drücke Esc und dann Spiel beenden.
Warte zwei Minuten.
Drücke nach Ablauf der 2 Minuten erneut Esc und dann Spiel starten.
Das mag etwas seltsam erscheinen, aber es zeigt einen sehr wichtigen Punkt. In diesem Spiel geht alles weiter, auch wenn du nicht spielst! Die Fabrik produziert weiter und der Zuckerstangenwald wächst weiter.
Dies sind Schlüsselmechaniken, die Spieler dazu ermutigen können, zu deinem Spiel zurückzukehren, um Dinge zu ernten oder einzusammeln, die im Laufe der Zeit gewachsen sind oder erzeugt wurden.
Wenn du zum Spiel zurückkehrst, kannst du sehen, was produziert wurde, während du nicht im Spiel warst:
Das erfolgt in der Datei factory_manager.verse. Sie misst, wie viel Zeit vergangen ist, während der Spieler weg war, indem sie dauerhafte Daten und das Echtzeituhr-Gerät verwendet. Es berechnet dann, wie viel die Fabrik in dieser Zeit produzieren würde.
Nachdem du das zweite Fabrikprodukt produziert hast, erhältst du eine Nachricht, in der du zu UEFN zurückkehren kannst.
Dein erstes Tutorial ist abgeschlossen! Es ist an der Zeit, sich den kreativen Herausforderungen zuzuwenden.
Erschaffen
Jetzt kommt der spaßige Teil! Auf dich warten drei Herausforderungen.
Finde die erste, Freshman Flapjack. Er wartet auf dich auf einem der drei gelben Quadrate.
Herausforderung für Einsteiger: Ändern der Nachwachszeit der Zuckerstangen
Die erste Herausforderung ist einfach. Sie zeigt dir, wie sehr du das Spiel verändern kannst, indem du einfach einige Werte optimierst – in diesem Fall die Nachwachszeit der Zuckerstangenfelder.
Neben Freshman Flapjack siehst du das in Verse erstellte Zuckerstange-Gerät.
Wähle es aus und stelle sicher, dass du auch das Details-Panel ausgewählt hast.
Passe den Parameter
CandyCaneRegrowthTimean – experimentiere und sieh dir an, wie sich das auf das Gameplay auswirkt.
Herausforderung für Fortgeschrittene: Upgrade-Preise ändern
Die zweite Herausforderung führt dich in den Verse-Code selbst hinein.
Auch hier siehst du, wie sehr du das Tempo und das Spielgefühl verändern kannst, indem du die Kosten für das Upgrade deiner Fabrik optimierst.
Öffne die Datei upgrade_config.verse im Verse-Explorer.
Du kannst alle Preise für das Upgrade der verschiedenen Fabrikelemente sehen. Die erste Preisgruppe bezieht sich auf die Fabrikbänder. Es gibt vier Bänder in der Fabrik, also enthält die Preistabelle vier Spalten. Jede Zeile in der Tabelle ist der Preis für das Upgrade eines Bandes auf das entsprechende Level.
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."Folge den Anweisungen von Blubberchops und reduziere den Preis für das Upgrade der Bänder. Du kannst auch mit der Erhöhung des Preises experimentieren, um das Spielgeschehen zu verlangsamen.
Wenn du bereit bist, erstelle den Verse-Code und übertrage die Verse-Änderungen, um deine Änderungen zu testen.
Weitere Informationen zu diesem Schritt findest du unter Ändern und Ausführen deines ersten Verse-Programms.
Beachte, dass jedes Mal, wenn du Änderungen an der Sitzung überträgst, der Fabrikfortschritt zurückgesetzt wird.
Herausforderung für Experten: Das tägliche Geschenk
Bei der dritten und letzten Herausforderung wirst du aufgefordert, neben Professor Flopkins am täglichen Geschenk zu arbeiten.
Dazu musst du einige zusätzliche dauerhafte Daten hinzufügen, um zu speichern, wann das Geschenk das letzte Mal geöffnet wurde. Außerdem musst du die Logik im in Verse erstellten „Tägliches Geschenk“-Gerät korrigieren.
Unter Using Persistable Data in Verse findest du weitere Informationen über die Arbeit mit dauerhaften Daten in Verse.
Wenn du bei dieser Herausforderung etwas Hilfe brauchst, wirf einen Blick auf den Abschnitt Tägliches-Geschenk-Gerät weiter unten.
Öffne die Datei player_info.verse im Verse-Explorer.
Suche nach den Kommentaren von Professor Flopkins relativ am Anfang der Datei.
Vergewissere dich, dass du ein Array-Feld
date_and_timezur Klasseplayer_infohinzufügst, um den letzten Zeitpunkt zu speichern, zu dem das Geschenk geöffnet wurde. Stelle außerdem sicher, dass der Feldwert im ConstructorMakePlayerInfofestgelegt ist.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{}Korrigiere die Funktionen zum Abrufen und Festlegen des neu hinzugefügten Feldes. Diesmal solltest du nach den Kommentaren von Professor Flopkins am Ende der Datei suchen.
Fülle die fehlenden Zeilen aus, damit sich die Funktionen korrekt verhalten. Du kannst dir einige der anderen Funktionen in der Datei ansehen, um dich inspirieren zu lassen.
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{}Nachdem die neue Funktionalität für die dauerhaften Daten bereit ist, öffne die Datei daily_gift.verse, um die Logik zu ändern, nach der das Geschenk nur einmal am Tag erscheint.
Du wirst sehen, dass zwei wichtige Teile fehlen:
Speichern des aktuellen Zeitpunkts, zu dem das Geschenk geöffnet wurde, und
Überprüfen, ob das Datum seit dem letzten Öffnen des Geschenks überschrieben wurde.
Folge den Kommentaren des Professors und ergänze den fehlenden Code.
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."Jetzt kannst du deine Lösung testen! Erstelle den Verse-Code und überprüfe die Verse-Änderungen, um ihn in deiner Sitzung auszuprobieren.
Du kannst die Debug-Schaltfläche von Sub Zero als Shortcut verwenden, um in der Zeit weiterzuspringen, um zu testen, ob das Geschenk respawnt, wenn sich das Datum ändert.
Erkunden
Nachdem du deine Herausforderungen gemeistert hast, ist es an der Zeit, einige der anderen Geräte zu erkunden, die in dieser Vorlage verwendet werden.
Echtzeituhr-Gerät
Das Echtzeituhr-Gerät zeigt dir die aktuelle Zeit in Koordinierte Weltzeit (UTC) an. Es animiert auch die Zeiger einer Uhr.
Du kannst es für den Antrieb von Events nutzen, die jeden Tag zu einer bestimmten Zeit stattfinden sollen, oder um zu verfolgen, wie viel Zeit vergangen ist.
Es verfügt über eine eingebaute Testfunktion, die die aktuelle Zeit verschieben kann. Sieh dir die Datei real_time_device.verse an, die Dateien date_and_time.verse und time_interval.verse.
Zuckerstangenfeld-Gerät
Das in Verse erstellte Zuckerstangenfeld-Gerät verfolgt ein Feld mit erntefähigen Zuckerstangen. Es stellt Ressourcen bereit, wenn sie geerntet werden, und lässt sie im Laufe der Zeit nachwachsen. Du kannst es für alle Arten von nachwachsenden Ressourcen verwenden. Sieh dir die Datei candy_cane_field.verse an.
Persistenz-Modul
Dieses Modul enthält alle dauerhaften Daten, die jedem Spieler zugeordnet sind. Die Hauptklasse ist die Klasse player_info in der Datei player_info.verse.
Diese Datei enthält auch alle Funktionen zum Lesen und Bearbeiten der Daten. Du solltest dir auch die anderen Klassen im Modul ansehen – sie definieren jeweils einen Teil der für jeden Spieler gespeicherten Daten. Du kannst sie ändern oder weitere Daten hinzufügen, um sie an deine Anforderungen anzupassen.
# 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.
Tägliches-Geschenk-Gerät
Dieses Gerät spawnt ein tägliches Geschenk – zumindest würde es das, wenn es funktionieren würde!
Hier ist eine Lösung für die Herausforderung für Experten, die dir hilft, das in Verse erstellte Gerät für das tägliche Geschenk in vollem Umfang zu nutzen. Du kannst sie nutzen, um alle Arten von täglichen Events und Belohnungen auszuführen.
Füge zunächst die erforderlichen Daten zur Klasse
player_infohinzu und ändere den ConstructorMakePlayerInfoin der Datei 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.Fülle die Funktionen
SetGiftOpeningTimeundGetGiftOpeningTimeaus: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.Wende deine Aufmerksamkeit der Klasse
daily_giftin der Datei daily_gift.verse zu. Fülle zuerst das Speichern der aktuellen Zeit aus, wenn das Geschenk geöffnet wird: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()Implementiere die Funktion
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
Fabrikmanager-Gerät
Das in Verse erstellte Fabrikmanager-Gerät initialisiert die Fabrik und führt sie aus. Hier wird berechnet, wie viele Produkte während der Abwesenheit des Spielers hergestellt wurden.
Diese Berechnung kann komplex sein, da das Fabriklager von mehreren Fabrikbändern zugleich genutzt wird. Einfacher könntest du die Anzahl der hergestellten Projekte berechnen, indem du berechnet, wie viel Zeit seit der letzten Produktion verstrichen ist, und dann durch die Produktionsgeschwindigkeit dividierst.