Skip to content

Releases: arachnocid/ObjectImpactFramework

Release v1.6.8

28 Aug 15:02
ec2b126

Choose a tag to compare

Changelog

Performance Optimizations

  • Optimized OnUpdate Event - Update frequency reduced from every 250ms to once per second, significantly improving performance with multiple configurations using this event
  • Optimized nearbyItems and nearbyItemsNot Search - Major performance improvements when used with OnUpdate. Previously could cause frame drops and potential crashes with heavy formlists

New Features

  • Support for random values in interactions, limit, chance, count, scale, radius, and timer fields.
    • Now they accept either default values: "interactions": 2 and "timer": {"time": 2, "matchFilterRecheck": 1}
      or detailed entries: "interactions": {"min": 1, "max": 5} and "timer": {"time": {"min": 1, "max": 5}, "matchFilterRecheck": 1}
    • Reroll Behavior:
      • chance, count, scale, radius, timer - reroll each time rule is triggered/effect applied, depending on where you put the extended entry
      • interaction - reroll each time it accumulates
      • limit - reroll only once
  • Added interior check to weathers and weathersNot filters. Indoor locations now pass effects rather than filtering them out

New Filters

Target Object Filters

  • IsInterior - Checks if target object is in interior
    • 0 - no
    • 1 - yes
    • 2 - all/undefined
  • IsStacked - Checks if target is single reference or stacked bunch
    • 0 - no
    • 1 - yes
    • 2 - all/undefined
  • Position - Checks target object's position relative to player (useful for PlayIdle effect)
    • 0 - below player's middle
    • 1 - player's middle
    • 2 - above player's middle
    • 3 - all/undefined

Player Filters

  • IsFirstPerson - Checks if player is in first person
    • 0 - no
    • 1 - yes
    • 2 - all/undefined
  • IsThirdPerson - Checks if player is in third person (same format as above)

Removed Features

  • Physics Nudging from SpawnArtObjectOnItem - Removed due to incompatibility with unidentified mod causing game stuttering and micro-freezes. Previously gave small impulse to prevent art objects from freezing due to engine limits

Release v1.6.7

08 Aug 14:54
7cec3e6

Choose a tag to compare

Changelog

New Features

  • Non-Collidable Flora & Tree Impact Support - Support for impacts on non-collidable flora and trees. The system uses workarounds and mathematical calculations, which can cause plants location estimate not to be always accurate. Note: Spells with attached projectiles are currently not supported due to the hooks issues (credits to RavenKZP for assistance)

