July 13, 20205 yr Hello everyone, I'm stuck trying to add a new upgrade for the monk's Swift Strikes. I have read through the following, to no avail : - Modding Basic Concepts - First Mod - Adding new abilities to a class I have created a new ability, Draining Strikes, which is supposed to be a new upgrade path from Swift Strikes. The ability is as follows : Spoiler { "GameDataObjects": [ { "$type": "Game.GameData.GenericAbilityGameData, Assembly-CSharp", "DebugName": "Draining_Strikes", "ID": "ffffffff-a1aa-43b5-9b6f-da86f5e26be7", "Components": [{ "$type": "Game.GameData.ProgressionUnlockableComponent, Assembly-CSharp" }, { "$type": "Game.GameData.GenericAbilityComponent, Assembly-CSharp", "KeywordsIDs": ["117213bd-8bb0-4a70-9626-581a20214c2f"], "DisplayName": 99907, "Description": 886, "DescriptionTactical": -1, "UpgradeDescriptions": [{ "String": 99908, "StringTactical": -1 } ], "UpgradedFromID": "73a35a9f-4a3c-4140-a1ce-354a07429e54", "Vocalization": "NoVocalization", "Icon": "gui/icons/abilities/monk/lightning_strikes.png", "UsageType": "AccruedPowerPool", "UsageValue": 1, "AbilityClassID": "f0036bfb-53d5-4d0c-b11a-b780d788a108", "AbilityLevel": 3, "IsPassive": "false", "StackingRuleOverride": "Default", "TriggerOnHit": "false", "IsModal": "false", "ModalGroupID": "00000000-0000-0000-0000-000000000000", "IsCombatOnly": "true", "IsNonCombatOnly": "false", "HideFromUI": "false", "ShowStatusEffects": "false", "HideFromCombatLog": "false", "UniqueSet": "None", "NoiseLevelID": "15743f94-1026-40b0-8e13-a667b3f66f63", "DurationOverride": 0, "OverrideEmpower": "Default", "ClearsOnMovement": "false", "CannotActivateWhileInStealth": "false", "CannotActivateWhileInvisible": "false", "ActivationPrerequisites": { "Conditional": { "Operator": 0, "Components": [] } }, "ApplicationPrerequisites": { "Conditional": { "Operator": 0, "Components": [] } }, "DeactivationPrerequisites": { "Conditional": { "Operator": 0, "Components": [] } }, "PowerLevelScaling": { "ScalingType": "Default", "BaseLevel": 0, "LevelIncrement": 1, "MaxLevel": 0, "DamageAdjustment": 1, "DurationAdjustment": 1, "BounceCountAdjustment": 0, "ProjectileCountAdjustment": 0, "AccuracyAdjustment": 0, "PenetrationAdjustment": 0 }, "StatusEffectKeywordsIDs": [], "StatusEffectsIDs": ["ffffffff-a1aa-4d2d-bd2e-b45596c0c80c", "ffffffff-a1aa-4c64-94d4-ec69589d47bf", "ffffffff-a1aa-4956-8894-2b5e76a39089"], "RandomizeStatusEffect": "false", "VisualEffects": [], "SelfMaterialReplacementID": "00000000-0000-0000-0000-000000000000", "AttackID": "00000000-0000-0000-0000-000000000000", "AITargetingConditional": { "Conditional": { "Operator": 0, "Components": [] }, "Scripts": [] }, "AudioEventListID": "fdedb9d1-cb03-4b86-a43c-749a01fbb1f0", "GrantedViaScript": "false" } ] } The status effects are as follows : Spoiler { "$type": "Game.GameData.AfflictionGameData, Assembly-CSharp", "DebugName": "Draining_Strikes_SE_Quick", "ID": "ffffffff-a1aa-4c64-94d4-ec69589d47bf", "Components": [{ "$type": "Game.GameData.AfflictionComponent, Assembly-CSharp", "DisplayName": 2202, "Icon": "gui/icons/keywords/dex_pos_1.png", "AfflictionTypeID": "975b7002-8f6a-4ab8-af07-e43077ce612f", "IsThinUI": "false" }, { "$type": "Game.GameData.StatusEffectComponent, Assembly-CSharp", "StatusEffectType": "None", "OverrideDescriptionString": -1, "OverrideDescriptionStringTactical": -1, "UseStatusEffectValueAs": "Child", "BaseValue": 0, "DynamicValue": { "Stat": "None", "SkillDataID": "00000000-0000-0000-0000-000000000000", "ClassID": "00000000-0000-0000-0000-000000000000", "MultiplyBy": 1, "Operator": "Add" }, "KeywordsIDs": ["66f96765-0ec1-4cf1-a49b-a8264df055b7", "bbef3990-aeb1-49ba-b6b4-b86c9059c0c3"], "DurationType": "UseDurationTime", "Duration": 30, "MaxStackQuantity": 0, "ApplicationBehavior": "UseLongerDurationIfAlreadyApplied", "ApplicationType": "ApplyOnStart", "IntervalRateID": "00000000-0000-0000-0000-000000000000", "StackedChildrenApplyEffects": "false", "InclusionConditions": { "Operator": 0, "Components": [] }, "ApplicationPrerequisites": { "Conditional": { "Operator": 0, "Components": [] } }, "TriggerAdjustment": { "TriggerOnEvent": "None", "TriggerOffEvent": "None", "ValidateWithAttackFilter": "false", "ParamValue": 0, "ValueAdjustment": 0, "DurationAdjustment": 0, "ResetTriggerOnEffectTimeout": "false", "MaxTriggerCount": 0, "IgnoreMaxTriggerCount": "false", "RemoveEffectAtMax": "false", "ChanceToTrigger": 1 }, "PowerLevelScaling": { "UseCharacterLevel": "false", "BaseLevel": 0, "LevelIncrement": 1, "MaxLevel": 0, "ValueAdjustment": 0, "DurationAdjustment": 0 }, "IsHostile": "false", "ClearOnCombatEnd": "false", "ClearOnRest": "false", "ClearOnFoodRest": "false", "ClearWhenAttacks": "false", "ClearOnDeath": "false", "HideFromCombatTooltip": "false", "HideFromCombatLog": "false", "HideFromUI": "false", "HideIfNoValue": "false", "VisualEffects": [], "MaterialReplacementID": "00000000-0000-0000-0000-000000000000", "AttackFilter": { "KeywordsIDs": [], "KeywordLogic": "Or", "Race": "None", "IsKith": "false", "HealthPercentage": 0, "HealthOperator": "EqualTo", "Range": "None", "ClassTypeID": "00000000-0000-0000-0000-000000000000", "Source": "None", "DefendedBy": "None", "Empowered": "false", "Disengagement": "false", "Stealthed": "false", "UseStealthLinger": "false", "PowerLevel": 0, "PowerLevelOperator": "EqualTo", "ChanceToApply": 1, "AttackHostility": "Default", "TargetType": "None" }, "AttackTargetFilter": { "KeywordsIDs": [], "KeywordLogic": "Or", "Race": "None", "IsKith": "false", "HealthPercentage": 0, "HealthOperator": "EqualTo", "Distance": 0, "DistanceOperator": "EqualTo", "HasDOT": "false", "IsMarked": "false", "TargetHostility": "Default" }, "ExtraValue": 0, "OverridePenetration": 0, "DamageTypeValue": "All", "KeywordValueID": "00000000-0000-0000-0000-000000000000", "RaceValue": "None", "StatusEffectTypeValue": "None", "ItemValueID": "00000000-0000-0000-0000-000000000000", "AfflictionTypeValueID": "00000000-0000-0000-0000-000000000000", "StatusEffectsValueIDs": ["8646b923-17f2-457d-b256-10deb7cde635"], "AttackValueID": "00000000-0000-0000-0000-000000000000", "AttackOverrideValue": "None", "EventValue": "OnApply", "ClassValueID": "00000000-0000-0000-0000-000000000000", "WeaponTypeValue": "None", "AttackHitType": "None", "SkillValueID": "00000000-0000-0000-0000-000000000000", "AudioEventListID": "00000000-0000-0000-0000-000000000000", "BedRestDaysMinimum": 0, "BedRestDaysMaximum": 0 } ] }, { "$type": "Game.GameData.StatusEffectGameData, Assembly-CSharp", "DebugName": "Draining_Strikes_SE_AttackSpeed", "ID": "ffffffff-a1aa-4d2d-bd2e-b45596c0c80c", "Components": [{ "$type": "Game.GameData.StatusEffectComponent, Assembly-CSharp", "StatusEffectType": "AttackSpeedMultiplier", "OverrideDescriptionString": -1, "OverrideDescriptionStringTactical": -1, "UseStatusEffectValueAs": "None", "BaseValue": 1.1, "DynamicValue": { "Stat": "None", "SkillDataID": "00000000-0000-0000-0000-000000000000", "ClassID": "00000000-0000-0000-0000-000000000000", "MultiplyBy": 1, "Operator": "Add" }, "KeywordsIDs": [], "DurationType": "UseDurationTime", "Duration": 30, "MaxStackQuantity": 0, "ApplicationBehavior": "UseLongerDurationIfAlreadyApplied", "ApplicationType": "ApplyOnStart", "IntervalRateID": "00000000-0000-0000-0000-000000000000", "StackedChildrenApplyEffects": "false", "InclusionConditions": { "Operator": 0, "Components": [] }, "ApplicationPrerequisites": { "Conditional": { "Operator": 0, "Components": [] } }, "TriggerAdjustment": { "TriggerOnEvent": "None", "TriggerOffEvent": "None", "ValidateWithAttackFilter": "false", "ParamValue": 0, "ValueAdjustment": 0, "DurationAdjustment": 0, "ResetTriggerOnEffectTimeout": "false", "MaxTriggerCount": 0, "IgnoreMaxTriggerCount": "false", "RemoveEffectAtMax": "false", "ChanceToTrigger": 1 }, "PowerLevelScaling": { "UseCharacterLevel": "false", "BaseLevel": 1, "LevelIncrement": 2, "MaxLevel": 0, "ValueAdjustment": 0.05, "DurationAdjustment": 0 }, "IsHostile": "false", "ClearOnCombatEnd": "false", "ClearOnRest": "false", "ClearOnFoodRest": "false", "ClearWhenAttacks": "false", "ClearOnDeath": "false", "HideFromCombatTooltip": "false", "HideFromCombatLog": "false", "HideFromUI": "false", "HideIfNoValue": "false", "VisualEffects": [{ "VisualEffect": "prefabs/effects/abilities/monk/fx_swift_strikes_hand.prefab", "AttachPoint": "RightWeapon", "AttachMode": "Attach", "MeshType": "None", "Loop": "true", "Event": "OnApply" }, { "VisualEffect": "prefabs/effects/abilities/monk/fx_swift_strikes_hand.prefab", "AttachPoint": "LeftWeapon", "AttachMode": "Attach", "MeshType": "None", "Loop": "true", "Event": "OnApply" }, { "VisualEffect": "prefabs/effects/abilities/monk/fx_swift_strikes_cast.prefab", "AttachPoint": "Root", "AttachMode": "Attach", "MeshType": "None", "Loop": "false", "Event": "OnStart" } ], "MaterialReplacementID": "00000000-0000-0000-0000-000000000000", "AttackFilter": { "KeywordsIDs": [], "KeywordLogic": "Or", "Race": "None", "IsKith": "false", "HealthPercentage": 0, "HealthOperator": "EqualTo", "Range": "None", "ClassTypeID": "00000000-0000-0000-0000-000000000000", "Source": "None", "DefendedBy": "None", "Empowered": "false", "Disengagement": "false", "Stealthed": "false", "UseStealthLinger": "false", "PowerLevel": 0, "PowerLevelOperator": "EqualTo", "ChanceToApply": 1, "AttackHostility": "Default", "TargetType": "None" }, "AttackTargetFilter": { "KeywordsIDs": [], "KeywordLogic": "Or", "Race": "None", "IsKith": "false", "HealthPercentage": 0, "HealthOperator": "EqualTo", "Distance": 0, "DistanceOperator": "EqualTo", "HasDOT": "false", "IsMarked": "false", "TargetHostility": "Default" }, "ExtraValue": 0, "OverridePenetration": 0, "DamageTypeValue": "All", "KeywordValueID": "00000000-0000-0000-0000-000000000000", "RaceValue": "None", "StatusEffectTypeValue": "None", "ItemValueID": "00000000-0000-0000-0000-000000000000", "AfflictionTypeValueID": "00000000-0000-0000-0000-000000000000", "StatusEffectsValueIDs": [], "AttackValueID": "00000000-0000-0000-0000-000000000000", "AttackOverrideValue": "None", "EventValue": "OnApply", "ClassValueID": "00000000-0000-0000-0000-000000000000", "WeaponTypeValue": "None", "AttackHitType": "None", "SkillValueID": "00000000-0000-0000-0000-000000000000", "AudioEventListID": "00000000-0000-0000-0000-000000000000", "BedRestDaysMinimum": 0, "BedRestDaysMaximum": 0 } ] }, { "$type": "Game.GameData.StatusEffectGameData, Assembly-CSharp", "DebugName": "Draining_Strikes_SE_ApplySEByDamageDealt", "ID": "ffffffff-a1aa-4956-8894-2b5e76a39089", "Components": [{ "$type": "Game.GameData.StatusEffectComponent, Assembly-CSharp", "StatusEffectType": "ApplyStatusEffectToSelfByDamageDealt", "OverrideDescriptionString": 580, "OverrideDescriptionStringTactical": -1, "UseStatusEffectValueAs": "None", "BaseValue": 0.2, "DynamicValue": { "Stat": "None", "SkillDataID": "00000000-0000-0000-0000-000000000000", "ClassID": "00000000-0000-0000-0000-000000000000", "MultiplyBy": 1, "Operator": "Add" }, "KeywordsIDs": [], "DurationType": "UseDurationTime", "Duration": 30, "MaxStackQuantity": 0, "ApplicationBehavior": "UseLongerDurationIfAlreadyApplied", "ApplicationType": "ApplyOnStart", "IntervalRateID": "00000000-0000-0000-0000-000000000000", "StackedChildrenApplyEffects": "false", "InclusionConditions": { "Operator": 0, "Components": [] }, "ApplicationPrerequisites": { "Conditional": { "Operator": 0, "Components": [] } }, "TriggerAdjustment": { "TriggerOnEvent": "None", "TriggerOffEvent": "None", "ValidateWithAttackFilter": "false", "ParamValue": 0, "ValueAdjustment": 0, "DurationAdjustment": 0, "ResetTriggerOnEffectTimeout": "false", "MaxTriggerCount": 0, "IgnoreMaxTriggerCount": "false", "RemoveEffectAtMax": "false", "ChanceToTrigger": 1 }, "PowerLevelScaling": { "UseCharacterLevel": "false", "BaseLevel": 0, "LevelIncrement": 1, "MaxLevel": 0, "ValueAdjustment": 0, "DurationAdjustment": 0 }, "IsHostile": "false", "ClearOnCombatEnd": "false", "ClearOnRest": "false", "ClearOnFoodRest": "false", "ClearWhenAttacks": "false", "ClearOnDeath": "false", "HideFromCombatTooltip": "false", "HideFromCombatLog": "false", "HideFromUI": "false", "HideIfNoValue": "false", "VisualEffects": [], "MaterialReplacementID": "00000000-0000-0000-0000-000000000000", "AttackFilter": { "KeywordsIDs": [], "KeywordLogic": "Or", "Race": "None", "IsKith": "false", "HealthPercentage": 0, "HealthOperator": "EqualTo", "Range": "None", "ClassTypeID": "00000000-0000-0000-0000-000000000000", "Source": "ParentEquippable", "DefendedBy": "None", "Empowered": "false", "Disengagement": "false", "Stealthed": "false", "UseStealthLinger": "false", "PowerLevel": 0, "PowerLevelOperator": "EqualTo", "ChanceToApply": 1, "AttackHostility": "Default", "TargetType": "None" }, "AttackTargetFilter": { "KeywordsIDs": [], "KeywordLogic": "Or", "Race": "None", "IsKith": "false", "HealthPercentage": 0, "HealthOperator": "EqualTo", "Distance": 0, "DistanceOperator": "EqualTo", "HasDOT": "false", "IsMarked": "false", "TargetHostility": "Default" }, "ExtraValue": 0, "OverridePenetration": 0, "DamageTypeValue": "All", "KeywordValueID": "00000000-0000-0000-0000-000000000000", "RaceValue": "None", "StatusEffectTypeValue": "None", "ItemValueID": "00000000-0000-0000-0000-000000000000", "AfflictionTypeValueID": "00000000-0000-0000-0000-000000000000", "StatusEffectsValueIDs": ["74aa7603-efec-4e77-873e-d23ed2ac6ddb"], "AttackValueID": "00000000-0000-0000-0000-000000000000", "AttackOverrideValue": "None", "EventValue": "OnApply", "ClassValueID": "00000000-0000-0000-0000-000000000000", "WeaponTypeValue": "None", "AttackHitType": "None", "SkillValueID": "00000000-0000-0000-0000-000000000000", "AudioEventListID": "00000000-0000-0000-0000-000000000000", "BedRestDaysMinimum": 0, "BedRestDaysMaximum": 0 } ] } ] } I've copied the entire PT_Monk (dc561d91-7bc9-4314-acff-837511566964) entry from ProgressionTables to a new file in my mod folder, and added the following to the existing : - Add a new component to the base Swift_Strikes PL entity Spoiler { "Note": "PL 1 Unlock - Swift Strikes", "Category": "General", "UnlockStyle": "Unlock", "ActivationObject": "Self", "AddAbilityID": "73a35a9f-4a3c-4140-a1ce-354a07429e54", "RemoveAbilityID": "00000000-0000-0000-0000-000000000000", "Prerequisites": { "MinimumCharacterLevel": 1, "PowerLevelRequirement": { "ClassID": "f0036bfb-53d5-4d0c-b11a-b780d788a108", "MinimumPowerLevel": 1 }, "RequiresAbilityID": "00000000-0000-0000-0000-000000000000", "Conditional": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean ProgressionTableHasAbility(Guid)", "Parameters": ["3c85e6b0-275a-43b5-9b6f-da86f5e26be7"], "Flags": "", "UnrealCall": "", "FunctionHash": -1793712019, "ParameterHash": -1780164502 }, "Not": true, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean ProgressionTableHasAbility(Guid)", "Parameters": ["1382de0a-3941-4253-a8b3-3114dea498e6"], "Flags": "", "UnrealCall": "", "FunctionHash": -1793712019, "ParameterHash": 165912143 }, "Not": true, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean ProgressionTableHasAbility(Guid)", "Parameters": ["ffffffff-a1aa-43b5-9b6f-da86f5e26be7"], "Flags": "", "UnrealCall": "" }, "Not": true, "Operator": 0 } ] }, "VisibilityConditional": { "Operator": 0, "Components": [] }, "IsMutuallyExclusiveUpgrade": "true" } - Add the new ability under Swift_Flurry Spoiler { "Note": "PL 3 Unlock - Draining Strikes", "Category": "General", "UnlockStyle": "Unlock", "ActivationObject": "Self", "AddAbilityID": "ffffffff-a1aa-43b5-9b6f-da86f5e26be7", "RemoveAbilityID": "73a35a9f-4a3c-4140-a1ce-354a07429e54", "Prerequisites": { "MinimumCharacterLevel": 1, "PowerLevelRequirement": { "ClassID": "f0036bfb-53d5-4d0c-b11a-b780d788a108", "MinimumPowerLevel": 3 }, "RequiresAbilityID": "73a35a9f-4a3c-4140-a1ce-354a07429e54", "Conditional": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean ProgressionTableHasAbility(Guid)", "Parameters": ["73a35a9f-4a3c-4140-a1ce-354a07429e54"], "Flags": "", "UnrealCall": "" }, "Not": false, "Operator": 0 } ] }, "VisibilityConditional": { "Operator": 0, "Components": [] }, "IsMutuallyExclusiveUpgrade": "true" } After loading an existing game and trying to recruit a new adventurer, I still don't get the new Ability to show up. I've been at this for a couple hours now and I'm really unsure what to check next. Since 2 pairs (or more) of eyes generally spot problems easier than just the one pair, does anyone have an idea where I've gone wrong here ? Edit : the ability still uses some props from lightning strikes, such as VFX and icons ; I've not gotten to the aesthetics just yet, trying to get the ability upgrade to show up in the progression tree first thing. Edited July 13, 20205 yr by dam clarify about VFX and icons
July 26, 20205 yr I can't recall but you might have to start with a fresh character rather than load a savegame for any changes to the progression table. There's a small possibility you're adding it to the wrong table. There are way too many tables and the most simple name is usually the right one. What you did looks right but if you want a perfect example check out my Funnening monk mod that adds a bunch of skills. Some are setup like yours. Ultimately this is an easy problem to solve so don't let it drain your energy. You could try a full re-write or just wait until you make another similar ability and when the new one works, see what you should do with this one.
July 26, 20205 yr Also have you tried it out to see if the ability itself works, before adding it to the progression table? I have a ring that I add all my abilities to. Each time I load a game, I summon the ring via the console then equip it, see if there are any immediate problems, then go into combat nearby. You might need a new row instead of just a space to separate these two effects, for example: "StatusEffectsIDs": ["ffffffff-a1aa-4d2d-bd2e-b45596c0c80c", "ffffffff-a1aa-4c64-94d4-ec69589d47bf", "ffffffff-a1aa-4956-8894-2b5e76a39089"], SHOULD BE "StatusEffectsIDs": ["ffffffff-a1aa-4d2d-bd2e-b45596c0c80c", "ffffffff-a1aa-4c64-94d4-ec69589d47bf", "ffffffff-a1aa-4956-8894-2b5e76a39089"],
July 26, 20205 yr In my experience they both work the same, but the new row is much better for being more readable
August 24, 20205 yr Author I'll give the new character a try and let you know, thank you for the inputs
Create an account or sign in to comment