Masz już skonfigurowane mapy. Teraz kolejnym krokiem jest przyznanie graczowi broni, gdy dokona likwidacji.
Chcesz, aby po dokonaniu przez gracza likwidacji zastosowane zostały następujące dwie reguły:
-
Jeśli gracz nie ma najwyższego poziomu broni w swojej drużynie lub jeśli wszyscy gracze mają broń na tym samym poziomie, awansuj ich, aby otrzymali broń z kolejnego poziomu.
-
W innym przypadku, jeśli w drużynie jest gracz dysponujący bronią niższego poziomu, zamiast tego awansuj takiego gracza.
Dzięki temu gracze będą zdobywali kolejne poziomy broni drużynowo i żaden gracz nie będzie wyprzedzał innych graczy z drużyny ani zostawał za nimi w tyle o więcej niż jeden poziom broni.
W tym celu musisz wiedzieć, kiedy gracz dokona likwidacji, a następnie porównać jego poziom broni z poziomami broni innych graczy w drużynie i awansować gracza zgodnie z dwiema powyższymi regułami.
Aby bronie były przyznawane graczom, gdy dokonają likwidacji, wykonaj następujące instrukcje:
-
Dodaj nową metodę
GiveNextWeapondo klasyteam_elimination_game. Metoda ta przyznaje graczowi broń za każdym razem, gdy gracz lub inny członek jego drużyny dokona likwidacji, uwzględniając przy tym dwie powyższe reguły.GiveNextWeapon(EliminatingPlayer : agent) : void = Print("Znajdowanie gracza do awansu") -
Zaktualizuj metodę
OnPlayerEliminated, aby monitorować, który gracz dokonał likwidacji. MetodaOnPlayerEliminatedakceptuje strukturęelimination_result, więc otrzymujesz odwołanie zarówno do postaci likwidowanej, jak i likwidującej. W związku z tym, że gracze mogą być likwidowani na różne sposoby (np. w wyniku obrażeń od upadku, przez wartowników, w wyniku samodzielnie zadanych sobie obrażeń itp.), musisz ustalić, czy postaćEliminatingCharacterjest rzeczywiście postaciąFortCharacter(czyli rzeczywistym graczem).- Pobierz odwołanie do
Result.EliminatingCharacteri zapisz je w lokalnej zmiennej opcjiEliminator. Sprawdź, czyEliminatorjest prawidłową postaciąFortCharacter, a jeśli tak, zapisz agenta dla tej postaci w innej zmiennej o nazwieEliminatorAgent. Na końcu przekaż zmiennąEliminatorAgentdo metodyGiveNextWeapon
OnPlayerEliminated(Result : elimination_result) : void = Print("Gracz został zlikwidowany!") Eliminator := Result.EliminatingCharacter if (FortCharacter := Eliminator?, EliminatorAgent := FortCharacter.GetAgent[]): GiveNextWeapon(EliminatorAgent) - Pobierz odwołanie do
-
Metoda
GiveNextWeaponmusi monitorować kilka zmiennych, aby przyznać właściwemu graczowi nową broń. Dodaj poniższe deklaracje do metodyGiveNextWeapon.-
Zmienna
WeaponTiertypu liczba całkowita (int). Śledzi poziom broni gracza, któremu ma być przyznana broń. -
Opcjonalna zmienna agenta o nazwie
MaybePlayerToGrantoznaczająca gracza, któremu będzie przypisywana broń. Domyślnie jest to gracz przekazany do metodyGiveNextWeapon. -
Opcjonalna zmienna drużyny
MaybePlayerTeamoznaczająca drużynę gracza, któremu będzie przyznawana broń. Domyślnie jest to drużyna gracza przekazana do metodyGiveNextWeapon.
GiveNextWeapon(EliminatingPlayer : agent) : void = Print("Znajdowanie gracza do awansu") var WeaponTier : int = 0 var MaybePlayerToGrant : ?agent = option{EliminatingPlayer} # Gracz, który ma otrzymać broń var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # Drużyna, do której należy ten gracz -
-
Wyodrębnij wartość zmiennej
MaybePlayerTeamdo zmiennej lokalnejPlayerTeam, a następnie ustaw dla zmiennejWeaponTierwartość odpowiadającą wynikowi gracza w mapieTeamMap.var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # Drużyna, do której należy ten gracz if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): -
Wykonaj iterację po wszystkich graczach w drużynie i porównaj ich poziom broni. Jeśli znajdziesz gracza z bronią niższego poziomu, ustaw tego gracza w zmiennej
MaybePlayerToGrant, a w zmiennejWeaponTierprzyjmij jego wynik. W związku z tym, żeTeamMapjest mapą, możesz wyodrębnić zarówno klucz (gracza), jak i wartość (poziom broni) jako zmienne lokalne, stosując składnięTeammate -> TeammateTier.if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier): Print("Znaleziono członka drużyny z niższym poziomem na poziomie {TeammateTier}") if(set WeaponTier = TeamMap[PlayerTeam][Teammate]): set MaybePlayerToGrant = option{Teammate} -
Po znalezieniu gracza z najniższym (lub równym najniższemu w drużynie) poziomem broni, zwiększ wartość
WeaponTiero jeden, a następnie ustaw poziom broni takiego gracza w mapieTeamMapzgodnie z wartościąWeaponTier.if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier): Print("Znaleziono członka drużyny z niższym poziomem na poziomie {TeammateTier}") if(set WeaponTier = TeamMap[PlayerTeam][Teammate]): set MaybePlayerToGrant = option{Teammate} set WeaponTier = WeaponTier + 1 if(PlayerTeam := MaybePlayerTeam?, PlayerToGrant := player[MaybePlayerToGrant?], set TeamMap[PlayerTeam][PlayerToGrant] = WeaponTier): Print("Gracz eliminujący jest teraz na poziomie {WeaponTier}") -
To dobry moment, aby sprawdzić, czy gracz wygrywa grę, ponieważ zwiększenie poziomu broni może sprawić, że przekroczył on liczbę likwidacji wymaganą do ukończenia gry.
- Utwórz nową metodę
EndGamew klasieteam_elimination_game. Metoda ta aktywuje urządzenieEndGameDevicena rzecz danego gracza, gdy osiągnie on finalny poziom broni. Gotowa metoda powinna wyglądać następująco:
EndGame(InPlayer : agent) : void = Print("Gracz osiągnął ostatni poziom broni, aktywowanie urządzenia EndGameDevice") EndGameDevice.Activate(InPlayer)- Wróć do metody
GiveNextWeaponi po zwiększeniu poziomu broni gracza sprawdź, czyif WeaponTier >= EliminationsToEndGame. Jeśli tak, wywołaj metodęEndGamez przekazaniem gracza.
if(PlayerTeam := MaybePlayerTeam?, PlayerToGrant := player[MaybePlayerToGrant?], set TeamMap[PlayerTeam][PlayerToGrant] = WeaponTier): Print("Gracz eliminujący jest teraz na poziomie {WeaponTier}") if(WeaponTier >= EliminationsToEndGame): EndGame(EliminatingPlayer) - Utwórz nową metodę
-
W innym przypadku wywołaj metodę
GrantWeaponna rzecz graczaGrantedPlayer.if(WeaponTier >= EliminationsToEndGame): EndGame(EliminatingPlayer) GrantWeapon(MaybePlayerToGrant, WeaponTier) -
Kod gotowej metody
GiveNextWeaponpowinien wyglądać następująco.GiveNextWeapon(EliminatingPlayer : agent) : void = Print("Znajdowanie gracza do awansu") var WeaponTier : int = 0 var MaybePlayerToGrant : ?agent = option{EliminatingPlayer} # Gracz, który ma otrzymać broń var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # Drużyna, do której należy ten gracz if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier): Print("Znaleziono członka drużyny z niższym poziomem na poziomie {TeammateTier}") if(set WeaponTier = TeamMap[PlayerTeam][Teammate]): set MaybePlayerToGrant = option{Teammate} set WeaponTier = WeaponTier + 1 if(PlayerTeam := MaybePlayerTeam?, PlayerToGrant := player[MaybePlayerToGrant?], set TeamMap[PlayerTeam][PlayerToGrant] = WeaponTier): Print("Gracz eliminujący jest teraz na poziomie {WeaponTier}") if(WeaponTier >= EliminationsToEndGame): EndGame(EliminatingPlayer) GrantWeapon(MaybePlayerToGrant, WeaponTier)
Zapisz skrypt w Visual Studio Code, skompiluj go, a następnie na pasku narzędzi UEFN kliknij opcję Uruchom sesję, aby przetestować poziom w grze. W trakcie testu poziomu w grze gracz powinien ponownie spawnować się z pierwszą bronią z tablicy WeaponGranters. Sprawdź to zachowanie w dzienniku. Zlikwidowanie gracza przeciwnej drużyny powinno awansować cię do otrzymania kolejnej broni. Awansowanie powinno przebiegać zgodnie z dwiema przedstawionymi powyżej regułami. Awans u gracza dysponującego bronią najwyższego poziomu w sekwencji powinien zakończyć grę przyznaniem zwycięstwa graczowi, który dokonał likwidacji.

Następny krok
W kolejnym kroku tego samouczka dowiesz się, jak dodawać graczy do mapy i przypisywać im broń, gdy dołączają do toczącej się gry.