Bug Fixes

  • Fixed global filter chance calculating separately for each effect instead of once
  • Fixed locations and locationsNot filters ignoring worldspace forms. Note: Detection still won't work if the cell lacks linked worldspace information
  • Fixed Other WeaponType classification for projectiles - now correctly identified as Ranged (restored behavior from pre-1.5 versions)
  • Fixed ExecuteConsoleCommand- effects executing commands twice
  • Fixed crashes related to removing or disabling light sources
  • Fixed a potential crash with the Activate event that was present in previous versions
  • Fixed OnUpdate hook in which I previously overlooked an argument (hopefully it didn't break the game or any other mods)
  • Improved main formIDs obtaining function - now ignores case sensitivity and load order numbers

New Filters

  • Lock Level Filters - lockLevel and lockLevelNot
    • -2 (default) - all / unidentified
    • -1 - unlocked
    • 0 - novice
    • 1 - apprentice
    • 2 - adept
    • 3 - expert
    • 4 - master
    • 5 - requires key

New Effects

Magic Effects

  • ApplySpell - Functions like ApplyIngredient, but for scrolls and spell tomes. Casts spells within the radius specified in the items field

Utility Effects

  • ExecuteConsoleCommandOnSource - Similar to ExecuteConsoleCommandOnItem, but selects the source actor in the console instead of the target object

Removed Features

  • Grass Form Type Support - Removed due to framework limitations that make complete processing and effect support impossible

Release v1.6.6

14 Jul 00:34
2103772

Choose a tag to compare

Performance & Fixes

  • Un-fixed all keyword filters. Now they are back to accepting ones that have no actual forms, such as keywords added by KID

New Events

  • DestructionStageChange - triggers when destruction stage changes

New Filters

  • destructionStage - -1 (default) for all/undefined, stages indexes start from 0

Changed Filters

  • timer - now accepts the digit to be processed right away or the {"time": 1.0, "matchFilterRecheck": 0} structure, allowing the effect to be canceled if conditions were violated while waiting. 0 for no re-check, 1 for re-check (credits to Solus200 for the idea)

New Items Filters

  • New spawnType: 9, spawns an object to the specific node defined in string. The string field is now available for spawn- and swap- effects (specifically, for objects, actors, light, and explosions)
  • Now items field of any effects (except those that do not support the field) have a timer filter

New Effects

Visual Effects

  • SpawnArtObject - spawns art objects on nearby actors
  • SpawnArtObjectOnItem - spawns art objects on the target object. Applying an art object on a moving object does NOT cause the effect to freeze when the object stops moving, the framework avoids this

Utility Effects

  • ShowMessageBox - displays a message box
  • ShowNotification - shows a notification
  • ExecuteConsoleCommand - executes a console command on nearby actors
  • ExecuteConsoleCommandOnItem - executes a console command on the target object

New Supported Form Types

  • grass (credits to RavenKZP for the idea)

Release v1.6.4

02 Jul 21:46
6d28a67

Choose a tag to compare

Performance & Fixes

  • Fixed allowProjectiles filter, it was previously ignored due to a case error
  • Fixed scale field for spawn and swap effects. The function itself has also been changed, now the original SetScale() is used instead of the workaround console version, so it now covers all supported form types

New Features

  • Now every filter that takes form or editor ID ("filterName": ["Skyrim.esm:00123456", "VendorItemClutter"]) takes form or editor IDs of formlists as well, just like in weathers and locations

Removed Filters

  • Removed weaponsFormLists, weaponsFormListsNot, projectilesFormLists, projectilesFormListsNot as redundant

New Filters

Time-based

  • timer - waits the defined number of seconds before triggering the effect
  • time and timeNot - ["Hour >= 10", "DayOfWeek = 1"], possible entries - minute, hour, day, dayofweek, month, year, gametime

Proximity-based

  • nearbyObjects and nearbyObjectsNot - take any form type, including NPCs

Source Actors (credits to Solus200 for the ideas and testing)

  • actorKeywords and actorKeywordsNot
  • actorRaces and actorRacesNot
  • spells and spellsNot
  • isSneaking, isSwimming, isInCombat, IsMounted, isDualCasting, isSprinting, isWeaponDrawn - 0 for no, 1 for yes, 2 (default) for all/undefined

New Effects

  • AddActorSpell, RemoveActorSpell, AddActorPerk, RemoveActorPerk

1.6.3

24 Jun 21:51
a79deb7

Choose a tag to compare

Performance & Fixes

  • Disabling items is now handled through a workaround to prevent the kInitiallyDisabled flag from being set so the isInitiallyDisabled filter can be used correctly. WARNING: It is highly recommended first go through the locations and make sure that all the necessary items are respawned before updating (credits to Solus200 for assistance and testing)
  • Cleaned up code, removed an unused placeholder for attacksTypes that could potentially cause some spells to be filtered out

New Effects

  • ActivateItem - activates activators, picks up pickable items, automatically opens containers. Does not work with the "Activate" event to avoid collisions (credits to Solus200 for the idea)
  • AddContainerItem and AddActorItem - adds specified items to containers or sources' inventories
  • RemoveContainerItem and RemoveActorItem - removes specified items from containers or sources' inventories

Release v1.6.2

23 Jun 06:12
c4becb2

Choose a tag to compare

Performance & Fixes

  • Global performance optimization
  • Fixed Throw event not working when ReadyWeapon button was remapped or when using Xbox controller
  • Fixed multiple identifier selection bug - rules now use ALL logic instead of ANY when multiple identifiers are specified (formTypes, formLists, editorIDs, formIDs, keywords)
  • Fixed the behavior of isPluginInstalled and isDllInstalled and their inverses - now, if a plugin is missing, the log won't be spammed with reports about it, the rules won't be skipped
  • Fixed keywordsNot and weaponsKeywordsNot skipping objects that don't support keywords instead of passing (credits to Solus200 for pointing out and testing)
  • Fixed weapons and weaponsNot accepting nothing but weapons and spells, you can now specify explosions as well
  • Fixed shouts and projectiles registering. Note: all shouts don't work with statics. Those shouts that are pure projectiles (e.g., Unrelenting Force) will work only with furniture, flora, doors, containers, and activators (credits to Solus200 for assistance & testing and kuroishitam for pointing out & testing)

New Features

Explosions Support

  • Full support for explosions and chain reactions (credits to Solus200 for assistance & testing and kuroishitam for testing)
  • You can filter them using weaponTypes, weapons, and weaponsFormLists
  • Those explosions that have a radius or a damage of 0 are automatically filtered out

Editor ID Support

  • Full support for editorIDs (credits to Solus200 for testing)
  • For filters it is editorIDs, for the items of any effect it is editorID
  • Those filters that accepted forms in the format Mod.esp:00123456 now also accept EditorIDName

New Filters

  • formTypesNot - inverse form type filtering
  • isInitiallyDisabled - 0 for no, 1 for yes, 2 (default) for all/undefined. Note: when you re-enter a location, an item you freshly disabled may acquire this flag (credits to Solus200 for the idea and testing)
  • allowProjectiles - 0 for no, 1 (default) yes
  • projectilesFormLists and projectilesFormListsNot - projectile form list filtering
  • deliveryTypes and deliveryTypesNot - contain self, aimed, targetactor, targetlocation, touch, and total

Changed Filters

  • attacks - now you can optionally write it as attacksTypes. Removed projectiles entry, fixed continuous not working with concentrating spells. New possible entries: fireandforget, constant, ignoreweapon, overridedata
  • weaponsTypes - new possible entries: scroll, explosion

New Events

  • WeatherChange - applies an effect on weather change. Recommended to use with weathers and weathersNot filters to manage - works outside only

New Effects

  • UnlockItem and LockItem - works with objects like doors or containers
  • ToggleNode - toggles node "on" and "off". Accepts mode (0 for disable, 1 for enable) and nodeNames. Example: items: [{"mode": 0, "nodeNames": ["addon"]}] (credits to Solus200 for the idea and testing)

Changed Effects

  • SpawnImpact - renamed to SpawnImpactDataSet for clarity. Now the spawn position for an impact is calculated differently, the point is bound strictly to the position of the object in space. Now works on small movable objects without displacement

New Supported Form Types

  • light - e.g., torches, lanterns from Havoc and Non Havoc Lanterns by giamel (credits to Solus200 for testing)

Release v1.6.1

06 Jun 21:26
b692682

Choose a tag to compare

Performance & Stability

  • Removed the ObjectLoaded event and added a huge number of missing checks for event receivers and effects to prevent crashes
  • Once again changed memory management, which should remove lags and freezes

Bug Fixes

  • Added potential recursive links handle for locations filter
  • Those effects that use console-based functionality now correctly unselect previously selected references
  • Fixed the bug which caused Throw and Release events make effects double, when used in one rule
  • Fixed some weapons filters being ignored
  • Fixed perks and perksNot being ignored when used with something else than Hit event

Changed Effects

  • ApplyIngestible now has items field so you can set radius and chance there

New Filters

  • New value for QuestItemStatus: 3 for all objects allowed. The default value stays 0 for non-quest only
  • actorValues and actorValuesNot - ["Health >= 10", "Aggression = 0"]
  • level and levelNot - [">= 10", "= 20"]
  • hasItem and hasItemNot - ["Skyrim.esm:000123456"]

Changed Filters

  • New special index for formlists: -3, allows you to select one random object from the list. Available ONLY in the effects' items (credits to Solus200 for the idea)

New Items Filters

  • New scale field for items (spawn/swap functions only) - allows you to select the scale of the spawned item. By default, it is copied from the target object
  • New fade field for items (spawn/swap functions only) - determines whether the object will have a fade effect or not upon creation. 0 - without fade effect, 1 (default) - with fade effect (credits to Quantumyilmaz for the direction)
  • New spawnType field for items (spawn/swap functions only) - allows you to select the type of how the object should be spawned. A total of 8 options are available: (credits to Solus200 for the idea, assistance and testing)
    • 0 - normal PlaceAtMe
    • 1 - PlaceAtMe spawning the object at the middle of the original
    • 2 - PlaceAtMe spawning at the top of the original
    • 3 - PlaceAtMe spawning at the bottom of the original
    • 4 - (default) normal with buggy engine physics bypassing (when used with Throw/Grab/Release, the object will be spawned exactly to the landing point)
    • 5 - bypass with centering
    • 6 - bypass with spawning at the top
    • 7 - bypass with spawning at the bottom
    • 8 - pin to the ground regardless of the landing location

Release v1.6

01 Jun 03:00
2c3b1ff

Choose a tag to compare

Performance & Stability

  • Now you can copy formIDs form SSEEdit for ESL and ESPFE as well, the code will process FE prefix: "Mod.esp:FE000800"
  • Improved memory cleanup. Now there are different containers for interactions and limits. For interactions, half of old records are cleared, and for limits, all records with infinite limit are cleared - there is no more chance that an object will become interactable again after some time
  • In event receivers, all important pieces of code are now moved to separate tasks, preventing objects from being ignored when too many are processed at once
  • Completely redesigned the throw event receiver. Previously it memorized the object during its releasing and counted the time until the first hit, which could potentially mark a normal hit as a throw, now everything works through the properties of the object itself, its position in space, and the hold of the R button (Grab and Throw works with it) (credits to Solus200 for testing)

Bug Fixes

  • Fixed interactions working only for hits by reworking the serialization and keys structure. Now both interactions and limit are rule-dependent, event dependency is removed to make it work when several types are listed per event
  • Fixed SpawnImpact. Previously it didn't fire under any circumstances because of a wrong condition

New events

  • New events: ObjectLoaded, CellAttach, and CellDetach - can be used for items respawning

New filters:

  • Several inverses - FormIDsNot, FormListsNot, WeaponsNot, ProjectilesNot, AttacksNot.
  • Completely new ones - QuestItemStatus - 0 for no, 1 for alias only, 2 for full-fledged quest item, works only with ACTIVE player quests (can't be done differenty) (credits to Solus200 for the idea and testing)
  • Locations, LocationsNot - take formIDs of formlists of cells, locations, and worldspaces or just cells', locations', and worldspaces' ones
  • Weathers, WeathersNot - take formIDs of formlists of weathers or just weathers' ones
  • Perks, PerksNot - take perks' formIDs, check whether the actor, who was the event source, has the perk

New Items Filters

  • Added nonDeletable field with default value 0 to items in all functions with "swap" prefix - can be used for respawning
  • Added radius field to SpawnSpell, ApplyIngestible, ApplyOtherIngestible, and SpawnEffectShader (credits to Solus200 for testing)

New effects:

  • EnableItem, DisableItem - can be used for respawning.
  • PlayIdle - was implemented using the console version of SendAnimationEvent, so some idles may not work, looks like - "items": [{"string": "AnimationName", "duration": 0.5}], default duration is 1.0, the less - the faster is the animation.
  • SpawnEffectShader, SpawnEffectsShaderOnItem - spawn effect shaders either on actors, or the object itself, take formIDs or formLists and duration fields, as well as the base ones, such as count or chance