-
Notifications
You must be signed in to change notification settings - Fork 0
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();