MaxQuest Posted November 11, 2021 Posted November 11, 2021 I have a few ideas, but don't know how to implement them. Does anyone know how: to combine onDamaged with OnCriticallyHit and OnHitOrCriticallyHit statusEffect event types? (I want to detect a hit or crit, from an attack that deals damage) to implement channeling casting. I.e. and effect happens only during active casting; and when the character performs any other action, the effect immediately stops? to make a trinket unswappable during combat? to use AbilityModGameData and AbilityModComponent? (see example below) ------------ I am trying to make a trinket that when equipped mods the Spiritshift_Bear ability by adding an additional use: Quote { "GameDataObjects": [ { "$type": "Game.GameData.EquippableGameData, Assembly-CSharp", "DebugName": "Trinket_U_Spiritshift_Glyph_Of_Tenacity", "ID": "22599625-5647-4acb-a545-69d5ad161b1e", "Components": [ { "$type": "Game.GameData.ItemComponent, Assembly-CSharp", "DisplayName": 34011, "DescriptionText": 34012, "DescriptionTextTactical": -1, "FilterType": "Artifact", "InventoryAudioEventListID": "32023afc-c1c3-4b6a-bcfd-77bde56ee6c3", "IsQuestItem": "false", "IsIngredient": "false", "IsCurrency": "false", "IsAdventuringItem": "false", "IsJunk": "false", "CanSellForFullValue": "false", "MaxStackSize": 1, "NeverDropAsLoot": "false", "CanBePickpocketed": "false", "IsUnique": "true", "Value": 17200, "IconTextureSmall": "POE1_book_tome_S", "IconTextureLarge": "gui/icons/misc/book_tome_L.png", "PencilSketchTexture": "", "InspectOnUseButton": [], "IsPlaceholder": "false" }, { "$type": "Game.GameData.EquippableComponent, Assembly-CSharp", "EquipmentType": "None", "EquipmentSlot": "GrimoireOrTrinket", "AppearancePiece": { "ModelVisualDataPath": "" }, "ItemModsIDs": [ "3d075219-7bbd-4628-a43c-5452c4c3a17c" ], "OnEquipVisualEffects": [], "RestrictedToClassIDs": [ "568f1c26-1398-4e67-8b81-0f6a60e6cdde" ], "RestrictedToPlayer": "false", "EquipConditionals": { "Operator": 0, "Components": [] }, "ProficientAbilityID": "00000000-0000-0000-0000-000000000000", "CannotUnequip": "false", "ItemRendererPrefab": "", "ItemModel": "", "AnimationController": "", "PaperdollOverrideRenderer": "", "AttackSummonID": "00000000-0000-0000-0000-000000000000", "CannotSheathe": "false", "PropVisualEffects": [] } ] }, { "$type": "Game.GameData.ItemModGameData, Assembly-CSharp", "DebugName": "Extra_Spiritshift_Tenacity", "ID": "3d075219-7bbd-4628-a43c-5452c4c3a17c", "Components": [ { "$type": "Game.GameData.ItemModComponent, Assembly-CSharp", "DisplayName": 33012, "HideFromUI": "false", "EnchantCategory": "Unique", "Cost": 4, "CursesItem": "false", "DurabilityDamage": 0, "StatusEffectsOnEquipIDs": [], "StatusEffectsOnLaunchIDs": [], "StatusEffectsOnAttackIDs": [], "AbilityModsOnEquipIDs": ["d77957c3-c9d1-47f9-bdf9-ee79a1eafd6b"], "OnEquipVisualEffects": [], "DamageProcs": [], "AbilitiesOnEquipIDs": [] } ] }, { "$type": "Game.GameData.AbilityModGameData, Assembly-CSharp", "DebugName": "Extra_Spiritshift_Ability_Mod_Tenacity", "ID": "d77957c3-c9d1-47f9-bdf9-ee79a1eafd6b", "Components": [ { "$type": "Game.GameData.AbilityModComponent, Assembly-CSharp", "Type": "AdditionalUse", "Value": 1, "StatusEffectsIDs": ["00000000-0000-0000-0000-000000000000"], "ReplacedVisualEffects": [] } ] } ] } Expand But in AbilityModComponent description it is not mentioned how to indicate the id of ability that is being modded. I.e. where to add "0db41697-d8b9-49fa-b31e-67eb9c3a9693" which corresponds to Spiritshift_Bear ability? 1 PoE1 useful stuff: attack speed calculator, unofficial patch mod, attack speed mechanics, dot mechanics, modals exclusivity rules PoE2 useful stuff: community patch, attack speed mechanics, enemy AR and defenses
Noqn Posted November 12, 2021 Posted November 12, 2021 On 11/11/2021 at 4:44 PM, MaxQuest said: to implement channeling casting. I.e. and effect happens only during active casting; and when the character performs any other action, the effect immediately stops? Expand This is a wild guess, but something like a castable ability (using an attack with a very long custom CastSpeed to make it "channel"?) together with a passive ability with ActivationPrerequisites/DeactivationPrerequisites utilizing the IsCastingAbility conditional? IsCastingAbility 7d150000-0000-0000-0000-000000000000 <CastableAbilityID> With this the passive ability should trigger while the castable ability is being "channeled". 1
MaxQuest Posted November 12, 2021 Author Posted November 12, 2021 That's a good idea Noqn! It indeed might work) 1 PoE1 useful stuff: attack speed calculator, unofficial patch mod, attack speed mechanics, dot mechanics, modals exclusivity rules PoE2 useful stuff: community patch, attack speed mechanics, enemy AR and defenses
MaxQuest Posted November 18, 2021 Author Posted November 18, 2021 Two more questions: Q1. I want to create an item that gives bonus accuracy vs Prone enemies. But how can a StatusEffect check if the enemy is Prone? There is no proper keyword for that. So I have created one and added it to Abilities and StatusEffects (e.g. Amplified Wave); and also added it to AttackTargetFilter of item's StatusEffect. So far so good, the autogenerated tooltip reads "+x Accuracy vs Prone enemies"; but character doesn't actually get bonus accuracy. Probably because Prone is considered an interruptType? Q2. Does anyone know how to create nested Conditionals that BMac has mentioned here? I want to implement: ActivationPrerequisites (hasStatusEffect): (effectA1 || effectA2) && (effectB1 || effectB2) DeactivationPrerequisites (hasStatusEffect):: !(effectA1 || effectA2) || !(effectB1 || effectB2) But without parentheses, and with partially bugged right-to-left boolean evaluation it is not clear how to do it... PoE1 useful stuff: attack speed calculator, unofficial patch mod, attack speed mechanics, dot mechanics, modals exclusivity rules PoE2 useful stuff: community patch, attack speed mechanics, enemy AR and defenses
Testlum Posted November 18, 2021 Posted November 18, 2021 Looking at the statuseffect.gamedatabundle, there is actually a status called AFF_Prone. Can you use it as a prerequisite on the target enemy for your bonus Accuracy to activate? 1
Noqn Posted November 18, 2021 Posted November 18, 2021 (edited) On 11/18/2021 at 10:52 AM, MaxQuest said: Q2. Does anyone know how to create nested Conditionals that BMac has mentioned here? Expand Just to confirm, you want the following logic? ActivationPrerequisite: if { HasStatusEffect(This, SE_A1) or HasStatusEffect(This, SE_A2) } and if { HasStatusEffect(This, SE_B1) or HasStatusEffect(This, SE_B2) } DeactivationPrerequisite: if { not HasStatusEffect(This, SE_A1) and not HasStatusEffect(This, SE_A2) } or if { not HasStatusEffect(This, SE_B1) and not HasStatusEffect(This, SE_B2) } This is equivalent to this: Reveal hidden contents { "$type": "Game.GameData.GenericAbilityComponent, Assembly-CSharp", "ActivationPrerequisites": { "Conditional": { "Operator": 0, "Components": [ { "$type": "OEIFormats.FlowCharts.ConditionalExpression, OEIFormats", "Operator": 0, "Components": [ { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean HasStatusEffect(Guid, Guid)", "Parameters": [ "7d150000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000000" ] }, "Not": false, "Operator": 1 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean HasStatusEffect(Guid, Guid)", "Parameters": [ "7d150000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000000" ] }, "Not": false, "Operator": 0 } ] }, { "$type": "OEIFormats.FlowCharts.ConditionalExpression, OEIFormats", "Operator": 0, "Components": [ { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean HasStatusEffect(Guid, Guid)", "Parameters": [ "7d150000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000000" ] }, "Not": false, "Operator": 1 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean HasStatusEffect(Guid, Guid)", "Parameters": [ "7d150000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000000" ] }, "Not": false, "Operator": 0 } ] } ] } }, "DeactivationPrerequisites": { "Conditional": { "Operator": 0, "Components": [ { "$type": "OEIFormats.FlowCharts.ConditionalExpression, OEIFormats", "Operator": 1, "Components": [ { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean HasStatusEffect(Guid, Guid)", "Parameters": [ "7d150000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000000" ] }, "Not": true, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean HasStatusEffect(Guid, Guid)", "Parameters": [ "7d150000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000000" ] }, "Not": true, "Operator": 0 } ] }, { "$type": "OEIFormats.FlowCharts.ConditionalExpression, OEIFormats", "Operator": 0, "Components": [ { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean HasStatusEffect(Guid, Guid)", "Parameters": [ "7d150000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000000" ] }, "Not": true, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean HasStatusEffect(Guid, Guid)", "Parameters": [ "7d150000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000000" ] }, "Not": true, "Operator": 0 } ] } ] } } } Edited November 18, 2021 by Noqn 1
MaxQuest Posted November 18, 2021 Author Posted November 18, 2021 On 11/18/2021 at 12:05 PM, Testlum said: Looking at the statuseffect.gamedatabundle, there is actually a status called AFF_Prone. Can you use it as a prerequisite on the target enemy for your bonus Accuracy to activate? Expand I have tried that. And the trinket tooltip correctly reads something like: "+13 Accuracy vs enemies affected by Prone". But there is still no bonus in combat log. Have tested with fighter's Knockdown, Call to Slumber, Amplified Wave and Amplified Wave (with added Prone keyword). Reveal hidden contents [ { "$type": "Game.GameData.KeywordGameData, Assembly-CSharp", <-- creating Prone keyword "DebugName": "ProneOrKnockedDown", "ID": "54119cfb-fe2b-4644-8bb8-38b8cd59b935", "Components": [ { "$type": "Game.GameData.KeywordComponent, Assembly-CSharp", "GuiDisplayString": 1121, "AbilitiesDisplayString": 5174, "Description": -1, "OverridePluralEffect": -1, "Icon": "", "TintableIcon": "" } ] }, { "$type": "Game.GameData.AfflictionGameData, Assembly-CSharp", "DebugName": "AFF_Prone", "ID": "6ee08f75-8219-4d13-b6b1-b87289ad2a38", "Components": [ { "$type": "Game.GameData.AfflictionComponent, Assembly-CSharp", "DisplayName": 5174, "Icon": "gui/icons/keywords/ico_status_prone.png", "AfflictionTypeID": "00000000-0000-0000-0000-000000000000", "IsThinUI": "true" }, { "$type": "Game.GameData.StatusEffectComponent, Assembly-CSharp", "KeywordsIDs": ["54119cfb-fe2b-4644-8bb8-38b8cd59b935"] <-- adding Prone keyword to AFF_Prone } ] }, { "$type": "Game.GameData.StatusEffectGameData, Assembly-CSharp", <-- my custom status effect "DebugName": "Trample_SE_Bonus", "ID": "8a6c7d3f-f8f9-4caf-8887-84b627c5132a", "Components": [ { "$type": "Game.GameData.StatusEffectComponent, Assembly-CSharp", "StatusEffectType": "AllAccuracy", "OverrideDescriptionString": -1, "OverrideDescriptionStringTactical": -1, "UseStatusEffectValueAs": "None", "BaseValue": 13, "DynamicValue": { "Stat": "None", "SkillDataID": "00000000-0000-0000-0000-000000000000", "ClassID": "00000000-0000-0000-0000-000000000000", "MultiplyBy": 1, "Operator": "Add" }, "KeywordsIDs": [], "DurationType": "Infinite", "Duration": 1, "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": ["54119cfb-fe2b-4644-8bb8-38b8cd59b935"], <-- setting here the Prone keyword "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 } ] } ] PoE1 useful stuff: attack speed calculator, unofficial patch mod, attack speed mechanics, dot mechanics, modals exclusivity rules PoE2 useful stuff: community patch, attack speed mechanics, enemy AR and defenses
MaxQuest Posted November 18, 2021 Author Posted November 18, 2021 (edited) On 11/18/2021 at 12:46 PM, Noqn said: Just to confirm, you want the following logic? [...] Expand Yeap) On 11/18/2021 at 12:46 PM, Noqn said: This is equivalent to this: [...] Expand That's exactly what I needed! Thanks Noqn! I was looking at basic conditional: Reveal hidden contents "ActivationPrerequisites": { "Conditional": { "Operator": 0, "Components": [ { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean HasStatusEffec(Guid, Guid)", "Parameters": [ "7d150000-0000-0000-0000-000000000000", "64fd55f4-fe6c-4b0b-9d93-dd51f3fe1620" ], "Flags": "", "UnrealCall": "", "FunctionHash": 0, "ParameterHash": 0 }, "Not": false, "Operator": 0 } ] } } And thinking: how do I put nested components here?? OEIFormats.FlowCharts.ConditionalExpression is the answer I was looking for. Edited November 18, 2021 by MaxQuest PoE1 useful stuff: attack speed calculator, unofficial patch mod, attack speed mechanics, dot mechanics, modals exclusivity rules PoE2 useful stuff: community patch, attack speed mechanics, enemy AR and defenses
Grape_You_In_The_Mouth Posted November 23, 2021 Posted November 23, 2021 I implemented two types of spells similar to your concept of channeling. Inquisition in my priest mod lasts 10 seconds and disables you for the duration. I also have a Charging thread here recently where boots activate a modal that is canceled when another ability is used. It's not exactly what you want but the Charging effect could be reworked to do exactwhat you want. 1
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