Go Filter Yourself

From FFXI Wiki



A quick and dirty guide by Spicyryan.

With the February 2023 Dev announcement of finally committing to some form of chat filtering to be implemented over the next "several months". It brought this long imagined and brief to-do project back to the forefront of my mind. Being the optimist that I am, I can't trust SE to do this as effectively as we already have access to. If I had to bet, it will become an obnoxious cat and mouse game that this guide gets ahead of anyway. This is also not the first Dev foray into the issue, with the last a decade ago or so being somewhat helpful, but inadequate.

The issue though, being that the merciless spam (really people, you do this by paying mercs/RMT for everything) takes quite a bit of out of the box though rather simple configuration. While worth it, there is no real unified source or walkthrough to follow. Lucky for the dear reader, I had an atypically large consumption of good coffee with a sfogliatell' for breakfast. So I am in the zone chief, rip-roaring and ready to go. Now, lets tell all the spam, trolls, and trash otherwise to "Get tha fuck outta 'ere."

Vanilla Filtering

Official Filter

With the addition of the Official Filter, there is now an option for everyone.

I will update this guide (eventually?) with details on using it, but you will have to make your own terms to filter, and spam will likely start getting more creative. It be much better to just to use the addons below.

All Yells

If you do not want to partake in any third party tools. Then simply head to your Menu → Chat Filters → Turn "Yell" from "Off" to "On". This will stop the display of all yells. However, you will likely want to join groups in this game. So without further adieu–

Prerequisites

  • Windower
  • Text Editor
    • I use Notepad++
      • Sidebar, but I recommend making the visual changes to the defaults of Notepad++ from 6:00 onwards in this video:

Note: This is all written for Windows. If you use another and more enjoyable OS alternative then I'd imagine you should understand how to find the proper directories.

Pros and Cons


Pros

  • Inherently obvious yell filtering.
  • Can be used as an expanded blacklist that won't fill up, in the case of the first addon.
  • Peace of mind, and enhanced XI experience.
  • Less likely to succumb to the temptation of 'easy buttoning' and perpetuating the problem that brought you here if you filter out mercs with Shout_ml.lua.

Cons

  • Requires some diligence when configuring as you may filter out some wanted yells.
  • While you don't have to really touch Shout_ml.lua once you tune it, it won't stop 100% of the the yells. Which means one or two bots may continue to spam your log and piss you off, requiring the second add-on, and where your limited cat and mouse game will live.
    • The bots know people filter, and tend to use special characters that look similar to ordinary numbers or text, but are in a different language or actually a different character. Thus bypassing the filtering.

Autoloading

Addons outside of the Windower launcher do not launch automatically. So you must either A) load them manually anytime you log on or B) change your settigns.xml file to auto load them.

Obviously we want option B there, so lets get this out of the way.

Run your text editor under admin permissions either my changing the Compatibility section under right clicking properties or by right clicking and selecting to run as Admin then:

  1. Open your text editor and assuming your editor is organized similarly to Notepad++, select File → Open.
  2. Navigate towards Program Files (x86)\Windower4 and select settings.xml.
  3. Copy paste the following into the block of other addons then hit save, close, and you are done. The game will autoload the addons we are about to add and configure from now on.
    <addon>shout_ml</addon>
    <addon>fuckoff</addon>
  • The "_ml" bugged me so I renamed the lua to "shout.lua" and it is loaded as <addon>shout</addon> for me.
    • The lua itself still has a command of "//sml" shorthand no matter what you do in this case. Do what you will with those details.

fuckoff.lua

Authored by the famous king of chicken himself, Chiaia aka Darvamos. This addon simply drops the yell packet if it matches either the local black_listed_users or local black_listed_words in chat.

Lets do this.

  1. Navigate to the GitHub for fuckoff, select the green Code, and download the .zip for it.
  2. Extract the zip (should contain the folder, and .lua) into the Program Files (x86)\Windower4\addons directory.
  3. Open .lua either by right clicking and selecting to "Edit with Notepad++" or via File → Open within Notepad++ again.
  4. Now, lets update the default filters. Here is the list I use. Copy Paste it over yours then save, and you are done.

local black_listed_words = T{string.char(0x81,0x69),string.char(0x81,0x99),string.char(0x81,0x9A),'1%-99','Job Points.*2100','Job Points.*500','Job Points.*4m','JP.*2100','JP.*500','Capacity Points.*2100','Capacity Points.*500','CPS*.*2100','CPS*.*500','ffxishop','f f x i s h o p', 'Jinpu 99999','Jinpu99999','This is IGXE','Clear Mind*.*15mins rdy start','Reisenjima*.*Helms*.*T4*.*Buy','Aeonic Weapon*.*3zone*.*Buy','Tumult Curator*.*Kill','Aeonic Weapon*.*Mind','Aeonic Weapon*.*Buy','Selling Aeonic','Empy Weapons Abyssea','50 50 75','vip05', '3zone','Igeo*2', 'Code:','Jinpu 9999','ML0-30','*2100/*','Igeo*2 fast','Delvvery','geo*2','9999', 'Autoinv','0-20/10','OFF10'} -- First two are '☆' and '★' symbols.

  • You can make a change and save it by adding ,'text' in to the black_listed_users or the black_listed_words. This is the aforementioned cat and mouse game.
    • Other filter lists include this post and this post.
      • You may obviously want to drop something like "Tumult Curator" from the filters if you want to actually join a legitimate Tumult Curator yell, if one exists.
        • The * represents a wildcard where it matches the string and anything else beyond that point to drop it. So 'Capacity Points.*2100' would allow you to filter out the various prices bots yell for getting 2100 job points such as "5m/2100", etc. By matching anything after "Capacity Points.", but before "2100" in the word.

This addon is how you can create a pseudo blacklist. You can add a comments with the following examples to keep track of why you did:

  • 'Name','Name','Name',--comment at end of line, but only works at the end, or..
  • Bulk comments for example, 'Name'--[[comment]],'Name'--[[comment]],'Name','Name','Name'--[[comment]],'Name','Name'--[[comment]],'Name', etc.

Type //lua reload fuckoff, if you are already in game with it loaded. Do this anytime you make a change.

shout_ml.lua

Authored by Epigram, shout_ml.lua creates smart filtering based on learned behavior with the author claiming it is ~91% accurate. It assigns a probability that a certain yell matches the criteria for being filtered when exceeding a probability threshold. By itself it is more effective than the simple fuckoff.lua, but conceivably may run a greater chance at filtering out wanted yells, depending on your fuckoff.lua filters. This however, is no excuse to not use it. As the defaults have little to negligible issues with that, and you can customize the filtering.
If you were only going to use one addon, this is the one to use.

Lets finish this.

  1. Navigate to the GitHub for shout_ml, select the green Code, and download the .zip for it.
  2. Extract the zip (should contain the folder, .lua, and associated resources) into the Program Files (x86)\Windower4\addons directory.
  3. That is it. The rest is configured in game. See below.

There is also a very minor issue that I don't believe was ever fixed. The .lua is only active in listed zones by ID number. Windurst Walls was omitted in error from the list. So it doesn't work there. To fix this:

  1. Open .lua either by right clicking and selecting to "Edit with Notepad++" or via File → Open within Notepad++ once more.
  2. Under local in_town_zones = add ,239 to the list. Windurst Walls ID is 239.

Configuring shout_ml

Lets start with the list of in-game commands:

//sml h                       -  help.
//sml t (class) (threshold)   -  set the minimum probability of belonging to a class to block.
//sml a (allow word)          -  allow yells with key phrases to pass through without scoring.
//sml r (allow word index)    -  remove an allow word.
//sml s                       -  status (show category thresholds).
//sml d                       -  debug (show classification probabilities).
//sml show                    -  show content window.
//sml hide                    -  hide content window.
//sml ct                      -  set max time to keep a yell on the content window after last shout.

The only ones that will matter here are:

  • //sml h
    • In case you forget commands and don't want to pull this up.
  • //sml d
    • Toggles debug. Shows the yell types, probability, and your threshold them, even if you are not seeing them from filtering. This is how you fine tune your filtering next.
  • //sml s
    • To show you the categories (class), and the probability requirement to filter (threshold).
      • Classes are as follows:
        • 1 is Content
        • 2 is RMT
        • 3 is Mercing
        • 4 is Job Point Merc
        • 5 is Chat
        • 6 is Selling (non-merc)
        • 7 is Buying (non-merc)
        • 8 is Unknown
  • //sml t (class) (threshold)
    • Change the filtering criteria of a class. Anything with a set probability (//sml d) exceeding the threshold (probability it fits the class) will be filtered.
      • Thresholds are set in 0.1 values between 0 and 1. With 1 allowing all, and 0 allowing none. Watch your debug for a bit, use the command above to set your class threshold, and enjoy peace of mind.
      • For example right now in game my debug is showing Merc (Class 3) spam with a probability of around between 0.91 and 0.98. That is a 91%+ probability it is trash. Setting the following:
        • //sml t 3 0.9
        • Will filter out all of those as they are meeting or exceeding a probability of 0.9.

Filter Thresholds

I am perhaps more strict on my yell filtering than others might be. Specifically in not caring to see spam to buy shit. However, there is rarely, if ever that I have noticed missing a yell that my static is talking about due to filtering. Doesn't mean it doesn't happen, but make what you may from that.

If you don't wish to bother with tuning your settings, here are mine:

  • //sml t 1 1 --Allow all content yells.
  • //sml t 2 0 --Block all RMT yells. Casualties don't seem to matter.
  • //sml t 3 0 --Block all Merc yells. Probability for this in my debug stint here was no lower than 61% probability with the rest being 91%+. So 0.6 would block most everything.
  • //sml t 4 0 --Block all Job/Exemplar point merc yells. This does not seem to stop legitimate yells for it as they go under the aforementioned "Content" (1).
  • //sml t 5 1 --Allows all chat.
  • //sml t 6 0.4 --Blocks all player selling yells that are 40%+ probability of accuracy.
  • //sml t 7 0.7 --Blocks all player buying yells that are 70%+ probability of accuracy. I likely just didn't feel the need to adjust that lower in prior tuning.
  • //sml t 8 1 --Allows all unknown yells. This doesn't seem to happen much, so I just allow it all and use fuckoff.lua for any gaps.

This doesn't cover you 100%, but it is a stark difference.

  • Don't be fooled when your chat log ceases to have activity. There is just literally that few a quantity of real yells, even on the most populated servers.

Enjoy your journey through Vana'diel.

  • Don't thank me. Just help edit the damn wiki.