Skip to content

Adding more details to hooks and events to match modLoader changes#26

Open
DasKeifer wants to merge 2 commits into
masterfrom
event_stacktrace
Open

Adding more details to hooks and events to match modLoader changes#26
DasKeifer wants to merge 2 commits into
masterfrom
event_stacktrace

Conversation

@DasKeifer

@DasKeifer DasKeifer commented Feb 3, 2026

Copy link
Copy Markdown
Member

As the title says, this enhances the modApiExt hooks and events to provide the same level of details as the modLoader hooks/events. This relies on the ModLoader PR: itb-community/ITB-ModLoader#230

Below is an example of an intentionally injected hook and event failure. Before this it was a one line error on the specific line. This should allow for easier debugging of hooks especially that are failing in lower level, generic code

[2026-02-02 22:01:45] [./scripts/mod_loader/bootstrap/event.lua:282]: An event callback failed: ...tedRiceExts/exts/CPLUS+_Ex/scripts/time_traveler.lua:19: attempt to index global 'varToFailOn' (a nil value)
- Event\Hook: onPodLanded
- Call trace: 
    stack traceback:
        ...tedRiceExts/exts/CPLUS+_Ex/scripts/time_traveler.lua:19: in function 'testFnEventFailure3'
        ...tedRiceExts/exts/CPLUS+_Ex/scripts/time_traveler.lua:23: in function 'testFnEventFailure2'
        ...tedRiceExts/exts/CPLUS+_Ex/scripts/time_traveler.lua:27: in function 'testFnEventFailure1'
        ...tedRiceExts/exts/CPLUS+_Ex/scripts/time_traveler.lua:60: in function <...tedRiceExts/exts/CPLUS+_Ex/scripts/time_traveler.lua:59>
        (tail call): ?
- Subscribed at: 
    stack traceback:
        ./scripts/mod_loader/bootstrap/event.lua:140: in function 'subscribe'
        ...tedRiceExts/exts/CPLUS+_Ex/scripts/time_traveler.lua:59: in function 'init'
        ...ns/RedactedRiceExts/exts/CPLUS+_Ex/cplus_plus_ex.lua:77: in function 'initModules'
        ...ns/RedactedRiceExts/exts/CPLUS+_Ex/cplus_plus_ex.lua:135: in function 'init'
        ...ons/RedactedRiceExts/exts/CPLUS+_Ex/scripts/init.lua:25: in function 'init'
        ./scripts/mod_loader/mod_loader.lua:464: in function <./scripts/mod_loader/mod_loader.lua:462>
        [C]: in function 'xpcall'
        ./scripts/mod_loader/mod_loader.lua:461: in function 'initMod'
        ./scripts/mod_loader/mod_loader.lua:157: in function 'init'
        ./scripts/mod_loader/mod_loader.lua:781: in main chunk
        [C]: in function 'require'
        ./scripts/mod_loader/__scripts.lua:42: in main chunk
        [C]: in function 'require'
        scripts/modloader.lua:1: in main chunk
- Dispatched at: 
    stack traceback:
        ./scripts/mod_loader/bootstrap/event.lua:294: in function 'dispatch'
        ...oaderExtensions/mods/modApiExt/scripts/modApiExt.lua:143: in function 'fn'
        ...LoaderExtensions/mods/modApiExt/scripts/internal.lua:48: in function <...LoaderExtensions/mods/modApiExt/scripts/internal.lua:48>
        [C]: in function 'xpcall'
        ...LoaderExtensions/mods/modApiExt/scripts/internal.lua:46: in function 'firePodLandedHooks'
        ...modLoaderExtensions/mods/modApiExt/scripts/alter.lua:356: in function 'findAndTrackPods'
        ...modLoaderExtensions/mods/modApiExt/scripts/alter.lua:327: in function 'updateTiles'
        ...modLoaderExtensions/mods/modApiExt/scripts/alter.lua:748: in function 'fn'
        ./scripts/mod_loader/bootstrap/modApi.lua:186: in function <./scripts/mod_loader/bootstrap/modApi.lua:184>
        (tail call): ?
        [C]: in function 'xpcall'
        ./scripts/mod_loader/bootstrap/event.lua:56: in function 'notify'
        ./scripts/mod_loader/bootstrap/event.lua:297: in function 'dispatch'
        ./scripts/mod_loader/bootstrap/modApi.lua:181: in function 'fireMissionUpdateHooks'
        ./scripts/mod_loader/altered/missions.lua:72: in function <./scripts/mod_loader/altered/missions.lua:61>
        (tail call): ?
