Giter Club home page Giter Club logo

xivdeck's Introduction

XIVDeck Icon

XIVDeck

Download count Crowdin Latest Release Testing Release

XIVDeck is a project that attempts to bridge the gap between Final Fantasy XIV and the Elgato Stream Deck. XIVDeck uses the Dalamud plugin library to create an interactive and pleasant human interface experience.

⚠️ Hic Svnt Leones!

This plugin, alongside all of Dalamud, is against the Terms of Service for Final Fantasy XIV. While this plugin has gone to great lengths to ensure that it is as safe as possible and adheres to the spirit of the game, there is still a small risk. Please ensure you're only using official builds and releases of all relevant tools.

By using this plugin (and Dalamud itself), you understand that you are risking receiving a ban for client modifications. For more information, please see Dalamud's FAQ.

Plugin Components

This plugin has two primary components:

  • The XIVDeck Game Plugin, which is a Dalamud plugin responsible for interacting with Final Fantasy XIV and hosting a local webserver that allows other systems to communicate with the game.
  • The XIVDeck Stream Deck Plugin, which is a JavaScript plugin written using the Elgato Stream Deck SDK. It exposes a number of actions that will allow the game to deeply interact with the Stream Deck.

For those using hardware other than the Elgato Stream Deck on Windows, community-made plugins are available:

Please note that the above plugins are not endorsed and may be missing features or otherwise have problems. Please contact the relevant maintainer if there are issues using non-Stream Deck plugins. If you are a maintainer of a plugin using my API, please reach out via Discord!

Using the Plugin

The XIVDeck Game Plugin has very few configuration parameters; only really requiring a port be chosen if (for whatever reason) TCP port 37984 is already used on your host.

The XIVDeck Stream Deck Plugin is a little bit more involved and does expose some extra options for discerning players. Currently, the following command types can be placed on a Stream Deck button:

  • Text Command: This action allows you to send a slash command directly to the game upon pressing a button on your Stream Deck.
  • Execute Hotbar Slot: This action allows you to trigger a specific hotbar slot at any time, regardless of whether the hotbar is visible or not. The current icon present in that hotbar slot will display on the Stream Deck.
  • Execute Action: This (not at all confusingly named) action allows you to trigger a subset of actions that can normally be placed on a hotbar. Currently-supported actions are Collections, Emotes, Extra Commands, Gearsets, General Actions, Performance Instruments, Macros, Main Commands, Markers, Minions, Mounts, Fashion Accessories, and Waymarks.
  • Run In-Game Macro: This action allows you to trigger any macro by ID number (zero-indexed) on either the Individual or Shared tab of the Macro interface. This feature does not allow you to create external macros.
  • Switch Class: This action allows you to switch to a specific class directly. It will automatically trigger the first gearset for each class that it finds in your active Gearset list.
  • Change Volume: This action allows you to quickly mute or unmute independent audio channels in game at any time. Stream Deck + users can additionally use Dials to adjust volume more precisely.

More action types may come later, depending on user demand, what can actually go on a hotbar, and what Dalamud ultimately supports or makes accessible. For actions that either cannot be put on a hotbar or are not supported, the Text Command action will allow calling a command directly.

Installing the Plugin

The XIVDeck plugins are available for download from this repository's Releases page.

To install the Stream Deck plugin, simply open the XIVDeck.streamDeckPlugin file. The Elgato Stream Deck software will take care of all installation steps.

To install the FFXIV plugin, simply add it through the Dalamud Plugin Installer. To opt in to testing versions (when available), right-click XIVDeck's entry in the Plugin Installer and select Receive plugin testing versions.

Getting Help

Technical support for release and testing versions of XIVDeck is available in the XIVLauncher & Dalamud Discord's XIVDeck help thread.

Please report bugs and submit feature requests through GitHub Issues when possible. I also will accept bugs and feature requests on Discord, but may ask you to open an Issue anyways.

I cannot offer support for self-built versions of XIVDeck, nor versions installed from unofficial repositories. Please ensure that you are using the official release(s) of all relevant tools.

Building the Plugin

If for some reason you'd rather be on the bleeding edge, you may also manually build the plugins.

The XIVDeck Game Plugin is more or less self-contained and only needs to go through your IDE's normal build processes. Build the plugin normally and add the output folder as a dev plugin path in Dalamud's settings.

The XIVDeck Stream Deck Plugin can be built by running yarn build. Symlink or copy the resultingdist/dev.wolf.xivdeck.sdPlugin folder to %APPDATA%\Elgato\StreamDeck\Plugins\dev.wolf.xivdeck.sdPlugin. Note that after creating this link, you need to fully restart the Stream Deck software for the plugin to be detected.

xivdeck's People

Contributors

crowdin-bot avatar kazwolfe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

xivdeck's Issues

Classes can get muddled

I am not certain how best to explain this, but the classes got muddled. It happened when I process-killed ffxiv, then re-opened with streamdeck still open, though I can't replicate.

This was the result:
image

As you can see, DRK is selected, but it shows miner, and there's some duplication. It does actually still switch to the correct gearset though.

Disabling and re-enabling the plugin fixed it.

Also set /displayarms, /displayhead and /visor for selecting gearsets

Hey,
I'd like to also select if weapons, helmets and visors are shown when applying a gearset with glam.

Maybe as a load for the api call where true means show, false means hide and not set just does the same as always?

message = {
    displayarms = true,
    displayhead = true,
    visor = true
}

Uninstall plugin for Stream Deck

Hello!

Long story short, but I had to a system restore due to some issues w/ OneDrive. Now the plugin for stream deck isn't working properly, but it doesn't show up in the list of plugins. However If I try to "reinstall" it, Elgato says I can't because it's already there.

After reading you're wiki post about building a plugin, do I just need to delete %APPDATA%\Elgato\StreamDeck\Plugins\dev.wolf.xivdeck.sdPlugin or is there anything else I should do?

I'm not sure it's relevant, but for what it's worth, I did try disabling then reinstalling the plugin on Dalamud.

Thank you for your time, and especially all your work on this and Dalamud.

Macro actions crashing the game after Dalamud update (Dalamud version vD6.3.0.6, plugin version 0.0.3)

i tried to dig through the logs to get you some crash dumps but the dalamud.log file ends right after getting the websocket message for the macro action

2022-03-07 14:33:27.402 -06:00 [DBG] [XIVDeck.FFXIVPlugin] Got WS message - {"opcode":"init","version":"0.0.3"}
2022-03-07 14:33:27.402 -06:00 [DBG] [XIVDeck.FFXIVPlugin] Got WS message - {"opcode":"getClasses"}
2022-03-07 14:33:28.636 -06:00 [DBG] [XIVDeck.FFXIVPlugin] Got WS message - {"opcode":"getActionIcon","action":{"type":"Macro","id":92}}
2022-03-07 14:33:35.075 -06:00 [DBG] [XIVDeck.FFXIVPlugin] Got WS message - {"opcode":"execAction","sdContext":"1EFE48F18422D3116DFA07AE4DE8053A","action":{"type":"Macro","id":92}}
EoF

if there's anything else i can dig up for you. let me know :D

XIV deck is gone from my plugin list but says its installed

I think I've downloaded every single update for XIV deck as they came out, which may be what is causing this but I'm not sure.

XIV deck doesn't show in my plugins list anymore and my buttons are corrupted. when I go to reinstall the latest version of XIV deck, it says its already installed, and XIV deck doesn't even show in the stream deck directory

Target marking shortcuts do not work

Hi!

I started using XIVDeck a few weeks ago, and I mapped all target/enemy marking icons to my Stream Deck (with "Execute Action").

