/// <summary>
 /// Initializes a new instance of the <see cref="DestinyDefinitionsDestinyTalentNodeDefinition" /> class.
 /// </summary>
 /// <param name="NodeIndex">The index into the DestinyTalentGridDefinition&#39;s \&quot;nodes\&quot; property where this node is located. Used to uniquely identify the node within the Talent Grid. Note that this is content version dependent: make sure you have the latest version of content before trying to use these properties..</param>
 /// <param name="NodeHash">The hash identifier for the node, which unfortunately is also content version dependent but can be (and ideally, should be) used instead of the nodeIndex to uniquely identify the node.  The two exist side-by-side for backcompat reasons due to the Great Talent Node Restructuring of Destiny 1, and I ran out of time to remove one of them and standardize on the other. Sorry!.</param>
 /// <param name="Row">The visual \&quot;row\&quot; where the node should be shown in the UI. If negative, then the node is hidden..</param>
 /// <param name="Column">The visual \&quot;column\&quot; where the node should be shown in the UI. If negative, the node is hidden..</param>
 /// <param name="PrerequisiteNodeIndexes">Indexes into the DestinyTalentGridDefinition.nodes property for any nodes that must be activated before this one is allowed to be activated.  I would have liked to change this to hashes for Destiny 2, but we have run out of time..</param>
 /// <param name="BinaryPairNodeIndex">At one point, Talent Nodes supported the idea of \&quot;Binary Pairs\&quot;: nodes that overlapped each other visually, and where activating one deactivated the other. They ended up not being used, mostly because Exclusive Sets are *almost* a superset of this concept, but the potential for it to be used still exists in theory.  If this is ever used, this will be the index into the DestinyTalentGridDefinition.nodes property for the node that is the binary pair match to this node. Activating one deactivates the other..</param>
 /// <param name="AutoUnlocks">If true, this node will automatically unlock when the Talent Grid&#39;s level reaches the required level of the current step of this node..</param>
 /// <param name="LastStepRepeats">At one point, Nodes were going to be able to be activated multiple times, changing the current step and potentially piling on multiple effects from the previously activated steps. This property would indicate if the last step could be activated multiple times.   This is not currently used, but it isn&#39;t out of the question that this could end up being used again in a theoretical future..</param>
 /// <param name="IsRandom">If this is true, the node&#39;s step is determined randomly rather than the first step being chosen..</param>
 /// <param name="RandomActivationRequirement">At one point, you were going to be able to repurchase talent nodes that had random steps, to \&quot;re-roll\&quot; the current step of the node (and thus change the properties of your item). This was to be the activation requirement for performing that re-roll.  The system still exists to do this, as far as I know, so it may yet come back around!.</param>
 /// <param name="IsRandomRepurchasable">If this is true, the node can be \&quot;re-rolled\&quot; to acquire a different random current step. This is not used, but still exists for a theoretical future of talent grids..</param>
 /// <param name="Steps">At this point, \&quot;steps\&quot; have been obfuscated into conceptual entities, aggregating the underlying notions of \&quot;properties\&quot; and \&quot;true steps\&quot;.  If you need to know a step as it truly exists - such as when recreating Node logic when processing Vendor data - you&#39;ll have to use the \&quot;realSteps\&quot; property below..</param>
 /// <param name="ExclusiveWithNodeHashes">The nodeHash values for nodes that are in an Exclusive Set with this node.  See DestinyTalentGridDefinition.exclusiveSets for more info about exclusive sets.  Again, note that these are nodeHashes and *not* nodeIndexes..</param>
 /// <param name="RandomStartProgressionBarAtProgression">If the node&#39;s step is randomly selected, this is the amount of the Talent Grid&#39;s progression experience at which the progression bar for the node should be shown..</param>
 /// <param name="LayoutIdentifier">A string identifier for a custom visual layout to apply to this talent node. Unfortunately, we do not have any data for rendering these custom layouts. It will be up to you to interpret these strings and change your UI if you want to have custom UI matching these layouts..</param>
 /// <param name="GroupHash">As of Destiny 2, nodes can exist as part of \&quot;Exclusive Groups\&quot;. These differ from exclusive sets in that, within the group, many nodes can be activated. But the act of activating any node in the group will cause \&quot;opposing\&quot; nodes (nodes in groups that are not allowed to be activated at the same time as this group) to deactivate.  See DestinyTalentExclusiveGroup for more information on the details. This is an identifier for this node&#39;s group, if it is part of one..</param>
 /// <param name="LoreHash">Talent nodes can be associated with a piece of Lore, generally rendered in a tooltip. This is the hash identifier of the lore element to show, if there is one to be show..</param>
 /// <param name="NodeStyleIdentifier">Comes from the talent grid node style: this identifier should be used to determine how to render the node in the UI..</param>
 /// <param name="IgnoreForCompletion">Comes from the talent grid node style: if true, then this node should be ignored for determining whether the grid is complete..</param>
 public DestinyDefinitionsDestinyTalentNodeDefinition(int?NodeIndex = default(int?), uint?NodeHash = default(uint?), int?Row = default(int?), int?Column = default(int?), List <int?> PrerequisiteNodeIndexes = default(List <int?>), int?BinaryPairNodeIndex = default(int?), bool?AutoUnlocks = default(bool?), bool?LastStepRepeats = default(bool?), bool?IsRandom = default(bool?), DestinyDefinitionsDestinyNodeActivationRequirement RandomActivationRequirement = default(DestinyDefinitionsDestinyNodeActivationRequirement), bool?IsRandomRepurchasable = default(bool?), List <DestinyDefinitionsDestinyNodeStepDefinition> Steps = default(List <DestinyDefinitionsDestinyNodeStepDefinition>), List <uint?> ExclusiveWithNodeHashes = default(List <uint?>), int?RandomStartProgressionBarAtProgression = default(int?), string LayoutIdentifier = default(string), uint?GroupHash = default(uint?), uint?LoreHash = default(uint?), string NodeStyleIdentifier = default(string), bool?IgnoreForCompletion = default(bool?))
 {
     this.NodeIndex = NodeIndex;
     this.NodeHash  = NodeHash;
     this.Row       = Row;
     this.Column    = Column;
     this.PrerequisiteNodeIndexes = PrerequisiteNodeIndexes;
     this.BinaryPairNodeIndex     = BinaryPairNodeIndex;
     this.AutoUnlocks             = AutoUnlocks;
     this.LastStepRepeats         = LastStepRepeats;
     this.IsRandom = IsRandom;
     this.RandomActivationRequirement = RandomActivationRequirement;
     this.IsRandomRepurchasable       = IsRandomRepurchasable;
     this.Steps = Steps;
     this.ExclusiveWithNodeHashes = ExclusiveWithNodeHashes;
     this.RandomStartProgressionBarAtProgression = RandomStartProgressionBarAtProgression;
     this.LayoutIdentifier    = LayoutIdentifier;
     this.GroupHash           = GroupHash;
     this.LoreHash            = LoreHash;
     this.NodeStyleIdentifier = NodeStyleIdentifier;
     this.IgnoreForCompletion = IgnoreForCompletion;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="DestinyDefinitionsDestinyNodeStepDefinition" /> class.
 /// </summary>
 /// <param name="DisplayProperties">These are the display properties actually used to render the Talent Node. The currently active step&#39;s displayProperties are shown..</param>
 /// <param name="StepIndex">The index of this step in the list of Steps on the Talent Node.  Unfortunately, this is the closest thing we have to an identifier for the Step: steps are not provided a content version agnostic identifier. This means that, when you are dealing with talent nodes, you will need to first ensure that you have the latest version of content..</param>
 /// <param name="NodeStepHash">The hash of this node step. Unfortunately, while it can be used to uniquely identify the step within a node, it is also content version dependent and should not be relied on without ensuring you have the latest vesion of content..</param>
 /// <param name="InteractionDescription">If you can interact with this node in some way, this is the localized description of that interaction..</param>
 /// <param name="DamageType">An enum representing a damage type granted by activating this step, if any..</param>
 /// <param name="DamageTypeHash">If the step provides a damage type, this will be the hash identifier used to look up the damage type&#39;s DestinyDamageTypeDefinition..</param>
 /// <param name="ActivationRequirement">If the step has requirements for activation (they almost always do, if nothing else than for the Talent Grid&#39;s Progression to have reached a certain level), they will be defined here..</param>
 /// <param name="CanActivateNextStep">There was a time when talent nodes could be activated multiple times, and the effects of subsequent Steps would be compounded on each other, essentially \&quot;upgrading\&quot; the node. We have moved away from this, but theoretically the capability still exists.  I continue to return this in case it is used in the future: if true and this step is the current step in the node, you are allowed to activate the node a second time to receive the benefits of the next step in the node, which will then become the active step..</param>
 /// <param name="NextStepIndex">The stepIndex of the next step in the talent node, or -1 if this is the last step or if the next step to be chosen is random.  This doesn&#39;t really matter anymore unless canActivateNextStep begins to be used again..</param>
 /// <param name="IsNextStepRandom">If true, the next step to be chosen is random, and if you&#39;re allowed to activate the next step. (if canActivateNextStep &#x3D; true).</param>
 /// <param name="PerkHashes">The list of hash identifiers for Perks (DestinySandboxPerkDefinition) that are applied when this step is active. Perks provide a variety of benefits and modifications - examine DestinySandboxPerkDefinition to learn more..</param>
 /// <param name="StartProgressionBarAtProgress">When the Talent Grid&#39;s progression reaches this value, the circular \&quot;progress bar\&quot; that surrounds the talent node should be shown.  This also indicates the lower bound of said progress bar, with the upper bound being the progress required to reach activationRequirement.gridLevel. (at some point I should precalculate the upper bound and put it in the definition to save people time).</param>
 /// <param name="StatHashes">When the step provides stat benefits on the item or character, this is the list of hash identifiers for stats (DestinyStatDefinition) that are provided..</param>
 /// <param name="AffectsQuality">If this is true, the step affects the item&#39;s Quality in some way. See DestinyInventoryItemDefinition for more information about the meaning of Quality. I already made a joke about Zen and the Art of Motorcycle Maintenance elsewhere in the documentation, so I will avoid doing it again. Oops too late.</param>
 /// <param name="StepGroups">In Destiny 1, the Armory&#39;s Perk Filtering was driven by a concept of TalentNodeStepGroups: categorizations of talent nodes based on their functionality. While the Armory isn&#39;t a BNet-facing thing for now, and the new Armory will need to account for Sockets rather than Talent Nodes, this categorization capability feels useful enough to still keep around..</param>
 /// <param name="AffectsLevel">If true, this step can affect the level of the item. See DestinyInventoryItemDefintion for more information about item levels and their effect on stats..</param>
 /// <param name="SocketReplacements">If this step is activated, this will be a list of information used to replace socket items with new Plugs. See DestinyInventoryItemDefinition for more information about sockets and plugs..</param>
 public DestinyDefinitionsDestinyNodeStepDefinition(DestinyDefinitionsCommonDestinyDisplayPropertiesDefinition DisplayProperties = default(DestinyDefinitionsCommonDestinyDisplayPropertiesDefinition), int?StepIndex = default(int?), uint?NodeStepHash = default(uint?), string InteractionDescription = default(string), DestinyDamageType DamageType = default(DestinyDamageType), uint?DamageTypeHash = default(uint?), DestinyDefinitionsDestinyNodeActivationRequirement ActivationRequirement = default(DestinyDefinitionsDestinyNodeActivationRequirement), bool?CanActivateNextStep = default(bool?), int?NextStepIndex = default(int?), bool?IsNextStepRandom = default(bool?), List <uint?> PerkHashes = default(List <uint?>), int?StartProgressionBarAtProgress = default(int?), List <uint?> StatHashes = default(List <uint?>), bool?AffectsQuality = default(bool?), DestinyDefinitionsDestinyTalentNodeStepGroups StepGroups = default(DestinyDefinitionsDestinyTalentNodeStepGroups), bool?AffectsLevel = default(bool?), List <DestinyDefinitionsDestinyNodeSocketReplaceResponse> SocketReplacements = default(List <DestinyDefinitionsDestinyNodeSocketReplaceResponse>))
 {
     this.DisplayProperties             = DisplayProperties;
     this.StepIndex                     = StepIndex;
     this.NodeStepHash                  = NodeStepHash;
     this.InteractionDescription        = InteractionDescription;
     this.DamageType                    = DamageType;
     this.DamageTypeHash                = DamageTypeHash;
     this.ActivationRequirement         = ActivationRequirement;
     this.CanActivateNextStep           = CanActivateNextStep;
     this.NextStepIndex                 = NextStepIndex;
     this.IsNextStepRandom              = IsNextStepRandom;
     this.PerkHashes                    = PerkHashes;
     this.StartProgressionBarAtProgress = StartProgressionBarAtProgress;
     this.StatHashes                    = StatHashes;
     this.AffectsQuality                = AffectsQuality;
     this.StepGroups                    = StepGroups;
     this.AffectsLevel                  = AffectsLevel;
     this.SocketReplacements            = SocketReplacements;
 }