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": [] } ] } ] } 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 19 hours ago, 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? 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) 1 hour ago, MaxQuest said: Q2. Does anyone know how to create nested Conditionals that BMac has mentioned here? 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: Spoiler { "$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 3 hours ago, 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? 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). Spoiler [ { "$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) 2 hours ago, Noqn said: Just to confirm, you want the following logic? [...] Yeap) 2 hours ago, Noqn said: This is equivalent to this: [...] That's exactly what I needed! Thanks Noqn! I was looking at basic conditional: Spoiler "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