Skip to main content
The Player class contains comprehensive information about a player in the match, including identity, stats, inventory, location history, eliminations, and cosmetics.

Overview

Each player in the GameInformation.Players collection is represented by a Player object containing all data tracked for that player throughout the match.
foreach (var player in gameInfo.Players)
{
    Console.WriteLine($"{player.DisplayName} ({player.EpicId})");
    Console.WriteLine($"  Placement: #{player.Placement}");
    Console.WriteLine($"  Kills: {player.TotalKills}");
    Console.WriteLine($"  Platform: {player.Platform}");
}

Identity Properties

DisplayName
string
required
Player’s display name (decoded from ExternalPlayerData).
EpicId
string
required
Player’s Epic Games account ID.
Platform
string
required
Platform the player is playing on (e.g., “WIN”, “PSN”, “XBL”, “SWITCH”).
IsBot
bool
required
Whether this player is a bot.
BotId
string
required
Bot identifier if IsBot is true.
IsPlayersReplay
bool
required
Whether this player is the one who recorded the replay.
AnonMode
bool
required
Whether the player is using anonymous mode.
StreamerMode
bool
required
Whether the player has streamer mode enabled.

Team & Party

Teamindex
int
required
The team number this player belongs to.
Team
Team
required
Reference to the team object containing all team members.
PartyOwnerEpicId
string
required
Epic ID of the party leader.

Match Stats

Placement
int
required
Final placement/rank in the match (1 = Victory Royale).
TotalKills
uint
required
Total number of eliminations by this player.
TeamKills
uint
required
Number of team kills (friendly fire).
Level
int
required
Player’s account level.

Location & Movement

Locations
List<PlayerLocationRepMovement>
required
Complete location history throughout the match. Each entry contains position, rotation, timestamp, and movement state.
Location tracking depends on parse settings. Use LocationTypes to control which players’ locations are tracked.
LastKnownLocation
PlayerLocationRepMovement
required
Most recent known location of the player.
LandingLocation
PlayerLocation
required
Location where the player landed after jumping from the battle bus.
PrivateTeamLocations
List<PlayerLocation>
required
Teammate locations from FortTeamPrivateInfo (visible to squadmates).
MovementInformation
PlayerMovementInformation
required
Current movement state including:
  • Skydiving, Crouched, Sprinting
  • GliderOpen, IsEmoting, IsTargeting
  • InBus, IsInWater, IsSlopeSliding
  • MovementStyle

Inventory & Weapons

CurrentInventory
NetDeltaArray<InventoryItem>
required
Player’s current inventory items.
Requires player perspective replay or server replay. Not available in spectator replays of other players.
InventoryOnDeath
List<InventoryItem>
required
Snapshot of inventory at the time of death/elimination.
CurrentWeapon
Weapon
required
The weapon currently equipped by the player.
WeaponSwitches
List<WeaponSwitch>
required
Complete history of weapon switches throughout the match with timestamps.

Combat Data

Shots
List<WeaponShot>
required
All shots fired by this player, including damage dealt, hit location, and critical hits.
DamageTaken
List<WeaponShot>
required
All damage received by this player from other players.
StatusChanges
List<KillFeedEntry>
required
Complete history of player state changes (Alive → Knocked → Killed → Revived).
HealthChanges
List<HealthUpdate>
required
History of health and shield changes with timestamps.
LastDeathOrKnockTime
float
required
Game time when the player was last eliminated or knocked.
DeathTags
FGameplayTag[]
required
Gameplay tags associated with the player’s death.

Cosmetics

Cosmetics
Cosmetics
required
All equipped cosmetic items including:
  • Character skin
  • Backpack (back bling)
  • Pickaxe
  • Glider
  • Dances/Emotes
  • Item Wraps
  • Music Pack
  • Loading Screen
  • Banner (icon and color)
  • Pet Skin

Session Info

IsGameSessionOwner
bool
required
Whether this player is the game session owner (host).
FinishedLoading
bool
required
Whether the player finished loading into the match.
StartedPlaying
bool
required
Whether the player started playing (spawned in).
ThankedBusDriver
bool
required
Whether the player thanked the battle bus driver.
Disconnected
bool
required
Whether the player disconnected from the match.
WorldPlayerId
int
required
Internal player ID used by the game world.

Examples

Player Summary

