Skip to main content

Heroes

Namespace: DeadworksManaged.Api

Work with Deadlock hero identities, data, and selection.

Heroes Enum

Enum of all Deadlock hero identities. Use HeroTypeExtensions to convert between enum values and string names.

Heroes hero = Heroes.Inferno;

HeroTypeExtensions

Extension methods for the Heroes enum.

MethodReturnsDescription
ToHeroName(Heroes)stringConverts to internal name (e.g. "hero_inferno")
TryParse(string, out Heroes)boolParses name string back to enum
GetHeroData(Heroes)CitadelHeroData?Gets native VData for the hero

Examples

// Enum to string
string name = Heroes.Inferno.ToHeroName(); // "hero_inferno"

// String to enum
if (HeroTypeExtensions.TryParse("hero_inferno", out var hero))
{
Console.WriteLine($"Found hero: {hero}");
}

// Get hero data
var heroData = Heroes.Inferno.GetHeroData();

CitadelHeroData

Wrapper around native CitadelHeroData_t (VData). Obtain via Heroes.GetHeroData().

Methods

MethodReturnsDescription
GetField<T>(ReadOnlySpan<byte> fieldName)TRead any schema field by name at runtime

Hero Selection

Force a player to select a specific hero via CCitadelPlayerController:

controller.SelectHero(Heroes.Inferno);

Random Hero Assignment

var heroes = Enum.GetValues<Heroes>();
var randomHero = heroes[Random.Shared.Next(heroes.Length)];
controller.SelectHero(randomHero);

Precaching Heroes

Heroes must be precached if you're swapping them at runtime. See Precaching:

public override void OnPrecacheResources()
{
// Precache a specific hero
Precache.AddHero(Heroes.Inferno);
Precache.AddHero("hero_wraith");

// Or precache all heroes (for plugins that swap heroes dynamically)
Precache.AddAllHeroes();
}

See Also