[2026-02-02 22:01:45] [...LoaderExtensions/mods/modApiExt/scripts/internal.lua:10]: An event callback failed: ...tedRiceExts/exts/CPLUS+_Ex/scripts/time_traveler.lua:31: attempt to index global 'varToFailOn' (a nil value)
- Event\Hook: firePodLandedHooks
- Call trace: 
    stack traceback:
        ...tedRiceExts/exts/CPLUS+_Ex/scripts/time_traveler.lua:31: in function 'testFnHookFailure3'
        ...tedRiceExts/exts/CPLUS+_Ex/scripts/time_traveler.lua:35: in function 'testFnHookFailure2'
        ...tedRiceExts/exts/CPLUS+_Ex/scripts/time_traveler.lua:39: in function 'testFnHookFailure1'
        ...tedRiceExts/exts/CPLUS+_Ex/scripts/time_traveler.lua:82: in function 'fn'
        ...LoaderExtensions/mods/modApiExt/scripts/internal.lua:48: in function <...LoaderExtensions/mods/modApiExt/scripts/internal.lua:48>
- Subscribed at: 
    stack traceback:
        ...ns/RedactedRiceExts/exts/CPLUS+_Ex/cplus_plus_ex.lua:148: in function 'load'
        ...ons/RedactedRiceExts/exts/CPLUS+_Ex/scripts/init.lua:29: in function 'load'
        ./scripts/mod_loader/mod_loader.lua:721: in function <./scripts/mod_loader/mod_loader.lua:720>
        [C]: in function 'xpcall'
        ./scripts/mod_loader/mod_loader.lua:719: in function 'loadModContent'
        ./scripts/mod_loader/altered/misc.lua:170: in function <./scripts/mod_loader/altered/misc.lua:166>
- Dispatched at: 
    stack traceback:
        ...LoaderExtensions/mods/modApiExt/scripts/internal.lua:32: in function 'firePodLandedHooks'
        ...modLoaderExtensions/mods/modApiExt/scripts/alter.lua:356: in function 'findAndTrackPods'
        ...modLoaderExtensions/mods/modApiExt/scripts/alter.lua:327: in function 'updateTiles'
        ...modLoaderExtensions/mods/modApiExt/scripts/alter.lua:748: in function 'fn'
        ./scripts/mod_loader/bootstrap/modApi.lua:186: in function <./scripts/mod_loader/bootstrap/modApi.lua:184>
        (tail call): ?
        [C]: in function 'xpcall'
        ./scripts/mod_loader/bootstrap/event.lua:56: in function 'notify'
        ./scripts/mod_loader/bootstrap/event.lua:297: in function 'dispatch'
        ./scripts/mod_loader/bootstrap/modApi.lua:181: in function 'fireMissionUpdateHooks'
        ./scripts/mod_loader/altered/missions.lua:72: in function <./scripts/mod_loader/altered/missions.lua:61>
        (tail call): ?

To test, add code that will intentionally fail and trigger the hooks. In this case, I added podLanded hooks with a few layers of fns just to show the stack trace is working correctly.

You can test backwards compatibility by installing an older mod with a dedicated ModUtils. I used KartoFlane's mission pack https://subsetgames.com/forum/viewtopic.php?f=25&t=33497. If you can boot up into the main menu without a hook error, its working with backwards compatibility. Otherwise you will see an error in the logs on the MostRecentResolved hook in ModApiExt.

local function testFnEventFailure3()
	varToFailOn.nilObj = 5
end

local function testFnEventFailure2()
	testFnEventFailure3()
end

local function testFnEventFailure1()
	testFnEventFailure2()
end

local function testFnHookFailure3()
	varToFailOn.nilObj = 5
end

local function testFnHookFailure2()
	testFnHookFailure3()
end

local function testFnHookFailure1()
	testFnHookFailure2()
end

mod:init()
	modapiext.events.onPodLanded:subscribe(function()
		testFnEventFailure1()
	end)
end
mod:load()
	modapiext:addPodLandedHook(function()
		testFnHookFailure1()
	end)
end

Then enter a mission and trigger a pod landing via console with the pod command

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant