전체 스크립트
다음 코드는 플레이어들이 팀 단위로 무기를 업그레이드하며 진행하는 처치 게임의 완성된 스크립트입니다.
using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /Fortnite.com/Game }
using { /Fortnite.com/Teams }
using { /Verse.org/Simulation }
player_map := [player]int # 이것은 타입 에일리어스입니다!
team_elimination_game := class(creative_device):
@editable
EndGameDevice: end_game_device = end_game_device{}
@editable
var WeaponGranters:[]item_granter_device = array{}
@editable
var PlayerSpawners : []player_spawner_device = array{}
@editable
var Sentries : []sentry_device = array{}
var EliminationsToEndGame : int = 0
var Teams:[]team = array{}
# 팀과 맵을 연결하는 맵으로, 키는 팀이고 값은
# 플레이어->int 키-값 쌍의 맵입니다.
var TeamMap : [team]player_map = map{}
OnBegin<override>()<suspends> : void =
set Teams = GetPlayspace().GetTeamCollection().GetTeams()
set EliminationsToEndGame = WeaponGranters.Length
Print("Beginning to assign players")
PopulateTeamsAndPlayers()
for (Spawner : PlayerSpawners):
Spawner.SpawnedEvent.Subscribe(OnPlayerSpawn) # 각 플레이어 생성 패드에 등록합니다
for (Sentry : Sentries):
Sentry.EliminatedEvent.Subscribe(TestPlayerEliminated) # 각 보초에 등록합니다
# 게임에 참가하는 새 플레이어에 등록합니다
GetPlayspace().PlayerAddedEvent().Subscribe(OnPlayerAdded)
PopulateTeamsAndPlayers() : void =
Print("Beginning to populate players")
for (Team : Teams, TeamPlayers := GetPlayspace().GetTeamCollection().GetAgents[Team]):
var PlayerMap : player_map = map {}
for (Agent : TeamPlayers, TeamPlayer := player[Agent], FortCharacter := Agent.GetFortCharacter[]):
if(set PlayerMap[TeamPlayer] = 0, WeaponTier := PlayerMap[TeamPlayer]):
Print("Assigned Player to PlayerMap with Tier {WeaponTier}")
FortCharacter.EliminatedEvent().Subscribe(OnPlayerEliminated)
if(set TeamMap[Team] = PlayerMap):
Print("Successfully set this team in the TeamMap")
# 게임에 참가하는 새 플레이어를 처리합니다.
OnPlayerAdded(InPlayer:player):void=
Print("A New Player Joined!")
if:
Team := GetPlayspace().GetTeamCollection().GetTeam[InPlayer]
FortCharacter := InPlayer.GetFortCharacter[]
var PlayerMap : player_map = TeamMap[Team]
set PlayerMap[InPlayer] = 0
set TeamMap[Team] = PlayerMap
then:
GrantWeapon(option{InPlayer}, 0)
Print("Set new player weapon tier to 0 in the TeamMap")
FortCharacter.EliminatedEvent().Subscribe(OnPlayerEliminated) # 이 플레이어의 처치 이벤트에 등록합니다
# 플레이어가 생성될 때 WeaponTier를 바탕으로 무기를 지급합니다
OnPlayerSpawn(InPlayer : agent) : void =
Print("A player just spawned!")
if:
PlayerTeam := GetPlayspace().GetTeamCollection().GetTeam[InPlayer]
WeaponTier:int := TeamMap[PlayerTeam][InPlayer]
then:
GrantWeapon(option{InPlayer}, WeaponTier)
Print("Spawned Player was granted a gun of tier {WeaponTier}")
OnPlayerEliminated(Result : elimination_result) : void =
Print("A Player was eliminated!")
Eliminator := Result.EliminatingCharacter
if (FortCharacter := Eliminator?, EliminatorAgent := FortCharacter.GetAgent[]):
GiveNextWeapon(EliminatorAgent)
# 보초를 플레이어로 취급해 GiveNextWeapon을 테스트할 수 있도록 합니다
TestPlayerEliminated(Agent: ?agent) : void =
Print("Sentry Down!")
if(TeamPlayer := Agent?):
GiveNextWeapon(TeamPlayer)
GiveNextWeapon(EliminatingPlayer : agent) : void =
Print("Finding a player to promote")
var WeaponTier : int = 0
var MaybePlayerToGrant : ?agent = option{EliminatingPlayer} # 무기를 지급할 플레이어
var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # 이 플레이어가 속한 팀
if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]):
for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier):
Print("Found a Teammate with a lower Tier at Tier {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("Eliminating Player Tier is now {WeaponTier}")
if(WeaponTier >= EliminationsToEndGame):
EndGame(EliminatingPlayer)
GrantWeapon(MaybePlayerToGrant, WeaponTier)
GrantWeapon(InPlayer : ?agent, WeaponTier : int) : void =
Print("Promoting Player to Tier {WeaponTier}")
if(ItemGranter := WeaponGranters[WeaponTier], GrantedPlayer := InPlayer?):
ItemGranter.GrantItem(GrantedPlayer)
EndGame(InPlayer : agent) : void =
Print("Player reached final Weapon Tier, activating EndGameDevice")
EndGameDevice.Activate(InPlayer)

직접 해보기
이 가이드를 통해 Verse를 사용하여 처치를 달성한 플레이어 또는 처치를 달성한 플레이어의 팀원이 다음 등급 무기를 지급받음으로써 무기를 업그레이드하는 장치를 만드는 방법을 학습했습니다.
배운 내용을 바탕으로 다음 과제에 도전해 보세요.
-
최적의 플레이 경험을 만들기 위해 다양한 무기 조합과 순서를 시도해 보세요.
-
보초를 유지하고 이를 각 팀의 선택적 보스로 사용하는 것을 고려해 보세요.
-
팀의 특정 플레이어를 처치하는 등 다양한 점수 획득 방법을 생각해 보세요.