Skip to content

Custom Extender Build

A custom, experimental build of the extender is available for Epip which enables various features that would otherwise not be possible. This extender fork is entirely optional to use; features that require it will simply not be available if it is not used.

You can download the build here and the repository for it is here. You'll need to put libprotobuf-lite.dll in the same directory as well; you can alternatively get it from an existing Extender installation in \AppData\Local\DOS2ScriptExtender\ScriptExtender.

The current version of the fork is v2, from 2/08/2024.

Warning

The custom build is experimental - use it only at your own risk.

In multiplayer, all players should use the same extender build (either Norbyte's or this custom one). Switching between them is safe.

Exclusive Features and Changes

Epip features that require the fork:

  • Dialogue auto-listening: makes you automatically listen to dialogues that other players start nearby.
    • Requires UIObjectManagerPlayerState's ActiveUIObjectHandle and UIUnderMouseCursor to be writeable. More information available in #epipeline
  • Graying out unavailable skills on the hotbar works properly for mods that hook the GetSkillAPCost event
    • Without the fork, support for this can be added by replicating the hook's logic for Character.Hooks.GetSkillAPCost
  • Showing outlines for containers and corpses while searching with Quick Loot
  • Vanity weapon animation swaps
  • Accurately determining if items can be sent to the Lady Vengeance chest (or equivalent) when using the multi-select context menus

Features for modders:

  • Added Ext.IO.Enumerate(), Ext.IO.IsFile() and Ext.IO.IsDirectory(), and fixed file saving not working if it would require creating more than one directory along the way. More info on the PR.
  • Ext.IsPipFork (field, not a function) is true if the fork is installed, which may be used to condition logic
  • Relaxed RO restrictions on UIObjectManager fields
  • Attempting to call an unregistered console command now shows a warning; this is useful to realize faster that you've made a typo, are calling the command from the wrong context, didn't register it properly, or ran into any other shenanigans
  • The console now says "Entering lua client console" when entering the client context (previously it would erroneously still say "server")
  • Documentation of OsirisExtenderSettings.json is more up-to-date
  • Removed the unnecessary "Synching user vars to unknown game object" message, as valid scenarios of this exist (ex. if the object is on another level)
  • Added Ext.Stats.Math.GetSkillAPCost(), which respects any Lua hooks
  • Added Ext.Entity.SetHighlight(), which allows you to add outlines to characters and items (like the ones when you hover over them or use tactical highlights)
    • Note that although passing unused player IDs appears to work to create outlines that cannot be overwritten, this is unintended and can crash the game after some time
  • Added Ext.Events.GetCharacterWeaponAnimationSetType, which lets you swap the weapon animations for characters
  • Added Ext.Client.GetGameControl(), though this structure's mapping currently only contains the CanSendToLadyVengeance bool
  • Fixed Ext.Behavior.Skill.AddById() crashing the game when the skill is used

FAQ

Why is the dll so much bigger?

The regular extender dll is the updater, which downloads the actual extender to \AppData\Local\DOS2ScriptExtender\ScriptExtender and loads it. The fork ships the extender directly (no automatic updates), and if you compare it against the regular builds in the AppData folder, the sizes are roughly equal.