From c82d032a233872bd06e8f58d056e412c79981abb Mon Sep 17 00:00:00 2001 From: Azrub Date: Wed, 16 Jul 2025 10:16:24 +0200 Subject: [PATCH] Release v1.2.0.0 - QuickAccess Integration: Added clickable icon in Nexus toolbar for easy UI access - Updated project settings: Disabled precompiled headers for ImGui source files --- .gitignore | 47 +- .../nexus}/Nexus.h | 1590 ++++++++--------- GolemHelper/GolemHelper.vcxproj | 9 +- GolemHelper/GolemHelper.vcxproj.filters | 12 +- GolemHelper/dllmain.cpp | 24 +- 5 files changed, 865 insertions(+), 817 deletions(-) rename GolemHelper/{Definitions => Dependencies/nexus}/Nexus.h (97%) diff --git a/.gitignore b/.gitignore index d4fb281..a5eec74 100644 --- a/.gitignore +++ b/.gitignore @@ -1,41 +1,70 @@ # Prerequisites *.d - # Compiled Object files *.slo *.lo *.o *.obj - # Precompiled Headers *.gch *.pch - # Linker files *.ilk - # Debugger Files *.pdb - # Compiled Dynamic libraries *.so *.dylib *.dll - # Fortran module files *.mod *.smod - # Compiled Static libraries *.lai *.la *.a *.lib - # Executables *.exe *.out *.app - # debug information files *.dwo + +# Visual Studio specific files +.vs/ +*.suo +*.user +*.userosscache +*.sln.docstates +*.vsidx +*.vspscc +*.vssscc +.builds/ +*.pidb +*.svclog +*.scc + +# Build folders +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +build/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# MSBuild +*.log +*.wrn +*.err +*.unsuccessfulbuild +*.lastbuildstate +*.command.* +*.read.* +*.write.* +link-* \ No newline at end of file diff --git a/GolemHelper/Definitions/Nexus.h b/GolemHelper/Dependencies/nexus/Nexus.h similarity index 97% rename from GolemHelper/Definitions/Nexus.h rename to GolemHelper/Dependencies/nexus/Nexus.h index e3a27bf..3f88a19 100644 --- a/GolemHelper/Definitions/Nexus.h +++ b/GolemHelper/Dependencies/nexus/Nexus.h @@ -1,795 +1,795 @@ -#ifndef NEXUS_H -#define NEXUS_H - -#include - -#ifndef __cplusplus -#include -#endif - -#define NEXUS_API_VERSION 6 - -typedef enum ERenderType -{ - ERenderType_PreRender, - ERenderType_Render, - ERenderType_PostRender, - ERenderType_OptionsRender -} ERenderType; - -///---------------------------------------------------------------------------------------------------- -/// GUI_RENDER: -/// Render callback signature. -///---------------------------------------------------------------------------------------------------- -typedef void (*GUI_RENDER) (void); -typedef void (*GUI_ADDRENDER) (ERenderType aRenderType, GUI_RENDER aRenderCallback); -typedef void (*GUI_REMRENDER) (GUI_RENDER aRenderCallback); -typedef void (*GUI_REGISTERCLOSEONESCAPE)(const char* aWindowName, bool* aIsVisible); -typedef void (*GUI_DEREGISTERCLOSEONESCAPE)(const char* aWindowName); - -typedef void (*UPDATER_REQUESTUPDATE)(signed int aSignature, const char* aUpdateURL); - -typedef const char* (*PATHS_GETGAMEDIR)(void); -typedef const char* (*PATHS_GETADDONDIR)(const char* aName); -typedef const char* (*PATHS_GETCOMMONDIR)(void); - -typedef enum EMHStatus -{ - MH_UNKNOWN = -1, - MH_OK = 0, - MH_ERROR_ALREADY_INITIALIZED, - MH_ERROR_NOT_INITIALIZED, - MH_ERROR_ALREADY_CREATED, - MH_ERROR_NOT_CREATED, - MH_ERROR_ENABLED, - MH_ERROR_DISABLED, - MH_ERROR_NOT_EXECUTABLE, - MH_ERROR_UNSUPPORTED_FUNCTION, - MH_ERROR_MEMORY_ALLOC, - MH_ERROR_MEMORY_PROTECT, - MH_ERROR_MODULE_NOT_FOUND, - MH_ERROR_FUNCTION_NOT_FOUND -} EMHStatus; - -typedef EMHStatus(__stdcall* MINHOOK_CREATE)(LPVOID pTarget, LPVOID pDetour, LPVOID* ppOriginal); -typedef EMHStatus(__stdcall* MINHOOK_REMOVE)(LPVOID pTarget); -typedef EMHStatus(__stdcall* MINHOOK_ENABLE)(LPVOID pTarget); -typedef EMHStatus(__stdcall* MINHOOK_DISABLE)(LPVOID pTarget); - -typedef enum ELogLevel -{ - ELogLevel_OFF = 0, - ELogLevel_CRITICAL = 1, - ELogLevel_WARNING = 2, - ELogLevel_INFO = 3, - ELogLevel_DEBUG = 4, - ELogLevel_TRACE = 5, - ELogLevel_ALL -} ELogLevel; - -typedef void (*LOGGER_LOG2)(ELogLevel aLogLevel, const char* aChannel, const char* aStr); - -typedef void (*ALERTS_NOTIFY)(const char* aMessage); - -///---------------------------------------------------------------------------------------------------- -/// EVENT_CONSUME: -/// Event consume callback signature. -/// aEventArgs is payload and should be known to consumer. -///---------------------------------------------------------------------------------------------------- -typedef void (*EVENT_CONSUME)(void* aEventArgs); -typedef void (*EVENTS_RAISE)(const char* aIdentifier, void* aEventData); -typedef void (*EVENTS_RAISENOTIFICATION)(const char* aIdentifier); -typedef void (*EVENTS_RAISE_TARGETED)(signed int aSignature, const char* aIdentifier, void* aEventData); -typedef void (*EVENTS_RAISENOTIFICATION_TARGETED)(signed int aSignature, const char* aIdentifier); -typedef void (*EVENTS_SUBSCRIBE)(const char* aIdentifier, EVENT_CONSUME aConsumeEventCallback); - -///---------------------------------------------------------------------------------------------------- -/// WNDPROC_CALLBACK: -/// Slightly different WndProc signature. -/// Return 0 if your addon handled it and you don't want it to be passed to the game. -///---------------------------------------------------------------------------------------------------- -typedef UINT(*WNDPROC_CALLBACK)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); -typedef void (*WNDPROC_ADDREM)(WNDPROC_CALLBACK aWndProcCallback); -typedef LRESULT(*WNDPROC_SENDTOGAME)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); - -typedef struct Keybind -{ - unsigned short Key; - bool Alt; - bool Ctrl; - bool Shift; -} Keybind; - -///---------------------------------------------------------------------------------------------------- -/// KEYBINDS_PROCESS: -/// KeybindHandler callback signature. -/// aIsRelease will be true if the keybind is released. -///---------------------------------------------------------------------------------------------------- -typedef void (*KEYBINDS_PROCESS)(const char* aIdentifier, bool aIsRelease); -typedef void (*KEYBINDS_INVOKE)(const char* aIdentifier, bool aIsRelease); -typedef void (*KEYBINDS_REGISTERWITHSTRING)(const char* aIdentifier, KEYBINDS_PROCESS aKeybindHandler, const char* aKeybind); -typedef void (*KEYBINDS_REGISTERWITHSTRUCT)(const char* aIdentifier, KEYBINDS_PROCESS aKeybindHandler, Keybind aKeybind); -typedef void (*KEYBINDS_DEREGISTER)(const char* aIdentifier); - -typedef enum EGameBinds -{ - // Movement - EGameBinds_MoveForward = 0, - EGameBinds_MoveBackward = 1, - EGameBinds_MoveLeft = 2, - EGameBinds_MoveRight = 3, - EGameBinds_MoveTurnLeft = 4, - EGameBinds_MoveTurnRight = 5, - EGameBinds_MoveDodge = 6, - EGameBinds_MoveAutoRun = 7, - EGameBinds_MoveWalk = 8, - EGameBinds_MoveJump = 9, - EGameBinds_MoveSwimUp = 10, - EGameBinds_MoveSwimDown = 11, - EGameBinds_MoveAboutFace = 12, - - // Skills - EGameBinds_SkillWeaponSwap = 17, - EGameBinds_SkillWeapon1 = 18, - EGameBinds_SkillWeapon2 = 19, - EGameBinds_SkillWeapon3 = 20, - EGameBinds_SkillWeapon4 = 21, - EGameBinds_SkillWeapon5 = 22, - EGameBinds_SkillHeal = 23, - EGameBinds_SkillUtility1 = 24, - EGameBinds_SkillUtility2 = 25, - EGameBinds_SkillUtility3 = 26, - EGameBinds_SkillElite = 27, - EGameBinds_SkillProfession1 = 28, - EGameBinds_SkillProfession2 = 29, - EGameBinds_SkillProfession3 = 30, - EGameBinds_SkillProfession4 = 31, - EGameBinds_SkillProfession5 = 79, - EGameBinds_SkillProfession6 = 201, - EGameBinds_SkillProfession7 = 202, - EGameBinds_SkillSpecialAction = 82, - - // Targeting - EGameBinds_TargetAlert = 131, - EGameBinds_TargetCall = 32, - EGameBinds_TargetTake = 33, - EGameBinds_TargetCallLocal = 199, - EGameBinds_TargetTakeLocal = 200, - EGameBinds_TargetEnemyNearest = 34, - EGameBinds_TargetEnemyNext = 35, - EGameBinds_TargetEnemyPrev = 36, - EGameBinds_TargetAllyNearest = 37, - EGameBinds_TargetAllyNext = 38, - EGameBinds_TargetAllyPrev = 39, - EGameBinds_TargetLock = 40, - EGameBinds_TargetSnapGroundTarget = 80, - EGameBinds_TargetSnapGroundTargetToggle = 115, - EGameBinds_TargetAutoTargetingDisable = 116, - EGameBinds_TargetAutoTargetingToggle = 117, - EGameBinds_TargetAllyTargetingMode = 197, - EGameBinds_TargetAllyTargetingModeToggle = 198, - - // UI Binds - EGameBinds_UiCommerce = 41, // TradingPost - EGameBinds_UiContacts = 42, - EGameBinds_UiGuild = 43, - EGameBinds_UiHero = 44, - EGameBinds_UiInventory = 45, - EGameBinds_UiKennel = 46, // Pets - EGameBinds_UiLogout = 47, - EGameBinds_UiMail = 71, - EGameBinds_UiOptions = 48, - EGameBinds_UiParty = 49, - EGameBinds_UiPvp = 73, - EGameBinds_UiPvpBuild = 75, - EGameBinds_UiScoreboard = 50, - EGameBinds_UiSeasonalObjectivesShop = 209, // Wizard's Vault - EGameBinds_UiInformation = 51, - EGameBinds_UiChatToggle = 70, - EGameBinds_UiChatCommand = 52, - EGameBinds_UiChatFocus = 53, - EGameBinds_UiChatReply = 54, - EGameBinds_UiToggle = 55, - EGameBinds_UiSquadBroadcastChatToggle = 85, - EGameBinds_UiSquadBroadcastChatCommand = 83, - EGameBinds_UiSquadBroadcastChatFocus = 84, - - // Camera - EGameBinds_CameraFree = 13, - EGameBinds_CameraZoomIn = 14, - EGameBinds_CameraZoomOut = 15, - EGameBinds_CameraReverse = 16, - EGameBinds_CameraActionMode = 78, - EGameBinds_CameraActionModeDisable = 114, - - // Screenshots - EGameBinds_ScreenshotNormal = 56, - EGameBinds_ScreenshotStereoscopic = 57, - - // Map - EGameBinds_MapToggle = 59, - EGameBinds_MapFocusPlayer = 60, - EGameBinds_MapFloorDown = 61, - EGameBinds_MapFloorUp = 62, - EGameBinds_MapZoomIn = 63, - EGameBinds_MapZoomOut = 64, - - // Mounts - EGameBinds_SpumoniToggle = 152, - EGameBinds_SpumoniMovement = 130, - EGameBinds_SpumoniSecondaryMovement = 153, - EGameBinds_SpumoniMAM01 = 155, // Raptor - EGameBinds_SpumoniMAM02 = 156, // Springer - EGameBinds_SpumoniMAM03 = 157, // Skimmer - EGameBinds_SpumoniMAM04 = 158, // Jackal - EGameBinds_SpumoniMAM05 = 159, // Griffon - EGameBinds_SpumoniMAM06 = 161, // RollerBeetle - EGameBinds_SpumoniMAM07 = 169, // Warclaw - EGameBinds_SpumoniMAM08 = 170, // Skyscale - EGameBinds_SpumoniMAM09 = 203, // SiegeTurtle - - // Spectator Binds - EGameBinds_SpectatorNearestFixed = 102, - EGameBinds_SpectatorNearestPlayer = 103, - EGameBinds_SpectatorPlayerRed1 = 104, - EGameBinds_SpectatorPlayerRed2 = 105, - EGameBinds_SpectatorPlayerRed3 = 106, - EGameBinds_SpectatorPlayerRed4 = 107, - EGameBinds_SpectatorPlayerRed5 = 108, - EGameBinds_SpectatorPlayerBlue1 = 109, - EGameBinds_SpectatorPlayerBlue2 = 110, - EGameBinds_SpectatorPlayerBlue3 = 111, - EGameBinds_SpectatorPlayerBlue4 = 112, - EGameBinds_SpectatorPlayerBlue5 = 113, - EGameBinds_SpectatorFreeCamera = 120, - EGameBinds_SpectatorFreeCameraMode = 127, - EGameBinds_SpectatorFreeMoveForward = 121, - EGameBinds_SpectatorFreeMoveBackward = 122, - EGameBinds_SpectatorFreeMoveLeft = 123, - EGameBinds_SpectatorFreeMoveRight = 124, - EGameBinds_SpectatorFreeMoveUp = 125, - EGameBinds_SpectatorFreeMoveDown = 126, - - // Squad Markers - EGameBinds_SquadMarkerPlaceWorld1 = 86, // Arrow - EGameBinds_SquadMarkerPlaceWorld2 = 87, // Circle - EGameBinds_SquadMarkerPlaceWorld3 = 88, // Heart - EGameBinds_SquadMarkerPlaceWorld4 = 89, // Square - EGameBinds_SquadMarkerPlaceWorld5 = 90, // Star - EGameBinds_SquadMarkerPlaceWorld6 = 91, // Swirl - EGameBinds_SquadMarkerPlaceWorld7 = 92, // Triangle - EGameBinds_SquadMarkerPlaceWorld8 = 93, // Cross - EGameBinds_SquadMarkerClearAllWorld = 119, - EGameBinds_SquadMarkerSetAgent1 = 94, // Arrow - EGameBinds_SquadMarkerSetAgent2 = 95, // Circle - EGameBinds_SquadMarkerSetAgent3 = 96, // Heart - EGameBinds_SquadMarkerSetAgent4 = 97, // Square - EGameBinds_SquadMarkerSetAgent5 = 98, // Star - EGameBinds_SquadMarkerSetAgent6 = 99, // Swirl - EGameBinds_SquadMarkerSetAgent7 = 100, // Triangle - EGameBinds_SquadMarkerSetAgent8 = 101, // Cross - EGameBinds_SquadMarkerClearAllAgent = 118, - - // Mastery Skills - EGameBinds_MasteryAccess = 196, - EGameBinds_MasteryAccess01 = 204, // Fishing - EGameBinds_MasteryAccess02 = 205, // Skiff - EGameBinds_MasteryAccess03 = 206, // Jade Bot Waypoint - EGameBinds_MasteryAccess04 = 207, // Rift Scan - EGameBinds_MasteryAccess05 = 208, // Skyscale - EGameBinds_MasteryAccess06 = 211, // Homestead Doorway - - // Miscellaneous Binds - EGameBinds_MiscAoELoot = 74, - EGameBinds_MiscInteract = 65, - EGameBinds_MiscShowEnemies = 66, - EGameBinds_MiscShowAllies = 67, - EGameBinds_MiscCombatStance = 68, // Stow/Draw - EGameBinds_MiscToggleLanguage = 69, - EGameBinds_MiscTogglePetCombat = 76, - EGameBinds_MiscToggleFullScreen = 160, - EGameBinds_MiscToggleDecorationMode = 210, // DecorateMode - - // Toys/Novelties - EGameBinds_ToyUseDefault = 162, - EGameBinds_ToyUseSlot1 = 163, // Chair - EGameBinds_ToyUseSlot2 = 164, // Instrument - EGameBinds_ToyUseSlot3 = 165, // Held Item - EGameBinds_ToyUseSlot4 = 166, // Toy - EGameBinds_ToyUseSlot5 = 167, // Tonic - //ToyUseSlot6 unused - - // Build Templates - EGameBinds_Loadout1 = 171, - EGameBinds_Loadout2 = 172, - EGameBinds_Loadout3 = 173, - EGameBinds_Loadout4 = 174, - EGameBinds_Loadout5 = 175, - EGameBinds_Loadout6 = 176, - EGameBinds_Loadout7 = 177, - EGameBinds_Loadout8 = 178, - - // Equipment Templates - EGameBinds_GearLoadout1 = 182, - EGameBinds_GearLoadout2 = 183, - EGameBinds_GearLoadout3 = 184, - EGameBinds_GearLoadout4 = 185, - EGameBinds_GearLoadout5 = 186, - EGameBinds_GearLoadout6 = 187, - EGameBinds_GearLoadout7 = 188, - EGameBinds_GearLoadout8 = 189 -} EGameBinds; - -typedef void (*GAMEBINDS_PRESSASYNC)(EGameBinds aGameBind); -typedef void (*GAMEBINDS_RELEASEASYNC)(EGameBinds aGameBind); -typedef void (*GAMEBINDS_INVOKEASYNC)(EGameBinds aGameBind, int aDuration); -typedef void (*GAMEBINDS_PRESS)(EGameBinds aGameBind); -typedef void (*GAMEBINDS_RELEASE)(EGameBinds aGameBind); -typedef bool (*GAMEBINDS_ISBOUND)(EGameBinds aGameBind); - -typedef void* (*DATALINK_GETRESOURCE)(const char* aIdentifier); -typedef void* (*DATALINK_SHARERESOURCE)(const char* aIdentifier, size_t aResourceSize); - -typedef struct Texture -{ - unsigned Width; - unsigned Height; - void* Resource; // ID3D11ShaderResourceView* -} Texture; - -///---------------------------------------------------------------------------------------------------- -/// TEXTURES_RECEIVECALLBACK: -/// TextureReceiver callback signature. -///---------------------------------------------------------------------------------------------------- -typedef void (*TEXTURES_RECEIVECALLBACK)(const char* aIdentifier, Texture* aTexture); -typedef Texture* (*TEXTURES_GET)(const char* aIdentifier); -typedef Texture* (*TEXTURES_GETORCREATEFROMFILE)(const char* aIdentifier, const char* aFilename); -typedef Texture* (*TEXTURES_GETORCREATEFROMRESOURCE)(const char* aIdentifier, unsigned aResourceID, HMODULE aModule); -typedef Texture* (*TEXTURES_GETORCREATEFROMURL)(const char* aIdentifier, const char* aRemote, const char* aEndpoint); -typedef Texture* (*TEXTURES_GETORCREATEFROMMEMORY)(const char* aIdentifier, void* aData, size_t aSize); -typedef void (*TEXTURES_LOADFROMFILE)(const char* aIdentifier, const char* aFilename, TEXTURES_RECEIVECALLBACK aCallback); -typedef void (*TEXTURES_LOADFROMRESOURCE)(const char* aIdentifier, unsigned aResourceID, HMODULE aModule, TEXTURES_RECEIVECALLBACK aCallback); -typedef void (*TEXTURES_LOADFROMURL)(const char* aIdentifier, const char* aRemote, const char* aEndpoint, TEXTURES_RECEIVECALLBACK aCallback); -typedef void (*TEXTURES_LOADFROMMEMORY)(const char* aIdentifier, void* aData, size_t aSize, TEXTURES_RECEIVECALLBACK aCallback); - -typedef void (*QUICKACCESS_ADDSHORTCUT) (const char* aIdentifier, const char* aTextureIdentifier, const char* aTextureHoverIdentifier, const char* aKeybindIdentifier, const char* aTooltipText); -typedef void (*QUICKACCESS_ADDSIMPLE) (const char* aIdentifier, GUI_RENDER aShortcutRenderCallback); -typedef void (*QUICKACCESS_ADDSIMPLE2) (const char* aIdentifier, const char* aTargetShortcutIdentifier, GUI_RENDER aShortcutRenderCallback); -typedef void (*QUICKACCESS_GENERIC) (const char* aIdentifier); - -typedef const char* (*LOCALIZATION_TRANSLATE)(const char* aIdentifier); -typedef const char* (*LOCALIZATION_TRANSLATETO)(const char* aIdentifier, const char* aLanguageIdentifier); -typedef void (*LOCALIZATION_SET)(const char* aIdentifier, const char* aLanguageIdentifier, const char* aString); - -///---------------------------------------------------------------------------------------------------- -/// FONTS_RECEIVECALLBACK: -/// FontReceiver callback signature. -/// aFont = ImFont* -///---------------------------------------------------------------------------------------------------- -typedef void (*FONTS_RECEIVECALLBACK)(const char* aIdentifier, void* aFont); -///---------------------------------------------------------------------------------------------------- -/// FONTS_GETRELEASE: -/// Signature to get and release fonts. -///---------------------------------------------------------------------------------------------------- -typedef void (*FONTS_GETRELEASE)(const char* aIdentifier, FONTS_RECEIVECALLBACK aCallback); -typedef void (*FONTS_ADDFROMFILE)(const char* aIdentifier, float aFontSize, const char* aFilename, FONTS_RECEIVECALLBACK aCallback, void* aConfig); -typedef void (*FONTS_ADDFROMRESOURCE)(const char* aIdentifier, float aFontSize, unsigned aResourceID, HMODULE aModule, FONTS_RECEIVECALLBACK aCallback, void* aConfig); -typedef void (*FONTS_ADDFROMMEMORY)(const char* aIdentifier, float aFontSize, void* aData, size_t aSize, FONTS_RECEIVECALLBACK aCallback, void* aConfig); -typedef void (*FONTS_RESIZE)(const char* aIdentifier, float aFontSize); - -typedef struct NexusLinkData -{ - unsigned Width; - unsigned Height; - float Scaling; - - bool IsMoving; - bool IsCameraMoving; - bool IsGameplay; - - void* Font; // ImFont* - void* FontBig; // ImFont* - void* FontUI; // ImFont* -} NexusLinkData; - -typedef struct AddonAPI -{ - /* Renderer */ - void* SwapChain; - void* ImguiContext; - void* ImguiMalloc; - void* ImguiFree; - - struct RendererVT - { - ///---------------------------------------------------------------------------------------------------- - /// Register: - /// Registers a render callback, ERenderType is either Pre, Present, Post or Options, - /// callback should be of void func(). - ///---------------------------------------------------------------------------------------------------- - GUI_ADDRENDER Register; - ///---------------------------------------------------------------------------------------------------- - /// Deregister: - /// Removes the registered render callback that is passed. - ///---------------------------------------------------------------------------------------------------- - GUI_REMRENDER Deregister; - }; - RendererVT Renderer; - - ///---------------------------------------------------------------------------------------------------- - /// RequestUpdate: - /// Downloads the addon available at remote without checking its version. - /// The addon already did that. - /// I hope. - ///---------------------------------------------------------------------------------------------------- - UPDATER_REQUESTUPDATE RequestUpdate; - - /* Logging */ - LOGGER_LOG2 Log; - - /* User Interface */ - struct UIVT - { - ///---------------------------------------------------------------------------------------------------- - /// SendAlert: - /// Sends a text alert to the user visible for a short amount of time. - ///---------------------------------------------------------------------------------------------------- - ALERTS_NOTIFY SendAlert; - ///---------------------------------------------------------------------------------------------------- - /// RegisterCloseOnEscape: - /// Registers a window name to get its bool toggled when escape is pressed. - ///---------------------------------------------------------------------------------------------------- - GUI_REGISTERCLOSEONESCAPE RegisterCloseOnEscape; - ///---------------------------------------------------------------------------------------------------- - /// DeregisterCloseOnEscape: - /// Deregisters a window name to listen to on escape. - ///---------------------------------------------------------------------------------------------------- - GUI_DEREGISTERCLOSEONESCAPE DeregisterCloseOnEscape; - }; - UIVT UI; - - /* Paths */ - struct PathsVT - { - PATHS_GETGAMEDIR GetGameDirectory; - PATHS_GETADDONDIR GetAddonDirectory; - PATHS_GETCOMMONDIR GetCommonDirectory; - }; - PathsVT Paths; - - /* Minhook */ - struct MinHookVT - { - MINHOOK_CREATE Create; - MINHOOK_REMOVE Remove; - MINHOOK_ENABLE Enable; - MINHOOK_DISABLE Disable; - }; - MinHookVT MinHook; - - struct EventsVT - { - ///---------------------------------------------------------------------------------------------------- - /// Raise: - /// Raises an event to all subscribing addons. - /// aEventData is a pointer to the data you want to share or nullptr. - /// Addons are responsible for knowing how to interpret this data. - ///---------------------------------------------------------------------------------------------------- - EVENTS_RAISE Raise; - ///---------------------------------------------------------------------------------------------------- - /// RaiseNotification: - /// Raises an event without a payload. - /// Synonymous with RaiseEvent("EV_FOO", nullptr); - ///---------------------------------------------------------------------------------------------------- - EVENTS_RAISENOTIFICATION RaiseNotification; - ///---------------------------------------------------------------------------------------------------- - /// RaiseTargeted: - /// Raises an event targeted at a specific subscriber. - ///---------------------------------------------------------------------------------------------------- - EVENTS_RAISE_TARGETED RaiseTargeted; - ///---------------------------------------------------------------------------------------------------- - /// RaiseNotificationTargeted: - /// Raises a notification (event without payload) targeted at a specific subscriber. - ///---------------------------------------------------------------------------------------------------- - EVENTS_RAISENOTIFICATION_TARGETED RaiseNotificationTargeted; - ///---------------------------------------------------------------------------------------------------- - /// Subscribe: - /// Registers an event callback. - ///---------------------------------------------------------------------------------------------------- - EVENTS_SUBSCRIBE Subscribe; - ///---------------------------------------------------------------------------------------------------- - /// Unsubscribe: - /// Deregisters an event callback. - ///---------------------------------------------------------------------------------------------------- - EVENTS_SUBSCRIBE Unsubscribe; - }; - EventsVT Events; - - /* WndProc */ - struct WndProcVT - { - ///---------------------------------------------------------------------------------------------------- - /// Register: - /// Registers/Deregisters a WndProc callback. - ///---------------------------------------------------------------------------------------------------- - WNDPROC_ADDREM Register; - ///---------------------------------------------------------------------------------------------------- - /// Deregister: - /// Registers/Deregisters a WndProc callback. - ///---------------------------------------------------------------------------------------------------- - WNDPROC_ADDREM Deregister; - ///---------------------------------------------------------------------------------------------------- - /// SendToGameOnly: - /// Sends a WndProc to the game only and bypasses all other hooks. - ///---------------------------------------------------------------------------------------------------- - WNDPROC_SENDTOGAME SendToGameOnly; - }; - WndProcVT WndProc; - - /* InputBinds */ - struct InputBindsVT - { - ///---------------------------------------------------------------------------------------------------- - /// Invoke: - /// Trigger a keybind programmatically. - ///---------------------------------------------------------------------------------------------------- - KEYBINDS_INVOKE Invoke; - ///---------------------------------------------------------------------------------------------------- - /// RegisterWithString: - /// Registers a KeybindHandler callback for a given named keybind. - /// aKeybind is the default if not yet defined. Use as "ALT+CTRL+SHIFT+Q", "ALT+SHIFT+T", etc. - ///---------------------------------------------------------------------------------------------------- - KEYBINDS_REGISTERWITHSTRING RegisterWithString; - ///---------------------------------------------------------------------------------------------------- - /// RegisterWithStruct: - /// Same as KEYBINDS_REGISTERWITHSTRING except you pass a Nexus Keybind struct as a default bind. - ///---------------------------------------------------------------------------------------------------- - KEYBINDS_REGISTERWITHSTRUCT RegisterWithStruct; - ///---------------------------------------------------------------------------------------------------- - /// Deregister: - /// Deregisters a KeybindHandler callback. - ///---------------------------------------------------------------------------------------------------- - KEYBINDS_DEREGISTER Deregister; - }; - InputBindsVT InputBinds; - - /* GameBinds */ - struct GameBindsVT - { - ///---------------------------------------------------------------------------------------------------- - /// Deregister: - /// Presses the keys of a given bind - ///---------------------------------------------------------------------------------------------------- - GAMEBINDS_PRESSASYNC PressAsync; - ///---------------------------------------------------------------------------------------------------- - /// ReleaseAsync: - /// Releases the keypresses of a given bind. - ///---------------------------------------------------------------------------------------------------- - GAMEBINDS_RELEASEASYNC ReleaseAsync; - ///---------------------------------------------------------------------------------------------------- - /// InvokeAsync: - /// Sends the keys of a given bind and then releases them after a given duration. - ///---------------------------------------------------------------------------------------------------- - GAMEBINDS_INVOKEASYNC InvokeAsync; - ///---------------------------------------------------------------------------------------------------- - /// Press: - /// Presses the keys of a given bind - ///---------------------------------------------------------------------------------------------------- - GAMEBINDS_PRESS Press; - ///---------------------------------------------------------------------------------------------------- - /// Release: - /// Releases the keypresses of a given bind. - ///---------------------------------------------------------------------------------------------------- - GAMEBINDS_RELEASE Release; - ///---------------------------------------------------------------------------------------------------- - /// IsBound: - /// Returns if a given game bind is set. - ///---------------------------------------------------------------------------------------------------- - GAMEBINDS_ISBOUND IsBound; - }; - GameBindsVT GameBinds; - - /* DataLink */ - struct DataLinkVT - { - ///---------------------------------------------------------------------------------------------------- - /// Get: - /// Returns a pointer to the requested resource or nullptr if not existing. - ///---------------------------------------------------------------------------------------------------- - DATALINK_GETRESOURCE Get; - ///---------------------------------------------------------------------------------------------------- - /// Share: - /// Allocates a shared resource of given size and returns a pointer to it for writing. - ///---------------------------------------------------------------------------------------------------- - DATALINK_SHARERESOURCE Share; - }; - DataLinkVT DataLink; - - /* Textures */ - struct TexturesVT - { - ///---------------------------------------------------------------------------------------------------- - /// Get: - /// Returns a Texture* or nullptr if it doesn't exist. - ///---------------------------------------------------------------------------------------------------- - TEXTURES_GET Get; - ///---------------------------------------------------------------------------------------------------- - /// GetOrCreateFromFile: - /// Returns a Texture* or if it doesn't exist yet creates it from file. - ///---------------------------------------------------------------------------------------------------- - TEXTURES_GETORCREATEFROMFILE GetOrCreateFromFile; - ///---------------------------------------------------------------------------------------------------- - /// GetOrCreateFromResource: - /// Returns a Texture* or if it doesn't exist yet creates it from resource. - ///---------------------------------------------------------------------------------------------------- - TEXTURES_GETORCREATEFROMRESOURCE GetOrCreateFromResource; - ///---------------------------------------------------------------------------------------------------- - /// GetOrCreateFromURL: - /// Returns a Texture* or if it doesn't exist yet creates it from URL. - ///---------------------------------------------------------------------------------------------------- - TEXTURES_GETORCREATEFROMURL GetOrCreateFromURL; - ///---------------------------------------------------------------------------------------------------- - /// GetOrCreateFromMemory: - /// Returns a Texture* or if it doesn't exist yet creates it from memory. - ///---------------------------------------------------------------------------------------------------- - TEXTURES_GETORCREATEFROMMEMORY GetOrCreateFromMemory; - ///---------------------------------------------------------------------------------------------------- - /// LoadFromFile: - /// Creates a texture from file and passes it to the TextureReceiver callback when finished. - ///---------------------------------------------------------------------------------------------------- - TEXTURES_LOADFROMFILE LoadFromFile; - ///---------------------------------------------------------------------------------------------------- - /// LoadFromResource: - /// Creates a texture from resource and passes it to the TextureReceiver callback when finished. - ///---------------------------------------------------------------------------------------------------- - TEXTURES_LOADFROMRESOURCE LoadFromResource; - ///---------------------------------------------------------------------------------------------------- - /// LoadFromURL: - /// Creates a texture from URL and passes it to the TextureReceiver callback when finished. - ///---------------------------------------------------------------------------------------------------- - TEXTURES_LOADFROMURL LoadFromURL; - ///---------------------------------------------------------------------------------------------------- - /// LoadFromMemory: - /// Creates a texture from memory and passes it to the TextureReceiver callback when finished. - ///---------------------------------------------------------------------------------------------------- - TEXTURES_LOADFROMMEMORY LoadFromMemory; - }; - TexturesVT Textures; - - /* Shortcuts */ - struct QuickAccessVT - { - ///---------------------------------------------------------------------------------------------------- - /// Add: - /// Adds a shortcut icon to the QuickAccess with given texture identifiers. - /// When clicked aKeybindIdentifier will be invoked. - ///---------------------------------------------------------------------------------------------------- - QUICKACCESS_ADDSHORTCUT Add; - ///---------------------------------------------------------------------------------------------------- - /// Remove: - /// Removes a shortcut with the given identifier from Quick Access. - ///---------------------------------------------------------------------------------------------------- - QUICKACCESS_GENERIC Remove; - ///---------------------------------------------------------------------------------------------------- - /// Notify: - /// Sends a notification icon to the given shortcut. - ///---------------------------------------------------------------------------------------------------- - QUICKACCESS_GENERIC Notify; - ///---------------------------------------------------------------------------------------------------- - /// AddContextMenu: - /// Appends ImGui callback when right-clicking a shortcut icon. - ///---------------------------------------------------------------------------------------------------- - QUICKACCESS_ADDSIMPLE2 AddContextMenu; - ///---------------------------------------------------------------------------------------------------- - /// RemoveContextMenu: - /// Removes a simple shortcut / context item with the given identifier from Quick Access. - ///---------------------------------------------------------------------------------------------------- - QUICKACCESS_GENERIC RemoveContextMenu; - }; - QuickAccessVT QuickAccess; - - /* Localization */ - struct LocalizationVT - { - ///---------------------------------------------------------------------------------------------------- - /// Translate: - /// Translates aIdentifier into current active language or returns aIdentifier if not available. - ///---------------------------------------------------------------------------------------------------- - LOCALIZATION_TRANSLATE Translate; - ///---------------------------------------------------------------------------------------------------- - /// TranslateTo: - /// Same as Translate except you can pass which language you want to translate to. - ///---------------------------------------------------------------------------------------------------- - LOCALIZATION_TRANSLATETO TranslateTo; - ///---------------------------------------------------------------------------------------------------- - /// Set: - /// Set a translated string at runtime. - ///---------------------------------------------------------------------------------------------------- - LOCALIZATION_SET Set; - }; - LocalizationVT Localization; - - /* Fonts */ - struct FontsVT - { - ///---------------------------------------------------------------------------------------------------- - /// Get: - /// Requests a font to be sent to the given callback/receiver. - ///---------------------------------------------------------------------------------------------------- - FONTS_GETRELEASE Get; - ///---------------------------------------------------------------------------------------------------- - /// Release: - /// Releases a callback/receiver from a specific font. - ///---------------------------------------------------------------------------------------------------- - FONTS_GETRELEASE Release; - ///---------------------------------------------------------------------------------------------------- - /// AddFromFile: - /// Adds a font from disk and sends updates to the callback. - ///---------------------------------------------------------------------------------------------------- - FONTS_ADDFROMFILE AddFromFile; - ///---------------------------------------------------------------------------------------------------- - /// AddFromResource: - /// Adds a font from an embedded resource and sends updates to the callback. - ///---------------------------------------------------------------------------------------------------- - FONTS_ADDFROMRESOURCE AddFromResource; - ///---------------------------------------------------------------------------------------------------- - /// AddFromMemory: - /// Adds a font from memory and sends updates to the callback. - ///---------------------------------------------------------------------------------------------------- - FONTS_ADDFROMMEMORY AddFromMemory; - ///---------------------------------------------------------------------------------------------------- - /// Resize: - /// Resizes a font and sends updates to the callback. - ///---------------------------------------------------------------------------------------------------- - FONTS_RESIZE Resize; - }; - FontsVT Fonts; -} AddonAPI; - -typedef void (*ADDON_LOAD) (AddonAPI* aAPI); -typedef void (*ADDON_UNLOAD) (void); - -typedef struct AddonVersion -{ - signed short Major; - signed short Minor; - signed short Build; - signed short Revision; -} AddonVersion; - -typedef enum EAddonFlags -{ - EAddonFlags_None = 0, - EAddonFlags_IsVolatile = 1, /* is hooking functions or doing anything else that's volatile and game build dependant */ - EAddonFlags_DisableHotloading = 2, /* prevents unloading at runtime, aka. will require a restart if updated, etc. */ - EAddonFlags_OnlyLoadDuringGameLaunchSequence = 4 /* prevents loading the addon later than the initial character select */ -} EAddonFlags; - -typedef enum EUpdateProvider -{ - EUpdateProvider_None = 0, /* Does not support auto updating */ - EUpdateProvider_Raidcore = 1, /* Provider is Raidcore (via API) */ - EUpdateProvider_GitHub = 2, /* Provider is GitHub Releases */ - EUpdateProvider_Direct = 3, /* Provider is direct file link */ - EUpdateProvider_Self = 4 /* Provider is self check, addon has to request manually and version will not be verified */ -} EUpdateProvider; - -typedef struct AddonDefinition -{ - /* required */ - signed int Signature; /* Raidcore Addon ID, set to random unqiue negative integer if not on Raidcore */ - signed int APIVersion; /* Determines which AddonAPI struct revision the Loader will pass, use the NEXUS_API_VERSION define from Nexus.h */ - const char* Name; /* Name of the addon as shown in the library */ - AddonVersion Version; - const char* Author; /* Author of the addon */ - const char* Description; /* Short description */ - ADDON_LOAD Load; /* Pointer to Load Function of the addon */ - ADDON_UNLOAD Unload; /* Pointer to Unload Function of the addon. Not required if EAddonFlags::DisableHotloading is set. */ - EAddonFlags Flags; /* Information about the addon */ - - /* update fallback */ - EUpdateProvider Provider; /* What platform is the the addon hosted on */ - const char* UpdateLink; /* Link to the update resource */ -} AddonDefinition; - -#endif +#ifndef NEXUS_H +#define NEXUS_H + +#include + +#ifndef __cplusplus +#include +#endif + +#define NEXUS_API_VERSION 6 + +typedef enum ERenderType +{ + ERenderType_PreRender, + ERenderType_Render, + ERenderType_PostRender, + ERenderType_OptionsRender +} ERenderType; + +///---------------------------------------------------------------------------------------------------- +/// GUI_RENDER: +/// Render callback signature. +///---------------------------------------------------------------------------------------------------- +typedef void (*GUI_RENDER) (void); +typedef void (*GUI_ADDRENDER) (ERenderType aRenderType, GUI_RENDER aRenderCallback); +typedef void (*GUI_REMRENDER) (GUI_RENDER aRenderCallback); +typedef void (*GUI_REGISTERCLOSEONESCAPE)(const char* aWindowName, bool* aIsVisible); +typedef void (*GUI_DEREGISTERCLOSEONESCAPE)(const char* aWindowName); + +typedef void (*UPDATER_REQUESTUPDATE)(signed int aSignature, const char* aUpdateURL); + +typedef const char* (*PATHS_GETGAMEDIR)(void); +typedef const char* (*PATHS_GETADDONDIR)(const char* aName); +typedef const char* (*PATHS_GETCOMMONDIR)(void); + +typedef enum EMHStatus +{ + MH_UNKNOWN = -1, + MH_OK = 0, + MH_ERROR_ALREADY_INITIALIZED, + MH_ERROR_NOT_INITIALIZED, + MH_ERROR_ALREADY_CREATED, + MH_ERROR_NOT_CREATED, + MH_ERROR_ENABLED, + MH_ERROR_DISABLED, + MH_ERROR_NOT_EXECUTABLE, + MH_ERROR_UNSUPPORTED_FUNCTION, + MH_ERROR_MEMORY_ALLOC, + MH_ERROR_MEMORY_PROTECT, + MH_ERROR_MODULE_NOT_FOUND, + MH_ERROR_FUNCTION_NOT_FOUND +} EMHStatus; + +typedef EMHStatus(__stdcall* MINHOOK_CREATE)(LPVOID pTarget, LPVOID pDetour, LPVOID* ppOriginal); +typedef EMHStatus(__stdcall* MINHOOK_REMOVE)(LPVOID pTarget); +typedef EMHStatus(__stdcall* MINHOOK_ENABLE)(LPVOID pTarget); +typedef EMHStatus(__stdcall* MINHOOK_DISABLE)(LPVOID pTarget); + +typedef enum ELogLevel +{ + ELogLevel_OFF = 0, + ELogLevel_CRITICAL = 1, + ELogLevel_WARNING = 2, + ELogLevel_INFO = 3, + ELogLevel_DEBUG = 4, + ELogLevel_TRACE = 5, + ELogLevel_ALL +} ELogLevel; + +typedef void (*LOGGER_LOG2)(ELogLevel aLogLevel, const char* aChannel, const char* aStr); + +typedef void (*ALERTS_NOTIFY)(const char* aMessage); + +///---------------------------------------------------------------------------------------------------- +/// EVENT_CONSUME: +/// Event consume callback signature. +/// aEventArgs is payload and should be known to consumer. +///---------------------------------------------------------------------------------------------------- +typedef void (*EVENT_CONSUME)(void* aEventArgs); +typedef void (*EVENTS_RAISE)(const char* aIdentifier, void* aEventData); +typedef void (*EVENTS_RAISENOTIFICATION)(const char* aIdentifier); +typedef void (*EVENTS_RAISE_TARGETED)(signed int aSignature, const char* aIdentifier, void* aEventData); +typedef void (*EVENTS_RAISENOTIFICATION_TARGETED)(signed int aSignature, const char* aIdentifier); +typedef void (*EVENTS_SUBSCRIBE)(const char* aIdentifier, EVENT_CONSUME aConsumeEventCallback); + +///---------------------------------------------------------------------------------------------------- +/// WNDPROC_CALLBACK: +/// Slightly different WndProc signature. +/// Return 0 if your addon handled it and you don't want it to be passed to the game. +///---------------------------------------------------------------------------------------------------- +typedef UINT(*WNDPROC_CALLBACK)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); +typedef void (*WNDPROC_ADDREM)(WNDPROC_CALLBACK aWndProcCallback); +typedef LRESULT(*WNDPROC_SENDTOGAME)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + +typedef struct Keybind +{ + unsigned short Key; + bool Alt; + bool Ctrl; + bool Shift; +} Keybind; + +///---------------------------------------------------------------------------------------------------- +/// KEYBINDS_PROCESS: +/// KeybindHandler callback signature. +/// aIsRelease will be true if the keybind is released. +///---------------------------------------------------------------------------------------------------- +typedef void (*KEYBINDS_PROCESS)(const char* aIdentifier, bool aIsRelease); +typedef void (*KEYBINDS_INVOKE)(const char* aIdentifier, bool aIsRelease); +typedef void (*KEYBINDS_REGISTERWITHSTRING)(const char* aIdentifier, KEYBINDS_PROCESS aKeybindHandler, const char* aKeybind); +typedef void (*KEYBINDS_REGISTERWITHSTRUCT)(const char* aIdentifier, KEYBINDS_PROCESS aKeybindHandler, Keybind aKeybind); +typedef void (*KEYBINDS_DEREGISTER)(const char* aIdentifier); + +typedef enum EGameBinds +{ + // Movement + EGameBinds_MoveForward = 0, + EGameBinds_MoveBackward = 1, + EGameBinds_MoveLeft = 2, + EGameBinds_MoveRight = 3, + EGameBinds_MoveTurnLeft = 4, + EGameBinds_MoveTurnRight = 5, + EGameBinds_MoveDodge = 6, + EGameBinds_MoveAutoRun = 7, + EGameBinds_MoveWalk = 8, + EGameBinds_MoveJump = 9, + EGameBinds_MoveSwimUp = 10, + EGameBinds_MoveSwimDown = 11, + EGameBinds_MoveAboutFace = 12, + + // Skills + EGameBinds_SkillWeaponSwap = 17, + EGameBinds_SkillWeapon1 = 18, + EGameBinds_SkillWeapon2 = 19, + EGameBinds_SkillWeapon3 = 20, + EGameBinds_SkillWeapon4 = 21, + EGameBinds_SkillWeapon5 = 22, + EGameBinds_SkillHeal = 23, + EGameBinds_SkillUtility1 = 24, + EGameBinds_SkillUtility2 = 25, + EGameBinds_SkillUtility3 = 26, + EGameBinds_SkillElite = 27, + EGameBinds_SkillProfession1 = 28, + EGameBinds_SkillProfession2 = 29, + EGameBinds_SkillProfession3 = 30, + EGameBinds_SkillProfession4 = 31, + EGameBinds_SkillProfession5 = 79, + EGameBinds_SkillProfession6 = 201, + EGameBinds_SkillProfession7 = 202, + EGameBinds_SkillSpecialAction = 82, + + // Targeting + EGameBinds_TargetAlert = 131, + EGameBinds_TargetCall = 32, + EGameBinds_TargetTake = 33, + EGameBinds_TargetCallLocal = 199, + EGameBinds_TargetTakeLocal = 200, + EGameBinds_TargetEnemyNearest = 34, + EGameBinds_TargetEnemyNext = 35, + EGameBinds_TargetEnemyPrev = 36, + EGameBinds_TargetAllyNearest = 37, + EGameBinds_TargetAllyNext = 38, + EGameBinds_TargetAllyPrev = 39, + EGameBinds_TargetLock = 40, + EGameBinds_TargetSnapGroundTarget = 80, + EGameBinds_TargetSnapGroundTargetToggle = 115, + EGameBinds_TargetAutoTargetingDisable = 116, + EGameBinds_TargetAutoTargetingToggle = 117, + EGameBinds_TargetAllyTargetingMode = 197, + EGameBinds_TargetAllyTargetingModeToggle = 198, + + // UI Binds + EGameBinds_UiCommerce = 41, // TradingPost + EGameBinds_UiContacts = 42, + EGameBinds_UiGuild = 43, + EGameBinds_UiHero = 44, + EGameBinds_UiInventory = 45, + EGameBinds_UiKennel = 46, // Pets + EGameBinds_UiLogout = 47, + EGameBinds_UiMail = 71, + EGameBinds_UiOptions = 48, + EGameBinds_UiParty = 49, + EGameBinds_UiPvp = 73, + EGameBinds_UiPvpBuild = 75, + EGameBinds_UiScoreboard = 50, + EGameBinds_UiSeasonalObjectivesShop = 209, // Wizard's Vault + EGameBinds_UiInformation = 51, + EGameBinds_UiChatToggle = 70, + EGameBinds_UiChatCommand = 52, + EGameBinds_UiChatFocus = 53, + EGameBinds_UiChatReply = 54, + EGameBinds_UiToggle = 55, + EGameBinds_UiSquadBroadcastChatToggle = 85, + EGameBinds_UiSquadBroadcastChatCommand = 83, + EGameBinds_UiSquadBroadcastChatFocus = 84, + + // Camera + EGameBinds_CameraFree = 13, + EGameBinds_CameraZoomIn = 14, + EGameBinds_CameraZoomOut = 15, + EGameBinds_CameraReverse = 16, + EGameBinds_CameraActionMode = 78, + EGameBinds_CameraActionModeDisable = 114, + + // Screenshots + EGameBinds_ScreenshotNormal = 56, + EGameBinds_ScreenshotStereoscopic = 57, + + // Map + EGameBinds_MapToggle = 59, + EGameBinds_MapFocusPlayer = 60, + EGameBinds_MapFloorDown = 61, + EGameBinds_MapFloorUp = 62, + EGameBinds_MapZoomIn = 63, + EGameBinds_MapZoomOut = 64, + + // Mounts + EGameBinds_SpumoniToggle = 152, + EGameBinds_SpumoniMovement = 130, + EGameBinds_SpumoniSecondaryMovement = 153, + EGameBinds_SpumoniMAM01 = 155, // Raptor + EGameBinds_SpumoniMAM02 = 156, // Springer + EGameBinds_SpumoniMAM03 = 157, // Skimmer + EGameBinds_SpumoniMAM04 = 158, // Jackal + EGameBinds_SpumoniMAM05 = 159, // Griffon + EGameBinds_SpumoniMAM06 = 161, // RollerBeetle + EGameBinds_SpumoniMAM07 = 169, // Warclaw + EGameBinds_SpumoniMAM08 = 170, // Skyscale + EGameBinds_SpumoniMAM09 = 203, // SiegeTurtle + + // Spectator Binds + EGameBinds_SpectatorNearestFixed = 102, + EGameBinds_SpectatorNearestPlayer = 103, + EGameBinds_SpectatorPlayerRed1 = 104, + EGameBinds_SpectatorPlayerRed2 = 105, + EGameBinds_SpectatorPlayerRed3 = 106, + EGameBinds_SpectatorPlayerRed4 = 107, + EGameBinds_SpectatorPlayerRed5 = 108, + EGameBinds_SpectatorPlayerBlue1 = 109, + EGameBinds_SpectatorPlayerBlue2 = 110, + EGameBinds_SpectatorPlayerBlue3 = 111, + EGameBinds_SpectatorPlayerBlue4 = 112, + EGameBinds_SpectatorPlayerBlue5 = 113, + EGameBinds_SpectatorFreeCamera = 120, + EGameBinds_SpectatorFreeCameraMode = 127, + EGameBinds_SpectatorFreeMoveForward = 121, + EGameBinds_SpectatorFreeMoveBackward = 122, + EGameBinds_SpectatorFreeMoveLeft = 123, + EGameBinds_SpectatorFreeMoveRight = 124, + EGameBinds_SpectatorFreeMoveUp = 125, + EGameBinds_SpectatorFreeMoveDown = 126, + + // Squad Markers + EGameBinds_SquadMarkerPlaceWorld1 = 86, // Arrow + EGameBinds_SquadMarkerPlaceWorld2 = 87, // Circle + EGameBinds_SquadMarkerPlaceWorld3 = 88, // Heart + EGameBinds_SquadMarkerPlaceWorld4 = 89, // Square + EGameBinds_SquadMarkerPlaceWorld5 = 90, // Star + EGameBinds_SquadMarkerPlaceWorld6 = 91, // Swirl + EGameBinds_SquadMarkerPlaceWorld7 = 92, // Triangle + EGameBinds_SquadMarkerPlaceWorld8 = 93, // Cross + EGameBinds_SquadMarkerClearAllWorld = 119, + EGameBinds_SquadMarkerSetAgent1 = 94, // Arrow + EGameBinds_SquadMarkerSetAgent2 = 95, // Circle + EGameBinds_SquadMarkerSetAgent3 = 96, // Heart + EGameBinds_SquadMarkerSetAgent4 = 97, // Square + EGameBinds_SquadMarkerSetAgent5 = 98, // Star + EGameBinds_SquadMarkerSetAgent6 = 99, // Swirl + EGameBinds_SquadMarkerSetAgent7 = 100, // Triangle + EGameBinds_SquadMarkerSetAgent8 = 101, // Cross + EGameBinds_SquadMarkerClearAllAgent = 118, + + // Mastery Skills + EGameBinds_MasteryAccess = 196, + EGameBinds_MasteryAccess01 = 204, // Fishing + EGameBinds_MasteryAccess02 = 205, // Skiff + EGameBinds_MasteryAccess03 = 206, // Jade Bot Waypoint + EGameBinds_MasteryAccess04 = 207, // Rift Scan + EGameBinds_MasteryAccess05 = 208, // Skyscale + EGameBinds_MasteryAccess06 = 211, // Homestead Doorway + + // Miscellaneous Binds + EGameBinds_MiscAoELoot = 74, + EGameBinds_MiscInteract = 65, + EGameBinds_MiscShowEnemies = 66, + EGameBinds_MiscShowAllies = 67, + EGameBinds_MiscCombatStance = 68, // Stow/Draw + EGameBinds_MiscToggleLanguage = 69, + EGameBinds_MiscTogglePetCombat = 76, + EGameBinds_MiscToggleFullScreen = 160, + EGameBinds_MiscToggleDecorationMode = 210, // DecorateMode + + // Toys/Novelties + EGameBinds_ToyUseDefault = 162, + EGameBinds_ToyUseSlot1 = 163, // Chair + EGameBinds_ToyUseSlot2 = 164, // Instrument + EGameBinds_ToyUseSlot3 = 165, // Held Item + EGameBinds_ToyUseSlot4 = 166, // Toy + EGameBinds_ToyUseSlot5 = 167, // Tonic + //ToyUseSlot6 unused + + // Build Templates + EGameBinds_Loadout1 = 171, + EGameBinds_Loadout2 = 172, + EGameBinds_Loadout3 = 173, + EGameBinds_Loadout4 = 174, + EGameBinds_Loadout5 = 175, + EGameBinds_Loadout6 = 176, + EGameBinds_Loadout7 = 177, + EGameBinds_Loadout8 = 178, + + // Equipment Templates + EGameBinds_GearLoadout1 = 182, + EGameBinds_GearLoadout2 = 183, + EGameBinds_GearLoadout3 = 184, + EGameBinds_GearLoadout4 = 185, + EGameBinds_GearLoadout5 = 186, + EGameBinds_GearLoadout6 = 187, + EGameBinds_GearLoadout7 = 188, + EGameBinds_GearLoadout8 = 189 +} EGameBinds; + +typedef void (*GAMEBINDS_PRESSASYNC)(EGameBinds aGameBind); +typedef void (*GAMEBINDS_RELEASEASYNC)(EGameBinds aGameBind); +typedef void (*GAMEBINDS_INVOKEASYNC)(EGameBinds aGameBind, int aDuration); +typedef void (*GAMEBINDS_PRESS)(EGameBinds aGameBind); +typedef void (*GAMEBINDS_RELEASE)(EGameBinds aGameBind); +typedef bool (*GAMEBINDS_ISBOUND)(EGameBinds aGameBind); + +typedef void* (*DATALINK_GETRESOURCE)(const char* aIdentifier); +typedef void* (*DATALINK_SHARERESOURCE)(const char* aIdentifier, size_t aResourceSize); + +typedef struct Texture +{ + unsigned Width; + unsigned Height; + void* Resource; // ID3D11ShaderResourceView* +} Texture; + +///---------------------------------------------------------------------------------------------------- +/// TEXTURES_RECEIVECALLBACK: +/// TextureReceiver callback signature. +///---------------------------------------------------------------------------------------------------- +typedef void (*TEXTURES_RECEIVECALLBACK)(const char* aIdentifier, Texture* aTexture); +typedef Texture* (*TEXTURES_GET)(const char* aIdentifier); +typedef Texture* (*TEXTURES_GETORCREATEFROMFILE)(const char* aIdentifier, const char* aFilename); +typedef Texture* (*TEXTURES_GETORCREATEFROMRESOURCE)(const char* aIdentifier, unsigned aResourceID, HMODULE aModule); +typedef Texture* (*TEXTURES_GETORCREATEFROMURL)(const char* aIdentifier, const char* aRemote, const char* aEndpoint); +typedef Texture* (*TEXTURES_GETORCREATEFROMMEMORY)(const char* aIdentifier, void* aData, size_t aSize); +typedef void (*TEXTURES_LOADFROMFILE)(const char* aIdentifier, const char* aFilename, TEXTURES_RECEIVECALLBACK aCallback); +typedef void (*TEXTURES_LOADFROMRESOURCE)(const char* aIdentifier, unsigned aResourceID, HMODULE aModule, TEXTURES_RECEIVECALLBACK aCallback); +typedef void (*TEXTURES_LOADFROMURL)(const char* aIdentifier, const char* aRemote, const char* aEndpoint, TEXTURES_RECEIVECALLBACK aCallback); +typedef void (*TEXTURES_LOADFROMMEMORY)(const char* aIdentifier, void* aData, size_t aSize, TEXTURES_RECEIVECALLBACK aCallback); + +typedef void (*QUICKACCESS_ADDSHORTCUT) (const char* aIdentifier, const char* aTextureIdentifier, const char* aTextureHoverIdentifier, const char* aKeybindIdentifier, const char* aTooltipText); +typedef void (*QUICKACCESS_ADDSIMPLE) (const char* aIdentifier, GUI_RENDER aShortcutRenderCallback); +typedef void (*QUICKACCESS_ADDSIMPLE2) (const char* aIdentifier, const char* aTargetShortcutIdentifier, GUI_RENDER aShortcutRenderCallback); +typedef void (*QUICKACCESS_GENERIC) (const char* aIdentifier); + +typedef const char* (*LOCALIZATION_TRANSLATE)(const char* aIdentifier); +typedef const char* (*LOCALIZATION_TRANSLATETO)(const char* aIdentifier, const char* aLanguageIdentifier); +typedef void (*LOCALIZATION_SET)(const char* aIdentifier, const char* aLanguageIdentifier, const char* aString); + +///---------------------------------------------------------------------------------------------------- +/// FONTS_RECEIVECALLBACK: +/// FontReceiver callback signature. +/// aFont = ImFont* +///---------------------------------------------------------------------------------------------------- +typedef void (*FONTS_RECEIVECALLBACK)(const char* aIdentifier, void* aFont); +///---------------------------------------------------------------------------------------------------- +/// FONTS_GETRELEASE: +/// Signature to get and release fonts. +///---------------------------------------------------------------------------------------------------- +typedef void (*FONTS_GETRELEASE)(const char* aIdentifier, FONTS_RECEIVECALLBACK aCallback); +typedef void (*FONTS_ADDFROMFILE)(const char* aIdentifier, float aFontSize, const char* aFilename, FONTS_RECEIVECALLBACK aCallback, void* aConfig); +typedef void (*FONTS_ADDFROMRESOURCE)(const char* aIdentifier, float aFontSize, unsigned aResourceID, HMODULE aModule, FONTS_RECEIVECALLBACK aCallback, void* aConfig); +typedef void (*FONTS_ADDFROMMEMORY)(const char* aIdentifier, float aFontSize, void* aData, size_t aSize, FONTS_RECEIVECALLBACK aCallback, void* aConfig); +typedef void (*FONTS_RESIZE)(const char* aIdentifier, float aFontSize); + +typedef struct NexusLinkData +{ + unsigned Width; + unsigned Height; + float Scaling; + + bool IsMoving; + bool IsCameraMoving; + bool IsGameplay; + + void* Font; // ImFont* + void* FontBig; // ImFont* + void* FontUI; // ImFont* +} NexusLinkData; + +typedef struct AddonAPI +{ + /* Renderer */ + void* SwapChain; + void* ImguiContext; + void* ImguiMalloc; + void* ImguiFree; + + struct RendererVT + { + ///---------------------------------------------------------------------------------------------------- + /// Register: + /// Registers a render callback, ERenderType is either Pre, Present, Post or Options, + /// callback should be of void func(). + ///---------------------------------------------------------------------------------------------------- + GUI_ADDRENDER Register; + ///---------------------------------------------------------------------------------------------------- + /// Deregister: + /// Removes the registered render callback that is passed. + ///---------------------------------------------------------------------------------------------------- + GUI_REMRENDER Deregister; + }; + RendererVT Renderer; + + ///---------------------------------------------------------------------------------------------------- + /// RequestUpdate: + /// Downloads the addon available at remote without checking its version. + /// The addon already did that. + /// I hope. + ///---------------------------------------------------------------------------------------------------- + UPDATER_REQUESTUPDATE RequestUpdate; + + /* Logging */ + LOGGER_LOG2 Log; + + /* User Interface */ + struct UIVT + { + ///---------------------------------------------------------------------------------------------------- + /// SendAlert: + /// Sends a text alert to the user visible for a short amount of time. + ///---------------------------------------------------------------------------------------------------- + ALERTS_NOTIFY SendAlert; + ///---------------------------------------------------------------------------------------------------- + /// RegisterCloseOnEscape: + /// Registers a window name to get its bool toggled when escape is pressed. + ///---------------------------------------------------------------------------------------------------- + GUI_REGISTERCLOSEONESCAPE RegisterCloseOnEscape; + ///---------------------------------------------------------------------------------------------------- + /// DeregisterCloseOnEscape: + /// Deregisters a window name to listen to on escape. + ///---------------------------------------------------------------------------------------------------- + GUI_DEREGISTERCLOSEONESCAPE DeregisterCloseOnEscape; + }; + UIVT UI; + + /* Paths */ + struct PathsVT + { + PATHS_GETGAMEDIR GetGameDirectory; + PATHS_GETADDONDIR GetAddonDirectory; + PATHS_GETCOMMONDIR GetCommonDirectory; + }; + PathsVT Paths; + + /* Minhook */ + struct MinHookVT + { + MINHOOK_CREATE Create; + MINHOOK_REMOVE Remove; + MINHOOK_ENABLE Enable; + MINHOOK_DISABLE Disable; + }; + MinHookVT MinHook; + + struct EventsVT + { + ///---------------------------------------------------------------------------------------------------- + /// Raise: + /// Raises an event to all subscribing addons. + /// aEventData is a pointer to the data you want to share or nullptr. + /// Addons are responsible for knowing how to interpret this data. + ///---------------------------------------------------------------------------------------------------- + EVENTS_RAISE Raise; + ///---------------------------------------------------------------------------------------------------- + /// RaiseNotification: + /// Raises an event without a payload. + /// Synonymous with RaiseEvent("EV_FOO", nullptr); + ///---------------------------------------------------------------------------------------------------- + EVENTS_RAISENOTIFICATION RaiseNotification; + ///---------------------------------------------------------------------------------------------------- + /// RaiseTargeted: + /// Raises an event targeted at a specific subscriber. + ///---------------------------------------------------------------------------------------------------- + EVENTS_RAISE_TARGETED RaiseTargeted; + ///---------------------------------------------------------------------------------------------------- + /// RaiseNotificationTargeted: + /// Raises a notification (event without payload) targeted at a specific subscriber. + ///---------------------------------------------------------------------------------------------------- + EVENTS_RAISENOTIFICATION_TARGETED RaiseNotificationTargeted; + ///---------------------------------------------------------------------------------------------------- + /// Subscribe: + /// Registers an event callback. + ///---------------------------------------------------------------------------------------------------- + EVENTS_SUBSCRIBE Subscribe; + ///---------------------------------------------------------------------------------------------------- + /// Unsubscribe: + /// Deregisters an event callback. + ///---------------------------------------------------------------------------------------------------- + EVENTS_SUBSCRIBE Unsubscribe; + }; + EventsVT Events; + + /* WndProc */ + struct WndProcVT + { + ///---------------------------------------------------------------------------------------------------- + /// Register: + /// Registers/Deregisters a WndProc callback. + ///---------------------------------------------------------------------------------------------------- + WNDPROC_ADDREM Register; + ///---------------------------------------------------------------------------------------------------- + /// Deregister: + /// Registers/Deregisters a WndProc callback. + ///---------------------------------------------------------------------------------------------------- + WNDPROC_ADDREM Deregister; + ///---------------------------------------------------------------------------------------------------- + /// SendToGameOnly: + /// Sends a WndProc to the game only and bypasses all other hooks. + ///---------------------------------------------------------------------------------------------------- + WNDPROC_SENDTOGAME SendToGameOnly; + }; + WndProcVT WndProc; + + /* InputBinds */ + struct InputBindsVT + { + ///---------------------------------------------------------------------------------------------------- + /// Invoke: + /// Trigger a keybind programmatically. + ///---------------------------------------------------------------------------------------------------- + KEYBINDS_INVOKE Invoke; + ///---------------------------------------------------------------------------------------------------- + /// RegisterWithString: + /// Registers a KeybindHandler callback for a given named keybind. + /// aKeybind is the default if not yet defined. Use as "ALT+CTRL+SHIFT+Q", "ALT+SHIFT+T", etc. + ///---------------------------------------------------------------------------------------------------- + KEYBINDS_REGISTERWITHSTRING RegisterWithString; + ///---------------------------------------------------------------------------------------------------- + /// RegisterWithStruct: + /// Same as KEYBINDS_REGISTERWITHSTRING except you pass a Nexus Keybind struct as a default bind. + ///---------------------------------------------------------------------------------------------------- + KEYBINDS_REGISTERWITHSTRUCT RegisterWithStruct; + ///---------------------------------------------------------------------------------------------------- + /// Deregister: + /// Deregisters a KeybindHandler callback. + ///---------------------------------------------------------------------------------------------------- + KEYBINDS_DEREGISTER Deregister; + }; + InputBindsVT InputBinds; + + /* GameBinds */ + struct GameBindsVT + { + ///---------------------------------------------------------------------------------------------------- + /// Deregister: + /// Presses the keys of a given bind + ///---------------------------------------------------------------------------------------------------- + GAMEBINDS_PRESSASYNC PressAsync; + ///---------------------------------------------------------------------------------------------------- + /// ReleaseAsync: + /// Releases the keypresses of a given bind. + ///---------------------------------------------------------------------------------------------------- + GAMEBINDS_RELEASEASYNC ReleaseAsync; + ///---------------------------------------------------------------------------------------------------- + /// InvokeAsync: + /// Sends the keys of a given bind and then releases them after a given duration. + ///---------------------------------------------------------------------------------------------------- + GAMEBINDS_INVOKEASYNC InvokeAsync; + ///---------------------------------------------------------------------------------------------------- + /// Press: + /// Presses the keys of a given bind + ///---------------------------------------------------------------------------------------------------- + GAMEBINDS_PRESS Press; + ///---------------------------------------------------------------------------------------------------- + /// Release: + /// Releases the keypresses of a given bind. + ///---------------------------------------------------------------------------------------------------- + GAMEBINDS_RELEASE Release; + ///---------------------------------------------------------------------------------------------------- + /// IsBound: + /// Returns if a given game bind is set. + ///---------------------------------------------------------------------------------------------------- + GAMEBINDS_ISBOUND IsBound; + }; + GameBindsVT GameBinds; + + /* DataLink */ + struct DataLinkVT + { + ///---------------------------------------------------------------------------------------------------- + /// Get: + /// Returns a pointer to the requested resource or nullptr if not existing. + ///---------------------------------------------------------------------------------------------------- + DATALINK_GETRESOURCE Get; + ///---------------------------------------------------------------------------------------------------- + /// Share: + /// Allocates a shared resource of given size and returns a pointer to it for writing. + ///---------------------------------------------------------------------------------------------------- + DATALINK_SHARERESOURCE Share; + }; + DataLinkVT DataLink; + + /* Textures */ + struct TexturesVT + { + ///---------------------------------------------------------------------------------------------------- + /// Get: + /// Returns a Texture* or nullptr if it doesn't exist. + ///---------------------------------------------------------------------------------------------------- + TEXTURES_GET Get; + ///---------------------------------------------------------------------------------------------------- + /// GetOrCreateFromFile: + /// Returns a Texture* or if it doesn't exist yet creates it from file. + ///---------------------------------------------------------------------------------------------------- + TEXTURES_GETORCREATEFROMFILE GetOrCreateFromFile; + ///---------------------------------------------------------------------------------------------------- + /// GetOrCreateFromResource: + /// Returns a Texture* or if it doesn't exist yet creates it from resource. + ///---------------------------------------------------------------------------------------------------- + TEXTURES_GETORCREATEFROMRESOURCE GetOrCreateFromResource; + ///---------------------------------------------------------------------------------------------------- + /// GetOrCreateFromURL: + /// Returns a Texture* or if it doesn't exist yet creates it from URL. + ///---------------------------------------------------------------------------------------------------- + TEXTURES_GETORCREATEFROMURL GetOrCreateFromURL; + ///---------------------------------------------------------------------------------------------------- + /// GetOrCreateFromMemory: + /// Returns a Texture* or if it doesn't exist yet creates it from memory. + ///---------------------------------------------------------------------------------------------------- + TEXTURES_GETORCREATEFROMMEMORY GetOrCreateFromMemory; + ///---------------------------------------------------------------------------------------------------- + /// LoadFromFile: + /// Creates a texture from file and passes it to the TextureReceiver callback when finished. + ///---------------------------------------------------------------------------------------------------- + TEXTURES_LOADFROMFILE LoadFromFile; + ///---------------------------------------------------------------------------------------------------- + /// LoadFromResource: + /// Creates a texture from resource and passes it to the TextureReceiver callback when finished. + ///---------------------------------------------------------------------------------------------------- + TEXTURES_LOADFROMRESOURCE LoadFromResource; + ///---------------------------------------------------------------------------------------------------- + /// LoadFromURL: + /// Creates a texture from URL and passes it to the TextureReceiver callback when finished. + ///---------------------------------------------------------------------------------------------------- + TEXTURES_LOADFROMURL LoadFromURL; + ///---------------------------------------------------------------------------------------------------- + /// LoadFromMemory: + /// Creates a texture from memory and passes it to the TextureReceiver callback when finished. + ///---------------------------------------------------------------------------------------------------- + TEXTURES_LOADFROMMEMORY LoadFromMemory; + }; + TexturesVT Textures; + + /* Shortcuts */ + struct QuickAccessVT + { + ///---------------------------------------------------------------------------------------------------- + /// Add: + /// Adds a shortcut icon to the QuickAccess with given texture identifiers. + /// When clicked aKeybindIdentifier will be invoked. + ///---------------------------------------------------------------------------------------------------- + QUICKACCESS_ADDSHORTCUT Add; + ///---------------------------------------------------------------------------------------------------- + /// Remove: + /// Removes a shortcut with the given identifier from Quick Access. + ///---------------------------------------------------------------------------------------------------- + QUICKACCESS_GENERIC Remove; + ///---------------------------------------------------------------------------------------------------- + /// Notify: + /// Sends a notification icon to the given shortcut. + ///---------------------------------------------------------------------------------------------------- + QUICKACCESS_GENERIC Notify; + ///---------------------------------------------------------------------------------------------------- + /// AddContextMenu: + /// Appends ImGui callback when right-clicking a shortcut icon. + ///---------------------------------------------------------------------------------------------------- + QUICKACCESS_ADDSIMPLE2 AddContextMenu; + ///---------------------------------------------------------------------------------------------------- + /// RemoveContextMenu: + /// Removes a simple shortcut / context item with the given identifier from Quick Access. + ///---------------------------------------------------------------------------------------------------- + QUICKACCESS_GENERIC RemoveContextMenu; + }; + QuickAccessVT QuickAccess; + + /* Localization */ + struct LocalizationVT + { + ///---------------------------------------------------------------------------------------------------- + /// Translate: + /// Translates aIdentifier into current active language or returns aIdentifier if not available. + ///---------------------------------------------------------------------------------------------------- + LOCALIZATION_TRANSLATE Translate; + ///---------------------------------------------------------------------------------------------------- + /// TranslateTo: + /// Same as Translate except you can pass which language you want to translate to. + ///---------------------------------------------------------------------------------------------------- + LOCALIZATION_TRANSLATETO TranslateTo; + ///---------------------------------------------------------------------------------------------------- + /// Set: + /// Set a translated string at runtime. + ///---------------------------------------------------------------------------------------------------- + LOCALIZATION_SET Set; + }; + LocalizationVT Localization; + + /* Fonts */ + struct FontsVT + { + ///---------------------------------------------------------------------------------------------------- + /// Get: + /// Requests a font to be sent to the given callback/receiver. + ///---------------------------------------------------------------------------------------------------- + FONTS_GETRELEASE Get; + ///---------------------------------------------------------------------------------------------------- + /// Release: + /// Releases a callback/receiver from a specific font. + ///---------------------------------------------------------------------------------------------------- + FONTS_GETRELEASE Release; + ///---------------------------------------------------------------------------------------------------- + /// AddFromFile: + /// Adds a font from disk and sends updates to the callback. + ///---------------------------------------------------------------------------------------------------- + FONTS_ADDFROMFILE AddFromFile; + ///---------------------------------------------------------------------------------------------------- + /// AddFromResource: + /// Adds a font from an embedded resource and sends updates to the callback. + ///---------------------------------------------------------------------------------------------------- + FONTS_ADDFROMRESOURCE AddFromResource; + ///---------------------------------------------------------------------------------------------------- + /// AddFromMemory: + /// Adds a font from memory and sends updates to the callback. + ///---------------------------------------------------------------------------------------------------- + FONTS_ADDFROMMEMORY AddFromMemory; + ///---------------------------------------------------------------------------------------------------- + /// Resize: + /// Resizes a font and sends updates to the callback. + ///---------------------------------------------------------------------------------------------------- + FONTS_RESIZE Resize; + }; + FontsVT Fonts; +} AddonAPI; + +typedef void (*ADDON_LOAD) (AddonAPI* aAPI); +typedef void (*ADDON_UNLOAD) (void); + +typedef struct AddonVersion +{ + signed short Major; + signed short Minor; + signed short Build; + signed short Revision; +} AddonVersion; + +typedef enum EAddonFlags +{ + EAddonFlags_None = 0, + EAddonFlags_IsVolatile = 1, /* is hooking functions or doing anything else that's volatile and game build dependant */ + EAddonFlags_DisableHotloading = 2, /* prevents unloading at runtime, aka. will require a restart if updated, etc. */ + EAddonFlags_OnlyLoadDuringGameLaunchSequence = 4 /* prevents loading the addon later than the initial character select */ +} EAddonFlags; + +typedef enum EUpdateProvider +{ + EUpdateProvider_None = 0, /* Does not support auto updating */ + EUpdateProvider_Raidcore = 1, /* Provider is Raidcore (via API) */ + EUpdateProvider_GitHub = 2, /* Provider is GitHub Releases */ + EUpdateProvider_Direct = 3, /* Provider is direct file link */ + EUpdateProvider_Self = 4 /* Provider is self check, addon has to request manually and version will not be verified */ +} EUpdateProvider; + +typedef struct AddonDefinition +{ + /* required */ + signed int Signature; /* Raidcore Addon ID, set to random unqiue negative integer if not on Raidcore */ + signed int APIVersion; /* Determines which AddonAPI struct revision the Loader will pass, use the NEXUS_API_VERSION define from Nexus.h */ + const char* Name; /* Name of the addon as shown in the library */ + AddonVersion Version; + const char* Author; /* Author of the addon */ + const char* Description; /* Short description */ + ADDON_LOAD Load; /* Pointer to Load Function of the addon */ + ADDON_UNLOAD Unload; /* Pointer to Unload Function of the addon. Not required if EAddonFlags::DisableHotloading is set. */ + EAddonFlags Flags; /* Information about the addon */ + + /* update fallback */ + EUpdateProvider Provider; /* What platform is the the addon hosted on */ + const char* UpdateLink; /* Link to the update resource */ +} AddonDefinition; + +#endif diff --git a/GolemHelper/GolemHelper.vcxproj b/GolemHelper/GolemHelper.vcxproj index 1ffc6d7..017a68e 100644 --- a/GolemHelper/GolemHelper.vcxproj +++ b/GolemHelper/GolemHelper.vcxproj @@ -141,7 +141,6 @@ - @@ -149,6 +148,7 @@ + @@ -183,7 +183,12 @@ NotUsing NotUsing - + + NotUsing + NotUsing + NotUsing + NotUsing + Create Create diff --git a/GolemHelper/GolemHelper.vcxproj.filters b/GolemHelper/GolemHelper.vcxproj.filters index 91bd6a7..cdf6328 100644 --- a/GolemHelper/GolemHelper.vcxproj.filters +++ b/GolemHelper/GolemHelper.vcxproj.filters @@ -13,9 +13,6 @@ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - {076f83a5-9043-4392-bb42-102eb54d65fb} - {27275069-8d0e-4c32-a745-abf5ae2384a5} @@ -25,6 +22,9 @@ {f98a3cf3-1848-4f30-ae62-50d10c81cf6f} + + {9474c716-f028-4778-8cd0-b5d8292d1586} + @@ -33,9 +33,6 @@ File di intestazione - - Definitions - Dependencies\imgui @@ -57,6 +54,9 @@ Dependencies\mumble + + Dependencies\nexus + diff --git a/GolemHelper/dllmain.cpp b/GolemHelper/dllmain.cpp index 8bc9a87..8b97787 100644 --- a/GolemHelper/dllmain.cpp +++ b/GolemHelper/dllmain.cpp @@ -6,7 +6,7 @@ #include #include "Dependencies/imgui/imgui.h" -#include "Definitions/Nexus.h" +#include "Dependencies/nexus/Nexus.h" #include "Dependencies/mumble/Mumble.h" AddonAPI* g_api = nullptr; @@ -201,7 +201,7 @@ void RenderUI() { if (ImGui::Begin("GolemHelper", &g_state.showUI, ImGuiWindowFlags_AlwaysAutoResize)) { - ImGui::TextColored(ImVec4(0.2f, 0.8f, 1.0f, 1.0f), "GolemHelper v1.1.0.0"); + ImGui::TextColored(ImVec4(0.2f, 0.8f, 1.0f, 1.0f), "GolemHelper v1.2.0.0"); ImGui::Separator(); ImGui::Text("Status:"); @@ -837,12 +837,26 @@ void Load(AddonAPI* aApi) { g_api->InputBinds.RegisterWithStruct("GolemHelper.ToggleUI", HandleUIToggleKeybind, kb_empty); g_api->InputBinds.RegisterWithStruct("GolemHelper.DebugMouse", HandleDebugKeybind, kb_empty); - g_api->Log(ELogLevel_INFO, "GolemHelper", "=== GolemHelper v1.1.0.0 Loaded ==="); + /* COMMENTO IN ATTESA DI CUSTOM ICON + g_api->Textures.GetOrCreateFromFile("GOLEM_HELPER_ICON", "addons/GolemHelper/GOLEM_HELPER_ICON.png"); + g_api->Textures.GetOrCreateFromFile("GOLEM_HELPER_ICON_HOVER", "addons/GolemHelper/GOLEM_HELPER_ICON_HOVER.png"); + */ + + g_api->QuickAccess.Add( + "GolemHelper.ToggleUI", + "GOLEM_HELPER_ICON", + "GOLEM_HELPER_ICON_HOVER", + "GolemHelper.ToggleUI", + "Toggle GolemHelper UI" + ); + + g_api->Log(ELogLevel_INFO, "GolemHelper", "=== GolemHelper v1.2.0.0 Loaded ==="); g_api->Log(ELogLevel_INFO, "GolemHelper", "GolemHelper addon loaded successfully!"); } void Unload() { if (g_api) { + g_api->QuickAccess.Remove("GolemHelper.ToggleUI"); g_api->Renderer.Deregister(RenderUI); g_api->Renderer.Deregister(RenderOptions); g_api->InputBinds.Deregister("GolemHelper.ApplyBoons"); @@ -865,9 +879,9 @@ extern "C" __declspec(dllexport) AddonDefinition* GetAddonDef() { def.Signature = -424248; def.APIVersion = NEXUS_API_VERSION; def.Name = "GolemHelper"; - def.Version = { 1, 1, 0, 0 }; + def.Version = { 1, 2, 0, 0 }; def.Author = "Azrub"; - def.Description = "Automatically applies boons and golem settings in the training area"; + def.Description = "Automates the process of setting optimal boon and golem configurations in the training area"; def.Load = Load; def.Unload = Unload; def.Flags = EAddonFlags_None;