The main release package of Ashita v3. Contains all the needed files for users to get up and running. Used by the launcher/injector to auto-update as well. https://ashitaxi.com/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1561 lines
71 KiB

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