Skip to content

GetCompleteStormElement

koliva8245 edited this page Jun 25, 2026 · 4 revisions

Example of getting the complete xml abil element with an id of AmazonBlindingLight.

<!-- \core.stormmod\base.stormdata\gamedata\abildata.xml -->
<CAbil default="1">
  <Name value="Abil/Name/##id##" />
  <TechPlayer value="Upkeep" />
  <TargetMessage value="Abil/TargetMessage/DefaultTargetMessage" />
  <OrderArray>
    <Color value="255,0,255,0" />
    <Model value="Assets\UI\Feedback\WayPointConfirm\WayPointConfirm.m3" />
    <LineTexture value="Assets\Textures\WayPointLine.dds" />
  </OrderArray>
  <SharedFlags index="DisableWhileDead" value="1" />
  <SharedFlags index="AllowQuickCastCustomization" value="1" />
  <SharedFlags index="TargetCursorVisibleInBlackMask" value="1" />
</CAbil>

<!-- \core.stormmod\base.stormdata\gamedata\abildata.xml -->
<CAbilEffectTarget default="1">
  <CmdButtonArray index="Execute">
    <Flags index="ShowInGlossary" value="1" />
  </CmdButtonArray>
  <Flags index="CanToggleAutoCast" value="1" />
  <Flags index="BestUnit" value="1" />
  <FollowRange value="5" />
</CAbilEffectTarget>

<!-- \heroesdata.stormmod\base.stormdata\gamedata\abildata.xml -->
<CAbilEffectTarget default="1">
  <CmdButtonArray index="Execute" AutoQueueId="Spell">
    <Flags index="AllowMinimap" value="0" />
    <Flags index="AllowSelfCast" value="1" />
  </CmdButtonArray>
  <Flags index="AllowMovement" value="1" />
  <Flags index="WaitToSpend" value="0" />
  <Flags index="UninterruptibleTurn" value="1" />
  <Flags index="ValidateButtonState" value="1" />
  <SharedFlags index="DisableWhileDead" value="0" />
  <OrderArray index="0" Model="Assets\Units\Test\InvisibleUnit\InvisibleUnit.m3" LineTexture="Assets\Textures\Storm_WayPointLine.dds" />
</CAbilEffectTarget>

<!-- \heromods\amazon.stormmod\base.stormdata\gamedata\amazondata.xml -->
<CAbilEffectTarget id="AmazonBlindingLight">
  <CmdButtonArray index="Execute" DefaultButtonFace="AmazonBlindingLight" />
  <PrepEffect value="DismountDecloakCasterSet" />
  <Effect value="AmazonBlindingLightInitialSet" />
  <Flags index="ClearLastMoveTarget" value="1" />
  <Flags index="RangeUseCasterRadius" value="0" />
  <Flags index="RequireTargetVision" value="0" />
  <UninterruptibleArray index="Cast" value="1" />
  <UninterruptibleArray index="Channel" value="1" />
  <UninterruptibleArray index="Finish" value="1" />
  <CastIntroTime value="0.125" />
  <Cost>
    <Vital index="Energy" value="50" />
    <Cooldown TimeUse="15" />
  </Cost>
  <Range value="8" />
  <RangeSlop value="5" />
  <CursorEffect value="AmazonBlindingLightTargetSearch" />
  <Arc value="360" />
</CAbilEffectTarget>
HeroesData heroesData = heroesXmlLoader.HeroesData;

// get the dataObjectType for CAbilEffectTarget
// string? dataObjectType = heroesData.GetDataObjectTypeByElementType("CAbilEffectTarget"); // abil

// better to just hardcode the dataObjectType than to call GetDataObjectTypeByElementType
StormElement? stormElement = heroesData.GetCompleteStormElement("abil", "AmazonBlindingLight");
StormElementData dataValues = stormElement.DataValues;

// Abil/Name/AmazonBlindingLight
string nameValue = dataValues.GetElementDataAt("name").Value.GetString();

// 5
int followRange = dataValues.GetElementDataAt("FollowRange").Value.GetInt();

IReadOnlyCollection<string> flags = dataValues.GetElementDataAt("flags").GetElementDataIndexes();
// {
//   CanToggleAutoCast,
//   BestUnit,
//   AllowMovement,
//   WaitToSpend,
//   UninterruptibleTurn,
//   ValidateButtonState,
//   ClearLastMoveTarget,
//   RangeUseCasterRadius,
//   RequireTargetVision,
// }

Example of getting the complete xml button element with an id of AmazonBlindingLight.

<!-- \core.stormmod\base.stormdata\gamedata\buttondata.xml -->
<CButton default="1">
  <Name value="Button/Name/##id##" />
  <Tooltip value="Button/Tooltip/##id##" />
  <AlertName value="Button/Name/##id##" />
  <AlertTooltip value="Button/Tooltip/##id##" />
  <Hotkey value="Button/Hotkey/##id##" />
  <HotkeyAlias value="##id##" />
  <TooltipFlags index="ShowName" value="1" />
  <TooltipFlags index="ShowHotkey" value="1" />
  <TooltipFlags index="ShowUsage" value="1" />
  <TooltipFlags index="ShowTime" value="1" />
  <TooltipFlags index="ShowCooldown" value="1" />
  <TooltipFlags index="ShowRequirements" value="1" />
  <TooltipFlags index="ShowAutocast" value="1" />
  <UseHotkeyLabel value="1" />
</CButton>

<!-- \heroesdata.stormmod\base.stormdata\gamedata\buttondata.xml -->
<CButton default="1" id="StormButtonParent">
  <TooltipFlags index="ShowTime" value="0" />
  <TooltipFlags index="ShowRequirements" value="0" />
  <TooltipFlags index="ShowAutocast" value="0" />
  <TooltipVitalName index="Energy" value="UI/Tooltip/Abil/Mana" />
  <SimpleDisplayText value="Button/SimpleDisplayText/##id##" />
</CButton>

<!-- \heromods\amazon.stormmod\base.stormdata\gamedata\amazondata.xml -->
<CButton id="AmazonBlindingLight" parent="StormButtonParent">
  <Icon value="Assets\Textures\storm_ui_icon_cassia_blindinglight.dds" />
  <TooltipAppender Validator="AmazonBlindingLightSeraphsHymnHasTalent" Face="AmazonBlindingLightSeraphsHymn" />
  <TooltipAppender Validator="AmazonHasPowerStrikeTalent" Face="AmazonPowerStrike" />
</CButton>
// get the dataObjectType for CButton
// string? dataObjectType = heroesData.GetDataObjectTypeByElementType("CButton"); // button

// better to just hardcode the dataObjectType than to call GetDataObjectTypeByElementType
StormElement? stormElement = heroesData.GetCompleteStormElement("button", "AmazonBlindingLight");
StormElementData dataValues = stormElement.DataValues;

// Button/Name/AmazonBlindingLight
string name = dataValues["name"].Value.GetString();

// UI/Tooltip/Abil/Mana
string vitalName = dataValues["TooltipVitalName"]["Energy"].Value.GetString();

// Button/SimpleDisplayText/AmazonBlindingLight
string simpleText = dataValues["SimpleDisplayText"].Value.GetString();

// Assets\\Textures\\storm_ui_icon_cassia_blindinglight.dds
string icon = dataValues["Icon"].Value.GetString();

// AmazonHasPowerStrikeTalent
string tooltipAppenderValidator = dataValues["TooltipAppender"]["1"]["Validator"].Value.GetString();

// AmazonPowerStrike
string tooltipAppenderFace = dataValues["TooltipAppender"]["1"]["Face"].Value.GetString();

Clone this wiki locally