Infobar (1.02)

Plugin Information

Information
Developer: Dewin
Download: Infobar
Download Count: 6370
Support: Click Here
Release Date: June 13th, 2008

What is Infobar

Infobar displays contextual information on your current target and your surrounding environment inside the Final Fantasy XI window.

It includes a local database of information which can store notes on players, NPCs and monsters. This database also includes a monster database with levels, drops, etc. Currently the monster database is derived from FFXiclopedia.

How do I install it?

Extract the contents of the .zip file into your Windower\Plugins folder. This should result in extracting infobar.dll and an 'infobar' folder containing database.db and infobar.ini.

If you're upgrading from Infobar 0.9.5 or later, you may opt to keep your existing infobar.ini and notes.db files. It is no longer required to download notes.db on new installs.

Commands

There are a number of commands you can type in the Windower console to alter Infobar's behavior. (To type them in the FFXI chat log, preface them with two slashes (//))

ib prev/next

Some zones have multiple mobs by the same name with different stats. Examples included Ka in Eldieme Necropolis and Dancing Weapons in Qufim, which have different jobs. These commands cycle through the possible options. You may find a keybinding for .infobar next to be useful.

ib nextbar/prevbar

If you have multiple bars setup for one type, this will cycle between them. You may find a keybinding for .infobar nextbar to be useful.

The default configuration allows you to use this to cycle between your own character's info and airship time tables when no target is selected. It also allows you to use this to cycle between a monster's stats and its drops when one is selected.

ib setbar number

Jumps to the bar with the given number. If the bar does not exist, the next lowest number is used. (If bars 0, 1 and 4 exist, and you go to bar 2, you will end up on bar 1).

ib reload [filename]

Reloads Infobar's settings, useful if you have made any changes to the configuration file. You can also load an alternate file by specifying a file name. If the file name includes any spaces, put quotes around it, e.g. .infobar reload “infobar config file.ini”

If Infobar is unable to reload the new settings, your old settings will remain and diagnostic output will be displayed in the Infobar window.

ib note “some text here”

Sets a note for the current target. Notes are stored by target type (PC/NPC/Mob) and target name, and are not zone specific. You must put quotes around the note.

To clear the note, do .infobar note without any text.

User notes are stored in the user notes database (notes.db), which will be created if it doesn't exists.

ib pruneusernotesdb

This deletes all monster, NPC and player information from the user notes database (not the main database). It primarily included for users of version 0.9.1 who wish to keep their existing notes.

It is recommended that you don't run this command unless Infobar tells you to.

ib lock/unlock

Locks or unlocks your current target into Infobar. If your target is locked, Infobar will always show this target's stats (instead of your 'real' target's stats) until you zone, move out of range, or the target despawns.

You can also lock on to 'no target' if you have no target selected.

ib copy

Copies the currently displayed Infobar text to the clipboard.

ib profile profilename

Changes Infobar to use a different profile as defined in your infobar.ini file. This also will temporarily activate Infobar on a character when the ini file specifies it should be inactive.

Note that .ib and .infobar no longer work as of version 1.00 and later.

Windower Integration Guide

There are a number of things you can do to make Infobar work better by using Windower functionality.

Keybindings

ib next and ib nextbar are best used in conjunction with Windower keybindings. I personally prefer using Ctrl-, and Ctrl-. (Ctrl-Comma and Ctrl-Period). You can accomplish this by adding two lines to your init.txt file.

bind ^, ib next
bind ^. ib nextbar 

You may also bind ib prev and ib prevbar, though there is no real need to do so.

Customization Guide

Infobar is designed to be heavily customizable. User preference are stored in infobar.ini, which is mostly self-documenting.

This section addresses customizing the text that actually displays in Infobar.

All examples here assume the default parser.characters setting of $(,)$\

The text displayed in Infobar can be customized in a wide variety of ways. Different strings of text appear in different contexts. Currently, there are several contexts:

notarget

Active when you have no target, or if nothing is configured for your current target.

player

Active when a player is targeted.

ally

Active when a member of your party or alliance is targeted. Overrides player if set.

self

Active when you target yourself. Overrides player and ally if set.

npc

Active when an NPC is targeted.

monster

Active when a monster is targeted.

aggressivemonster

Active when the targeted monster is flagged as aggressive. Overrides monster.

dangerousmonster

Active when the targeted monster is flagged as aggressive AND is high enough to aggro you based on level difference. Note that some mobs aggro regardless of level difference (some NMs and detectors in Sky), so this is not a 100% accurate assessment. Overrides monster and aggressivemonster.

