Skip to content

Instantly share code, notes, and snippets.

@spentak
Created March 24, 2023 16:43
Show Gist options
  • Save spentak/816d340200c7dafd7673e7f915b31b5b to your computer and use it in GitHub Desktop.
Save spentak/816d340200c7dafd7673e7f915b31b5b to your computer and use it in GitHub Desktop.
This code is a UEFN Fortnite "Device" for managing a Gun Game feature where players fight online and get a new weapon after each elimination
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /Fortnite.com/Teams }
using { /Fortnite.com/Game }
using { /Fortnite.com/Characters }
using { /UnrealEngine.com/Temporary/Diagnostics }
# This code is a UEFN Fortnite "Device" for managing a Gun Game feature
# where players fight online and get a new weapon after each elimination
# A Verse-authored creative device that can be placed in a level
game_manager := class(creative_device):
# Map data structure that stores players as the key
# and current WeaponTier as the value
var PlayerMap : [player]int = map{}
# Item granters stored in an array so we can give the player
# new weapons
@editable
var WeaponGranters : []item_granter_device = array{}
# Array of bots for beating up and testing
@editable
var Sentries : []sentry_device = array{}
# This is how we end the game later
@editable
EndGameDevice : end_game_device = end_game_device{}
# Needed to let the game know when to end
var ElimsToEndGame : int = 0
# Runs when the device is started in a running game
OnBegin<override>()<suspends>:void=
set ElimsToEndGame = WeaponGranters.Length;
InitPlayers()
InitTestMode()
InitPlayers() : void=
AllPlayers := GetPlayspace().GetPlayers()
for (Player : AllPlayers, FortCharacter := Player.GetFortCharacter[]):
if (set PlayerMap[Player] = 0, WeaponTier := PlayerMap[Player]):
FortCharacter.EliminatedEvent().Subscribe(OnPlayerEliminated)
GrantWeapon(Player, WeaponTier)
GrantWeapon(Player : player, WeaponTier: int) : void=
Print("Attempting to grant weapon")
if (ItemGranter := WeaponGranters[WeaponTier]):
Print("Granted item to player")
ItemGranter.GrantItem(Player)
OnPlayerEliminated(Result : elimination_result) : void=
Eliminator := Result.EliminatingCharacter
if (FortCharacter := Eliminator?, EliminatingAgent := FortCharacter.GetAgent[]):
Print("We need to promote player")
PromotePlayer(Agent : agent) : void=
var WeaponTier : int = 0
if (Player := player[Agent], PlayerWeaponTier := PlayerMap[Player]):
set WeaponTier = PlayerWeaponTier + 1
CheckEndGame(Agent, WeaponTier)
if (Player := player[Agent], set PlayerMap[Player] = WeaponTier):
GrantWeapon(Player, WeaponTier)
InitTestMode() : void=
for (Sentry : Sentries):
Sentry.EliminatedEvent.Subscribe(TestPlayerElimination)
TestPlayerElimination(Agent : ?agent) : void=
Print("Sentry eliminated!")
if (Player := Agent?):
PromotePlayer(Player)
CheckEndGame(Player : agent, WeaponTier : int) : void=
if (WeaponTier >= ElimsToEndGame):
EndGameDevice.Activate(Player)
@HS-BLIP
Copy link

HS-BLIP commented May 5, 2024

The current code only applies to the sentry bot, not the player. When I eliminate a player, the weapon doesn't switch, but it does switch after eliminating a sentry bot. Additionally, new players who join mid-game don't receive a weapon. Could you please fix the code so that eliminating a player triggers a weapon switch and ensure that players joining mid-game also receive a weapon?

@HS-BLIP
Copy link

HS-BLIP commented May 5, 2024

How to take it off test mode? everytime I upload, it only implys for the sentry only, but if I eliminate a player, there’s no weapon change for some reason… only when I eliminate the sentry bot.

Actually you don`t need to take test mode off, i only added one line on the "OnPlayerEliminated" function : PromotePlayer(EliminatingAgent)

have you figure out the code if so can please share it

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment