EliteAPIを使ってみる

EliteAPI(EliteAPI.dll, EliteMMO.API.dll)は、FF11サードパーティ製ツール用のライブラリです。
EliteMMO.API.dllは、EliteAPI.dllを.NETのアプリケーションから使用するためのブリッジのようです。
api.elitemmonetwork.com

Cure-PleaseやEasyFarmなどで使用されています。

今回はEliteAPIを使って、簡単なコンソールアプリケーション(C#)を作ってみたいと思います。

準備

.NETの開発環境をインストールします。(Visual Studioを使用されている方は不要かも)

  • .NET Core SDK
  • .NET Core Runtime (x86)

dotnet.microsoft.com

アプリケーションをx64でビルドするとライブラリがリンクできなかったので、x86で動作させるためにx86のランタイムもインストールします。

使ってみる

EliteAPIのバージョンは、

  • EliteAPI.dll 1.3.0.2
  • EliteMMO.API.dll 1.3.0.0

を使用します。

コンソールアプリケーションの雛形を作成します。

$ dotnet new console -o testApp

作成したプロジェクトのフォルダにEliteAPI.dll, EliteMMO.API.dllをコピーします。

testApp/
  |- Program.cs
  |- testApp.csproj
  |- EilteAPI.dll
  |- EliteMMO.API.dll

プロジェクトファイル(testApp.csproj)を編集します。(Visual Studioであれば、IDE上で設定できるかも)

  • x86の実行ファイルを作成するので、PlatformTargeをx86にする
  • 参照するライブラリにEliteMMO.API.dllを追加する
  • EliteAPI.dllをビルド時に出力ディレクトリにコピーするようにする
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <PlatformTarget>x86</PlatformTarget>
  </PropertyGroup>

  <ItemGroup>
    <Reference Include="EliteMMO.API">
      <HintPath>./EliteMMO.API.dll</HintPath>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Content Include="EliteAPI.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
</Project>

キャラクター名、メインジョブ、メインジョブレベルを出力するサンプルを作ってみます。
EliteAPIのインスタンスを得るため、FF11のクライアントのプロセスIDを取得します。
Process.GetProcessByNameメソッドを使用して、pol.exeのプロセスを取得します。
Windowerで複数のクライアントが起動している場合は、Processが複数取得できます。
ウィンドウのタイトルがログインしているキャラクター名になっているので、Process.MainWindowTitleで判別できます。
EliteAPIクラスのコンストラクタにプロセスIDを渡し、インスタンスを取得します。
このインスタンスを使用して、EliteAPIのメソッドでクライアントにアクセスします。

// Program.cs
using System;
using System.Diagnostics;

using EliteMMO.API;

namespace testApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Process[] pol = Process.GetProcessesByName("pol");
            EliteAPI api = new EliteAPI((int)pol[0].Id);
            Console.WriteLine(api.Entity.GetLocalPlayer().Name); // キャラクター名
            Console.WriteLine((JobType)api.Player.GetPlayerInfo().MainJob); // メインジョブ
            Console.WriteLine(api.Player.GetPlayerInfo().MainJobLevel); // メインジョブレベル
        }
    }
}

実行

$ dotnet run

出力

Hogehoge
BlueMage
99

実行形式のファイルを実行する場合は、"管理者として実行"する必要があります。