/**
* Ashita SDK - Copyright (c) 2023 Ashita Development Team
* Contact: https://www.ashitaxi.com/
* Contact: https://discord.gg/Ashita
*
* This file is part of Ashita.
*
* Ashita is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Ashita is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Ashita. If not, see .
*/
#ifndef ASHITA_SDK_H_INCLUDED
#define ASHITA_SDK_H_INCLUDED
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Warning Configurations
//
// Disables some warnings we do not need to care/worry about due to where they originate from.
//
////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma warning(push)
#pragma warning(disable : 26812) // Prefer 'enum class' over 'enum'.
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Ashita Plugin Interface Version
//
// Defines the current version of the Ashita plugin interface. Ashita uses this value to determine
// if a plugin is made for the current version of Ashita and can be properly loaded without issues.
//
// Invalid or mismatched versions will result in an error and the plugin will fail to load.
//
// Do not edit this value!
//
////////////////////////////////////////////////////////////////////////////////////////////////////
constexpr auto ASHITA_INTERFACE_VERSION = 4.16;
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Includes
//
////////////////////////////////////////////////////////////////////////////////////////////////////
// DirectInput 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"
#include "d3d8/includes/dinput.h"
#include
// Ashita SDK Includes
#include "BinaryData.h"
#include "Chat.h"
#include "Commands.h"
#include "ErrorHandling.h"
#include "Memory.h"
#include "Registry.h"
#include "ScopeGuard.h"
#include "Threading.h"
#include "imgui.h"
#include "ffxi/autofollow.h"
#include "ffxi/castbar.h"
#include "ffxi/config.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"
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Ashita Version Object
//
// Used with the Ashita 'GetAshitaVersion' export to obtain the full version information of Ashita.
//
////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma warning(disable : 4201)
union ashitaversion_t
{
uint64_t Version; // The raw full version value.
struct
{
uint16_t Major; // The versions major value.
uint16_t Minor; // The versions minor value.
uint16_t Build; // The versions build value.
uint16_t Revision; // The versions revision value.
};
ashitaversion_t(void)
: Version(0)
{}
explicit ashitaversion_t(const uint64_t version)
: Version(version)
{}
ashitaversion_t(const uint16_t major, const uint16_t minor, const uint16_t build, const uint16_t revision)
: Major(major)
, Minor(minor)
, Build(build)
, Revision(revision)
{}
};
#pragma warning(default : 4201)
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Ashita Installation Parameters
//
// Used with the Ashita 'InstallAshita' export to properly attach Ashita to the process it is
// injected into. This structure holds the parameters that Ashita uses to initialize properly.
//
////////////////////////////////////////////////////////////////////////////////////////////////////
struct ashitainstallparams_t
{
uint32_t LanguageId; // The language id to be used within Ashita.
char BootScript[MAX_PATH]; // The boot script to execute when Ashita is loads.
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Forward Declares
//
////////////////////////////////////////////////////////////////////////////////////////////////////
struct lua_State
{};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Ashita Enumerations
//
////////////////////////////////////////////////////////////////////////////////////////////////////
namespace Ashita
{
/**
* Plugin Flags Enumeration
*/
enum class PluginFlags : uint32_t
{
None = 0 << 0, // None.
UseCommands = 1 << 0, // The plugin will make use of the incoming command handler.
UseText = 1 << 1, // The plugin will make use of the incoming/outgoing text handlers.
UsePackets = 1 << 2, // The plugin will make use of the incoming/outgoing packet handlers.
UseDirect3D = 1 << 3, // The plugin will make use of the various Direct3D handlers.
UsePluginEvents = 1 << 4, // The plugin will make use of the Ashita plugin event system. (RaiseEvent / HandleEvent)
/**
* Ashita v3 legacy style setup.
*/
Legacy = UseCommands | UseText | UsePackets,
/**
* Ashita v3 legacy style setup. (With Direct3D.)
*/
LegacyDirect3D = UseCommands | UseText | UsePackets | UseDirect3D,
/**
* For plugins that need all available flags.
*/
All = UseCommands | UseText | UsePackets | UseDirect3D | UsePluginEvents,
};
/**
* Command Mode Enumeration
*/
enum class CommandMode : int32_t
{
/**
* Ashita command modes.
*/
AshitaForceHandle = -3, // Tells Ashita to force-handle a command.
AshitaScript = -2, // Tells Ashita to assume the command is from a script.
AshitaParse = -1, // Tells Ashita to parse the command.
/**
* Final Fantasy XI command modes.
*/
Menu = 0, // Tells Ashita to forward the command as if a game menu invoked it.
Typed = 1, // Tells Ashita to forward the command as if a player typed it.
Macro = 2, // Tells Ashita to forward the command as if a macro invoked it.
SubTargetST = 3, // Internal used re-processing of a command if a tag is found.
SubTargetSTPC = 4, // Internal used re-processing of a command if a tag is found.
SubTargetSTNPC = 5, // Internal used re-processing of a command if a tag is found.
SubTargetSTPT = 6, // Internal used re-processing of a command if a tag is found.
SubTargetSTAL = 7, // Internal used re-processing of a command if a tag is found.
};
/**
* Chat Input Opened Status Enumeration
*/
enum class ChatInputOpenStatus : uint8_t
{
Closed = 0x00, // If casted to bool-like type. (Low bits used for open/closed state.)
Opened = 0x01, // If casted to bool-like type. (Low bits used for open/closed state.)
OpenedChat = 0x11, // Flag set if the chat input is open.
OpenedOther = 0x21, // Flag set if other input methods are open. (Bazaar comment, search comment, etc.)
};
/**
* Log Level Enumeration
*/
enum class LogLevel : uint32_t
{
None = 0, // Logging will output: None
Critical = 1, // Logging will output: Critical
Error = 2, // Logging will output: Critical, Error
Warn = 3, // Logging will output: Critical, Error, Warn
Info = 4, // Logging will output: Critical, Error, Warn, Info
Debug = 5, // Logging will output: Critical, Error, Warn, Info, Debug
};
/**
* Frame Anchor Enumeration
*/
enum class FrameAnchor : uint32_t
{
TopLeft = 0,
TopRight,
BottomLeft,
BottomRight,
Right = 1,
Bottom = 2,
};
/**
* Keyboard Event Enumeration
*/
enum class KeyboardEvent : uint32_t
{
Down = 0, // Keyboard key down.
Up = 1, // Keyboard key up.
};
/**
* Mouse Input Enumeration
*/
enum class MouseEvent : uint32_t
{
ClickLeft = 0, // Mouse left click.
ClickRight = 1, // Mouse right click.
ClickMiddle = 2, // Mouse middle click.
ClickX1 = 3, // Mouse x-button (1) click.
ClickX2 = 4, // Mouse x-button (2) click.
WheelUp = 5, // Mouse wheel scroll up.
WheelDown = 6, // Mouse wheel scroll down.
Move = 7, // Mouse move.
};
/**
* Font Border Flags Enumeration
*/
enum class FontBorderFlags : uint32_t
{
None = 0 << 0, // None.
Top = 1 << 0, // Font will have a top border.
Bottom = 1 << 1, // Font will have a bottom border.
Left = 1 << 2, // Font will have a left border.
Right = 1 << 3, // Font will have a right border.
All = Top | Bottom | Left | Right, // Font will have borders on all sides.
};
/**
* Font Creation Flags Enumeration
*/
enum class FontCreateFlags : uint32_t
{
None = 0 << 0, // None.
Bold = 1 << 0, // Font will be bold.
Italic = 1 << 1, // Font will be italic.
StrikeThrough = 1 << 2, // Font will be strikethrough.
Underlined = 1 << 3, // Font will be underlined.
CustomFile = 1 << 4, // Font will be loaded from a custom file, not installed on the system.
ClearType = 1 << 5, // Font will be created with an alpha channel texture supporting clear type.
};
/**
* Font Draw Flags Enumeration
*/
enum class FontDrawFlags : uint32_t
{
None = 0 << 0, // None.
Filtered = 1 << 0, // Font will be drawn filtered.
CenterX = 1 << 1, // Font will be drawn centered.
CenterY = 1 << 2, // Font will be drawn centered.
RightJustified = 1 << 3, // Font will be drawn right-justified.
Outlined = 1 << 4, // Font will be drawn with a colored outline.
ManualRender = 1 << 5, // Font will be drawn manually by the owner with Render().
};
/**
* Primitive Draw Flags Enumeration
*/
enum class PrimitiveDrawFlags : uint32_t
{
None = 0 << 0, // None.
ManualRender = 1 << 0, // Primitive will be drawn manually by the owner with Render().
};
/**
* Enumeration Operator Override Helpers
*/
#define DEFINE_ENUMCLASS_OPERATORS(EnumClass) \
constexpr EnumClass operator~(EnumClass lhs) \
{ \
return static_cast(~std::underlying_type::type(lhs)); \
} \
constexpr EnumClass operator&(EnumClass lhs, EnumClass rhs) \
{ \
return static_cast(std::underlying_type::type(lhs) & \
std::underlying_type::type(rhs)); \
} \
constexpr EnumClass operator|(EnumClass lhs, EnumClass rhs) \
{ \
return static_cast(std::underlying_type::type(lhs) | \
std::underlying_type::type(rhs)); \
} \
constexpr EnumClass operator^(EnumClass lhs, EnumClass rhs) \
{ \
return static_cast(std::underlying_type::type(lhs) ^ \
std::underlying_type::type(rhs)); \
} \
constexpr EnumClass operator&=(EnumClass& lhs, EnumClass rhs) \
{ \
lhs = static_cast(std::underlying_type::type(lhs) & \
std::underlying_type::type(rhs)); \
return lhs; \
} \
constexpr EnumClass operator|=(EnumClass& lhs, EnumClass rhs) \
{ \
lhs = static_cast(std::underlying_type::type(lhs) | \
std::underlying_type::type(rhs)); \
return lhs; \
} \
constexpr EnumClass operator^=(EnumClass& lhs, EnumClass rhs) \
{ \
lhs = static_cast(std::underlying_type::type(lhs) ^ \
std::underlying_type::type(rhs)); \
return lhs; \
}
// Attach operator overrides to needed enums..
DEFINE_ENUMCLASS_OPERATORS(Ashita::PluginFlags);
DEFINE_ENUMCLASS_OPERATORS(Ashita::FrameAnchor);
DEFINE_ENUMCLASS_OPERATORS(Ashita::FontBorderFlags);
DEFINE_ENUMCLASS_OPERATORS(Ashita::FontCreateFlags);
DEFINE_ENUMCLASS_OPERATORS(Ashita::FontDrawFlags);
DEFINE_ENUMCLASS_OPERATORS(Ashita::PrimitiveDrawFlags);
} // namespace Ashita
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Ashita Input Callback Definitions
//
// getdevicedatacallback_f
//
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ee417894(v%3Dvs.85)/
// Function prototype used for registered callbacks to the hooked keyboard GetDeviceData
// method. Passes the device data to the callback to be handled before being sent to the
// game. (Uses standard IDirectInputDevice8::GetDeviceData setup and params.)
//
// getdevicestatecallback_f
//
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ee417897(v%3dvs.85)/
// Function prototype used for registered callbacks to the hooked keyboard GetDeviceState
// method. Passes the device state to the callback to be handled before being sent to the
// game. (Uses standard IDirectInputDevice8::GetDeviceState setup and params.)
//
// controllercallback_f
//
// Function prototype used for registered callbacks to the hooked directinput controller
// interface. Passes the parameters from a rgdod entry to be handled before being used
// to update controller state and sent to the game.
//
// keyboardcallback_f
//
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms644984(v=vs.85).aspx
// Function prototype used for registered callbacks to the hooked keyboard window message
// events. Passes the keyboard message to the callback to be handled before being sent to
// the game.
//
// mousecallback_f
//
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms644988(v=vs.85).aspx
// Function prototype used for registered callbacks to the hooked mouse window message
// events. Passes the mouse message to the callback to be handled before being sent to
// the game.
//
// xinputgetstatecallback_f
//
// https://learn.microsoft.com/en-us/windows/win32/api/xinput/nf-xinput-xinputgetstate
// Function prototype used for registered callbacks to the hooked XInputGetState function.
// Passes the device state to the callback to be handled before being sent to the game.
//
// xinputcallback_f
//
// Function prototype used for registered callbacks to the XInput interface. Passes
// single button events to be handled before being used to update controller state and
// sent to the game.
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef HRESULT(__stdcall* getdevicedatacallback_f)(LPDIRECTINPUTDEVICE8A, DWORD, LPDIDEVICEOBJECTDATA, LPDWORD, DWORD, DWORD);
typedef HRESULT(__stdcall* getdevicestatecallback_f)(LPDIRECTINPUTDEVICE8A, DWORD, LPVOID);
typedef BOOL(__stdcall* controllercallback_f)(uint32_t*, int32_t*, bool, bool);
typedef BOOL(__stdcall* keyboardcallback_f)(WPARAM, LPARAM, bool);
typedef BOOL(__stdcall* mousecallback_f)(uint32_t, WPARAM, LPARAM, bool);
typedef DWORD(__stdcall* xinputgetstatecallback_f)(DWORD, XINPUT_STATE*);
typedef BOOL(__stdcall* xinputcallback_f)(uint8_t*, int16_t*, bool, bool);
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Ashita Font & Primitive Object Callback Definitions
//
// fontkeyboardevent_f
//
// Function prototype used for font objects to allow developers to monitor keyboard events
// sent to a specific font/primitive object.
//
// fontmouseevent_f
//
// Function prototype used for font objects to allow developers to monitor mouse events
// sent to a specific font/primitive object.
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef bool(__stdcall* fontkeyboardevent_f)(Ashita::KeyboardEvent eventId, void* object, int32_t vkey, bool down, LPARAM lParam);
typedef bool(__stdcall* fontmouseevent_f)(Ashita::MouseEvent eventId, void* object, int32_t xpos, int32_t ypos);
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Ashita Resource Interface Definitions
//
////////////////////////////////////////////////////////////////////////////////////////////////////
struct IAbility
{
uint16_t Id; // The abilities id.
uint8_t Type; // The abilities type.
uint8_t Element; // The abilities element.
uint16_t ListIconId; // The abilities list icon id.
uint16_t ManaCost; // The abilities mana cost.
uint16_t RecastTimerId; // The abilities recast timer id.
uint16_t Targets; // The abilities valid targets.
int16_t TPCost; // The abilities TP cost.
uint8_t MenuCategoryId; // The abilities sub-category menu id.
uint8_t MonsterLevel; // The abilities monster level.
int8_t Range; // The abilities range. (Range is based on a lookup table.)
uint8_t AreaRange; // The abilities AoE range. (Range is based on a lookup table.)
uint8_t AreaShapeType; // The abilities AoE shape. (0 = None, 1 = Circle on self/target, 2 = Cone AoE, 3 = Circle on self while targeting enemy.)
uint8_t CursorTargetType; // The abilities cursor target type. (0x00 to 0x0F flag determining the valid targeting type of the ability.)
uint8_t Unknown0000; // Unknown
uint8_t Unknown0001; // Unknown (Type confirmed.)
uint16_t Unknown0002; // Unknown (Type confirmed.)
uint16_t Unknown0003; // Unknown (Type confirmed.) (TP related.)
uint16_t Unknown0004; // Unknown (Type confirmed.) (TP related.)
uint16_t Unknown0005; // Unknown (Type confirmed.)
uint16_t Unknown0006; // Unknown (Type confirmed.)
uint16_t Unknown0007; // Unknown
uint16_t Unknown0008; // Unknown (Type confirmed.)
uint8_t Unknown0009[11]; // Unknown
uint8_t EOE; // 0xFF - End of Entry
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.
uint16_t Type; // The spells type.
uint16_t Element; // The spells element.
uint16_t Targets; // The spells valid targets.
uint16_t Skill; // The spells magic skill type.
uint16_t ManaCost; // The spells mana cost.
uint8_t CastTime; // The spells cast time. (CastTime / 4.0) (Cast Bar: CastTime * 20)
uint8_t RecastDelay; // The spells recast delay. (RecastDely / 4.0) (Cast Bar: RecastDelay * 15)
int16_t LevelRequired[24]; // The spells level requirements.(-1 = Unlearnable, > 99 = Unlocked with job points. See: JobPointMask for validation.)
uint16_t Id; // The spells id. (Old recast id; unused now except for auto-sorting.)
uint16_t ListIconNQ; // The spells icon id. (Low quality menu icon, client config set to icon set 1.)
uint16_t ListIconHQ; // The spells icon id. (High quality menu icon, client config set to icon set 2.)
uint8_t Requirements; // The spells requirements.
int8_t Range; // The spells casting range. (Range is based on a lookup table.)
uint8_t AreaRange; // The spells AoE range. (Range is based on a lookup table.)
uint8_t AreaShapeType; // The spells AoE shape. (0 = None, 1 = Circle on self/target, 2 = Cone AoE, 3 = Circle on self while targeting enemy.)
uint8_t CursorTargetType; // The spells AoE target type. (0x00 to 0x0F flag determining the valid targeting type of the spell.)
uint8_t Unknown0000[3]; // Unknown (Always 00 for all spells.)
uint32_t AreaFlags; // The spells AoE flags. (Flag to determine various things. Example: Divine Veil valid spell: ((val & 0x7FFF80) == 512)))
uint16_t Unknown0001; // Unknown
uint8_t Unknown0002; // Unknown
uint8_t Unknown0003; // Unknown (Type confirmed.) (Used with GEO spells, looks to be a range of some sort.)
uint8_t Unknown0004[8]; // Unknown
uint32_t JobPointMask; // The spells job point mask. (JobPointMask & (1 << ((PlayerJobU32 & 0xFF) & 0x1F))) (If true, LevelRequired turns into required job points to unlock the spell.)
uint8_t Unknown0005[3]; // Unknown
uint8_t EOE; // 0xFF - End of Entry
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 IMonAbility
{
uint16_t AbilityId; // The monstrosity ability id.
int8_t Level; // The monstrosity ability level.
uint8_t Unknown0000; // Unknown
};
struct IItem
{
// Common Item Header
uint32_t Id; // The items id.
uint16_t Flags; // The items flags.
uint16_t StackSize; // The items stack size.
uint16_t Type; // The items type.
uint16_t ResourceId; // The items resource id. (Mainly used for AH sorting.)
uint16_t Targets; // The items valid targets for use.
// Armor & Weapon Items
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.
uint16_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.
uint32_t WeaponUnknown0000; // Unknown (Some sort of flag for item types. 0-5 and 255 are valid values.)
uint8_t Range; // The items range. (Range is based on a lookup table.)
uint8_t AreaRange; // The items AoE range. (Range is based on a lookup table.)
uint8_t AreaShapeType; // The items AoE shape. (0 = None, 1 = Circle on self/target, 2 = Cone AoE, 3 = Circle on self while targeting enemy.)
uint8_t AreaCursorTargetType; // The items AoE target type. (0x00 to 0x0F flag determining the valid targeting type of the spell.)
// Common Items
uint16_t Element; // The items elemental aura type.
uint32_t Storage; // The items storage amount.
uint32_t AttachmentFlags; // The items puppet attachment flags.
// Instinct Items
uint16_t InstinctCost; // The items instinct cost.
// Monstrosity Items
uint16_t MonstrosityId; // The items monstrosity id.
char MonstrosityName[0x20]; // The items monstrosity name.
uint8_t MonstrosityData[0x0A]; // The items monstrosity data. (Unknown block of data currently.)
IMonAbility MonstrosityAbilities[0x10]; // The items monstrosity abilities.
// Puppet Items
uint16_t PuppetSlotId; // The items puppet slot id.
uint32_t PuppetElements; // The items puppet elements.
// Slip & Voucher Items
uint8_t SlipData[0x46]; // The items slip data.
// Usable Items
uint16_t UsableData0000; // The items usable data. (0) - (Used as animation lookup types. Learnable Scrolls: 0x01000. Learnable Rolls: 0x02000)
uint32_t UsableData0001; // The items usable data. (1) - (Used as animation ids for learnable items. Used as AoE range information for usable items.)
uint32_t UsableData0002; // The items usable data. (2) - (Used as a flag to tell what UsableData0001 is. 0x00: Unused. 0x01: Animation Id. 0x02: AoE range information.)
uint32_t Article; // The items article type.
const char* Name[3]; // The items name. (0 = Default, 1 = Japanese, 2 = English)
const char* Description[3]; // The items description. (0 = Default, 1 = Japanese, 2 = English)
const char* LogNameSingular[3]; // The items log name (singular). (0 = Default, 1 = Japanese, 2 = English)
const char* LogNamePlural[3]; // The items log name (plural). (0 = Default, 1 = Japanese, 2 = English)
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.
};
struct IStatusIcon
{
uint16_t Index; // The status icons index in the DAT file.
uint16_t Id; // The status icons id. (Most match the index, but some don't.)
uint8_t CanCancel; // The status icons cancellable flag. (1 if it can be cancelled, 0 otherwise.)
uint8_t HideTimer; // The status icons force-hide timer flag. (1 if the timer is hidden by force, 0 otherwise.)
const char* Description[3]; // The status icons description. (0 = Default, 1 = Japanese, 2 = English)
uint32_t ImageSize; // The status icons image size.
uint8_t ImageType; // The status icons image type.
uint8_t ImageName[0x10]; // The status icons image name.
uint8_t Bitmap[0x156A]; // The status icons bitmap data.
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Ashita Memory Object Interface Definitions
//
////////////////////////////////////////////////////////////////////////////////////////////////////
struct IAutoFollow
{
/**
* Warning!
*
* Plugins should not use this function! Use the Get/Set properties instead!
*/
virtual Ashita::FFXI::autofollow_t* GetRawStructure(void) const = 0;
// Get Properties
virtual uint32_t GetTargetIndex(void) const = 0;
virtual uint32_t GetTargetServerId(void) const = 0;
virtual float GetFollowDeltaX(void) const = 0;
virtual float GetFollowDeltaZ(void) const = 0;
virtual float GetFollowDeltaY(void) const = 0;
virtual float GetFollowDeltaW(void) const = 0;
virtual uint32_t GetFollowTargetIndex(void) const = 0;
virtual uint32_t GetFollowTargetServerId(void) const = 0;
virtual uint8_t GetIsFirstPersonCamera(void) const = 0;
virtual uint8_t GetIsAutoRunning(void) const = 0;
virtual uint8_t GetIsCameraLocked(void) const = 0;
virtual uint8_t GetIsCameraLockedOn(void) const = 0;
// Set Properties
virtual void SetTargetIndex(uint32_t index) const = 0;
virtual void SetTargetServerId(uint32_t id) const = 0;
virtual void SetFollowDeltaX(float x) const = 0;
virtual void SetFollowDeltaZ(float z) const = 0;
virtual void SetFollowDeltaY(float y) const = 0;
virtual void SetFollowDeltaW(float w) const = 0;
virtual void SetFollowTargetIndex(uint32_t index) const = 0;
virtual void SetFollowTargetServerId(uint32_t id) const = 0;
virtual void SetIsFirstPersonCamera(uint8_t firstPersonCamera) const = 0;
virtual void SetIsAutoRunning(uint8_t autoRunning) const = 0;
virtual void SetIsCameraLocked(uint8_t cameraLocked) const = 0;
virtual void SetIsCameraLockedOn(uint8_t cameraLockedOn) const = 0;
};
struct ICastBar
{
/**
* Warning!
*
* Plugins should not use this function! Use the Get/Set properties instead!
*/
virtual Ashita::FFXI::castbar_t* GetRawStructure(void) const = 0;
// Get Properties
virtual float GetMax(void) const = 0;
virtual float GetCount(void) const = 0;
virtual float GetPercent(void) const = 0;
virtual uint32_t GetCastType(void) const = 0;
// Set Properties
virtual void SetMax(float max) const = 0;
virtual void SetCount(float count) const = 0;
virtual void SetPercent(float percent) const = 0;
virtual void SetCastType(uint32_t type) const = 0;
};
struct IEntity
{
/**
* Warning!
*
* Plugins should not use this function! Use the Get/Set properties instead!
*/
virtual Ashita::FFXI::entity_t* GetRawEntity(uint32_t index) const = 0;
// Helper Methods
virtual uint32_t GetEntityMapSize(void) const = 0;
// Get Properties
virtual float GetLocalPositionX(uint32_t index) const = 0;
virtual float GetLocalPositionZ(uint32_t index) const = 0;
virtual float GetLocalPositionY(uint32_t index) const = 0;
virtual float GetLocalPositionW(uint32_t index) const = 0;
virtual float GetLocalPositionRoll(uint32_t index) const = 0;
virtual float GetLocalPositionYaw(uint32_t index) const = 0;
virtual float GetLocalPositionPitch(uint32_t index) const = 0;
virtual float GetLastPositionX(uint32_t index) const = 0;
virtual float GetLastPositionZ(uint32_t index) const = 0;
virtual float GetLastPositionY(uint32_t index) const = 0;
virtual float GetLastPositionW(uint32_t index) const = 0;
virtual float GetLastPositionRoll(uint32_t index) const = 0;
virtual float GetLastPositionYaw(uint32_t index) const = 0;
virtual float GetLastPositionPitch(uint32_t index) const = 0;
virtual float GetMoveX(uint32_t index) const = 0;
virtual float GetMoveZ(uint32_t index) const = 0;
virtual float GetMoveY(uint32_t index) const = 0;
virtual float GetMoveW(uint32_t index) const = 0;
virtual float GetMoveDeltaX(uint32_t index) const = 0;
virtual float GetMoveDeltaZ(uint32_t index) const = 0;
virtual float GetMoveDeltaY(uint32_t index) const = 0;
virtual float GetMoveDeltaW(uint32_t index) const = 0;
virtual float GetMoveDeltaRoll(uint32_t index) const = 0;
virtual float GetMoveDeltaYaw(uint32_t index) const = 0;
virtual float GetMoveDeltaPitch(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 GetMovementSpeed(uint32_t index) const = 0;
virtual float GetAnimationSpeed(uint32_t index) const = 0;
virtual uintptr_t GetActorPointer(uint32_t index) const = 0;
virtual uintptr_t GetAttachment(uint32_t index, uint32_t attachmentIndex) const = 0;
virtual uintptr_t GetEventPointer(uint32_t index) const = 0;
virtual float GetDistance(uint32_t index) const = 0;
virtual uint32_t GetTurnSpeed(uint32_t index) const = 0;
virtual uint32_t GetTurnSpeedHead(uint32_t index) const = 0;
virtual float GetHeading(uint32_t index) const = 0;
virtual uintptr_t GetNext(uint32_t index) const = 0;
virtual uint8_t GetHPPercent(uint32_t index) const = 0;
virtual uint8_t GetType(uint32_t index) const = 0;
virtual uint8_t GetRace(uint32_t index) const = 0;
virtual uint16_t GetLocalMoveCount(uint32_t index) const = 0;
virtual uint16_t GetActorLockFlag(uint32_t index) const = 0;
virtual uint16_t GetModelUpdateFlags(uint32_t index) const = 0;
virtual uint32_t GetDoorId(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 uint32_t GetRenderFlags5(uint32_t index) const = 0;
virtual uint32_t GetRenderFlags6(uint32_t index) const = 0;
virtual uint32_t GetRenderFlags7(uint32_t index) const = 0;
virtual uint32_t GetRenderFlags8(uint32_t index) const = 0;
virtual uint8_t GetPopEffect(uint32_t index) const = 0;
virtual uint8_t GetUpdateMask(uint32_t index) const = 0;
virtual uint16_t GetInteractionTargetIndex(uint32_t index) const = 0;
virtual uint16_t GetNpcSpeechFrame(uint32_t index) const = 0;
virtual uint16_t GetLookAxisX(uint32_t index) const = 0;
virtual uint16_t GetLookAxisY(uint32_t index) const = 0;
virtual uint16_t GetMouthCounter(uint32_t index) const = 0;
virtual uint16_t GetMouthWaitCounter(uint32_t index) const = 0;
virtual uint16_t GetCraftTimerUnknown(uint32_t index) const = 0;
virtual uint32_t GetCraftServerId(uint32_t index) const = 0;
virtual uint16_t GetCraftAnimationEffect(uint32_t index) const = 0;
virtual uint8_t GetCraftAnimationStep(uint32_t index) const = 0;
virtual uint8_t GetCraftParam(uint32_t index) const = 0;
virtual float GetMovementSpeed2(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 GetMou4(uint32_t index) const = 0;
virtual uint32_t GetStatusServer(uint32_t index) const = 0;
virtual uint32_t GetStatus(uint32_t index) const = 0;
virtual uint32_t GetStatusEvent(uint32_t index) const = 0;
virtual uint32_t GetModelTime(uint32_t index) const = 0;
virtual uint32_t GetModelStartTime(uint32_t index) const = 0;
virtual uint32_t GetClaimStatus(uint32_t index) const = 0;
virtual uint32_t GetZoneId(uint32_t index) const = 0;
virtual uint32_t GetAnimation(uint32_t index, uint32_t animationIndex) const = 0;
virtual uint16_t GetAnimationTime(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 GetEmoteTargetActorPointer(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 uint8_t GetCampaignNameFlag(uint32_t index) const = 0;
virtual uint8_t GetMountId(uint32_t index) const = 0;
virtual int32_t GetFishingUnknown0000(uint32_t index) const = 0;
virtual int32_t GetFishingUnknown0001(uint32_t index) const = 0;
virtual int32_t GetFishingActionCountdown(uint32_t index) const = 0;
virtual int16_t GetFishingRodCastTime(uint32_t index) const = 0;
virtual int16_t GetFishingUnknown0002(uint32_t index) const = 0;
virtual uint32_t GetLastActionId(uint32_t index) const = 0;
virtual uintptr_t GetLastActionActorPointer(uint32_t index) const = 0;
virtual uint16_t GetTargetedIndex(uint32_t index) const = 0;
virtual uint16_t GetPetTargetIndex(uint32_t index) const = 0;
virtual uint16_t GetUpdateRequestDelay(uint32_t index) const = 0;
virtual uint8_t GetIsDirty(uint32_t index) const = 0;
virtual uint8_t GetBallistaFlags(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 float GetModelHitboxSize(uint32_t index) const = 0;
virtual uint32_t GetEnvironmentAreaId(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;
virtual uint8_t GetMonstrosityNameEnd(uint32_t index) const = 0;
virtual const char* GetMonstrosityNameAbbr(uint32_t index) const = 0;
virtual uint8_t GetMonstrosityNameAbbrEnd(uint32_t index) const = 0;
virtual uint8_t* GetCustomProperties(uint32_t index) const = 0;
virtual uint8_t* GetBallistaInfo(uint32_t index) const = 0;
virtual uint16_t GetFellowTargetIndex(uint32_t index) const = 0;
virtual uint16_t GetWarpTargetIndex(uint32_t index) const = 0;
virtual uint16_t GetTrustOwnerTargetIndex(uint32_t index) const = 0;
virtual uint16_t GetAreaDisplayTargetIndex(uint32_t index) const = 0;
// Set Properties
virtual void SetLocalPositionX(uint32_t index, float x) const = 0;
virtual void SetLocalPositionZ(uint32_t index, float z) const = 0;
virtual void SetLocalPositionY(uint32_t index, float y) const = 0;
virtual void SetLocalPositionW(uint32_t index, float w) const = 0;
virtual void SetLocalPositionRoll(uint32_t index, float roll) const = 0;
virtual void SetLocalPositionYaw(uint32_t index, float yaw) const = 0;
virtual void SetLocalPositionPitch(uint32_t index, float pitch) const = 0;
virtual void SetLastPositionX(uint32_t index, float x) const = 0;
virtual void SetLastPositionZ(uint32_t index, float z) const = 0;
virtual void SetLastPositionY(uint32_t index, float y) const = 0;
virtual void SetLastPositionW(uint32_t index, float w) const = 0;
virtual void SetLastPositionRoll(uint32_t index, float roll) const = 0;
virtual void SetLastPositionYaw(uint32_t index, float yaw) const = 0;
virtual void SetLastPositionPitch(uint32_t index, float pitch) const = 0;
virtual void SetMoveX(uint32_t index, float x) const = 0;
virtual void SetMoveZ(uint32_t index, float z) const = 0;
virtual void SetMoveY(uint32_t index, float y) const = 0;
virtual void SetMoveW(uint32_t index, float w) const = 0;
virtual void SetMoveDeltaX(uint32_t index, float x) const = 0;
virtual void SetMoveDeltaZ(uint32_t index, float z) const = 0;
virtual void SetMoveDeltaY(uint32_t index, float y) const = 0;
virtual void SetMoveDeltaW(uint32_t index, float w) const = 0;
virtual void SetMoveDeltaRoll(uint32_t index, float roll) const = 0;
virtual void SetMoveDeltaYaw(uint32_t index, float yaw) const = 0;
virtual void SetMoveDeltaPitch(uint32_t index, float pitch) 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 SetMovementSpeed(uint32_t index, float speed) const = 0;
virtual void SetAnimationSpeed(uint32_t index, float speed) const = 0;
virtual void SetActorPointer(uint32_t index, uintptr_t pointer) const = 0;
virtual void SetAttachment(uint32_t index, uint32_t attachmentIndex, uintptr_t attachment) const = 0;
virtual void SetEventPointer(uint32_t index, uintptr_t pointer) const = 0;
virtual void SetDistance(uint32_t index, float distance) const = 0;
virtual void SetTurnSpeed(uint32_t index, uint32_t speed) const = 0;
virtual void SetTurnSpeedHead(uint32_t index, uint32_t speed) const = 0;
virtual void SetHeading(uint32_t index, float heading) const = 0;
virtual void SetNext(uint32_t index, uintptr_t next) const = 0;
virtual void SetHPPercent(uint32_t index, uint8_t hpp) const = 0;
virtual void SetType(uint32_t index, uint8_t type) const = 0;
virtual void SetRace(uint32_t index, uint8_t race) const = 0;
virtual void SetLocalMoveCount(uint32_t index, uint16_t moveCount) const = 0;
virtual void SetActorLockFlag(uint32_t index, uint16_t flag) const = 0;
virtual void SetModelUpdateFlags(uint32_t index, uint16_t flags) const = 0;
virtual void SetDoorId(uint32_t index, uint32_t doorId) 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 timer) const = 0;
virtual void SetActionTimer2(uint32_t index, uint16_t timer) 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 SetRenderFlags5(uint32_t index, uint32_t flags) const = 0;
virtual void SetRenderFlags6(uint32_t index, uint32_t flags) const = 0;
virtual void SetRenderFlags7(uint32_t index, uint32_t flags) const = 0;
virtual void SetRenderFlags8(uint32_t index, uint32_t flags) const = 0;
virtual void SetPopEffect(uint32_t index, uint8_t effect) const = 0;
virtual void SetUpdateMask(uint32_t index, uint8_t mask) const = 0;
virtual void SetInteractionTargetIndex(uint32_t index, uint16_t targetIndex) const = 0;
virtual void SetNpcSpeechFrame(uint32_t index, uint16_t frame) const = 0;
virtual void SetLookAxisX(uint32_t index, uint16_t x) const = 0;
virtual void SetLookAxisY(uint32_t index, uint16_t y) const = 0;
virtual void SetMouthCounter(uint32_t index, uint16_t counter) const = 0;
virtual void SetMouthWaitCounter(uint32_t index, uint16_t counter) const = 0;
virtual void SetCraftTimerUnknown(uint32_t index, uint16_t timer) const = 0;
virtual void SetCraftServerId(uint32_t index, uint32_t serverId) const = 0;
virtual void SetCraftAnimationEffect(uint32_t index, uint16_t animationEffect) const = 0;
virtual void SetCraftAnimationStep(uint32_t index, uint8_t animationStep) const = 0;
virtual void SetCraftParam(uint32_t index, uint8_t param) const = 0;
virtual void SetMovementSpeed2(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 id) const = 0;
virtual void SetMou4(uint32_t index, uint32_t mou4) const = 0;
virtual void SetStatusServer(uint32_t index, uint32_t status) const = 0;
virtual void SetStatus(uint32_t index, uint32_t status) const = 0;
virtual void SetStatusEvent(uint32_t index, uint32_t status) const = 0;
virtual void SetModelTime(uint32_t index, uint32_t time) const = 0;
virtual void SetModelStartTime(uint32_t index, uint32_t time) const = 0;
virtual void SetClaimStatus(uint32_t index, uint32_t status) const = 0;
virtual void SetZoneId(uint32_t index, uint32_t zoneId) const = 0;
virtual void SetAnimation(uint32_t index, uint32_t animationIndex, uint32_t animation) const = 0;
virtual void SetAnimationTime(uint32_t index, uint16_t time) 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 id) const = 0;
virtual void SetEmoteIdString(uint32_t index, uint32_t emoteString) const = 0;
virtual void SetEmoteTargetActorPointer(uint32_t index, uintptr_t pointer) 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, uint8_t flag) const = 0;
virtual void SetMountId(uint32_t index, uint8_t mount) const = 0;
virtual void SetFishingUnknown0000(uint32_t index, int32_t unknown) const = 0;
virtual void SetFishingUnknown0001(uint32_t index, int32_t unknown) const = 0;
virtual void SetFishingActionCountdown(uint32_t index, int16_t time) const = 0;
virtual void SetFishingRodCastTime(uint32_t index, int16_t time) const = 0;
virtual void SetFishingUnknown0002(uint32_t index, int16_t unknown) const = 0;
virtual void SetLastActionId(uint32_t index, uint32_t action) const = 0;
virtual void SetLastActionActorPointer(uint32_t index, uintptr_t pointer) const = 0;
virtual void SetTargetedIndex(uint32_t index, uint16_t targetIndex) const = 0;
virtual void SetPetTargetIndex(uint32_t index, uint16_t targetIndex) const = 0;
virtual void SetUpdateRequestDelay(uint32_t index, uint16_t delay) const = 0;
virtual void SetIsDirty(uint32_t index, uint8_t dirty) const = 0;
virtual void SetBallistaFlags(uint32_t index, uint8_t flags) 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 SetModelHitboxSize(uint32_t index, float size) const = 0;
virtual void SetEnvironmentAreaId(uint32_t index, uint32_t id) const = 0;
virtual void SetMonstrosityFlag(uint32_t index, uint16_t flag) const = 0;
virtual void SetMonstrosityNameId(uint32_t index, uint16_t id) const = 0;
virtual void SetMonstrosityName(uint32_t index, const char* name) const = 0;
virtual void SetMonstrosityNameEnd(uint32_t index, uint8_t end) const = 0;
virtual void SetMonstrosityNameAbbr(uint32_t index, const char* name) const = 0;
virtual void SetMonstrosityNameAbbrEnd(uint32_t index, uint8_t end) const = 0;
virtual void SetCustomProperties(uint32_t index, uint8_t* props) const = 0;
virtual void SetBallistaInfo(uint32_t index, uint8_t* info) const = 0;
virtual void SetFellowTargetIndex(uint32_t index, uint16_t targetIndex) const = 0;
virtual void SetWarpTargetIndex(uint32_t index, uint16_t targetIndex) const = 0;
virtual void SetTrustOwnerTargetIndex(uint32_t index, uint16_t targetIndex) const = 0;
virtual void SetAreaDisplayTargetIndex(uint32_t index, uint16_t targetIndex) const = 0;
};
struct IInventory
{
/**
* Warning!
*
* Plugins should not use this function! Use the Get/Set properties instead!
*/
virtual Ashita::FFXI::inventory_t* GetRawStructure(void) const = 0;
// Get Properties (Items)
virtual Ashita::FFXI::item_t* GetContainerItem(uint32_t containerId, uint32_t index) const = 0;
virtual uint32_t GetContainerCount(uint32_t containerId) const = 0;
virtual uint32_t GetContainerCountMax(uint32_t containerId) const = 0;
// Get Properties (Treasure Pool)
virtual Ashita::FFXI::treasureitem_t* GetTreasurePoolItem(uint32_t index) const = 0;
virtual uint32_t GetTreasurePoolStatus(void) const = 0;
virtual uint32_t GetTreasurePoolItemCount(void) const = 0;
// Get Properties (Misc)
virtual uint32_t GetContainerUpdateCounter(void) const = 0;
virtual uint32_t GetContainerUpdateFlags(void) const = 0;
virtual uint32_t GetDisplayItemSlot(void) const = 0;
virtual uint32_t GetDisplayItemPointer(void) const = 0;
// Get Properties (Equipment)
virtual Ashita::FFXI::equipmententry_t* GetEquippedItem(uint32_t index) const = 0;
// Get Properties (Check)
virtual Ashita::FFXI::itemcheck_t* GetCheckEquippedItem(uint32_t index) const = 0;
virtual uint32_t GetCheckTargetIndex(void) const = 0;
virtual uint32_t GetCheckServerId(void) const = 0;
virtual uint32_t GetCheckFlags(void) const = 0;
virtual uint8_t GetCheckMainJob(void) const = 0;
virtual uint8_t GetCheckSubJob(void) const = 0;
virtual uint8_t GetCheckMainJobLevel(void) const = 0;
virtual uint8_t GetCheckSubJobLevel(void) const = 0;
virtual uint8_t GetCheckMainJob2(void) const = 0;
virtual uint8_t GetCheckMasteryLevel(void) const = 0;
virtual uint8_t GetCheckMasteryFlags(void) const = 0;
virtual uint8_t* GetCheckLinkshellName(void) const = 0;
virtual uint16_t GetCheckLinkshellColor(void) const = 0;
virtual uint8_t GetCheckLinkshellIconSetId(void) const = 0;
virtual uint8_t GetCheckLinkshellIconSetIndex(void) const = 0;
virtual uint32_t GetCheckBallistaChevronCount(void) const = 0;
virtual uint16_t GetCheckBallistaChevronFlags(void) const = 0;
virtual uint16_t GetCheckBallistaFlags(void) const = 0;
// Get Properties (Search Comment)
virtual const char* GetSearchComment(void) const = 0;
// Get Properties (Crafting)
virtual uint32_t GetCraftStatus(void) const = 0;
virtual uintptr_t GetCraftCallback(void) const = 0;
virtual uint32_t GetCraftTimestampAttempt(void) const = 0;
virtual uint32_t GetCraftTimestampResponse(void) const = 0;
// Set Properties (Crafting)
virtual void SetCraftStatus(uint32_t status) const = 0;
virtual void SetCraftCallback(uintptr_t callback) const = 0;
virtual void SetCraftTimestampAttempt(uint32_t timestamp) const = 0;
virtual void SetCraftTimestampResponse(uint32_t timestamp) const = 0;
// Get Properties (Selected Item)
virtual const char* GetSelectedItemName(void) const = 0;
virtual uint16_t GetSelectedItemId(void) const = 0;
virtual uint8_t GetSelectedItemIndex(void) const = 0;
};
struct IParty
{
/**
* Warning!
*
* Plugins should not use this function! Use the Get/Set properties instead!
*/
virtual Ashita::FFXI::party_t* GetRawStructure(void) const = 0;
// Get Properties (Alliance)
virtual uint32_t GetAllianceLeaderServerId(void) const = 0;
virtual uint32_t GetAlliancePartyLeaderServerId1(void) const = 0;
virtual uint32_t GetAlliancePartyLeaderServerId2(void) const = 0;
virtual uint32_t GetAlliancePartyLeaderServerId3(void) const = 0;
virtual int8_t GetAlliancePartyVisible1(void) const = 0;
virtual int8_t GetAlliancePartyVisible2(void) const = 0;
virtual int8_t GetAlliancePartyVisible3(void) const = 0;
virtual int8_t GetAlliancePartyMemberCount1(void) const = 0;
virtual int8_t GetAlliancePartyMemberCount2(void) const = 0;
virtual int8_t GetAlliancePartyMemberCount3(void) const = 0;
virtual int8_t GetAllianceInvited(void) const = 0;
// Get Properties (Party Members)
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 GetMemberLastUpdatedTimestamp(uint32_t index) const = 0;
virtual uint32_t GetMemberHP(uint32_t index) const = 0;
virtual uint32_t GetMemberMP(uint32_t index) const = 0;
virtual uint32_t GetMemberTP(uint32_t index) const = 0;
virtual uint8_t GetMemberHPPercent(uint32_t index) const = 0;
virtual uint8_t GetMemberMPPercent(uint32_t index) const = 0;
virtual uint16_t GetMemberZone(uint32_t index) const = 0;
virtual uint16_t GetMemberZone2(uint32_t index) const = 0;
virtual uint32_t GetMemberFlagMask(uint32_t index) const = 0;
virtual uint16_t GetMemberTreasureLot(uint32_t index, uint32_t slot) const = 0;
virtual uint16_t GetMemberMonstrosityItemId(uint32_t index) const = 0;
virtual uint8_t GetMemberMonstrosityPrefixFlag1(uint32_t index) const = 0;
virtual uint8_t GetMemberMonstrosityPrefixFlag2(uint32_t index) const = 0;
virtual const char* GetMemberMonstrosityName(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 GetMemberSubJobLevel(uint32_t index) const = 0;
virtual uint32_t GetMemberServerId2(uint32_t index) const = 0;
virtual uint8_t GetMemberHPPercent2(uint32_t index) const = 0;
virtual uint8_t GetMemberMPPercent2(uint32_t index) const = 0;
virtual uint8_t GetMemberIsActive(uint32_t index) const = 0;
/**
* Warning!
*
* Plugins should not use this function! Use the Get/Set properties instead!
*/
virtual Ashita::FFXI::partystatusicons_t* GetRawStructureStatusIcons(void) const = 0;
// Get Properties (Status Icons)
virtual uint32_t GetStatusIconsServerId(uint32_t index) const = 0;
virtual uint32_t GetStatusIconsTargetIndex(uint32_t index) const = 0;
virtual uint64_t GetStatusIconsBitMask(uint32_t index) const = 0;
virtual uint8_t* GetStatusIcons(uint32_t index) const = 0;
};
struct IPlayer
{
/**
* Warning!
*
* Plugins should not use this function! Use the Get/Set properties instead!
*/
virtual Ashita::FFXI::player_t* GetRawStructure(void) const = 0;
// Get Properties (Player Info)
virtual uint32_t GetHPMax(void) const = 0;
virtual uint32_t GetMPMax(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 sid) const = 0;
virtual int16_t GetStatModifier(uint32_t sid) const = 0;
virtual int16_t GetAttack(void) const = 0;
virtual int16_t GetDefense(void) const = 0;
virtual int16_t GetResist(uint32_t rid) const = 0;
virtual uint16_t GetTitle(void) const = 0;
virtual uint16_t GetRank(void) const = 0;
virtual uint16_t GetRankPoints(void) const = 0;
virtual uint16_t GetHomepoint(void) const = 0;
virtual uint8_t GetNation(void) const = 0;
virtual uint8_t GetResidence(void) const = 0;
virtual uint16_t GetSuLevel(void) const = 0;
virtual uint8_t GetHighestItemLevel(void) const = 0;
virtual uint8_t GetItemLevel(void) const = 0;
virtual uint8_t GetMainHandItemLevel(void) const = 0;
virtual uint8_t GetRangedItemLevel(void) const = 0;
virtual uint32_t GetUnityFaction(void) const = 0;
virtual uint32_t GetUnityPoints(void) const = 0;
virtual uint16_t GetUnityPartialPersonalEvalutionPoints(void) const = 0;
virtual uint16_t GetUnityPersonalEvaluationPoints(void) const = 0;
virtual uint32_t GetUnityChatColorFlag(void) const = 0;
virtual uint8_t GetMasteryJob(void) const = 0;
virtual uint8_t GetMasteryJobLevel(void) const = 0;
virtual uint8_t GetMasteryFlags(void) const = 0;
virtual uint8_t GetMasteryUnknown0000(void) const = 0;
virtual uint32_t GetMasteryExp(void) const = 0;
virtual uint32_t GetMasteryExpNeeded(void) const = 0;
virtual Ashita::FFXI::combatskill_t GetCombatSkill(uint32_t sid) const = 0;
virtual Ashita::FFXI::craftskill_t GetCraftSkill(uint32_t sid) const = 0;
virtual uint16_t GetAbilityRecast(uint32_t index) const = 0;
virtual uint8_t GetAbilityRecastCalc1(uint32_t index) const = 0;
virtual uint16_t GetAbilityRecastTimerId(uint32_t index) const = 0;
virtual int16_t GetAbilityRecastCalc2(uint32_t index) const = 0;
virtual uint32_t GetMountRecast(void) const = 0;
virtual uint32_t GetMountRecastTimerId(void) const = 0;
virtual uint8_t GetDataLoadedFlags(void) const = 0;
virtual uint16_t GetLimitPoints(void) const = 0;
virtual uint8_t GetMeritPoints(void) const = 0;
virtual uint8_t GetAssimilationPoints(void) const = 0;
virtual bool GetIsLimitBreaker(void) const = 0;
virtual bool GetIsExperiencePointsLocked(void) const = 0;
virtual bool GetIsLimitModeEnabled(void) const = 0;
virtual uint8_t GetMeritPointsMax(void) const = 0;
virtual uint8_t* GetHomepointMasks(void) const = 0;
virtual uint32_t GetIsZoning(void) const = 0;
virtual float GetStatusOffset1X(void) const = 0;
virtual float GetStatusOffset1Z(void) const = 0;
virtual float GetStatusOffset1Y(void) const = 0;
virtual float GetStatusOffset1W(void) const = 0;
virtual float GetStatusOffset2X(void) const = 0;
virtual float GetStatusOffset2Z(void) const = 0;
virtual float GetStatusOffset2Y(void) const = 0;
virtual float GetStatusOffset2W(void) const = 0;
virtual float GetStatusOffset3X(void) const = 0;
virtual float GetStatusOffset3Z(void) const = 0;
virtual float GetStatusOffset3Y(void) const = 0;
virtual float GetStatusOffset3W(void) const = 0;
virtual float GetStatusOffset4X(void) const = 0;
virtual float GetStatusOffset4Z(void) const = 0;
virtual float GetStatusOffset4Y(void) const = 0;
virtual float GetStatusOffset4W(void) const = 0;
// Get Properties (Job Points)
virtual uint16_t GetCapacityPoints(uint32_t jobid) const = 0;
virtual uint16_t GetJobPoints(uint32_t jobid) const = 0;
virtual uint16_t GetJobPointsSpent(uint32_t jobid) const = 0;
// Get Properties (Status Icons / Buffs)
virtual int16_t* GetStatusIcons(void) const = 0;
virtual uint32_t* GetStatusTimers(void) const = 0;
virtual int16_t* GetBuffs(void) const = 0;
// Get Properties (Pet Info)
virtual uint8_t GetPetMPPercent(void) const = 0;
virtual uint32_t GetPetTP(void) const = 0;
// Get Properties (Extra Info)
virtual uint8_t GetJobLevel(uint32_t jobid) const = 0;
virtual uint32_t GetJobMasterFlags(void) const = 0;
virtual uint8_t GetJobMasterLevel(uint32_t jobid) const = 0;
virtual uint8_t GetLoginStatus(void) const = 0;
// Helper Functions
virtual bool HasAbilityData(void) const = 0;
virtual bool HasSpellData(void) const = 0;
virtual bool HasAbility(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;
virtual bool HasKeyItem(uint32_t id) const = 0;
};
struct IRecast
{
// Get Properties
virtual uint32_t GetAbilityRecast(uint32_t index) const = 0;
virtual uint8_t GetAbilityCalc1(uint32_t index) const = 0;
virtual uint32_t GetAbilityTimerId(uint32_t index) const = 0;
virtual int16_t GetAbilityCalc2(uint32_t index) const = 0;
virtual uint32_t GetAbilityTimer(uint32_t index) const = 0;
virtual uint32_t GetSpellTimer(uint32_t index) const = 0;
};
struct ITarget
{
/**
* Warning!
*
* Plugins should not use these functions! Use the Get/Set properties instead!
*/
virtual Ashita::FFXI::target_t* GetRawStructure(void) const = 0;
virtual Ashita::FFXI::targetwindow_t* GetRawStructureWindow(void) const = 0;
// Get Properties (Target Entry)
virtual uint32_t GetTargetIndex(uint32_t index) const = 0;
virtual uint32_t GetServerId(uint32_t index) const = 0;
virtual uintptr_t GetEntityPointer(uint32_t index) const = 0;
virtual uintptr_t GetActorPointer(uint32_t index) const = 0;
virtual float GetArrowPositionX(uint32_t index) const = 0;
virtual float GetArrowPositionZ(uint32_t index) const = 0;
virtual float GetArrowPositionY(uint32_t index) const = 0;
virtual float GetArrowPositionW(uint32_t index) const = 0;
virtual uint8_t GetIsActive(uint32_t index) const = 0;
virtual uint8_t GetIsModelActor(uint32_t index) const = 0;
virtual uint8_t GetIsArrowActive(uint32_t index) const = 0;
virtual uint16_t GetChecksum(uint32_t index) const = 0;
// Get Properties (Target Misc)
virtual uint8_t GetIsWalk(void) const = 0;
virtual uint8_t GetIsAutoNotice(void) const = 0;
virtual uint8_t GetIsSubTargetActive(void) const = 0;
virtual uint8_t GetDeactivateTarget(void) const = 0;
virtual uint8_t GetModeChangeLock(void) const = 0;
virtual uint8_t GetIsMouseRequestStack(void) const = 0;
virtual uint8_t GetIsMouseRequestCancel(void) const = 0;
virtual uint8_t GetIsPlayerMoving(void) const = 0;
virtual uint32_t GetLockedOnFlags(void) const = 0;
virtual uint32_t GetSubTargetFlags(void) const = 0;
virtual uint16_t GetDefaultMode(void) const = 0;
virtual uint16_t GetMenuTargetLock(void) const = 0;
virtual uint8_t GetActionTargetActive(void) const = 0;
virtual uint8_t GetActionTargetMaxYalms(void) const = 0;
virtual uint8_t GetIsMenuOpen(void) const = 0;
virtual uint8_t GetIsActionAoe(void) const = 0;
virtual uint8_t GetActionType(void) const = 0;
virtual uint8_t GetActionAoeRange(void) const = 0;
virtual uint32_t GetActionId(void) const = 0;
virtual uint32_t GetActionTargetServerId(void) const = 0;
virtual uint32_t GetFocusTargetIndex(void) const = 0;
virtual uint32_t GetFocusTargetServerId(void) const = 0;
virtual float GetTargetPosF(uint32_t index) const = 0;
virtual const char* GetLastTargetName(void) const = 0;
virtual uint32_t GetLastTargetIndex(void) = 0;
virtual uint32_t GetLastTargetServerId(void) = 0;
virtual uint32_t GetLastTargetChecksum(void) = 0;
virtual uintptr_t GetActionCallback(void) const = 0;
virtual uintptr_t GetCancelCallback(void) const = 0;
virtual uintptr_t GetMyroomCallback(void) const = 0;
virtual uintptr_t GetActionAoeCallback(void) const = 0;
// Get Properties (Target Window)
virtual const char* GetWindowName(void) const = 0;
virtual uintptr_t GetWindowEntityPointer(void) const = 0;
virtual uint16_t GetWindowFrameChildrenOffsetX(void) const = 0;
virtual uint16_t GetWindowFrameChildrenOffsetY(void) const = 0;
virtual uint16_t GetWindowIconPositionX(void) const = 0;
virtual uint16_t GetWindowIconPositionY(void) const = 0;
virtual uint16_t GetWindowFrameOffsetX(void) const = 0;
virtual uint16_t GetWindowFrameOffsetY(void) const = 0;
virtual uint32_t GetWindowLockShape(void) const = 0;
virtual uint32_t GetWindowServerId(void) const = 0;
virtual uint8_t GetWindowHPPercent(void) const = 0;
virtual uint8_t GetWindowDeathFlag(void) const = 0;
virtual uint8_t GetWindowReraiseFlag(void) const = 0;
virtual uint32_t GetWindowDeathNameColor(void) const = 0;
virtual uint8_t GetWindowIsWindowLoaded(void) const = 0;
virtual uint32_t GetWindowHelpString(void) const = 0;
virtual uint32_t GetWindowHelpTitle(void) const = 0;
virtual uint32_t GetWindowAnkShape(uint32_t index) const = 0;
virtual uint8_t GetWindowSub(void) const = 0;
virtual uint8_t GetWindowAnkNum(void) const = 0;
virtual int16_t GetWindowAnkX(void) const = 0;
virtual int16_t GetWindowAnkY(void) const = 0;
virtual int16_t GetWindowSubAnkX(void) const = 0;
virtual int16_t GetWindowSubAnkY(void) const = 0;
// Helper Functions
virtual void SetTarget(uint32_t index, bool force) const = 0;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Ashita Input Interface Definitions
//
////////////////////////////////////////////////////////////////////////////////////////////////////
struct IController
{
// Methods (Callbacks)
virtual void AddCallback(const char* alias, const getdevicedatacallback_f& datacb, const getdevicestatecallback_f& statecb, const controllercallback_f& controllercb) = 0;
virtual void RemoveCallback(const char* alias) = 0;
// Methods (Input Injection)
virtual void QueueButtonData(DWORD dwOfs, DWORD dwData) = 0;
// Properties
virtual bool GetTrackDeadZone(void) const = 0;
virtual void SetTrackDeadZone(bool track) = 0;
};
struct IKeyboard
{
// Methods (Keybinds)
virtual void Bind(uint32_t key, bool down, bool alt, bool apps, bool ctrl, bool shift, bool win, const char* command) = 0;
virtual void Unbind(uint32_t key, bool down, bool alt, bool apps, bool ctrl, bool shift, bool win) = 0;
virtual void UnbindAll(void) = 0;
virtual bool IsBound(uint32_t key, bool down, bool alt, bool apps, bool ctrl, bool shift, bool win) = 0;
// Methods (Callbacks)
virtual void AddCallback(const char* alias, const getdevicedatacallback_f& datacb, const getdevicestatecallback_f& statecb, const keyboardcallback_f& keyboardcb) = 0;
virtual void RemoveCallback(const char* alias) = 0;
// Methods (Key Conversions)
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;
// Properties
virtual bool GetWindowsKeyEnabled(void) const = 0;
virtual void SetWindowsKeyEnabled(bool enabled) = 0;
virtual bool GetBlockInput(void) const = 0;
virtual void SetBlockInput(bool blocked) = 0;
virtual bool GetBlockBindsDuringInput(void) const = 0;
virtual void SetBlockBindsDuringInput(bool blocked) = 0;
virtual bool GetSilentBinds(void) const = 0;
virtual void SetSilentBinds(bool silent) = 0;
};
struct IMouse
{
// Methods (Callbacks)
virtual void AddCallback(const char* alias, mousecallback_f callback) = 0;
virtual void RemoveCallback(const char* alias) = 0;
// Properties
virtual bool GetBlockInput(void) const = 0;
virtual void SetBlockInput(bool blocked) = 0;
};
struct IXInput
{
// Methods (Callbacks)
virtual void AddCallback(const char* alias, const xinputgetstatecallback_f& statecb, const xinputcallback_f& controllercb) = 0;
virtual void RemoveCallback(const char* alias) = 0;
// Methods (Input Injection)
virtual void QueueButtonData(uint8_t button, int16_t state) = 0;
// Properties
virtual bool GetTrackDeadZone(void) const = 0;
virtual void SetTrackDeadZone(bool track) = 0;
};
struct IInputManager
{
// Methods (Input Objects)
virtual IController* GetController(void) const = 0;
virtual IKeyboard* GetKeyboard(void) const = 0;
virtual IMouse* GetMouse(void) const = 0;
virtual IXInput* GetXInput(void) const = 0;
// Properties
virtual bool GetAllowGamepadInBackground(void) const = 0;
virtual void SetAllowGamepadInBackground(bool allow) = 0;
virtual bool GetDisableGamepad(void) const = 0;
virtual void SetDisableGamepad(bool disabled) = 0;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Ashita Interface Definitions
//
////////////////////////////////////////////////////////////////////////////////////////////////////
struct IChatManager
{
// Methods
virtual void ParseCommand(int32_t mode, const char* command) = 0;
virtual void QueueCommand(int32_t mode, const char* command) = 0;
virtual void Write(int32_t mode, bool indent, const char* message) = 0;
virtual void Writef(int32_t mode, bool indent, const char* format, ...) = 0;
virtual void AddChatMessage(int32_t mode, bool indent, const char* message) = 0;
virtual int32_t ParseAutoTranslate(const char* message, char* buffer, int32_t bufferSize, bool useBrackets) const = 0;
virtual void ExecuteScript(const char* file, const char* arguments, bool threaded) = 0;
virtual void ExecuteScriptString(const char* string, const char* arguments, bool threaded) = 0;
// Properties
virtual const char* GetInputTextRaw(void) const = 0;
virtual void SetInputTextRaw(const char* message, uint32_t size) const = 0;
virtual uint32_t GetInputTextRawLength(void) const = 0;
virtual uint32_t GetInputTextRawCaretPosition(void) const = 0;
virtual const char* GetInputTextParsed(void) const = 0;
virtual void SetInputTextParsed(const char* message) const = 0;
virtual uint32_t GetInputTextParsedLength(void) const = 0;
virtual uint32_t GetInputTextParsedLengthMax(void) const = 0;
virtual const char* GetInputTextDisplay(void) const = 0;
virtual void SetInputTextDisplay(const char* message) const = 0;
virtual void SetInputText(const char* message) const = 0;
// Helpers
virtual uint8_t IsInputOpen(void) const = 0;
// Properties
virtual bool GetSilentAliases(void) const = 0;
virtual void SetSilentAliases(bool silent) = 0;
};
struct IConfigurationManager
{
// Methods (Files)
virtual bool Load(const char* alias, const char* file) = 0;
virtual bool Save(const char* alias, const char* file) = 0;
virtual void Delete(const char* alias) = 0;
// Methods (Section Helpers)
virtual uint32_t GetSections(const char* alias, char* buffer, uint32_t bufferSize) = 0;
virtual uint32_t GetSectionKeys(const char* alias, const char* section, char* buffer, uint32_t bufferSize) = 0;
// Methods (Value Helpers)
virtual const char* GetString(const char* alias, const char* section, const char* key) = 0;
virtual void SetValue(const char* alias, const char* section, const char* key, const char* value) = 0;
// Methods (Value Getters)
virtual bool GetBool(const char* alias, const char* section, const char* key, bool defaultValue) = 0;
virtual uint8_t GetUInt8(const char* alias, const char* section, const char* key, uint8_t defaultValue) = 0;
virtual uint16_t GetUInt16(const char* alias, const char* section, const char* key, uint16_t defaultValue) = 0;
virtual uint32_t GetUInt32(const char* alias, const char* section, const char* key, uint32_t defaultValue) = 0;
virtual uint64_t GetUInt64(const char* alias, const char* section, const char* key, uint64_t defaultValue) = 0;
virtual int8_t GetInt8(const char* alias, const char* section, const char* key, int8_t defaultValue) = 0;
virtual int16_t GetInt16(const char* alias, const char* section, const char* key, int16_t defaultValue) = 0;
virtual int32_t GetInt32(const char* alias, const char* section, const char* key, int32_t defaultValue) = 0;
virtual int64_t GetInt64(const char* alias, const char* section, const char* key, int64_t defaultValue) = 0;
virtual float GetFloat(const char* alias, const char* section, const char* key, float defaultValue) = 0;
virtual double GetDouble(const char* alias, const char* section, const char* key, double defaultValue) = 0;
};
struct IMemoryManager
{
// Methods (Memory Objects)
virtual IAutoFollow* GetAutoFollow(void) const = 0;
virtual ICastBar* GetCastBar(void) const = 0;
virtual IEntity* GetEntity(void) const = 0;
virtual IInventory* GetInventory(void) const = 0;
virtual IParty* GetParty(void) const = 0;
virtual IPlayer* GetPlayer(void) const = 0;
virtual IRecast* GetRecast(void) const = 0;
virtual ITarget* GetTarget(void) const = 0;
};
struct IOffsetManager
{
// Methods
virtual void Add(const char* section, const char* key, int32_t offset) = 0;
virtual int32_t Get(const char* section, const char* key) const = 0;
virtual void Delete(const char* section) = 0;
virtual void Delete(const char* section, const char* key) = 0;
};
struct IPacketManager
{
// Methods (Custom Packet Injection)
virtual void AddIncomingPacket(uint16_t id, uint32_t len, uint8_t* data) = 0;
virtual void AddOutgoingPacket(uint16_t id, uint32_t len, uint8_t* data) = 0;
// Methods (Game Packet Queueing)
virtual bool QueueOutgoingPacket(uint16_t id, uint16_t len, uint16_t align, uint32_t pparam1, uint32_t pparam2, std::function callback) const = 0;
};
struct IPluginManager
{
// Methods
virtual bool Load(const char* name, const char* args) = 0;
virtual bool Unload(const char* name) = 0;
virtual void UnloadAll(void) = 0;
virtual bool IsLoaded(const char* name) = 0;
virtual void* Get(const char* name) = 0;
virtual void* Get(uint32_t index) = 0;
virtual uint32_t Count(void) = 0;
// Methods (Events)
virtual void RaiseEvent(const char* eventName, const void* eventData, uint32_t eventSize) = 0;
// Properties
virtual bool GetSilentPlugins(void) const = 0;
virtual void SetSilentPlugins(bool silent) = 0;
};
struct IPolPluginManager
{
// Methods
virtual bool Load(const char* name, const char* args) = 0;
virtual bool Unload(const char* name) = 0;
virtual void UnloadAll(void) = 0;
virtual bool IsLoaded(const char* name) = 0;
virtual void* Get(const char* name) = 0;
virtual void* Get(uint32_t index) = 0;
virtual uint32_t Count(void) = 0;
// Methods (Events)
virtual void RaiseEvent(const char* eventName, const void* eventData, uint32_t eventSize) = 0;
};
struct IPointerManager
{
// Methods
virtual void Add(const char* name, uintptr_t pointer) = 0;
virtual uintptr_t Add(const char* name, const char* moduleName, const char* pattern, int32_t offset, uint32_t count) = 0;
virtual uintptr_t Get(const char* name) const = 0;
virtual void Delete(const char* name) = 0;
};
struct IResourceManager
{
// Methods (Abilities)
virtual IAbility* GetAbilityById(uint32_t id) const = 0;
virtual IAbility* GetAbilityByName(const char* name, uint32_t langId) const = 0;
virtual IAbility* GetAbilityByTimerId(uint32_t id) const = 0;
// Methods (Spells)
virtual ISpell* GetSpellById(uint32_t id) const = 0;
virtual ISpell* GetSpellByName(const char* name, uint32_t langId) const = 0;
// Methods (Items)
virtual IItem* GetItemById(uint32_t id) const = 0;
virtual IItem* GetItemByName(const char* name, uint32_t langId) const = 0;
// Methods (Entities)
virtual uint32_t GetEntityCount(void) const = 0;
virtual uint32_t GetEntityIndexById(uint32_t id) const = 0;
virtual uint32_t GetEntityIdByIndex(uint32_t index) const = 0;
virtual const char* GetEntityNameByIndex(uint32_t index) const = 0;
virtual const char* GetEntityNameById(uint32_t id) const = 0;
// Methods (Status Icons)
virtual IStatusIcon* GetStatusIconByIndex(uint16_t index) const = 0;
virtual IStatusIcon* GetStatusIconById(uint16_t id) const = 0;
// Methods (Strings)
virtual const char* GetString(const char* table, uint32_t index) const = 0;
virtual const char* GetString(const char* table, uint32_t index, uint32_t langId) const = 0;
virtual int32_t GetString(const char* table, const char* str) const = 0;
virtual int32_t GetString(const char* table, const char* str, uint32_t langId) const = 0;
virtual int32_t GetStringLength(const char* table, uint32_t index) const = 0;
virtual int32_t GetStringLength(const char* table, uint32_t index, uint32_t langId) const = 0;
// Methods (Textures)
virtual IDirect3DTexture8* GetTexture(const char* name) const = 0;
virtual D3DXIMAGE_INFO GetTextureInfo(const char* name) const = 0;
// Helpers
virtual uint32_t GetFilePath(uint32_t fileId, char* buffer, uint32_t bufferSize) = 0;
virtual uint32_t GetAbilityRange(uint32_t abilityId, bool useAreaRange) const = 0;
virtual uint32_t GetAbilityType(uint32_t type) const = 0;
virtual uint32_t GetSpellRange(uint32_t spellId, bool useAreaRange) const = 0;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Direct3D8 Font/Primitive Interface Definitions
//
////////////////////////////////////////////////////////////////////////////////////////////////////
struct IPrimitiveObject
{
// Methods
virtual void Render(void) const = 0;
virtual bool SetTextureFromFile(const char* path) = 0;
virtual bool SetTextureFromMemory(const void* data, uint32_t size, D3DCOLOR colorKey) = 0;
virtual bool SetTextureFromResource(const char* moduleName, const char* resName) = 0;
virtual bool SetTextureFromResourceCache(const char* name) = 0;
virtual bool SetTextureFromTexture(IDirect3DTexture8* texture, uint32_t width, uint32_t height) = 0;
virtual bool HitTest(int32_t x, int32_t y) const = 0;
// Properties
virtual const char* GetAlias(void) const = 0;
virtual float GetTextureOffsetX(void) const = 0;
virtual float GetTextureOffsetY(void) const = 0;
virtual bool GetBorderVisible(void) const = 0;
virtual D3DCOLOR GetBorderColor(void) const = 0;
virtual Ashita::FontBorderFlags GetBorderFlags(void) const = 0;
virtual RECT GetBorderSizes(void) const = 0;
virtual bool GetVisible(void) const = 0;
virtual float GetPositionX(void) const = 0;
virtual float GetPositionY(void) const = 0;
virtual bool GetCanFocus(void) const = 0;
virtual bool GetLocked(void) const = 0;
virtual bool GetLockedZ(void) const = 0;
virtual float GetScaleX(void) const = 0;
virtual float GetScaleY(void) const = 0;
virtual float GetWidth(void) const = 0;
virtual float GetHeight(void) const = 0;
virtual Ashita::PrimitiveDrawFlags GetDrawFlags(void) const = 0;
virtual D3DCOLOR GetColor(void) const = 0;
virtual void SetAlias(const char* alias) = 0;
virtual void SetTextureOffsetX(float x) = 0;
virtual void SetTextureOffsetY(float y) = 0;
virtual void SetBorderVisible(bool visible) = 0;
virtual void SetBorderColor(D3DCOLOR color) = 0;
virtual void SetBorderFlags(Ashita::FontBorderFlags flags) = 0;
virtual void SetBorderSizes(RECT rect) = 0;
virtual void SetVisible(bool visible) = 0;
virtual void SetPositionX(float x) = 0;
virtual void SetPositionY(float y) = 0;
virtual void SetCanFocus(bool focus) = 0;
virtual void SetLocked(bool locked) = 0;
virtual void SetLockedZ(bool locked) = 0;
virtual void SetScaleX(float x) = 0;
virtual void SetScaleY(float y) = 0;
virtual void SetWidth(float width) = 0;
virtual void SetHeight(float height) = 0;
virtual void SetDrawFlags(Ashita::PrimitiveDrawFlags flags) = 0;
virtual void SetColor(D3DCOLOR color) = 0;
// Properties (Callbacks)
virtual fontkeyboardevent_f GetKeyboardCallback(void) const = 0;
virtual fontmouseevent_f GetMouseCallback(void) const = 0;
virtual void SetKeyboardCallback(fontkeyboardevent_f cb) = 0;
virtual void SetMouseCallback(fontmouseevent_f cb) = 0;
};
struct IPrimitiveManager
{
// Methods
virtual IPrimitiveObject* Create(const char* alias) = 0;
virtual IPrimitiveObject* Get(const char* alias) = 0;
virtual void Delete(const char* alias) = 0;
// Properties
virtual IPrimitiveObject* GetFocusedObject(void) = 0;
virtual bool SetFocusedObject(const char* alias) = 0;
virtual bool GetVisible(void) const = 0;
virtual void SetVisible(bool visible) = 0;
};
struct IFontObject
{
// Methods
virtual void Render(void) = 0;
virtual void GetTextSize(SIZE* size) const = 0;
virtual bool HitTest(int32_t x, int32_t y) const = 0;
// Properties (Parent & Background Objects)
virtual IFontObject* GetParent(void) const = 0;
virtual IPrimitiveObject* GetBackground(void) const = 0;
// Properties (Real Positions)
virtual float GetRealPositionX(void) const = 0;
virtual float GetRealPositionY(void) const = 0;
// Properties
virtual const char* GetAlias(void) const = 0;
virtual bool GetVisible(void) const = 0;
virtual bool GetCanFocus(void) const = 0;
virtual bool GetLocked(void) const = 0;
virtual bool GetLockedZ(void) const = 0;
virtual bool GetIsDirty(void) const = 0;
virtual float GetWindowWidth(void) const = 0;
virtual float GetWindowHeight(void) const = 0;
virtual const char* GetFontFile(void) const = 0;
virtual const char* GetFontFamily(void) const = 0;
virtual uint32_t GetFontHeight(void) const = 0;
virtual Ashita::FontCreateFlags GetCreateFlags(void) const = 0;
virtual Ashita::FontDrawFlags GetDrawFlags(void) const = 0;
virtual bool GetBold(void) const = 0;
virtual bool GetItalic(void) const = 0;
virtual bool GetRightJustified(void) const = 0;
virtual bool GetStrikeThrough(void) const = 0;
virtual bool GetUnderlined(void) const = 0;
virtual D3DCOLOR GetColor(void) const = 0;
virtual D3DCOLOR GetColorOutline(void) const = 0;
virtual float GetPadding(void) const = 0;
virtual float GetPositionX(void) const = 0;
virtual float GetPositionY(void) const = 0;
virtual bool GetAutoResize(void) const = 0;
virtual Ashita::FrameAnchor GetAnchor(void) const = 0;
virtual Ashita::FrameAnchor GetAnchorParent(void) const = 0;
virtual const char* GetText(void) const = 0;
virtual void SetAlias(const char* alias) = 0;
virtual void SetVisible(bool visible) = 0;
virtual void SetCanFocus(bool focus) = 0;
virtual void SetLocked(bool locked) = 0;
virtual void SetLockedZ(bool locked) = 0;
virtual void SetIsDirty(bool dirty) = 0;
virtual void SetWindowWidth(float width) = 0;
virtual void SetWindowHeight(float height) = 0;
virtual void SetFontFile(const char* file) = 0;
virtual void SetFontFamily(const char* family) = 0;
virtual void SetFontHeight(uint32_t height) = 0;
virtual void SetCreateFlags(Ashita::FontCreateFlags flags) = 0;
virtual void SetDrawFlags(Ashita::FontDrawFlags flags) = 0;
virtual void SetBold(bool bold) = 0;
virtual void SetItalic(bool italic) = 0;
virtual void SetRightJustified(bool right) = 0;
virtual void SetStrikeThrough(bool strike) = 0;
virtual void SetUnderlined(bool underlined) = 0;
virtual void SetColor(D3DCOLOR color) = 0;
virtual void SetColorOutline(D3DCOLOR color) = 0;
virtual void SetPadding(float padding) = 0;
virtual void SetPositionX(float x) = 0;
virtual void SetPositionY(float y) = 0;
virtual void SetAutoResize(bool autoResize) = 0;
virtual void SetAnchor(Ashita::FrameAnchor anchor) = 0;
virtual void SetAnchorParent(Ashita::FrameAnchor anchor) = 0;
virtual void SetText(const char* text) = 0;
virtual void SetParent(IFontObject* parent) = 0;
// Properties (Callbacks)
virtual fontkeyboardevent_f GetKeyboardCallback(void) const = 0;
virtual fontmouseevent_f GetMouseCallback(void) const = 0;
virtual void SetKeyboardCallback(fontkeyboardevent_f cb) = 0;
virtual void SetMouseCallback(fontmouseevent_f cb) = 0;
};
struct IFontManager
{
// Methods
virtual IFontObject* Create(const char* alias) = 0;
virtual IFontObject* Get(const char* alias) = 0;
virtual void Delete(const char* alias) = 0;
// Properties
virtual IFontObject* GetFocusedObject(void) = 0;
virtual bool SetFocusedObject(const char* alias) = 0;
virtual bool GetVisible(void) const = 0;
virtual void SetVisible(bool visible) = 0;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// LogManager Interface Definition
//
////////////////////////////////////////////////////////////////////////////////////////////////////
struct ILogManager
{
// Methods
virtual bool Log(uint32_t level, const char* source, const char* message) = 0;
virtual bool Logf(uint32_t level, const char* source, const char* format, ...) = 0;
// Properties
virtual uint32_t GetLogLevel(void) const = 0;
virtual void SetLogLevel(uint32_t level) = 0;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// AshitaCore Interface Definition
//
////////////////////////////////////////////////////////////////////////////////////////////////////
struct IProperties
{
// PlayOnline Window Properties
virtual HWND GetPlayOnlineHwnd(void) const = 0;
virtual uint32_t GetPlayOnlineStyle(void) const = 0;
virtual uint32_t GetPlayOnlineStyleEx(void) const = 0;
virtual RECT GetPlayOnlineRect(void) const = 0;
virtual void SetPlayOnlineHwnd(HWND hWnd) = 0;
virtual void SetPlayOnlineStyle(uint32_t style) = 0;
virtual void SetPlayOnlineStyleEx(uint32_t style) = 0;
virtual void SetPlayOnlineRect(RECT rect) = 0;
// PlayOnline Mask Window Properties
virtual HWND GetPlayOnlineMaskHwnd(void) const = 0;
virtual uint32_t GetPlayOnlineMaskStyle(void) const = 0;
virtual uint32_t GetPlayOnlineMaskStyleEx(void) const = 0;
virtual RECT GetPlayOnlineMaskRect(void) const = 0;
virtual void SetPlayOnlineMaskHwnd(HWND hWnd) = 0;
virtual void SetPlayOnlineMaskStyle(uint32_t style) = 0;
virtual void SetPlayOnlineMaskStyleEx(uint32_t style) = 0;
virtual void SetPlayOnlineMaskRect(RECT rect) = 0;
// Final Fantasy XI Window Properties
virtual HWND GetFinalFantasyHwnd(void) const = 0;
virtual uint32_t GetFinalFantasyStyle(void) const = 0;
virtual uint32_t GetFinalFantasyStyleEx(void) const = 0;
virtual RECT GetFinalFantasyRect(void) const = 0;
virtual void SetFinalFantasyHwnd(HWND hWnd) = 0;
virtual void SetFinalFantasyStyle(uint32_t style) = 0;
virtual void SetFinalFantasyStyleEx(uint32_t style) = 0;
virtual void SetFinalFantasyRect(RECT rect) = 0;
// Direct3D Properties
virtual bool GetD3DAmbientEnabled(void) const = 0;
virtual uint32_t GetD3DAmbientColor(void) const = 0;
virtual uint32_t GetD3DFillMode(void) const = 0;
virtual void SetD3DAmbientEnabled(bool enabled) = 0;
virtual void SetD3DAmbientColor(uint32_t color) = 0;
virtual void SetD3DFillMode(uint32_t fillmode) = 0;
};
struct IAshitaCore
{
// Properties
virtual HMODULE GetHandle(void) const = 0;
virtual const char* GetInstallPath(void) const = 0;
virtual IDirect3DDevice8* GetDirect3DDevice(void) const = 0;
// Methods (Properties)
virtual IProperties* GetProperties(void) const = 0;
// Methods (Manager Objects)
virtual IChatManager* GetChatManager(void) const = 0;
virtual IConfigurationManager* GetConfigurationManager(void) const = 0;
virtual IFontManager* GetFontManager(void) const = 0;
virtual IGuiManager* GetGuiManager(void) const = 0;
virtual IInputManager* GetInputManager(void) const = 0;
virtual IMemoryManager* GetMemoryManager(void) const = 0;
virtual IOffsetManager* GetOffsetManager(void) const = 0;
virtual IPacketManager* GetPacketManager(void) const = 0;
virtual IPluginManager* GetPluginManager(void) const = 0;
virtual IPolPluginManager* GetPolPluginManager(void) const = 0;
virtual IPointerManager* GetPointerManager(void) const = 0;
virtual IPrimitiveManager* GetPrimitiveManager(void) const = 0;
virtual IResourceManager* GetResourceManager(void) const = 0;
// Methods (API Hook Forwards - DirectX)
virtual IDirect3D8* Direct3DCreate8(UINT SDKVersion) = 0;
virtual HRESULT DirectInput8Create(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID* ppvOut, LPUNKNOWN punkOuter) = 0;
// Methods (API Hook Forwards - Mutex)
virtual HANDLE CreateMutexA(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCSTR lpName) = 0;
virtual HANDLE CreateMutexW(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCWSTR lpName) = 0;
virtual HANDLE OpenMutexA(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCSTR lpName) = 0;
virtual HANDLE OpenMutexW(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCWSTR lpName) = 0;
// Methods (API Hook Forwards - Registry)
virtual LSTATUS RegQueryValueExA(HKEY hKey, LPCSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData) = 0;
// Methods (API Hook Forwards - Window)
virtual HWND CreateWindowExA(DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int X, int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam) = 0;
virtual HWND CreateWindowExW(DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName, DWORD dwStyle, int X, int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam) = 0;
virtual void ExitProcess(UINT uExitCode) = 0;
virtual int GetSystemMetrics(int nIndex) = 0;
virtual int GetWindowTextA(HWND hWnd, LPSTR lpString, int nMaxCount) = 0;
virtual int GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount) = 0;
virtual HBITMAP LoadBitmapW(HINSTANCE hInstance, LPCWSTR lpBitmapName) = 0;
virtual ATOM RegisterClassA(CONST WNDCLASSA* lpWndClass) = 0;
virtual ATOM RegisterClassW(CONST WNDCLASSW* lpWndClass) = 0;
virtual ATOM RegisterClassExA(CONST WNDCLASSEXA* lpWndClass) = 0;
virtual ATOM RegisterClassExW(CONST WNDCLASSEXW* lpWndClass) = 0;
virtual BOOL RemoveMenu(HMENU hMenu, UINT uPosition, UINT uFlags) = 0;
virtual LRESULT SendMessageA(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) = 0;
virtual BOOL SetCursorPos(int X, int Y) = 0;
virtual HWND SetFocus(HWND hWnd) = 0;
virtual BOOL SetForegroundWindow(HWND hWnd) = 0;
virtual BOOL SetPriorityClass(HANDLE hProcess, DWORD dwPriorityClass) = 0;
virtual HHOOK SetWindowsHookExA(int idHook, HOOKPROC lpfn, HINSTANCE hmod, DWORD dwThreadId) = 0;
virtual BOOL SetWindowTextA(HWND hWnd, LPCSTR lpString) = 0;
virtual BOOL SetWindowTextW(HWND hWnd, LPCWSTR lpString) = 0;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Ashita Plugin Base Interface
//
// The base interface that defines the implementation of a plugins main class. Plugins should not
// directly inherit from this interface, they should inherit IPlugin instead.
//
////////////////////////////////////////////////////////////////////////////////////////////////////
struct IPluginBase
{
// Properties (Plugin Information)
virtual const char* GetName(void) const = 0;
virtual const char* GetAuthor(void) const = 0;
virtual const char* GetDescription(void) const = 0;
virtual const char* GetLink(void) const = 0;
virtual double GetVersion(void) const = 0;
virtual double GetInterfaceVersion(void) const = 0;
virtual int32_t GetPriority(void) const = 0;
virtual uint32_t GetFlags(void) const = 0;
// Methods
virtual bool Initialize(IAshitaCore*, ILogManager*, uint32_t) = 0;
virtual void Release(void) = 0;
// Event Callbacks: PluginManager
virtual void HandleEvent(const char*, const void*, uint32_t) = 0;
// Event Callbacks: ChatManager
virtual bool HandleCommand(int32_t, const char*, bool) = 0;
virtual bool HandleIncomingText(int32_t, bool, const char*, int32_t*, bool*, char*, bool, bool) = 0;
virtual bool HandleOutgoingText(int32_t, const char*, int32_t*, char*, bool, bool) = 0;
// Event Callbacks: PacketManager
virtual bool HandleIncomingPacket(uint16_t, uint32_t, const uint8_t*, uint8_t*, uint32_t, const uint8_t*, bool, bool) = 0;
virtual bool HandleOutgoingPacket(uint16_t, uint32_t, const uint8_t*, uint8_t*, uint32_t, const uint8_t*, bool, bool) = 0;
// Event Callbacks: Direct3D
virtual bool Direct3DInitialize(IDirect3DDevice8*) = 0;
virtual void Direct3DBeginScene(bool) = 0;
virtual void Direct3DEndScene(bool) = 0;
virtual void Direct3DPresent(const RECT*, const RECT*, HWND, const RGNDATA*) = 0;
virtual bool Direct3DSetRenderState(D3DRENDERSTATETYPE, DWORD*) = 0;
virtual bool Direct3DDrawPrimitive(D3DPRIMITIVETYPE, UINT, UINT) = 0;
virtual bool Direct3DDrawIndexedPrimitive(D3DPRIMITIVETYPE, UINT, UINT, UINT, UINT) = 0;
virtual bool Direct3DDrawPrimitiveUP(D3DPRIMITIVETYPE, UINT, CONST void*, UINT) = 0;
virtual bool Direct3DDrawIndexedPrimitiveUP(D3DPRIMITIVETYPE, UINT, UINT, UINT, CONST void*, D3DFORMAT, CONST void*, UINT) = 0;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Ashita Plugin Base Class
//
// The base class that all plugins must inherit from. Implements default handlers for all events
// which developers can override if they wish to handle manually. (The main class object returned
// from the 'expCreatePlugin' export of your plugin must inherit from this class.)
//
////////////////////////////////////////////////////////////////////////////////////////////////////
class IPlugin : public IPluginBase
{
public:
/**
* Constructor and Deconstructor
*/
IPlugin(void)
{}
virtual ~IPlugin(void)
{}
/**
* Returns the plugins name.
*
* @return {const char*} The plugins name.
*/
const char* GetName(void) const override
{
return "PluginBase";
}
/**
* Returns the plugins author.
*
* @return {const char*} The plugins author.
*/
const char* GetAuthor(void) const override
{
return "Ashita Development Team";
}
/**
* Returns the plugins description.
*
* @return {const char*} The plugins description.
*/
const char* GetDescription(void) const override
{
return "Ashita Plugin Base";
}
/**
* Returns the plugins homepage link.
*
* @return {const char*} The plugins homepage link.
*/
const char* GetLink(void) const override
{
return "https://www.ashitaxi.com/";
}
/**
* Returns the plugins version.
*
* @return {double} The plugins version.
*/
double GetVersion(void) const override
{
return 1.0f;
}
/**
* Returns the plugins Ashita SDK interface version it was compiled against.
*
* @return {double} The plugins interface version.
*/
double GetInterfaceVersion(void) const override
{
return ASHITA_INTERFACE_VERSION;
}
/**
* Returns the plugins execution priority.
*
* @return {int32_t} The plugins execution priority.
* @notes
*
* The priority value is used to determine the execution order of the plugins loaded in Ashita. When an event is fired, Ashita
* will loop through each of the loaded plugins and allow them to attempt to handle the event. The order that the plugins are
* passed the event is determined by this priority. By default, 0 will load a plugin 'next' in the list of plugins who also are
* set to 0. Meaning if other plugins are already loaded at 0, and your plugin is also 0 your plugin will be last.
*
* Plugins can force themselves sooner or later into the execution order by using this value (both negative and position).
* Negative values will place your plugin sooner in the execution order, while positive values will place it later.
*
* Plugins should use 0 by default if order does not matter to their purpose.
*/
int32_t GetPriority(void) const override
{
return 0;
}
/**
* Returns the plugins flags.
*
* @return {uint32_t} The plugins flags.
* @notes
*
* Ashita offers a various number of events that can be invoked inside of a plugin, allowing plugins to have a lot of control
* over the flow of the game. However, this can create a lot of overhead, more specifically on lower end machines. Plugins can
* use this property to specify the exact events it plans to make use of, allowing Ashita to only invoke ones it needs.
*
* Plugins should explicitly state which flags they plan to make use of and avoid using 'All' flags.
* This can help with the performance of the game for lower end machines.
*
* See the 'Ashita::PluginFlags' enumeration for more information on what each flag does.
*/
uint32_t GetFlags(void) const override
{
return (uint32_t)Ashita::PluginFlags::None;
}
/**
* Event invoked when the plugin is being loaded and initialized.
*
* @param {IAshitaCore*} core - The main Ashita core instance used to interact with the Ashita hook.
* @param {ILogManager*} logger - The log manager instance used to write to the debug log files.
* @param {uint32_t} id - The plugins unique id. (Matches the plugins module base address.)
* @return {bool} True on success, false otherwise.
*
* @notes
*
* Plugins must return true from this function in order to be considered valid and continue to load.
* If your plugin fails to meet any requirements you feel are manditory for it to run, you should return false here and prevent it
* from loading further.
*/
bool Initialize(IAshitaCore* core, ILogManager* logger, const uint32_t id) override
{
UNREFERENCED_PARAMETER(core);
UNREFERENCED_PARAMETER(logger);
UNREFERENCED_PARAMETER(id);
return false;
}
/**
* Event invoked when the plugin is being unloaded.
*
* @notes
*
* Plugins should use this event to cleanup all resources they created or used during their lifespan.
* (ie. Fonts, primitives, textures, Direct3D related resources, memory allocations, etc.)
*/
void Release(void) override
{}
/**
* Event invoked when another plugin has raised a custom event for other plugins to handle.
*
* @param {const char*} eventName - The name of the custom event being raised.
* @param {const void*} eventData - The custom event data to pass through the event.
* @param {uint32_t} eventSize - The size of the custom event data buffer.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UsePluginEvents flag is set.
*
* Plugins can make use of the custom event system as a way to talk to other plugins in a safe manner.
* Events can be raised via the PluginManager::RaiseEvent method which will cause this handler to be
* invoked in all loaded plugins with the given event information.
*/
void HandleEvent(const char* eventName, const void* eventData, const uint32_t eventSize) override
{
UNREFERENCED_PARAMETER(eventName);
UNREFERENCED_PARAMETER(eventData);
UNREFERENCED_PARAMETER(eventSize);
}
/**
* Event invoked when an input command is being processed by the game client.
*
* @param {int32_t} mode - The mode of the command. (See: Ashita::CommandMode)
* @param {const char*} command - The raw command string.
* @param {bool} injected - Flag if the command was injected from an Ashita related resource. (Addon, plugin or internally.)
* @return {bool} True if handled and should be blocked, false otherwise.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UseCommands flag is set.
*
* Any commands sent through the games input handler will be passed to plugins to be processed first allowing plugins to intercept
* and handle any kind of command they wish. This includes commands typed into the chat bar, commands invoked from macros, menu items
* and so on. Commands that have been injected by Ashita or another plugin will be marked via the injected parameter.
*
* If a plugin returns true, the command is blocked from further processing by Ashita or the game client and is considered handled.
*
* Plugins should return true for any commands they have handled or reacted to when appropriate. To prevent deadlocks by trying to
* inject another command here, plugins should instead use the IChatManager::QueueCommand function for any manual command inserts
* back into the game.
*/
bool HandleCommand(int32_t mode, const char* command, bool injected) override
{
UNREFERENCED_PARAMETER(mode);
UNREFERENCED_PARAMETER(command);
UNREFERENCED_PARAMETER(injected);
return false;
}
/**
* Event invoked when incoming text is being processed by the game client, to be added to the chat window.
*
* @param {int32_t} mode - The message mode. (Determines its base color.)
* @param {bool} indent - Flag that determines if the message is indented.
* @param {const char*} message - The raw message string.
* @param {int32_t*} modifiedMode - The modified mode, if any, that has been altered by another addon/plugin.
* @param {bool*} modifiedIndent - The modified indent flag, if any, that has been altered by another addon/plugin.
* @param {char*} modifiedMessage - The modified message string, if any, that has been altered by another addon/plugin.
* @param {bool} injected - Flag if the message was injected from an Ashita related resource. (Addon, plugin, or internally.)
* @param {bool} blocked - Flag if the message has been blocked by another addon/plugin.
* @return {bool} True if handled and should be blocked, false otherwise.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UseText flag is set.
*
* If a plugin returns true, the block flag is set to true (cannot be unset), however the message will still be passed to all loaded
* plugins whom are marked to accept the event. Plugins should check if the blocked flag has been set first before reacting to messages
* in case a previous plugin has deemed it to not be displayed in the game chat log. Unless your plugin requires reacting to certain/all
* messages, then it should simply return immediately if blocked is already true.
*
* mode and message contain the original, unmodified data of the event which can be used to see what was originally used to invoke the
* event, as well as for plugins that require the original unedited message to properly operate. Plugins should however check for changes
* by seeing if modifiedMessage has been altered. If modifiedMessage has any value (strlen > 0) then plugins should honor previous plugin
* changes made to the message. You should only completely overwrite modifiedMessage if your plugin specifically needs to take over a given
* message. (For example if a certain plugin injects color tags into a message, your plugin should not remove them unless absolutely necessary.)
*
* modifiedMessage is an internal buffer of 4096 bytes, therefore it should have plenty of space for any message you wish to add.
*
* You should not call Write, Writef, or AddChatMessage functions here! Otherwise you will cause a stack overflow.
*/
bool HandleIncomingText(int32_t mode, bool indent, const char* message, int32_t* modifiedMode, bool* modifiedIndent, char* modifiedMessage, bool injected, bool blocked) override
{
UNREFERENCED_PARAMETER(mode);
UNREFERENCED_PARAMETER(indent);
UNREFERENCED_PARAMETER(message);
UNREFERENCED_PARAMETER(modifiedMode);
UNREFERENCED_PARAMETER(modifiedIndent);
UNREFERENCED_PARAMETER(modifiedMessage);
UNREFERENCED_PARAMETER(injected);
UNREFERENCED_PARAMETER(blocked);
return false;
}
/**
* Event invoked when the game client is sending text to the server.
*
* @param {int32_t} mode - The message mode. (See: Ashita::CommandMode)
* @param {const char*} message - The raw message string.
* @param {int32_t*} modifiedMode - The modified mode, if any, that has been altered by another addon/plugin.
* @param {char*} modifiedMessage - The modified message string, if any, that has been altered by another addon/plugin.
* @param {bool} injected - Flag if the message was injected from an Ashita related resource. (Addon, plugin, or internally.)
* @param {bool} blocked - Flag if the message has been blocked by another addon/plugin.
* @return {bool} True if handled and should be blocked, false otherwise.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UseText flag is set.
*
* This event is invoked after an input command has gone unhandled and is about to be sent to the game client, potentially to the server. This
* can be used as an end-all-catch-all of processing input commands. Actual command handling should be done in the HandleCommand event though.
*
* If a plugin returns true, the command is blocked from further processing by Ashita or the game client and is considered handled.
*
* Plugins should return true for any commands they have handled or reacted to when appropriate. To prevent deadlocks by trying to
* inject another command here, plugins should instead use the IChatManager::QueueCommand function for any manual command inserts
* back into the game.
*
* mode and message contain the original, unmodified data of the event which can be used to see what was originally used to invoke the
* event, as well as for plugins that require the original unedited message to properly operate. Plugins should however check for changes
* by seeing if modifiedMessage has been altered. If modifiedMessage has any value (strlen > 0) then plugins should honor previous plugin
* changes made to the message. You should only completely overwrite modifiedMessage if your plugin specifically needs to take over a given
* message.
*
* modifiedMessage is an internal buffer of 4096 bytes, therefore it should have plenty of space for any message you wish to add.
*/
bool HandleOutgoingText(int32_t mode, const char* message, int32_t* modifiedMode, char* modifiedMessage, bool injected, bool blocked) override
{
UNREFERENCED_PARAMETER(mode);
UNREFERENCED_PARAMETER(message);
UNREFERENCED_PARAMETER(modifiedMode);
UNREFERENCED_PARAMETER(modifiedMessage);
UNREFERENCED_PARAMETER(injected);
UNREFERENCED_PARAMETER(blocked);
return false;
}
/**
* Event invoked when the game client is processing an incoming packet.
*
* @param {uint16_t} id - The id of the packet.
* @param {uint32_t} size - The size of the packet.
* @param {const uint8_t*} data - The raw data of the packet.
* @param {uint8_t*} modified - The modified packet data, if any, that has been altered by another addon/plugin.
* @param {uint32_t} sizeChunk - The size of the full packet chunk that contained the packet.
* @param {const uint8_t*} dataChunk - The raw data of the full packet chunk that contained the packet.
* @param {bool} injected - Flag if the packet was injected from an Ashita related resource. (Addon, plugin, or internally.)
* @param {bool} blocked - Flag if the packet has been blocked by another addon/plugin.
* @return {bool} True if handled and should be blocked, false otherwise.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UsePackets flag is set.
*
* If a plugin returns true, the block flag is set to true (cannot be unset), however the event will still be passed to all loaded
* plugins whom are marked to accept it. Plugins should check if the blocked flag has been set first before reacting to the event
* in case a previous plugin has deemed it to be blocked. Unless your plugin requires reacting to certain/all packets, then it
* should simply return immediately if blocked is already true.
*
* Packets in FFXI are sent in chunks, meaning there are multiple packets inside of each chunk. This information may be needed when
* dealing with certain packet ids, thus Ashita offers the ability to see the full chunk each packet was part of.
*
* id, size, and data are all specific to the individual packet that caused the event to be invoked and contain the unmodified
* information about the individual packet. These should not be edited.
*
* modified should be used to determine if changes have been made to the packet by Ashita or another addon/plugin. By default,
* modified is a direct copy of the original packet data.
*
* sizeChunk and dataChunk hold the data of the entire chunk the packet was part of that is being processed in the event. These can
* be useful for plugins that may need to look at other packets in the chunk that relate to the current packet of the event. These
* should not be edited.
*/
bool HandleIncomingPacket(uint16_t id, uint32_t size, const uint8_t* data, uint8_t* modified, uint32_t sizeChunk, const uint8_t* dataChunk, bool injected, bool blocked) override
{
UNREFERENCED_PARAMETER(id);
UNREFERENCED_PARAMETER(size);
UNREFERENCED_PARAMETER(data);
UNREFERENCED_PARAMETER(modified);
UNREFERENCED_PARAMETER(sizeChunk);
UNREFERENCED_PARAMETER(dataChunk);
UNREFERENCED_PARAMETER(injected);
UNREFERENCED_PARAMETER(blocked);
return false;
}
/**
* Event invoked when the game client is processing an outgoing packet.
*
* @param {uint16_t} id - The id of the packet.
* @param {uint32_t} size - The size of the packet.
* @param {const uint8_t*} data - The raw data of the packet.
* @param {uint8_t*} modified - The modified packet data, if any, that has been altered by another addon/plugin.
* @param {uint32_t} sizeChunk - The size of the full packet chunk that contained the packet.
* @param {const uint8_t*} dataChunk - The raw data of the full packet chunk that contained the packet.
* @param {bool} injected - Flag if the packet was injected from an Ashita related resource. (Addon, plugin, or internally.)
* @param {bool} blocked - Flag if the packet has been blocked by another addon/plugin.
* @return {bool} True if handled and should be blocked, false otherwise.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UsePackets flag is set.
*
* If a plugin returns true, the block flag is set to true (cannot be unset), however the event will still be passed to all loaded
* plugins whom are marked to accept it. Plugins should check if the blocked flag has been set first before reacting to the event
* in case a previous plugin has deemed it to be blocked. Unless your plugin requires reacting to certain/all packets, then it
* should simply return immediately if blocked is already true.
*
* Packets in FFXI are sent in chunks, meaning there are multiple packets inside of each chunk. This information may be needed when
* dealing with certain packet ids, thus Ashita offers the ability to see the full chunk each packet was part of.
*
* id, size, and data are all specific to the individual packet that caused the event to be invoked and contain the unmodified
* information about the individual packet. These should not be edited.
*
* modified should be used to determine if changes have been made to the packet by Ashita or another addon/plugin. By default,
* modified is a direct copy of the original packet data.
*
* sizeChunk and dataChunk hold the data of the entire chunk the packet was part of that is being processed in the event. These can
* be useful for plugins that may need to look at other packets in the chunk that relate to the current packet of the event. These
* should not be edited.
*/
bool HandleOutgoingPacket(uint16_t id, uint32_t size, const uint8_t* data, uint8_t* modified, uint32_t sizeChunk, const uint8_t* dataChunk, bool injected, bool blocked) override
{
UNREFERENCED_PARAMETER(id);
UNREFERENCED_PARAMETER(size);
UNREFERENCED_PARAMETER(data);
UNREFERENCED_PARAMETER(modified);
UNREFERENCED_PARAMETER(sizeChunk);
UNREFERENCED_PARAMETER(dataChunk);
UNREFERENCED_PARAMETER(injected);
UNREFERENCED_PARAMETER(blocked);
return false;
}
/**
* Event invoked when the plugin is being initialized for Direct3D usage.
*
* @param {IDirect3DDevice8*} device - The Direct3D8 device object.
* @return {bool} True on success, false otherwise.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UseDirect3D flag is set.
*
* Plugins must return true from this function in order to be considered valid and continue to load if they do use Direct3D features.
*
* If your plugin fails to meet any Direct3D requirements you feel are manditory for it to run, you should return false here and
* prevent it from loading further.
*/
bool Direct3DInitialize(IDirect3DDevice8* device) override
{
UNREFERENCED_PARAMETER(device);
return false;
}
/**
* Event invoked when the Direct3D device is beginning a scene.
*
* @param {bool} isRenderingBackBuffer - Flag set if the scene is being rendered to the back buffer.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UseDirect3D flag is set.
*
* This event is invoked before the actual IDirect3DDevice8::BeginScene call is invoked.
*
* Multiple scenes can be rendered each frame, thus the isRenderingBackBuffer flag is available to determine when the scene is being
* rendered to the back buffer render target. (Previous Ashita versions only invoked this event when this flag would be true.)
*/
void Direct3DBeginScene(bool isRenderingBackBuffer) override
{
UNREFERENCED_PARAMETER(isRenderingBackBuffer);
}
/**
* Event invoked when the Direct3D device is ending a scene.
*
* @param {bool} isRenderingBackBuffer - Flag set if the scene is being rendered to the back buffer.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UseDirect3D flag is set.
*
* This event is invoked before the actual IDirect3DDevice8::EndScene call is invoked.
*
* Multiple scenes can be rendered each frame, thus the isRenderingBackBuffer flag is available to determine when the scene is being
* rendered to the back buffer render target. (Previous Ashita versions only invoked this event when this flag would be true.)
*/
void Direct3DEndScene(bool isRenderingBackBuffer) override
{
UNREFERENCED_PARAMETER(isRenderingBackBuffer);
}
/**
* Event invoked when the Direct3D device is presenting a scene.
*
* @param {const RECT*} pSourceRect - The source rect being presented.
* @param {const RECT*} pDestRect - The destination rect being presented into.
* @param {HWND} hDestWindowOverride - The override window handle to present into.
* @param {const RGNDATA*} pDirtyRegion - The present dirty regions.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UseDirect3D flag is set.
*
* This event is invoked before the actual IDirect3DDevice8::Present call is invoked.
*
* For best results of custom Direct3D rendering, it is best to do your own custom drawing here to draw over-top of all game related
* scenes and objects. Usage of ImGui should be done here as well.
*/
void 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);
}
/**
* Event invoked when the Direct3D device is setting a render state.
*
* @param {D3DRENDERSTATETYPE} State - The render state type.
* @param {DWORD*} Value - Pointer to the render state value.
* @return {bool} True if blocked, false otherwise.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UseDirect3D flag is set.
*
* If a plugin returns true, the render state is prevented from being set and is blocked from further processing by Ashita
* or the game client and is considered handled.
*
* Plugins can edit the value being set by writing to the Value pointer.
*/
bool Direct3DSetRenderState(D3DRENDERSTATETYPE State, DWORD* Value) override
{
UNREFERENCED_PARAMETER(State);
UNREFERENCED_PARAMETER(Value);
return false;
}
/**
* Event invoked when the Direct3D device is drawing a primitive. (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.
* @return {bool} True if blocked, false otherwise.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UseDirect3D flag is set.
*/
bool Direct3DDrawPrimitive(D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) override
{
UNREFERENCED_PARAMETER(PrimitiveType);
UNREFERENCED_PARAMETER(StartVertex);
UNREFERENCED_PARAMETER(PrimitiveCount);
return false;
}
/**
* Event invoked when the Direct3D device is drawing a primitive. (DrawIndexedPrimitive)
*
* @param {D3DPRIMITIVETYPE} PrimitiveType - The type of primitive being rendered.
* @param {UINT} minIndex - Minimum vertex index for the vertices used during this call.
* @param {UINT} NumVertices - Number of vertices used during this call.
* @param {UINT} startIndex - Location in the index array to start reading indices.
* @param {UINT} primCount - Number of primitives to render.
* @return {bool} True if blocked, false otherwise.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UseDirect3D flag is set.
*/
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;
}
/**
* Event invoked when the Direct3D device is drawing a primitive. (DrawPrimitiveUP)
*
* @param {D3DPRIMITIVETYPE} PrimitiveType - The type of primitive being rendered.
* @param {UINT} PrimitiveCount - Number of primitives to render.
* @param {const void*} pVertexStreamZeroData - User memory pointer to vertex data to use for vertex stream zero.
* @param {UINT} VertexStreamZeroStride - Stride between data for each vertex, in bytes.
* @return {bool} True if blocked, false otherwise.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UseDirect3D flag is set.
*/
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;
}
/**
* Event invoked when the Direct3D device is drawing a primitive. (DrawIndexedPrimitiveUP)
*
* @param {D3DPRIMITIVETYPE} PrimitiveType - The type of primitive being rendered.
* @param {UINT} MinVertexIndex - Minimum vertex index, relative to zero, for vertices used during this call.
* @param {UINT} NumVertexIndices - Number of vertices used during this call.
* @param {UINT} PrimitiveCount - Number of primitives to render.
* @param {const void*} pIndexData - User memory pointer to the index data.
* @param {D3DFORMAT} IndexDataFormat - The format type of the index data.
* @param {const void*} pVertexStreamZeroData - User memory pointer to vertex data to use for vertex stream zero.
* @param {UINT} VertexStreamZeroStride - Stride between data for each vertex, in bytes.
* @return {bool} True if blocked, false otherwise.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UseDirect3D flag is set.
*/
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;
}
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Ashita Plugin Exports
//
// These are the required function exports that all plugins must have in order to be considered a
// valid plugin and be loaded properly. Failure to export any of these exports will automatically
// deem your plugin invalid and it will fail to load.
//
// Please be mindful of the calling conventions of these exports. Failure to adhere to the proper
// conventions can lead to undefined behavior and crashes. All exports are of the __stdcall type.
//
// export_CreatePlugin_f [Export As: expCreatePlugin]
//
// Exported function that returns a new instance of the plugins main class, which must inherit
// the IPlugin class. This is the main method used by Ashita to communicate with your plugin.
//
// export_GetInterfaceVersion_f [Export As: expGetInterfaceVersion]
//
// Exported function that returns the Ashita interface version that the plugin was compiled
// against. This is used to determine if the plugin is 'safe' to load in the current Ashita
// version that is being used.
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef IPlugin* /**/ (__stdcall* export_CreatePlugin_f)(const char* args);
typedef double /**/ (__stdcall* export_GetInterfaceVersion_f)(void);
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Ashita POL Plugin Base Interface
//
// The base interface that defines the implementation of a POL plugins main class. POL plugins
// should not directly inherit from this interface, they should inherit IPolPlugin instead.
//
////////////////////////////////////////////////////////////////////////////////////////////////////
struct IPolPluginBase
{
// Properties (POL Plugin Information)
virtual const char* GetName(void) const = 0;
virtual const char* GetAuthor(void) const = 0;
virtual const char* GetDescription(void) const = 0;
virtual const char* GetLink(void) const = 0;
virtual double GetVersion(void) const = 0;
virtual double GetInterfaceVersion(void) const = 0;
virtual uint32_t GetFlags(void) const = 0;
// Methods
virtual bool Initialize(IAshitaCore*, ILogManager*, uint32_t) = 0;
virtual void Release(void) = 0;
// Event Callbacks: PolPluginManager
virtual void HandleEvent(const char*, const void*, uint32_t) = 0;
// Event Callbacks: ChatManager
virtual bool HandleCommand(int32_t, const char*, bool) = 0;
// Event Callbacks: Direct3D
virtual void Direct3DBeginScene(bool) = 0;
virtual void Direct3DEndScene(bool) = 0;
virtual void Direct3DPresent(const RECT*, const RECT*, HWND, const RGNDATA*) = 0;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Ashita POL Plugin Base Class
//
// The base class that all POL plugins must inherit from. Implements default handlers for all events
// which developers can override if they wish to handle manually. (The main class object returned
// from the 'expCreatePolPlugin' export of your plugin must inherit from this class.)
//
////////////////////////////////////////////////////////////////////////////////////////////////////
class IPolPlugin : public IPolPluginBase
{
public:
/**
* Constructor and Deconstructor
*/
IPolPlugin(void)
{}
virtual ~IPolPlugin(void)
{}
/**
* Returns the plugins name.
*
* @return {const char*} The plugins name.
*/
const char* GetName(void) const override
{
return "PolPluginBase";
}
/**
* Returns the plugins author.
*
* @return {const char*} The plugins author.
*/
const char* GetAuthor(void) const override
{
return "Ashita Development Team";
}
/**
* Returns the plugins description.
*
* @return {const char*} The plugins description.
*/
const char* GetDescription(void) const override
{
return "Ashita POL Plugin Base";
}
/**
* Returns the plugins homepage link.
*
* @return {const char*} The plugins homepage link.
*/
const char* GetLink(void) const override
{
return "https://www.ashitaxi.com/";
}
/**
* Returns the plugins version.
*
* @return {double} The plugins version.
*/
double GetVersion(void) const override
{
return 1.0f;
}
/**
* Returns the plugins Ashita SDK interface version it was compiled against.
*
* @return {double} The plugins interface version.
*/
double GetInterfaceVersion(void) const override
{
return ASHITA_INTERFACE_VERSION;
}
/**
* Returns the plugins flags.
*
* @return {uint32_t} The plugins flags.
* @notes
*
* Unlike normal plugins, POL plugins have a limited amount of access to the events fired within Ashita. These plugins are not meant
* to be used as standard plugins, and therefore do not need access to everything normal plugins can do. However, there is still a
* reason to avoid unneeded overhead in calling events the POL plugin does not make use of.
*
* Please also understand that some events are bare-minimum implementations for POL plugins, such as the Direct3D events. While POL
* plugins will gain access to BeginScene, EndScene and Present calls, they are not given calls for initialization or releasing. It
* is up to you to manage your resources properly.
*
* Plugins should explicitly state which flags they plan to make use of and avoid using 'All' flags.
* This can help with the performance of the game for lower end machines.
*
* See the 'Ashita::PluginFlags' enumeration for more information on what each flag does.
*/
uint32_t GetFlags(void) const override
{
return (uint32_t)Ashita::PluginFlags::None;
}
/**
* Event invoked when the POL plugin is being loaded and initialized.
*
* @param {IAshitaCore*} core - The main Ashita core instance used to interact with the Ashita hook.
* @param {ILogManager*} logger - The log manager instance used to write to the debug log files.
* @param {uint32_t} id - The plugins unique id. (Matches the plugins module base address.)
* @return {bool} True on success, false otherwise.
*
* @notes
*
* POL plugins must return true from this function in order to be considered valid and continue to load.
* If your plugin fails to meet any requirements you feel are manditory for it to run, you should return false here and prevent it
* from loading further.
*
* Caution! POL plugins are loaded as soon as possible. Because of this, most of the pointers within the AshitaCore object will not
* yet be valid. You should always check pointer objects before attempting to use them to prevent crashes!
*/
bool Initialize(IAshitaCore* core, ILogManager* logger, const uint32_t id) override
{
UNREFERENCED_PARAMETER(core);
UNREFERENCED_PARAMETER(logger);
UNREFERENCED_PARAMETER(id);
return false;
}
/**
* Event invoked when the POL plugin is being unloaded.
*
* @notes
*
* Plugins should use this event to cleanup all resources they created or used during their lifespan.
*/
void Release(void) override
{}
/**
* Event invoked when another plugin has raised a custom event for other plugins to handle.
*
* @param {const char*} eventName - The name of the custom event being raised.
* @param {const void*} eventData - The custom event data to pass through the event.
* @param {uint32_t} eventSize - The size of the custom event data buffer.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UsePluginEvents flag is set.
*
* Plugins can make use of the custom event system as a way to talk to other plugins in a safe manner.
* Events can be raised via the PluginManager::RaiseEvent method which will cause this handler to be
* invoked in all loaded plugins with the given event information.
*/
void HandleEvent(const char* eventName, const void* eventData, const uint32_t eventSize) override
{
UNREFERENCED_PARAMETER(eventName);
UNREFERENCED_PARAMETER(eventData);
UNREFERENCED_PARAMETER(eventSize);
}
/**
* Event invoked when an input command is being processed by the game client.
*
* @param {int32_t} mode - The mode of the command. (See: Ashita::CommandMode)
* @param {const char*} command - The raw command string.
* @param {bool} injected - Flag if the command was injected from an Ashita related resource. (Addon, plugin or internally.)
* @return {bool} True if handled and should be blocked, false otherwise.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UseCommands flag is set.
*
* Any commands sent through the games input handler will be passed to plugins to be processed first allowing plugins to intercept
* and handle any kind of command they wish. This includes commands typed into the chat bar, commands invoked from macros, menu items
* and so on. Commands that have been injected by Ashita or another plugin will be marked via the injected parameter.
*
* If a plugin returns true, the command is blocked from further processing by Ashita or the game client and is considered handled.
*
* Plugins should return true for any commands they have handled or reacted to when appropriate. To prevent deadlocks by trying to
* inject another command here, plugins should instead use the IChatManager::QueueCommand function for any manual command inserts
* back into the game.
*/
bool HandleCommand(int32_t mode, const char* command, bool injected) override
{
UNREFERENCED_PARAMETER(mode);
UNREFERENCED_PARAMETER(command);
UNREFERENCED_PARAMETER(injected);
return false;
}
/**
* Event invoked when the Direct3D device is beginning a scene.
*
* @param {bool} isRenderingBackBuffer - Flag set if the scene is being rendered to the back buffer.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UseDirect3D flag is set.
*
* This event is invoked before the actual IDirect3DDevice8::BeginScene call is invoked.
*
* Multiple scenes can be rendered each frame, thus the isRenderingBackBuffer flag is available to determine when the scene is being
* rendered to the back buffer render target. (Previous Ashita versions only invoked this event when this flag would be true.)
*/
void Direct3DBeginScene(bool isRenderingBackBuffer) override
{
UNREFERENCED_PARAMETER(isRenderingBackBuffer);
}
/**
* Event invoked when the Direct3D device is ending a scene.
*
* @param {bool} isRenderingBackBuffer - Flag set if the scene is being rendered to the back buffer.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UseDirect3D flag is set.
*
* This event is invoked before the actual IDirect3DDevice8::EndScene call is invoked.
*
* Multiple scenes can be rendered each frame, thus the isRenderingBackBuffer flag is available to determine when the scene is being
* rendered to the back buffer render target. (Previous Ashita versions only invoked this event when this flag would be true.)
*/
void Direct3DEndScene(bool isRenderingBackBuffer) override
{
UNREFERENCED_PARAMETER(isRenderingBackBuffer);
}
/**
* Event invoked when the Direct3D device is presenting a scene.
*
* @param {const RECT*} pSourceRect - The source rect being presented.
* @param {const RECT*} pDestRect - The destination rect being presented into.
* @param {HWND} hDestWindowOverride - The override window handle to present into.
* @param {const RGNDATA*} pDirtyRegion - The present dirty regions.
*
* @notes
*
* Only invoked if Ashita::PluginFlags::UseDirect3D flag is set.
*
* This event is invoked before the actual IDirect3DDevice8::Present call is invoked.
*
* For best results of custom Direct3D rendering, it is best to do your own custom drawing here to draw over-top of all game related
* scenes and objects. Usage of ImGui should be done here as well.
*/
void 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);
}
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Ashita POL Plugin Exports
//
// These are the required function exports that all POL plugins must have in order to be considered
// a valid plugin and be loaded properly. Failure to export any of these exports will automatically
// deem your plugin invalid and it will fail to load.
//
// Please be mindful of the calling conventions of these exports. Failure to adhere to the proper
// conventions can lead to undefined behavior and crashes. All exports are of the __stdcall type.
//
// export_CreatePolPlugin_f [Export As: expCreatePolPlugin]
//
// Exported function that returns a new instance of the plugins main class, which must inherit
// the IPolPlugin class. This is the main method used by Ashita to communicate with your plugin.
//
// export_GetInterfaceVersion_f [Export As: expGetInterfaceVersion]
//
// Exported function that returns the Ashita interface version that the plugin was compiled
// against. This is used to determine if the plugin is 'safe' to load in the current Ashita
// version that is being used. (See above prototype for implementation.)
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef IPolPlugin* /**/ (__stdcall* export_CreatePolPlugin_f)(const char* args);
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Pop warning disables.
//
////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma warning(pop)
#endif // ASHITA_SDK_H_INCLUDED