But the issue is that all markings that are "numbered" (attack 1-5, bind 1-3, do not attack 1-2) do not work. All other markings work though (square, circle, cross, triangle).

It seems that the plugin inputs a command with the full name of the marking, even though it doesn't exist :
bug1

The error says : The first argument "mark" is incorrect (1st target to attack).

Manually inputting the command /mk attack1 works perfectly.

For testing purposes, I tried inputting the command /mk a to see what the error message was :
bug2

The first argument "mark" is incorrect (a)

So it seems the plugin tries to run the command /mk "1re cible à attaquer", but that marking name is non-existent.

Please note that my game language is set to French, and that might be the cause of the issue.

Add Support for "Toggle" Actions

Certain commands in-game would benefit from first-party "toggle" action, where the Stream Deck can at-a-glance show if a certain state is active or not. Examples of such an action would be:

  • Background Music (/bgm) Done in 0.3.0 via volume controls.
  • Roleplaying Tag (/roleplaying)
  • Other things?

This would unfortunately probably require toggle actions be manually defined and then maintained (which is not great), but the action types are just so variable that I don't think it's possible to expose a single global state.

If you can think of any extra toggle actions you'd like to see or would use, please drop them in the comments.

0.3.19 has no `.streamDeckPlugin` file

Previous releases have had a .streamDeckPlugin file attached, the instructions still say to download that file, and I don't see it in the source archives.

Is it missing? Or am I missing it?

StreamDeck app freezes when opening dropdown menus

image

Whenever I open a dropdown menu to select an action or class or whatever, the Stream Deck app freezes. Are there logs somewhere I can upload that will help debug this?

I have the Dalamud plugin installed and the game is running.

Send commands to Stream Deck?

Is it possible to send commands to the SD from FF? For instance, having a macro change the current Profile.

Very cool plugin, thanks!

"Version out of date" nagging despite being up to date

Ever since upgrading from 0.2.9 (which had been installed via Plugin Installer, not manually) to 0.2.10, I have been getting the "version is out of date" message upon every game start, despite being on the latest version.

Looks like the problem has persisted with 0.2.11

image

I have tried completely uninstalling the plugin and also deleting XIVDeck.FFXIVPlugin.json, so far to no avail.

Add Support for /micon Icons

Currently, XIVDeck does not render Macro Icons as defined through /micon, instead choosing to render the underlying preset icon for that specific macro.

Find a way to determine the appropriate icon to use for a macro if /micon is present (will likely require some more investigation of the hotbar module) and determine a way to gracefully indicate that a button triggers a macro rather than an action.

Stream Deck Plus Support

