In diesem Abschnitt wird gezeigt, wie du das Verse-Script hinzufügst und das Verse-Gerät platzierst, um das Gameplay anzupassen.

Navigiere zu Verse > Verse-Explorer, um ein Verse-Script zu erstellen.

Klicke dann mit der rechten Maustaste auf den Namen deiner Projektdatei und wähle Neue Verse-Datei zum Projekt hinzufügen.

Wähle Verse-Gerät, gib dem Gerät einen Namen und klicke auf Erstellen. In diesem Tutorial wird das Verse-Gerät Stronghold_Game_Manager genannt.

Doppelklicke auf die Verse-Datei des Geräts, um das Verse-Script aufzurufen. Kopiere den unten stehenden Code und füge ihn ein.
using { /Fortnite.com/AI }
using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /Fortnite.com/Game }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /Verse.org/Simulation }
using { /Verse.org/Verse }
# Stronghold ist ein Spielmodus, in dem die Spieler alle feindlichen Gegner in einer schwer bewachten Festung eliminieren müssen.
# Das Verse-Gerät Stronghold Game Manager dient zur Verwaltung, Überwachung und Steuerung der KIs in der Festung.
stronghold_game_manager := class(creative_device):
# Gerätereferenz auf das Wachen-Spawner-Gerät, das bei Eliminierungen zu beachten ist.
@editable
GuardsInitialSpawners:[]guard_spawner_device := array{}
# Gerätereferenz auf das Wachen-Spawner-Gerät, das bei Eliminierungen für die Mehrspieler-Skalierung zu beachten ist.
@editable
GuardsInitialSpawnersAdditional:[]guard_spawner_device := array{}
# Geräte-Referenz zum Spawner-Gerät der Verstärkungswächter, das ausgelöst wird, wenn einer der Wächter der Festung alarmiert wird
@editable
GuardsReinforcementSpawners:[]guard_spawner_device := array{}
# Geräte-Referenz zum Spawner-Gerät der Verstärkungswächter für die Mehrspieler-Skalierung, das ausgelöst wird, wenn einer der Wächter der Festung alarmiert wird
@editable
GuardsReinforcementSpawnersAdditional:[]guard_spawner_device := array{}
# Gerätereferenz zur Anzeige und Verfolgung von Zielen
@editable
ObjectiveTracker:tracker_device := tracker_device{}
# Geräte-Referenz zur In-Game-Anzeige der Verstärkungsmeldung
@editable
MessageDeviceReinforcement:hud_message_device := hud_message_device{}
# Geräte-Referenz zur Anzeige der Fallback-Meldung im Spiel
@editable
MessageDeviceFallback:hud_message_device := hud_message_device{}
# Geräte-Referenz, um das Spiel mit einem Sieg zu beenden, wenn die Spieler die Festung erreicht haben, ohne entdeckt zu werden
@editable
EndGameVictoryDeviceUndetected:end_game_device := end_game_device{}
# Geräte-Referenz, um das Spiel mit einem Sieg zu beenden, wenn die Spieler die Festung erreicht haben, während sie entdeckt wurden
@editable
EndGameVictoryDeviceDetected:end_game_device := end_game_device{}
# Geräte-Referenz, um das Spiel mit einem Fehlschlag zu beenden, wenn die Spieler keine Wiederholungsversuche mehr haben
@editable
EndGameFailDevice:end_game_device := end_game_device{}
# Einstellbare Anzahl von Spielerleben
@editable
var PlayerRetries:int = 2
# Gerät zur Referenz der Stronghold-Leinenposition
@editable
ReinforcementLeashReference:stronghold_leash_position := stronghold_leash_position{}
# Gerät zur Referenz der Position der Fallback-Leine
@editable
FallbackLeashReference:stronghold_leash_position := stronghold_leash_position{}
# Leinen, die nach dem Fallback deaktiviert werden müssen
@editable
LeashesToDisableForFallback:[]stronghold_leash_position := array{}
# Gerät für die Explosion
@editable
ExplosiveDevice:explosive_device := explosive_device{}
# Die Wahrnehmung der Wächter wird von diesem Script überwacht, die anderen Scripts können diese Events abonnieren
# Dieses Event wird gesendet, wenn eine Wache um Verstärkung ruft.
ReinforcementsCalledEvent:event(agent) = event(agent){}
# Dieses Event wird gesendet, wenn die Wachen das Zentrum der Festung verteidigen.
FallbackEvent:event() = event(){}
# Dieses Event wird gesendet, wenn eine Wache misstrauisch wird.
GuardsSuspiciousEvent:event(agent) = event(agent){}
# Dieses Event wird gesendet, wenn alle Wächter unaufmerksam werden.
GuardsUnawareEvent:event(agent) = event(agent){}
# Dieses Event wird gesendet, wenn ein Spieler entdeckt wird.
PlayerDetectedEvent:event(agent) = event(agent){}
# Dieses Event wird gesendet, wenn alle Wächter ihr Ziel verloren haben.
PlayerLostEvent:event(agent) = event(agent){}
# Liste von Wächtern in einem bestimmten Alarmzustand zur Überwachung von Wahrnehmungsänderungen
# Variable zum Speichern von Verstärkungswächtern
var<private> NumGuardsSpawned:int := 0
# Variable zum Speichern aller Stronghold-Wächter
var<private> StrongholdGuards:[]agent := array{}
# Variable zum Speichern von Verstärkungswächtern
var<private> ReinforcementGuards:[]agent := array{}
# Liste der derzeit misstrauischen Wächter
var<private> SuspiciousGuards : []agent = array{}
# Liste der derzeit alarmierten Wächter
var<private> AlertedGuards : []agent = array{}
# Liste der Wächter, die derzeit ermitteln
var<private> InvestigatingGuards : []agent = array{}
# Anfängliche Wächter-Spawners, enthält bei einer Mehrspieler-Sitzung zusätzliche Spawners
var<private> GuardsInitialSpawnersInternal:[]guard_spawner_device = array{}
# Verstärkungswächter-Spawners, enthält bei Mehrspieler-Session zusätzliche Spawners
var<private> GuardsReinforcementSpawnersInternal:[]guard_spawner_device = array{}
# Gameplay-Logik-Variablen
# Variable, die die Anzahl der Eliminierungen von allen Stronghold-Wächtern erfasst
var<private> GuardsEliminated:int := 0
# Variable zur Verfolgung, ob die Verstärkung gerufen wurde oder nicht
var<private> ReinforcementTriggered:logic := false
# Variable zur Verfolgung, ob der Fallback ausgelöst wurde
var<private> FallbackTriggered:logic := false
# Variable zum Speichern des ersten Spieleragenten, der von den Wachen entdeckt wird
var<private> DetectedPlayer:?player := false
# Wird ausgeführt, wenn das Gerät in einem laufenden Spiel gestartet wird.
OnBegin<override>()<suspends>:void=
# Aktiven Spieler auf Schwierigkeitsskalierung prüfen
AllPlayers := GetPlayspace().GetPlayers()
NumberOfActivePlayers := AllPlayers.Length
set GuardsInitialSpawnersInternal = GuardsInitialSpawners
set GuardsReinforcementSpawnersInternal = GuardsReinforcementSpawners
# Zusätzlichen Wächter-Spawner hinzufügen, wenn es mehr als 2 Spieler gibt
if (NumberOfActivePlayers > 2):
set GuardsInitialSpawnersInternal += GuardsInitialSpawnersAdditional
set GuardsReinforcementSpawnersInternal += GuardsReinforcementSpawnersAdditional
var NumInitialGuards:int = 0
for (GuardSpawner : GuardsInitialSpawnersInternal):
GuardSpawner.Enable()
SubscribeToGuardSpawnerEvents(GuardSpawner);
set NumInitialGuards += GuardSpawner.GetSpawnLimit()
ObjectiveTracker.SetTarget(NumInitialGuards)
for (GuardReinforcementSpawner : GuardsReinforcementSpawnersInternal):
SubscribeToGuardSpawnerEvents(GuardReinforcementSpawner);
# Abonnieren eines Verstärkungs-Spawn-Events
GuardReinforcementSpawner.SpawnedEvent.Subscribe(OnReinforcementSpawned)
GuardReinforcementSpawner.AlertedEvent.Subscribe(OnReinforcementAlerted)
GuardReinforcementSpawner.UnawareEvent.Subscribe(OnReinforcementUnaware)
# Abonnieren eines Events zur Spielereliminierung
for (StrongholdPlayer : AllPlayers, StrongholdPC := StrongholdPlayer.GetFortCharacter[]):
StrongholdPC.EliminatedEvent().Subscribe(OnPlayerEliminated)
StartGameplay()
SubscribeToGuardSpawnerEvents(SpawnerDevice:guard_spawner_device):void =
SpawnerDevice.SpawnedEvent.Subscribe(OnGuardSpawned)
SpawnerDevice.EliminatedEvent.Subscribe(OnGuardEliminated)
SpawnerDevice.SuspiciousEvent.Subscribe(OnGuardSuspicious)
SpawnerDevice.AlertedEvent.Subscribe(OnGuardAlerted)
SpawnerDevice.TargetLostEvent.Subscribe(OnGuardLostTarget)
SpawnerDevice.UnawareEvent.Subscribe(OnGuardUnaware)
# Beginne mit der Nachverfolgung eliminierter Wachen und löse die Explosion aus.
StartGameplay()<suspends>:void =
ObjectiveTracker.AssignToAll()
Sleep(3.0)
if (FirstPlayer:=GetPlayspace().GetPlayers()[0]):
ExplosiveDevice.Explode(FirstPlayer)
# Wird ausgeführt, wenn der Wächter-Spawner ein Alarm-Event erhält, und berücksichtigt nur das erste Alarm-Event.
OnGuardAlerted(InteractionResult:device_ai_interaction_result):void=
if:
not ReinforcementTriggered?
set DetectedPlayer = option{player[InteractionResult.Target?]}
Guard:=InteractionResult.Source?
then:
var NumGuards:int = ObjectiveTracker.GetTarget()
# Das Aktivieren des Verstärkungswächter-Spawner-Geräts stellt sicher, dass wir die im Wächter-Spawner-Gerät konfigurierte Anzahl von Wächtern spawnen.
for (GuardReinforcementSpawner : GuardsReinforcementSpawnersInternal):
GuardReinforcementSpawner.Enable()
set NumGuards += GuardReinforcementSpawner.GetSpawnLimit()
ObjectiveTracker.SetTarget(NumGuards)
# Anzeige einer In-Game-Nachricht bei Entdeckung und eingehender Verstärkung
MessageDeviceReinforcement.Show()
set ReinforcementTriggered = true
# Signal-Verstärkung-Event
ReinforcementsCalledEvent.Signal(Guard)
# Füge den Wächter zur Liste der alarmierten Wächter hinzu, wenn er nicht schon vorher hinzugefügt wurde.
if(Guard:=InteractionResult.Source?):
if (not AlertedGuards.Find[Guard]):
set AlertedGuards += array{Guard}
option {set SuspiciousGuards = SuspiciousGuards.RemoveFirstElement[Guard]}
option {set InvestigatingGuards = InvestigatingGuards.RemoveFirstElement[Guard]}
# Sende das Event "Spieler entdeckt", wenn eine Wache alarmiert ist
if (AlertedGuards.Length = 1):
PlayerDetectedEvent.Signal(Guard)
# Läuft, wenn der Spawner der Verstärkungswache ein Alarm-Event erhält
OnReinforcementAlerted(InteractionResult:device_ai_interaction_result):void=
if:
not FallbackTriggered?
Guard:=InteractionResult.Source?
then:
# Leine los für Verstärkung bei Alarm, damit sie ihr Ziel angreifen
ReinforcementLeashReference.ClearLeashOnGuard(Guard)
# Läuft, wenn der Spawner der Verstärkungswache ein Unaufmerksam-Event erhält
OnReinforcementUnaware(Guard:agent):void=
if (not FallbackTriggered?):
# Leine zurücksetzen
ReinforcementLeashReference.ApplyLeashOnGuard(Guard)
# Läuft, wenn der Wächter-Spawner ein Unaufmerksam-Event erhält
OnGuardSuspicious(Guard:agent):void=
if (not SuspiciousGuards.Find[Guard]):
set SuspiciousGuards += array{Guard}
# Sende das Suspicious-Event, wenn ein Wächter misstrauisch wird
if:
SuspiciousGuards.Length = 1
AlertedGuards.Length = 0
InvestigatingGuards.Length = 0
then:
GuardsSuspiciousEvent.Signal(Guard)
# Läuft, wenn der Wächter-Spawner ein Unaufmerksam-Event erhält
OnGuardUnaware(Guard:agent):void=
option {set AlertedGuards = AlertedGuards.RemoveFirstElement[Guard]}
option {set SuspiciousGuards = SuspiciousGuards.RemoveFirstElement[Guard]}
option {set InvestigatingGuards = InvestigatingGuards.RemoveFirstElement[Guard]}
# Sende das Unaware-Event, wenn kein Wächter verdächtig ist, alarmiert ist oder eine Suche durchführt
if:
SuspiciousGuards.Length = 0
AlertedGuards.Length = 0
InvestigatingGuards.Length = 0
then:
GuardsUnawareEvent.Signal(Guard)
# Wenn ein Wächter den Spieler aus den Augen verliert, entferne ihn aus der Liste der alarmierten Wächter, wenn alle Wächter den Spieler verloren haben, signalisiere das Event
OnGuardLostTarget(InteractionResult:device_ai_interaction_result):void=
if (Guard := InteractionResult.Source?):
if (not InvestigatingGuards.Find[Guard]):
set InvestigatingGuards += array{Guard}
# Sende das Event "Spieler verloren", wenn kein Wächter alarmiert ist
if (set AlertedGuards = AlertedGuards.RemoveFirstElement[Guard]):
if (AlertedGuards.Length = 0):
PlayerLostEvent.Signal(Guard)
# Läuft, wenn ein Verstärkungswächter gespawnt wird. Jeder Verstärkungswächter ist gezwungen, den Spieler anzugreifen, der die Festung alarmiert hat.
OnReinforcementSpawned(Guard:agent):void=
set ReinforcementGuards += array{Guard}
ReinforcementLeashReference.ApplyLeashOnGuard(Guard)
# Weist den Spieler, der die Festungswachen alarmiert hat, als Ziel zu.
if (Target := DetectedPlayer?):
for (GuardReinforcementSpawner : GuardsReinforcementSpawnersInternal):
GuardReinforcementSpawner.ForceAttackTarget(Target, ?ForgetTime:=30.0)
# Läuft, wenn ein beliebiger Wächter von der Festung gespawnt wird
OnGuardSpawned(Guard:agent):void=
set StrongholdGuards += array{Guard}
set NumGuardsSpawned += 1
# Läuft, wenn Erst- oder Verstärkungs-Spawner eine Eliminierung erhalten
OnGuardEliminated(InteractionResult:device_ai_interaction_result):void=
set GuardsEliminated += 1
if (EliminatedAgent := InteractionResult.Target?):
# Entfernt den eliminierten Wächter aus der Liste der alarmierten Wächter
option {set AlertedGuards = AlertedGuards.RemoveFirstElement[EliminatedAgent]}
option {set SuspiciousGuards = SuspiciousGuards.RemoveFirstElement[EliminatedAgent]}
option {set InvestigatingGuards = InvestigatingGuards.RemoveFirstElement[EliminatedAgent]}
option {set StrongholdGuards = StrongholdGuards.RemoveFirstElement[EliminatedAgent]}
if (EliminationAgent := InteractionResult.Source?):
# Erhöhen des Fortschrittswerts für das Verfolgungsgerät bei jeder Eliminierung
ObjectiveTracker.Increment(EliminationAgent)
if (ReinforcementTriggered?):
if (NumGuardsSpawned - GuardsEliminated = 3):
StartFallback()
# Beendet den Spielmodus, wenn alle Wachen ohne Verstärkung eliminiert wurden.
if (GuardsEliminated >= NumGuardsSpawned):
EndGameVictoryDeviceDetected.Activate(EliminationAgent)
else:
# Beendet den Spielmodus, wenn alle Wachen mit Verstärkung eliminiert wurden.
if (GuardsEliminated >= NumGuardsSpawned):
EndGameVictoryDeviceUndetected.Activate(EliminationAgent)
# Weist eine neue Fallback-Leine zu, wenn nur noch ein paar alarmierte Wachen übrig sind, um das Zentrum der Festung zu verteidigen
StartFallback():void=
# Anzeige einer In-Game-Nachricht für Wachen, die sich innerhalb des Festungsgebäudes zurückziehen
MessageDeviceFallback.Show()
set FallbackTriggered = true
for (LeashDevice : LeashesToDisableForFallback):
LeashDevice.DisableLeashAndPatrolPaths()
FallbackLeashPosition := FallbackLeashReference.GetTransform().Translation
FallbackEvent.Signal()
for (Guard : StrongholdGuards):
FallbackLeashReference.ApplyLeashOnGuard(Guard)
# Läuft, wenn ein Spieler-Eliminierungs-Event empfangen wird
OnPlayerEliminated(EliminationResult:elimination_result):void=
set PlayerRetries -= 1
if (PlayerRetries = 0, Agent := EliminationResult.EliminatedCharacter.GetAgent[]):
EndGameFailDevice.Activate(Agent)

