If you like Spelling, please consider giving it a good rating.
(If you use Spelling frequently and feel comfortable with its use, please check out the comments section, as I have a request.)
Spelling, what's it good for? Brightening up spell-casting, ability use, and even item use with some emotive and text-based fun, that's what!
I created this mod because I found that I liked having my character saying things when I cast/used stuff, but generally it was either too spammy or it made my macros too big, so I needed a solution... and thus I made this mod.
An amusing example would be to consider a Mage's spells, what if said Mage could pose dramatically and yell each spell in a terrible Dragonball-Z-like way? A practical example could be Entangling Roots or some other Crowd Control system, when you get it off you could let your raid/party know. You could even tie it to healing spells, applying poisons, or if you're feeling crazy... you could even tie it in with summoning out a mini-pet.
There are many uses for Spelling, and they're all handled through the chat command /spelling. I warn you though, there's no GUI here, so this isn't for the faint of heart. But what I can say is that the level of customisation and granularity that Spelling provides makes up for it.
There is a form of in-game help, but more it's really just a reminder of what each of the commands do. It can be triggered by using the help command, it can also be triggered by typing /spelling with nothing else.
The help print also states whether the mod is enabled or disabled.
/spelling add [...]
This is where the customisation element of Spelling is handled, and though the use of it might be confusing at first, it's all there to help you create the kind of reaction you want and empower the player. Each command is separated by the # symbol, it's done this way so that you only need to type one line to get it all in.
That's an example of how it works, and you can refer back to that as I explain what each of the arguments do.
Arg 1: Unique Identifier
Spelling is able to use multiple entries for each entity (an entity being what I call a spell cast, aura cast, item use, spell cast fail, aura removal, et cetera), but to be able to do that it needs to be able to distinguish entry A from entry B, a unique identifier is needed to do this. So if you wanted two entries for a spell, you could simply supply a unique identifier for each...
It doesn't have to be numbered like that, in fact you can use any identifier you want, as long as they're all different. Another use for the identifier is if you ever need to remove an entry (I'll cover this later), so it's best to keep the identifiers as simple as you can.
Arg 2: Spell Name or ID
For this arg the spell you wish spelling to react to must be entered, the spell can be entirely lower case, higher case, correct case or whatever you like, as long as the spelling of it is correct.
/spelling add myid # myspell # [...]
You can also use the spell ID. This might be necessary for spells that apply multiple buffs whilst keeping the spell name the same. One example of this is Invisibility, when the spell is first cast a buff named Invisibility is applied, but when the invisibility actually kicks in, another buff named Invisibility is applied again. The only way around this is to use the ID of the spell.
/spelling add myid # id:66 # [...] (First ID of Invisibility.)
/spelling add myid # id:32612 # [...] (Second ID of Invisibility.)
If you're not sure what the IDs are, you can use Spelling's own in-built debugging command. The debug command will be covered later in these instructions.
Please note that Spelling isn't limited to just spells, in fact you could use it with items, or other abilities. As long as it's something that shows up in the Combat Log, it'll work. I even use Spelling to have some text fired when I summon out my Worg Pup.
Arg 3: State
This is--err...--arguably the most complex of all the args. The state implies the state the combat log throws in relation to a spell, item, or ability.
/spelling add tranq # tranquility # spell_heal # [...]
/spelling add mark1 # mark of the wild # success # [...]
/spelling add hold # entangling roots # applied # [...]
/spelling add mark2 # mark of the wild # removed # [...]
/spelling add baaa # polymorph # missed # [...]
/spelling add goose # mongoose bite # missed # [...]
These are a few examples, but the states used by spells can be quite different. Often, many abilities, items, and spells will have their own particular and quirky state use, so you'll have to possibly use the debugging tool to find out which is best for the spell/ability/item you're trying to set up. There's a section below though on the use of states, and I've tried my best to suggest the best courses of action there, so that might be a good read too if you're new to Spelling.
Arg 4: Channel
This arg implies the output channel that spelling will send to. This can be say, raid, party, or whatever you'd like.
/spelling add catform # cat form # applied # emote # 1 # lets out a feral mrowl as his form shifts to that of a Lion.
The above example uses the emote channel, so that if you have a Druid and they shift to Cat, they'll do the emote: Name lets out a feral mrowl as his form shifts to that of a Lion.
The channels are basically the ones you've come to know from WoW, so usually if you can prefix it (such as /say, /party, /guild), you can use it as a channel.
There are times though where you might want to specify that you'd like to check whether you're in a raid and send there, and then check whether you're in a party and send there, and if you're in neither you might not want the Spelling to fire at all.
In this example, Spelling first checks to see if the player is in a raid, and if so the output is sent there, then it checks to see if the player is in a party, and the output is sent there, otherwise the spelling won't fire at all.
/spelling add myid # myspell # mystate # party say # [...]
In this instance, Spelling will check if the player is in a party and send the output there, if not it'll send the output through say.
Arg 5: Chance
As a Druid, I'm more than well aware that some abilities are as spammy as hell. Rogues should know this too. But that shouldn't stop us from being able to use Spelling, and without spamming our fellow adventurers into oblivion! To this end, chance allows you to set a chance number for your spell.
The chance is 1 in ?, so if you were to specify 5 it has a 1 in 5 times chance of firing. This is done by doing a randomisation between 1 and your number, if the randomisation matches your number, then the Spelling is fired. If the chance number is 1 then the Spelling will always fire.
That's just one example, and the text can be anything you'd like. I've covered earlier how channels can be tied into this, so that you can send text to any channel you like. This is where the customisation of Spelling really shines.
/spelling add nobaaame # polymorph # missed # say # 1 # It would appear that HITNAME doesn't care to be a Sheep, and that's their loss if you ask me. It's a wonderful experience, I say.
There are various elements that can also be tied in with the output text, such as HITNAME in that example. I'll cover these below. The gist of it though is that anything you can get your character saying or doing whatever you like, it really is all up to you.
Output Element: HITNAME
This might imply that you'll need a target in order to use HITNAME, but that's not the case. Providing your spell actually lands on a unit (as opposed to being an area of effect) it'll work. This is because the unit it falls on is known as the destination unit, and any spell or ability that lands on a unit will consider that unit as the destination unit.
For example, if you were to buff Peon with Mark of the Wild, Peon would be considered the destination unit, even if you don't have them targeted.
The same goes for healing spells, abilities, and even item-based abilities that land on a unit. If however HITNAME is used in a spell that doesn't have a destination unit, then HITNAME will simply come back out as <no destination unit>. I've done this so it'll be more simple to quickly spot what can use HITNAME without a lot of debugging.
Output Element: PETHITNAME
You might want to add Spelling items for your Hunter pet, you can do that...
/spelling add growler # growl # success # say # 1 # My pet has successfully growled PETHITNAME!
Basically, the idea is that it works exactly the same as HITNAME, but in this case it'll check for an ability on your pet, and your pet's destination unit.
Output Element: SOURCE
In some cases, you might want to add Spelling entries for things that were cast on you, rather than things you cast. For example, if someone casts a debuff on you, you might want to use Spelling to inform your raid/party.
/spelling add mime # silence # applied # say # 1 # SOURCE is trying to cas--mmh mmf mrrh mmgggrffle mrraaggh... *waves his arms wildly!*
In this example, Spelling is setup to output a say line when the player has silence cast on them, SOURCE will be replaced by the name of the person or mob who cast it on them. This can also be used for heals and buffs to thank people if you like, so it isn't limited to just debuffs.
Output Element: PLAYERISDEST
Unlike the other elements, this one is replaced by nothing, so if you have 'This text.PLAYERISDEST' it becomes simply 'This text.' That means you can put this element anywhere. The point of this element is to allow a Spelling to be fired if the destination of a spell is the same name as the player, hopefully this will be a useful tool to those who have dual-part buffs.
Output Element: IGNOREREQS
This one is simple, it means only that Spelling reacts if a spell is fired, and it makes Spelling not care who the source is, and who the dest is. If IGNOREREQS is supplied, then the only thing Spelling worries about is that the spell is right, and the state is right. Like PLAYERISDEST, IGNOREREQS is simply stripped from the entry as soon as it's been checked.
If you want a list of all the entries you've made to spelling, this is the command to use.
Spelling List: [unique id] text
That's the output format, the unique identifier is highlighted to make it easier to spot the one you're looking for, if you're seeking a certain entry to delete/edit.
If you want to be able to see just one entry or a grouup of entries, you can supply queries to list.
/spelling list firstspelling secondspelling thirdspelling [...]
This will build and display a list of only the specific Spellings you want to see. This is handy if you want to make a quick change to a Spelling because that way you can see what you have already (and Spellings can be re-added without the need to remove them, providing you keep the identifier the same.
Finally, you can do a partial match for entries. Let's say that for your Druid character, you base all your Spelling entries on a class-abilityname basis (such as druid-growl), you could then list them by using: /spelling list druid
/spelling remove [...]
This command is used to delete Spelling entries based on their unique identifiers. If you're not sure of the unique identifier you used, you can use list to check all the entries.
This will enable/disable Spelling's functionality. There are times when Spelling would likely get in the way, such as if a player's at a Battleground. So it's good to be able to tell Spelling to shut up for a little while.
This option carries across sessions.
This is here for worst case scenarios. If Spelling completely breaks down due to a bad entry and you can't remove it, this'll likely solve the problem. Spelling is pretty solid, these days... but this is here as a "just in case" precaution. It's a last resort though as this will wipe all of your entries and reset Spelling to its default installation state.
This activate's Spelling's debug mode. It works as a toggle so it can be disabled the same way. Debugging is only activated for the session though, as it's more of an information gathhering tool than anything else.
When debug mode is enabled, standard Spelling behaviour and outputs are suppressed in favour of debug prints. These prints contain the following (and in the same order):
The debug mode is most handy for figuring out which state is the best for your spell, because you'll be able to watch which states are cycled through when your spell is fired. It's also good for finding out the IDs of spells too, in case you need to find the ID of a spell in order to use it properly (as per the Invisibility example above).
The Use of States
The first step in determining which state best fits a spell is to use the debug, if only one state is fired for your spell, then that's the state to use. If something like SPELL_CAST_START is fired, followed by SPELL_DAMAGE, then SPELL_DAMAGE is the most apt state.
The way to find out which states your spells use is to enable debugging and try casting it. The debug print will tell you exactly which states were used by your spell so that you can determine the best to use.
Generally though, a good basic guide is to keep in mind what a spell does, that and I'll supply a general use list here:
Healing Spells or Abilities: I find spell_heal is generally best.
Damaging Spells: It seems spell_damage works best for these.
Damaging Abilities (Druid/Rogue/Warrior): Often applied works rather well.
Crowd Control: Unsure, but probably success or applied.
Buffs: Usually success is best for buffs.
Items: I find that for items without timers, the way to go is cast_start.
There are weird effects that can stem from using incorrect events, as has been reported to me by helpful Spelling testers. For example, using applied for buffs causes it to trigger when other players cast that buff. So if you're witnessing weird behaviour, try another state. If all else fails, report back here with the line you were using (and the debug info, if possible) and I'll do all I can to help you out.
If you'd like to see examples of how to create different kinds of Spelling entries, please check out the Spelling Resource Wiki, you might find something close to what you want to do there, and you could simply copy an example and edit it.
Regarding Portals, Teleports, and Mounts
There are things that the Combat Log doesn't support, such as teleports, portals, mounts, and so on. Support has been added for these in Spelling, but they don't use any of the standard CLEU states to function.
SPELL_CAST_SPECIAL_SUCCEEDED - This works the same as SUCCESS.
SPELL_CAST_SPECIAL_SENT - This works the same as START.
So for the states, you can simply supply 'succeeded' and 'sent'. You can debug spells/abilities/items to find out which will work for you, there will be areas where one or the other will take precedence.
Here are a few examples of what I'm talking about: SENT always has a destination, but START never does, SUCCESS always has a destination, but SUCCEEDED never does, neither SENT or SUCCEEDED carry spell IDs (the IDs always return 0), but START and SUCCESS do. (It must be noted that all states carry the spell name, but in some cases the ID is needed because the ID can be different where a spell/buff name can be the same for more than once instance.) So as you can see, you need to choose the state based on what variables you need.
If you want to see the two new states in action, here's how I use them with my mount (as the CLEU doesn't support mounts):
/spelling add horn # frostwolf howler # sent # sound # 1 # warhorn.wav
/spelling add whitemane # frostwolf howler # succeeded # say # 1 # I called to you Whitemane, and loyally you came. Now, let us ride like the wind!
The first instance is done when I start to call out my mount, it plays a warhorn sound (see below in the advanced usage section for information on using sounds in Spelling), then when I get on my mount, it does the say.
With the use of the debug tool, it shouldn't be hard to figure out which you'll want to use.
These aren't like the elements as each element is a singular thing, but these words can be used all together in one sentence even, if you so desire. These are to aid in creating more believable Spellings, without needing to resort to a script.
Each of the words works in the same way, and it's a basic concept so this shouldn't be considered as advanced use. Anyone who can use Spelling will be able to use this. The format is basically that WORD is supplied, and you get a Return. As an example, TGTRACE would return Tauren if the targeted unit was a Tauren.
Finally, for the gender words, you can append CAP in order to use them as sentence starters. For example, whereas TGTHESHE would return 'he' (if the target unit were male, of course), TGTHESHECAP would return 'He'.
TGTHESHE and FCSHESHE
This returns either 'he' or 'she' based on the gender of the target or focus, it can also return 'it' if Spelling can't figure out the gender or if the game supplies no gender (this might be the case with numerous non-humanoid mobs).
- As a bitter Forsaken, I hate HITNAME as I hate all things, TGTHESHE can burn!
- As a bitter Forsaken, I hate Baudb as I hate all things, he can burn!
You can replace TGTHESHE with FCSHESHE in this example to use the focus instead.
TGTHISHER and FCSHISHER
This is much like above, except it returns 'his', 'her', or 'its' as applicable.
- Yes, I always buff HITNAME, but what can I say? ...TGTHISHER hair smells nice.
- Yes, I always buff Baudb, but what can I say? ...his hair smells nice.
Again, you can use FCS instead of TGT for a focus unit.
TGTHISHERS and FCSHISHERS
This is much like above, again, except it returns 'his', 'hers', or 'its' as applicable.
- HITNAME certainly brings all the boys to the yard, no showy display of dancing can top TGTHISHERS!
- Baudb certainly brings all the boys to the yard, no showy display of dancing can top his!
TGTHIMHER and TGTHIMHER
Verisimilitude! This returns 'him', 'her', or 'it'.
- HITNAME is irritating enough to deserve SPELLNAME, I find myself irked by TGTHIMHER.
- Baudb is irritating enough to deserve Entangling Roots, I find myself irked by him.
TGTRACE and FCSRACE
This returns the race of the target/focus.
I won't give examples for this, it's too easy for me to take cheap shots at the races I don't like, but because it's pretty obvious, that's okay. <.<
TGTCLASS and FCSCLASS
This reutrns the class of the target/focus.
As above, it's too tempting to take shots at those bloody--err... shots at classes I don't like.
TGTPOWER and FCSPOWER
This returns the power type used by the target/focus. This is mana, energy, or rage. If an unknown type is used, or any undesirable type is returned, it's replaced with 'effort' (I felt that was the most applicable).
- Ow, ow, ow, ow... does this TGTRACE never run out of TGTPOWER?!
- Ow, ow, ow, ow... does this Blood Elf ever run out of energy?!
...and so on.
This returns the zone as shown by the minimap's text.
- Wow, I think I just dropkicked that TGTRACE all the way out of MINIMAPZONE!
- Wow, I think I just dropkicked that Gnome all the way out of The Barrens!
Advanced Spelling Usage
Please note that with all of the features below, the only elements that work are PLAYERISDEST and IGNOREREQS, as the other words would not be required. PLAYERISDEST is only there so that you can ensure that the player is the destination with a given Spelling. IGNOREREQS forces spelling to not care who's dest and source. Otherwise it's assumed that the player must be the source.
Spelling can play sounds to accompany your spells/abilities/items, too. For example, you could play the sound of a horn when summoning your Wolf. All you have to do is supplant the usual entry additions with the appropriate words.
Text: soundfile.wav (or .mp3, .wma, or whatever else the client supports)
This allows my Tauren to play a Warhorn to summon Whitemane, his Frostwolf.
Sounds always play, they're not a part of the random selection, so you should only have one sound per spell/ability/item and state. If it's the same spell/ability/item but a different state, then it's okay to have a new sound.
This is similar to above, but instead of sounds Spelling can utilise emotes suchc as /dance and so on.
This will cuase my Druid character to do the /charge emote, whenever he uses the Bear skill Feral Charge.
You, Anybuff/Anydebuff, and SPELLNAME
What if you wanted a blanket system that could react to any buff or debuff? I did, and so I've included an option to Spelling that can do that. If you supply anybuff or anydebuff to Spelling, it'll do a named Spelling whenever a buff/debuff is cast. Basically turning Spelling into broadcaster, but with Spelling scripts (Grammar) so much more could be done than that. But for the purpose of example, we'll use a broadcaster. Note that SPELLNAME, unlike any other element, can be used in combination with any other one element.
Since the spell is passed through to the Spelling script, the SPELLNAME element does not need to be supplied.
You and Any
The any operator works similar to IGNOREREQS, except in this case it ignores the need for the spell. When any is supplied, there can be any or even no spell. The reason for this is primarily for scripts, but it can even be used with normal spellings, too. When any is supplied, the creator of a Spelling must instead look to the state to work with, it's with this that the power of any is utilised.
Here's an example:
/spelling add killed # any # party_kill # 3 # A vile act, but it had to be done. May the winds guide TGTHISHER spirit to the Earthmother's embrace...
On a chance of one in three, this fires whenever the player (who is the source) makes a kill. I find it rather fitting that my Tauren says this occasionally when grinding.
The scripting functionality is for advanced users, and if you don't have an understanding of Lua then you shouldn't worry about it. For those that are interested though, I'd suggest you download Grammar from the optional files, as it contains what you'll need to start Spellin' some scriptin'! ...or something like that.
The Grammar.lua file contains detailed instructions on how the system works, including an example. If you have any questions about the feature then feel free to ask me, I'm always willing to help! I've also put up a script example (just to get things started) on the Spelling Resource Wiki.
I'm hoping the wiki can become a central hub for users of Grammar, it's a place where you can put your scripts for others to see, or if you need help with a script (mark it as problematic/not working) then put it up on the wiki and I'll be able to take a look at it and edit it for you.
Spelling is feature-complete, and after much testing it's pretty stable. It can currently be considered stable, as I've implemented all the features I wanted to see in it, and I've fixed all the known bugs. For the forseeable future, I'm going to focus on fixing any bugs that might possibly remain, and simply maintaining the addon.
I say this because Spelling does all that it should, currently, and it covers every base. I don't want to do more with it than it already does as that would be feature-creep, just putting things in for the sake of putting them in, things that might not necessarily be useful.
So Spelling as you see it now will likely be Spelling as you'll always see it.
All I have to add now is; thanks for using my mod, and I hope you enjoy it and find it useful!
revision260608: It was possible to call improper things from the /spelling command line thingy, and I've known that for a bit but I just left it to smart users not to do anything foolish with it. But now that I'm just working on cleaning up Spelling, I've removed that capability. So consider that a fix, of sorts!
revision230608c: /spelling list can now do partial matches.
revision230608b: Damnation, I forgot to replace one instance of HITPOWER with FCSPOWER, I can't believe I overlooked that. Thankfully it was only one and I caught it quick.
revision230608: First of all, a fix. I'm really sorry about this but it seems like the whole SRC/HIT stuff I added only works in PvP. :< This is because the UnitBlah functions are smart enough to work with player names, but not smart enough to figure out how they should work with mob names (in fact, UnitSex always returns male if it's given anything it doesn't recognise). To this end, I've had to change the source/destination basis to a target/focus basis. Again, sorry. I've added a bunch of fun new stuff to make up for my err, though. The gender items can now be capitalised (to be used at the start of a sentence), there's a new 'any' operator which can be used in the place of a spell name, list has been buffed so that it can supply only what you want to see (instead of spamming everything), and at Everglow's request (and it was a good request) I've moved SpellingScript into Grammar for the sake of cleanliness and to save people from accidental overwriting.
revision220608: Added some word thingies, fun stuff!
revision170608c: Note to self... commit before uploading! Thankfully, it hadn't been verified yet, I noticed when I peeked in the zip that something didn't match up my local, thank goodness I do OCD code spring-cleaning.z
revision170608b: Having to add every buff to Spelling for tehdance (those who read the comments will know what I mean) was getting pretty damned old. So instead I put in a system where anybuff/anydebuff could be used. This is insanely powerful... and could be used as an alert system with two spelling lines alone. I've put the details on the front page. ...heh, I love these little updates, no more epic stuff for me! But this stuff I can do.
revision170608: Nothing major, just a couple of small things I felt Spelling could do with to make it more powerful, there's a new element (IGNOREREQS) and now spell is passed to SpellingScripts along with source, and dest. Check out the SpellingScript.lua for the example but don't overwrite your current SpellingScript file!
revision160608d: The addscript, removescript, and listscript commands have been removed in favour of an entirely better system, a more complex one to be sure, but it has to be said that the older scripts system was pretty damn useless. As I like to do with Spelling, the chaff is cut away and only the wheat remains, hopefully this will be the kind of powerful system I was hoping for, one that really would let players do whatever they like with their Spellings. Well, within the restrictionns imposed by Blizzard, of course. (So no reactive-casting for us! <.< Well, not unless you're really clever and you tie it into a button that shows at the proper time... but I won't get into that.)
revision160608c: Of course, could be that a player wants to specify player-as-source-only or player-as-destination-only for sounds and static emotes, in that case, I've enabled the use of PLAYERISDEST for sounds and static emotes. Please check the front page for information on this.
revision160608b: Sounds and static emotes should only work if the player is the source or the destination, whoops.
revision160608: Fixed an error in Spelling's onload, which caused it to run more than once.
revision150608d: Hokay, new attempt at the script feature. I re-thought it and I think I have a good solution. Check out the front-page for details. Important note: If you aren't new to Spelling, please run the /spelling upgrade command!
revision150608c: The last version had a blank zip inside which was because I wrote the batch file I was using to compile these wrongly, whoops! Thanks to Cairenn for letting me know!
revision150608b: I have an apology to make. I've been trying to keep the 'special' instances of things to 'SUCCESS' in order to not make things difficult on the player, but the truth of it is... it's not working out. Ever since I introduced support for portals, teleports, and mounts, Spelling has gone haywire. That was my fault, my erroneous approach. Before anything is feared, no, I'm not rolling back. In fact, this release is a rethink of how special, non CLEU (like the aforementioned) things are handled. There are now two new states (so you may have to debug). The one is a replacement for the special bits of SPELL_CAST_SUCCESS, the other is something entirely new! I've been playing with it for a while (questing with it) because I wanted to make sure that it was good. I wanted to make sure that it was right. I've gotten a bit fed up of all the broken releases lately... and it's because I've been going beyond my capabilities, trying to do the impossible for the sake of simplicity. So everything works now, it's just a bit more complicated. I apologise for that, but at the very least Spelling is flawless again. To check out information on the new states and such, check out the front page, I've explained it all there.
revision150608: Changed when sounds/static-emotes fire, now included officially. Check the front page for details.
revision140608d: Fixed a few bugs. Spelling would only fire once for certain things per session [regression-fixed]. Spelling would sometimes fire twice for certain things [fixed]. Spelling would not fire if a special instance (such as mounts, portals, teleports, and so on) were to be triggered first after logging on [fixed]. Believe it or not, all of these bugs are related. Anyway, that's it... I'm-a go to bed.
revision140608c: A few undocumented additions, check the comments.
revision140608b: I realised that there was an error in the last release, it broke destination tracking. I thought that would be a simple fix, turns out it wasn't. It took me half a day to sort it all out, and to get the new functionality working happily with the old (many Druid skills and mount ups tested, with people giving me funny looks). But in the end, fix it I did, and without needing to change how it works for the user, either! But damn, that was exhausting. I can has hugs now? *Thud.*
revision140608: Spelling release of awesomeness! I'm sorry for that, I don't mean to be egotistical or anything but I'm really pleased with this release. Spelling now supports things the Combat Log does not, such as teleports, portals, and mounts. Hooray!
revision130608: This version is an attempt to fix things like the second part of Invisibility, if they don't work. The suggested approach is to use the new PLAYERISDEST element. I've also fixed a silly bug with SOURCE handling.
revision120608b: Okay, I know everything was working in the current release, but there were a few quirks that were bothering me. For example, if you set a buff to success, it wouldn't fire for other players, but if it was set to applied (a wrong state), it would. Now it won't fire at all if it's set to applied. I've done some serious rejigging of the code, here. This also means that the one elusive element--Invisibility, part the second--should actually work right, now. I've also cut down the extra added registered events, now I only register one event other than the CLEU, and that's only because it's aboslutely necessary. So try this latest release and see for yourself! (Oh, forgot to mention... I also fixed a bug where the list would freak out if the mod was in its disabled state and the list was called.)
revision120608: No code updates this time, I've just included a credits text.
revision110608c: I made one more attempt, and this time I know I have it. Why? I got my roomie to help out with his Mage. Two Mages, and a hell of a lot of testing. I just kept changing things until it worked. I have no idea why this all works now, my head is too confused... but it works. And I never, ever want to do that much testing again, ever. Nor having to impose! Bleh! I also ran a full battery of tests on my Druid; Starfire, Moonfire, Cat Form, Prowl, Entangling Roots, and Summon Worg Pup. So if Spelling is still firing for other players, then it's probably not Spelling's fault. This time I'm sure. I just wish I knew fully why it works... but it does.
revision110608b: Okay, this is my last attempt to fix this by myself. This might do the trick, but I honestly can't say. The spells should work, and they shouldn't trigger for other players. If it's still broken, let me know and I'll go asik for help over on the WoWAce forums, I will get this mod sorted out!
revision110608: Thanks to lfd, I found some weirdness with how start>apply based spells were being handled, this really broke my mind for a bit... but I got that all sorted.
revision100608f: The PETHITNAME element wasn't working right, it was reporting for players using abilities with the same names of those of the pet's. For example, if I had a growl Spelling setup for my Hunter, it was also showing on my Druid. I've fixed that. And I've also changed HITNAME so it comes out as '<no destination unit>' instead of just HITNAME.
revision100608e: Damn, I was rushing because I had things to do and I accidentally uploaded the wrong version. Here's the correction for that. Sorry!
revision100608d: I introduced a regression which once again allowed Spelling entries to fire for other players. Damn it. Sorry about that. This version should be good.
revision100608c: Changed the on/off in Spelling to a toggle, as that works better. And I've now got the help printout showing the enabled/disabled status. The conversion option has also been taken out of this version as likely everyone has converted their databases by now, and the option might prove confusing to those who don't know why it's there. The older versions that have it though will remain up for a while.
revision100608b: New option! You can now specify a spell by its ID instead of the name, to do this, use id:number instead of the name of the spell. So for example, where you might use mark of the wild, you'd use id:9885 instead. Both name and id can be used, it hasn't switched from one to the other.
revision100608: The last version did tighten up the progression from start to applied and passing source, but there was an instance where if someone nearby is casting the same spell as you, and they got it off before you, then their success would fire for you, even if your spell failed. That just wasn't good enough. So I looked over some LOGwut printouts to see if I could link anything... and I think I'm finally beginning to wrap my head around the whole flags malarkey. Now, it goes by ensuring that the source/dest flags match up. So it should be theoretically impossible for a Spelling to fire for another player. Or such is the hope.
revision090608b: I think I've got the bug pinned down where certain spells fire for other players aswell as yourself in this release.
revision090608: There was a bug where debug mode was being reset when it shouldn't have, I've hopefully fixed that. There was also an issue in the progression of output channels ('raid party say') because I was foolish and forgot to perform a simple removal on the string to make sure it wouldn't constantly call the first element again. I can't test the latter though at the moment, so consider that drycoded.
revision080608c: Quick fix for something that wouldn't break Spelling but could cause it to throw errors.
revision080608b: First, an apology. I realise that in the last release, I broke a few things (such as stopping Spelling firing for other people when it shouldn't, gathering HITNAME names and so on). This was because I was working on a framework for this release... so some of it was drycoded. That was a mistake. This new release though has been tested quite thouroughly, and it seems to be spiffy. Of course, with this new release existing users will have to convert their databases, and I apologise for that, too. I'm not very good at managing my mods, am I? Well, rather than apologise yet again... let's get to what's new. This new release allows players to specify states! So you can now explicitly tell Spelling when you want it to fire, and for different things. So yep, Spelling can now alert when a Sheep/Growl attempt fails, and neat stuff like that. Still, I do apologise for hte large amounts of fail in the last version, and in needing to convert for this one.
revision080608: I've added some channel handling to Spelling, so that more control over where the output goes is handed to the player. I always felt that the output might be a little stiff anyway, and this improves upon that by taking that unbending absolution away from the outputs. So a player can specify more than one output, as opposed to an absolution-based requirement where the text must be output in a certain place. Thanks go to lfd on the comments page for the suggestion!
revision070608b: This release adds PETNAME to the list of replaceable words, see the front page for details. It also has a bit of a rewrite for replacement word handling, this resolves any bugs that might've occurred from trying to use two replacement words together (which is never necessary, but it may get tried).
revision070608: This release fixes the issue where Mage food/drink spells (or any spells that fire SPELL_CREATE) will only work for the current session. Many thanks to lfd (of the comments page) for helping me to test this, as I don't have a high level Mage. This fix wouldn't have gotten in if not for that help.
revision060608: Spelling now has a debug system, check out the description on the front page to see how it works.
revision050608: So... many... logic... gates, and sheep jumping logic gates, polymorphed Tauren sheep! This is tainting my dreams! Ahem, this release adds the ability to use SOURCE, which is awesome...SOURCE. It's thanks to a comment made by a friendly poster on the comments page, and I do tend to listen to feature requests. I also actually used this release as an excuse to clean out some redundant gates I saw (type(spell) == "string" is checked early on, so the later instance of 'not spell' does not need to be there, little things like that).
revision040608: I worked so hard on this one! The bug with removing spellings (Spelling getting confused over what should be removed, or simply refusing to do it) has been fixed. The bug where spells which didn't require a target didn't do anything has been fixed. The bug which affected Spelling's ability to detect area of effect spells has been fixed. The bug where stuff like Moonfire would happen twice has been fixed. The bug where something might only trigger once in a battle and then not again until the end of the battle has... indeed, been fixed. The ability to enable/disable the mod has been added, the ability to wipe Spelling's database has been added, the ability for Spelling to distinguish properly between spells which have a destination or not (see the updated description) has been added. Due to important changes that had to be made to Spelling's storage system, any Spelling stored before this release will be cleared! Sorry! :< You might want to do a list in game and use something like Chatter to copy your stuff out before you upgrade to this version.
revision030608: Fixed the silly bug where sometimes it'd say such and such is being compared with a number, it was something that slipped in after the rewrite, something that i'd even remembered to account for in the first release. Oops! <.< Still, that issue shouldn't be seen any more.
revision020608: Second release, less spammy this time! The combat log event, unfiltered, is a most confusing and nebulous thing. 9.6 When does a spell have a destination? When is something spell damage or spell periodic damage? If it's periodic, why doesn't it have a source (the player)? If you apply a debuff on a mob, why does it only 70 per cent of the time list you as the source of that debuff? Why, why, why... aauuuugh. There are times when I just wish to go to Blizzard's HQ and hit anyone with an IDE open over the head repeatedly with an iron bar. I could have got out the easy way, claiming that Spelling wasn't meant to use those spells, that it's just for laugh... lol-ed it off. But I'm not like that! So yes... lots of work went into the logic checking of Spelling, it should now be good, and not spammy, for everyone!