#pragma once #include "HeroMenuPatch.h" class TweenMenuPatch final : public RE::TweenMenu { public: static void Install(); private: static void OpenMenu(RE::IMenu* tweenMenu, std::int32_t index) { using func_t = decltype(&OpenMenu); // Checked: 1.5.97, 1.6.640, 1.6.659, 1.6.1130, 1.6.1170, 1.6.1179 REL::Relocation func{ REL::VariantID(51845, 52718, 0x8FE7E0) }; return func(tweenMenu, index); } void AcceptEx(CallbackProcessor* a_cbReg) { _AcceptFn(this, a_cbReg); fxDelegate->callbacks.Remove("OpenHighlightedMenu"); a_cbReg->Process("OpenHighlightedMenu", [](const RE::FxDelegateArgs& args) { auto index = args[0].GetSInt(); if (index <= 1) { HeroMenuPatch::OpenHeroMenu(); } else if (index <= 4) { OpenMenu(RE::UI::GetSingleton()->GetMenu(MENU_NAME).get(), index); } }); } inline static REL::Relocation _AcceptFn; };