Each context can have one or more text strings associated with it, in addition to several options that control formatting. Formatting options are documented in the .ini file that comes with Infobar. Text strings are documented in the remainder of this customization guide.

A text string is a mixture of static text (such as Target: )and functions that display information about the current environment (such as $target.name$. For example: Monster: $target.name$ will display text “Monster: ”, followed by the name of the current target. If this sounds vaguely like programming, it is because it is a very slimmed-down version of just that – Infobar actually compiles each text string into a set of instructions (a program) that tell it exactly what to do.

Some functions have options: $self.xpcur.percent$ might return '37', but $self.xpcur.percent(2)$ might return 37.15.

And of course, Infobar wouldn't be very useful if you couldn't combine multiple functions:

$target.name$ Aggros: $target.aggressive$ Links: $target.linking$ Detects: $target.detects$ Job: $job$ Weaknesses: $target.weaknesses$ Lv.$target.level$ (~$target.avgxp$xp)

might display as:

Ka Aggros: YES Links: YES Detects: Sound, Low HP Job: BLM Weak to: Fire, Light Lv. 52-54 (~147xp)

How to read the customization guide

This guide consists of a list of functions, followed by a description of what they do. It follows a fairly simple format:

function

Description of what function does.

function(OPTION1,OPTION2)

A function with options. The meanings of the options are in the description.

function(OPTION1=default_value,OPTION2)

Using this function with only one option will treat the option as OPTION2, and use default_value for OPTION1.

Note that $function$ calls function with 0 options, and $function()$ calls function with one empty option. If all of a function's options are optional and you wish to use the default values, use $function$ not $function()$

Information about yourself

self.xpcur

Your character's current XP.

self.xpcur(START_LEVEL=1,END_LEVEL)

Shows your character's XP starting from level START_LEVEL. Note that END_LEVEL must be specified, even though it has no effect on the result. This is to consistent with the other XP functions where it makes more sense.

self.xpcur.percent(PRECISION=0)

How much percent of the way to next level. (e.g. 307/1000 XP = 30). The percent sign (%) is not included in the output (but $self.xpcur.percent$% works like you might expect)
PRECISION determines how many digits to show after the decimal point (must be >= 0). self.xpcur.percent(1) might show 30.7.

self.xpcur.percent(PRECISION,START_LEVEL=1,END_LEVEL)

How much % of the way to the specified END_LEVEL, starting from START_LEVEL and 0 XP.

self.xptnl

How much more XP is required to level. The various 'flavors' of self.xpcur work here as well. For example, self.xptnl.percent(0,75) shows a percentage of how close you are to level 75.

self.xpmax

Total XP required this level. The various 'flavors' of self.xpcur work here as well, though not all are useful. (self.xpmax.percent will always show 100, for instance.)

self.xpmax(END_LEVEL)

Total XP required from level 1 to END_LEVEL

self.xpmax(START_LEVEL,END_LEVEL)

Total XP required from level START_LEVEL to END_LEVEL

self.level(DISPLAYMODE=2)

Displays your current level. If in a level-capped area, DISPLAYMODE determines whether your capped level (DISPLAYMODE=0), real level (DISPLAYMODE=1), or both (DISPLAYMODE=2) are displayed. self.level by itself is equivalent to self.level(2)

When using DISPLAYMODE=2 in a capped area, the output is caplevel(reallevel), e.g. 40(75)

self.job

Job/Subjob and levels (e.g. RDM75/BLM37). If you are in a level-capped area, the effective levels (not real levels) are shown.

self.jobname

Job/subjob w/o levels (e.g. RDM/BLM)

self.mainjob
self.mainjobname

Like the above, but only shows your main job.

self.mainjoblevel

What level your main job is. If you are capped, the effective level (not real level) is shown.

self.subjob
self.subjobname
self.subjoblevel

Like the above, but using your subjob's information instead.

self.x
self.y
self.z

Your character's raw coordinates in 3-D space.

All of these take an optional number of digits of precision. self.x(3) might show 6.123.

self.facing(NUM=0)

Direction your character is currently facing.

NUM is Description Possible values
0 Displays a raw heading between 0 and 360. (0=NORTH, 90=EAST, etc.) Any number between 0 and 360
1 Compass direction with at most one letter. N, E, S, W
2 Compass direction with at most two letters. N, NE, E, SE, S, SW, W, NW
3 Compass direction with at most three letters. N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW
self.name(MAXLENGTH=0)

Your character's name. MAXLENGTH determines the maximum number of letters to display if present (0 = no limit).

self.zone(MAXLENGTH=0)

Name of the current zone. MAXLENGTH determines the maximum number of letters to display if present (0 = no limit).

self.zone.abbv(MAXLENGTH=0)

Abbreviated name of the current zone (How the zone name shows in /search). MAXLENGTH determines the maximum number of letters to display if present (0 = no limit).

self.hp.percent

Your current HP%.

Information about the current area

zone.name

Synonym for self.zone

zone.abbv

Synonym for self.zone.abbv

Information about your current target

target.name
target.x
target.y
target.z
target.facing
target.hp.percent

As per the self.* variables of the same name, but applies to your current target instead.

target.notes

Saved notes, set with the ”.infobar note” command. Requires database features to be enabled.

Multiple Instances

Infobar looks up target information based on name, type (Player, NPC or Monster), and zone name. Some zones have multiple identically-named mobs with different level ranges, jobs, and/or drops. You can cycle between multiple matches with the .infobar next and .infobar previous console commands, or the keybindings you have associated with those commands.

The following functions show information about how many matches are found when Infobar looks up target information. These all require database features to be enabled (and have no practical use if database features are disabled).

target.instance

Which instance of a mob is currently being shown

target.instancecount

How many instances exist.

target.instanceinfo

Shows current and total instances, e.g [1/4]

target.instanceinfomultiple

Same as target.instanceinfo, but doesn't shows when only one instance exists.

Monsters

The following functions are only for targeted monsters. Unless otherwise noted, all of these require database features to be available, and use information previously downloaded from Somepage.

target.job

Target's job. Displays nothing if the job is unknown or the target has no job.

target.level
target.level.avg
target.level.min
target.level.max

Shows the level range, average level, minimum level, or maximum level of the targeted monster.

target.xp
target.xp.avg
target.xp.min
target.xp.max

Estimated base XP gain from killing this monster. This calculation assumes no experience chain or Sanction/Signet bonuses and that you are the highest level member of your party. It also assumes that you have equal access to both ends of the monster's level range.

The XP caps (200/250/300 base XP) are not taken into account.

This is only an estimate and should not be given any serious consideration. Its primary use is to assist in determining if a camp is feasible to move in to.

target.aggressive(YESTEXT=YES,NOTEXT=No)
target.linking(YESTEXT=YES,NOTEXT=No)
target.detects.sight(YESTEXT=YES,NOTEXT=No)
target.detects.sound(YESTEXT=YES,NOTEXT=No)
target.detects.magic(YESTEXT=YES,NOTEXT=No)
target.detects.lowhp(YESTEXT=YES,NOTEXT=No)
target.detects.healin(YESTEXT=YES,NOTEXT=No)
target.detects.truesight(YESTEXT=YES,NOTEXT=No)
target.detects.truesound(YESTEXT=YES,NOTEXT=No)
target.detects.scent(YESTEXT=YES,NOTEXT=No)

Displays YESTEXT if the function is applicable, NOTEXT otherwise.

NOTE: Infobar considers mobs that only agro to magic as “aggressive”. This is different from some other mob databases, which split “Aggressive” from “Aggressive to Casting Magic”. However, they will only be listed as detecting magic, and thus have no other way to agro.

target.detects

Comma-separated list of all the ways a mob detects enemies. Shortcut to using all of the target.detects.XXX options.

target.weaknesses

What element(s) a target is weak to, if known.

target.drops

What item(s) a target drops.

target.stolen

What item(s) can be stolen from target.

target.spawns

How many spawn points a target has. This information is rarely available.

target.respawn

Respawn time. This information is rarely available.

Information about times

As of Infobar 0.9.7 (or any plugin version), your computer clock no longer needs to be set correctly to get accurate results with time.

time.game(FORMAT=%h:%i)

Displays various attributes about the current Vana'diel time. time.game by itself displays the current time (hours and minutes).

FORMAT specifies how time is to be formatted. FORMAT will be displayed as-is after performing some substitutions:

Text Replaced with Example
%D Day of the month, 2 digits with leading zeros 05
%d Day of the month, no leading zeros 5
%W Day of the week, full version Firesday
%w Day of the week, shortened version Fire
%n Day of the week, number (Firesday = 1) 1
%S English ordinal suffix for the day of the month, 2 characters'st' or 'nd' or 'rd'
%M Numeric representation of a month, with leading zeros 09
%m Numeric representation of a month, without leading zeros 9
%Y Four-digit year 1046
%y Two-digit year 46
%H Hour in 24-hour format with leading zeroes 09
%h Hour in 24-hour format without leading zeroes 9
%i Minutes with leading zeroes 06
%s Seconds with leading zeroes 14
%e Vana'diel Season Summer
%t Time (equivalent to %H:%i) 09:06
%T Full date (equivalent to %M/%D/%Y) 09/05/1047
%p Moon phase % 47%
%P Moon phase % and direction of change 47%+ (for a waxing moon)
%o “Waning” or “Waxing” Waxing
%O Textual description of moon phase Waxing Gibbous
%% Replaced with a literal '%' %

For example:

  $time.game(%W %t %O \(%P\) %e %T)$

might display as Darksday 3:04 Waxing Gibbous (83%+) Summer 08/22/1046

time.airship.CITY

Displays airship status for CITY (where CITY is Sandoria, Bastok, Windurst, or Kazham), such as “Leaving San d'Oria in 0:03” or “Arriving at Jeuno in 3:13”. Times shown are real time.

time.airship.CITY.home
time.airship.CITY.jeuno

Shows airship status, but only for either the airship's home port or Jeuno.\\If the ship just left San d'Oria, time.airship.sandoria.home will show the next time it will arrive at San d'Oria (e.g. “Arriving in 12:37”), whereas time.airship.sandoria will show when it would (soon) arrive at Jeuno (e.g. “Arriving at Jeuno in 3:17”).

These simply show “Arrives in TIME” or “Leaves in TIME” and omit the city names.

time.airship.CITY.home.arrives
time.airship.CITY.home.departs
time.airship.CITY.jeuno.arrives
time.airship.CITY.jeuno.departs

Shows arrival or departure time of the airship in either its home port or in Jeuno. This is just the raw time with no other text.

time.ferry.CITY
time.ferry.CITY.departs
time.ferry.CITY.arrives

Shows arrival or departure times of the various Ferries. CITY can be one of selbina (Mhaura-Selbina ferry), whitegate (Mhaura-Whitegate ferry) or nashmau (Whitegate-Nashmau ferry).

Each ferry route is serviced by two ferries that mirror each other's schedule. Thus, if one ferry is due to arrive in Mhaura, its counterpart will arrive in Selbina at the same time. As a result, it is not neccessary to know which port a ferry is arriving/departing at.

time.ferry.CITY will show “Arrives in mm:ss” or “Departs in mm:ss”. The other two forms just display the raw time with no other text.

Special functions

These primarily are useful for having text display only when certain conditions are met, or making output look a little nicer. While they can be complicated, they add a lot of power.

For example, the default configuration comes with this unsightly mess:

  Airships:
  $if($incity(Sandoria)$,San d'Oria->Jeuno: $time.airship.sandoria.home.departs$ || )$
  $if($incity(Bastok)$,Bastok->Jeuno: $time.airship.bastok.home.departs$ || )$
  $if($incity(Windurst)$,Windurst->Jeuno: $time.airship.windurst.home.departs$ || )$
  $if($incity(Kazham)$,Kazham->Jeuno: $time.airship.kazham.home.departs$ || )$
  Jeuno->San d'Oria: $time.airship.sandoria.jeuno.departs$
  Jeuno->Bastok: $time.airship.bastok.jeuno.departs$
  Jeuno->Windurst: $time.airship.windurst.jeuno.departs$
  Jeuno->Kazham: $time.airship.kazham.jeuno.departs$
  (Line-breaks added for clarity, this must be all on one line.)

which shows when each Airship leaves Jeuno, and shows when the current city's airship leaves the current city when you are in San d'Oria, Bastok, Windurst or Kazham.

prefix(PREFIX,CODE,SUFFIX=)

  Evaluates CODE. If the result is empty, no text is displayed. Otherwise, PREFIX+CODE+SUFFIX is displayed.
  For example, $prefix(Job: ,$target.job$)$ will display "Job: RDM" if the target is an RDM, or no text if the target has no job.
  SUFFIX is optional.

if(CODE,TRUE,FALSE=)

  Evaluates CODE. If the result is true, evaluates and displays TRUE, otherwise evaluates and displays FALSE. The output of CODE itself is not displayed.
  For example, $if($inzone(Dynamis - ),At crazy death place,At someplace safe)$ will display "At crazy death place" in Dynamis zones and "At someplace safe" elsewhere.

ifempty(CODE,ALTERNATE)

  Evaluates CODE. If the result is true, displays it. Otherwise, evaluates and displays ALTERNATE.
  This is a shortcut (and more efficient version of) if(CODE,CODE,ALTERNATE)
  For example, $ifempty($target.job$,\(none\))$ will display a target's job, or the text (none) if the job is unknown.

inzone(ZONE1,…) inzoneexact(ZONE1,…)

  Returns 1 if the zone name contains any of the comma-separated zones listed. The search is case-insensitive. inzone only needs to match part of the zone name but inzoneexact must match the entire zone name.
  This is intended for use with if()

incity(CITY1,…)

  Returns 1 if you are located in one of the cities listed. All zones of the city are automatically included. Dynamis zones, airships, ferries, etc. are not.
  Cities that Infobar knows about are: Selbina, Mhaura, Rabao, Norg, Kazham, Nashmau, Sandoria (or San d'Oria), Windurst, Bastok, Jeuno, and Whitegate (or AlZahbi or Al Zahbi).

or(CODE1,…) and(CODE1,…) not(CODE1,…)

  or returns 1 if any of the code evaluates to TRUE.
  and returns 1 if ALL of the code evaluates to TRUE.
  not returns 1 if ALL of the code evaluates to FALSE.

Known Issues with this version

This is a beta release, so there are bound to be problems.

If you observe the text <?> displaying anywhere, it means that some information that Infobar is trying to display is not currently available. This is most noticeable when zoning and when first logging in, and should be harmless. If you see it under 'normal' circumstances, something is probably wrong.

  • Element colors are not implemented or recognized.

Version History

Infobar 1.02 Stable - June 13 2008
  • Fix time crash introduced by SE update.
  • Updated the included monster database.
Infobar 1.01 Stable - May 07 2008
  • Fix crash experienced by some users when using time-related functions.
Infobar 1.00 Stable - May 05 2008
  • First plugin release.
  • .ib and .infobar no longer work as a command prefix. Use the newly-available ib instead.
  • notes.db is no longer required. It will be auto-created if missing when setting the first note.
  • Delay options in the ini file are no longer used, nor are any options that don't makes sense as a plugin (such as autodiscover and autoexeci).
  • Added self.hp.percent and target.hp.percent options.
  • Many many more changes.
Infobar 0.9.7 Beta - May 01 2008
  • Fix .ib prev when cycling backwards from the first instance of a monster.
  • Fix aggressivemonster and dangerousmonster. Aggressive monsters will no longer always show as dangerous.
  • Fixed airship times.
  • Added $time.game$ parsecommand.
  • Added timers for ferries: time.ferry.selbina, time.ferry.selbina.arrives, time.ferry.selbina.departs (Mhaura-Selbina ferry), and likewise for whitegate (Mhaura-Whitegate ferry) and Nashmau (Whitegate-Nashmau ferry). Note that ferries have two runs that mirror each other, so the arrival/departure time is for BOTH ends of the trip.
Infobar 0.9.6 Beta - Apr 07 2008
  • Fix general brokenness from 0.9.5
  • Bar positioning and font sizes are now honored like they should be.
Infobar 0.9.5 Beta - Apr 07 2008
  • Updated monster database.
  • Significant internal changes to better support multiple instances when Windower 3.4 is released.
  • Configuration file syntax changed. (Note configuration files from earlier versions will not work.)
  • Added tray icon. Removed console window.
  • Support for ally, self, aggressivemonster and dangerousmonster contexts.
Infobar 0.9.4 Beta - Mar 24 2008
  • Fixes for the long-ago version update that caused Infobar to crash.
  • Internal database is now derived from Ffxiclopedia.
Infobar 0.9.3a Beta - Mar 21 2008
  • Fixes for the long-ago version update that caused Infobar to crash.
  • Database is still out of date (blame Somepage). A future release will use FFXiclopedia as a data source.
Infobar 0.9.3 Beta - May 04 2007
  • Fixed inability to save and view notes introduced in 0.9.2.
  • Honor bar.position.x and bar.position.y instead of forcing to upper-left corner.
  • Added time.airship.* customization option, and some simple conditional support with if, ifempty, prefix, inzone and incity.
  • Made HTML version of documentation.
Infobar 0.9.2 Beta - Apr 29 2007
  • Split user notes off of the main database to make future updates easier.
  • Honor bar.position.x and bar.position.y instead of forcing to upper-left corner.
  • Added support for multiple bars of a given type. Cycle between them with .infobar nextbar and .infobar prevbar. You may wish to add a keybinding for these.
Infobar 0.9.1 Beta - Apr 21 2007
  • Initial beta release.
plugins/infobar.txt · Last modified: 2008/06/13 16:29 by dewin
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0