Well, I thought for awhile about what I should tackle for my second addon... my FiancÚ was playing with her Warrior last night, doing quests in Dustwallow, and she had to keep running away, targeting herself, and using bandages. After I helped her set up a "[target=player] bandage" macro, I decided that my next Addon should be an all-purpose, emergency healing button.
I looked around, but didn't see anything that did all the things that I'm planning, so I hope my idea is original enough...
I wrote up what I intend to do, please take a look and let me know where I can improve. Any help is greatly appreciated:
This will be a simple, emergency-use addon to heal you when you click/use hotkey.
While idle, addon will try to determine the following items:
Healing spells known that you can use on yourself.
Potions you have in you bags that you can use on yourself.
Bandages you have in your bags that you can use.
It will try to determine how long each of these items takes to cast.
It will also try to determine if you have any "instant cast" abilities that can reduce the length of time for a spell to be cast.
It builds a table of all these things, and assigns them some values
I don't know if there's currently a list somewhere for healing abilities, so I'll probably have to build it myself...
Structure will look like this:
ABILITY NAME MID HEAL AMOUNT CAST TIME COST TIME
Healing Touch (1) 44 1.5 25 0
Rejuvenation (1) 32 0 25 12
Minor Healing Potion 80 0 0 0
To Determine the Value, we take the MID HEAL AMOUNT, Subtract (CAST TIME * X + (MANA COST/5) + (TIME / 2)) and Round Up
If the Player is in Battle, X = 20, otherwise, X = 10
So, the Values for the above abilities would be:
Out of Combat:
In either situation, the Potion is best, but if the Potion is unavailable (just used a potion, etc), then In combat, Rejuvenation is best, and out of Combat, Healing Touch is best.
Based on these ratings, when the button is pressed, the Addon will cast the best spell for that moment. Obviously, it will need to take into account if anything is unavailable at the time (cooldowns, OOM, recently bandaged, etc), so that when you click, you should be healed somehow, if at all possible.
In combat looks for the fastest solution, while out of combat looks for the largest amount of healing.
For talents that effect healing abilities, we'll want to just have another list:
TALENT NAME AFFECTED ABILITY BONUS PER RANK
Naturalist Healing Touch 1
Improved Rejuvenation Rejuvenation 2
So, if the player has Healing Touch 1, and 2 points in Naturalist, and Rejuvenation 1 with 3 point in Improved Rejuvenation then we could figure that the Values for above would be recomputed as:
So, I think I need to break this down into several bite-sized pieces...
A button that can cast a spell/use an item. I'm sure this is simple enough, but I just haven't done it before.
A way to find out which spells a player knows that can heal, and which items they have on them that can heal them. Build a list of these items, and come up with some values for them based on healing amount, cast time, etc.
Determine if the player is in or out of combat at a given time, and switch between two different modes - if in combat, look for the fastest possible healing, if out of combat, look at the most effective.
Give the player some settings:
Option to Enable/Disable addon.
Option to Use/Not use Spells.
Option to Use/Not use Potions.
Option to Use/Not use Bandages.
Option to define different modifier keys to change the functionality of the button - for instance, ALT could force "Speed" casting, CTRL could force using an Item, etc.
Option to set Hotkey for the button.
#2 is definately going to be the hardest, and I'm really not sure how I'm going to do it yet...
#1 looks like it should be simple, but I'm not sure where to start with making a simple, draggable button (similar to Coconuts or something). Are there any tutorials, or simple examples for doing that somewhere?