dam Posted July 13, 2020 Posted July 13, 2020 (edited) 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, 2020 by dam clarify about VFX and icons
Grape_You_In_The_Mouth Posted July 26, 2020 Posted July 26, 2020 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.
Grape_You_In_The_Mouth Posted July 26, 2020 Posted July 26, 2020 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"],
house2fly Posted July 26, 2020 Posted July 26, 2020 In my experience they both work the same, but the new row is much better for being more readable
dam Posted August 24, 2020 Author Posted August 24, 2020 I'll give the new character a try and let you know, thank you for the inputs
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now