/** * Ashita - Copyright (c) 2014 - 2021 atom0s [atom0s@live.com] * * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. * * By using Ashita, you agree to the above license and its terms. * * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were * made. You must do so in any reasonable manner, but not in any way that suggests the licensor * endorses you or your use. * * Non-Commercial - You may not use the material (Ashita) for commercial purposes. * * No-Derivatives - If you remix, transform, or build upon the material (Ashita), you may not distribute the * modified material. You are, however, allowed to submit the modified works back to the original * Ashita project in attempt to have it added to the original project. * * You may not apply legal terms or technological measures that legally restrict others * from doing anything the license permits. * * No warranties are given. */ #ifndef __ASHITA_ADK_H_INCLUDED__ #define __ASHITA_ADK_H_INCLUDED__ #if defined (_MSC_VER) && (_MSC_VER >= 1020) #pragma once #endif //////////////////////////////////////////////////////////////////////////////////////////////////// // // ReSharper Specific Disables (Please do not edit these!) // //////////////////////////////////////////////////////////////////////////////////////////////////// // // ReSharper disable CppUnusedIncludeDirective // ReSharper disable CppPolymorphicClassWithNonVirtualPublicDestructor // //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// // // Ashita Interface Version // // Defines the current interface version that Ashita is compiled against. This version must match // when a plugin is loaded for it to work properly. Invalid versions will result in the plugin // not loading and printing an error. // // DO NOT EDIT THIS! // //////////////////////////////////////////////////////////////////////////////////////////////////// #define ASHITA_INTERFACE_VERSION 3.0 //////////////////////////////////////////////////////////////////////////////////////////////////// // // Direct Input SDK Version Definition // //////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef DIRECTINPUT_VERSION #define DIRECTINPUT_VERSION 0x0800 #endif //////////////////////////////////////////////////////////////////////////////////////////////////// // // General Includes // //////////////////////////////////////////////////////////////////////////////////////////////////// #include #include #include "d3d8/includes/d3d8.h" #include "d3d8/includes/d3dx8.h" //////////////////////////////////////////////////////////////////////////////////////////////////// // // Ashita SDK Includes // //////////////////////////////////////////////////////////////////////////////////////////////////// #include "newIDirectInputDevice8A.h" #include "AS_BinaryData.h" #include "AS_CommandParser.h" #include "AS_Event.h" #include "AS_Exception.h" #include "AS_LockableObject.h" #include "AS_Memory.h" #include "AS_Objects.h" #include "AS_Registry.h" #include "AS_Thread.h" #include "ffxi/entity.h" #include "ffxi/enums.h" #include "ffxi/inventory.h" #include "ffxi/party.h" #include "ffxi/player.h" #include "ffxi/target.h" #include "imgui.h" //////////////////////////////////////////////////////////////////////////////////////////////////// // // Forward Declarations // //////////////////////////////////////////////////////////////////////////////////////////////////// struct IEntity; // IEntity forward-declaration. struct IInventory; // IInventory forward-declaration. struct IParty; // IParty forward-declaration. struct IPlayer; // IPlayer forward-declaration. struct ITarget; // ITarget forward-declaration. struct IFontObject; // IFontObject forward declaration. struct IPrimitiveObject; // IPrimitiveObject forward declaration. struct IKeyboard; // IKeyboard forward declaration. struct IMouse; // IMouse forward declaration. //////////////////////////////////////////////////////////////////////////////////////////////////// // // Ashita Version Return Object // // Used with the GetVersion export of the Ashita.dll file, this can be used to read the // current version of Ashita from the file properly. // //////////////////////////////////////////////////////////////////////////////////////////////////// #pragma warning(disable : 4201) union ashitaversion_t { // The raw version value. uint64_t Version; // Union based data parts of Version. struct { uint16_t Major; uint16_t Minor; uint16_t Build; uint16_t Revision; }; }; #pragma warning(default : 4201) //////////////////////////////////////////////////////////////////////////////////////////////////// // // Ashita Install Parameters // // Used with the Install export of Ashita.dll file. These are the parameters Ashita expects // to be passed to the install call when it is first being prepared for usage. // //////////////////////////////////////////////////////////////////////////////////////////////////// struct ashitainstallparams_t { HMODULE ModuleInstance; // The module instance of Ashita.dll. uint32_t LanguageId; // The language id to use. char BootScript[MAX_PATH]; // The boot script to load for the boot configurations. }; //////////////////////////////////////////////////////////////////////////////////////////////////// // // Forward Declarations // //////////////////////////////////////////////////////////////////////////////////////////////////// struct lua_State { }; //////////////////////////////////////////////////////////////////////////////////////////////////// // // Ashita Enumerations // // Enumerations used within Ashita's various interfaces and functions. // //////////////////////////////////////////////////////////////////////////////////////////////////// namespace Ashita { /** * Command Input Type Enumeration * * Used with the Ashita ChatManager command functions. */ enum class CommandInputType : int32_t { ForceHandle = -3, // Informs Ashita to handle the command by force. Script = -2, // Informs Ashita to handle the command as an Ashita based script command. Parse = -1, // Informs Ashita to handle the command as an Ashita based command. Menu = 0, // Informs Ashita to handle the command as if it were input via an in-game menu. Typed = 1, // Informs Ashita to handle the command as if it were typed into the chat window by the player. Macro = 2 // Informs Ashita to handle the command as if it were invoked from a macro. }; /** * Frame Anchor Enumeration * * Used with Ashita's custom font objects. */ enum class FrameAnchor : uint32_t { TopLeft = 0, // Anchors the font object to the top-left. TopRight = 1, // Anchors the font object to the top-right. BottomLeft = 2, // Anchors the font object to the bottom-left. BottomRight = 3, // Anchors the font object to the bottom-right. Right = 1, // Anchors the font object to the right. Bottom = 2 // Anchors the font object to the bottom. }; /** * FrameAnchor bitwise AND operator override. * * @param {FrameAnchor} a - The first frame anchor value. * @param {FrameAnchor} b - The second frame anchor value. * @returns {uint32_t} The AND value of a and b. */ inline uint32_t operator& (const FrameAnchor& a, const FrameAnchor& b) { return (uint32_t)((uint32_t)a & (uint32_t)b); } /** * Mouse Input Enumeration * * Used with Ashita's custom font objects mouse event callback. */ enum class MouseInput : uint32_t { LeftClick = 0, // Left mouse button was clicked. RightClick = 1, // Right mouse button was clicked. MiddleClick = 2, // Middle mouse button was clicked. X1Click = 3, // X1 mouse button was clicked. X2Click = 4, // X2 mouse button was clicked. MouseWheelUp = 5, // Mouse wheel was scrolled up. MouseWheelDown = 6, // Mouse wheel was scrolled down. MouseMove = 7 // Mouse was moved over the object. }; /** * Log Level Enumeration * * Used with Ashita's logging manager. */ enum class LogLevel : uint32_t { None = 0, Information = 1, Warning = 2, Error = 3, Debug = 4 }; }; // namespace Ashita //////////////////////////////////////////////////////////////////////////////////////////////////// // // Input Defines // //////////////////////////////////////////////////////////////////////////////////////////////////// typedef HRESULT /**/(__stdcall *getdatacallback_t)(DWORD, LPDIDEVICEOBJECTDATA, DWORD, LPDWORD, DWORD); typedef HRESULT /**/(__stdcall *getstatecallback_t)(DWORD, LPVOID); typedef BOOL /**/(__stdcall *keyboardcallback_t)(WPARAM, LPARAM); typedef BOOL /**/(__stdcall *mousecallback_t)(UINT, WPARAM, LPARAM); /////////////////////////////////////////////////////////////////////////////////////////////////// // // Font Object Defines // /////////////////////////////////////////////////////////////////////////////////////////////////// typedef std::function MOUSEEVENT; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Resource File Definitions // // IAbility // // An ability entry parsed from the games data files. Contatins information on how the // ability works, requirements, and other useful information. // // ISpell // // A spell entry parsed from the games data files. Contains information on how the spell // works, requirements, and other useful information. // // IMonstrosityAbility // // A monstrosity ability entry. Contains info on the abilities requirements. (Used for items.) // // IItem // // An item entry parsed from the games data files. Contains information on how the item // works, can be used, requirements, and other useful information. Also contains the items // bitmap icon used and displayed in-game. // /////////////////////////////////////////////////////////////////////////////////////////////////// struct IAbility { uint16_t Id; // The abilities id. (Not the same as its recast id!) uint8_t Type; // The abilities type. (Type & 7) uint8_t Element; // The abilities element. uint16_t ListIconId; // The abilities list icon id. uint16_t ManaCost; // The abilities mana cost. uint16_t TimerId; // The abilities timer id. uint16_t ValidTargets; // The abilities valid targets. int16_t TP; // The abilities TP cost. uint8_t Unknown0000; // Unknown. uint8_t MonsterLevel; // The abilities monster level. int8_t Range; // The abilities usage range. (Range % 0x0F) uint8_t Unknown0001[30]; // Unknown. uint8_t EOE; // EOE (End of entry. 0xFF) const char* Name[3]; // The abilities name. (0 = Default, 1 = Japanese, 2 = English) const char* Description[3]; // The abilities description. (0 = Default, 1 = Japanese, 2 = English) }; struct ISpell { uint16_t Index; // The spells index. (Used with recast.) uint16_t Type; // The spells magic type. uint16_t Element; // The spells element type. uint16_t ValidTargets; // The spells valid targets. uint16_t Skill; // The spells magic skill type. uint16_t ManaCost; // The spells mana coast. uint8_t CastTime; // The spells cast time. (CastTime / 4.0) uint8_t RecastDelay; // The spells recast delay. (RecastDelay / 4.0) int16_t LevelRequired[24]; // The spells level requirements. (Per-job, if 0xFF, cannot be learned.) uint16_t Id; // The spells id. uint16_t ListIcon1; // The spells icon id (1). uint16_t ListIcon2; // The spells icon id (2). uint8_t Requirements; // The spells requirements. int8_t Range; // The spells casting range. (Range % 0x0F) uint8_t Unknown0000[29]; // Unknown. uint8_t EOE; // EOE (End of entry. 0xFF) const char* Name[3]; // The spells name. (0 = Default, 1 = Japanese, 2 = English) const char* Description[3]; // The spells description. (0 = Default, 1 = Japanese, 2 = English) }; struct IMonstrosityAbility { uint16_t MoveId; // The monster move id of the ability. int8_t Level; // The monster level of the ability. uint8_t Unknown0000; // Unknown. }; struct IItem { uint32_t ItemId; // The items id. uint16_t Flags; // The items flags. uint16_t StackSize; // The items stack size. uint16_t ItemType; // The items type. uint16_t ResourceId; // The items resource id. (Mainly used for AH sorting.) uint16_t ValidTargets; // The items valid targets for use. uint16_t Level; // The items level requirement to use. uint16_t Slots; // The items equipment slots where the item can be equipped to. uint16_t Races; // The items races that can use the item. uint32_t Jobs; // The items jobs that can use the item. uint8_t SuperiorLevel; // The items superior level. uint16_t ShieldSize; // The items shield size. uint8_t MaxCharges; // The items max charges. uint16_t CastTime; // The items cast time. uint16_t CastDelay; // The items cast delay. uint32_t RecastDelay; // The items recast delay. uint16_t BaseItemId; // The items base item id used for upgrades. uint16_t ItemLevel; // The items item level. uint16_t Damage; // The items damage. uint16_t Delay; // The items delay. uint16_t DPS; // The items damae per second. uint8_t Skill; // The items skill type. uint8_t JugSize; // The items jug size. uint16_t InstinctCost; // The items instinct cost. uint16_t MonstrosityId; // The items monstrosity id. char MonstrosityName[32]; // The items monstrosity name. IMonstrosityAbility MonstrosityAbilities[16]; // The items monstrosity abilities. uint16_t PuppetSlotId; // The items slot id (for PUP). uint32_t PuppetElements; // The items elements (for PUP). const char* Name[3]; // The items name. const char* Description[3]; // The items description. const char* LogNameSingular[3]; // The items log name (singular). const char* LogNamePlural[3]; // The items log name (plural). uint32_t ImageSize; // The items image size. uint8_t ImageType; // The items image type. uint8_t ImageName[0x10]; // The items image name. uint8_t Bitmap[0x980]; // The items bitmap data. }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Chat Manager // // Ashita chat manager that interacts with the games chat and command systems. // /////////////////////////////////////////////////////////////////////////////////////////////////// interface IChatManager { // Command Functions virtual void ParseCommand(const char* command, int32_t type) = 0; virtual void QueueCommand(const char* command, int32_t type) = 0; // Chat Functions virtual void AddChatMessage(int32_t mode, const char* message) = 0; virtual int32_t ParseAutoTranslate(const char* message, char* buffer, int32_t bufferSize, bool useBrackets) = 0; // Script Functions virtual void RunScript(bool useTaskQueue, const char* file) = 0; // Input Text Functions virtual const char* GetInputText(void) const = 0; virtual void SetInputText(const char* message) = 0; virtual bool IsInputOpen(void) = 0; // Chat Functions (Helpers) virtual void Write(const char* msg) = 0; virtual void Writef(const char* format, ...) = 0; }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Configuration Manager // // Ashita configuration manager that interacts with simple XML based configuration files. // /////////////////////////////////////////////////////////////////////////////////////////////////// interface IConfigurationManager { // Configuration File Functions virtual bool Load(const char* alias, const char* file) = 0; virtual bool Save(const char* alias, const char* file) = 0; virtual void Remove(const char* alias) = 0; // Value Related Functions virtual void set_value(const char* alias, const char* name, const char* value) = 0; virtual const char* get_string(const char* alias, const char* name) = 0; virtual bool get_bool(const char* alias, const char* name, bool defaultValue) = 0; virtual uint8_t get_uint8(const char* alias, const char* name, uint8_t defaultValue) = 0; virtual uint16_t get_uint16(const char* alias, const char* name, uint16_t defaultValue) = 0; virtual uint32_t get_uint32(const char* alias, const char* name, uint32_t defaultValue) = 0; virtual uint64_t get_uint64(const char* alias, const char* name, uint64_t defaultValue) = 0; virtual int8_t get_int8(const char* alias, const char* name, int8_t defaultValue) = 0; virtual int16_t get_int16(const char* alias, const char* name, int16_t defaultValue) = 0; virtual int32_t get_int32(const char* alias, const char* name, int32_t defaultValue) = 0; virtual int64_t get_int64(const char* alias, const char* name, int64_t defaultValue) = 0; virtual float get_float(const char* alias, const char* name, float defaultValue) = 0; virtual double get_double(const char* alias, const char* name, double defaultValue) = 0; }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Data Manager // // Ashita data manager that interacts with various in-game memory structures such as // inventory, player, party, target, etc. // /////////////////////////////////////////////////////////////////////////////////////////////////// interface IDataManager { virtual IEntity* GetEntity(void) = 0; virtual IInventory* GetInventory(void) = 0; virtual IParty* GetParty(void) = 0; virtual IPlayer* GetPlayer(void) = 0; virtual ITarget* GetTarget(void) = 0; }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Font Manager // // Ashita font manager that interacts with Ashitas built-in highly customizable font objects. // /////////////////////////////////////////////////////////////////////////////////////////////////// interface IFontManager { virtual IFontObject* Create(const char* alias) = 0; virtual IFontObject* Get(const char* alias) = 0; virtual void Delete(const char* alias) = 0; virtual bool GetHideObjects(void) const = 0; virtual void SetHideObjects(bool hide) = 0; }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Font Object // // Ashita font object interface that allows interaction with the highly customizable font objects. // /////////////////////////////////////////////////////////////////////////////////////////////////// interface IFontObject { // Helper Functions virtual bool HitTest(int32_t x, int32_t y) = 0; // Property Getters virtual const char* GetAlias(void) const = 0; virtual bool GetVisibility(void) const = 0; virtual const char* GetFontFamily(void) const = 0; virtual int32_t GetFontHeight(void) const = 0; virtual float GetPositionX(void) const = 0; virtual float GetPositionY(void) const = 0; virtual bool GetLocked(void) const = 0; virtual float GetPadding(void) const = 0; virtual uint32_t GetAnchor(void) const = 0; virtual uint32_t GetAnchorParent(void) const = 0; virtual D3DCOLOR GetColor(void) const = 0; virtual uint32_t GetCreateFlags(void) const = 0; virtual uint32_t GetDrawFlags(void) const = 0; virtual bool GetBold(void) const = 0; virtual bool GetItalic(void) const = 0; virtual bool GetRightJustified(void) const = 0; virtual const char* GetText(void) const = 0; virtual bool GetDirtyFlag(void) const = 0; virtual bool GetAutoResize(void) const = 0; virtual float GetWindowWidth(void) const = 0; virtual float GetWindowHeight(void) const = 0; virtual float GetRealPositionX(void) const = 0; virtual float GetRealPositionY(void) const = 0; virtual MOUSEEVENT GetMouseEventFunction(void) const = 0; virtual void GetTextSize(SIZE* size) const = 0; virtual IFontObject* GetParent(void) const = 0; virtual IPrimitiveObject* GetBackground(void) const = 0; // Property Setters virtual void SetAlias(const char* alias) = 0; virtual void SetVisibility(bool visible) = 0; virtual void SetFontFamily(const char* family) = 0; virtual void SetFontHeight(int32_t height) = 0; virtual void SetPositionX(float x) = 0; virtual void SetPositionY(float y) = 0; virtual void SetLocked(bool locked) = 0; virtual void SetPadding(float size) = 0; virtual void SetAnchor(uint32_t anchor) = 0; virtual void SetAnchorParent(uint32_t anchor) = 0; virtual void SetColor(D3DCOLOR color) = 0; virtual void SetCreateFlags(uint32_t flags) = 0; virtual void SetDrawFlags(uint32_t flags) = 0; virtual void SetBold(bool bold) = 0; virtual void SetItalic(bool italic) = 0; virtual void SetRightJustified(bool justified) = 0; virtual void SetText(const char* text) = 0; virtual void SetDirtyFlag(bool dirty) = 0; virtual void SetAutoResize(bool resize) = 0; virtual void SetWindowWidth(float width) = 0; virtual void SetWindowHeight(float height) = 0; virtual void SetMouseEventFunction(MOUSEEVENT func) = 0; virtual void SetParent(IFontObject* parent) = 0; }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Input Manager // // Ashita input manager that interacts with the hooked keyboard and mouse devices. // /////////////////////////////////////////////////////////////////////////////////////////////////// interface IInputManager { virtual IKeyboard* GetKeyboard(void) const = 0; virtual IMouse* GetMouse(void) const = 0; }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Log Manager // // Ashita log manager that interacts with the per-instance created log file that Ashita uses to // record various information about its operation. This file can be used to help debug issues // with addons and plugins. // /////////////////////////////////////////////////////////////////////////////////////////////////// interface ILogManager { virtual bool Log(uint32_t level, const char* source, const char* msg) = 0; virtual bool Logf(uint32_t level, const char* source, const char* fmt, ...) = 0; }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Packet Manager // // Ashita packet manager that interacts with the games packet system. // /////////////////////////////////////////////////////////////////////////////////////////////////// interface IPacketManager { virtual void AddIncomingPacket(uint16_t id, uint32_t len, void* data) = 0; virtual void AddOutgoingPacket(uint16_t id, uint32_t len, void* data) = 0; }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Plugin Manager // // Ashita plugin manager that interacts with Ashitas internal plugin system. // /////////////////////////////////////////////////////////////////////////////////////////////////// interface IPluginManager { virtual bool Load(const char* name) = 0; virtual bool Unload(const char* name) = 0; virtual void UnloadAll(void) = 0; virtual void* GetPlugin(const char* name) = 0; virtual void* GetPlugin(uint32_t index) = 0; virtual uint32_t GetPluginCount(void) = 0; }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Pointer Manager // // Ashita pointer manager that interacts with Ashitas internal pointer system. // /////////////////////////////////////////////////////////////////////////////////////////////////// interface IPointerManager { virtual uintptr_t GetPointer(const char* name) = 0; }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Primitive Object // // Ashita primitive object interface that allows interaction with the primitive objects created // within Ashita via the Font Manager. // /////////////////////////////////////////////////////////////////////////////////////////////////// interface IPrimitiveObject { // Helper Functions virtual void SetTextureFromFile(const char* file) = 0; virtual void SetTextureFromResource(const char* moduleName, const char* resource) = 0; virtual bool HitTest(int32_t x, int32_t y) = 0; // Property Getters virtual bool GetVisibility(void) const = 0; virtual float GetPositionX(void) const = 0; virtual float GetPositionY(void) const = 0; virtual float GetWidth(void) const = 0; virtual float GetHeight(void) const = 0; virtual D3DCOLOR GetColor(void) const = 0; virtual bool GetBorderVisibility(void) const = 0; virtual D3DCOLOR GetBorderColor(void) const = 0; virtual uint32_t GetBorderFlags(void) const = 0; virtual Ashita::asrect_t GetBorderSizes(void) const = 0; // Property Setters virtual void SetVisibility(bool isVisible) = 0; virtual void SetPositionX(float x) = 0; virtual void SetPositionY(float y) = 0; virtual void SetWidth(float width) = 0; virtual void SetHeight(float height) = 0; virtual void SetColor(D3DCOLOR color) = 0; virtual void SetBorderVisibility(bool isVisible) = 0; virtual void SetBorderColor(D3DCOLOR color) = 0; virtual void SetBorderFlags(uint32_t flags) = 0; virtual void SetBorderSizes(uint32_t top, uint32_t right, uint32_t bottom, uint32_t left) = 0; }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Resource Manager // // Ashita resource manager interface that interacts with the internal DAT file parser to obtain // various information about the games content. (Abilities, Spells, Items, Various Strings, etc.) // /////////////////////////////////////////////////////////////////////////////////////////////////// interface IResourceManager { // Ability Functions virtual IAbility* GetAbilityById(uint32_t id) = 0; virtual IAbility* GetAbilityByName(const char* name, uint32_t languageId) = 0; virtual IAbility* GetAbilityByTimerId(uint32_t id) = 0; // Spell Functions virtual ISpell* GetSpellById(uint32_t id) = 0; virtual ISpell* GetSpellByName(const char* name, uint32_t languageId) = 0; // Item Functions virtual IItem* GetItemById(uint32_t id) = 0; virtual IItem* GetItemByName(const char* name, uint32_t languageId) = 0; // String Functions virtual const char* GetString(const char* table, uint32_t index) = 0; virtual const char* GetString(const char* table, uint32_t index, uint32_t languageId) = 0; virtual int32_t GetString(const char* table, const char* name) = 0; virtual int32_t GetString(const char* table, const char* name, uint32_t languageId) = 0; }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Data Related Interfaces // // IEntity // // Exposes functions to interact with the games various entities. (Players, Monsters, NPCs, etc.) // // IInventory // // Exposes functions to interact with the inventory block of the games data. This includes the // players inventory and storage, the players equipment, and the treasure pool. // // IParty // // Exposes functions to interact with the games party data. // // IPlayer // // Exposes functions to interact with the local players information. (Level, job, skills, etc.) // // ITarget // // Exposes functions to interact with the current target information. // /////////////////////////////////////////////////////////////////////////////////////////////////// interface IEntity { // WARNING: Plugins should not use this function! // // Use the Get/Set functions instead to help ensure your plugin does not // break between updates of Ashita! virtual Ashita::FFXI::ffxi_entity_t* GetEntity(uint32_t index) const = 0; // Property Getters virtual float GetLocalX(uint32_t index) const = 0; virtual float GetLocalY(uint32_t index) const = 0; virtual float GetLocalZ(uint32_t index) const = 0; virtual float GetLocalRoll(uint32_t index) const = 0; virtual float GetLocalYaw(uint32_t index) const = 0; virtual float GetLocalPitch(uint32_t index) const = 0; virtual float GetLastX(uint32_t index) const = 0; virtual float GetLastY(uint32_t index) const = 0; virtual float GetLastZ(uint32_t index) const = 0; virtual float GetLastRoll(uint32_t index) const = 0; virtual float GetLastYaw(uint32_t index) const = 0; virtual float GetLastPitch(uint32_t index) const = 0; virtual float GetMoveX(uint32_t index) const = 0; virtual float GetMoveY(uint32_t index) const = 0; virtual float GetMoveZ(uint32_t index) const = 0; virtual uint32_t GetTargetIndex(uint32_t index) const = 0; virtual uint32_t GetServerId(uint32_t index) const = 0; virtual const char* GetName(uint32_t index) const = 0; virtual float GetSpeed(uint32_t index) const = 0; virtual float GetAnimationSpeed(uint32_t index) const = 0; virtual uintptr_t GetWarpPointer(uint32_t index) const = 0; virtual float GetDistance(uint32_t index) const = 0; virtual float GetHeading(uint32_t index) const = 0; virtual uintptr_t GetPetOwnerId(uint32_t index) const = 0; virtual uint8_t GetHealthPercent(uint32_t index) const = 0; virtual uint8_t GetManaPercent(uint32_t index) const = 0; virtual uint8_t GetEntityType(uint32_t index) const = 0; virtual uint8_t GetRace(uint32_t index) const = 0; virtual uint16_t GetModelFade(uint32_t index) const = 0; virtual uint16_t GetLookHair(uint32_t index) const = 0; virtual uint16_t GetLookHead(uint32_t index) const = 0; virtual uint16_t GetLookBody(uint32_t index) const = 0; virtual uint16_t GetLookHands(uint32_t index) const = 0; virtual uint16_t GetLookLegs(uint32_t index) const = 0; virtual uint16_t GetLookFeet(uint32_t index) const = 0; virtual uint16_t GetLookMain(uint32_t index) const = 0; virtual uint16_t GetLookSub(uint32_t index) const = 0; virtual uint16_t GetLookRanged(uint32_t index) const = 0; virtual uint16_t GetActionTimer1(uint32_t index) const = 0; virtual uint16_t GetActionTimer2(uint32_t index) const = 0; virtual uint32_t GetRenderFlags0(uint32_t index) const = 0; virtual uint32_t GetRenderFlags1(uint32_t index) const = 0; virtual uint32_t GetRenderFlags2(uint32_t index) const = 0; virtual uint32_t GetRenderFlags3(uint32_t index) const = 0; virtual uint32_t GetRenderFlags4(uint32_t index) const = 0; virtual uint16_t GetNpcSpeechLoop(uint32_t index) const = 0; virtual uint16_t GetNpcSpeechFrame(uint32_t index) const = 0; virtual float GetSpeed2(uint32_t index) const = 0; virtual uint16_t GetNpcWalkPosition1(uint32_t index) const = 0; virtual uint16_t GetNpcWalkPosition2(uint32_t index) const = 0; virtual uint16_t GetNpcWalkMode(uint32_t index) const = 0; virtual uint16_t GetCostumeId(uint32_t index) const = 0; virtual uint32_t GetStatus(uint32_t index) const = 0; virtual uint32_t GetStatusServer(uint32_t index) const = 0; virtual uint32_t GetStatusNpcChat(uint32_t index) const = 0; virtual uint32_t GetClaimServerId(uint32_t index) const = 0; virtual uint8_t* GetAnimations(uint32_t index) const = 0; virtual uint16_t GetAnimationTick(uint32_t index) const = 0; virtual uint16_t GetAnimationStep(uint32_t index) const = 0; virtual uint8_t GetAnimationPlay(uint32_t index) const = 0; virtual uint16_t GetEmoteTargetIndex(uint32_t index) const = 0; virtual uint16_t GetEmoteId(uint32_t index) const = 0; virtual uint32_t GetEmoteIdString(uint32_t index) const = 0; virtual uintptr_t GetEmoteTargetWarpPointer(uint32_t index) const = 0; virtual uint32_t GetSpawnFlags(uint32_t index) const = 0; virtual uint32_t GetLinkshellColor(uint32_t index) const = 0; virtual uint16_t GetNameColor(uint32_t index) const = 0; virtual uint16_t GetCampaignNameFlag(uint32_t index) const = 0; virtual uint16_t GetFishingTimer(uint32_t index) const = 0; virtual uint16_t GetFishingCastTimer(uint32_t index) const = 0; virtual uint32_t GetFishingUnknown0000(uint32_t index) const = 0; virtual uint32_t GetFishingUnknown0001(uint32_t index) const = 0; virtual uint16_t GetFishingUnknown0002(uint32_t index) const = 0; virtual uint16_t GetTargetedIndex(uint32_t index) const = 0; virtual uint16_t GetPetTargetIndex(uint32_t index) const = 0; virtual uint8_t GetBallistaScoreFlag(uint32_t index) const = 0; virtual uint8_t GetPankrationEnabled(uint32_t index) const = 0; virtual uint8_t GetPankrationFlagFlip(uint32_t index) const = 0; virtual float GetModelSize(uint32_t index) const = 0; virtual uint16_t GetMonstrosityFlag(uint32_t index) const = 0; virtual uint16_t GetMonstrosityNameId(uint32_t index) const = 0; virtual const char* GetMonstrosityName(uint32_t index) const = 0; // Property Setters virtual void SetLocalX(uint32_t index, float x) const = 0; virtual void SetLocalY(uint32_t index, float y) const = 0; virtual void SetLocalZ(uint32_t index, float z) const = 0; virtual void SetLocalRoll(uint32_t index, float roll) const = 0; virtual void SetLocalYaw(uint32_t index, float yaw) const = 0; virtual void SetLocalPitch(uint32_t index, float pitch) const = 0; virtual void SetLastX(uint32_t index, float x) const = 0; virtual void SetLastY(uint32_t index, float y) const = 0; virtual void SetLastZ(uint32_t index, float z) const = 0; virtual void SetLastRoll(uint32_t index, float roll) const = 0; virtual void SetLastYaw(uint32_t index, float yaw) const = 0; virtual void SetLastPitch(uint32_t index, float pitch) const = 0; virtual void SetMoveX(uint32_t index, float x) const = 0; virtual void SetMoveY(uint32_t index, float y) const = 0; virtual void SetMoveZ(uint32_t index, float z) const = 0; virtual void SetTargetIndex(uint32_t index, uint32_t targetIndex) const = 0; virtual void SetServerId(uint32_t index, uint32_t serverId) const = 0; virtual void SetName(uint32_t index, const char* name) const = 0; virtual void SetSpeed(uint32_t index, float speed) const = 0; virtual void SetAnimationSpeed(uint32_t index, float speed) const = 0; virtual void SetWarpPointer(uint32_t index, uintptr_t ptr) const = 0; virtual void SetDistance(uint32_t index, float distance) const = 0; virtual void SetHeading(uint32_t index, float heading) const = 0; virtual void SetPetOwnerId(uint32_t index, uintptr_t petOwnerId) const = 0; virtual void SetHealthPercent(uint32_t index, uint8_t hpp) const = 0; virtual void SetManaPercent(uint32_t index, uint8_t mpp) const = 0; virtual void SetEntityType(uint32_t index, uint8_t type) const = 0; virtual void SetRace(uint32_t index, uint8_t race) const = 0; virtual void SetModelFade(uint32_t index, uint16_t fade) const = 0; virtual void SetLookHair(uint32_t index, uint16_t hair) const = 0; virtual void SetLookHead(uint32_t index, uint16_t head) const = 0; virtual void SetLookBody(uint32_t index, uint16_t body) const = 0; virtual void SetLookHands(uint32_t index, uint16_t hands) const = 0; virtual void SetLookLegs(uint32_t index, uint16_t legs) const = 0; virtual void SetLookFeet(uint32_t index, uint16_t feet) const = 0; virtual void SetLookMain(uint32_t index, uint16_t main) const = 0; virtual void SetLookSub(uint32_t index, uint16_t sub) const = 0; virtual void SetLookRanged(uint32_t index, uint16_t ranged) const = 0; virtual void SetActionTimer1(uint32_t index, uint16_t time) const = 0; virtual void SetActionTimer2(uint32_t index, uint16_t time) const = 0; virtual void SetRenderFlags0(uint32_t index, uint32_t flags) const = 0; virtual void SetRenderFlags1(uint32_t index, uint32_t flags) const = 0; virtual void SetRenderFlags2(uint32_t index, uint32_t flags) const = 0; virtual void SetRenderFlags3(uint32_t index, uint32_t flags) const = 0; virtual void SetRenderFlags4(uint32_t index, uint32_t flags) const = 0; virtual void SetNpcSpeechLoop(uint32_t index, uint16_t loop) const = 0; virtual void SetNpcSpeechFrame(uint32_t index, uint16_t frame) const = 0; virtual void SetSpeed2(uint32_t index, float speed) const = 0; virtual void SetNpcWalkPosition1(uint32_t index, uint16_t pos) const = 0; virtual void SetNpcWalkPosition2(uint32_t index, uint16_t pos) const = 0; virtual void SetNpcWalkMode(uint32_t index, uint16_t mode) const = 0; virtual void SetCostumeId(uint32_t index, uint16_t costume) const = 0; virtual void SetStatus(uint32_t index, uint32_t status) const = 0; virtual void SetStatusServer(uint32_t index, uint32_t status) const = 0; virtual void SetStatusNpcChat(uint32_t index, uint32_t status) const = 0; virtual void SetClaimServerId(uint32_t index, uint32_t claimid) const = 0; virtual void SetAnimations(uint32_t index, uint8_t* data) const = 0; virtual void SetAnimationTick(uint32_t index, uint16_t tick) const = 0; virtual void SetAnimationStep(uint32_t index, uint16_t step) const = 0; virtual void SetAnimationPlay(uint32_t index, uint8_t play) const = 0; virtual void SetEmoteTargetIndex(uint32_t index, uint16_t targetIndex) const = 0; virtual void SetEmoteId(uint32_t index, uint16_t emoteid) const = 0; virtual void SetEmoteIdString(uint32_t index, uint32_t emoteid) const = 0; virtual void SetEmoteTargetWarpPointer(uint32_t index, uintptr_t warpPointer) const = 0; virtual void SetSpawnFlags(uint32_t index, uint32_t flags) const = 0; virtual void SetLinkshellColor(uint32_t index, uint32_t color) const = 0; virtual void SetNameColor(uint32_t index, uint16_t color) const = 0; virtual void SetCampaignNameFlag(uint32_t index, uint16_t flags) const = 0; virtual void SetFishingTimer(uint32_t index, uint16_t timer) const = 0; virtual void SetFishingCastTimer(uint32_t index, uint16_t timer) const = 0; virtual void SetFishingUnknown0000(uint32_t index, uint32_t unk) const = 0; virtual void SetFishingUnknown0001(uint32_t index, uint32_t unk) const = 0; virtual void SetFishingUnknown0002(uint32_t index, uint16_t unk) const = 0; virtual void SetTargetedIndex(uint32_t index, uint16_t targetedIndex) const = 0; virtual void SetPetTargetIndex(uint32_t index, uint16_t petIndex) const = 0; virtual void SetBallistaScoreFlag(uint32_t index, uint8_t flag) const = 0; virtual void SetPankrationEnabled(uint32_t index, uint8_t enabled) const = 0; virtual void SetPankrationFlagFlip(uint32_t index, uint8_t flagflip) const = 0; virtual void SetModelSize(uint32_t index, float size) const = 0; virtual void SetMonstrosityFlag(uint32_t index, uint16_t flag) const = 0; virtual void SetMonstrosityNameId(uint32_t index, uint16_t nameid) const = 0; virtual void SetMonstrosityName(uint32_t index, const char* name) const = 0; }; interface IInventory { virtual Ashita::FFXI::item_t* GetItem(int32_t containerId, int32_t slotId) const = 0; virtual uint16_t GetContainerMax(int32_t containerId) const = 0; virtual Ashita::FFXI::treasureitem_t* GetTreasureItem(int32_t slotId) const = 0; virtual Ashita::FFXI::equipment_t* GetEquippedItem(int32_t equipSlotId) const = 0; virtual uint32_t GetCraftWait(void) const = 0; }; interface IParty { // Alliance Property Getters virtual uint32_t GetAllianceLeaderServerId(void) const = 0; virtual uint32_t GetAllianceParty0LeaderServerId(void) const = 0; virtual uint32_t GetAllianceParty1LeaderServerId(void) const = 0; virtual uint32_t GetAllianceParty2LeaderServerId(void) const = 0; virtual int8_t GetAllianceParty0Visible(void) const = 0; virtual int8_t GetAllianceParty1Visible(void) const = 0; virtual int8_t GetAllianceParty2Visible(void) const = 0; virtual int8_t GetAllianceParty0MemberCount(void) const = 0; virtual int8_t GetAllianceParty1MemberCount(void) const = 0; virtual int8_t GetAllianceParty2MemberCount(void) const = 0; virtual int8_t GetAllianceInvited(void) const = 0; // Party Member Property Getters virtual uint8_t GetMemberIndex(uint32_t index) const = 0; virtual uint8_t GetMemberNumber(uint32_t index) const = 0; virtual const char* GetMemberName(uint32_t index) const = 0; virtual uint32_t GetMemberServerId(uint32_t index) const = 0; virtual uint32_t GetMemberTargetIndex(uint32_t index) const = 0; virtual uint32_t GetMemberCurrentHP(uint32_t index) const = 0; virtual uint32_t GetMemberCurrentMP(uint32_t index) const = 0; virtual uint32_t GetMemberCurrentTP(uint32_t index) const = 0; virtual uint8_t GetMemberCurrentHPP(uint32_t index) const = 0; virtual uint8_t GetMemberCurrentMPP(uint32_t index) const = 0; virtual uint16_t GetMemberZone(uint32_t index) const = 0; virtual uint32_t GetMemberFlagMask(uint32_t index) const = 0; virtual uint8_t GetMemberMainJob(uint32_t index) const = 0; virtual uint8_t GetMemberMainJobLevel(uint32_t index) const = 0; virtual uint8_t GetMemberSubJob(uint32_t index) const = 0; virtual uint8_t GetMemberSubJobLvl(uint32_t index) const = 0; virtual uint32_t GetMemberServerId2(uint32_t index) const = 0; virtual uint8_t GetMemberCurrentHPP2(uint32_t index) const = 0; virtual uint8_t GetMemberCurrentMPP2(uint32_t index) const = 0; virtual uint8_t GetMemberActive(uint32_t index) const = 0; }; interface IPlayer { // Property Getters virtual uint32_t GetHealthMax(void) const = 0; virtual uint32_t GetManaMax(void) const = 0; virtual uint8_t GetMainJob(void) const = 0; virtual uint8_t GetMainJobLevel(void) const = 0; virtual uint8_t GetSubJob(void) const = 0; virtual uint8_t GetSubJobLevel(void) const = 0; virtual uint16_t GetExpCurrent(void) const = 0; virtual uint16_t GetExpNeeded(void) const = 0; virtual int16_t GetStat(uint32_t stat) const = 0; virtual int16_t GetStatsModifiers(uint32_t stat) const = 0; virtual int16_t GetAttack(void) const = 0; virtual int16_t GetDefense(void) const = 0; virtual int16_t GetResist(uint32_t stat) const = 0; virtual uint16_t GetTitle(void) const = 0; virtual uint16_t GetRank(void) const = 0; virtual uint16_t GetRankPoints(void) const = 0; virtual uint8_t GetNation(void) const = 0; virtual uint8_t GetResidence(void) const = 0; virtual uint32_t GetHomepoint(void) const = 0; virtual Ashita::FFXI::combatskill_t GetCombatSkill(uint32_t skill) const = 0; virtual Ashita::FFXI::craftskill_t GetCraftSkill(uint32_t skill) const = 0; virtual uint16_t GetAbilityRecast(uint32_t index) const = 0; virtual uint16_t GetAbilityRecastTimerId(uint32_t index) const = 0; virtual uint16_t GetLimitPoints(void) const = 0; virtual uint8_t GetMeritPoints(void) const = 0; virtual uint8_t GetLimitMode(void) const = 0; virtual uint32_t GetMeritPointsMax(void) const = 0; virtual int16_t* GetStatusIcons(void) const = 0; virtual int32_t* GetStatusTimers(void) const = 0; virtual int16_t* GetBuffs(void) const = 0; // Helper Functions virtual bool HasAbility(uint32_t id) const = 0; virtual bool HasKeyItem(uint32_t id) const = 0; virtual bool HasPetCommand(uint32_t id) const = 0; virtual bool HasSpell(uint32_t id) const = 0; virtual bool HasTrait(uint32_t id) const = 0; virtual bool HasWeaponSkill(uint32_t id) const = 0; // Pet Functions virtual uint32_t GetPetTP(void) const = 0; virtual uint32_t GetPetMP(void) const = 0; }; interface ITarget { // Property Getters virtual const char* GetTargetName(void) const = 0; virtual uint32_t GetTargetHealthPercent(void) const = 0; virtual uint32_t GetTargetIndex(void) const = 0; virtual uint32_t GetTargetServerId(void) const = 0; virtual uintptr_t GetTargetEntityPointer(void) const = 0; virtual uintptr_t GetTargetWarpPointer(void) const = 0; virtual uint8_t GetTargetVisible(void) const = 0; virtual uint16_t GetTargetMask(void) const = 0; virtual uint16_t GetTargetCalculatedId(void) const = 0; virtual uint32_t GetSubTargetIndex(void) const = 0; virtual uint32_t GetSubTargetServerId(void) const = 0; virtual uintptr_t GetSubTargetEntityPointer(void) const = 0; virtual uintptr_t GetSubTargetWarpPointer(void) const = 0; virtual uint8_t GetSubTargetVisible(void) const = 0; virtual uint16_t GetSubTargetMask(void) const = 0; virtual uint8_t GetSubTargetActive(void) const = 0; virtual uint8_t GetTargetDeactivate(void) const = 0; virtual uint8_t GetIsLockedOn(void) const = 0; virtual uint32_t GetTargetSelectionMask(void) const = 0; virtual uint8_t GetIsMenuOpen(void) const = 0; }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Input Related Interfaces // // IKeyboard // // Exposes functions to interact with the hooked and wrapped keyboard device. // // IMouse // // Exposes functions to interact with the hooked and wrapped mouse device. // /////////////////////////////////////////////////////////////////////////////////////////////////// interface IKeyboard : newIDirectInputDevice8A { // Keybind Related Functions virtual void BindKey(uint32_t key, bool down, bool alt, bool ctrl, bool win, bool apps, bool shift, const char* command) = 0; virtual void UnbindKey(uint32_t key, bool down, bool alt, bool ctrl, bool win, bool apps, bool shift) = 0; virtual void UnbindAll(void) = 0; virtual bool IsKeyBound(uint32_t key, bool alt, bool ctrl, bool win, bool apps, bool shift) = 0; virtual void ListBinds(void) = 0; // Callback Related Functions virtual void AddCallback(const char* alias, LPVOID lpGetDataCallback, LPVOID lpGetStateCallback, LPVOID lpKeyboardCallack, LPVOID lpMouseCallback) = 0; virtual void RemoveCallback(const char* alias) = 0; // Key Related Helper Functions virtual uint32_t V2D(uint32_t key) const = 0; virtual uint32_t D2V(uint32_t key) const = 0; virtual uint32_t S2D(const char* key) const = 0; virtual const char* D2S(uint32_t key) const = 0; virtual HWND GetParentWindow(void) const = 0; virtual bool GetBlocked(void) const = 0; virtual void SetBlocked(bool blocked) = 0; }; interface IMouse : newIDirectInputDevice8A { virtual HWND GetParentWindow(void) const = 0; virtual bool GetBlocked(void) const = 0; virtual void SetBlocked(bool blocked) = 0; }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Ashita Core // // The main Ashita interface passed to plugins when they are loaded that includes the ability // to obtain and interact with the other various objects defined in this header. // /////////////////////////////////////////////////////////////////////////////////////////////////// interface IAshitaCore { // Manager Exposure Functions virtual IChatManager* GetChatManager(void) const = 0; virtual IConfigurationManager* GetConfigurationManager(void) const = 0; virtual IDataManager* GetDataManager(void) const = 0; virtual IFontManager* GetFontManager(void) const = 0; virtual IGuiManager* GetGuiManager(void) const = 0; virtual IInputManager* GetInputManager(void) const = 0; virtual IPacketManager* GetPacketManager(void) const = 0; virtual IPluginManager* GetPluginManager(void) const = 0; virtual IPointerManager* GetPointerManager(void) const = 0; virtual IResourceManager* GetResourceManager(void) const = 0; // Ashita Property Functions virtual HMODULE GetHandle(void) const = 0; virtual const char* GetAshitaInstallPathA(void) const = 0; virtual const wchar_t* GetAshitaInstallPathW(void) const = 0; virtual Ashita::aswindowinfo_t* GetPlayOnlineWindowInfo(void) const = 0; virtual Ashita::aswindowinfo_t* GetMaskWindowInfo(void) const = 0; virtual Ashita::aswindowinfo_t* GetFFXiWindowInfo(void) const = 0; virtual bool GetMouseUnhooked(void) const = 0; virtual void SetMouseUnhooked(bool hooked) = 0; // Direct3D Property Functions virtual uint32_t GetD3DFillMode(void) const = 0; virtual bool GetD3DAmbientEnabled(void) const = 0; virtual D3DCOLOR GetD3DAmbientColor(void) const = 0; virtual void SetD3DFillMode(uint32_t fillmode) = 0; virtual void SetD3DAmbientEnabled(bool enabled) = 0; virtual void SetD3DAmbientColor(D3DCOLOR color) = 0; // DirectInput Property Functions virtual bool GetAllowGamepadInBackground(void) const = 0; virtual void SetAllowGamepadInBackground(bool enabled) = 0; }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Plugin Information // // Plugin information that is shared back to the Ashita plugin manager while a plugin is being // loaded. Plugins must populate this data in order to be considered valid. // /////////////////////////////////////////////////////////////////////////////////////////////////// struct plugininfo_t { char Name[512]; // The plugins name. char Author[512]; // The plugins author. double InterfaceVersion; // The plugins ADK interface version that it was compiled with. double PluginVersion; // The plugins version. int32_t Priority; // The plugins execution priority. /** * Default Constructor */ plugininfo_t(void) { strcpy_s(this->Name, 512, "Unknown"); strcpy_s(this->Author, 512, "Ashita Development Team"); this->InterfaceVersion = ASHITA_INTERFACE_VERSION; this->PluginVersion = 1.0f; this->Priority = 0; } /** * Default Constructor */ plugininfo_t(const char* name, const char* author, double interfaceVersion, double pluginVersion, int32_t priority) { strcpy_s(this->Name, 512, name); strcpy_s(this->Author, 512, author); this->InterfaceVersion = interfaceVersion; this->PluginVersion = pluginVersion; this->Priority = priority; } }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Plugin Base // // The main plugin interface that exposes the proper implementation of a plugins base class. // /////////////////////////////////////////////////////////////////////////////////////////////////// interface IPluginBase { /** * Returns the plugins information structure. * * @returns {plugininfo_t} The plugin information structure of the plugin. */ virtual plugininfo_t GetPluginInfo(void) = 0; /** * Invoked when the plugin is loaded, allowing it to prepare for usage. * * @param {IAshitaCore*} core - The Ashita core object to interact with the various Ashita managers. * @param {ILogManager*} log - The log manager used to interact with the current log file. * @param {uint32_t} id - The plugins id, or its module base, that identifies it other than its name. * @returns {bool} True on success, false otherwise. (If false, the plugin will not be loaded.) */ virtual bool Initialize(IAshitaCore* core, ILogManager* log, uint32_t id) = 0; /** * Invoked when the plugin is being unloaded, allowing it to cleanup its resources. */ virtual void Release(void) = 0; /////////////////////////////////////////////////////////////////////////////////////////////////// // Chat Manager Callbacks /////////////////////////////////////////////////////////////////////////////////////////////////// /** * Invoked when a command is being processed by the game client. * * Note: * Please note, this handles all things done via the game in terms of commands * and chat. All / commands as well as normal chat you type, macros, etc. will * be processed through here. You should only use this to handle / commands. * * If you wish to handle other bits of outgoing text before the client sees it, * then use the HandleOutgoingText callback instead. * * @param {const char*} command - The raw command string being processed. * @param {uint32_t} type - The type of the command being processed. (See Ashita::CommandInputType enumeration.) * @returns {bool} True if handled and should be blocked, false otherwise. */ virtual bool HandleCommand(const char* command, int32_t type) = 0; /** * Invoked when incoming text being sent to the chat log is being processed. * * @param {int16_t} mode - The mode of the message being added to the chatlog. * @param {const char*} message - The raw message being added to the chat log. * @param {int16_t*} modifiedMode - The modified mode, if any, that has been altered by other plugins/addons. * @param {char*} modifiedMessage - The modified message, if any, that has been altered by other plugins/addons. * @param {bool} blocked - Flag if this message has been blocked already by another plugin. (Once blocked, other plugins cannot restore it.) * @returns {bool} True if handled and should be blocked, false otherwise. */ virtual bool HandleIncomingText(int16_t mode, const char* message, int16_t* modifiedMode, char* modifiedMessage, bool blocked) = 0; /** * Invoked when outgoing text has not been handled by other plugins/addons. * Invoked after HandleCommand if nothing else processed the data. * * @param {int16_t} mode - The type of the text that is being sent. (See Ashita::CommandInputType enumeration.) * @param {const char*} message - The raw message being sent. * @param {int16_t*} modifiedMode - The modified mode, if any, that has been altered by other plugins/addons. * @param {char*} modifiedMessage - The modified message, if any, that has been altered by other plugins/addons. * @param {bool} blocked - Flag if this message has been blocked already by another plugin. (Once blocked, other plugins cannot restore it.) * @returns {bool} True if handled and should be blocked, false otherwise. */ virtual bool HandleOutgoingText(int32_t type, const char* message, int32_t* modifiedType, char* modifiedMessage, bool blocked) = 0; /////////////////////////////////////////////////////////////////////////////////////////////////// // Packet Manager Callbacks /////////////////////////////////////////////////////////////////////////////////////////////////// /** * Invoked when an incoming packet is being handled. * * @param {uint16_t} id - The id of the packet. * @param {uint32_t} size - The size of the packet data. * @param {void*} data - The raw data of the packet. * @param {void*} modified - The modified data, if any, that has been altered by other plugins/addons. * @param {bool} blocked - Flag if this message has been blocked already by another plugin. (Once blocked, other plugins cannot restore it.) * @returns {bool} True if handled and should be blocked, false otherwise. */ virtual bool HandleIncomingPacket(uint16_t id, uint32_t size, void* data, void* modified, bool blocked) = 0; /** * Invoked when an outgoing packet is being handled. * * @param {uint16_t} id - The id of the packet. * @param {uint32_t} size - The size of the packet data. * @param {void*} data - The raw data of the packet. * @param {void*} modified - The modified data, if any, that has been altered by other plugins/addons. * @param {bool} blocked - Flag if this message has been blocked already by another plugin. (Once blocked, other plugins cannot restore it.) * @returns {bool} True if handled and should be blocked, false otherwise. */ virtual bool HandleOutgoingPacket(uint16_t id, uint32_t size, void* data, void* modified, bool blocked) = 0; /////////////////////////////////////////////////////////////////////////////////////////////////// // Direct3D Callbacks /////////////////////////////////////////////////////////////////////////////////////////////////// /** * Invoked when the plugin is being initialized for Direct3D rendering. * * Note: * Plugins must return true with this function in order to have the other Direct3D * functions invoked. Returning false is ideal here if you do not need to use the * Direct3D functions within your plugin. This can help with overall performance. * * @param {IDirect3DDevice8*} device - The Direct3D device pointer currently being used by the game. * @return {bool} True if the plugin should handle the other Direct3D messages, false otherwise. */ virtual bool Direct3DInitialize(IDirect3DDevice8* device) = 0; /** * Invoked when the plugin is being unloaded and is able to cleanup its Direct3D related resources. */ virtual void Direct3DRelease(void) = 0; /** * Invoked when the Direct3D device is beginning to render. (BeginScene) */ virtual void Direct3DPreRender(void) = 0; /** * Invoked when the Direct3D device is ending its rendering. (EndScene) */ virtual void Direct3DRender(void) = 0; /** * Invoked when the Direct3D device is presenting the scene. (Present) * * @param {RECT*} pSourceRect - The source rect being rendered into. * @param {RECT*} pDestRect - The destination rect being rendered from. * @param {HWND} hDestWindowOverride - The window handle, if any, to override the rendering into. * @param {RGNDATA*} pDirtyRegion - The dirty region data. * @returns {bool} True if the call should be blocked, false otherwise. */ virtual bool Direct3DPresent(const RECT* pSourceRect, const RECT* pDestRect, HWND hDestWindowOverride, const RGNDATA* pDirtyRegion) = 0; /** * Invoked when the Direct3D device is drawing a primitive to the scene. (DrawPrimitive) * * @param {D3DPRIMITIVETYPE} PrimitiveType - The type of primitive being rendered. * @param {UINT} StartVertex - Index of the first vertex to load. * @param {UINT} PrimitiveCount - Number of primitives to render. * @returns {bool} True if the call should be blocked, false otherwise. */ virtual bool Direct3DDrawPrimitive(D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) = 0; /** * Invoked when the Direct3D device is drawing a primitive to the scene. (DrawIndexedPrimitive) * * @param {D3DPRIMITIVETYPE} PrimitiveType - The type of primitive being rendered. * @param {UINT} minIndex - Minimum vertex index for vertices used during this call. * @param {UINT} numVertices - Number of vertices used during this call * @param {UINT} startIndex - Index of the first index to use when accesssing the vertex buffer. * @param {UINT} primCount - Number of primitives to render. * @returns {bool} True if the call should be blocked, false otherwise. */ virtual bool Direct3DDrawIndexedPrimitive(D3DPRIMITIVETYPE PrimitiveType, UINT minIndex, UINT NumVertices, UINT startIndex, UINT primCount) = 0; /** * Invoked when the Direct3D device is drawing a primitive to the scene. (DrawPrimitiveUP) * * @param {D3DPRIMITIVETYPE} PrimitiveType - The type of primitive being rendered. * @param {UINT} PrimitiveCount - Number of primitives to render. * @param {void*} pVertexStreamZeroData - User memory pointer to the vertex data. * @param {UINT} VertexStreamZeroStride - The number of bytes of data for each vertex. * @returns {bool} True if the call should be blocked, false otherwise. */ virtual bool Direct3DDrawPrimitiveUP(D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) = 0; /** * Invoked when the Direct3D device is drawing a primitive to the scene. (DrawIndexedPrimitiveUP) * * @param {D3DPRIMITIVETYPE} PrimitiveType - The type of primitive being rendered. * @param {UINT} MinVertexIndex - Minimum vertex index. * @param {UINT} NumVertexIndices - Number of vertices used during this call. * @param {UINT} PrimitiveCount - Number of primitives to render. * @param {void*} pIndexData - User memory pointer to the index data. * @param {D3DFORMAT} IndexDataFormat - The format of the index data. * @param {void*} pVertexStreamZeroData - User memory pointer to the vertex data. * @param {UINT} VertexStreamZeroStride - The number of bytes of data for each vertex. * @returns {bool} True if the call should be blocked, false otherwise. */ virtual bool Direct3DDrawIndexedPrimitiveUP(D3DPRIMITIVETYPE PrimitiveType, UINT MinVertexIndex, UINT NumVertexIndices, UINT PrimitiveCount, CONST void* pIndexData, D3DFORMAT IndexDataFormat, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) = 0; /** * Invoked when the Direct3D device is setting a render state. (SetRenderState) * * @param {D3DRENDERSTATETYPE} state - The render state to alter. * @param {DWORD} value - The new value for the render state. * @returns {bool} True if the call should be blocked, false otherwise. */ virtual bool Direct3DSetRenderState(D3DRENDERSTATETYPE State, DWORD Value) = 0; }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Plugin // // The main base class that plugins should inherit from. Defaults the function handlers that are // not overriden to ensure that the plugin does not interfere with calls that it does not use. // // Note: // Plugins should inherit from this base class to ensure they meet the standards of being // a valid Ashita plugin. Failure to export a class that inherits from this base can lead // to crashes and potential loss of data / settings. // /////////////////////////////////////////////////////////////////////////////////////////////////// class IPlugin : public IPluginBase { protected: IAshitaCore* m_AshitaCore; ILogManager* m_LogManager; uint32_t m_PluginId; IDirect3DDevice8* m_Direct3DDevice; public: IPlugin(void) { } virtual ~IPlugin(void) { } public: plugininfo_t GetPluginInfo(void) override { return plugininfo_t("IPlugin", "Ashita Development Team", ASHITA_INTERFACE_VERSION, 1.0f, 0); } public: bool Initialize(IAshitaCore* core, ILogManager* log, uint32_t id) override { this->m_AshitaCore = core; this->m_LogManager = log; this->m_Direct3DDevice = nullptr; this->m_PluginId = id; return false; } void Release(void) override { } bool HandleCommand(const char* command, int32_t type) override { UNREFERENCED_PARAMETER(command); UNREFERENCED_PARAMETER(type); return false; } bool HandleIncomingText(int16_t mode, const char* message, int16_t* modifiedMode, char* modifiedMessage, bool blocked) override { UNREFERENCED_PARAMETER(mode); UNREFERENCED_PARAMETER(message); UNREFERENCED_PARAMETER(modifiedMode); UNREFERENCED_PARAMETER(modifiedMessage); UNREFERENCED_PARAMETER(blocked); return false; } bool HandleOutgoingText(int32_t type, const char* message, int32_t* modifiedType, char* modifiedMessage, bool blocked) override { UNREFERENCED_PARAMETER(type); UNREFERENCED_PARAMETER(message); UNREFERENCED_PARAMETER(modifiedType); UNREFERENCED_PARAMETER(modifiedMessage); UNREFERENCED_PARAMETER(blocked); return false; } bool HandleIncomingPacket(uint16_t id, uint32_t size, void* data, void* modified, bool blocked) override { UNREFERENCED_PARAMETER(id); UNREFERENCED_PARAMETER(size); UNREFERENCED_PARAMETER(data); UNREFERENCED_PARAMETER(modified); UNREFERENCED_PARAMETER(blocked); return false; } bool HandleOutgoingPacket(uint16_t id, uint32_t size, void* data, void* modified, bool blocked) override { UNREFERENCED_PARAMETER(id); UNREFERENCED_PARAMETER(size); UNREFERENCED_PARAMETER(data); UNREFERENCED_PARAMETER(modified); UNREFERENCED_PARAMETER(blocked); return false; } bool Direct3DInitialize(IDirect3DDevice8* device) override { this->m_Direct3DDevice = device; return false; } void Direct3DRelease(void) override { } void Direct3DPreRender(void) override { } void Direct3DRender(void) override { } bool Direct3DPresent(const RECT* pSourceRect, const RECT* pDestRect, HWND hDestWindowOverride, const RGNDATA* pDirtyRegion) override { UNREFERENCED_PARAMETER(pSourceRect); UNREFERENCED_PARAMETER(pDestRect); UNREFERENCED_PARAMETER(hDestWindowOverride); UNREFERENCED_PARAMETER(pDirtyRegion); return false; } bool Direct3DDrawPrimitive(D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) override { UNREFERENCED_PARAMETER(PrimitiveType); UNREFERENCED_PARAMETER(StartVertex); UNREFERENCED_PARAMETER(PrimitiveCount); return false; } bool Direct3DDrawIndexedPrimitive(D3DPRIMITIVETYPE PrimitiveType, UINT minIndex, UINT NumVertices, UINT startIndex, UINT primCount) override { UNREFERENCED_PARAMETER(PrimitiveType); UNREFERENCED_PARAMETER(minIndex); UNREFERENCED_PARAMETER(NumVertices); UNREFERENCED_PARAMETER(startIndex); UNREFERENCED_PARAMETER(primCount); return false; } bool Direct3DDrawPrimitiveUP(D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) override { UNREFERENCED_PARAMETER(PrimitiveType); UNREFERENCED_PARAMETER(PrimitiveCount); UNREFERENCED_PARAMETER(pVertexStreamZeroData); UNREFERENCED_PARAMETER(VertexStreamZeroStride); return false; } bool Direct3DDrawIndexedPrimitiveUP(D3DPRIMITIVETYPE PrimitiveType, UINT MinVertexIndex, UINT NumVertexIndices, UINT PrimitiveCount, CONST void* pIndexData, D3DFORMAT IndexDataFormat, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) override { UNREFERENCED_PARAMETER(PrimitiveType); UNREFERENCED_PARAMETER(MinVertexIndex); UNREFERENCED_PARAMETER(NumVertexIndices); UNREFERENCED_PARAMETER(PrimitiveCount); UNREFERENCED_PARAMETER(pIndexData); UNREFERENCED_PARAMETER(IndexDataFormat); UNREFERENCED_PARAMETER(pVertexStreamZeroData); UNREFERENCED_PARAMETER(VertexStreamZeroStride); return false; } bool Direct3DSetRenderState(D3DRENDERSTATETYPE State, DWORD Value) override { UNREFERENCED_PARAMETER(State); UNREFERENCED_PARAMETER(Value); return false; } }; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Ashita Plugin Exports // // These functions are required to be exported by all plugins in order to be validated // for loading. Failure to export these functions will result in your plugin not being // loaded. Plugins must return proper data for the plugin information and plugin creation // otherwise it can lead to crashes! // // getinterfaceversion_f // Exported function to return the plugins interface version it was compiled with. // // createplugininfo_f // Exported function to return information about the given plugin back to Ashita. // This info is used to validate the plugin as well as used when the plugin list is printed. // // createplugin_f // Exported function to return a new instance of the plugins base class. This class must // inherit from IPlugin as the returned value will be the inherited base object. // /////////////////////////////////////////////////////////////////////////////////////////////////// typedef double /**/(__stdcall *getinterfaceversion_f)(void); typedef void /**/(__stdcall *createplugininfo_f)(plugininfo_t* info); typedef IPlugin* /**/(__stdcall *createplugin_f)(void); #endif // __ASHITA_ADK_H_INCLUDED__