~~NOCACHE~~ ~~META: creator = Dewin &description abstract = Displays lots of information about you, your target, and your environment ~~ ====== Infobar (1.04) ====== ===== Plugin Information ===== ^ Information ^^ ^ Developer:| [[:user/Dewin|Dewin]] | ^ Download:| [[http://windower.net/plugins/Infobar.zip | Infobar]]| ^ Download Count:| [dlcount]infobar[/dlcount] | ^ Support:| [[http://forums.windower.net/index.php?showtopic=9486 | Click Here]] | ^ Release Date:| September 16th, 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 [[http://ffxiclopedia.org/|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.