Ikarus v2.1.9
Description
- Ikarus is a fully configurable replacement of (nearly) all available UnitFrames in Runes of Magic
- You can easily create your own, custom interface in a few clicks
- It shows you a lot of information you could never see without any addon
You can get the information you want, displayed the way you want it and most of all, exactly where you want it! Setting up a custom layout is fairly easy when using the Ikarus configuration menu available via the minimap button. All properties are bundled in handy sections and you can access them unit by unit.
to see some examples, plz view the screenshots below
Donation-Info
Since donating via the cool Curse-PayPal-Button above means you have to donate in USD and results in an US transaction (even when donating from within the EU) you are welcome to use the option to donate in € and directly to the PayPal-account associated with the mail address you see when clicking the mentioned button ;)
Features
- UnitFrames supported so far
- Player (with psi-bar)
- Player-Pet
- Target of Player-Pet
- Target
- Target of Target
- Target of Target of Target
- Party
- Party Targets
- Targets of Party Targets
- Party Pets
- General Castbar
- General Target Castbar
- General Unit-Frame features
- individual castbar
- 3 statusbars with 5 textfields each
- 4 outside text fields
- free selectable screen anchor
- spell-icon for castbars
- define frame strata and frame level for every unit frame to create overlapings
- create own iconsets (currently not that much variety -.-) and assign them to unit frames
- dummy mode for quick preview of all settings and for easier setup
- orientation and alignment of party (party target, party tot) adjustable
- define global custom colors for all classes and mana types
- buff and debuff frame:
- up to 40 icons each
- count and duration texts freely movable in every icon
- left time visualizable like standard cooldown
- complex arrangement for icons within the buff or debuff frame
- filters own buffs/debuffs on unit or that you could possibly have caused
- buff and debuff highlighting:
- non filtered buffs can be greyed out or shrinked
- filtered buffs can be enlarged or highlighted by border
- 8 or 9 icons depending on the UnitFrame to show at:
- raid/party leader
- loot master
- pvp state
- channel on player frame
- disconnect on party member frame
- main class
- subclass
- boss/elite
- death
- assistant
- fully resizable (Width&Height)
- draggable
- docking support (Each Frame can be docked on another one, so it will be moved around with it)
- at any time exchangable for original RoM frames
- freely scalable from 0.5 to 2.0 besides RoM UI scaling
- auto-formatting for numeric values on text fields (shortened e.g. 2k instead of normal 2000)
- transparency adjustable for all components
- background frame with selectable texture and color
- mighty script framework:
- define up to 8 script actions per frame (combinations of alt/shift/ctrl key and left/right mouse button)
- choose from predefined options such as targeting,open_config,unit_dropdown,toggle_dummy)
- or define your own scripts with the full power of lua!
- more then 20 special variables and functions available for your custom scripts to create compact and performant code (such as quick buff lookups, cast checks, lowest party hp requests, etc...)
- option to keep your current target while performing whatever script action on other units
- even more powerfull unit highlighter framework:
- create unlimited (well... almost unlimited.. limit somewhere around 80...) unit highlighters
- define unlimited (see above) conditions per highlighter
- freely choose priority for certain highlight conditions
- choose between 3 flashing modes (e.g. flash_frame, flash_border...) or just show the highlight border permanently
- set individual colors for every condition
- again you get the full power of 100% freely designable lua code for your expressions with the same set of helpful variables and functions mentioned above
- quickly change between highlighters since they are defined globally for all units
- performance settings for every unit:
- decide how events should be handled
- define minimal interval for update cycles
- handle redundant events within freely definable intervals
- ui-cache for every visible component:
- stores last set values
- discards unnecessary calls to widget methods
- prevents fps drops caused by redundant attempts to set the same values multiple times
- all objects hidable, including single bars, labels, icons, portraits etc
- Each label has the following features
- custom font type,size, weight and outline
- support for IUC-Tags and color tags (see below)
- custom color (including transparency!)
- support for colorizers (see below)
- custom location within certain bounds
- Each bar has the following features
- customizable in height via weight property
- custom texture (pick out of more than 50 textures available at the moment!)
- custom color (including transparency!)
- support for colorizers (see below)
- support for RoM class colors
- support for WoW class colors
- Config menu features
- real time preview while in config menu
- slider values changeable with MouseWheel for better precision
- displaying of complete config or just a unit specific snapshot
- import complete setting blocks from other units
- tree-view for maximum overview
- menu minimizable to have a better overview on the screen
- menu fully zoomable (shift+mousewheel on the titlebar)
- minimize config frame via minimize-button
- move frame around via shift+leftclick on the titlebar
Installation
Unzip the attached archive file and copy the folders "Ikarus" and "AA_PatchWork" to "Runes of Magic\Interface\AddOns". If those folders are missing or have another name, create or rename them so their names fit exactly.
After starting the game, a dialog right in the middle of your screen should appear and welcome you to the install wizard. Follow the steps and set up your first profile. When finished your normal unit frames should disappear and instead the Ikarus frames should be visible together with the Ikarus minimap button.
When starting the game with a character unknown to ikarus you will get another dialog asking you whether you want to use Ikarus on this char or not. If you decide to use Ikarus you can select an existing profile for this char or create a new one with a custom name.
Configuration
To enter the Configuration menu, please left-click on the minimap button. There you can set up every single option you need. To get additional information for a certain option, right-click on the name of the option on the right panel of the config window. A small tooltip will appear telling you (more or less) helpful infos. To close the tooltip just click it or move the cursor out of it.
Profile Handling
Unlike Ikarus 1.09 the new 2.0 version has some optimizations built in regarding the way profiles are stored in the SaveVariables.lua file. When asked to save the current profile Ikarus now runs a complete deep search through the profile table looking for entries that have changed in relation to the default settings. Only those values will then be stored in the Ikarus_VARS profile table. So you get a very compact config table that can easily be extracted and shared with other users. When loading a profile from the profile list Ikarus merges those values with it's default config to create a complete and up2date config table.
Minimap Button
The role of the Ikarus minimap button has changed in many ways:
It now features a popup displaying latest informations about your profile and the state of Ikarus as well as a right-click menu that provides access to some very important function:
- Profile
- Displays the name of the profile currently in use and another list where you can quickly change between profiles
- Language
- Shows the language currently used by Ikarus and a list to change between available languages
- Lock Character
- Opens the lock wizard dialog that will guide the user through the process of locking the current character, i.e. disabling Ikarus for that char. It is also possible to directly delete the profile for the current character within this wizard if desired.
- Rename Profile
- Opens the rename wizard that will let the user choose a new name for the current profile, updating all entries in the profile index.
- Delete Profile
- Opens the deletion wizard to let the user delete the current profile, whereupon the character will automatically be locked.
- New Profile
- Opens the profile wizard that will give the options to create a completely new profile or derive one from an already existing one.
- Merge Profile
- Merge two profiles and save the result in a new profile or overwrite an existing one.
- Import Profile
- Load a profile or presets from a file in the 'profiles' folder.
- Export Profile
- Serialize an existing profile into textual form and save it a file for backup or share it with others.
In case the current character should be locked the minimap button features no right-click menu but opens the unlock wizard instead of the config menu when left-clicking on it. So a locked character can be unlocked in just a few clicks.
In addition shift+left-click on the Ikarus minimap button will call ReloadUI() which causes your profile to being saved right away (as long as RoM does not honor you with the almighty crit). Attention: By using ReloadUI you will loose your currently saved private channels!
Bugs / Problems
Before reporting a bug or a problem, make sure that Ikarus and AA_PatchWork are the only AddOns installed and placed in directory Interface\AddOns\, so you can reproduce the bug/problem without any other AddOns!
When experiencing a bug take a screenshot of the error message if one is displayed. In addition, go to the config menu in Global - General and set the log level to 'debug'. A lot of debug-spam will be send to your default chat frame. Copy the last few dozen lines befor your error occured if you can reproduce it or take a screenshot of them. Attach those files to your bugreport to help us find the nasty little insect ;)
Please report bugs and problems only through the ticket system on curseforge.com and not in the comments!
IkarusUnitFrameCode [IUC]
Ikarus uses a simple formatting code (called IUC), very similar to common BB-Code. Keywords are enclosed by brackets (then called 'Tag'), eg "[LEVEL]" will result in the level of the corresponding unit to be displayed at the given text position. There is no actual limitation to the number of tags used per text, however massive use will result in slow processing!
The following tags are supported by now (some of them will work only at certain unit frames):
Unit tags
- NAME
- The name of the unit
- RACE
- The unit's race (elf or human)
- MASTER
- The name of the unit's master (for pets)
- LVL
- The primary class level of the unit
- SLVL
- The secondary class level of the unit
- CLASS
- The primary class of the unit
- SCLASS
- The secondary class of the unit
- CLASS_SYMBOL
- The first character of the CLASS string
- SCLASS_SYMBOL
- The first character of the SCLASS string
- PSI
- The current psi points of the player
- HP
- The current HP of the unit
- HP_MAX
- The current maximal HP of the unit
- HP_REL
- The relative HP of the unit, eg. the current percentage, as a plain integer
- HEALTH
- A complete health string: "HP / HP_MAX (HP_REL%)"
- HP_DIFF
- The difference between current HP and unit's max HP
- MP
- The current MP of the unit
- MP_MAX
- The current maximal MP of the unit
- MP_REL
- The relative MP of the unit, eg. the current percentage, as a plain integer
- MANA
- A complete mana string: "MP / MP_MAX (MP_REL%)"
- MANA_TYPE
- The type of mana used by the main class
- SP
- The current skill dependent points of the unit
- SP_MAX
- The maximal skill dependent points of the unit
- SKILL
- A complete skill string: "SP / SP_MAX (SP%)"
- SKILL_TYPE
- The type of mana used by the sub class
- TYPE
- The type of the unit, one of the following: PLAYER, NPC, MOB, ELITE, BOSS
- TITLE
- The unit's title
- STATE
- The unit's state: Alive or Dead
- TARGET
- The name of the unit's target
- UNIT
- The frame's unit
Castbar tags
- SPELL_NAME
- The current spell's name
- SPELL_CASTTIME
- The total cast time of the current spell (does not include delay)
- SPELL_DURATION
- The total cast time of the current spell (includes delay)
- SPELL_SPENT
- The time spent to cast the spell so far
- SPELL_LEFT
- The time left for completion of the current spell
- SPELL_PROGRESS
- The progress in casting the current spell
- SPELL
- A complete spell string: "SPELL_SPENT / SPELL_DURATION (SPELL_PROGRESS)"
Game tags
- PING
- The most recent ping value
- FPS
- The current frame rate
- ZONE_ID
- The current zone ID
- ZONE
- The name of the current zone
Color tags
Use one of the predefined color tags below in the form [RED]text[/RED]
- white
- black
- red
- green
- blue
- orange
- yellow
- brown
- purple
- grey
- pink
- berry
- lilac
- khaki
- mint
- peach
- caramel
- cyan
- ruby
[COLOR:xxxxxx]text[/COLOR] define a custom color 'xxxxxx' in hex code
Color tags on labels will be handled in a most performant way. Precompiled text containing only regular IUC-tags will be stored for every label on the unit frame so that later operations do not need to replace the color tags again and again.
Colorizer
In Addition to IUC, Ikarus supports automatic color selection via the colorizer property. A colorizer can be applied to almost every object that can be colored,e.g. statusbars, labels...
The following colorizers are available by now (some of them will work only at certain unit frames):
Unit Colorizers
- DIFFICULTY
- Uses the RoM difficulty table to select color (depends on lvl difference)
- RELATION
- Uses the RoM relation table (color depending on how "friendly" the unit is)
- BLOODBAR
- Fades the color from green to red depending on relative health
- CUSTOM
- Color selection depending on colors defined in custom color section of global delegate
- CLASS
- Color selection depending on RoM system class color
- SEC_CLASS
- Color selection depending on RoM system class color for secondary class
- WOW_CLASS
- Same as CLASS, but with WoW colors
Script Support
All script or expression textfields can handle complex lua code as mentioned above. In expression fields you can write a complex boolean expression that will be evaluated when checking the state of a highlight condition.
The following variables and functions can be used inside a script field (of course you have access to all fields in the global environment '_G'):
- delegate
- The delegate itself, i.e. Ikarus' handler object for this unit.
- unit
- The delegate's unit (e.g. 'player').
- cbunit
- The unit related to the delegate's castbar ('player' on the general castbar, nil on some others).
- hp
- The current total health of the unit.
- hprel
- The current relative health of the unit.
- hpmax
- The maximum health of the unit.
- hpdiff
- The total difference between the unit's current and maximum health.
- hpdiffrel
- The relative difference between the unit's current and maximum health.
- hpchange
- The total amount of the last change in health of the unit.
- hpchangerel
- The amount of the last change in health of the unit relative to its maximum health.
- mp
- The current mana for the unit, if one of it's classes uses mana, 100 otherwise.
- mpmax
- The current total mana for the unit, if one of it's classes uses mana, 100 otherwise.
- mprel
- The current relative mana for the unit, if one of it's classes uses mana, 100 otherwise.
- targeting
- True if the unit is targeting the player.
- mytarget
- True if the player is targeting the unit.
- assisting
- True if the unit is assisting the player (targeting his target).
- dead
- True if the unit is declared dead.
- enemy
- True in case the unit can be attacked by the player.
- friend
- True in case the unit cannot attack the player.
- infight
- True if the player himself is in active combat state
- lowesthp
- True if the unit has the lowest current health amongst all party members.
- hasbuff(name [,...])
- Returns true if there exists a buff on the unit whose name is equal to one in the list. If no buff is specified it returns true if there exists at least one buff on the unit.
- hasdebuff(name [,...])
- Returns true if there exists a debuff on the unit whose name is equal to one in the list. If no debuff is specified it returns true if there exists at least one debuff on the unit.
- hasbuffs(name [,...])
- Returns true if there exist all specified buffs on the unit. If no buff is specified it returns true.
- hasdebuffs(name [,...])
- Returns true if there exist all specified debuffs on the unit. If no debuff is specified it returns true.
- casting(name [,...])
- Returns true if the unit is casting a spell that matches one of the given names. If no name is specified it returns true if the unit is casting anything.
- mycast(name [,...])
- Returns true if the player himself is casting a spell whose name matches one in the list. If no name is specified it returns true if the player is casting anything.
- isclass(class [,...])
- Returns true if the unit's class matches one of the given class names (does not check secondary class!).
A possible useful condition for a highlighter could then look like one of the following:
- on party frame
- assisting & casting("Heal","Urgent Heal")
- this will highlight all party members healing the same target as the player himself
- on party frame
- !hasbuffs("Amplified Attack","Grace of Life","Magic Barrier")
- this will highlight party members that lack one of the specified buffs
- 3 different conditions
- hprel<75 hprel<50 hprel<25
- combined with different colors and flashing modes this will warn you very obviously when a unit's health drops rapidly.
Other than expression fields the textfields in the scripts section of every unit have no restrictions regarding the type of input made to them. You can enter multiple lua expressions separated by semicolon.
In addition to the above variables and functions you get some extra function in this type of textfields:
- cast(name)
- Attempts to cast the specified spell and returns true if there was no cooldown on it.
- item(name)
- Uses an item specified by the given name.
For example you could create the following scripts:
- "Regenerate"
- this will just cast a simple reg on the unit
- if hpdiff>7000 then cast("Quick Heal") else cast("Regenerate") end
- this will cast a quick heal on the unit in case it is severly injured or just put a simple reg on it otherwise
If you used the 'Lock Target' feature and for some reason do not want Ikarus to switch back to your previous target you can include a 'return true' statement in your script handler to tell Ikarus you want to stay on the unit related to this script field (e.g. 'if hasbuff(...) then cast("something") else return true end').
Cool stuff shipped along with PatchWork
PatchWorks features 2 little minigames that might shorten your time while waiting in instances or when you're just bored of everything else (minimizing the game windows causes the minigame to pause).
Runesweeper
This is a simple implementation of the good old minesweeper you know from windows. Click the start button and begin scanning the fields for mines. The number on a field tells you the amount of mines on all close-by fields. You can mark or unmark a field as mine by rightclicking it. Start the game via shlash-command "/rsweeper <mode>" or "/runesweeper <mode>" where '<mode>' may be one of 'easy', 'medium' or 'hard', the default value is 'easy'.
Sudoku
Quick to use implementation of the popular sudoku game. For a general description of sudoku check wikipedia or other info pages. Leftclicking an unset cell activates the corresponding candidate, leftcklicking on a marked candidate again sets it as chosen number for this cell. Right now there are no help options build in, so you are on your own ;) Start the game via shlash-command "/sudoku <mode>" where '<mode>' may be one of 'easy', 'medium' or 'hard' or the number of fields you want to be revealed at startup.
Feature Requests, Contact and other Stuff
If you have the one and only most uber imba idea for improving Ikarus or in case you want to provide additional graphics for bar textures, icons, highlight borders or something else don't hesitate to contact me via email.