FFXIAH.com

Language: JP EN DE FR
users online
Organizer
Hi!

So, some time ago Byrth wrote an addon called Organizer, that aimed to replace GearCollector both in speed and flexibility. I'm its current maintainer, and with GearCollector falling out of maintenance, I'm here to tell you all about why you should switch to Organizer!

It's fast!
It's so very fast. If it's in fact, too fast for you, there is an item_delay setting that you can set to pause between moves.

It integrates with GearSwap!
To make it work automagically with your existing gearswap files, just add this line to your .lua:

include('organizer-lib')

And then in your Mog House, after changing jobs:

//gs org

And it will fill your inventory with the items from your sets, and put everything else away (it does a very good job, even when there are space concerns, but it's not perfect. Make sure to do a "//gs validate" after!)

Additionally, if you have items you'd like to include that aren't in your actual sets (Shihei, Echo Drops, etc) then just define an organizer_items set in your lua, like this:
Code
organizer_items = {
  echos="Echo Drops",
  shihei="Shihei",
  orb="Macrocosmic Orb"
}


and those will be included as well!

It doesn't need GearSwap!
You don't have to use it with GearSwap. Even by itself, it's a powerful tool for snapshotting and organizing your inventory. The repo has more documentation on standalone mode.

It's configurable!
The bag lists in the settings.xml can be prioritized any way you like. Want everything to go to the satchel if it can? No problem! (Freak.)

Active development!
I take bug reports and feature requests seriously. If you're having problems, find me. I'm easy to find :)


So, let's look at the config file:
Code
<?xml version="1.1" ?>
<settings>
    <global>
        <auto_heal>false</auto_heal>
        <bag_priority>
            <Case>7</Case>
            <Locker>3</Locker>
            <Sack>6</Sack>
            <Safe>1</Safe>
            <Safe2>2</Safe2>
            <Satchel>5</Satchel>
            <Storage>4</Storage>
        </bag_priority>
        <default_file>default.lua</default_file>
        <dump_bags>
            <Locker>3</Locker>
            <Safe>1</Safe>
            <Safe2>2</Safe2>
            <Storage>4</Storage>
        </dump_bags>
        <ignore>
        </ignore>
        <item_delay>0</item_delay>
        <verbose>false</verbose>
        <retain>
            <moogle_slip_gear>false</moogle_slip_gear>
            <seals>false</seals>
        </retain>
    </global>
    <rooks>
        <auto_heal>false</auto_heal>
        <bag_priority>
            <Locker>3</Locker>
            <Safe>1</Safe>
            <Safe2>2</Safe2>
            <Storage>4</Storage>
        </bag_priority>
        <default_file>rooks.lua</default_file>
        <dump_bags>
            <Locker>3</Locker>
            <Safe>1</Safe>
            <Safe2>2</Safe2>
            <Storage>4</Storage>
        </dump_bags>
        <ignore>
            <wardrobe>
                <echad>Echad Ring</echad>
                <nexus>Nexus Cape</nexus>
                <trizek>Trizek Ring</trizek>
                <warp>Warp Ring</warp>
            </wardrobe>
        </ignore>
        <item_delay>0</item_delay>
        <verbose>true</verbose>
        <retain>
            <moogle_slip_gear>true</moogle_slip_gear>
            <seals>true</seals>
        </retain>
    </global>
</settings>


The documentation covers most of this, but here's a quick rundown on what the options do:
  • auto_heal: Automatically /heal after completing organizing.

  • bag_priority: The order in which to search for items. Removing an entry from the list means organizer will never pull items from there.

  • dump_bags: The order in which you'd like to dump off unneeded items. If a bag doesn't appear here, it will never be automatically filled by organizer.

  • default_file: This is for more advanced usage. If you want to know about this, you should read the real docs here.

  • verbose: What it says on the tin. It's a lot of output, so don't turn this on unless you're either debugging things or like lots of spam.

  • item_delay: Insert a delay between each move in case you're worried about detection.

  • ignore: Define specific items/locations that should never be touched. For example:

    Code
    <ignore>
      <wardrobe>
        <1>Warp Ring</1>
        <2>Emperor Band</2>
      </wardrobe>
    </ignore>
    

    would ensure that your Warp Ring and Emperor Band would never leave your Mog Wardrobe due to organizer's doing. It will happily put them back there for you, though.

  • retain: this is for specific, fixed classes of items that you never want to leave your inventory. There are currently two, moogle_slip_gear and seals. moogle_slip_gear is anything that's storable on the porter slips, and seals is Beastmen/Kindred Seals and Kindred/High Kindred/Sacred Kindred Crests. These options do add a bit of a performance hit (for now) when set to true, which I will hopefully trim down.