Navigiere dann zu Verse > Verse-Code erstellen, um das Verse-Script zu kompilieren.

Navigiere zu Alle/"Projektname"/CreativeDevices/ und wähle dein Verse-Gerät aus.

Ziehe dann dein Verse-Gerät auf deine Karte. Diese erscheint erst nach dem Kompilieren des Verse-Scripts.
Navigiere bei ausgewähltem Verse-Gerät zum Bereich Details und aktualisiere die Benutzeroptionen wie unten gezeigt.

Option | Wert | Beschreibung |
---|---|---|
Sichtbar im Spiel | False | Dieses Gerät wird im Spiel nicht sichtbar sein. |
Guards_InitialSpawners | 3 Array-Elemente | Klicke auf das Pluszeichen, um drei Elemente zu dieser Einstellung hinzuzufügen. |
0 | Wächter-Spawner | Dies ist ein Array mit allen Geräten, die verwendet werden, um die ersten Wächter in der Festung zu spawnen. |
1 | Wächter Spawner Sniper Tower 1 | Dies ist ein Array aller Geräte, die zum Spawnen der ersten Wächter in der Festung verwendet werden. |
2 | Wächter Spawner Sniper Tower 2 | Dies ist ein Array aller Geräte, die zum Spawnen der ersten Wächter in der Festung verwendet werden. |
Guards_ReinforcementSpawner | Wächter-Spawner-Verstärkung | Spawnt die Verstärkungswächter. |
Ziel-Tracker | Tracker | Zeigt die Stronghold-Ziele und die Anzahl der Eliminierungen an. |
MessageDeviceReinforcement | HUD-Nachrichtenübermittler Verstärkung | Zeigt die Verstärkungsmeldung auf dem Bildschirm an. |
MessageDeliverFallback | HUD-Nachrichtenübermittler Fallback | Zeigt die Fallbackmeldung auf dem Bildschirm an. |
EndGameVictoryDeviceUndetected | Spielende Gerät unentdeckt | Zeigt den Sieg- und Unentdeckt-Endbildschirm an. |
EndGameVictoryDeviceDetected | Spielende Gerät Entdeckt | Zeigt den Sieg und Entdeckt-Endbildschirm an. |
EndGameFailDevice | Spielende Gerät Fehlschlag | Zeigt den Fehlschlag-Endbildschirm an, weil der Spieler keine Leben mehr hat. |
EliminationCount | 6 | Bestimmt die Anzahl der Wachen, die eliminiert werden müssen, um die Festung unentdeckt zu verlassen. |
EliminationCountWithReinforcement | 10 | Bestimmt die Anzahl der Eliminierungen von Wachen, die erforderlich sind, um die Festung mit ausgelöster Verstärkung zu beenden. |
PlayerRetries | 2 | Bestimmt die Anzahl der Leben, die der Spieler hat, um zu versuchen, die Festung erfolgreich zu beenden. Wenn der Spieler keine Leben mehr hat, ist die Festung gescheitert. |
StrongholdLeashReferernce | Leinenposition Stronghold | Die Leinenposition-Geräte verwenden ihre Position als Ursprung der Stronghold-Leine. |
FallbackLeashReference | Leinenposition Fallback | Das Leinenposition-Gerät verwendet seine Position als Ursprung für die Fallback-Leine. |
StrongholdLeashInnerRadius | 2400.0 | Bestimmt den inneren Radius für die Festungsleine in Zentimetern. Muss kleiner sein als der äußere Radius. |
StrongholdLeashOuterRadius | 2500.0 | Bestimmt den äußeren Radius für die Stronghold-Leine. |
DefendFallbackLeashInnerRadius | 700.0 | Bestimmt den inneren Radius für die Verteidigungs-Fallback-Leine in Zentimetern. Muss kleiner sein als der äußere Radius. |
DefendFallbackLeashOuterRadius | 750.0 | Bestimmt den äußeren Radius für die Verteidigungs-Fallback-Leine in Zentimetern. |
Nächster Abschnitt
%verse-stronghold-template-4-add-devices-in-unreal-editor-for-fortnite:topic%