void PrintPlayerSummary(Player player)
{
    Console.WriteLine($"===== {player.DisplayName} =====");
    Console.WriteLine($"Epic ID: {player.EpicId}");
    Console.WriteLine($"Platform: {player.Platform}");
    Console.WriteLine($"Team: {player.Teamindex}");
    Console.WriteLine($"Placement: #{player.Placement}");
    Console.WriteLine($"Kills: {player.TotalKills}");
    Console.WriteLine($"Bot: {player.IsBot}");
    
    if (player.LandingLocation != null)
    {
        Console.WriteLine($"Landed at: {player.LandingLocation.Location}");
    }
    
    Console.WriteLine($"Total Locations Tracked: {player.Locations.Count}");
    Console.WriteLine($"Shots Fired: {player.Shots.Count}");
    Console.WriteLine($"Damage Taken: {player.DamageTaken.Count}");
}

Combat Analysis

void AnalyzeCombat(Player player)
{
    // Calculate accuracy
    var shotsHit = player.Shots.Count(s => s.HitPlayerPawn != null);
    var accuracy = player.Shots.Count > 0 
        ? (double)shotsHit / player.Shots.Count * 100 
        : 0;
    
    Console.WriteLine($"{player.DisplayName} Combat Stats:");
    Console.WriteLine($"  Accuracy: {accuracy:F1}%");
    Console.WriteLine($"  Shots Fired: {player.Shots.Count}");
    Console.WriteLine($"  Shots Hit: {shotsHit}");
    
    // Total damage dealt
    var totalDamage = player.Shots.Sum(s => s.Damage);
    Console.WriteLine($"  Total Damage: {totalDamage:F0}");
    
    // Critical hits
    var crits = player.Shots.Count(s => s.IsCritical);
    Console.WriteLine($"  Critical Hits: {crits}");
}

Movement Tracking

void TrackMovement(Player player)
{
    Console.WriteLine($"Tracking {player.DisplayName} movement:");
    Console.WriteLine($"Total Locations: {player.Locations.Count}");
    
    // Calculate total distance traveled
    double totalDistance = 0;
    for (int i = 1; i < player.Locations.Count; i++)
    {
        var prev = player.Locations[i - 1].Location;
        var curr = player.Locations[i].Location;
        totalDistance += prev.DistanceTo(curr);
    }
    
    Console.WriteLine($"Distance Traveled: {totalDistance / 100:F0}m"); // Convert UU to meters
    
    // Landing location
    if (player.LandingLocation != null)
    {
        Console.WriteLine($"Landing: ({player.LandingLocation.Location.X:F0}, {player.LandingLocation.Location.Y:F0})");
    }
}

Inventory Analysis

void ShowInventory(Player player)
{
    Console.WriteLine($"{player.DisplayName} Inventory:");
    
    foreach (var item in player.CurrentInventory.Items)
    {
        Console.WriteLine($"  {item.Item.Name}");
        Console.WriteLine($"    Count: {item.Count}");
        Console.WriteLine($"    Ammo: {item.LoadedAmmo}");
    }
    
    if (player.InventoryOnDeath.Any())
    {
        Console.WriteLine("\nInventory on Death:");
        foreach (var item in player.InventoryOnDeath)
        {
            Console.WriteLine($"  {item.Item.Name} x{item.Count}");
        }
    }
}

Status Change Timeline

void ShowStatusTimeline(Player player)
{
    Console.WriteLine($"{player.DisplayName} Status Timeline:");
    
    foreach (var status in player.StatusChanges)
    {
        var time = TimeSpan.FromSeconds(status.DeltaGameTimeSeconds);
        var stateStr = status.CurrentPlayerState switch
        {
            PlayerState.Alive => "Revived",
            PlayerState.Knocked => "Knocked",
            PlayerState.Killed => "Eliminated",
            _ => "Unknown"
        };
        
        Console.WriteLine($"  [{time:mm\\:ss}] {stateStr}");
        
        if (status.FinisherOrDowner != null)
        {
            Console.WriteLine($"    By: {status.FinisherOrDowner.DisplayName}");
        }
        
        if (status.DeathCause != EDeathCause.EDeathCause_MAX)
        {
            Console.WriteLine($"    Cause: {status.DeathCause}");
        }
    }
}

Build docs developers (and LLMs) love