Also, note that you can have per-character config by adding a section parallel to <global>.

Usage:

The most obvious (and simplest) use is from gearswap, but if you have more specific requirements, the default mode for vanilla organizer is this:

//org freeze
.. this snapshots your entire current state, and without arguments will save it to a set of files based on your job and the bag snapshotted, like safe/Rooks_PLD.lua, inventory/Rooks_PLD.lua, etc

//org o
.. this attempts to recreate the exact environment based on the previous freeze. You can pass it file names, or it will default to the Name_JOB.lua.

There's more to it (a lot more) but these use cases should be enough for most people! If you need more, read the docs, or ask questions.

Frequently asked questions:
This isn't going to drop my Claustrum, is it?!
No. There is a completely separate packet for move(0x29) vs drop(0x28). Organizer NEVER sends drop, ever, ever, ever. There is no difference between an organizer move and a vanilla XI client move other than organizer does it much faster.

HELP, Organizer didn't get my stuff/crashed luacore/smells funny!
Like all software, organizer has bugs. The addon environment doesn't really have good facilities for testing, and the potential variations of user data are functionally infinite. So if you encounter a problem, please turn on verbose in config and see if you can get it to happen again. If you can, awesome! Post the log either here or in a PM to me, and I'll look at it as soon as I can. The bigger problem is that it's really hard to reproduce some bugs - I have three characters who I test organizer changes with before they ever go into the code base. I can't replicate all conditions though, and since there's no way to write unit tests for this stuff currently, it's a lot of guessing and single stepping through code with debug=3. I treat crash bugs with the highest priority, but between RL obligations and the pain of finding the root cause of some of these, fixes aren't always fast. Sorry about that.

I want to set up rules that send BLM gear to Locker, THF gear to Safe, WHM gear to...
As much as I'd like to grant this fairly common request, there are a couple of problems with it.

Firstly, because gear can be worn by multiple jobs, the notion of what's a BLM piece vs a THF piece isn't always clear. Augmented items make it even murkier; For example, Helios Gloves could be augmented in any number of ways for any number of jobs, and the logic around deciphering which job is using a particular pair is out of scope for what organizer does.

Additionally, the configuration to make such a thing work, even if there was a clear way to discern that, would be complex for the user and ridiculous for the programmer (and certainly bug-prone).

Lastly, even if those two conditions could be hand-waved, the fact is that everyone who asks about it has a different vision for how it would operate. No way I implemented it would please everyone.

The closest you can get to this functionality is the //org freeze workflow, which I explicitly made job-specific by default to ease in taking/restoring snapshots of inventory. Sorry there isn't a better answer to this, but there really just isn't one. If someone can give me a solution to this problem in a workable way, I will be happy to implement it.

What about feature X?
If you have ideas, I want to hear them! One of the beautiful things about Organizer is how flexible it is; I'm always amazed at some of the ways people think/want to use it. I can't guarantee I'll implement your idea - there might be technical concerns around it - but I will always listen, and if I say no, I'll try to explain why not. A "no" will pretty much always be due to the level of complexity it would require in the code, which is something I'm actively trying to keep under control. Organizer already has a lot of moving parts, and minimizing the complexity of them means fewer bugs overall. That said, go ahead and pitch me on the idea! The worst that can happen is I say no and try to explain why :)


Happy organizing!
Author: Rooks
Date Created: 2015-05-17 20:35:04
Date Last Modified: 2015-05-31 09:25:28
Updates: 13
Bytes: 9270