Elgato has announced the Stream Deck +, which has support for knobs and screens and all sorts of things, oh my. XIVDeck would benefit from being able to support this feature (and the work already done on the Loupedeck would also like it, I'm sure).

At a very high level, XIVDeck will need to:

  • Get Kaz the actual hardware to play with, or ask Elgato to give me an emulator.
  • Upgrade to a newer version of streamdeck-ts that supports the new APIs (which have... yet to be documented, of course.)
  • Add support to the WebSocket for sending update messages back to the game server, as HTTP calls may be too slow for someone spam-spinning a dial.
  • Add hooks to read information from certain game states.

At launch, I would like to support the following dial options:

  • The ability to change master game volume, and that of individual channels

If anyone has any other thoughts as to what they'd want to see on a dial, please toss them in this Issue.

Add Support for Penumbra IPC

In some cases, Penumbra mods may alter the icons for actions. XIVDeck should use the Penumbra IPC (when available) to instead request modded assets for display on the Stream Deck to reduce user confusion.

Sample code for this implementation is available at QoLBar's TextureDictionary. This will require a partial rewrite of XIVDeck's IconManager.

Selectable Countdown dial

Would it be possible to add a dial function for the Stream Deck + which allows the dial to rotate a slider from 1-30, and then on a press of the dial, sends a Countdown command with the selected number?

I want to keep the request as simple and as limited in scope as possible, but please let me know if you'd like more info or clarification.

No action dropdown?

I have seem some past issues and I can't seem to understand what I am doing wrong. There are no actions in the config. My best guess is that it is failing to connect to the plugin, since no version shows up on the Stream Deck software. Possibly because the listening IP for the plugin is 127.0.0.1?

image

Emote motion only option

Would like to see an option for a motion-only emote; similar to executing something like /backflip motion from the chat box. I imagine this would simply look like a checkbox in the Stream Deck UI after Emote was picked as an action.

Regardless if this is done or not, thank you so much for your work on this plugin!

Loupedeck Support

The Loupedeck has come up a couple times, especially now that Razer is releasing a Stream Deck competitor. This Issue exists to track Loupedeck development progress (if any), plus any notes about support.

If you are here because you want Loupedeck support, it's probably not going to happen for a while. Until I get my hands on some actual hardware or Loupedeck gives me a software simulator option, I'm unable to make any meaningful work on a plugin for the platform. I do want to support the Loupedeck officially at some point, but it's just a question of time and hardware (and their SDK being decent to work with).


SDK Documentation: https://github.com/Loupedeck/LoupedeckPluginSdk4/wiki

Add Stream Deck Plugin Install Assistant / Guided Troubleshooting

Two closely related concepts being rolled into one Issue. I won't regret this.

Right now, users have to manually visit GitHub to download the appropriate version of XIVDeck and then manually install it. This is fine, but a bit frustrating and an unnecessary step. It would be awesome if XIVDeck could auto-download the proper .streamDeckPlugin and guide the user through installing it (including triggering all necessary dialog boxes and all).

Certain installs will also fail thanks to Stream Deck App issues (generally requiring a manual install). A built-in troubleshooting tab for the "no connection detected" window to help guide users through the repair process (with buttons!) would help cut down on certain support requests for the most common issues.

Compatibility with Dalamud's Lockdown Mode

XIVDeck's communications system will not work with the changes currently proposed in DIP59: Lockdown Mode (reference implementation). The purpose of this Issue is tracking everything required for Lockdown Mode compatibility.

In short, the current implementation of Lockdown Mode will remove all ability for Dalamud plugins to communicate to/from localhost on any HTTP port. This will require XIVDeck to switch to named pipes or some other communication method. Unfortunately, the Stream Deck Plugin in its current state (as a JavaScript plugin running in a browser context) can only perform HTTP connections. Therefore:

  • The Stream Deck Plugin must be completely rewritten to support a language/runtime that supports Named Pipes.
  • The Dalamud Plugin must be rewritten to use named pipes instead of HTTP APIs.

For this:

  • A new Stream Deck library will need to be found. Currently SharpDeck seems to be the likely choice, but it is missing some features of the SD+ API that will likely not be added as they are not officially/properly documented in Elgato's docs.
  • The Dalamud plugin will likely need to switch to gRPC or some other communications system. The exact nature of what the switch will be to is currently unknown.

Support for Text Command Delay

I'm using "Text Command" in combination with the built-in "Multi Action" to create crafting macros that are longer than 15 steps and have delays in milliseconds (using "Multi Action: Delay").
I was wondering if it would be possible to add an option to "Text Command" to specify a delay. This would be a huge QoL improvement, because these macros get quite long with every "Text Command" beeing followed by a "Multi Action: Delay".

Judging by the EAQ issue, I would understand if this feature could be against the spirit of this Plugin, but I thought I might ask anyways.

Spamming Text Command Crashes the Game

I have a Text Command set up on my Stream Deck that (un)mutes my systemsounds. When spamming the Button it crashes the game completly.
The command is just /systemsounds

Didnt test if this is now command specific but Im just assuming no because that would be really weird

Stream Deck Plugin Fails to Load After Update to 6.0.0

After updating the Stream Deck software to version 6.0.0, the Stream Deck plugin failed to load, displaying the below for all my defined buttons:

image

Additionally, the XIVDeck category disappeared from the plugin sidebar, and I was not able to find any trace of the XIVDeck plugin being installed.


Developer Note: I have edited and hijacked this issue to be the authoritative reference for this particular problem. The below text of this issue is saved below for reference:

I went to update the main file after i was prompted in game and I installed it only to find the entire plugin broken. It says its installed, but even the configure tab is gone in the streamdeck program alongside my actual buttons.

Localization Support

XIVDeck should be translated into other languages to better improve the user experience for non-English users.

Language Name FFXIV Support Dalamud Support Stream Deck Support
English (en)
Japanese (ja)
German (de)
French (fr)
Chinese (zh) ⚠️ ✅ (zh, tw) ✅ (zh_CN)
Korean (ko) ⚠️
Spanish (es)
Italian (it)
Norwegian (no)
Russian (ru)

Languages listed with an exclamation point (⚠️) under FFXIV Support are not included in the global game, and as such function in rather unique ways. These languages may not have a Dalamud version accessible to them, or may have Lumina shenanigans that need to be properly handled.

The officially supported list of languages needs to be very carefully selected, as XIVDeck is primarily driven by Lumina strings. The only "translatable" parts of the plugin proper are UI strings in the Stream Deck Plugin or in ImGUI. In order to not confuse users too much or cause weird behavior where the UI is in one language but retrieved game data is in another, support will likely be limited to just languages supported by the game itself.

"Friend List" action can cause a crash

Steps to reproduce for me:

  • Add a new Main Command tile
  • Set action to [# 13] Friend List
  • Press button to use action in-game

Expected:
Friend List should open

Actual:
Friend List opens most of the time. Game seems to crash 1/5 of the time. Repeatedly using the button to open and close the friend list seems to trigger it.

Notes:

  • Latest plugin installed via Dalamud
  • XIVDeck 0.2.14 Stream Deck plugin
  • Latest Stream Deck software

If there are any logs I could provide, let me know and I'll dig them up

XIVDeck Apparently Corrupts Lumina Strings

Multiple users have now reported varying degrees of corruption in string names when running XIVDeck with third-party plugins.

In most of these cases, strings either disappear or appear to merge in unpredictable ways, but only for certain items:

image
image

image
image

In the first case, diagnosis through the #plugin-dev channel of the Dalamud Support server showed that the names pulled by Wotsit had the same corruption, meaning the underlying data stored in Lumina appears to be corrupted.

In both of the above cases:

  • Third-party plugins were used
  • There were no change to the strings actually shown in-game
  • Deleting all third-party plugins, re-launching the game, and then re-enabling third party plugins did not result in a reproduction.

This problem did not appear to exist before version 0.1.0.

[Just a Thank you]

Heyo o/

If you were expecting a bug report I',m sorry to dissapoint you, I just wanted to thank you for the plugin been using it for a while now and it's great for switching between HuD lay-outs and different nameplate profiles. Also i like to comedic style of update notes, keep it up and thanks again!

Long press support for actions

Why: It'd be nice - at least for text commands - to be able to trigger two different actions with the same button. I'm thinking along the lines of e.g. having /penumbra on normal press, while holding the button down longer would execute /penumbra reload; /acct and /accountant, /sonar and /sonarconfig etc. This would mostly allow having additional options on the deck w/o taking up more button slots.

I'm admittedly not familiar with the streamdeck API - but from what I've seen, you can receive both keyUp & keyDown events separately. There's no "native" support for long presses as far as I could see, but at least a very basic implementation could look at how much time has elapsed between these two events for the same button, and decide what to execute.

When a hotbar is hidden the item icons don't load on the Streamdeck.

Currently I have a bunch of food items on a hotbar I'd like to keep hidden on my UI, yet still have it accessible visually via the deck.

Loading the game with a hidden hotbar displays as it does in the screenshot (no icon but still useable key). Unhiding and hidding the hotbar within the game returns the icon.

image

Edit: I guess this may fall into the Greyed Out Hotbar Slots aspect on your EAQ.

[EAQ] Features That Will (Probably) Never Be Added

In order to not give myself too much of a headache, I'm compiling this below list of features that I will likely never be adding to XIVDeck for one reason or another. Where possible, I will provide justification for my decision.

  • Execute Arbitrary Combat Actions (Including Blue Magic)
    Simply put, it's far too difficult to (reasonably) include this feature safely into XIVDeck. Every button needs to have safety checks and boundary parameters in place to ensure that they can never be executed in an illegal context (and therefore, send data to Square's servers). Combat actions aren't simple to check, and any sort of user experience around this would be extremely complicated. The best workaround I can offer is to configure one or more hidden hotbars that are dedicated to XIVDeck.
  • PvP Quick Chat
    Support for PvP Quick Chat will not be added as a native action as support for it is highly contextual. It is recommended that users who want this feature use Hotbar Buttons.
  • Extended Macros, Action Chains, or "Smart" Buttons
    One of the driving principles of this plugin is that anything that can be on a hotbar slot can also be on a Stream Deck. A secondary (and related) driving principle is that one button on the Stream Deck will trigger one action in-game. Things that contextually decide what to do or allow multiple things to happen at once go against this principle.
  • macOS or Linux Support (Including Wine)
    The Stream Deck Plugin is written to fully use the official Stream Deck APIs as provided by Elgato's software. Unfortunately, this software currently only exists on Windows and macOS. While I do make efforts to support running the plugin on Wine, this is not guaranteed and may break at any time.
  • "Multiboxing" Support
    XIVDeck does not (and will not) support running multiple copies of the game at once. The required complexity of supporting such a configuration goes far beyond what either my code or Elgato's own plugin APIs can reasonably do or provide.
  • Support for Cross-Computer Stream Decks
    For security reasons, both the Stream Deck software and FFXIV need to be running on the same computer. The XIVDeck communication protocol is not encrypted and does not have any meaningful security features, and the overhead of such features is unacceptable for this use case. Users wishing to use cross-computer Stream Decks should look into SSH tunneling or any similar technology that allows them to mirror a port to localhost on their target computer.

I will also not be adding first-party support for non-Stream Deck hardware. However, I have absolutely no problems with other users reusing the API I expose (or suggesting improvements to genericize my API) for alternate products. I only ask that you limit your plugin to the same "one button -> one action" mapping that currently exists.

More things may be added later, depending on what I discover while writing this plugin. I might also decide to go against one of these points every now and then, depending on what it is (e.g. a roleplaying search info toggle button).

Cooldown and Item tracking

I know this is kinda specific and probably hard to do, but...
Are there plans on pulling the cooldown tracking and maybe item quantity tracking system from in game hotbars to the stream deck plugin, so they show up in the buttons? Maybe something like the TPie or QoLBar plugins do.

And thank you so much for the plugin, it works wonders

Not an issue but a Thank you!

Grats on 10k downloads! This is absolutely one of my must have plugins. I'd give you more stars if I could! Ty again!!!

Teleporter IPC integration?

if you're experimenting with IPCs why not incorporate Teleporter and have a TP action button that you can configure based on available destinations.

Can't select any class

Using the newest version, I can't select any class. The class list is empty (the XIV Deck Port field too). If I enter the port manually, the list still won't populate. Switching to another macro shows, that the value for the port is also not saved. Everywhere else, the port is automatically pre-filled.

Copied from the StreamDeck config panel:
Build Version: 0.1.0 • Runtime Version: ???
Game Plugin Version: ??? • ID: dev.wolf.xivdeck

2022-03-27T16-24-46_StreamDeck

Installed from GitHub Releases. Fresh install because I only just found this awesome plugin! Also playing in German if that is relevant here.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.