Esta seção mostrará como adicionar o script Verse e colocar o dispositivo Verse para personalizar a experiência de jogo.

Acesse Verse > Explorador do Verse para criar um script Verse.

Em seguida, clique com o botão direito do mouse no nome do arquivo do projeto e selecione Adicionar novo arquivo Verse ao projeto.

Selecione Dispositivo Verse, dê um nome a ele e clique em "Criar". Neste tutorial, o dispositivo Verse se chama "Stronghold_Game_Manager" (gerenciador de jogo de fortaleza).

Clique duas vezes no arquivo Verse do dispositivo para abrir o script Verse. Copie e cole o código abaixo.
~~~(verse) 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 }
A Fortaleza é um modo de jogo no qual os jogadores devem eliminar todos os inimigos hostis em uma Fortaleza fortemente protegida
O dispositivo Verse gerenciador de jogo de fortaleza ("Stronghold_Game_Manager") é usado para gerenciar, monitorar e controlar as IAs na Fortaleza
stronghold_game_manager := class(creative_device):
# A referência para o dispositivo gerador de guardas a ser acompanhado para verificar as eliminações
@editable
GuardsInitialSpawners:[]guard_spawner_device := array{}
# A referência para o dispositivo gerador de guardas a ser acompanhado para verificar as eliminações para o ajuste de escala multijogador
@editable
GuardsInitialSpawnersAdditional:[]guard_spawner_device := array{}
# A referência para o dispositivo gerador de guardas de reforço a ser acionado quando um dos guardas da Fortaleza for alertado
@editable
GuardsReinforcementSpawners:[]guard_spawner_device := array{}
# A referência para o dispositivo gerador de guardas de reforço a ser acionado quando um dos guardas da Fortaleza for alertado para o ajuste de escala multijogador
@editable
GuardsReinforcementSpawnersAdditional:[]guard_spawner_device := array{}
# A referência ao dispositivo para exibir e rastrear objetivos
@editable
ObjectiveTracker:tracker_device := tracker_device{}
# A referência ao dispositivo para exibir a mensagem de reforço no jogo
@editable
MessageDeviceReinforcement:hud_message_device := hud_message_device{}
# A referência ao dispositivo para exibir a mensagem de retirada no jogo
@editable
MessageDeviceFallback:hud_message_device := hud_message_device{}
# A referência ao dispositivo para encerrar o jogo com uma vitória se os jogadores concluírem a Fortaleza sem serem detectados
@editable
EndGameVictoryDeviceUndetected:end_game_device := end_game_device{}
# A referência ao dispositivo para encerrar o jogo com uma vitória se os jogadores concluírem a Fortaleza depois de serem detectados
@editable
EndGameVictoryDeviceDetected:end_game_device := end_game_device{}
# A referência ao dispositivo para encerrar o jogo com fracasso se os jogadores ficarem sem novas tentativas
@editable
EndGameFailDevice:end_game_device := end_game_device{}
# O número ajustável de vidas do jogador
@editable
var PlayerRetries:int = 2
# O dispositivo para indicar a posição das restrições da Fortaleza
@editable
ReinforcementLeashReference:stronghold_leash_position := stronghold_leash_position{}
# O dispositivo para indicar a posição de domínio de retirada
@editable
FallbackLeashReference:stronghold_leash_position := stronghold_leash_position{}
# Os domínios que devem ser desabilitados após a retirada
@editable
LeashesToDisableForFallback:[]stronghold_leash_position := array{}
# O dispositivo para a explosão
@editable
ExplosiveDevice:explosive_device := explosive_device{}
# A percepção dos guardas é monitorada por esse script, os outros scripts podem ser inscritos nesses eventos
# O evento transmitido quando um guarda pede reforços
ReinforcementsCalledEvent:event(agent) = event(agent){}
# O evento transmitido quando guardas defendem o centro da Fortaleza
FallbackEvent:event() = event(){}
# O evento transmitido quando um guarda que fica desconfiado
GuardsSuspiciousEvent:event(agent) = event(agent){}
# O evento transmitido quando todos os guardas deixam de ficar em alerta
GuardsUnawareEvent:event(agent) = event(agent){}
# O evento transmitido quando um jogador é detectado
PlayerDetectedEvent:event(agent) = event(agent){}
# O evento transmitido quando todos os guardas perderam seu alvo
PlayerLostEvent:event(agent) = event(agent){}
# As listas de guardas em um estado de alerta específico para monitorar alterações de percepção
# A variável que deve armazenar guardas de reforço
var
StartGameplay()
if:
not FallbackTriggered?
Guard:=InteractionResult.Source?
then:
# Remover o domínio dos reforços em alerta para que ataquem o alvo
ReinforcementLeashReference.ClearLeashOnGuard(Guard)
# Executado quando o gerador de guardas de reforço recebe um evento para sair do modo de alerta
OnReinforcementUnaware(Guard:agent):void=
if (not FallbackTriggered?):
# Definir o domínio novamente
ReinforcementLeashReference.ApplyLeashOnGuard(Guard)
# Executado quando o gerador de guardas recebe um evento para sair do modo de alerta
OnGuardSuspicious(Guard:agent):void=
if (not SuspiciousGuards.Find[Guard]):
set SuspiciousGuards += array{Guard}
# Transmitir o evento de desconfiança quando um guarda estiver desconfiado
if:
SuspiciousGuards.Length = 1
AlertedGuards.Length = 0
InvestigatingGuards.Length = 0
then:
GuardsSuspiciousEvent.Signal(Guard)
# Executado quando o gerador de guardas recebe um evento de não alerta
OnGuardUnaware(Guard:agent):void=
option {set AlertedGuards = AlertedGuards.RemoveFirstElement[Guard]}
option {set SuspiciousGuards = SuspiciousGuards.RemoveFirstElement[Guard]}
option {set InvestigatingGuards = InvestigatingGuards.RemoveFirstElement[Guard]}
# Transmitir o evento de saída do modo de alerta quando nenhum guarda estiver desconfiado, em alerta ou investigando
if:
SuspiciousGuards.Length = 0
AlertedGuards.Length = 0
InvestigatingGuards.Length = 0
then:
GuardsUnawareEvent.Signal(Guard)
# Quando um guarda perder o rastro do jogador, removê-lo da lista de guardas em alerta, quando todos os guardas tiverem perdido o jogador, sinalizar o evento
OnGuardLostTarget(InteractionResult:device_ai_interaction_result):void=
if (Guard := InteractionResult.Source?):
if (not InvestigatingGuards.Find[Guard]):
set InvestigatingGuards += array{Guard}
# Transmitir o evento de jogador perdido quando nenhum guarda estiver em alerta
if (set AlertedGuards = AlertedGuards.RemoveFirstElement[Guard]):
if (AlertedGuards.Length = 0):
PlayerLostEvent.Signal(Guard)
# Executado quando um guarda de reforço for gerado. Cada guarda de reforço é forçado a atacar o jogador que alertou a Fortaleza
OnReinforcementSpawned(Guard:agent):void=
set ReinforcementGuards += array{Guard}
ReinforcementLeashReference.ApplyLeashOnGuard(Guard)
# Designa o jogador que alertou os guardas da Fortaleza como alvo
if (Target := DetectedPlayer?):
for (GuardReinforcementSpawner : GuardsReinforcementSpawnersInternal):
GuardReinforcementSpawner.ForceAttackTarget(Target, ?ForgetTime:=30.0)
# Executado quando qualquer guarda da Fortaleza for gerado
OnGuardSpawned(Guard:agent):void=
set StrongholdGuards += array{Guard}
set NumGuardsSpawned += 1
# Executado quando os geradores iniciais ou de reforços recebem uma eliminação
OnGuardEliminated(InteractionResult:device_ai_interaction_result):void=
set GuardsEliminated += 1
if (EliminatedAgent := InteractionResult.Target?):
# Remover o guarda eliminado da lista de guardas em alerta
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?):
# O valor de progresso que aumenta para o dispositivo rastreador para cada eliminação
ObjectiveTracker.Increment(EliminationAgent)
if (ReinforcementTriggered?):
if (NumGuardsSpawned - GuardsEliminated = 3):
StartFallback()
# Encerrar o modo de jogo se todos os guardas tiverem sido eliminados sem os reforços
if (GuardsEliminated >= NumGuardsSpawned):
EndGameVictoryDeviceDetected.Activate(EliminationAgent)
else:
# Encerrar o modo de jogo se todos os guardas tiverem sido eliminados com os reforços
if (GuardsEliminated >= NumGuardsSpawned):
EndGameVictoryDeviceUndetected.Activate(EliminationAgent)
# Atribuir um novo domínio de retirada quando alguns guardas em alerta permanecem para defender o centro da Fortaleza
StartFallback():void=
# Exibição da mensagem no jogo para guardas que recuam para dentro da edificação da Fortaleza
MessageDeviceFallback.Show()
set FallbackTriggered = true
for (LeashDevice : LeashesToDisableForFallback):
LeashDevice.DisableLeashAndPatrolPaths()
FallbackLeashPosition := FallbackLeashReference.GetTransform().Translation
FallbackEvent.Signal()
for (Guard : StrongholdGuards):
FallbackLeashReference.ApplyLeashOnGuard(Guard)
# Executado quando um evento de eliminação de jogador é recebido
OnPlayerEliminated(EliminationResult:elimination_result):void=
set PlayerRetries -= 1
if (PlayerRetries = 0, Agent := EliminationResult.EliminatedCharacter.GetAgent[]):
EndGameFailDevice.Activate(Agent)
~~~

Em seguida, acesse Verse > Compilar código do Verse para compilar o script Verse.

Acesse Tudo/"Nome do Projeto"/Dispositivos do Modo Criativo/ e selecione seu dispositivo Verse.

Em seguida, arraste o dispositivo Verse até o mapa. O que aparecerá apenas após a compilação do script Verse.
Com seu dispositivo Verse selecionado, acesse o painel Detalhes e atualize as Opções do Usuário conforme mostrado abaixo.

Opção | Valor | Explicação |
---|---|---|
Visível no Jogo | Falso | Esse dispositivo não ficará visível durante o jogo. |
Guards_InitialSpawners | 3 elementos de matriz | Clique no sinal de mais para adicionar três elementos a essa configuração. |
0 | Gerador de Guardas | É uma matriz de todos os dispositivos usados para gerar os guardas iniciais na Fortaleza. |
1 | Torre de Atirador de Elite do Gerador de Guardas 1 | É uma matriz de todos os dispositivos usados para gerar os guardas iniciais na Fortaleza. |
2 | Torre de Atirador de Elite do Gerador de Guardas 2 | É uma matriz de todos os dispositivos usados para gerar os guardas iniciais na Fortaleza. |
Guards_ReinforcementSpawner | Gerador de Guardas - Reforço | Gera os guardas de reforço. |
Rastreador de Objetivos | Rastreador | Exibe os objetivos da Fortaleza e a contagem de eliminações. |
MessageDeviceReinforcement | Dispositivo de Mensagem do HUD - Reforço | Exibe a mensagem de reforço na tela. |
MessageDeliverFallback | Dispositivo de Mensagem do HUD - Retirada | Exibe a mensagem de retirada na tela. |
EndGameVictoryDeviceUndetected | Dispositivo de Fim de Jogo - Não Detectado | Exibe a tela de vitória e de final não detectado. |
EndGameVictoryDeviceDetected | Dispositivo de Fim de Jogo - Detectado | Exibe a vitória e a tela final de detectado. |
EndGameFailDevice | Dispositivo de Fim de Jogo - Falha | Exibe a tela final de falha porque o jogador ficou sem vidas. |
EliminationCount | 6 | Determina a quantidade de eliminações de guardas necessária para concluir a Fortaleza sem ser detectado. |
EliminationCountWithReinforcement | 10 | Determina a quantidade de eliminações de guardas necessária para completar a Fortaleza com reforços acionados. |
PlayerRetries | 2 | Determina o número de vidas que o jogador tem para tentar concluir a Fortaleza com êxito. Se ficar sem vidas, o jogador não concluirá a Fortaleza. |
StrongholdLeashReferernce | Posição de Domínio - Fortaleza | Os dispositivos de Posição de Domínio usam sua posição como origem do domínio da Fortaleza. |
FallbackLeashReference | Posição de Domínio - Retirada | O dispositivo de Posição de Domínio usa sua posição como origem do domínio de retirada. |
StrongholdLeashInnerRadius | 2400,0 | Determina o raio interno do domínio da fortaleza, em centímetros. Deve ser menor que o raio externo. |
StrongholdLeashOuterRadius | 2500,0 | Determina o raio externo do domínio da fortaleza. |
DefendFallbackLeashInnerRadius | 700,0 | Determina, em centímetros, o raio interno do domínio da retirada de defesa. Deve ser menor que o raio externo. |
DefendFallbackLeashOuterRadius | 750,0 | Determina em centímetros o raio externo para o domínio de retirada de defesa. |
Próxima seção
%verse-stronghold-template-4-add-devices-in-unreal-editor-for-fortnite:topic%