Jump to content

Grape_You_In_The_Mouth

Members
  • Posts

    225
  • Joined

  • Last visited

Posts posted by Grape_You_In_The_Mouth

  1. GravitonGamer I think "AddPhrases" does this.

     

    Humble Requests

    -=-=-=-=-=-=-=-=-=-

    Any kind of enabling for variables in status effects would be monumental (I'm sure you guys have thought of this).  I'm not sure if it's a system limitation but being unable to compare or transfer or multiply a variable value is surprising given that assembly code is so simple with it.  Thankfully this is already available in some specific instances for damage values, etc.  As an example, Perception vs Perception would be cool to compare in a status effect.

     

    It would be baller to be able to attenuate the damage of attacks with multiple hits.  Bounce data can do this but a lot of attacks can't bounce, like MultiHits.

     

    I'd also love a status effect to override bounce data for attacks fired.  Maybe it's tricky since this is already specifically added via the ExtraStraightBounces.

     

    Anything that opens up WeaponAttackAbilityComponent for more FullAttack modifications would be killer.  Attack speed or animation length for each phase was my big need.

     

    I would die for a status effect that applies another status effect to all allies or companions, but I'm guessing I'm being lazy here and haven't thought of a quick 1000 range AOE or something.

     

    A lot of desired effects could have "workaround" solutions if it was possible to apply a status effect before an attack is considered.  I don't know if this is OnLaunchesAttack or not because deep in my heart I'm still noob. 

  2. Like many of you, I too once suffered from Obsidiano-Interneta-Tutorialiosis.  Peardox and Bmac were creating the beginner's tutorials, and I was saving them desperately.  Fhav6x was breaking through barriers, and I couldn't wait to store this information until the day I get a russian mail-order bride smart enough to understand and teach me what it means.

     

    But when you save the HTML in chrome....it just keeps spinning.

    And when you save the complete webpage in Chrome.....there's a huge frickin' black box taking up half the screen the entire time!

     

    Perhaps Obsidian is constantly making heroic tales because the real villain is haunting its own backyard....right in the heart of its saved HTML files.

     

    Open up that mother truckin' HTML file in an editor like NotePad++ and search for

     

    <div id="overlay" style="display: none;">

     

    And delete it.

     

    ninjaga-33.gif

     

     

    ninjaga-35.gif

     

    ***************YOU WIN ****************

    • Like 1
  3. 2odeid.jpg

     

    Has anyone figured out some principles for creating visual effects?  Everytime I try to edit the visual effects I go down some rabbit hole of trial and error.  I've had problems before but now it's a very difficult situation.  I'm trying to make a shackle shot that hits an enemy then shoots towards another enemy (which may or may not hit).  I want to make the visual effect a beam, hopefully looping when both enemies are hit and stunned, but even just one beam effect somewhere would be fine.  I used Wounding Shot as the initial attack base and then an AttackOnEvent for the stun hit.  I'm only getting some default Ranger attack of green smoke even though I've replaced all the visual effects!  Super lame.

     

    My ability is structured like this:

    WeaponAttackAbilityGameData
    >>>WeaponAttackAbilityComponent
    ---FullAttack
    ---AttackVisualEffects
    ---AttackStatusEffectsIDs (linked attack stuns)
    >>>>>>>AttackTargetOnEvent
    -------OnApply
    >>>>>>>>AttackMeleeGameData
    --------"VisualEffects"
    --------"AttackOnImpactID" (linked attack shoots out)
    >>>>>>>>>>>>>AttackRangedGameData
    -------------"VisualEffects"
    -------------AttackRangedComponent
    ----------------"ProjectilePrefab"
  4. It's looking impossible to have any ability that requires targeting twice.  For instance, leaping to a location and applying beam damage from beginning of the leap towards the leap location.  You can't make a leap attack and link it to a beam attack.

     

    Edit: Instead, you have to use an attack type of BeamTeleportAttackGameData, like the Fighter's Charge attack.

     

    This means that AOE pulse attacks can follow a targetable ability, because it doesn't require extra targeting.

  5. I just had to use notepad++ to manually add in all the notes for the ranger class code from v2.1 to v3.0 I'm working on.  I couldn't find a way to merge the file. Lame!

     

    Peardox, if you want a copy of the file to add to the website let me know.  The notes show the name of the abilities so you actually have an idea of what you're working on.  For some reason they were removed in the 3.0 version.  I didn't make labels for the new abilities added by 3.0 yet.

     

    Ex:

    "Note": "PL 8 Unlock - Vengeful Grief",
  6. I can't figure out at all how to make something happen when you miss an enemy. Someone suggested applying a status effect to an enemy that makes something happen when they miss you, which would be the same thing, but every experiment I've tried with it results in

    -the thing that's meant to happen to them happens to me

    -nothing happens, not even the attack that's meant to trigger the effect

    -I take a ton of damage and die?????

     

    I'm presumably just screwing something up, but I don't know how or why and don't really have time to keep experimenting with it. *shrug*

    The effect should happen on you when you miss an enemy?  That could be via ApplyStatusEffectOnEvent but I wouldn't know how to make it apply to an enemy

  7. Push distance?  There seems to be a maximum as I increase and decrease a push ability.  When over the maximum, enemies don't move anywhere. It looks like if the range is too far, then they don't move at all.  The physics is all janky and only occasionally will it allow a creature to be pushed into a wall and slide along the edge, but most of the time it just never moves anything.

  8. When modding it's usually important to know the limits of the code you're working with.  Excel famously has a limit to the rows for each spreadsheet, and it's determined by the number of byte values tracking the rows (5 bytes = 1,048,576 possible numbers).  Are there any hard limits to values in the PoE enumerations, structures, or scripts?

     

    For example, I just tried to make an effect that raises all other skills per Diplomacy skill.  15 status effects on one ItemMod....you bet the game broke.  But is it because of a number limit, or because I just coded something uncool?  What if I try to make my Power Level 9000??

  9. Do you know which key word are unsafe for new statuseffects?  There is a "boss" keyword for example.  So many of those keywords are not in any StatusEffect.  They seem to be listed in groups in the Keyword List of gui.gamedatabundle.  For instance, there are two "scroll" keywords in different places, and they are sometimes alphabetical until the next group is reached.

  10. To make an effect only affect specific categories, you can use keywords in the AttackFilter section.  Keywords act as categories/tags.  Here is how I made boots that increase the Area of Effect size for only Burn, Shock, Freeze, and Corrode abilities.

     

    "StatusEffectType": "AoEMult",
    .
    .
    .
    "AttackFilter": {
    "KeywordsIDs": [
    "f0dbb330-1b06-4175-8ce4-efe790b99213",
    "9c7d6f36-50ff-4b08-a528-74789abe0599",
    "f8a513bb-3e92-4d10-b59f-abbdf71d8af4",
    "56895011-1aab-4413-827b-51a126c04555"
    ],
    .
    .
    .
    }

     

    You could also change

    "AttackHostility": "Default",

    to "Hostile" if you wanted only offensive spells to be affected.

     

    How do you get the keywords? I have no idea, I can't find a list anywhere.

     

     

    j9RIKXM.jpg

     

     

    Here's the List of Keywords I have so Far:

     

    Keywords
    ----------------
    Cypher stuff (Mental & something else?)
    902ae78f-1151-4f14-9db6-a7a1c728a1eb
    04f1f10c-5b4c-42ce-8fc2-01ce366851ad
     
    fire - f0dbb330-1b06-4175-8ce4-efe790b99213
    shock - 9c7d6f36-50ff-4b08-a528-74789abe0599
    frost - f8a513bb-3e92-4d10-b59f-abbdf71d8af4
    corrode - 56895011-1aab-4413-827b-51a126c04555
     
    restoration - d5e4e9b4-9565-4654-9e2e-2d68d8847c20
    evocation - 3f075d80-787a-493e-bbaa-6da3d6dc2d0f
    illusion - 69d9e77c-1a78-4af0-b590-0ea1620ab60b
    enchanting - 6149f072-d79d-4429-8dbd-3f014e8f013c
     
    flanked - 8ca098ca-731e-481d-b958-a337064afd6c
    gaze abilities - 30171246-34fc-4066-b6da-6aa100db273d
    plant - 504782eb-f943-42a1-93dc-cbec74d42c66
     
     
     
    If you instead wanted to make an item that gives +3 Power Levels to Priest spells in the Restoration category, that is instead at the end of the code:
     
    "KeywordValueID": "d5e4e9b4-9565-4654-9e2e-2d68d8847c20",
    .
    .
    .
    "ClassValueID": "f7cb46af-a719-41c0-9a53-107eefdbce2b",

     

     

    Maybe you hate that idea and want to make a weapon effect that only affects enemies that are flanked instead?  The AttackTargetFilter is your happy place:

     

    But first you define this effect only for the weapon:

    "AttackFilter": {
    .
    .
    .
    "Source": "ParentEquippable",

     

    Then it only hits flanked targets:

    "AttackTargetFilter": {
    "KeywordsIDs": [
    "8ca098ca-731e-481d-b958-a337064afd6c"
  11. Here's how to make an effect occur after a certain amount of time after combat starts.  This will have to be an ability, because abilities can have the status of "IsCombatOnly" and that starts and stops the effects automatically.

     

    This ability will give -0.2 Power Levels per History skill after 60 seconds.

     

    "$type": "Game.GameData.GenericAbilityGameData, Assembly-CSharp",
    "DebugName": "head_history_lessons_Ability",
    .
    .
    .
    "IsPassive": "true",
    "IsCombatOnly": "true",
    "StatusEffectsIDs": [
    "4971be2c-d568-4b14-b6a3-41e5805e41c7"
    ],

     

    Then you have your first status effect, which will be the countdown timer that triggers the next effect (your truly desired effect) after the duration.  The countdown timer uses ApplyAtEnd, but Obsidian uses OnClear instead.  If you use OnClear it appears that you have to change a couple more settings.

     

    Note: The first effect (the countdown timer) will describe the effects because it's linked to those effects.  So in the game it will look like those effects are happening but they are not---it's just the timer.  That is why it is hidden from the GUI (HideFromCombatTooltip, HideFromCombatLog, HideFromUI), when Obsidian made drug crashes, so it doesn't appear that your effects are happening when truly they are only about to happen!

     

    Also, notice that the first effect (the countdown timer) can be a good or bad effect, so "IsHostile" should be something that helps the player when they have better intelligence or resolve!

            {
                "$type": "Game.GameData.StatusEffectGameData, Assembly-CSharp",
                "DebugName": "head_history_lessons_SE_powerlevel_decrease_ApplyOnEvent",
                "ID": "4971be2c-d568-4b14-b6a3-41e5805e41c7",
                "Components": [
                    {
                        "$type": "Game.GameData.StatusEffectComponent, Assembly-CSharp",
                        "StatusEffectType": "ApplyStatusEffectOnEvent",
                        "OverrideDescriptionString": 305149979,
                        "UseStatusEffectValueAs": "None",
                        "BaseValue": 0,
                        "DynamicValue": {
                            "Stat": "None",
                            "SkillDataID": "00000000-0000-0000-0000-000000000000",
                            "ClassID": "00000000-0000-0000-0000-000000000000",
                            "MultiplyBy": 1,
                            "Operator": "Add"
                        },
                        "KeywordsIDs": [],
                        "DurationType": "UseDurationTime",
                        "Duration": 60,
                        "MaxStackQuantity": 0,
                        "ApplicationBehavior": "UseLongerDurationIfAlreadyApplied",
                        "ApplicationType": "ApplyAtEnd",
                        "IntervalRateID": "00000000-0000-0000-0000-000000000000",
                        "StackedChildrenApplyEffects": "false",
                        "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": "true",
                        "HideFromCombatLog": "false",
                        "HideFromUI": "true",
                        "VisualEffects": [],
                        "MaterialReplacementID": "00000000-0000-0000-0000-000000000000",
                        "AttackFilter": {
                            "KeywordsIDs": [],
                            "KeywordLogic": "Or",
                            "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": [
                            "b928e3c4-2c79-4ed3-bddb-757ef34b834a"
                        ],
                        "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": "head_history_lessons_SE_powerlevel_decrease",
                "ID": "b928e3c4-2c79-4ed3-bddb-757ef34b834a",
                "Components": [
                    {
                        "$type": "Game.GameData.StatusEffectComponent, Assembly-CSharp",
                        "StatusEffectType": "PowerLevel",
                        "OverrideDescriptionString": 305149980,
                        "UseStatusEffectValueAs": "None",
                        "BaseValue": 0,
                        "DynamicValue": {
                            "Stat": "SkillValue",
                            "SkillDataID": "c6b6f87a-0381-4219-93eb-77ae2b64f0af",
                            "ClassID": "00000000-0000-0000-0000-000000000000",
                            "MultiplyBy": -0.2,
                            "Operator": "Add"
                        },
                        "KeywordsIDs": [],
                        "DurationType": "Infinite",
                        "Duration": 1,
                        "MaxStackQuantity": 0,
                        "ApplicationBehavior": "UseLongerDurationIfAlreadyApplied",
                        "ApplicationType": "ApplyOnStart",
                        "IntervalRateID": "00000000-0000-0000-0000-000000000000",
                        "StackedChildrenApplyEffects": "false",
                        "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": "true",
                        "ClearOnCombatEnd": "true",
                        "ClearOnRest": "false",
                        "ClearOnFoodRest": "false",
                        "ClearWhenAttacks": "false",
                        "ClearOnDeath": "false",
                        "HideFromCombatTooltip": "false",
                        "HideFromCombatLog": "false",
                        "HideFromUI": "false",
                        "VisualEffects": [],
                        "MaterialReplacementID": "00000000-0000-0000-0000-000000000000",
                        "AttackFilter": {
                            "KeywordsIDs": [],
                            "KeywordLogic": "Or",
                            "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
                    }
                ]
            }
        ]
    }
    
  12. Wow, thanks for confirming this.  I thought I wasn't doing it right but then I realized that it only appears incorrectly, because drug crashes are hidden from the GUI until the OnClear happens.  I did not hide my effects from the GUI, so I see the countdown timer before the OnClear happens, and in the GUI it says the bad effect is already happening---but it's not, it's just the timer.  The timer will describe the bad effects because it's linked to those effects, that is why it is hidden, when Obsidian made drug crashes.  My code was actually working just as intended!

     

    What's even worse was that the ability changes Power Levels, which are harder to see in the game (because I'm a big ol' noob).

     

    I think you just saved me many many hours of work---I would have re-created my entire ability and it would be incorrect.  I mean wow, thanks man.  You seriously just saved my weekend.

    • Like 1
  13. Creating an effect that happens after another one finishes seems to be pretty complicated.  Obsidian seems to use EventType:OnClear for drug "crashes" after the 180 seconds is over.  Another modder prefers to use ApplicationType:ApplyAtEnd instead, with the EventType being OnApply.  What's the right way to do this?  

  14. Just made a glove that gives a bonus to deflection, scaling with your Sleight of Hand ability, applying when you get grazed by melee weapons, stackable up to 20x.  It's pretty cool that you can link all of those status effects!

     

    amM0KHK.jpg

    {
        "GameDataObjects": [
            {
                "$type": "Game.GameData.EquippableGameData, Assembly-CSharp",
                "DebugName": "hands_sleight",
                "ID": "72e3962c-56ae-4f58-bfd4-23336778484c",
                "Components": [
                    {
                        "$type": "Game.GameData.ItemComponent, Assembly-CSharp",
                        "DisplayName": 305149968,
                        "DescriptionText": 305149969,
                        "FilterType": "Clothing",
                        "InventoryAudioEventListID": "fb712b7c-32bf-4e9c-b5bd-595abd18298e",
                        "IsQuestItem": "false",
                        "IsIngredient": "false",
                        "IsCurrency": "false",
                        "IsAdventuringItem": "false",
                        "IsJunk": "false",
                        "CanSellForFullValue": "false",
                        "MaxStackSize": 1,
                        "NeverDropAsLoot": "false",
                        "CanBePickpocketed": "true",
                        "IsUnique": "true",
                        "Value": 750,
                        "IconTextureSmall": "gui\/icons\/items\/hand\/glove_01_s.png",
                        "IconTextureLarge": "gui\/icons\/items\/hand\/glove_01_l.png",
                        "PencilSketchTexture": "",
                        "InspectOnUseButton": [],
                        "IsPlaceholder": "false"
                    },
                    {
                        "$type": "Game.GameData.EquippableComponent, Assembly-CSharp",
                        "EquipmentType": "None",
                        "EquipmentSlot": "Hand",
                        "AppearancePiece": {
                            "ModelVisualDataPath": ""
                        },
                        "ItemModsIDs": [
                            "8589d499-27a7-4c84-80c5-3a33c7404f88"
                        ],
                        "OnEquipVisualEffects": [],
                        "RestrictedToClassIDs": [],
                        "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": "a_sleight_angle",
                "ID": "8589d499-27a7-4c84-80c5-3a33c7404f88",
                "Components": [
                    {
                        "$type": "Game.GameData.ItemModComponent, Assembly-CSharp",
                        "DisplayName": 305149970,
                        "HideFromUI": "false",
                        "EnchantCategory": "None",
                        "Cost": 8,
                        "CursesItem": "false",
                        "DurabilityDamage": 0,
                        "StatusEffectsOnEquipIDs": [
                            "c58ad9f4-ff8c-4213-8b13-9962b4f54382"
                        ],
                        "StatusEffectsOnLaunchIDs": [],
                        "StatusEffectsOnAttackIDs": [],
                        "AbilityModsOnEquipIDs": [],
                        "OnEquipVisualEffects": [],
                        "DamageProcs": [],
                        "AbilitiesOnEquipIDs": []
                    }
                ]
            },
            {
                "$type": "Game.GameData.StatusEffectGameData, Assembly-CSharp",
                "DebugName": "hands_sleight_angle_SE_ApplyOnEvent",
                "ID": "c58ad9f4-ff8c-4213-8b13-9962b4f54382",
                "Components": [
                    {
                        "$type": "Game.GameData.StatusEffectComponent, Assembly-CSharp",
                        "StatusEffectType": "ApplyStatusEffectOnEvent",
                        "OverrideDescriptionString": 305149971,
                        "UseStatusEffectValueAs": "None",
                        "BaseValue": 0,
                        "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",
                        "ApplicationPrerequisites": {
                            "Conditional": {
                                "Operator": 0,
                                "Components": []
                            }
                        },
                        "TriggerAdjustment": {
                            "TriggerOnEvent": "None",
                            "TriggerOffEvent": "None",
                            "ValidateWithAttackFilter": "false",
                            "ParamValue": 0,
                            "ValueAdjustment": 0,
                            "DurationAdjustment": 0,
                            "ResetTriggerOnEffectTimeout": "false",
                            "MaxTriggerCount": 20,
                            "IgnoreMaxTriggerCount": "false",
                            "RemoveEffectAtMax": "false",
                            "ChanceToTrigger": 1
                        },
                        "PowerLevelScaling": {
                            "UseCharacterLevel": "false",
                            "BaseLevel": 0,
                            "LevelIncrement": 1,
                            "MaxLevel": 0,
                            "ValueAdjustment": 0,
                            "DurationAdjustment": 0
                        },
                        "IsHostile": "false",
                        "ClearOnCombatEnd": "true",
                        "ClearOnRest": "false",
                        "ClearOnFoodRest": "false",
                        "ClearWhenAttacks": "false",
                        "ClearOnDeath": "false",
                        "HideFromCombatTooltip": "true",
                        "HideFromCombatLog": "false",
                        "HideFromUI": "false",
                        "VisualEffects": [],
                        "MaterialReplacementID": "00000000-0000-0000-0000-000000000000",
                        "AttackFilter": {
                            "KeywordsIDs": [],
                            "KeywordLogic": "Or",
                            "Range": "Melee",
                            "ClassTypeID": "00000000-0000-0000-0000-000000000000",
                            "Source": "Weapon",
                            "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": "Hostile"
                        },
                        "ExtraValue": 60,
                        "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": [
                            "195b5fc6-9e89-49c6-99b1-0768f9859ad1"
                        ],
                        "AttackValueID": "00000000-0000-0000-0000-000000000000",
                        "AttackOverrideValue": "None",
                        "EventValue": "OnGrazed",
                        "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": "sleight_angle_SE_deflect_stack",
                "ID": "195b5fc6-9e89-49c6-99b1-0768f9859ad1",
                "Components": [
                    {
                        "$type": "Game.GameData.StatusEffectComponent, Assembly-CSharp",
                        "StatusEffectType": "Deflection",
                        "OverrideDescriptionString": 305149972,
                        "UseStatusEffectValueAs": "None",
                        "BaseValue": 0,
                        "DynamicValue": {
                            "Stat": "SkillValue",
                            "SkillDataID": "3b073ebf-0a4a-48a3-947d-ad38bef10b36",
                            "ClassID": "00000000-0000-0000-0000-000000000000",
                            "MultiplyBy": 0.1,
                            "Operator": "Add"
                        },
                        "KeywordsIDs": [],
                        "DurationType": "UseDurationTime",
                        "Duration": 60,
                        "MaxStackQuantity": 20,
                        "ApplicationBehavior": "StackIfAlreadyApplied",
                        "ApplicationType": "ApplyOnStart",
                        "IntervalRateID": "00000000-0000-0000-0000-000000000000",
                        "StackedChildrenApplyEffects": "false",
                        "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": "true",
                        "ClearOnRest": "false",
                        "ClearOnFoodRest": "false",
                        "ClearWhenAttacks": "false",
                        "ClearOnDeath": "false",
                        "HideFromCombatTooltip": "false",
                        "HideFromCombatLog": "false",
                        "HideFromUI": "false",
                        "VisualEffects": [],
                        "MaterialReplacementID": "00000000-0000-0000-0000-000000000000",
                        "AttackFilter": {
                            "KeywordsIDs": [],
                            "KeywordLogic": "Or",
                            "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
                    }
                ]
            }
        ]
    }
    
    • Like 1
  15. Well, item modding is super easy once you know what to look for.  In 8 hours I created a psionic blade like Templar Assassin that hits enemies in a small cone behind it.  The key there was using the new weapon as a base, then adding in the changes from another weapon that does a similar ability.

     

    Also, I just created a cool new eye patch that scales a stat with your skill levels.  This is also super easy but you have to find the Skill ID in other items:

     

    YI3l2ng.jpg

     

    Here are the skill IDs that I found.  They can be used in either SkillDataID or SkillValueID but these are the places I found them:

     

    SkillDataID
    ---------------
    stealth - 8cc41e27-e62f-4e75-9f7d-ae47986895d2
    arcana - e5f33551-ec5c-4cc8-b5f2-1eb03d210374
    explosives - e67f20e3-5bf9-4d87-9bda-211405107362
    athletics - fefc4d3d-250d-4c32-85e0-62a851240e62
    intimidate - 3ad9194b-4f41-480e-aa75-1c82df43be84
    metaphysics - 98051b85-d7e5-4746-a66c-260e2fcd2d4b
    religion - 98cc5a0d-1387-42e3-9202-417bc42b53ad
    survival - 9c7962b8-bf69-4670-ba67-acc86a09fca8
     
    intellect? - 1b26af87-fd19-4dc6-9380-4f5cec7aefd5
     
    SkillValueID
    ----------------
    bluff - 6fa62ec8-6695-4a1d-8553-7486b0ac20c4
    diplomacy - c7e22ee0-bdd6-4ca8-99f0-a46f3dd66606
    history - c6b6f87a-0381-4219-93eb-77ae2b64f0af
    insight - f5d2c2bf-1ffd-4741-b6d8-31ae01985d4b
    streetwise - eb8da173-4a3e-4910-94e8-dd0c1436ca40
    slight of hand - 3b073ebf-0a4a-48a3-947d-ad38bef10b36
    mechanics - 3affbb70-86bd-41f3-82c6-325326d40796
    alchemy - 1b26af87-fd19-4dc6-9380-4f5cec7aefd5

     

     

    The code for this looks like:

            {
                "$type": "Game.GameData.StatusEffectGameData, Assembly-CSharp",
                "DebugName": "journeyman_SE_bluff",
                "ID": "82c29fce-5487-4fed-99cf-6141a248affd",
                "Components": [
                    {
                        "$type": "Game.GameData.StatusEffectComponent, Assembly-CSharp",
                        "StatusEffectType": "Perception",
                        "OverrideDescriptionString": 305149966,
                        "UseStatusEffectValueAs": "None",
                        "BaseValue": 0,
                        "DynamicValue": {
                            "Stat": "SkillValue",
                            "SkillDataID": "6fa62ec8-6695-4a1d-8553-7486b0ac20c4",
                            "ClassID": "00000000-0000-0000-0000-000000000000",
                            "MultiplyBy": 0.5,
                            "Operator": "Add"
                        },
    

    and then it's the rest of the code for that Status Effect.  The DynamicValue section is what performs the work here.  It multiplies the Skill amount by 0.5 and adds the stat.

     

    Like always, you link your Item to an ItemModsID, ItemMod to a StatusEffect(on equip).  There's actually another StatusEffect for this item that does the same thing, but reduces the stat (Perception) for each increase in Diplomacy.

×
×
  • Create New...