Stupid question...



  • I know I will probably get a lot of negativity for this, but I need some help getting a development environment setup for writing plugins for this program.

    I have been able to successfully compile ffxiv-app and a few plugins, but the official flow of doing it is still pretty foreign to me. Is there is (preferably) detailed tutorial that can walk me through what repositories I need to download, directories and references I need to set up, and places I need to look that provide a complete feature-set of the API? I am constantly running into issues whereby I don't know how to make progress towards writing even a simple plugin for ffxiv-app. Here are a few questions that relate to my problems:

    1. It says on the homepage of this site that "in addition to an Event notification plugin (and more); you can; with our custom PluginSDK, create your own add-ons to distribute". However, where is the link to the PluginSDK and its documentation? Also, does anyone have a link to a detailed guide on how to distribute a plugin that I compile?

    2. Is there a resource that describes the limitations of ffxiv-app? For example: is it able to read all network traffic and decipher packets for any part of the game? Can it hook into game memory and allow me to traverse data structures that describe the world around me? Is it possible to parse information relating to menus that I see in-game including market prices, items listed in supply missions for a grand company, recent chat logs, and nearby player information?

    3. Although the example for plugins are helpful, where is a resource that explains how to set up an environment for creating UI components within a plugin for ffxiv-app? Is there any guide that shows how to go from a fresh install of Windows to running Visual Studio and being able to compile a plugin and immediately test it in ffxiv-app?

    I have many more questions, but being able to satisfy these would be immensely helpful. Sorry to bother you guys...



  • I've wondered about some of those questions myself. the workflow of building, running and debugging plugins seems funny, and i'm not sure the proper way to go about it. When i was testing my plugin, i would build it, copy the dll to it's own folder in the plugin directory for ffxivapp. There probably should be a way to automate this in the build process (and maybe feature this in the plugin example on git) but i barely know VS. For distribution, i would make a zip of the plugin dll and pluginInfo.xml and have people extract that into the ffxivapp plugin directory.

    ffxivapp can read all network traffic, however this does not work on windows 10, and i don't think it works perfectly on other versions of windows without winpcap. the non-winpcap method will work on windows 10 after memory updates i think (if you comment out the server IP code it actually works on win10, it's not picking server IPs from memory properly), however winpcap is not supported on windows 10 at all, after changes to the network stack on win10.

    I haven't touched memory at all, but watching network traffic with ffxivapp is surprisingly easy. The example plugin shows this with the OnNewNetworkPacket() function in EventSubscriber.cs. The main tasks are to identify what network packet keys correspond to what actions, and tearing apart the binary network data (in little endian).
    I have an example for decoding market packets, not sure if this is the most efficient way to handle a byte array in C#:
    https://github.com/monofuel/ffxivapp-ffxivmc-plugin/blob/master/ffxivmc.Plugin/MarketData/MarketParser.cs

    I imagine something similar could be done for supply missions and GC logs, I've wanted to tackle that sometime. I have a google doc commented in the code, and it shows how i went about finding useful data and figuring out the structure of packets.

    The process for making UI elements is actually really nice with visual studio, as the app is built with WPF. On the example plugin, you can find the plugin UI in the views folder. The xaml files include xml definitions for the UI, and visual studio gives a pretty user interface for editing them and watching changes in real time. All the organization and styling is managed in the xaml files, and with WPF you can bind UI elements to backing data like ObservableCollections that can automatically update the UI. I dunno what the best examples for learning WPF are though, maybe this official guide is a good start: https://msdn.microsoft.com/en-us/library/mt270964.aspx



  • Thank you very much for your point of view. This should help me build a more stable environment.



  • @Icehunter said in FFXIV Log Plugin & DX11:

    I literally was working 16 hours days for the last year and a half; so I had no brain power to get anything updated >< I'm back in the game now and I'm working on getting an update out that brings DX11 back to 100%; I may actually be dropping DX9 support fairly soon; but that remains to be seen. Sorry about the long long long wait!

    Per that I'm sorry about the long wait. I'm going to come up with something that helps develop something locally. For what I do; is I have all plugins put into 1 "GitHub" or "Development" folder with git clone.

    I then use a bat file like this:
    https://github.com/Icehunter/ffxivapp/blob/master/SetupLinks.bat

    I copy the file into the plugins folder and run it; it then sets up symlinks to the compiled copies. For debugging I actually debug in release mode which allows you to fun ffxivapp in the debugger, and also at the same time step through your own code.

    For this to work better I have a "all in one project" setup where I've imported not only ffxivapp; but the plugin project as well.

    I'm not sure how much this helps but here is the sln file contents:

    
    Microsoft Visual Studio Solution File, Format Version 12.00
    # Visual Studio 14
    VisualStudioVersion = 14.0.24720.0
    MinimumVisualStudioVersion = 10.0.40219.1
    Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{735DD892-1D83-4E99-A5FE-8DA03FA87545}"
    	ProjectSection(SolutionItems) = preProject
    		.nuget\NuGet.Config = .nuget\NuGet.Config
    		.nuget\NuGet.exe = .nuget\NuGet.exe
    		.nuget\NuGet.targets = .nuget\NuGet.targets
    	EndProjectSection
    EndProject
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFXIVAPP.Client", "..\ffxivapp\FFXIVAPP.Client\FFXIVAPP.Client.csproj", "{6ECE4D37-06F2-4457-BA57-268430293246}"
    EndProject
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFXIVAPP.Updater", "..\ffxivapp\FFXIVAPP.Updater\FFXIVAPP.Updater.csproj", "{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}"
    EndProject
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFXIVAPP.Common", "..\ffxivapp-common\FFXIVAPP.Common\FFXIVAPP.Common.csproj", "{8D6CDA64-78BE-4BF0-B613-0C9AFA225DF5}"
    EndProject
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFXIVAPP.IPluginInterface", "..\ffxivapp-iplugininterface\FFXIVAPP.IPluginInterface\FFXIVAPP.IPluginInterface.csproj", "{56E3FD21-17C4-4306-BA2C-ADAF6AAEA330}"
    EndProject
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFXIVAPP.Plugin.Event", "..\ffxivapp-plugin-event\FFXIVAPP.Plugin.Event\FFXIVAPP.Plugin.Event.csproj", "{BDF0777F-306F-464C-A30B-3FAE6CDDF527}"
    EndProject
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFXIVAPP.Plugin.Informer", "..\ffxivapp-plugin-informer\FFXIVAPP.Plugin.Informer\FFXIVAPP.Plugin.Informer.csproj", "{5A600E56-5ABB-4888-A233-C87ABE27E359}"
    EndProject
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFXIVAPP.Plugin.Log", "..\ffxivapp-plugin-log\FFXIVAPP.Plugin.Log\FFXIVAPP.Plugin.Log.csproj", "{5A2FB785-6808-4DA7-92AC-ADDBCC3950BB}"
    EndProject
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFXIVAPP.Plugin.Parse", "..\ffxivapp-plugin-parse\FFXIVAPP.Plugin.Parse\FFXIVAPP.Plugin.Parse.csproj", "{A917E7D4-7E17-4FA4-8B96-FDEBE8C9721F}"
    EndProject
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFXIVAPP.Plugin.Radar", "..\ffxivapp-plugin-radar\FFXIVAPP.Plugin.Radar\FFXIVAPP.Plugin.Radar.csproj", "{28499E59-B9C5-44FE-AEE6-447720262A7C}"
    EndProject
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFXIVAPP.Plugin.Widgets", "..\ffxivapp-plugin-widgets\FFXIVAPP.Plugin.Widgets\FFXIVAPP.Plugin.Widgets.csproj", "{933500D4-756F-4886-9976-9C1F4143708C}"
    EndProject
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample.Plugin", "..\ffxivapp-sample-plugin\Sample.Plugin\Sample.Plugin.csproj", "{A5FC9B05-33BB-4169-8881-573549414A17}"
    EndProject
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFXIVAPP.Memory", "..\ffxivapp-memory\FFXIVAPP.Memory\FFXIVAPP.Memory.csproj", "{9510D5EF-208A-4897-A582-8EAE5C6E9406}"
    EndProject
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aetherflow", "..\aetherflow\Aetherflow.csproj", "{A01345F8-4F18-4EC4-91A9-B35BC4759908}"
    EndProject
    Global
    	GlobalSection(SolutionConfigurationPlatforms) = preSolution
    		Debug|Any CPU = Debug|Any CPU
    		Debug|Mixed Platforms = Debug|Mixed Platforms
    		Debug|Win32 = Debug|Win32
    		Debug|x64 = Debug|x64
    		Debug|x86 = Debug|x86
    		Release|Any CPU = Release|Any CPU
    		Release|Mixed Platforms = Release|Mixed Platforms
    		Release|Win32 = Release|Win32
    		Release|x64 = Release|x64
    		Release|x86 = Release|x86
    	EndGlobalSection
    	GlobalSection(ProjectConfigurationPlatforms) = postSolution
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Debug|Any CPU.ActiveCfg = Debug|x86
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Debug|Any CPU.Build.0 = Debug|x86
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Debug|Mixed Platforms.Build.0 = Debug|x86
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Debug|Win32.ActiveCfg = Debug|x86
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Debug|Win32.Build.0 = Debug|x86
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Debug|x64.ActiveCfg = Debug|Any CPU
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Debug|x64.Build.0 = Debug|Any CPU
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Debug|x86.ActiveCfg = Debug|x86
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Debug|x86.Build.0 = Debug|x86
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Release|Any CPU.ActiveCfg = Release|x86
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Release|Any CPU.Build.0 = Release|x86
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Release|Mixed Platforms.ActiveCfg = Release|x86
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Release|Mixed Platforms.Build.0 = Release|x86
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Release|Win32.ActiveCfg = Release|x86
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Release|Win32.Build.0 = Release|x86
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Release|x64.ActiveCfg = Release|Any CPU
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Release|x64.Build.0 = Release|Any CPU
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Release|x86.ActiveCfg = Release|x86
    		{6ECE4D37-06F2-4457-BA57-268430293246}.Release|x86.Build.0 = Release|x86
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Debug|Any CPU.ActiveCfg = Debug|x86
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Debug|Any CPU.Build.0 = Debug|x86
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Debug|Mixed Platforms.Build.0 = Debug|x86
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Debug|Win32.ActiveCfg = Debug|x86
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Debug|Win32.Build.0 = Debug|x86
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Debug|x64.ActiveCfg = Debug|Any CPU
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Debug|x64.Build.0 = Debug|Any CPU
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Debug|x86.ActiveCfg = Debug|x86
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Debug|x86.Build.0 = Debug|x86
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Release|Any CPU.ActiveCfg = Release|x86
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Release|Any CPU.Build.0 = Release|x86
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Release|Mixed Platforms.ActiveCfg = Release|x86
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Release|Mixed Platforms.Build.0 = Release|x86
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Release|Win32.ActiveCfg = Release|x86
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Release|Win32.Build.0 = Release|x86
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Release|x64.ActiveCfg = Release|Any CPU
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Release|x64.Build.0 = Release|Any CPU
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Release|x86.ActiveCfg = Release|x86
    		{66B2024A-9734-4D8E-9EA4-75A20C33A9E1}.Release|x86.Build.0 = Release|x86
    		{8D6CDA64-78BE-4BF0-B613-0C9AFA225DF5}.Debug|Any CPU.ActiveCfg = Debug|x86
    		{8D6CDA64-78BE-4BF0-B613-0C9AFA225DF5}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
    		{8D6CDA64-78BE-4BF0-B613-0C9AFA225DF5}.Debug|Win32.ActiveCfg = Debug|x86
    		{8D6CDA64-78BE-4BF0-B613-0C9AFA225DF5}.Debug|Win32.Build.0 = Debug|x86
    		{8D6CDA64-78BE-4BF0-B613-0C9AFA225DF5}.Debug|x64.ActiveCfg = Debug|x86
    		{8D6CDA64-78BE-4BF0-B613-0C9AFA225DF5}.Debug|x86.ActiveCfg = Debug|x86
    		{8D6CDA64-78BE-4BF0-B613-0C9AFA225DF5}.Release|Any CPU.ActiveCfg = Release|x86
    		{8D6CDA64-78BE-4BF0-B613-0C9AFA225DF5}.Release|Mixed Platforms.ActiveCfg = Release|x86
    		{8D6CDA64-78BE-4BF0-B613-0C9AFA225DF5}.Release|Win32.ActiveCfg = Release|x86
    		{8D6CDA64-78BE-4BF0-B613-0C9AFA225DF5}.Release|Win32.Build.0 = Release|x86
    		{8D6CDA64-78BE-4BF0-B613-0C9AFA225DF5}.Release|x64.ActiveCfg = Release|x86
    		{8D6CDA64-78BE-4BF0-B613-0C9AFA225DF5}.Release|x86.ActiveCfg = Release|x86
    		{56E3FD21-17C4-4306-BA2C-ADAF6AAEA330}.Debug|Any CPU.ActiveCfg = Debug|x86
    		{56E3FD21-17C4-4306-BA2C-ADAF6AAEA330}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
    		{56E3FD21-17C4-4306-BA2C-ADAF6AAEA330}.Debug|Win32.ActiveCfg = Debug|x86
    		{56E3FD21-17C4-4306-BA2C-ADAF6AAEA330}.Debug|Win32.Build.0 = Debug|x86
    		{56E3FD21-17C4-4306-BA2C-ADAF6AAEA330}.Debug|x64.ActiveCfg = Debug|x86
    		{56E3FD21-17C4-4306-BA2C-ADAF6AAEA330}.Debug|x86.ActiveCfg = Debug|x86
    		{56E3FD21-17C4-4306-BA2C-ADAF6AAEA330}.Release|Any CPU.ActiveCfg = Release|x86
    		{56E3FD21-17C4-4306-BA2C-ADAF6AAEA330}.Release|Mixed Platforms.ActiveCfg = Release|x86
    		{56E3FD21-17C4-4306-BA2C-ADAF6AAEA330}.Release|Win32.ActiveCfg = Release|x86
    		{56E3FD21-17C4-4306-BA2C-ADAF6AAEA330}.Release|Win32.Build.0 = Release|x86
    		{56E3FD21-17C4-4306-BA2C-ADAF6AAEA330}.Release|x64.ActiveCfg = Release|x86
    		{56E3FD21-17C4-4306-BA2C-ADAF6AAEA330}.Release|x86.ActiveCfg = Release|x86
    		{BDF0777F-306F-464C-A30B-3FAE6CDDF527}.Debug|Any CPU.ActiveCfg = Debug|x86
    		{BDF0777F-306F-464C-A30B-3FAE6CDDF527}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
    		{BDF0777F-306F-464C-A30B-3FAE6CDDF527}.Debug|Mixed Platforms.Build.0 = Debug|x86
    		{BDF0777F-306F-464C-A30B-3FAE6CDDF527}.Debug|Win32.ActiveCfg = Debug|x86
    		{BDF0777F-306F-464C-A30B-3FAE6CDDF527}.Debug|Win32.Build.0 = Debug|x86
    		{BDF0777F-306F-464C-A30B-3FAE6CDDF527}.Debug|x64.ActiveCfg = Debug|x86
    		{BDF0777F-306F-464C-A30B-3FAE6CDDF527}.Debug|x86.ActiveCfg = Debug|x86
    		{BDF0777F-306F-464C-A30B-3FAE6CDDF527}.Debug|x86.Build.0 = Debug|x86
    		{BDF0777F-306F-464C-A30B-3FAE6CDDF527}.Release|Any CPU.ActiveCfg = Release|x86
    		{BDF0777F-306F-464C-A30B-3FAE6CDDF527}.Release|Mixed Platforms.ActiveCfg = Release|x86
    		{BDF0777F-306F-464C-A30B-3FAE6CDDF527}.Release|Mixed Platforms.Build.0 = Release|x86
    		{BDF0777F-306F-464C-A30B-3FAE6CDDF527}.Release|Win32.ActiveCfg = Release|x86
    		{BDF0777F-306F-464C-A30B-3FAE6CDDF527}.Release|Win32.Build.0 = Release|x86
    		{BDF0777F-306F-464C-A30B-3FAE6CDDF527}.Release|x64.ActiveCfg = Release|x86
    		{BDF0777F-306F-464C-A30B-3FAE6CDDF527}.Release|x86.ActiveCfg = Release|x86
    		{BDF0777F-306F-464C-A30B-3FAE6CDDF527}.Release|x86.Build.0 = Release|x86
    		{5A600E56-5ABB-4888-A233-C87ABE27E359}.Debug|Any CPU.ActiveCfg = Debug|x86
    		{5A600E56-5ABB-4888-A233-C87ABE27E359}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
    		{5A600E56-5ABB-4888-A233-C87ABE27E359}.Debug|Mixed Platforms.Build.0 = Debug|x86
    		{5A600E56-5ABB-4888-A233-C87ABE27E359}.Debug|Win32.ActiveCfg = Debug|x86
    		{5A600E56-5ABB-4888-A233-C87ABE27E359}.Debug|Win32.Build.0 = Debug|x86
    		{5A600E56-5ABB-4888-A233-C87ABE27E359}.Debug|x64.ActiveCfg = Debug|x86
    		{5A600E56-5ABB-4888-A233-C87ABE27E359}.Debug|x86.ActiveCfg = Debug|x86
    		{5A600E56-5ABB-4888-A233-C87ABE27E359}.Debug|x86.Build.0 = Debug|x86
    		{5A600E56-5ABB-4888-A233-C87ABE27E359}.Release|Any CPU.ActiveCfg = Release|x86
    		{5A600E56-5ABB-4888-A233-C87ABE27E359}.Release|Mixed Platforms.ActiveCfg = Release|x86
    		{5A600E56-5ABB-4888-A233-C87ABE27E359}.Release|Mixed Platforms.Build.0 = Release|x86
    		{5A600E56-5ABB-4888-A233-C87ABE27E359}.Release|Win32.ActiveCfg = Release|x86
    		{5A600E56-5ABB-4888-A233-C87ABE27E359}.Release|Win32.Build.0 = Release|x86
    		{5A600E56-5ABB-4888-A233-C87ABE27E359}.Release|x64.ActiveCfg = Release|x86
    		{5A600E56-5ABB-4888-A233-C87ABE27E359}.Release|x86.ActiveCfg = Release|x86
    		{5A600E56-5ABB-4888-A233-C87ABE27E359}.Release|x86.Build.0 = Release|x86
    		{5A2FB785-6808-4DA7-92AC-ADDBCC3950BB}.Debug|Any CPU.ActiveCfg = Debug|x86
    		{5A2FB785-6808-4DA7-92AC-ADDBCC3950BB}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
    		{5A2FB785-6808-4DA7-92AC-ADDBCC3950BB}.Debug|Mixed Platforms.Build.0 = Debug|x86
    		{5A2FB785-6808-4DA7-92AC-ADDBCC3950BB}.Debug|Win32.ActiveCfg = Debug|x86
    		{5A2FB785-6808-4DA7-92AC-ADDBCC3950BB}.Debug|Win32.Build.0 = Debug|x86
    		{5A2FB785-6808-4DA7-92AC-ADDBCC3950BB}.Debug|x64.ActiveCfg = Debug|x86
    		{5A2FB785-6808-4DA7-92AC-ADDBCC3950BB}.Debug|x86.ActiveCfg = Debug|x86
    		{5A2FB785-6808-4DA7-92AC-ADDBCC3950BB}.Debug|x86.Build.0 = Debug|x86
    		{5A2FB785-6808-4DA7-92AC-ADDBCC3950BB}.Release|Any CPU.ActiveCfg = Release|x86
    		{5A2FB785-6808-4DA7-92AC-ADDBCC3950BB}.Release|Mixed Platforms.ActiveCfg = Release|x86
    		{5A2FB785-6808-4DA7-92AC-ADDBCC3950BB}.Release|Mixed Platforms.Build.0 = Release|x86
    		{5A2FB785-6808-4DA7-92AC-ADDBCC3950BB}.Release|Win32.ActiveCfg = Release|x86
    		{5A2FB785-6808-4DA7-92AC-ADDBCC3950BB}.Release|Win32.Build.0 = Release|x86
    		{5A2FB785-6808-4DA7-92AC-ADDBCC3950BB}.Release|x64.ActiveCfg = Release|x86
    		{5A2FB785-6808-4DA7-92AC-ADDBCC3950BB}.Release|x86.ActiveCfg = Release|x86
    		{5A2FB785-6808-4DA7-92AC-ADDBCC3950BB}.Release|x86.Build.0 = Release|x86
    		{A917E7D4-7E17-4FA4-8B96-FDEBE8C9721F}.Debug|Any CPU.ActiveCfg = Debug|x86
    		{A917E7D4-7E17-4FA4-8B96-FDEBE8C9721F}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
    		{A917E7D4-7E17-4FA4-8B96-FDEBE8C9721F}.Debug|Mixed Platforms.Build.0 = Debug|x86
    		{A917E7D4-7E17-4FA4-8B96-FDEBE8C9721F}.Debug|Win32.ActiveCfg = Debug|x86
    		{A917E7D4-7E17-4FA4-8B96-FDEBE8C9721F}.Debug|Win32.Build.0 = Debug|x86
    		{A917E7D4-7E17-4FA4-8B96-FDEBE8C9721F}.Debug|x64.ActiveCfg = Debug|x86
    		{A917E7D4-7E17-4FA4-8B96-FDEBE8C9721F}.Debug|x86.ActiveCfg = Debug|x86
    		{A917E7D4-7E17-4FA4-8B96-FDEBE8C9721F}.Debug|x86.Build.0 = Debug|x86
    		{A917E7D4-7E17-4FA4-8B96-FDEBE8C9721F}.Release|Any CPU.ActiveCfg = Release|x86
    		{A917E7D4-7E17-4FA4-8B96-FDEBE8C9721F}.Release|Mixed Platforms.ActiveCfg = Release|x86
    		{A917E7D4-7E17-4FA4-8B96-FDEBE8C9721F}.Release|Mixed Platforms.Build.0 = Release|x86
    		{A917E7D4-7E17-4FA4-8B96-FDEBE8C9721F}.Release|Win32.ActiveCfg = Release|x86
    		{A917E7D4-7E17-4FA4-8B96-FDEBE8C9721F}.Release|Win32.Build.0 = Release|x86
    		{A917E7D4-7E17-4FA4-8B96-FDEBE8C9721F}.Release|x64.ActiveCfg = Release|x86
    		{A917E7D4-7E17-4FA4-8B96-FDEBE8C9721F}.Release|x86.ActiveCfg = Release|x86
    		{A917E7D4-7E17-4FA4-8B96-FDEBE8C9721F}.Release|x86.Build.0 = Release|x86
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Debug|Any CPU.ActiveCfg = Debug|x86
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Debug|Mixed Platforms.Build.0 = Debug|x86
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Debug|Win32.ActiveCfg = Debug|x86
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Debug|Win32.Build.0 = Debug|x86
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Debug|x64.ActiveCfg = Debug|x64
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Debug|x64.Build.0 = Debug|x64
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Debug|x86.ActiveCfg = Debug|x86
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Debug|x86.Build.0 = Debug|x86
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Release|Any CPU.ActiveCfg = Release|x86
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Release|Mixed Platforms.ActiveCfg = Release|x86
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Release|Mixed Platforms.Build.0 = Release|x86
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Release|Win32.ActiveCfg = Release|x86
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Release|Win32.Build.0 = Release|x86
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Release|x64.ActiveCfg = Release|x64
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Release|x64.Build.0 = Release|x64
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Release|x86.ActiveCfg = Release|x86
    		{28499E59-B9C5-44FE-AEE6-447720262A7C}.Release|x86.Build.0 = Release|x86
    		{933500D4-756F-4886-9976-9C1F4143708C}.Debug|Any CPU.ActiveCfg = Debug|x86
    		{933500D4-756F-4886-9976-9C1F4143708C}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
    		{933500D4-756F-4886-9976-9C1F4143708C}.Debug|Mixed Platforms.Build.0 = Debug|x86
    		{933500D4-756F-4886-9976-9C1F4143708C}.Debug|Win32.ActiveCfg = Debug|x86
    		{933500D4-756F-4886-9976-9C1F4143708C}.Debug|Win32.Build.0 = Debug|x86
    		{933500D4-756F-4886-9976-9C1F4143708C}.Debug|x64.ActiveCfg = Debug|x86
    		{933500D4-756F-4886-9976-9C1F4143708C}.Debug|x86.ActiveCfg = Debug|x86
    		{933500D4-756F-4886-9976-9C1F4143708C}.Debug|x86.Build.0 = Debug|x86
    		{933500D4-756F-4886-9976-9C1F4143708C}.Release|Any CPU.ActiveCfg = Release|x86
    		{933500D4-756F-4886-9976-9C1F4143708C}.Release|Mixed Platforms.ActiveCfg = Release|x86
    		{933500D4-756F-4886-9976-9C1F4143708C}.Release|Mixed Platforms.Build.0 = Release|x86
    		{933500D4-756F-4886-9976-9C1F4143708C}.Release|Win32.ActiveCfg = Release|x86
    		{933500D4-756F-4886-9976-9C1F4143708C}.Release|Win32.Build.0 = Release|x86
    		{933500D4-756F-4886-9976-9C1F4143708C}.Release|x64.ActiveCfg = Release|x86
    		{933500D4-756F-4886-9976-9C1F4143708C}.Release|x86.ActiveCfg = Release|x86
    		{933500D4-756F-4886-9976-9C1F4143708C}.Release|x86.Build.0 = Release|x86
    		{A5FC9B05-33BB-4169-8881-573549414A17}.Debug|Any CPU.ActiveCfg = Debug|x86
    		{A5FC9B05-33BB-4169-8881-573549414A17}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
    		{A5FC9B05-33BB-4169-8881-573549414A17}.Debug|Win32.ActiveCfg = Debug|x86
    		{A5FC9B05-33BB-4169-8881-573549414A17}.Debug|Win32.Build.0 = Debug|x86
    		{A5FC9B05-33BB-4169-8881-573549414A17}.Debug|x64.ActiveCfg = Debug|x86
    		{A5FC9B05-33BB-4169-8881-573549414A17}.Debug|x86.ActiveCfg = Debug|x86
    		{A5FC9B05-33BB-4169-8881-573549414A17}.Release|Any CPU.ActiveCfg = Release|x86
    		{A5FC9B05-33BB-4169-8881-573549414A17}.Release|Mixed Platforms.ActiveCfg = Release|x86
    		{A5FC9B05-33BB-4169-8881-573549414A17}.Release|Win32.ActiveCfg = Release|x86
    		{A5FC9B05-33BB-4169-8881-573549414A17}.Release|Win32.Build.0 = Release|x86
    		{A5FC9B05-33BB-4169-8881-573549414A17}.Release|x64.ActiveCfg = Release|x86
    		{A5FC9B05-33BB-4169-8881-573549414A17}.Release|x86.ActiveCfg = Release|x86
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Debug|Any CPU.ActiveCfg = Debug|x86
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Debug|Mixed Platforms.Build.0 = Debug|x86
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Debug|Win32.ActiveCfg = Debug|x86
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Debug|Win32.Build.0 = Debug|x86
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Debug|x64.ActiveCfg = Debug|x64
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Debug|x64.Build.0 = Debug|x64
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Debug|x86.ActiveCfg = Debug|x86
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Debug|x86.Build.0 = Debug|x86
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Release|Any CPU.ActiveCfg = Release|x86
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Release|Mixed Platforms.ActiveCfg = Release|x86
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Release|Mixed Platforms.Build.0 = Release|x86
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Release|Win32.ActiveCfg = Release|x86
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Release|Win32.Build.0 = Release|x86
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Release|x64.ActiveCfg = Release|x64
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Release|x64.Build.0 = Release|x64
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Release|x86.ActiveCfg = Release|x86
    		{9510D5EF-208A-4897-A582-8EAE5C6E9406}.Release|x86.Build.0 = Release|x86
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Debug|Any CPU.Build.0 = Debug|Any CPU
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Debug|Win32.ActiveCfg = Debug|Any CPU
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Debug|Win32.Build.0 = Debug|Any CPU
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Debug|x64.ActiveCfg = Debug|x64
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Debug|x64.Build.0 = Debug|x64
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Debug|x86.ActiveCfg = Debug|Any CPU
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Debug|x86.Build.0 = Debug|Any CPU
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Release|Any CPU.ActiveCfg = Release|Any CPU
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Release|Any CPU.Build.0 = Release|Any CPU
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Release|Mixed Platforms.Build.0 = Release|Any CPU
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Release|Win32.ActiveCfg = Release|Any CPU
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Release|Win32.Build.0 = Release|Any CPU
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Release|x64.ActiveCfg = Release|x64
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Release|x64.Build.0 = Release|x64
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Release|x86.ActiveCfg = Release|Any CPU
    		{A01345F8-4F18-4EC4-91A9-B35BC4759908}.Release|x86.Build.0 = Release|Any CPU
    	EndGlobalSection
    	GlobalSection(SolutionProperties) = preSolution
    		HideSolutionNode = FALSE
    	EndGlobalSection
    EndGlobal
    


  • Awesome responses and one from the developer no less. Thank you!



  • Alright, I am back with some good and bad news. With the help here I have been able to set up everything, compile (under debug and release), and run ffxivapp along with any plugins I want. However, I have run into an issue where no data is being collected and displayed in any of the plugins. I have verified that it is attached to the process, a default network adapter is selected, and "network reading" is enabled. Is this is result of the application being outdated or should it be working? I am running HW version 3.4 DX11 on Windows 10 Pro with Win10Pcap.

    Also, a follow-up question if I may: is there anyway to disable memory reading and determine the plugins that facilitate it for data collection? Reading the memory of a process seems too detectable to me and I do not want to get banned for using this application. By extension, is there a resource that can help me learn how to read packets in a plugin as they are sent to the game? I plan to gather information about the market board, my retainers, and a few other things. Monofuel has provided with me enough information to get started, but I was wondering if anyone knew of other resources.

    Thank you all again for putting up with me.



  • @CzechErface
    I may have mistakenly understood, But ffxiv-app doesn't work in any way with DX11 versions. Maybe that's the problem of no data collected.
    You can attach it to the process and activate network reading (which i don't think it's absolutely needed), but DX9 and DX11 memory is different as far as i know (again i may be mistaken). So in my understanding the app is updated for your FFXIV version. If you're trying you can switch to DX9 or wait the new release (which should happen soon according to DEV's words).
    I may suggest you to use a DX11 working ffxiv-app version (in my recall it should be 3.0.5814.19716), but again as i said on another post, using an outdated ffxiv-app version could result in bugs, memory leaks, crashes and the overall experience shouldn't be so good (since you could or could not get a reliable source of data and as far i understood you're trying to work with new (yours) plug-ins maybe that's not the best outcome).

    For your second question, I don't know if you can disable memory reading. Anyway memory-reading-bans occurs when the game has a Warden / Anti-cheat / any process that detect anything that attaches to the main game, FFXIV should not have such system now. (in any case there are ways to bypass wardens, I don't really want to discuss it here for banning preventive measures).

    For objects readings: You should be able to read anything that your memory sees. That should exclude the marketboard (since you obtain informations when you click on the marketboard, once you click i think you should obtain every item information, although i'm not that sure), retainers (even in this case you have to summon the retainer to get any information), Informations in another map (like Fates, Alive monsters, actual people in the map excluding the use of player search).

    You should be able to detect fates in your map, Monsters/objects/npc/etc around a certain area (but Radar does the same thing).
    For gathering purpose i think items in nodes are generated once you click the node or you catch a fish.

    Sorry for the wall of text and sorry if i have not understood correctly.



  • I'm also experiencing the issue CzechErface is having. I've tried Manuel95's advice to run 3.0.5814.19716 instead but again, same situation.



  • @DocMedic
    That's right. I only have 2 versions on 2 different folders. 5814.19716 and 5673.24391, i often forget which is the working one; a quick radar try usually solves the problem and i know which version is the right one. I just logged in and tried version 5673.24391, but radar is more weird than usual (it doesn''t detect movement in real time and sometimes block itself as if you remained still, while mobs still move) and uses a big amount of memory. I used it before last maintenance and it worked (not perfectly but i wasn't complaining). I don't know what they did on last maintenance (30/09). You could try that version but i'm not assuring now it will work fine, remember to not update when prompted.


Log in to reply

Looks like your connection to Stupid question... was lost, please wait while we try to reconnect.