Ten szablon przeznaczony wyłącznie dla UEFN zawiera niewielką grę imitującą fabrykę, która łączy w sobie element persystencji oraz postępów w trybie offline.
Samouczki zawarte w szablonie wymagają podstawowej znajomości Unreal Editor dla Fortnite (UEFN) oraz umiejętności otwierania pliku Verse. Nie ma innych wymagań. Sam szablon zawiera instrukcje zawarte w samouczku.
Witaj w Fabryce zabawek Świętego Mikołaja, szablonie LEGO®, którego podstawowym celem jest zatrzymanie graczy poprzez stworzenie wciągających pętli rozgrywki:
Persystencja: Zapamiętywanie danych gracza między sesjami gry.
Postęp w trybie offline: Fabryka produkuje zabawki, nawet gdy gracza nie ma w grze, aż do wyczerpania miejsca w kontenerze fabryki, a las lasek cukrowych rośnie bez względu na udział graczy.
Połączenie tych dwóch elementów pozwala również stworzyć mechanikę opartą na postępie dziennym, która będzie zachęcać graczy do wracania na twoją wyspę. Wykorzystaj ten szablon, aby dowiedzieć się, jak zastosować tę mechanikę na waszej własnej przytulnej wyspie świątecznej!
Szablon zawiera trzy krótkie samouczki.
Początkujący: Pokazuje, jak zmienić czas wzrostu lasu cukrowych lasek w Verse.
Średniozaawansowany: Przeprowadzi cię przez proces edycji zmiennej w Verse.
Zaawansowany: Umożliwia modyfikowanie i dodawanie kodu Verse.
Każdy samouczek w projekcie pokazuje, jak wykorzystać Verse, aby zrealizować zastosowaną mechanikę.
Szablon jest podzielony na trzy części:
Gra: Zacznij od zagrania w grę przez 5–10 minut, aby zapoznać się ze specyfiką jej działania.
Tworzenie: Następnie utworzysz trzy mody, wykonując zadania opisane w samouczku.
Eksploracja: Na koniec możesz przystąpić do samodzielnej analizy i rozłożyć na części cały udokumentowany kod, aby sprawdzić, jak działa, a następnie stworzyć własną grę na święta!
Gra
Załaduj szablon z poziomu UEFN. Znajdziesz go wraz z innymi szablonami LEGO. Zagraj w grę.
Aby wykonać zadanie w trakcie gry, podejdź do Sir Pawlara, który wyjaśni ci, co robić.
Postępuj zgodnie z instrukcjami w grze.
W pewnym momencie samouczek poprosi cię o zakończenie gry. Naciśnij klawisz Esc, a następnie Zakończ grę.
Odczekaj 2 minuty.
Po upływie 2 minut naciśnij ponownie Esc, a następnie Rozpocznij grę.
Może się to wydawać dziwne, ale pokazuje bardzo ważną kwestię. W tej grze różne rzeczy dzieją się także wtedy, gdy akurat nie grasz! Fabryka stale produkuje, a las lasek cukrowych nieustannie się rozrasta.
Są to kluczowe mechaniki, które mogą zachęcić graczy do powrotu do gry w celu zebrania plonów, które wyrosły, lub zasobów, które zostały wyprodukowane w czasie nieobecności.
Po powrocie do gry możesz zobaczyć, co udało się wyprodukować, gdy nie było cię w grze:
Odbywa się to w pliku factory_manager.verse. Mierzy on czas, przez jaki gracz był nieobecny, wykorzystując trwałe dane i urządzenie zegara czasu rzeczywistego. Następnie oblicza, ile fabryka wyprodukowałaby w tym czasie.
Po zbudowaniu drugiej fabryki otrzymasz komunikat z prośbą o powrót do UEFN.
Udało ci się ukończyć twój pierwszy samouczek! Czas przejść do zadań kreatywnych.
Tworzenie
A teraz ta zabawna część! Czekają na ciebie trzy zadania.
Zlokalizuj pierwsze z nich o nazwie Freshman Flapjack. Czeka na ciebie przy jednym z trzech żółtych kwadratów.
Wyzwanie dla początkujących: Modyfikacja czasu odrastania lasek cukrowych
Pierwsze zadanie jest proste. Pokaże ci ono, w jaki sposób możesz zmienić grę poprzez samo dostosowanie niektórych wartości – w tym przypadku czasu odrastania pól lasek cukrowych.
Obok Freshman Flapjacka widoczne jest urządzenie laski cukrowej utworzone w Verse.
Wybierz je i upewnij się, że jest zaznaczony również panel Szczegóły.
Dostosuj parametr
CandyCaneRegrowthTime– poeksperymentuj i sprawdź, jak różne wartości wpływają na rozgrywkę.
Wyzwanie dla średniozaawansowanych: Zmodyfikuj ceny ulepszeń
Drugie zadanie będzie wymagało przejścia do samego kodu Verse.
Ponownie przekonasz się, jak bardzo możesz wpłynąć na tempo i nastrój gry, zmieniając ceny ulepszeń swojej fabryki.
Otwórz plik upgrade_config.verse z poziomu Eksploratora Verse.
Zobaczysz wszystkie ceny za ulepszenia różnych elementów fabryki. Pierwsza partia cen dotyczy taśm produkcyjnych. W fabryce dostępne są cztery taśmy, dlatego tabela cen zawiera cztery kolumny. Każdy wiersz w tabeli to cena za ulepszenie taśmy do danego poziomu.
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."Idź za radą Blubberchopsa i obniż nieco cenę ulepszeń pasów. Możesz też poeksperymentować z podnoszeniem ceny, aby spowolnić tempo gry.
Gdy wszystko będzie gotowe, skompiluj kod Verse i wypchnij zmiany w Verse, aby je wypróbować.
Aby dowiedzieć się więcej na temat tego etapu, patrz Modyfikowanie i uruchomienie pierwszego programu Verse.
Zwróć uwagę, że za każdym razem, gdy wypchniesz zmiany do sesji, postęp fabryczny zostanie zresetowany.
Zadanie dla eksperta: Prezent dnia
Trzecie i ostatnie zadanie polega na opracowaniu prezentu dnia przy profesorze Flopkinsie.
W tym celu musisz dodać kilka dodatkowych persystentnych danych, aby przechowywać w nich datę ostatniego otwarcia prezentu. Musisz też poprawić logikę w utworzonym w Verse urządzeniu prezentu dnia.
Na stronie Using Persistable Data (Korzystanie z persystencji danych) znajdziesz więcej informacji na temat korzystania z persystencji danych w Verse.
Jeśli potrzebujesz pomocy przy tym zadaniu, spójrz na urządzenie prezentu dnia poniżej!
Otwórz plik player_info.verse w Eksploratorze Verse.
Poszukaj komentarzy profesora Flopkinsa na początku pliku.
Upewnij się, że dodano pole tablicy
date_and_timedo klasyplayer_infow celu przechowywania czasu ostatniego otwarcia prezentu. Upewnij się również, że wartość pola jest ustawiona w konstruktorzeMakePlayerInfo.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{}Napraw funkcje pobierania i ustawiania nowo dodanego pola. Tym razem poszukaj komentarzy profesora Flopkinsa na końcu pliku.
Uzupełnij brakujące wiersze tak, aby funkcje działały poprawnie. Możesz wykorzystać inne funkcje w pliku jako źródło inspiracji.
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{}Po przygotowaniu nowej funkcjonalności do obsługi persystentnych danych otwórz plik daily_gift.verse, aby zmienić logikę odpowiadającą za pojawianie się prezentu tylko raz dziennie.
Zobaczysz, że brakuje dwóch ważnych elementów:
Przechowywania aktualnego czasu w momencie otwarcia prezentu oraz
Sprawdzenia, czy data od ostatniego otwarcia prezentu się zmieniła.
Postępuj zgodnie z uwagami profesora i dodaj brakujący kod.
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."Teraz możesz przetestować swoje rozwiązanie! Skompiluj kod Verse i wypchnij zmiany w Verse, aby wypróbować kod w swojej sesji.
Możesz użyć przycisku debugowania Sub Zero jako skrótu do przeskakiwania w czasie do przodu, aby sprawdzić, czy prezent zrespawnuje się po zmianie daty.
Eksploracja
Teraz, gdy udało ci się wykonać wszystkie zadania, czas na poznanie innych urządzeń wykorzystanych w tym szablonie.
Urządzenie zegara czasu rzeczywistego
Urządzenie zegara czasu rzeczywistego wyświetla bieżący czas w formacie uniwersalnego czasu koordynowanego (UTC). Animuje również wskazówki zegara.
Można go używać do zdarzeń posuwających akcję naprzód, które powinny mieć miejsce każdego dnia o określonej porze, lub do śledzenia czasu, jaki upłynął.
Posiada wbudowaną funkcję testową, która umożliwia przestawianie czasu bieżącego. Wyprowadzić plik real_time_device.verse oraz pliki date_and_time.verse i time_interval.verse.
Urządzenie pola lasek cukrowych
Urządzenie pola lasek cukrowych utworzone w Verse śledzi pole z którego można zbierać laski cukrowe. Zwiększa stan zasobów w miarę ich zbierania i powoduje ich odrastanie z upływem czasu. Można go używać do wszystkich rodzajów odnawiających się zasobów. Sprawdź candy_cane_field.verse.
Moduł persystencji
Moduł ten przechowuje wszystkie persystentne dane powiązane z każdym graczem. Główną klasą jest klasa player_info w pliku player_info.verse.
Plik zawiera również wszystkie funkcje służące do odczytywania danych i manipulowania nimi. Warto również zapoznać się z innymi klasami w module – każda z nich definiuje niektóre dane przechowywane dla każdego gracza. Możesz je zmodyfikować według własnych potrzeb lub dodać więcej danych.
# 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.
Urządzenie prezentu dnia
To urządzenie generuje prezent każdego dnia – a przynajmniej robiłoby to, gdyby działało poprawnie!
Oto rozwiązanie zadania dla ekspertów, które ułatwi ci wykorzystanie pełnego potencjału utworzonego w Verse urządzenia prezentu dnia. Można go używać do wykonywania wszelkiego rodzaju codziennych zdarzeń i przyznawania nagród.
Zacznij od dodania wymaganych danych do klasy
player_infoi zmodyfikuj konstruktorMakePlayerInfow pliku 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.Uzupełnij funkcje
SetGiftOpeningTimeorazGetGiftOpeningTime: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.Zwróć uwagę na klasę
daily_giftw pliku daily_gift.verse. Najpierw uzupełnij zapisywanie czasu bieżącego w momencie otwarcia prezentu: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()Zaimplementuj funkcję
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
Urządzenie menedżera fabryki
Utworzone w Verse urządzenie menadżera fabryki inicjuje i prowadzi fabrykę. Obsługuje obliczanie liczby produktów wytworzonych pod nieobecność gracza.
To obliczenie może być złożone, ponieważ magazyn fabryczny jest współdzielony przez wiele taśm produkcyjnych. W prostszej konfiguracji można obliczyć liczbę produktów, obliczając, ile czasu minęło od ostatniej produkcji, a następnie dzieląc otrzymaną wartość przez szybkość produkcji.