24 Sep 2015 #2 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for LIVE

24 Sep 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for TEST
- Corrected the wwsCrashReportCheckForUploader_x offset and detour. :cred rswiders

23 Sep 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for LIVE

19 Sep 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for TEST
- fixed a compile error in CustomPopup when building isxeq. 

19 Sep 2015 by rswiders
- Updated autorun to allow for all toons instead of having to specify them individually.
  I did not change the /autorun command which is used to set the autorun value for the current
  toon.
  Eg., add ALL=<command> under [Autorun]
- Modified ground spawn detection to allow the value based on the actual zone.
- Updated pluginhandler to fix a timing issue with running zoned.cfg.

17 Sep 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for TEST
- DmgBonusType in the itemstruct has been renamed to ElementalFlag (because thats what it is)
- DmgBonusVal in the itemstruct has been renamed to ElementalDamage (because thats what it is)
  if you have plugins that refer to these make sure u rename as well.
- the size of the _AGGROINFO struct changed. Cred: demonstar55
- Added .Icon to the MQ2ItemType TLO
- Added Scroll to the mouseinfo struct. Thanks Brainiac,
- Fixed a crash in /windowstate that could happen when using a (bad) Custom UI. Thanks demonstar55
- since GetCombatAbilityTimer now accepts -1 as a timer, I have removed that check
  this means you should remove it from mq2melee as well for example:
  this line: if (EFFECT->CARecastTimerID && TYPE != AA && EFFECT->CARecastTimerID != -1)
  becomes this: if (EFFECT->CARecastTimerID!=0 && TYPE != AA)

26 Aug 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for TEST
- New feature: you can now search spawns by if they are aggresive or not
  for more info see this post by demonstar55 http://www.macroquest2.com/phpBB3/viewtopic.php?f=30&t=19813
- Added new command: /removepetbuff
  it will remove a pet buff by name or partial name.
  Usage: /removepetbuff Spirit of Wolf
  Feature requested by: standred
- New Commands: /popcustom and /popupecho
  for more info on these 2 commands see this post: http://www.macroquest2.com/phpBB3/viewtopic.php?f=30&t=15800&p=142608#p142608
  Cred: PMS
- Added new TLO member for the Character TLO: SpellInCooldown
  it returns TRUE if you have a spell in cooldown and FALSE when not.
  Cred:demonstar55 see this topic for more info: http://www.macroquest2.com/phpBB3/viewtopic.php?f=47&t=19689

21 Aug 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for TEST
- Updated for LIVE
- Made a few changes to how the zoned.cfg is processed
  hopefully that should fix a crash I have gotten reports about.
  *crossing fingers*

19 Aug 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for LIVE
- This is a heads up:
  In the near future I will restrict /target to a radius of 360
  I do this because its unreasonable to target stuff across zones.
  There is absolutely no scenario where you have a reason to target a mob
  until its within that range. So change your macros now if they do this.
  If you have line of sight to a mob there will be no radius restriction.

14 Aug 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for TEST

08 Aug 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for ninjapatch.
- Updated mkplugin.exe mkplugin.cpp and ISXEQ\PostBuild.bat with changes by D2U
  See http://www.macroquest2.com/phpBB3/viewtopic.php?f=30&t=19790
- Updated TelnetServer.cpp with changes by rmaxm
  See http://www.macroquest2.com/phpBB3/viewtopic.php?f=28&t=19793
- Updated the _LOOTITEM struct with addition by dewey2461
- Bugfix: ${Me.Inventory[someslot].Augs} now returns correct number of augslots the item has.
  example: /echo My gloves has ${Me.Inventory[Hands].Augs} augslots.
  NOTE: I dont know how this worked in the past, but this only counts how
  many augslots an item has, it doesnt check if there is actually an augment
  in the slot...
  Cred: Nytemyst for the report.
- Updated MQ2ItemDisplay.cpp with changes by dewey2461
  Added ${GearScore.UpgradeName}
  Added ${GearScore.UpgradeSlot}
  See http://www.macroquest2.com/phpBB3/viewtopic.php?f=30&t=19792

03 Aug 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Fixed a 10 year old bug where GetSpellDuration would use pCharSpawn (which can be a level 30 mount)
  instad of the correct pLocalPlayer (which is actually your characters spawn with correct level)
  the impact of this would be that spells that scale their duration by the level of the caster
  would return a shorter duartion when on a mount...
  example: doing /echo ${Spell[Enticer's Command].Duration.Minutes} on a level 105 enc would return 4 when on a mount and 7 when not
  bug report: Maskoi

24 Jul 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for todays TEST ninja patch
- Fixed a struct that would crash eq if mq2hud was used.
- same struct messed up keypresses as well...
- /mouseto is back... and thats all I have to say about that at 
   this point, more on this some other time.

23 Jul 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for todays LIVE ninja patch

2 Jul 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for todays LIVE client

21 Jul 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for the TEST client
- Fixed a bug with finding items in bags for the test build.

16 Jul 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for TEST build.
- Removed SetForegroundWindow from the FlashOnTells feature.
  (it was not working as intended when using ISBoxer)
  It will still flash the window.

15 Jul 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- New Command: /flashontells
  You can use it to turn flashing of the eq window on or off when you recieve a tell.
  Usage:
  You either do /flashontells [on|off] or just /flashontells for a toggle.
  Or just set it in MacroQuest.ini to FlashOnTells=1 in the [MacroQuest] section.
  NOTE: You have to have tell windows enabled in options for this to work.
- TimeStampChat, BeepOnTells and FlashOnTells are now default ON if no setting is found in MacroQuest.ini.

14 Jul 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Fixed a problem with combat abilities (thanks to William12 for the report)
  Before this change you could buy a rank 1 combatability, lets say Rest
  Then you bought Rest Rk. II
  At that point BOTH are saved in your combatabilities array...
  (I think thats a eq bug cause it sure isn't needed)
  Anyway... doing something like ${Spell[Rest].RankName}
  would then fail cause it would find "Rest" first...
  The fix is basically calling pCombatSkillsSelectWnd->ShouldDisplayThisSkill
   in every place NUM_COMBAT_ABILITIES is used...

06 Jul 2015 by rswiders
- Updated to include new currencies (Fists of Bayle, Arx Energy Crystals, Pieces of Eight)
- Fixed ${Me.AltCurrency} to be able to use Medals of Heroism not Marks of Heroism

01 Jul 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for the LIVE Client
- Updated for the TEST Client
- Fixed ${Me.Drunk}
- Fixed ${Me.Trader}
- Fixed ${Me.Buyer}

25 Jun 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for the TEST Client

18 Jun 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Fixed ${Me.UseAdvancedLooting} thanks to william12 for reporting it as broken.

17 Jun 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated for today's LIVE patch
- GetCombatAbilityTimer for the LIVE build now takes 2 arguments pSpell->CARecastTimerID and pSpell->SpellGroup
  do a search for GetCombatAbilityTimer in your plugins and change accordingly.

11 Jun 2015 by EqMule
- Updated for the TEST build
- GetCombatAbilityTimer for the TEST build now takes 2 arguments pSpell->CARecastTimerID and pSpell->SpellGroup
  do a search for GetCombatAbilityTimer in your plugins and change accordingly.
  GetCombatAbilityTimer for the LIVE build has not changed. (but it will next patch.)
- Clicking on the name of someone in the targetwindow will now open a trade if you have coin (or an item) on the cursor.

08 Jun 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Fixed /pickzone you can now do /pick 5 or whatever and it WILL send you to the 5 instance (if it exist)
  /pick 0 will just pick MAIN instance.

28 May 2015 by EqMule
- Please don't use MQ2 for unattended gameplay (afk botting)
- Updated LIVE build.
- Comming in next zip: /pickzone will take a instance number as an argument
  Usage: /pickzone 3 will pick instance 3 and zone you in (provided its valid)
  /pickzone 0 will select the main instance
  this might be buggy its a work in progress.
  NOTE: You should only use this in zones where /pickzone can be used.

23 May 2015 by EqMule
- Fixed ${Me.DSed} and ${Me.RevDSed} crashes thanks to klaarg for the bug report
- consolidated some other stuff and event related things

19 May 2015 by EqMule
- Updated for today's LIVE and BETA patches.

18 May 2015 by EqMule
- Added .NoDrop to the advlootitemtype tlo it returns TRUE if an item is NoDrop and FALSE if not.
  Usage: /echo ${AdvLoot.PList[1].NoDrop}
- Updated BETA build.

16 May 2015 by EqMule
- Updated TEST and BETA builds.
- Fixed an issue with the TEST build which prevented it from building correctly.
- Fixed a ctd in ${DisplayItem} if used after a /unload and reinject but no item displayed. reporter: rswiders
- Added ItemLink to the Item TLO it just prints the actual hexlink for an item (not clickable)
  this is useful for when creating hotbuttons with links in them manually...
  Usage: /echo ${Cursor.ItemLink}

15 May 2015 by rswiders
- Updated GetItemLink to return a clickable or non-clickable link based on a parameter.

13 May 2015 by EqMule
- Added .IconID to the AdvlootItemType TLO it returns an int - cred randyleo
  usage: /echo ${AdvLoot.PList[1].IconID}
- Added .UseAdvancedLooting to the character TLO it returns TRUE if advanced looting is turned on otherwise FALSE -cred maskoi
  Usage: /echo ${Me.UseAdvancedLooting}

12 May 2015 by rswiders
- Corrected GetSpellByID to return NULL when the spell is not found. (necessary to fix mq2cast, where it tries to cast
  an item that is not a clicky item and causes a CTD).

07 May 2015 by EqMule & demonstar55
- AltTimer in the _SKILL struct has been renamed to (the correct name) SkillCombatType (whatever that is...)
- Added .Stuck to the SpawnType TLO, i never seen it return TRUE, so more testing is needed...
- Added .PlayerState to the SpawnType TLO, it returns a mask as an inttype which has the following meaning:
  0=Idle 1=Open 2=WeaponSheathed 4=Aggressive 8=ForcedAggressive 0x10=InstrumentEquipped 0x20=Stunned
  0x40=PrimaryWeaponEquipped 0x80=SecondaryWeaponEquipped
  This too needs more testing.
- Added .Stunned to the spawntype TLO it returns TRUE or FALSE if a mob is stunned or not
  NOTE: .Stunned DID exist in the spawntype TLO before, but it only returned your character's Stunstate
  THIS MEANS IF YOU RELY ON THIS IN YOUR MACROS, use ${Me.Stunned} in your macros from now on instead
  when you need YOUR stunstate and the below examples when you need a SPAWNS stunstate, you have been warned...
  Usage: /echo ${Target.Stunned} or ${Spawn[npc somespawnname].Stunned}
- Added .Aggressive to the spawntype TLO it returns TRUE or FALSE if a mob is aggressive or not
- Cred .PlayerState and .Stuck: demonstar55
- Couple additions to /advloot
- /advloot shared # now accepts leave and giveto as arguments
  Usage:
  /advloot shared <#(index) or "item name"> giveto <name> <opt:qty> (qty is optional, if you leave it out it will give full stack)
  /advloot shared <#(index) or "item name"> leave
  Examples:
  Lets say there is a stack of 4 spiderling silks in the first list item of the shared lootwindow
  /advloot shared 1 giveto eqmule 1
  /advloot shared 1 giveto rswiders
  Will give 1 spiderling silks to eqmule
  Will give the remaining 3 spiderling silk to rswiders (we didnt specify qty, so it just gave the rest)
  /advloot shared "spiderling silk" leave
  Will just leave the first "spiderling silk" it finds in the shared list on the corpse...
  or /advloot shared 1 leave
  Will just leave whatever is in list index 1 in the shared list on the corpse... (in our example spiderling silk)

05 May 2015 by rswiders
- Fixed bug with Me.AltAbility where it would not identify alt abilities that were granted but have
  no cost associated.
- Updated ItemDB.txt with new summoned items.

02 May 2015 by rswiders
- Added .TankMercCount, .HealerMercCount, .MeleeMercCount, CasterMercCount to the Group TLO

30 Apr 2015 by rswiders
- Fixed crash in MQ2Map when zoning with a custom filter

29 Apr 2015 by eqmule
- Updated for the latest LIVE client
- Fixed /bzsrch command
  this means it works again...
  Usage Example: see this post: http://www.macroquest2.com/phpBB3/viewtopic.php?f=17&t=19699&p=169467#p169467
- Fixed a crash that would happen if you logged all the way into the game
  then all the way out to server select, and back in again
  and at that point tried to call GetSpellByName or any
  of the TLO's that calls it.
- Added a few more members to the AdvLoot TLO: all return TRUE or FALSE if checkbox is checked
  .AutoRoll .Need .Greed .No .AlwaysNeed .AlwaysGreed .Never
  Usage Example: /if (${AdvLoot.SList[1].Need}==TRUE) item 1 in the shared list has Need checked. 
- Added PWantCount and SWantCount which counts the number of items in each list that has a checkmark
  in any of the need and greed boxes.
  Usage Example: /echo /if (${AdvLoot.SCount} && ${AdvLoot.SWantCount}) /advloot shared set ${Me.Name}

24 Apr 2015 by rswiders
- Allow any case of NULL, TRUE, FALSE to be accurately calculated by our evaluation used in math.calc (and therefore
  in any IF condition.

23 Apr 2015 by rswiders
- Fixed missing ground spawn names on the map

23 Apr 2015 by eqmule
- Updated for the LIVE client dated Apr 22 2015 15:38:04

22 Apr 2015 by rswiders
- Added .MercenaryCount to the Group TLO

22 Apr 2015 by eqmule
- Updated for the latest LIVE client

21 Apr 2015 by rswiders
- Removed unnecessary CleanName useage, as DisplayedName already has the cleaned up name
- Added LocYXZ to spawntype TLO

18 Apr 2015 by eqmule
- /itemnotify "${FindItem[${spellname}].Name}" rightmouseup
  will now actually mem spells...

17 Apr 2015 by eqmule
- Fixed GroupNumber in the raid TLO
  This means : /echo ${Raid.Member[xxxx].Group} will work again.
- Added MasterLooter as a member to the Raid TLO
  Usage: /echo ${Raid.MasterLooter}

16 Apr 2015 by eqmule
- Updated for latest TEST Client
- /notify now takes address as an argument (useful when a window have nested children and you cant find it by name...)
  Usage: /notify ${Window[SomeWindow].FirstChild.FirstChild.Next.Address} leftmouseup
  Usage: /notify ${Window[SomeWindow].Next.Child[Alist].Address} listselect 2

15 Apr 2015 by eqmule
- Added a new TLO for AdvLoot, this is a first draft, test it, report bugs, and so on to me.
  I need a volunteer to update the wiki with this new TLO and its usage/members
  It has a few members SList,PList,SCount and PCount
  /echo ${AdvLoot.PList[1].Name}
  Output: [MQ2] Bone Chips
  /echo there are ${AdvLoot.PCount} items in the personal loot list
  Output: [MQ2] there are 3 items in the personal lootlist
  /echo the item in index 1 has a StackSize of ${AdvLoot.PList[1].StackSize}
  Output: [MQ2] the item in index 1 has a StackSize of 2
  Alright at this point we know the item in index one is a stack of 2 bone chips
  Now we can decide to do something about it:
  /advloot personal/shared 1 leave
  That will click the leave button...
  /advloot personal/shared 1 ag
  That will click the ag checkbox
  And so on...
  Finally you can do
  /advloot shared set Eqmule 
  Or whatever other group member or Never or Leave on corpse or 
  any of all the other choices in the combobox for shared loot and it will set it...
- Added Support for the 6th Augslot in all TLO's dealing with Augs
  Thanks to demonstar55 for reminding me.
- Fixed multiple bugs where CleanName was used to clean names directly on pointers we werent supposed to modify.
  Thanks to Ceedopey for reporting the bug.

31 Mar 2015 by eqmule
- Updated for the latest TEST client
- Updated for the latest LIVE client

30 Mar 2015 by eqmule
- Fixed CSidlScreenWnd__CalculateVSBRange_x offset

28 Mar 2015 by eqmule
- Updated for the latest TEST client
- Updated for the latest LIVE client

27 Mar 2015 by eqmule
- Updated for the latest TEST client
- Updated for the latest LIVE client
- Spell.Dar is back in its full glory (Dar means DamageAbsorbRemaining) -cred demonstar55
  This is useful.
- Spell.Counter is back in its full glory -cred demonstar55
  This is useful for getting for example poisioncounters.

25 Mar 2015 by eqmule
- Updated for the latest LIVE client patch
- Added MarkNpc and MasterLooter to the groupmember TLO
- Fixed a potential crash in case FreeInventory: - cred htw

25 Mar 2015 by rswiders
- Fix to /multiline command that would potentially cause incorrect parsing of the commands.

24 Mar 2015 by eqmule
- Fixed NewVardata cred: ctaylor22 
- Added a catch section to GetSpellByName to not try so hard to crash your eqgame(s)
- rswiders added a fix from the future.

22 Mar 2015 by eqmule
- Updated for the latest TEST Client patch

19 Mar 2015 by eqmule
- Updated for the latest TEST Client patch
- Fixed Group.MainTank and the other roles

16 Mar 2015 by EqMule
- Added a sanitycheck for GetSpellByName - cred htw
- Misc Fixes
- HAPPY 16th EQ!

12 Mar 2015 by rswiders
- Updated ${If[]} to allow one of two user-defined delimiters. The default delimiters are ',' and '~'.
  In the MacroQuest.ini file, you can change the delimiters using IfDelimiter and IfAltDelimiter values.

11 Mar 2015 by eqmule
- Updated for the latest TEST Client patch
- Updated for the latest LIVE Client patch
- Misc Fixes

07 Mar 2015 by eqmule
- Updated for the latest TEST Client patch
- the Alias TLO has been updated to be compatible with ISXEQ

04 Mar 2015 by eqmule & rswiders
- made a few changes to how GetSpellByName works
  from now on I placed all of the spelldb in a map.
  the main reason for this is so we can pick spells that best matches our class
  and if it doesnt , at least pick a spell that is class usable.
  if both of those selections fails, we will just revert to old pick, which is to select whichever spell comes first
  in the db...
  Using this map has made spell lookup between 20-200 times faster than before.
  If you are interested in testing this, add a QueryPerformanceCounter before and after
  the call and you will see this for yourself.
- this also fixes problems with getting correct spells for .RankName
- Misc Fixes & Code cleanup
- ${Zone[xxxxx] if xxxxx is larger than MAX_ZONES no longer crashes the client.
- .RankName now returns the input spell if there is no rank found or if the character you do the query on doesnt have the spell.

27 Feb 2015 by eqmule
- Updated for the latest TEST Client patch

25 Feb 2015 by eqmule
- Updated for the latest LIVE Client patch

23 Feb 2015 by eqmule
- Added .Instance to the character TLO
  Usage: /echo ${Me.Instance} will return a int representing the instance ID
- ${Zone.ID} should now return the correct zone id even for instances and neighborhoods.
  as well as campfire zone id's and so on...
- Misc Fixes
- Fixed GROUPMEMBER struct for the test build
  This should fix a crash reported by dogstar, thanks for the reports buddy!


20 Feb 2015 by eqmule
- Updated for test client patch
- Changed all qsort calls to std::sort -Cred demonstar55
- Fixed /who sort guild (has it ever worked?)
  it will display all non guilded players first then sort the rest by guild.
- Fixed a bug where unloading mq2 while the ProcessGameEvents detour was in use would crash the game...
  This means using /unload should be safer than ever now.
- Misc fixes -Cred Htw and uploaders of minidumps.

13 Feb 2015 by eqmule
- Updated for the Test Client patch.

10 Feb 2015 by eqmule
- Updated for the Live Client patch.

07 Feb 2015 by eqmule
- Updated for the Test Client patch.

06 Feb 2015 by eqmule
- Fixed Task.Timer , it can now be trusted even when the task window is closed.
  ALSO TAKE NOTE: it returns a TimeStampType from now on. (used to be a TicksType)

03 Feb 2015 by eqmule
- Added new TLO Alias - Code by Cr4zyb4rd
  see this post for more info: http://www.macroquest2.com/phpBB3/viewtopic.php?f=30&t=19240&p=167005&hilit=alias#p167005
- Added IsActiveAA to the Spell TLO
  Usage: /echo ${Spell[Origin].IsActiveAA}
  returns: TRUE since Origin is a "Active" AltAbility as opposite to a Passive ability.
- Fixed the EQMisc__GetActiveFavorCost_x offset how long has it been broken?
- Added some stuff to make ISXEQ compile

02 Feb 2015 by eqmule
 - Added .Expansion to the Me.AltAbillity TLO it returns a inttype
 - Added .Flags to the Me.AltAbillity TLO it returns a inttype
 - Added .Passive to the Me.AltAbillity TLO it returns a booltype TRUE if its a passive ability and false if its an active.
 - Added a check for plugin unloading to not try to unload plugins that has already been unloaded...
   not exactly sure if it will help, but im trying to mitigate a crash i have seen when doing /unload
   time will tell.
- Added pcpet and npcpet to searchspawn
  This means you can do stuff like /who pcpet and see a list of all pets that belong to players
  OR /who npcpet and you only see a list of pets that belong to NPCs
  OR /echo ${SpawnCount[npcpet]} to get a count of all npc pets in a zone...
  just specifying pet works as it always have and returns all pets... npc and pc owned...
  Idea: Nytemyst
- Added /mercswitch functionality it will now accept Healer, Damage Caster, Melee Damage and Tank as arguments
  usage: /mercswitch Damage Caster
  and it will switch your merc to the Damage Caster (if you have one and its not already active
  which brings us to:
- Added Mercenary.Index which returns your mercenary's Current list index
- Added Me.MercListInfo which is used in the following ways:
  usage1: /echo ${Me.MercListInfo[1]} returns whatever mercenary type is in Index 1 (there are max 7) as a string and it can be : Healer, Damage Caster, Melee Damage or Tank
  usage2: /echo ${Me.MercListInfo[Healer]} returns the index to the first Healer it finds... as a IntType or 0 if not found.
  This is new code, so there might be some changes to it in the future depending on feedback.

29 Jan 2015 by eqmule
- Updated for test client
- New Command (Idea Cred:brihua) /removeaura
  Usage: /removeaura someaura
  It will take partial auranames as well.
- Added ${Macro.CurLine} Idea:Maskoi
  It will tell you what line you are on in your macro
  usage: /if (${something}) /echo blah blah something happened on Line ${Macro.CurLine}
- Updated Instructions: .Equipment[x].ID doesnt exist, see example below:
  .Equipment in the Spawn TLO returns a inttype, it takes numbers 0-8 or names: head chest arms wrists hands legs feet primary offhand
  Usage: /if (${Pet.Equipment[primary]}==12507) /echo my pet is holding a Frightforged Ragesword in his primary hand
  Usage: /if (${Group.Member[mymagesname].Pet.Equipment[primary]}==12507) /echo my mages pet is holding a Frightforged Ragesword in his primary hand

24 Jan 2015 by rswiders
- Modified .RankName to handle spells and potions with the same name

23 Jan 2015 by eqmule
- Updated for today's live client patch

22 Jan 2015 by eqmule
- Removed a MacroError from the ini TLO (sigh)
- I need a vacation...

22 Jan 2015 by eqmule
- Fixed ${Ini (which I broke yesterday)
  It now reads sections and keys correctly again.
  Thanks for the reports.
- Fixed /alert clear #

21 Jan 2015 by eqmule
- Updated for live patch
- Made a change to the Ini TLO (Requester: TreeHuginDruid)
  it should be able to read Section names with commas in them now
  Let me know if this breaks any macros.

19 Jan 2015 by eqmule
- Updated for test server

18 Jan 2015 by eqmule
- Added a workaround for a wineq2 crash.
- Added CCustomMenu so we can create custom menus...
  This is still a work in progress and Ill have more
  to say about it in a later release.
- Stackchecks have been slightly modified to try to take higher level version override into account. -rswiders
  Report any issues with this on the forum.

15 Jan 2015 by rswiders
- added /break and /continue for /for loops.

14 Jan 2015 by eqmule
- Updated for test patch
- This is a pretty extensive patch, please do a FULL Rebuild.
- New Feature see: http://www.macroquest2.com/phpBB3/viewtopic.php?f=17&t=19610
  you can now have your pet attack a mob without having to target the mob first.
  Usage: /pet attack/qattack # where # is the spawnid of the mob u want the pet to attack
  Example: /pet attack ${Spawn[npc targetable los radius 200 range 1 20].ID}
- Changed the way crashreports are handled.
  You will get an option to break into debugger now.
  I also added some info to the crash detected messagebox
  that lets you know where you can find a copy of the crashdump.
  Not every crash is related to mq2, but if you have a call stack
  where you see mq2main.dll, mail the .dmp to me.
- Added .InInstance to the character TLO
  it returns true if you are in an instance.
  Credit: PeteSampras
- Added a line of code to prevent a ctd in chatwindow
- Added .Offline to the Group.Member TLO
  Usage: /echo ${Group.Member[x].Offline}
  will return a Bool TRUE if offline and FALSE if online
- Added .OtherZone to the Group.Member TLO
  Usage: /echo ${Group.Member[x].OtherZone}
  will return a Bool TRUE if online but in another zone and FALSE if online and in same zone as you.
- Added .AnyoneMissing to the Group TLO
  Usage: /echo ${Group.AnyoneMissing}
  returns TRUE if someone is missing in group, offline, in other zone or simply just dead...
- Rewrote /Alerts again, I wasn't happy with the last version
  lets see if this one is better.

31 Dec 2014 Happy New Year Edition by eqmule
- New Feature see: http://www.macroquest2.com/phpBB3/viewtopic.php?f=17&t=19608
  if you have an item on your cursor and click the name on the targetwindow
  a trade will be initiated and the tradewindow will open.
  Good for tradeing stuff quickly in crowded places like raids or guildhall
- Added a new argument to the /Alerts command [remove]
  it just removes an alert from a list
  Example: /Alert remove 1 npc los
  will remove a previously added alert from list 1 that has is alert on npc and los
  Also alerts are now in a std::list, let me know if there are any problems with this.
  I really hope this wont break any macros, cause code seems to execute a bit faster...

31 Dec 2014 by rswiders
- Updated spell stacking (stacks, stackspet, stackswith, willstack)
  Allow stacking of spells that have a greater effect over a lesser one. Used with damage absorption, spell haste, aggro multiplier.
  The change should not break anything existing as I have just put the triggered effects override in the stackswith/willstack code.
  Only updated the stackswith code, willstack is using the old code for comparison purposes. Once we determine the fix doesn't break
  anything, the willstack code will be converted to the new code.
- Added .Hour12 to Time TLO
  returns a string of the format ## AM/PM.
- Change: included "told you," in chat events.

29 Dec 2014 by eqmule
- Botauthors, you can stop summoning pet weapons when its not needed:
- Added .Primary and .Secondary to the Spawn TLO
  both return a inttype which is the idfile id for whatever the spawn is holding in his primary or secondary slot.
- Added .Equipment to the Spawn TLO
  it returns a inttype, it takes numbers 0-8 or names: head chest arms wrists hands legs feet primary offhand
  Usage: /if (${Pet.Equipment[primary]}==12507) /echo my pet is holding a Frightforged Ragesword in his primary hand
  Usage: /if (${Group.Member[mymagesname].Pet.Equipment[primary]}==12507) /echo my mages pet is holding a Frightforged Ragesword in his primary hand
- Change: spawn tlo member .Holding is now a booltype.
  it will return 0 of spawn is not holding anything and 1 if it is.
- BugFix: InitializeMQ2Commands is now called before InitializeMQ2Pulse so we wont end up with a race condition in HideDoCommand...
  the only reason this has worked mostly? fine the last 10 years or whenever it was added in this order
  is cause computers where slower back in the day...
  Anyway if the gCommandCS Critical Section is not initialized when used in HideDoCommand ( CAutoLock DoCommandLock(&gCommandCS);)
  we will hang... (Also changed EnterCriticalSection to a TryEnterCriticalSection, cause there is no reason to get stuck if its the same thread calling it, or is there?
  I'm prepared to revisit this topic if any weird problems arises, let me know...)
- Fix/New Feature: /notify QuantityWnd QTYW_slider newvalue # works now/again (did it ever?) Thanks to nytemyst for the report.
- /windows open now only returns actual open and visible windows.
  I dont know if we need to make an adjustment to this, lets see what people who use that command think.

27 Dec 2014 by rswiders
- Fix for /sellitem, the offset was wrong.

24 Dec 2014 Christmas Edition by Santa
- I finally managed to bring perfect LineOfSight to MQ2
  This means no more false positives... Ever...
  Now, poeple ask me, why did it take you 10 years to fix this when it was
  such a simple fix? Well, I actually had to write 1000 lines of code to know which 999 to throw away...
  Anyway Enjoy it, Please see:
  http://www.macroquest2.com/phpBB3/viewtopic.php?f=35&t=19601

  -Usage ${Target.LineOfSight} or ${LineOfSight[${Me.Y},${Me.X},${Me.Z}:${Target.Y},${Target.X},${Target.Z}]}
   Example: /echo there are ${SpawnCount[npc los radius 200 range 100 110]} mobs within a radius of 200 that i can see between level 100 and 110
   Ouptut there are 3 mobs within a radius of 200 that i can see between level 100 and 110

- Splitted ${Target.Malod} and ${Target.Tashed}
  Maloed only returns a spelltype if the mob actually has a resist debuff casted by a mage or a shaman
  and Tashed only returns a spelltype if the mob actually has a resist debuff casted by a enchanter.

11 Dec 2014 by eqmule
- Updated for patch
- /useitem now works for mounts in the mount key ring.
  Please see change message from the 09 Dec 2014
  for more info on this.

09 Dec 2014 by eqmule
- Added Feature:
  /useitem now works for mounts in the mount key ring.
  /useitem now accepts both quoted and unquoted arguments.
  /useitem now accepts partial arguments.
  Example: /useitem 1 0 or /useitem "Abyssal Steed" or /useitem Abyssal Steed or /useitem Abyssal
  NOTE: if you enclose the argument with quotes, it WILL expect that whats inside the quotes is
  an exact name, so /useitem "Abyssal" wont work, but /useitem Abyssal will...
  also, its not case sensitive, so /useitem abyssal will work as well.
- Added Feature:
  ${FindItem[blah blah]} now finds mounts that are in the mount keyring as well.
- Added MQ2MountType TLO for now it only have 2 members, Index and Name
  Usage: /echo ${Mount[1].Name}
  Outputs: [MQ2] Whirligig Flyer Control Device
  Usage: /echo ${Mount[2].Name}
  Outputs: [MQ2] Abyssal Steed
  Usage: /echo ${Mount[Abyssal Steed].Index}
  Outputs: [MQ2] 2

03 Dec 2014 by eqmule
- Updated for Test patch
- Fixed a problem with /setwintitle
  it wasnt checking for windowclass which would result in
  title not being set for the correct window at all times.

22 Nov 2014 by eqmule
- Added a fix (to a eqbug) which affects Target.Beneficial.
  the player buffs "leak" and shows up briefly in the target buff window
  you can see this if you make target buff window large enough.
  Of course the best fix would be if the eqdevs just made sure player buffs
  dont show up in the targetbuff window, but I dont know if they
  see this a bug or a feature, or even if they are aware.

19 Nov 2014 by eqmule
-Updated for patch
- Added Me.DSed and Me.RevDSed, both return a spelltype
  Usage:
  /if (${Bool[${Me.DSed.ID}]}==TRUE) {
		/echo I have a Damage Shield on its: ${Me.DSed}.
  }
  /if (${Bool[${Me.RevDSed.ID}]}==TRUE) {
		/echo I have a Reverse Damage Shield on its: ${Me.RevDSed}.
  }
- Changes since last zip where made to the following file(s):
	EQData.h
	eqgame.h
	EQUIStructs.h
	MQ2DataTypes.cpp
	MQ2DataTypes.h
	MQ2Utilities.h

13 Nov 2014 by eqmule
- Fixed QuestItem in the Iteminfo struct, it was off by four bytes.
- Added .Quest and .Expendable to the Item TLO.
  both return a pBoolType
  Usage:
  /echo ${FindItem[Drachnid Carapace].Quest}
  Outputs: [MQ2] TRUE
- Changes since last zip where made to the following file(s):
	EQData.h
	MQ2DataTypes.cpp
	MQ2DataTypes.h

12 Nov 2014 by eqmule
- Added Target.Beneficial, Target.DSed and Target.RevDSed
  they all return spelltype
  Usage:
  /if (${Bool[${Target.Beneficial.ID}]}==TRUE) {
		/echo need to debuff cause the target has ${Target.Beneficial} on.
  }
  /if (${Bool[${Target.DSed.ID}]}==TRUE) {
		/echo the target has a Damage Shield on its: ${Target.DSed}.
  }
  /if (${Bool[${Target.RevDSed.ID}]}==TRUE) {
		/echo the target has a Reverse Damage Shield on its: ${Target.RevDSed}.
  }
- Added Spell[somespell].Beneficial
  Usage:
  /echo ${Spell[Skin Like Wood].Beneficial}
  Outputs: TRUE
- Changes since last zip where made to the following file(s):
	MQ2DataTypes.cpp
	MQ2DataTypes.h
	MQ2Utilities.cpp

07 Nov 2014 by eqmule
- Fixed a few Buffer Overflow bugs in our somethingsomething(char* szFormat, ...) functions...
  was long overdue...
- Fixed /buyitem and /sellitem
- Changes since last zip where made to the following file(s):
	eqgame.h
	MQ2Commands.cpp
	MQ2DataVars.cpp
	MQ2PluginHandler.cpp
	MQ2Utilities.cpp

06 Nov 2014 by eqmule
- Changed NUM_BOOK_SLOTS to 0x320 (yes really this time)
  this will fix any problems with the charinfo2 struct...
- Changes since last zip where made to the following file(s):
	EQData.h

04 Nov 2014 by eqmule
- Changed NUM_BOOK_SLOTS to 0x320
  Thanks to woobs for reporting this bug
  This should also fix .RankName
  Thanks to Gnits for reporting that bug.

31 October 2014 by eqmule
- Added Heirloom, Collectible and NoDestroy to the Item TLO.
  They all return pBoolType.
  Been on my todo list forever, so it was long overdue.
- Changes since last zip where made to the following file(s):
	EQData.h
	EQUIStructs.h
	MQ2DataTypes.cpp
	MQ2DataTypes.h

30 October 2014 by eqmule
- Updated for the patch
- Changes since last zip where made to the following file(s):
	eqgame.h

29 October 2014 by eqmule
- Fixed an ISXEQ bug thanks to Kannkor for reporting it.
- Fixed Me.Shrouded thanks to dewey2461 for reporting it.
- Fixed Merchant.Item thanks to Fry for reporting it.
- Added Support for Test Server compile
- Changes since last zip where made to the following file(s):
	EQData.h
	EQUIStructs.h
	MQ2DataTypes.cpp
	MQ2DataTypes.h
	MQ2Main.h
	zipit.lst

28 October 2014 by eqmule
- Updated for the patch
- Fixed offset for __ProcessGameEvents_x
  I dont think there is much of a difference but it was
  pointing to __ProcessMouseEvent_x before this change
  I have no idea if that was intentional or not...
- Changes since last zip where made to the following file(s):
	EQData.h
	eqgame.h
	EQUIStructs.h
	MQ2Main.cpp
	MQ2Main.h
	MQ2DataTypes.cpp
	MQ2DataTypes.h
	MQ2Internal.h
	MQ2Benchmarks.cpp

15 October 2014 by eqmule
- Change: struct _MQBENCH Count member is now a ULONGLONG

01 October 2014 by eqmule
- Added .Endurance to the Item TLO it returns IntType
- Added .PctMana to the Spawn TLO it returns IntType
- Added .Zoning to the Character TLO it returns BoolType TRUE if Zoning FALSE if not.

27 September 2014 by eqmule
-Added support for beta server compile

26 September 2014 by eqmule
- Added a new member to the MQ2FloatType TLO: .Raw it returns a pIntType
  Usage: /echo My heading is: ${Me.Heading.Degrees.Raw.Hex} (${Me.Heading.Degrees})
  Outputs: [MQ2] My heading is: 0x43334C00 (179.30)
- The format for all .Hex members are now "0x%X" instead of "%x"
  Let me know if this has any adverse effects on your MQ2 usage.

19 September 2014 by eqmule
- Updated for the patch for the patch for the patch.
- Fixed a couple ISXEQ bugs, see post:
  http://www.macroquest2.com/phpBB3/viewtopic.php?f=48&t=19538
- Changes where made to the following file(s):
	EQData.h
	eqgame.h
	EQUIStructs.h
	MQ2ChatHook.cpp
	MQ2Template\ISXEQTemplate.cpp

17 September 2014 by eqmule
- Updated for the patch for the patch
- Changes where made to the following file(s):
	eqgame.h

17 September 2014 by eqmule
- Updated for the patch
- Support for the new alt currency "Noble" is hereby announced.
  (it was added on the 12th of Sep)
- Changes where made to the following file(s):
	EQData.h
	eqgame.h
	EQUIStructs.h

13 September 2014 by eqmule
- Fixed ${Me.Fellowship.CampfireZone.ShortName}
- Added BuffDuration to the Pet TLO, it returns a pTimeStampType
  Usage: /echo My pets haste will fade in ${Pet.BuffDuration[Hastening of Sviir Rk. II].TotalSeconds} seconds.
  Outputs: [MQ2] My pets haste will fade in 3200 seconds.
- Added support for getting Duration on Songs.
  See notes (below) from 12 September 2014 updates.

12 September 2014 by eqmule
- WARNING!!! MACRO BREAKING CHANGES!
- I have continued my effort to get a higher resolution on timers in MQ2...
  I just can't do them all at once cause it will
  wreak to much havoc in your macros...
- I have updated the following TLOs:
  MQ2TargetBuffType and MQ2BuffType
  The BuffDuration and Duration members.
  They NO longer return a pTicksType.
  Both return a pTimeStampType now.
  This means you can get a higher resolution since default return is milliseconds.
  BUT IT ALSO MEANS ALL MACROS THAT EXPECT TICKS WILL BREAK...
  So go through all you macros and search for ".Duration"
  and ".BuffDuration" and make sure they are working.
  Usage examples:
  /echo ${Target.Hasted.Duration.TotalSeconds}
  returns: 3668
  /echo ${Target.BuffDuration[Hastening of Sviir Rk. II].TotalSeconds}
  returns: 3537
  /echo ${Me.Buff[Hastening of Sviir Rk. II].Duration.TotalSeconds}
  returns: 3432
- Changes where made to the following file(s):
	EQData.h
	EQUIStructs.h
	MQ2DataTypes.cpp
	MQ2DataTypes.h
	MQ2Main.h
	MQ2Utilities.cpp

08 September 2014 by eqmule
- Added support for clicking Sell in barter window.
  Usage: /notify BarterSearchWnd BuyLineList listselect 2
         /notify BarterSearchWnd Sellbutton leftmouseup
- Added support for clicking Buy in bazaar window.
  Usage: /notify BazaarSearchWnd BZR_ItemList listselect 17
         /notify BazaarSearchWnd BZR_BuyButton leftmouseup
- Changes where made to the following file(s):
	MQ2Windows.cpp

25 August 2014 by eqmule
- Updated for patch.
- Added Malod and Tashed to the Target TLO
  they both return a pTargetBuffType TLO which has 3 members:
  Address (pIntType), Index (pIntType) and Duration (pTicksType).
  It also inherits pSpellType.
  This means that you can to stuff like:
  /if (${Bool[${Target.Tashed]}==TRUE) /echo ${Target.Tashed.Name} will fade in ${Target.Tashed.Duration.TotalSeconds}s
  [MQ2] Tashania will fade in 114s
 
21 Aug 2014 by eqmule
- Added .Slowed.Rooted.Mezzed.Snared and .Hasted to the Character TLO.
  it returns a pBuffType
	Usage: /echo ${Me.Snared}
	Output: [MQ2] Ensnare
- Changes where made to the following file(s):
	MQ2DataTypes.cpp
	MQ2DataTypes.h
	MQ2KeyBinds.cpp
	MQ2Main.h
	MQ2Utilities.cpp

20 August 2014 by eqmule
- Updated for patch.

05 August 2014 by eqmule
- Updated for patch.

30 July 2014 by eqmule
- Added MercID to the spawn TLO it returns an inttype
  if the spawn is player and has a merc up this is it's spawn ID
  Usage: /echo Eqmule has a merc up, it's a ${Spawn[${Spawn[=Eqmule].MercID}].Class} named ${Spawn[${Spawn[=Eqmule].MercID}].Name}
  Output: [MQ2] Eqmule has a merc up, it's a Cleric named kandrella_012345

- Added ContractorID to the spawn TLO it returns an inttype
  if the spawn is a merc this is its contractor's spawn ID
  Usage: /echo My target (${Target.Name}) is contracted by ${Spawn[${Target.ContractorID}].Name}
  Output: [MQ2] My target (kandrella_012345) is contracted by Eqmule

24 July 2014 by eqmule
- Attempting to fix charselect crashes when macros are running there.
- Changes where made to the following file(s):
	eqgame.h
	MQ2Commands.cpp
	MQ2Globals.cpp
	MQ2Globals.h
	MQ2Mouse.cpp

22 July 2014 by eqmule
- Fixed the CListWnd__Sort_x offset
- Changes where made to the following file(s):
	EQData.h
	eqgame.h
	MQ2DataTypes.cpp
	MQ2DataTypes.h
	MQ2KeyBinds.cpp
	MQ2Main.cpp

21 July 2014 by eqmule
- Added FirstFreeSlot to the Item TLO, it returns an Int.
  Usage:
  /echo ${FindItem[Spell Research Kit].FirstFreeSlot}
  [MQ2] 5
- Added SlotsUsedByItem to the Item TLO, it returns an Int.
  NOTE: it only works for containers and checks only each slot of the container
  this means you CAN have a stack of 100 water flask in slot 1 of the container
  it will still just return 1 cause it counts only how many slots that has "Water Flask"
  in them not the actual stacksize of the item.
  Usage:
  /echo My Spell Research Kit has ${FindItem[Spell Research Kit].SlotsUsedByItem[Water Flask]}} slots that has Water Flask(s) in them.
  [MQ2] My Spell Research Kit has 4 slots that has Water Flask(s) in them.

19 July 2014 by eqmule
- Fix for missing offset

18 July 2014 by eqmule
- Updated for friday night ninja patch...
- Added 2H Piercing to skill definitions.

16 July 2014 by eqmule
- Updated for patch
- NUM_SPELL_SETS is now 30
- /useitem now searches for items by exact name.
  Example: /useitem "Philter of the Wolf V"
  will uee that potion
  /useitem "Philter of the Wolf VI"
  will use that one...
  prior to this patch doing a /useitem "Philter of the Wolf VI"
  would use "Philter of the Wolf V" if it found that one first...

30 June 2014 by eqmule
- Added new command: /removebuff
  it will remove a buff or a song by name or partial name.
  Usage: /removebuff Summon Drogmor
- Added new command: /makemevisible
  it will make you visible.
  Usage: /makemevisible

26 June 2014 by eqmule
- Fixed MercAAExp,MercAAPoints and MercAAPointsSpent
  this means /echo ${Mercenary.AAPoints} works again.
- Added Leader to the Task TLO it returns a pStringType
  Usage: /echo The task leader is ${Task.Leader}
  Outputs: The task leader is eqmule

23 Jun 2014 by rswiders
- Corrected several CTD bugs when a character did not have anything in
  their bank and/or shared bank.

21 Jun 2014 by rswiders
- Fixed a bug with pMacroQuestType where pEverQuestType members wouldn't
  inherit correctly. All old ${MacroQuest.} members should work correctly
  now again.

20 Jun 2014 by eqmule
- Updated for patch
- Fixed a problem with writing plugins to MacroQuest.ini when ReadOnly.
  Bug Reported by: Xath
  See: http://www.macroquest2.com/phpBB3/viewtopic.php?f=47&t=19458

19 Jun 2014 by eqmule
- Added back Windows XP Support for GetTickCount64()
  Plugins should change all calls from GetTickCount64()
  to GetTickCount642() which detects if its on winxp
  and calls the old function instead of the new one.
  As a sidenote, if you are still using winxp, know that right this
  moment you have already been pwned and with 100% certainty you are part
  of someones botnet. If you are lucky they wont steal you eqlogin
  just use your computer to click ads or something...
- Fixed a bug with .RankName where two different spells
  can belong to same spellgroup.
  The solution was to compare by SpellGroup AND the spellname.
  Bug Reported by: MacQ
  See http://www.macroquest2.com/phpBB3/viewtopic.php?f=48&t=19455

18 Jun 2014 by eqmule
- Updated for patch.
- The Spell TLO member .RankName now works for combatabilities as well
  Example: /echo My version of Rest is: ${Spell[Rest].RankName}
  Outputs: [MQ2] My version of Rest is: Rest Rk. II

17 Jun 2014 by eqmule
- ${Me.PID} ha been moved to the EverQuest TLO
  so it is now ${EverQuest.PID}
- ${Me.WinTitle} has been moved to the EverQuest TLO
  so it is now ${EverQuest.WinTitle}
- New TLO: EverQuest - Cred: Cybertech
  it has basically the same members as the old MacroQuest TLO
  but I think most of them are more fitting under the EverQuest TLO.
  MacroQuest TLO will inherit EverQuest TLO so backward compatibility is maintained
  BUT new macros should use EverQuest instead.
- Added SpellGroup and SubSpellGroup to the Spell TLO
- Added RankName to the Spell TLO - Cred: petesampras,htw,maskoi
  it returns a pSpellType rather than a pStringType, but since default is the .Name
  and I think thats how most people will use it, its called "RankName"
  Usage: /echo I have the ${Spell[Certitude].RankName} version of Certitude its ID is: ${Spell[Certitude].RankName.ID}
  Output:
  [MQ2] I have the Certitude Rk. II version of Ceritude its ID is:
  Second example: Lets say you have Vinespur Rk. II in your spellbook (and memmed)
  then doing a /cast "${Spell[Vinespur].RankName}" in your macro will cast it, since its
  going to be resolved as /cast "Vinespur Rk. II"
  This should decrease the edititing of inifiles everytime you buy a new rank of a spell.

Friday the 13th!! (of June 2014 by eqmule)
- Added Rank to the Spell TLO, it returns a pIntType thats either 1, 2 or 3 for spells
  and 4-30 for clickys and potions. - Cred: petesampras
  This represents the spell rank, i.e a Rk. II Spell will return a 2.
  Usage: /echo ${Spell[Certitude Rk. II].Rank}
  Outputs: [MQ2] 2
- Added 3 new members to the Character TLO: (a while ago, just forgot to mention it.)
    ZoneBoundX, ZoneBoundY, ZoneBoundZ
	they return a pFloatType
- ${Me.Name}, ${Me.Surname} ${Me.Level} ${Me.ID} now works at charselect as well.
  There is no good reason to duplicate them, so from now on they are fetched from
  LocalPlayer instead since that one exist at charselect, but pCharInfo does not.
- Removed the follow since they are no longer in the client:
	TypeMember(GroupLeaderExp);
	TypeMember(RaidLeaderExp);
	TypeMember(GroupLeaderPoints);
	TypeMember(RaidLeaderPoints);
	TypeMember(PctGroupLeaderExp);
	TypeMember(PctRaidLeaderExp);

10 Jun 2014 by eqmule
- Since someone asked me this:
  -Q: Can you make the /setwintitle set it each time u zone?
  -A: Yes, create a file called zoned.cfg into your Release\Configs Folder
  and paste for example: /SetWinTitle EverQuest - ${Me.Name} (${Zone.ShortName})
  into it.
- Fixed a problem with Auras being detected as a Named spawn. Cred Maskoi.
- Fixed a bug in SearchSpawn where it would return Untargetable mobs
  even though the untargetable flag wasnt set.
  This means ${Spawn[npc radius 100]} wont return Arcane Distillect anymore,
  but ${Spawn[npc untargetable radius 100]} will. (if one is in radius)
- IsInGroup and IsInRaid now checks for Player's corpse as well as Player
  (as long as you specify [pccorpse] in the spawnsearch.)
  This means you can now do stuff like:
  /echo ${SpawnCount[pccorpse Group zradius 50 radius 110]}
  /echo ${SpawnCount[pccorpse Raid zradius 50 radius 110]}

09 Jun 2014 by eqmule
- Fixed? /while
  Feel free to test it and report any bugs.
- Added /GetWinTitle and /SetWinTitle Commands
- Added WinTitle to the Character TLO: it returns a pStringType
- Added PID (Process ID) to the Character TLO: it returns a pIntType
  Usage:
  /SetWinTitle [${EverQuest.PID}] EverQuest - ${Me.Name} (Lvl:${Me.Level} ${Me.Class})
  /echo ${EverQuest.WinTitle}
  [MQ2] [2319] EverQuest - Eqmule (Lvl:100 Shadow Knight)

01 Jun 2014 by eqmule
- Added three new MQ2Type(s): MQ2TimeStampType, MQ2Int64Type and MQ2DoubleType
  MQ2TimeStampType has the same submembers as pTicksType
  with the difference being that the default return value is milliseconds.

- MACRO-BREAKING CHANGE! (if your macro uses Me.GemTimer)
  Look, for years we relied on updating stuff every 6 seconds (1 tick)...
  I had to make this change since the client updates more often nowadays.
  Which is why:
  ${Me.GemTimer[x]} now returns a pTimeStamp.
  The default return is milliseconds until gem is refreshed.
  Usage Example: /echo ${Me.GemTimer[5].TotalSeconds}
  Outputs: [MQ2] 25

- All references to GetTickCount() have been replaced with GetTickCount64()
  This will fix problems related to all timers for people who dont do a complete
  shutdown of their computer earlier or on every 49.7th day.
  Plugin authors should replace all references to GetTickCount() in their plugins
  with GetTickCount64() as well.
- ${Macro.Runtime} now returns a pInt64Type to be able to hold the return of GetTickCount64
  if you are using ${Macro.Runtime} in your macro, make sure it works as intended. 

23 May 2014 by eqmule
- Fixed a fix...
  Sorry but I was in the middle of testing stuff yesterday and today they patched so
  in order to get everything out quick for x2 weekend
  I missed a bug in GetSpellByID, its fixed now (again)

23 May 2014 by eqmule
- Updated for patch

22 May 2014 by eqmule
- Secured a few functions that calls GetSpellByID against buffer overflows.

21 May 2014 by eqmule
- Updated for patch

15 May 2014 by eqmule
- Updated for patch

14 May 2014 by eqmule
- Updated for patch

12 May 2014 by eqmule
- Added nogroup to searchspawn - cred htw
  This means you can do stuff like /echo ${Bool[${NearestSpawn[1, nogroup pc radius 300]}]}
  it will return TRUE if there is at least 1 player within 300 radius of you thats NOT in your group.
- Added case Range: to ItemType

08 May 2014 by rswiders
- Update of SpellSlotInfo for SPA's 157 to format as a ranged value
- Added MaxBuffSlots, changed FreeBuffSlots to use the new function that gets the max buff slots

29 Apr 2014 by eqmule
- Updated for patch

26 Apr 2014 by eqmule
- If using an old ItemDB.txt you will now see a message asking you to update it.

24 Apr 2014 by rswiders
- Fix for reuse timer in spell slot information
- Fix for random CTD on some spell display
- Fix for CTD when item missing in ItemDB
- Added command /SpellSlotInfo [#|"spell name"]. You can use this to see the spell slot
  information for any spell without having to right-click display through the MQ2ItemDisplay plugin.
- Ground spawn updates

18 Apr 2014 by eqmule
- Fixed a bug in GetSpellByID that would make it return "Unknown Spell" when it 
  should just return 0
  This means macros like scribe.mac will work again.

16 Apr 2014 by eqmule
- Fixed the EQRAIDWINDOW struct
  This means caption classcolors for raidmembers will again work as intended.
- Changed how plugins are loaded from MacroQuest.ini
  I don't think this will affect anyone, but from now on
  when a plugin is unloaded the [Plugins] section will not be erased
  The old mq2plugin=mq2plugin is still valid, but eventually
  you will end up with a list of plugins where the entries
  will look like mq2plugin=1 or mq2plugin=0
  I did this because I'm preparing the loader for being able to unload/load
  plugins directly from its iconmenu.

13 Apr 2014 by rswiders
- Added GemIcon, HateGenerated, PvPCalc, Unknown182, Unknown222, Unknown223 to the SPELL struct
- Added HateGenerated to MQ2ItemDisplay output

11 Apr 2014 by rswiders
- Merged the MQ2GearScore logic into the base code for MQ2ItemDisplay. This means that MQ2GearScore
  is no longer necessary and MQ2Bzsrch will work correctly for those that want scores.
  In order to use the new functionality, rename your old ini file to MQ2ItemDisplay.ini to get all
  the same values. You can stop using MQ2GearScore and go back to use the base code MQ2ItemDisplay

10 Apr 2014 by rswiders
- Update of SpellSlotInfo for SPA's 124/125/132 to format as a ranged percent and specify that SPA 132
  is a # of tick(s)

08 Apr 2014 by rswiders
- Rewrite of SpellSlotInfo, uses new function ParseSpellEffect. Pass a pSpell structure, slot number,
  character buffer and it will return a character buffer with the spell effect information
- Fixed issue with MQ2ItemDisplay that would sometimes display the wrong usable classes

08 Apr 2014 by rswiders, eqmule
- Corrected datatype refactor to allow for correct type inheritence in MQ2 parser

08 Apr 2014 by eqmule
- Added MaxTargets to the SPELL struct
  This means we can check how many targets a spell will affect, 12 for example.
- Added SpellGroup to the SPELL struct
  This is used to display the spell family for the "Limit: SpellGroup"

06 Apr 2014 by rswiders
- Fixed issues with GetSpellNameByID and GetSpellbyID that would cause undefined results or CTD

05 Apr 2014 by eqmule
- Fixed a crash in GetSpellEffectName
- MacroQuest2.exe should work on windows 8.x now

04 Apr 2014 by eqmule
- Update for patch

02 Apr 2014 by rswiders
- TEMPORARY fix for C2065 compiler issue on vs2008

02 Apr 2014 by eqmule
- Update for patch
- MacroQuest.ini is now created (from the _default template) if it doesnt exist.
- The item and spelldisplay plugin should display more correct info now
  rswiders did most of that grunt work, big props to him for taking it on.
  We will carefully monitor this code and add more fixes as we go to make stacking
  and spell/iteminfo 100% perfect.

30 Mar 2014 by rswiders
- Added CreateMQ2NewsWindow for Macroquest.ini file to turn on/off the creation of
  the news window
- Updated stacking checking to ignore bard songs and song window illusions
- Removed the stat change portion of the additional checks for stacking introduced
  on 23 Mar 2014

30 Mar 2014 by eqmule
- Fixed /lootall
- Added Caster to the Spell TLO
  returns a pStringType of the caster of a buff
  Usage: /echo ${Target.Buff[Ancient Flames].Caster}
  [MQ2] eqmule

27 Mar 2014 by CyberTech
- Refactor datatype definitions for MQ2 and ISEQ code
    All datatypes are declared in one file (DataTypeList.h), one time, for both ISXEQ and MQ2.
    Inheritance and Persistence are defined at the same time and location.
    This will avoid the ISXEQ build breaking or falling behind when new datatypes are added to MQ2.
    Additionally, it simplifies the code required for a new MQ2 datatype -- 1 line of code instead of 4

26 Mar 2014 by eqmule
- Fixed Spell[some spell].Description
  it now returns the correct string.
- Added a Slowed,Rooted,Mezzed,Crippled,Snared and Hasted
  to the TargetType TLO.
  they all return a pTargetBuffType TLO which has 3 members:
  Address (pIntType), Index (pIntType) and Duration (pTicksType).
  It also inherits pSpellType.
  This means that you can to stuff like:
  /echo ${Target.Slowed.Name} will fade in ${Target.Slowed.Duration.TotalSeconds}s
  [MQ2] Tepid Deeds will fade in 114s
  /echo ${Target} will break mezz in ${Target.Mezzed.Duration.TotalSeconds}s
  [MQ2] a_pyre_beetle48 will break mezz in 66s

24 Mar 2014 by eqmule
- Added exact match option to spawn searches (Suggested by: petesampras)
 example: /echo ${Spawn[=eqmule]} will find eqmule but not eqmulee.
- Fixed GroupMemberTargeted (this means /target clear works again)
- Added new TLO Member 'Inviter' to the character TLO. (its a pStringType)
 You can check ${Me.Invited} to see if you have a
 group invitation so I figured it would be useful
 to know who actually sent the invite:
 Usage: /echo ${Me.Inviter} just invited me to join their group
 Output: [MQ2] uberplayer00 just invited me to join their group

23 Mar 2014 by rswiders
- Corrected itemdisplay to show useable classes for the spell when over level 70
- Corrected to make sure cfg files are executed during refresh injections
- Additional checks for spell stacking.
  (Buffs/Songs will stack (both land) if they are benefical spells and it's some type
  of stat change that was currently causing it to fail)

22 Mar 2014 by rswiders
- Corrected useable class name in itemdisplay extension.
- Additional updates for spell effects
- Updates for spell stacking. Added .StacksWith as an alias
  for .WillStack

22 Mar 2014 by eqmule
-NOTE, THIS UPDATE WILL BREAK PLUGINS. (but not that much see below)
 SPELL struct member Level is now ClassLevel
 this was done cause i want you to know which plugins to update.
 ANY place that refers to Level-1 muct be changed to ClassLevel
 do NOT forget to remove the -1
-Updated the launcher.
-Injecting is now faster, it will happen even when eq is not in focus.
 This means injecting will no longer attach to any process it feels like.
 it will only attach to eqgame.exe.
 This is a good thing, (cause it means you wont have to kill the tasktray icon)
 if you need to /unload to do a rebuild for example.
 Also, since mq2main only attaches to eqgame, launchpad will now
 run just fine without dying even when the tasktray icon is up...
 If you /unload you can "reload" from the tasktray icon by selecting
 "Refresh Injections"
 If you start a new session of eqgame.exe mq2main.dll will be autoinjected.
 "Refresh Injections" will only reattach to eqgame.exe(s) that doesn't already
 have a mq2main.dll loaded in its address-space. 
 If one is loaded already it will move on to the next eqgame.exe it finds and try there
 until it has made sure all running eqgame.exe has mq loaded...

18 Mar 2014 by rswiders
- Added CountSongs
- Changed .Stacks and .StacksPet to allow the comparison of the songs too
- Added MercType to the list of PlayerClasses
- Added the ability to allow custom offsets for those that need that (See the new privates files, MQ2Globals-private.cpp/.h)
- Added an actordef list to define the names for the various groundspawns.
  (If you find any missing (there are some), please post and they can be added.) Use "/items drop" to see
  the value that needs to be added. I removed the use of weapons.h and grounds.h. They were merged into
  the actordef list.
- Added some missing expansion names
- Added additional spelltype members (thanks PeteSampras)

18 Mar 2014 by eqmule
-IMPORTANT: MacroQuest.ini has been renamed to MacroQuest_default.ini
 I did this because I got tired of that unzipping would overwrite
 mine (which has custom settings in it) everytime there was a new zip.
 New Users that never run MacroQuest2.exe before
 SHOULD remove the _default extension on that file before they start MacroQues2.exe.
 (I want to make MacroQuest2.exe automatically do that at some point if no ini exist,
 but for now its a manual thing)
-Fixed a ctd when you did a /echo ${FindItemBankCount[blah]} with an empty shared bank...
-Fixed EQRAID struct (again)
-Added all known SPAs (458 of them), this means you should not get any more Unknown Spell Effects
 in the Spell Display. (You will get "Please Check" instead but thats for me
 so I know which ones I need to look closer at, dont worry about that for now.
-Added Spell restrictions as well to the spell display info - cred htw

-This is mainly a maintenance release, which means, it has code i am going to finetune later
 as well as some code that is now redundant and will be removed at a later point so we can avoid bloat.
 Hopefully releasing this now, will give those of you that maintain your own versions enough time
 to merge in the new stuff with your own builds before next patch...

-The Readme.chm file is back! (Click ReadMe on the macroquest2 icon...)
 it has compile instructions for VS 2012...

 more can be done to update other sections of it, but we need to start somewhere.
 contact me if you are interested in helping out with that.

16 Mar 2014 by eqmule
-Fixed EQRAIDMEMBER struct
 This means /echo ${Raid.Member[${Me}].Class} (and the likes) will work again.
-Fixed a bug with pRaidType where pSpawnType members wouldn't inherit correctly.
 This means things like /echo ${Raid.Member[${Me}].Race} will work properly (again)... (did it ever work?)

15 Mar 2014 by eqmule
-Fixed the EQRAID struct 
 This means, things like /echo ${Raid.Members} will work again.

13 Mar 2014 by eqmule
-Updated for patch
-Fixed a problem with MQ2Labels showing up as Unknown

12 Mar 2014 by eqmule
-Updated for patch
-The MQ2Type destructor is now virtual Cred: TypePun

09 Mar 2014 by eqmule
-Added Distance3D float member to the Switch TLO
-/click left item is back!! (in all its old days glory...)
 To use: first /itemtarget then /click left item
 Yes you can pick up stuff from the ground without facing it.
 Yes you can open a tradeskill container without facing it.
 BUT make sure you are in range. (20)
 Even though you do not have to be facing the item I still recommend
 you do a /face item (for appearances) before you issue a click left item...
 Please dont abuse this.

01 Mar 2014 by eqmule
-Fixed InvitedToGroup (it was in the wrong place in the struct)

26 Feb 2014 by eqmule
-Made some preparations for future updates related to Custom Help Windows
 Not a critical update unless you are a hardcore plugin author.

23 Feb 2014 by eqmule
-Corrected some offsets that where wrong.
 This should fix a couple ctd's reported on the forum (hopefully)
 Sorry about any downtime this may have caused to your crews...
-CampfireZone wont ctd in neigboirhoods or greater guild halls anymore
 however it wont return anything either until I figure out where that info is located.
-Updated /beepontells and /timestamp to take on AND off as arguments.
 no argument will just toggle, just like before this change.
 This is also saved to macroquest.ini from now on.

21 Feb 2014 by rswiders, eqmule
- Updated for patch

20 Feb 2014 by eqmule
-Fixed EQRAID struct 
 This means, things like /echo ${Raid.Members} will again work.

19 Feb 2014 by eqmule
-Updated for patch
-Added LoreGroup and LinkDBValue to CONTENTS struct
 It is used in the linkdb plugin. Cred: rswiders

-Added a new TLO Member for Song/Buff, HitCount which will return a pIntType of how many hits a song/buff has left before it fades.
 Usage /echo ${Me.Song[Lich Sting Recourse].HitCount}

-made some adjustments to /itemnotify
 Im not really finished with it, more testing is needed
 but now it can select items when merchantwindow is open.

 and /ctrl /itemnotify should pick up single items as well... *should*
 more to come on this, its complicated... I know the code looks like a complete mess
 but I will clean it up when I know exactly how I want it to work...

05 Feb 2014 by eqmule
-Changed /ini to work in the following way (see below), apperantly there was a bug in my understanding
 of how people wanted it to work.
//	/ini "someini.ini" "the section" "NULL" "NULL"
//	adds a key named NULL and a value named NULL under the [the section]:
//	to remove the key named NULL:
//	/ini "someini.ini" "the section" "NULL" NULL
//	OR /ini "someini.ini" "the section" "NULL"
//	to remove section "the section":
//	/ini "someini.ini" "the section" NULL
//	OR /ini "someini.ini" "the section"
//
//	Basically leaving the third and/or fourth parameter blank will be interpreted as NULL
//	enclosing NULL in quotes will interpret it as an actual string "NULL"

29 Jan 2014 by eqmule
-Fixed a bug in MQ2DataVars.cpp
 itemlinks now works as intended. (again)
-Added some support for ISXEQ and some new commands(/beepoontell,/timestamp) + a lineofsight code change
 cred: Red-One

28 Jan 2014 by eqmule
-Updated for patch

27 Jan 2014 by eqmule
-New Feature: /useitem "item name here"
-New Feature: /itemnotify "item name here" left/rightmouseup
 This means no more need to figure out which slot an item is in, as long as its in our inventory
 it will be "clicked".
 For obvious reasons, rightmouseup only works on clicky items...

-NOTE! MACRO AUTHORS:
Keeping with my modus operandi of "breaking things that are'nt fixed" (properly)
I have made changes to the following:
Macro breaking changes: (please dont panic, its easy to adjust)
1. TLO ${Me.XTarget[x].Type} is now ${Me.XTarget[x].TargetType}
 Reason: XTarget inherits Spawn and since that already contains a .Type member, it was necasary to change it.

2. Ok , so I noticed that everquest sometimes mark chat as SPAM
and in order to do that, they "tag" say,tell, and the rest of the chat if it orignates from another player.
This messes up our eventhandling, and I believe it has for several years.
So, its well overdue for a change, I am sorry about this though, cause this WILL
break some macros (and possibly plugins) that "fixes" this internally...
Here is an example of how a macro would deal with this:

#event healme "#1# says,#*#heal me#*#"

Sub Event_healme(line, Sender)
	/varset Sender ${Sender.Right[-2].Left[-1]}
	/if (${Sender.Equal[eqmule]}) {
		/echo eqmule needs a heal
		/varset healneeded 1
	}
/return

As you can see, unless we "strip" ${Sender} it will never be equal to "eqmule"
cause "eqmule" is actually "\x12\x31eqmule\x12"

Now, the fix for this obviously should be taken care of by core mq, and not your individial macros.
So I have done precicely that.
After building this version of mq, the new event should look like this instead:
Sub Event_tagged(line, Sender)
	/if (${Sender.Equal[eqmule]}) {
		/echo eqmule needs a heal
		/varset healneeded 1
	}
/return

Ok? questions? post on the forum, im releasing this version a month or so before next patch, 
so u should all have plently of time to adjust to this change.

22 Jan 2014 by eqmule
-Updated for patch

21 Jan 2014 by eqmule
-Added two new features
-New Command: /beepontells which is a toggle, can be set in MacroQuest.ini BeepOnTells=1 in the [MacroQuest] section.
 well... thats what it does, u get a tell... it beeps...
-New Command: /timestamp which is a toggle, can be set in MacroQuest.ini TimeStampChat=1 in the [MacroQuest] section.
 Basically it timestamps all chat when its on...
 NOTE: The timestamp takes place AFTER chatevents are handled, so at least in theory
 this should NOT have any adverse effects when turned on.

20 Jan 2014 by eqmule
-pinstCTaskWnd is back, dont know when it got lost...
-Added new TLO "Task" its useful for shared tasks(quests).
 it has the following members:
 -Title returns a pStringType of the shared task.
 -Timer returns a pTicksType of the amount of time left before task expires.
 -Members returns a pIntType of how many members the task has.
 -Member returns a pTaskMemberType
  pTaskMemberType has the following members:
  -Name returns a pStringType
  -Leader returns a pBoolType of TRUE or FALSE if the member is the task leader or not
  -Index returns a pIntType of the members taskindex, i.e where in the list it is... 1-6
Usage:
       /if (${Task.Member[Eqmule].Leader}) {
              /echo I am the leader of ${Task.Title} which expires in ${Task.Timer.TotalMinutes}...
	   }
	   /echo Task Member 2 is ${Task.Member[2]}
Output:
      [MQ2] I am the leader of Hatching a Plan which expires in 243 minutes...
      [MQ2] Task Member 2 is Eluidiaan

-XTarget now inherits pSpawnType
 this means that you can now do stuff like:
 /echo ${Me.XTarget[1].PctHPs}
 [MQ2] 93
 /echo ${Me.XTarget[8].Level}
 [MQ2] 16
 NOTE: max XTarget is 10... I dont think doing /echo ${Me.XTarget[11].Level} will turn out good for anyone...

 Please update ALL macros that targets mobs around you *when fighting* to check their HP to use XTarget[x].PctHPs instead.
 HINT: This is not a suggestion, its a very strong recommendation/borderline order.
 The reason for this is that:
 1. Targeting multiple mobs over and over just to check their HP, SLAMS the eq servers with targetpackets.
 2. It is BAD practice and it slows down YOUR macro, as well as the eq servers.
 3. For your own good, detecting botters are extremely easy by just watching how your character targets.
    no "real" player will target 50 mobs around him in a couple seconds, just to select the one with the lowest HP.

04 Jan 2014 by eqmule
-Added ActiveDisc to the Character TLO, it returns a pSpellType if a discipline is active. (otherwise NULL)

 usage: /if (${Me.ActiveDisc.ID}) {
			/echo Yes I am using a Discipline, and its ${Me.ActiveDisc.Name}, the spell id is ${Me.ActiveDisc.ID}
		}
 
02 Jan 2014 by eqmule

								HAPPY NEW YEAR!!!
We have had a good 2013, I expect to add some exciting new things as well as continue
work on updating and making MQ2 better and better this year.
Stay tuned, and thank you for all of your support!

-This is NOT a critical update (no need to update unless you really need the following:)
-Added GetCurrencyIDByName
-Added new Character TLO Member AltCurrency which returns a pIntType
 usage: /echo ${Me.AltCurrency[Marks of Valor]}
        /echo ${Me.AltCurrency[31]}
 Cred: desgn
-Added ZoneFlags to the pZoneType TLO, it returns a pIntType
-Added Category and Subcategory Members to the Spell TLO, they return pStringType
-Fixed a CTD in ${DisplayItem.StackSize}
-Added delete functionality to the /ini command
 usage: NULL required: http://www.macroquest2.com/phpBB3/viewtopic.php?t=12574&highlight=delete
       no NULL needed: http://www.macroquest2.com/phpBB3/viewtopic.php?f=28&t=18467

 Both approaches are valid and will work for backward compatability.

15 Dec 2013 by eqmule
-This is NOT a critical update (no need to update unless you really need the following:)
 I just added FindItemByID and renamed FindItem to FindItemByName
-Updated ${Mercenary.State} to return "NOMERC" if you dont have a merc.

-There is a /while command in right now (has been for a while -pun intended)
 I just wasnt ready to announce it earlier, look, this is extremely beta.
 IF you are gonna try it, you cannot expect it to work perfectly
 I basically only tried:
 /while (${Target.ID}) {
	/delay 1s <--- IMPORTANT
	/echo Hi there we have a target
 }
 You can NOT do:
 /while (something) /echo hi there
 
 right now it NEEDS the {} enclosure...
 and please unless you want your cpu to freak out... use a "/delay something" within that closure...
 see my example above (the <-- IMPORTANT)

11 Dec 2013 by eqmule
-Updated for patch
-Updated AltAdvManager::GetAltAbility with second parameter, I dont know what it is yet, rank? level?
-Fix for SpawnInfo->Trader and SpawnInfo->Buyer

06 Dec 2013 by eqmule
-Fixed void CTabWnd::SetPage(int,bool,bool);
(this means aapurchase and the likes works again...)
your're welcome...

05 Dec 2013 by eqmule
-Updated for patch

27 Nov 2013 by rswiders
-Added AAPointsAssigned to Me TLO

16 Nov 2013 by EqMule
-Fix for ${Target.AggroHolder} it now properly return Pets and Mercenary SpawnTypes as well as Players.
 There is still some work to do on this TLO, for example it wont return
 yourself, this is not intentional, its on my todo list.

-Added support for /itemnotify with bags closed for bank and shared bank as well.

-Fixed a bug where if you sent a /itemnotify in <pack> <slot> leftmouseup 
 and you had the item on a hotbutton, instead of picking it up, it would activate it.
 This means that from now on, if you issue a /itemnotify leftmouseup command... you can be 100% sure
 it WILL pick up the item, not activate it...

14 Nov 2013 by EqMule
-Updated for patch
-"/itemnotify in" changed to work even if bags are closed.
 example: /itemnotify in pack1 1 leftmouseup ( Will pick up the item in pack1 slot 1 even if the bag is closed...)

 Note: that this is pretty much untested right now, let me know of any issues.

10 Nov 2013 by rswiders
- added MaxLevel to Spell TLO
  the purpose was to allow autobot to get the max mezz level automatically
  and avoid hardcoding it in the macro itself.

07 Nov 2013 by EqMule
-Fix for Contents.Power
-Added a manifest to MacroQuest2.exe so it will requireAdmin automatically.
-Updated all visual studio vcxproj files to use the v110xp toolset.

its time for you guys to update to vs2012 sp3 or newer if you want to use the vs2012 .sln
For the rest of you, this shouldnt have an impact, just use old MacroQuest2.sln

as for the strcpy_s error, this is intentional, upgrade your visual studio to a version released after 2006.
you cannot use vs 6.0 anymore (unless you change them all back to strcpy)

06 Nov 2013 by EqMule
-Updated for patch
- Changed top #turbo to 80, still defaults to 20
-Brought back an old friend from the dead... /click left door
 You do not *HAVE* to face the door to "click" it but I still recommend that you do, your char doesn't need the attention...
Usage:
Sub OpenDoor
:retrydoortarget
	/doortarget DOOR1
	/delay 1
	/if (!${Switch.ID}) {
		/goto :retrydoortarget
	}
	/face door nolook
	/delay 1
:retryopendoor
	/if (!${Switch.Open}) {
		/click left door
		/delay 1s
		/goto :retryopendoor
	}
/return

29 Oct 2013 by EqMule
-Cast item works on items in bags now if you have VoA or higher expansion.
cred to desgn for code/suggestion

26 Oct 2013 by EqMule
-Added a new member to the Target TLO:
${Target.AggroHolder} it returns a pSpawnType of whoever your target is most angry with and currently attacking, 
i.e they guy that has the most aggro.
This can be used for ANY Target, you dont even have to have aggro yourself or even be in group with them.
You can run by someone fighting, select their target and this will return whoever its most angry with...
/echo ${Target.AggroHolder}
[MQ2] EqMule

***OK THE NEXT FIX "might" break some macros, BUT, this is how it is meant to work for consistency, so... deal with it please.***
-Fixed ${Group.Member[<thename>].PctAggro and ${Group.Member[x].PctAggro
/echo ${Group.Member[eqmule].Index}
[MQ2] 3			<-- im groupmember 3
/echo ${Group.Member[3].Name}
[MQ2] Eqmule	<-- see?
/echo ${Group.Member[3].PctAggro	<-- it works with the number
[MQ2] 54		<-- my aggro
/echo ${Group.Member[Eqmule].PctAggro	<-- as well as the name
[MQ2] 54		<-- my aggro

23 Oct 2013 by EqMule
-NOTE TO: Macroauthors, Macro breaking CHANGE!

 Look, to prepare for a PctAggro fix, I needed to make a change to how ${Group.Member[<TheName>]} works
 This will most likely BREAK some people macros
 BUT it is going to be consistant with how other TLO's work that deal with Names and so on.
 so in the end you will thank me for making this change.
 From Now On: ${Group.Member[<TheName>} returns a pGroupMemberType NOT a pIntType
 SO IF you need the Index of a GroupMember, I have added a new member called: Index
 Example of how it worked BEFORE THIS PATCH:
 /echo ${Group.Member[${Me.Name}]}
 [MQ2] 0
 Example of how it works AFTER THIS PATCH:
 /echo ${Group.Member[${Me.Name}]}
 [MQ2] Soandso
 BECAUSE the new type is a pGroupMemberType, it also inherits pSpawnType which is why you can also do:
 /echo ${Group.Member[${Me.Name}].Class}
 [MQ2] Wizard
 I hope you all can see the benefit of being able to directly access the pSpawnType in this way...
 But, to get back to the index:
 To actually get the index do a:
 /echo ${Group.Member[${Me.Name}].Index}
 [MQ2] 0

 We good?

21 Oct 2013 by EqMule
-Fixed ${Pet.Body.ID} and ${Mercenary.Body.ID} crashes (when no pet/mercenary was up)

20 Oct 2013 by EqMule
-Added Prestige to the Item TLO:
usage: /echo ${Cursor.Prestige} returns a pBoolType TRUE if its a Prestige item otherwise FALSE

19 Oct 2013 by EqMule
-Added Subscription to the Character TLO:
usage: /echo ${Me.Subscription} returns a pStringType "UNKNOWN","FREE","SILVER" or "GOLD"

15 Oct 2013 by EqMule
-Added EnduranceCost to the Spell TLO:
usage: /echo ${Spell[Malarian Mantle].EnduranceCost} returns a pIntType
-Added PctPower to Item TLO:
usage /echo ${Me.Inventory[powersource].PctPower} returns a pFloatType

14 Oct 2013 by EqMule
-Added 2 new Members to the Character TLO:
${Me.PctMercAAExp} which returns a float of the current percent of exp your mercenary has.
and
${Me.MercAAExp} which returns the actual pIntType

13 Oct 2013 by EqMule
-Fix For macros not loading...

13 Oct 2013 by EqMule
-Fix for ${Group.Member[x].Pet}

12 Oct 2013 by EqMule
-Added Support for CustomPlugins.ini
 it only have 2 sections and in the Macroquest Section only DebugSpewToFile is valid
 in the Plugins section you can add as many plugins as u like...
 /plugin unload on a custom plugin will unload it (as it should), but it will NOT write the change to the CustomPlugins.ini.
 That behaviour is by design. If you dont want a plugin to be loaded, you should manually remove it from the list.
 Example of what my CustomPlugins.ini looks like:
 [MacroQuest]
 DebugSpewToFile=1

 [Plugins]
 mq2AutoLogin=mq2AutoLogin

12 Oct 2013 by EqMule
-Fix for a crash in the "Clearing A Path" instance in Dead Hills
 this will most likely fix other instance crashes as well in the new zones.
 however i couldnt log in game to test, so report in bugs forum if u still crash
 when zoning in.

12 Oct 2013 by EqMule
-Fix for ${Me.Pet.Following} and ${Me.Mercenary.Following}
-Todo: Fix ${Me.Inventory[powersource].Power}

11 Oct 2013 by EqMule
-Removed PetTarget and PetCombat
-Added new TLO members for ${Me.Pet}
- Buff		example: /echo ${Me.Pet.Buff[1]} returns a pSpellType
			example: /echo ${Me.Pet.Buff[Spirit of Wolf]} returns a pIntType (The slot the buff is in)
- Combat	example: /echo ${Me.Pet.Combat} returns a pBoolType TRUE or FALSE (on/off)
- GHold		example: /echo ${Me.Pet.GHold} returns a pBoolType TRUE or FALSE (on/off)
- Hold		example: /echo ${Me.Pet.Hold} returns a pBoolType TRUE or FALSE (on/off)
- ReGroup	example: /echo ${Me.Pet.ReGroup} returns a pBoolType TRUE or FALSE (on/off)
- Stance	example: /echo ${Me.Pet.Stance} returns a pStringType "FOLLOW" or "GUARD"
- Stop		example: /echo ${Me.Pet.Stop} returns a pBoolType TRUE or FALSE (on/off)
- Target	example: /echo ${Me.Pet.Target} returns a pSpawnType of the pets current target
- Taunt		example: /echo ${Me.Pet.Taunt} returns a pBoolType TRUE or FALSE (on/off)

10 Oct 2013 by EqMule
-Updated for patch
-Added new TLO ${Mercenary}
It returns a SpawnType so you have access to all spawnmembers.
As well as these four new ones:
${Mercenary.State} (stringtype) which returns strings: "DEAD" "SUSPENDED" "ACTIVE" or "UNKNOWN";
${Mercenary.StateID} (int) which returns the state as a number (mostly good for debugging)
${Mercenary.Stance} (stringtype) which return the Stance as a string
${Mercenary.AAPoints} (int) returns how many unspent mercenary AA you have.
I Plan to add more stuff later if needed. Those are the most useful for now...

09 Oct 2013 by EqMule
-Fix for Bank and SharedBank members in CHARINFO struct
(thanks to Drakhhen for making me aware of this bug)

08 Oct 2013 by EqMule
- Updated for Oct 7-8 2013 patch
- Shared Bank now has 4 slots
- I will add a TLO for the new mercenary AA
 but I need more time to look into it, unless someone beats me to it.
 For now use the UI...
- Added a couple new TLO's
 /echo ${Me.PetTarget}
 will return the spawn your pet has targeted.
 so you can do /echo ${Me.PetTarget.ID} and so on to get more info out... 
- /echo ${Me.PetCombat}
 is the pet attacking something? 
 returns TRUE or FALSE 

Im pretty sure these 2 can use some more work, but should work in most situations I think...

22 Sep 2013 by EqMule
- Added Me.ZoneBound which returns Zone information for the zone you are bound in
  Usage:
	/if (${Zone.ID}==${Me.ZoneBound.ID}) {
		/echo crap im back at bindpoint, did I die?
	}
18 Sep 2013 by EqMule
- Updated for patch
21 Aug 2013 by EqMule
- Updated for patch
18 July 2013 by EqMule
- Added support for /useitem
  Example: /useitem ${FindItem[=worn totem].ItemSlot} ${FindItem[=worn totem].ItemSlot2}
  Note: you need VOA expansion or newer for /useitem to work, its a soe, not an mq2 command
- Fixed listselect *
	Example: /notify MMTW_MerchantWnd SubtypeListBox listselect 10
			 Will select the Tier V Healer listitem in the Mercenary Merchant Window.
	
	*listselect wasnt able to actually "select" items, it only "highlighted" them prior to this fix.
17 July 2013 by EqMule
- Added comboselect*
	Example: /notify MMTW_MerchantWnd TypeComboBox comboselect 2
			 Will select Journeyman Mercenaries in the Mercenary Merchant Window.
	
	*listselect still works when you just need to "set" an item in a combobox
	but when you want it to actually do the "select" use comboselect.

16 July 2013 by EqMule
- Updated for Jul 16 patch
- Added Item.Damage (thanks to nod77)
- Added new TLO GetCurSel (thanks to Dewey2461) see http://www.macroquest2.com/phpBB3/viewtopic.php?f=30&t=18947
- report bugs to me on irc or on the forum

22 June 2013 by ieatacid
- Fixed window.Enabled

20 June 2013 by EqMule, ieatacid
- Updated for Jun 19th patch

2 June 2013 by ieatacid
- MacroQuest.GameState now returns 'PRECHARSELECT' when applicable

17 May 2013 by EqMule, ieatacid
- Updated for May 14th patch

21 April 2013 by ieatacid
- MQ2Map fixed

21 April 2013 by ieatacid, EqMule
- Updated for April 17th patch

21 March 2013 by ieatacid
- Fixed keybind issues (?)

16 March 2013 by ieatacid
- Updated for March 13th/14th patch

16 February 2013 by ieatacid
- Updated for Feb. 13th/14th patch

20 January 2013 by ieatacid
- Fixed _CXWND.pParentWindow crash
- Fixed MQ2ItemDisplay crash

19 January 2013 by ieatacid
- Fixed MQ2ItemDisplay
- Fix corpse crashes
- Fixed a couple inventory struct members that were off -- item.stack and some others should work correctly now
- Fixed Me.Pet

18 January 2013 by ieatacid
- Updated for January 16/17 patch

4 January 2013 by ieatacid
- Fixed _ITEMINFO.Clairvoyance
- Fixed HasExpansion function

24 December 2012 by ieatacid
- MQ2ItemDisplay: fixed duplicate spell data being displayed

13 December 2012 by ieatacid
- Updated for December 12th patch
- FIXED OLD COMPILER WARNINGS

9 December 2012 by ieatacid
- Added ability to check if your account has a specific expansion enabled
... bool character.HaveExpansion[n]: Check if you have an expansion by number
... bool character.HaveExpansion[name]: Check if you have an expansion by name (full name not abbreviation)
... Added function for checking expansion availability. See HasExpansion function in MQ2Utilities.cpp for more info
- Added access to aggro data
... int character.PctAggro: Your aggro percentage
... int character.SecondaryPctAggro: Secondary aggro percentage
... spawn character.SecondaryAggroPlayer: spawninfo for secondary aggro player
... spawn character.AggroLock: spawninfo for aggro lock player
... int target.PctAggro: target's aggro percentage on you (same as character.PctAggro)
... int target.SecondaryPctAggro: target's secondary aggro percent (same as character.SecondaryPctAggro)
... spawn target.SecondaryAggroPlayer: spawninfo for target's secondary aggro player (same as character.SecondaryAggroPlayer)
... int groupmember.PctAggro: group member's aggro percentage
... int xtarget.PctAggro: xtarget's aggro percentage

3 December 2012 by ieatacid
- Fixed MQ2Bzsrch.  bazaaritem.Value has been removed because it's no longer sent with the item data

29 November 2012 by ieatacid
- Fixed alternate ability bug
- Fixed Me.CombatState
- MQ2Bzsrch is still broken, don't load it

28 November 2012 by ieatacid
- Updated for today's patch

23 November 2012 by ieatacid
- Fixed MQ2FPS (it once again stops rendering)

15 November 2012 by ieatacid
- Fixed custom chat channel join/leave messages not firing

12 November 2012 by ieatacid
- Fixed UI crashes

10 November 2012 by ieatacid
- Fixed alt ability bug

9 November 2012 by ieatacid
- Updated for November 7th patch
- Due to the introduction of ASLR into the client, offset names in eqgame.h have been changed as it was the easiest route to take in adapting the code base
- A function has been added to MQ2Inlines.h for plugins that need to adjust their own offsets for ASLR: DWORD FixOffset(DWORD nOffset);
... It takes the offset as a parameter and returns the recalculated offset

18 September 2012 by ieatacid
- Updated for patch on the 16th

25 September 2012 by ieatacid
- Updated for patch

19 September 2012 by ieatacid
- Updated for patch

16 August 2012 by ieatacid
- Updated for patch

19 July 2012 by dkaa, ieatacid
- Updated for patch

27 June 2012 by ieatacid
- Updated for patch

13 April 2012 by ieatacid
- Updated for patch

31a March 2012 by dkaa
-- Fixed DeleteAll, which was crashing MQ2Tracking...

31 March 2012 by dkaa
-- Fixed MyTradeReady, etc
-- Fixed various window crashes
-- Broke all the plugins that create their own window.  While consolidating some code, I ran into the problem that Show is both member data and function.  Do the data member changed to dShow, which means plugins like MQ2BagWnd have to change too.

23 March 2012 by ieatacid, dkaa
- Updated for March 22nd patch
- Added mapfilter TargetPath
... when enabled, right-clicking a spawn on the map will make it your target and draw a path to it on the map and in the world
... off by default

03 February 2012 by dkaa
- Kill launchpad if we are injected.  Launchpad is snooping into all processes.

15 January 2012 by dkaa
- Updated to fix /lootall

17 December 2011 by ieatacid
- Updated for today's patch

15 December 2011 by ieatacid
- Fixed spell manager crash

14 December 2011 by ieatacid
- Updated for today's patch

23 November 2011 by ieatacid
- Fixed _EQINVSLOTWND struct
- Added Me.GemTimer to retrieve the refresh time on spell gems, returns ticks type

18 November 2011 by ieatacid
- Updated for November 15th patch

11 October 2011 by ieatacid
- Fixed Me.TributeTimer

15 September 2011 by ieatacid
- Updated for today's patch

19 August 2011 by ieatacid
- Fixed some campfire stuff

30 June 2011 by ieatacid, dkaa
- Updated for today's patch

28 April 2011 by dkaa
- updated for the patch

20 April 2011 by dkaa
- fix for XTarget -- thanks, drkrain

19 April 2011 by dkaa
- added Me.SkillCap

14 April 2011 by ieatacid
- Updated for April 13th patch

6 April 2011 by ieatacid
- Added Me.MercenaryStance -- returns current active mercenary stance as a string, default is NULL

23 March 2011 by dkaa
- Fixed GetSTMLText -- you need the new eqbcs
- Fixed SetSTMLText -- you need the new eqbcs
- Fixed AppendSTMLText -- you need the new eqbcs
- Added a constant for the chat font offset so the /bcfont will work again
- Added the class CXStr &  CXStr::operator=(class CXStr const &) offset.
- This is all brainiac's fault.

17 March 2011 by dkaa
-  Jaysus, a patch on Paddy's day.

9 March 2011 by ieatacid
- Updated for today's patch

5 March 2011 by dkaa
- Fixed window.Enabled

19 February 2011 by ieatacid
- Me.Aura now returns the effect name as a string instead of a spell type.  If you need access to the spell data, look it up using the Spell TLO

17 February 2011 by ieatacid
- Updated for today's patch

15 February 2011 by dkaa
- fixed NoDrop again

13 February 2011 by ieatacid
- Fixed item.NoDrop
- Me.Aura now returns the name of the effect in the aura window if it can't find the matching spell
- _FELLOWSHIPINFO fix (thanks, Drakhhen)
- Fixed CListWnd::DeleteAll function offset (thanks, brainiac)

12 February 2011 by ieatacid, dkaa
- Updated for February 9th and 11th patches

16 January 2011 by dkaa
- Fixed IsNamed for some of the newer zone.  Thanks, el_nene.

16 January 2011 by ieatacid
- Fixed spawn.Levitate
- Fixed Me.FreeInventory

13 January 2011 by ieatacid
- Updated for today's patch

8 December 2010 by ieatacid
- Updated for today's patch

7 December 2010 by ieatacid
- Fixed "/click left" crash

4 December 2010 by ieatacid
- Added Me.Haste which reports total haste as it appears in the stats tab of the inventory window
- Changed EQ_Character::DoCombatAbility to return bool instead of void, as it is in the client

16 November 2010 by ieatacid
- Fixed for Me.FreeInventory

10 November 2010 by ieatacid
- Updated for today's patch

9 November 2010 by ieatacid
- Fixed /lootall crash

5 November 2010 by dkaa
- Fixed RightClickedOnPlayer
- Fixed item.Stacks, item.FreeStacks, and item.StackCount

1 November 2010 by ieatacid
- Fixed GetFullZone and GetShortZone crashes

29 October 2010 by dkaa
- Fixed SelectedItem and some crashes

26 October 2010 by ieatacid
- Updated for today's patch

23 October 2010 by dkaa
- Fixed the loot window and looting

22 October 2010 by dkaa
- Fixed the VC6 compile issue.
- Fixed some crashes.
- Fixed FindItem so it returns the correct slot.

21 October 2010 by ieatacid, dkaa
- Updated for today's patch
- Bug fixes and code changes for the October 16th patch

16 October 2010 by ieatacid, dkaa
- Updated for October 12th patch

15 September 2010 by ieatacid, dkaa
- Updated for today's patch

8 September 2010 by ieatacid, dkaa
- Updated for today's patch

18 August 2010 by ieatacid
- Updated for today's patch

29 July 2010 by dkaa
- Fixed a problem with Dar.  Thanks, Minymezz

28 July 2010 by ieatacid
- Updated for today's patch
- Adjusted /doability to look for your abilities in a similar way the client does, further eliminating it relying on abilities being mapped to action window buttons

14 July 2010 by ieatacid, dkaa
- Updated for today's patch

9 June 2010 by ieatacid
- Updated for today's patch

13 May 2010 by dkaa
- made the chat window history a constant to promote harmony

13 May 2010 by ieatacid
- Updated for today's patch
- Fixed Me.Dar and Me.Buff.Dar

12 May 2010 by ieatacid
- Updated for today's patch

10 May 2010 by ieatacid
- Fixed the 'listselect' window notification so you no longer need to 'leftmouse' and 'leftmouseup' after. Macros will need to be adjusted accordingly

14 April 2010 by ieatacid
- Updated for today's patch

10 March 2010 by ieatacid
- Updated for today's patch

13 January 2010 by ieatacid
- Updated for today's patch

7 January 2010 by dkaa
- Fixed the buff count to 30, song count to 20

24 December 2009 by ieatacid
- Added Me.XTarget.  See wiki for details: http://www.macroquest2.com/wiki/index.php/DataType:xtarget

18 December 2009 by rswiders
- Updated for today's patch

15 December 2009 by rswiders
- Updated for today's patch

14 December 2009 by dkaa
- Fix for AltAblity and Underfoot

8 December 2009 by ieatacid, rswiders
- Updated for today's patch

19 November 2009 by ieatacid
- Updated for today's patch

18 November 2009 by dkaa
- added npccorpse and pccorpse to the spawn search filters

14 November 2009 by ieatacid
- Fix for EQMERCHWINDOW struct which will fix various things that reference it

14 November 2009 by dkaa
- Fix for labels -- added CLABELWND which is not, in fact, a CSIDLWND

13 November 2009 by dkaa
- Fix for inventory problems (corrected InvSlotWnd)

12 November 2009 by ieatacid, dkaa, rswiders
- Updated for November 11th patch

21 October 2009 by ieatacid
- Updated for today's patch

8 October 2009 by ieatacid
- Updated for today's patch

21 September 2009 by ieatacid
- FindItemCount TLO now searches for augs on items

15 September 2009 by rswiders
- Updated for today's patch

6 September 2009 by dkaa
- added el_nene's FromData changes

6 September 2009 by ieatacid
- Added spawn.Following which returns the spawn that a player is /following, or your pet's target

31 August 2009 by ieatacid
- Fixed _SPELL struct that changed in July
- Changed GAMESTATE_PRECHARSELECT from '6' to '-1'

19 August 2009 by ieatacid
- Updated offsets for today's patch

17 August 2009 by ieatacid
- Mouse_Aux3, Mouse_Aux4, Mouse_Aux5 added to dikeys.h

16 August 2009 by ieatacid
- Added mouse buttons to dikeys.h (Mouse_Mid, Mouse_Aux1, Mouse_Aux2).  This should let you /bind them now and eliminate associated crashes

14 August 2009 by pms
- fix for shownames
  http://www.macroquest2.com/phpBB2/viewtopic.php?t=16365

14 August 2009 by brainiac, dkaa
- Updated for the 08/12 patch

15 July 2009 by rswiders
- Updated for today's patch

14 July 2009 by rswiders
- Changed NUM_SPELL_GEMS to reflect the additional 2 added by the devs.

3 July 2009 by ieatacid
- Fixed /loadspells and other functions that rely on the _SPELLFAVORITE struct
- Updated MQ2ItemDisplay -- it now shows our extra item info when the modified/unmodified button is pressed (thanks pms for the idea)

29 June 2009 by ieatacid
- gGameState now gets set correctly when camping to desktop or server-select screen

24 June 2009 by ieatacid
- Reverted changes to CleanUI detour to fix MQ2ChatWnd crash when reloading the UI
- Changed tooltip handling in MQItemdisplay to work more efficiently and fix a bug with the left ear slot

24 June 2009 by rswiders
- Updated for today's patch

21 June 2009 by ieatacid
- Fixed suffix display bug in captions (the error was in _SPAWNINFO)

20 June 2009 by rswiders
- Backed out bug fix for MQ captions.
- Generate correct gGameState when camping (server/desktop).  This should fix random crashes in plugins when they think they are still "INGAME" but are really at server select screen.

18 June 2009 by rswiders, ieatacid
- Updated for today's patch
- Added NUM_BUFF_SLOTS to handle the everchanging number of buffs in the target and pet windows.

17 June 2009 by rswiders
- Added the command history functionality to MQ2ChatWnd (thanks PMS)

15 June 2009 by dkaa
- Fixed bug NoDrop on items on FV and other special servers

15 June 2009 by rswiders
- Fixed bug with flashing MQ captions.
- Fixed bug with tooltips.  If you had a clicky item equipped in the left ear, the target window (and possibly others) would show tooltips baseed on "item name(ready)" instead of "buff name (time remaining)".
- Added filtering of macro ended messages.
- Added additional functionality to MQ2ChatWnd (thanks PMS)
   The window will redraw right away when you reload your UI in game, rather than waiting for the first text output request to recreate itself. 
   AutoScroll - on by default/normal behavior 
   NoCharSelect - off by default/normal behavior 
   SaveByChar - on by default/normal behavior 

12 June 2009 by rswiders
- Updated for today's patch

11 June 2009 by ieatacid
- Fixed /unload crash on Windows 7 (and Vista?)

11 June 2009 by rswiders, dkaa
- Fixed target.buff

10 June 2009 by ieatacid, rswiders
- Updated for today's patch

21 May 2009 by rswiders
- Updated for today's patch

15 May 2009 by ieatacid, dkaa
- Fixed guild struct and related functions
- Fixed pet window struct
- Removed MAX_GUILDS as it is no longer used

14 May 2009 by rswiders
- Updated for today's patch

6 May 2009 by ieatacid
- Added spawn.Owner which returns a spawn type for a mercenary's owner

26 April 2009 by ieatacid
- Fixed group role issues

08 April 2009 by ieatacid
- TOTAL_SPELL_COUNT fix

07 April 2009 by rswiders, dkaa, ieatacid
- Updated for today's patch

29 March 2009 by ieatacid
- Added Me.Mercenary which returns one of the following: SUSPEND, ACTIVE, NULL, UNKNOWN

21 March 2009 by ieatacid
- Me.CombatAbilityTimer and Me.CombatAbilityReady should now function correctly

19 March 2009 by rswiders
- Updated for today's patch

15 March 2009 by ieatacid
- Fix for active leadership abilities
- Fix for GetCombatAbilityTimer crash (dkaa)

12 March 2009 by ieatacid, rswiders
- Updated for today's patch

09 March 2009 by rswiders
- Fixed aura (by name).  You can determine if an aura is active with Me.Aura[#aura name effect].ID
- Fix for buff stacking issue
- Cleaned up merc names for Group.Member[#]

12 February 2009 by dkaa, ieatacid, rswiders
- Fixed pet buff window information/stackspet
- Fixed NPCCorpse mapfilter toggle

12 February 2009 by ieatacid, rswiders
- Updated for the patch on the 11th

9 February 2009 by rswiders
- Added exact match option to spawn searchs (use a "=" immediately preceeding the name being searched for)
- Updated named mob identification.  Named mobs will not exist in non-combat zones and warders, familiars, etc. have been demoted from their named status.
- Added /mapfilter option for named spawns (will toggle between named/normal npcs when npc filtering is active)
- Updated /mapfilter corpse as a master toggle for PC/NPC corpses.  When active, you can toggle PC/NPC filtering using PCCorpse/NPCCorpse respectively.
- Added Faycites, Chronobines as additional alternate currencies

31 January 2009 by dkaa
- added "targetable" as a spawn search modifier

20 January 2009 by ieatacid, dkaa
- Updated for today's patch

18 January 2009 by ieatacid
- Adjusted spawn types for banners.  The client lists the following races as banners: 500, 553-557, 586

17 January 2009 by ieatacid
- Added "/mqclear" command to MQ2ChatWnd which, you guessed it, clears the MQ2 chat window.  This does it the right way and removes all text from the window, unlike some plugins I've seen that just add 11ty new lines (\n) to the chat window
- Fixed "/setautorun".  It was saving incorrectly so AutoRun ini entries would never be processed (thanks pms)
- The "/dosocial" command should now work properly

11 January 2009 by ieatacid, rswiders
- Events will once again trigger on "You have entered <zone name>."
- Completed formatting corrections for using spaces vs. tabs
- Corrected bug with spawnsearch.  Spawn[id 0] WILL NO LONGER return the same values as ${Me}.  You have been warned.
- Corrected spell stacking bug with some new spells (.Stacks/.WillStack)

29 December 2008 by dkaa
- added params to the /exec command (thanks three-p-o)

11 December 2008 by dkaa
- fixed a bug in the pet window with BuffFadeETA
- turned of macro error logging by default because it causes crashes if the log file is unwriteable

11 December 2008 by rswiders
- updated for today's patch

10 December 2008 by rswiders, ieatacid, dkaa
- updated for today's patch

10 December 2008 by dkaa
- Macro errors are now logged to a file

29 November 2008 by ieatacid
- Removed window manager drawing of the cursor on each pulse while in screen mode 3 (UI hidden) -- not needed since EQ switched to using Windows' cursor

05 November 2008 by ieatacid
- Fixed caption crash that happened on some untargetables
- Added "Flyer" spawn type for spawns that appear in some zones with NaN location data, which will filter them from NPC spawns
- Fixed Me.Aura bug when passing a number to it

03 November 2008 by dkaa
- added Triple Attack to skills.h

29 October 2008 by rswiders
- Updated for today's patch

27 October 2008 by ieatacid
- Removed BuffUpdate from the target type. It's no longer cleared when you switch/release targets and, as such, serves no real purpose

22 October 2008 by ieatacid
- Added mercenary as a spawn type and map filter option
- Added bool mercenary to groupmember type
- Me.Aura now can now receive an index to access more than one aura (no index defaults to the first aura)

21 October 2008 by rswiders
- Updated for October 21st patch

19 October 2008 by dkaa
- fixed the problem with the first line of macro not being run if /macro 
    was invoke within a macro.

17 October 2008 by rswiders
- Added Spawn.Loc and .LocYX.  Loc is a float formatted string, LocYX is an int formatted string.
- Display permanent buff timers as "Perm" not "-0:18"
- Misc source cleanup

12 October 2008 by ieatacid
- Added BuffDuration to target type. It takes the buff name or number as a parameter and returns a ticks type.
- Added to Group TLO: string MainTank, string MainAssist, string Puller
- Added to groupmember type: bool MainTank, bool MainAssist, bool Puller

11 October 2008 by rswiders
- Update mappable commands with all correct values, looks like it was not done in initial patch
- Update for Me.State.  If you are on a mount it will return "MOUNT" instead of continuing on and returning "STAND"

11 October 2008 by dkaa
- Fix for mappable commands -- thanks, brainiac
- Fix for class type 71, merc liaison.

10 October 2008 by dkaa
- Fix for VC6 compile problems.

09 October 2008 by ieatacid
- Changed target TLO. It now uses the new TargetType which inherits the spawn type.  The TargetType contains the following members:
   Buff (access to spell type): returns the target's spell by index (${Target.Buff[n]}) or name (${Target.Buff[name]}).  If no index is given (${Target.Buff}) it returns the first spell name or "NULL" if the target has no buffs
   BuffCount: returns the number of buffs on the target
   BuffUpdate: since there's a delay between when you target a spawn and when you get their buff data, this lets you know if the buff data is available
      
09 October 2008 by ieatacid, dkaa, rswiders
- Updated for October 7th patch
- Added spawn type members: CurrentMana, MaxMana, Current Endurance, MaxEndurance -- these behave like CurrentHPs (only updated when you target a spawn)

08 September 2008 by ieatacid
- Added Level to groupmember type

07 September 2008 by rswiders, ieatacid
- Fixed Group.Member[x].Name and .Leader 

06 September 2008 by rswiders
- Fixed Group.Member[x].Name

05 September 2008 by rswiders
- Fixes for group CTD issues
- Added Group.GroupSize back in... it's in the html manual but wasn't in the source

05 September 2008 by rswiders, dkaa
- Fix for v6 compiles

05 September 2008 by ieatacid, rswiders, dkaa
- Updated for today's patch

21 August 2008 by dkaa
- Add Tradeskills to TLO Item courtesy of brainiac

20 August 2008 by ieatacid
- Added Counters to the character type (total number of detrimental counters you have) and Counter to the buff type (counters per buff)

11 August 2008 by ieatacid
- Updated for today's patch

17 July 2008 by ieatacid, rswiders
- Updated for today's patch
- Added a bunch of stat bonus stuff to the character type (differentiation).  See this thread for more info: http://macroquest2.com/phpBB2/viewtopic.php?t=15646

14 July 2008 by ieatacid
- Added "PCCorpse" map filter to MQ2Map, "Corpse" filter now just works on NPC corpses. Default color is the same as default NPC corpse color.

14 July 2008 by dkaa
- Fixed the pet info wnd struct

9 July 2008 by ieatacid, rswiders
- Updated for today's patch

19 June 2008 by dkaa
- added augs to item TLO -- thanks dewey2461

19 June 2008 by dkaa
- HeroicWIZ is now HeroicWIS -- thanks dewey2461

09 June 2008 by ieatacid
- Added raidmember Raid.MainAssist
- Added function EQPlayer *GetSpawnByName(char *spawnName)
- Changed some stuff that used map::SpawnByName to use GetSpawnByName (should fix other stuff)

29 May 2008 by ieatacid, dkaa, rswiders
- Updated for today's patch

23 May 2008 by rswiders
- Updated class descriptions (DoN Merchants / Fellowship Registrar)

22 May 2008 by rswiders, ieatacid
- Updated for today's patch

22 May 2008 by rswiders
- Added dead, stunned, hovering to Spawn TLO
- Fixes to getspellduration

12 May 2008 by dkaa
- Added Friends TLO

7 May 2008 by rswiders, ieatacid
- Updated for today's patch

24 April 2008 by rswiders, ieatacid
- Updated for today's patch

17 April 2008 by rswiders, ieatacid, dkaa
- Updated for today's patch

1 April 2008 by ieatacid, dkaa
- Updated for today's patch

17 March 2008 by ieatacid
- Redid item tooltip timers to just use one hook.  This also allows timers to be displayed when all bag tooltips are displayed (i.e., <alt>+<mouse over> a bag)

10 March 2008 by dkaa
- Fix for #XXXXXX color processing. Thanks QuestionTheAnswers.

7 March 2008 by ieatacid
- "some dev please do a new zip and be sure it contains the new ISXEQ.NET folder, thx (Lax)"

28 February 2008 by rswiders, ieatacid
- Updated for today's patch

7 February 2008 by ieatacid
- Fixed /buyitem and /sellitem to work with stacks of up to 100 -- includes a sanity check so you don't request a stack size from the server that's greater than what's allowed for that item (so, theoretically, you can do "/buyitem 100" on everything to always buy the max stack size of the selected item)

6 February 2008 by ieatacid, rswiders
- Updated for today's patch

26 January 2008 by ieatacid
- Added ticks type Me.Downtime (the time left on your combat timer)
- Added to the item TLO: EnduranceRegen, HealAmount, Clairvoyance,
  DamageShieldMitigation, SpellDamage, and all the Heroic stats

21 January 2008 by dkaa
- Added a list of actor defs for ground items.

19 January 2008 by rswiders
- Fixed /lootall command

18 January 2008 by rswiders
- Added Macro.Paused, Spawn.StandState

17 January 2008 by ieatacid, rswiders, dkaa
- Updated for latest patch

2 January 2008 by ieatacid
- Changed "/cast item" so that it should now work on all items

24 December 2007 by ieatacid
- Added adjustable HUD font size (off by default)
   To enable it set "UseFontSize=on" in the [MQ2HUD] section
   in MQ2HUD.ini and edit each HUD line to match this format:
      TYPE,SIZE,X,Y,RED,GREEN,BLUE,TEXT
   Example:
      LastTell=3,2,401,0,255,0,LastTell:  ${MacroQuest.LastTell}
   becomes this with a font size of 4:
      LastTell=3,4,2,401,0,255,0,LastTell:  ${MacroQuest.LastTell}
   * Valid sizes are 0-11.

17 December 2007 by dkaa
- Added brainiac's /mqfont fix

12 December 2007 by ieatacid, dkaa
- Updated for today's patch

7 December 2007 by rswiders
- added new /lootall command
- removed rk. II/III spell handling... use exact spell names
- fixed /zonehud command and hud zone processing
- added MQ2 crash detection processing back in

5 December 2007 by ieatacid
- Updated for today's patch

25 November 2007 by ieatacid
- "/shift /click right target" will now loot all items on a corpse

20 November 2007 by rswiders, ieatacid
- Updated for today's patch

17 November 2007 by dkaa
- fixed SPELLFAVORITE
- fixed the crappy Rk. II/III handling
- fixed a crash on zoning

14 November 2007 by ieatacid, rswiders, dkaa
- Updated for November 13th patch

8 November 2007 by rswiders, ieatacid
- Updated for today's patch

30 October 2007 by ieatacid, rswiders
- Updated for today's patch

08 October 2007 by dkaa
- fixed calc where '...) - <expr>' was treated as negate instead of subtract

27 September 2007 by dkaa
- fixed /next

17 September 2007 by ieatacid
- Added Me.Fellowship
  * fellowship  type members:
      int ID: fellowship ID
      string Leader: leader's name
      string MotD: message of the day
      int Members: number of members in fellowship
      fellowshipmember Member: member info by index (1-9) or name
      ticks CampfireDuration: how much time is left on campfire
      float CampfireY: self explanatory
      float CampfireX: "
      float CampfireZ: "
      zone CampfireZone: zoneinfo for the campfire
      bool Campfire: TRUE if campfire is up, FALSE if not
      to string: TRUE or FALSE
  * fellowshipmember type members:
      zone Zone: zoneinfo for this player
      int Level: this player's level
      class Class: class info for this player
      ticks LastOn: when this player was last online
      to string: player name

7 September 2007 by ieatacid
- Updated for patch

6 September 2007 by ieatacid
- Updated for patch

15 August 2007 by ieatacid, rswiders, dkaa
- Updated for patch(es)

25 July 2007 by ieatacid, dkaa
- Updated for today's patch

23 July 2007 by rswiders
- Added Campfires to spawn searchs and mapfilters

16 July 2007 by dkaa
- fixed NearestSpawn to work correctly with loc

12 July 2007 by ieatacid
- Updated for Today's patch
- Wrote our own version of EQ's get_melee_range function (thanks Purple for the help with fcomp flags!).
- Added more stuff to item TLO

6 July 2007 by ieatacid, rswiders
- Updated for July 5th patch
- Some of the text coloring was removed from MQ2ItemDisplay since EQ now colors the item name green or red if you can or can't use the item (EQ also handles this text differently now).

17 June 2007 by ieatacid
- '/click left <x> <y>' works again.  It's now possible to
  click tradeskill containers and ground spawns.  This only
  works on the actual game play environment.  It does not
  work on UI windows (there are existing commands for that)
  or anything out of the viewport area.
- Added '/click left center' to click the center of the viewport area
- Added the following to the macroquest TLO:
  * ViewportX - left edge of the viewport area
  * ViewportY - top edge of the viewport area
  * ViewportXMax - right edge of the viewport area
  * ViewportYMax - bottom edge of the viewport are
  * ViewportXCenter - center of the viewport area going from left to right
  * ViewportYCenter - center of the viewport area going from top to bottom
  * LClickedObject - successfully clicking a ground spawn, TS container,
    NPC, or PC (using '/click left center|<x> <y>') will set this to TRUE
- Removed the /mouseto command since it no longer did anything

10 June 2007 by rswiders, dkaa
- Added clicking links with /notify.  Use /notify ChatWindow CW_ChatOutput link <link structure>
  The link structure consists of 44 characters of the link starting with the 2nd character of the item id (ie, drop the leading 0).

9 June 2007 by ieatacid
- Tell windows will now trigger events and '#chat tell'

6 June 2007 by ieatacid
- Updated for today's patch

28 May 2007 by ieatacid
- Added character TLO members Doubloons, Orux, Phosphenes and Phosphites (alternate currencies)

20 May 2007 by ieatacid
- Added item TLO members Power and MaxPower (both for power sources) and Purity

19 May 2007 by dkaa
- added a bunch more stuff to the item TLO

18 May 2007 by dkaa
- added AC, HP, STR, STA, AGI, DEX, CHA, INT, WIS, Mana for items.  thanks equser2002.

17 May 2007 by dkaa
- Fixed the chat wnd

16 May 2007 by ieatacid
- Updated for today's patch

20 April 2007 by ieatacid
- Updated for today's patch

19 April 2007 by dkaa, ieatacid, eqmule
- fix for opcode detection to restore plugin zoning functions
- outgoing messages via SendEQMessage are disabled.  this means
    /click left item, /bzsrch, and /pricecheck are not functional

18 April 2007 by ieatacid, dkaa
- Updated for today's patch
- Updated MQ2EQBugFix to stop a crash that occurs when going from character select to server select (thanks cronic).  This may only be WinEQ2-related, but it's there should you want to use it.

6 April 2007 by rswiders
- Added Banners to spawn searchs and mapfilters
- Spell stacking changes are back...
.. Stacking of spells with themselves will occur again.  For .Stacks and .StacksPet they take
.. a new parameter [###].  This will check the duration left on the spell, if the duration left is
.. less then the parameter value the spell will show it stacks with itself.  To retain old behavior
.. use [0] for the parameter (.Stacks[0] and .StacksPet[0] retain old behavior)
.. example - .Stacks[4] will return TRUE when less then 4 ticks remain on the spell buff in question

5 April 2007 by ieatacid
- Updated for today's patch

15 March 2007 by ieatacid, dkaa
- Updated for March 14th patch

21 February 2007 by ieatacid
- Updated for today's patch

19 February 2007 by rswiders
- Fix for campfire objects
- Fix for short buffs
- Fix for label of last target on map

17 February 2007 by ieatacid
- Fixed _SPAWNINFO.Mount

17 February 2007 by ieatacid
- Fixed item Clicky/Proc/Worn/Focus stuff not working
- Added dkaa's _EQLOOTWINDOW fix (${Corpse.Item} stuff should now work correctly)

17 February 2007 by dkaa
- changed the EQ_END_ZONE to the correct value
- changed the bag slot numbers to start at 262 from 251.  See: http://www.eqinterface.com/forums/showthread.php?p=94698&highlight=262#post94698

16 February 2007 by ieatacid, dkaa
- Updated for The Buried Sea expansion.  New "Power Source" item slot means slot changes:
 * Slots charm through waist are the same (0-20), "Power Source" is 21, 22 is ammo, 23 - 30 are inventory (bag) slots

17 January 2007 by ieatacid
- Updated for today's patch

14 January 2007 by rswiders
- Fix for zone translocate spell information crash displaying items
- Changes to spell stacking (spells will say they stack with themselves)

12 January 2007 by ieatacid
- Fix for Me.Aura for Monk auras (spelling error on SoE's part :o)
- dkaa told me about an AuraMgr struct and how it relates to AuraInfo -.-
- Added charinfo svChromatic, svPrismatic (Charisa)

2 January 2007 by rswiders
- Fix for npcs and objects

30 December 2006 by ieatacid
- Added DynamicZone TLO which has the following members
.. string Name
.. int Members
.. int MaxMembers
.. dzmember Member (number or string as a parameter)
.. dzmember Leader
.. to string - same as Name
- Added dzmember type, with members:
.. string Name
.. string Status - returns: Unknown, Online, Offline, In Dynamic Zone (no idea what this
   is, it's in the exe), Link Dead
.. to string - same as Name

23 December 2006 by rswiders
- Updates for GetSpellEffectName, ShowSpellSlotInfo (differentiation, pinkfloydx33)
- Updates for Counters in datatypes (pinkfloydx33)

14 December 2006 by ieatacid
- Updated for today's patch

7 December 2006 by dkaa
- Fix for NoDrop & NoRent

6 December 2006 by ieatacid, dkaa
- Fixed for Dec 5th patch

7 November 2006 by ieatacid
- MQ2ChatWnd should now remain visible while in hover state

31 October 2006 by ieatacid
- Fix for Halloween crash

25 October 2006 by ieatacid, rswiders
- Updated for today's patch

23 October 2006 by ieatacid
- Added Spell.MyRange.  This is YOUR actual cast range, including extended range from focus effects.

10 October 2006 by ieatacid
- Added "HOVER" for use with Me.State
- Added bool InHoverState() to MQ2Utilities.cpp

4 October 2006 by rswiders
- Updated for today's patch

2 October 2006 by ieatacid
- Added "object" to /mapfilter. Objects are things like catapults, tents, practice dummies, etc.

27 September 2006 by ieatacid
- Updated for today's patch

23 September 2006 by dkaa, ieatacid
- fix for gbInZone, Me.FreeBuffSlots, AA-related stuff, MQ2EQIM compile errors

19 September 2006 by ieatacid
- Updated for Serpent's Spine expansion release. Many new changes - the important stuff is listed below
- Skill members SkillCapPre50, SkillCapPre65 and SkillCapPre70 were removed and replaced with int SkillCap.  This returns the skill cap based on your class and current level
- New character members:
    1) string CombatState - returns one of the following: COMBAT, DEBUFFED, COOLDOWN, ACTIVE, RESTING.  The same as the new icon in the player info window
    2) int svCorruption - character's Corruption resist
- Added Prismatic and Corruption to spell ResistType
- MQ2ItemDisplay now shows corruption resist
- "GREY" added to spawn.ConColor
- Plugin authors:
  * Skill stuff has been changed
      Lines like this:
        if(SkillDict[EQADDR_DOABILITYLIST[nSkill]]->AltTimer==2)
      Need to be changed to this:
        if(pSkillMgr->pSkill[EQADDR_DOABILITYLIST[nSkill]]->AltTimer==2)

3 September 2006 by ieatacid
- Changed the way we handle con-colors.  We now use EQ's function rather than calculate it ourselves.

30 Aug 2006 by dkaa
- incorporate change from Ceghkmv and teabag to fix the xml file stuff

28 August 2006 by ieatacid
- Changed spawninfo's pCharInfo member to 'void *pCharInfo_vtable2' since it points to vtable2 in charinfo and made changes where necessary to reflect this.
  Now things like "/itemnotify in bank1 1 leftmouseup" should work properly.
- Added spawn.Buyer

25 Aug 2006 by dkaa
- duel->dual
- aura fix for when you don't have an aura

15 August 2006 by ieatacid
- Added Me.ActiveFavorCost

5 August 2006 by Amadeus
* Added a new member to the 'string' datatype.
  1. Replace[ToReplace,ReplaceWith]
     a. This member will return a string replacing every instance of
        'ToReplace' with 'ReplaceWith'.  It will work for both strings 
        and individual characters.  IT IS CASE SENSITIVE.   
     ~ Example: echo ${Me.Name.Replace["Amadeus","Maestro"]}
                echo ${Me.Name.Replace[",","."]}  
* Added a custom 'label' that you can put in your macros -- ":OnExit".
  Anything included after that label will be called whenever an /endmacro
  command is issued.  To use this feature, the label must be at the end 
  of your 'Sub Main' function and end with a /return.  Please note that 
  this is NOT required of macros, so no macros will have to be altered 
  unless you wish to take advantage of this feature.  (See my posting
  on the messageboards for an example of how to use this.)

25 July 2006 by ieatacid
- Added leadership ability members to character type that return
  the ability level of *active* leader abilities.
  ** LAMarkNPC, LANPCHealth, LADelegateMA, LADelegateMarkNPC,
     LAInspectBuffs, LASpellAwareness, LAOffenseEnhancement,
     LAManaEnhancement, LAHealthEnhancement, LAHealthRegen,
     LAFindPathPC, LAHoTT.

20 July 2006 by dkaa
- Fix for the 7/18 patch
- Fix to the ITEMINFO size 

17 July 2006 by ieatacid
- Added spell Me.Aura (this applies to your self-aura that is shown in the aura window)

13 July 2006 by ieatacid
- Added to item type: Evolving which has the following members
      ExpPct
      ExpOn
      Level
      MaxLevel
    Example: ${FindItem[some evolving item].Evolving.ExpPct} 
- Some UI struct fixes
- /windowstate now works without screwing up the UI state

8 July 2006 by Amadeus
- Updated ISXEQ to compile a bit better with Visual Studio 2005
- Added ISXEQ project/solution file(s) for Visual Studio 2005.
  1. Double-click on "MQ2Auth.exe" (duh)
  2. Open Visual Studio 2005
  3. Click on File->Open->Project/Solution ..and select "ISXEQ-VS2005"
  4. Build All.
  5. The DLL files will be built in a directory in your primary MQ folder 
     called "ISXEQ Release Files".  Simply move all of the DLL files from
     that directory to your /InnerSpace/Extensions directory.
  ** You will get a few warnings; however, if your library/headers are set  
     up correctly and the ISXDK is installed properly, you should be able
     to compile out-of-the-box.
- Updated the VS2003 solution file ("ISXEQ") to include only ISXEQ projects
  and disable compilation of ISXEQLegacy (since it is currently broken).
- Please note that these VS2005 project files are only for ISXEQ.  If you
  still use MQ2, you can ignore this.



5 July 2006 by ieatacid
- added Me.Language (ex. ${Me.Language[1]} returns "Common Tongue"; ${Me.Language[Common Tongue]} returns 1)
- fixed zoned.cfg to load properly after zoning, also .cfg files that use zone short names

29 June 2006 by ieatacid
- added int MacroQuest.ChatChannels (returns number of channels currently joined)
- added MacroQuest.ChatChannel (ex. ${MacroQuest.ChatChannel[MQChat]} returns true if the channel "MQChat" is joined (bool); ${MacroQuest.ChatChannel[1]} returns the name of chat channel 1 (string))

28 June 2006 by rswiders, ieatacid
- fix for 6/28 patch
- fix for gbInZone on initial load

27 June 2006 by ieatacid
- added bool Me.AutoFire

16 June 2006 by rswiders, dkaa, ieatacid, and others...
- fix for 6/16 patch

10 June 2006 by rswiders
- added Aura to spawn searches and mapfilter
- added spellradius to map for a second radius circle on the map

1 May 2006 by dkaa
- fix the previous fix

30 Apr 2006 by rswiders
- added Me.TributeTimer, Me.RadiantCrystals, Me.EbonCrystals
- added Me.Shrouded, UseSkill, LoH/HT Ready (ieatacid)

20 Apr 2006 by rswiders
- fix for isxeq compile issue

19 Apr 2006 by dkaa, rswiders
- updated for 4/19 patch
- added spawn.IsNamed
- added personal tribute and radiant/ebon crystals to CHARINFO

31a Mar 2006 by dkaa
- fixed the VS6 build

31 Mar 2006 by dkaa
- Added stuff to item type
    Classes
    Class
    Races
    Race
    Deities
    Deity
    RequiredLevel
- Added DisplayItem TLO as item type to mq2itemdisplay
- Added /ireset to reset DisplayItem ID 

29 Mar 2006 by dkaa
- Fixed /sellitem

27 Mar 2006 by dkaa
- Fixed the CSidlScreenWnd struct

24 Mar 2006 by dkaa
- Fix the container manager struct

23 Mar 2006 by rswiders
- Various cleanup from PoR patch
- Access to the 8 new bank slots

22 Mar 2006 by dkaa
- Added a message box for plugin load failure

16 Mar 2006 by Lax
- Various ISXEQ-related updates
- Blech updated to fix Feed reentrancy issue (not a problem in MQ2 macros, but with
  plugins it would have introduced crashes)

14 Mar 2006 by dkaa
- Added MacroQuest.Ping from ieatacid

04 Mar 2006 by Lax
- Various ISXEQ-related fixes.  Removed the &s from EzDetour to be consistent, and
  added the &s manually where required

03 Mar 2006 by dkaa
- fixed the loading screen captions
- fixed crash on right click on map on ground item

late Feb 2006 by lots of people
- stuff to get up and running after expansion
    
29 Jan 2006 by rswiders
- Fix to spawninfo struct from merge

29 Jan 2006 by rswiders
- Fix to re-add class based cfg file loading upon entering game
- Added global bool for telling if you are zoning or not (gbInZone)
- Added .GroupSize
- Fix to allow non-stackable items to return counts in .Stacks, .StackCount, .FreeStack
- Added LoS parameter to spawn searches

18 Jan 2006 by rswiders
- Updated for 01/18 patch

05 Jan 2006 by dkaa
- Fixed the crash on re-entering the game

20 December 2005 by rswiders
- Fixed to compile in VC++ 6.0

19 December 2005 by rswiders
- Corrected offset comments in several structures
- Fixed Item.Timer issue for insta-click/instant refresh items
- Added item timers to potion belt window tooltips
- Added Item.StackSize, .Stacks, .StackCount, .FreeStack, .TimerReady
- Added class based cfg file loading upon entering game

16 December 2005 by dkaa
- Fix for Merchant.BuyPrice

15 December 2005 by rswiders
- Fix for MaxMana, MaxEndurance

15 December 2005 by rswiders, dkaa
- Fix for MaxHPs
- Fix for Item.timer

15 December 2005 by rswiders
- Updated for 12/15 patch
- Fixes Item.Timer returning 0 too early
- Added Merchant.Full (thanks cronic)

13 December 2005 by rswiders
- Fixed SWho display of primary/offhand for spawns
- Fixed blocking issue in .Stacks for heal conversion type spells
- Located more missing fields from 12/07 patch
- Added MQ2LoadingMsg to macroquest2.ini to allow you to configure 
  the MQ2 evolution in action message to be displayed or not.

12 December 2005 by rswiders
- Fixed Me.Levitating

11 December 2005 by rswiders
- Corrected offset comments in several structures
- Added /classhud and /zonehud commands. Automatically load [class] or [zonename] huds.
- Added SpeedMultiplier into spawninfo
- Fixed Item.Stack
- Fixed /doors command (_DOORS and _EQSWITCH structures changed). Other switches may have
  been effected and fixed with this also.

10 December 2005 by rswiders, dkaa
- Updated for 12/07 patch
- PACTORINFO was removed, _ACTORINFO fields were merged into _SPAWNINFO
- Changed item.timer to a ticks type

5 December 2005 by rswiders
- More cleanup of several class function declarations
- Another fix to .Stacks/.WillStack to not fail if the same slot is a blocking slot
- Added endurancecost to SPELL (thanks s0rCieR)
- Added item timer to tooltips (thanks ieatacid)

30 November 2005 by rswiders
- Clean up of several class function declarations
- Cleanup of CombatAbilility, CombatAbilityReady and CombatAbilityTimer. They are now using
  the EQ functions. Cleanup of several functions to use EQ function GetAltAbilityIndex
  instead of accessing the charinfo structs directly.
- Fixed Me.State so it recognizes "STUN" correctly
- Fixed GetAAIndexByName, GetAAIndexByID
- Fixed Me.FreeBuffSlots to include the additional slot you get when you get either the
  "Embrace of the Keepers" or "Embrace of the Dark Reign" aa's.
- Fixed bounds issues on RequiresAbility, GetAANameByIndex, GetAAIndexByName, and GetAAIndexByID
- Fixed .Stacks/.WillStack to allow self buffs (with a healing component) to stack correctly
- Added: Spawn.Fleeing
    Currently this works with your target that is engaged in combat. If it turns to flee
    this flag is set for use in macros. It checks to see if the heading of the spawn is
    facing in a direction that is not in an arc of 120 degrees facing you.
- If you are crashing on switching toons at character select,
  you can comment out the autorun (per character) section in
  MQ2Pulse.cpp. This is only needed if you want to automatically
  process commands upon initial entering of world for a
  character. If you don't use the feature commenting it out will
  not cause any lose of functionality for you. Please post any CTD
  crash dumps to assist with locating this bug.

22 November 2005 by rswiders
- Added Item.ItemDelay
- Config files can contain comment lines. Use ";" as the first character on the line to make it a comment.
- Updated resistadj location in _SPELL struct

18 November 2005 by rswiders
- Fixed resists bug

18 November 2005 by dkaa
- Added TLOs DoorTarget and ItemTarget

17 November 2005 by Lax
- Separated functionality from do_ranged command for use from plugins.  Do this for any case where
  DoCommand has been used, and submit code changes.  This example has been done for you.

17 November 2005 by dkaa
- Added Cr4zyb4rd's hud extensions

16 November 2005 by rswiders
- updated offset for 11/16 patch
- updated changes to charinfo struct for 11/16 patch

15 November 2005 by Lax
- Turned MacroQuest into swiss cheese with some more #ifdef blocks to support new ISXEQ functionality
  that allows it to run legacy MQ2 "macros"

11 November 2005 by dkaa
- remove the ability to use "fake" targets (door & items)
- added item timers to itemdisplay

01 November 2005 by dkaa
- updated offset for 11/01 patch
- /caption <list|type <value>|update #|MQCaptions <on|off>>

19 October 2005 by dkaa
- added item timers from ieatacid
- added stacks from pinkfloydx33

4 August 2005 by Lax
- Optimized stristr routine in Blech.h, resulting in a little bit of improved performance from Blech

31 Jul 2005 by Lax
- Nobody reported that Select didnt work until now, but the AddMQ2Data line is now added so it
  will work ;)

16 Jul 2005 by dkaa
- further fixes for else 

12 Jul 2005 by Lax
- Added Top-Level Object:
  * int Select[value,...]
    This replaces ${String[ x y z ].Find[ ${Stuff} ]}, like so: ${Select[${Stuff},x,y,z]}
    The result will be 0 for none, 1 for the first, 2 for the second, ad infinitum (no limit)
 
11 Jul 2005 by dkaa
- fixed the AltAbilityTimer members
- fixed else processing if there is not a "{" on the else line

05 Jul 2005 by dkaa
- fixed the AltAbilityReady and AltAbility members

04 Jul 2005 by dkaa
- prototypes for CListWnd::AddString changed (fixes mq2tracking)
- rswiders change to XMLRead

03 Jul 2005 by dkaa
- prototypes for CSidlManager::FindScreenPieceTemplate and CComboWnd::InsertChoice changed

02 Jul 2005 by dkaa
- /aa list all should work now -- fixing AAs in progress
- CCustomWnd actually works with char * param in constructor

02 Jul 2005 by dkaa
- opcodes updated for zoning

02 Jul 2005 by dkaa
- String is still out
- fixed the AA stuff in CHARINFO
- CCustomWnd constructor now takes char * or CXStr *

26 May 2005 by Lax
- Fixed negation math operator, which was rounding the value negated

26 May 2005 by DKAA
- Plugins must have compile time later than mq2main.dll or they won't load

25 May 2005 by Amadeus
- Added Me.CombatAbilityReady and Me.CombatAbilityTimer
- Added:  /doability <combat ability>
- Added Me.Running 
- Added the command "/inote" for those running the ItemDisplay plugin,
  which is most everyone :)
- Currently AltAbilityReady returns TRUE when you inquire about 
  aa's you have not yet purchased. MQ2 now changes that behavior 
  to verify that you own the aa prior to saying its READY. 
- Fixed Me.SpellReady

21 May 2005 by Amadeus
- The MQ command known as '/charinfo' is now known as '/char'.  This allows
  for players to use both the EQ and MQ commands seperately.
- Fixed various structs
- Returned Me.Underwater and Me.FeetWet
  
13 May 2005 by DKAA
- Added optional param to Windows.List[...] to indicate column

11 May 2005 by Amadeus/DKAA
- Updated MQ2 to work with the 5/11/2005 patch
- Fixed Mapwindow structure
- Fixed Spellbuff structure
- Fixed Actorinfo structure
- Lots of other little fixes 

20 April 2005 by Amadeus
- Added some new offsets to eqgame.h including
  * pinstCGuildTributeMasterWnd
  * pinstCVoiceMacroWnd	
  * pinstCLFGuildWnd
  * pinstCGuildBankWnd
  * pinstCBarterWnd	
  * pinstCBarterMerchantWnd	
  * pinstCBarterSearchWnd
  * pinstCTicketWnd	
  * pinstCTicketCommentWnd]
  * pinstLargeDialogWnd	
  * pinstCTaskWnd
  * pinstCTaskSelectWnd	
  * pinstCPointMerchantWnd
  * pinstCPvpLeaderboardWnd	
  * pinstCTitleWnd	
  * pinstCPvpStatsWnd
  * pinstCMailWnd
  * pinstCMailCompositionWnd
  
4 May 2005 by Lax
- Fixed calculation bugs

17 April 2005 by Amadeus
- Added "Suffix" information to structs
- Added ${Me.Suffix} and ${Target.Suffix} 

8 March 2005 by Lax
- Blech 1.6.8 - fixes a crash

23 March 2005 by Lax
- Fixed this group member bug nonsense.  Now uses correct group structure.
- Fixed redundancy in GetSpawnType

11 March 2005 by Lax
- item.Spell fixed for scroll, proc, focus, and worn (previously did only clicky)

10 March 2005 by Lax
- CHARINFO update from htw, fixes the new Group stuff

9 March 2005 by dkaa
- refix the include file issue

8 March 2005 by Lax
- Fixed /itemslots
- Fixed problem with group.Leader when you are the leader and the group has members
- Added ISXEQ client templates to mkplugin

7 March 2005 by Lax
- Fixed the new group data types. Also added To String values:
  groupmember: Same as Name
  group: Same as Members

7 March 2005 by dkaa
- Fixed the Buff and Song ID members

6 March 2005 by Lax
- Added group datatype. members are as follows:
  * groupmember Member[n]: n is 1 to 5 (0 gives self)
  * int Member[name]: Gives the number, as used above
  * int Members: Total group members, excluding self
  * groupmember Leader: The leader of the group
- Added groupmember datatype. inherits spawn. members are as follows:
  * string Name: Name of the group member.  Should work regardless of whether they are in zone
  * spawn Spawn: Direct access to the group member's spawn type
  * bool Leader: Is this the group leader?
- Dropped GroupLeader TLO, now you should use Group.Leader
- Dropped GroupLeaderName TLO, now you should use Group.Leader.Name
- Group TLO now gives group datatype

3 March 2005 by Lax
- Fixed character.CurrentHPS, character.MaxHPS, character.PctHPS to use the "stable" versions..
- Added character members STR, STA, AGI, DEX, WIS, INT, CHA, svMagic, svFire, svCold, svPoison, 
  svDisease, CurrentWeight .. all of them ints
- Fixed buff slot counts

27 February 2005 by Lax
- Fixed INI bug in /mapnames
- Fixed bug in /mapfilter with "help"

26 February 2005 by Lax
- Optimized some stuff with the buff data type

25 February 2005 by Lax
- Removed bmpwad8.s3d file which was no longer being used, but was 33% of the size of the zip
- ISXEQ-related changes not affecting MQ2

23 February 2005 by Lax
- Cleaned up a bunch utility functions from MQ2Commands.cpp, they are now in MQ2Utilities.cpp

22 February 2005 by Lax
- Fix a Blech bug.

18 February 2005 by dkaa
- Update the ground interaction opcode

15 February 2005 by Amadeus
- Adjusted MQ2 to work properly with the new expansion
- Fixed some very small things

12 February 2005 by dkaa
- Fix an issue with /emote

11 February 2005 by Amadeus
- Added/Fixed some more spell slot information (item/spell display)
- Fixed the OnZoning callbacks in the Detour API
- Updated MAX_GUILDS (should fix guild name display problems)
- Updated MAX_ZONES in preparation for next expansion

8 February 2005 by Amadeus
- Fixed MQ2 to work with the latest patch
- Added spell information to the item display plugin
- There is now a file in the /release folder called "Changes-ISXEQ.txt", which will
  contain patch notes for the InnerSpace extension that is now included with MQ2.

31 January 2005 by Amadeus
- Fixed MQ2 to work with the latest patch
- The format of eqgame.h has CHANGED.  Be sure to get this zip. [SwiftyMuse]
- Browsing the wares of an adventure merchant still crashes EQ.  MQ2 is not to blame.

29 January 2005 by dkaa
- Fixed the map crash on /loadskin

29 January 2005 by Lax
- Split MQ2Main.h into a couple extra header files
- Added second project (ISXEQ.vcproj, no .dsp file at this time) to MQ2Main folder for 
  adaptation to Inner Space.  This project builds ISXEQ.dll and does NOT currently link (it
  compiles, then gives linker errors. some things need to be done before it will link)
  ISXEQ project needs separate implementations of each command, datatype, and top-level object.
- Added a lot of "#ifndef ISXEQ" to various files

26-28 January 2005 by Amadeus
- Once over, formatting/syntax check, re-package
- Fixed structs and offsets to be compatable with the new patch
- Fixed a variety of other small things to be compatable with the new patch
- Added a few little things from the boards as well as original work

4 January 2005 by Lax
- Updated copyright notices for 2005
- Updated Blech to 1.6.4, which fixed a tree traversal bug.  The bug prevented some 
  events from firing

31 December 2004 by Amadeus/DKAA 
- Fixed a line that was causing compile problems with VC++ 6.0 

30 December 2004 by Amadeus
-  Lots of little fixes
-  Fixed DOOR struct (which was causing some bugs with door related macro commands)
~  User Submitted Fixes (from message boards)
   * Added 'Me.FreeBuffSlots' to MQ2. [cr4zyb4rd]
   * Fixed Item "Stackable" flag [Valerian]
   * (Changed 'SpellReady' so SpellReady[] returns true when Gems are fading back 
     in from the disabled state. [Brettido]
   * Fixed 'MyCastTime' [cr4zyb4rd]
   * Added 'BuildDate' to the MacroQuest data members. [cr4zyb4rd]

19 December 2004 by Amadeus
- Cr4azyb4rd's code for the new item stuff, outlined in this thread:
  http://www.macroquest2.com/phpBB2/viewtopic.php?t=10270
- The Item Datatype 'Stackable' seems to be broken at the moment.  We will be looking
  into it over the next few days.
- Added "GuildFavor" to the ItemDisplay plugin (Ziggy)
- Added Ziggy's /mapshow patch
- Added Cronic's new Plugin API additions: OnBeginZone() and OnEndZone().  Folks may want
  to bookmark http://www.macroquest2.com/phpBB2/viewtopic.php?t=9959 as an example of how
  to add features to the plugin API.  (Hopefully this thread/example will make it in the 
  manual.)
- Added ${Me.EnduranceRegen} (submitted by Pooz).  It returns returns the amount of 
  endurance gained in the last tick. 

18 December 2004 by Amadeus
- Various structs/offsets taken from the boards to make MQ2 compatable
  with the latest patch
- Fixed keybinds
- Various small things from the boards over the past couple months
- Fixed spawninfo and actorinfo
** Note:  This is an initial zip release to get MQ up and running.  Expect another
          release in the next couple of days to resolve all remaining issues and
          to add code submitted on the boards. **

13 December 2004 by Lax
- Blech updated to version 1.6.3 which solves a new issue

8 December 2004 by Lax
- Blech updated to version 1.6.1 which solves remaining known Blech issues

22 November 2004 by Lax
- Blech updated to version 1.6 which solves parsing problems such as the one
  described here: http://www.macroquest2.com/phpBB2/viewtopic.php?p=75390#75390
- MQ2CustomBinds updated to solve a race condition issue, which also appears in
  older MQ2MoveUtils versions.  The race condition causes a crash when starting
  EQ via WinEQ 2.0
- The MQ2 initialization process now has a short delay to help alleviate the
  race condition issue for people who have not updated MQ2MoveUtils

25 October 2004 by Amadeus
- ${Me.AltAbility[]} is now back!   However, with one change.  Instead of 
  returning the 'rank', it now returns the total number of points you have
  spent in that ability.  Therefore, to determine if a player has bought an
  ability, all you have to do is check if the value is greater than zero.
- Added AALIST struct to eqdata.h and AA information to CHARINFO
- Fixed "/aa list xx" to stop showing multiple versions of the same AAs
- Fixed "/aa list timers" to only show AAs you have bought
- Added some new utility functions to the source (C++, NOT MACRO CODE)
  * bool PlayerHasAAAbility (PCHARINFO pChar, DWORD AAIndex);
  * PCHAR GetAANameByIndex(DWORD AAIndex)
  * DWORD GetAAIndexByName(PCHAR AAName)
  * DWORD GetAAIndexByID(DWORD ID)
~ User Submitted Fixes (from message boards)
  *  Add a "noauto" flag to your '/plugin' command to prevent 
     updating the macroquest.ini when a plugin is loaded/unloaded. 
  *  Added some more USERCOLOR_* definitions to eqdata.h
  *  Small fix to '/loadspells list'
  *  Added more spell information to the spell information display
  *  Added CastOnYou, CastOnAnother, and WearOff to the MQ2SpellType class
  *  Major upgrades to MQ2Irc plugin, see this thread for more information 
     http://www.macroquest2.com/phpBB2/viewtopic.php?p=73390#73390
     
14 October 2004 by Amadeus
- Removed the BuildData datatype for the moment.  The code, as it was originally 
  conceived was causing compile problems on Visual Studio 6.0.  Moreover, it was 
  determined that it was not reliable on all partition types.   It may be added
  again at some point in the future after rigorous testing across different
  partition types and both vs 6.0 and vs.net compilers.

13 October 2004 by Amadeus
- [*LAX*]  New Memcheck0 routine
- [*DKAA*] New Memcheck4 routine (the routine previously known as memcheck4 
           is now memchecks)
- New offsets/structs for latest patch
- Con Colors should be working properly to lvl 70
- spawn.CleanName should now return the name without the '#' symbol
- More work on mq2map ...it's still in heavy testing and needs more work though
- Added 'BuildDate' to the MacroQuest data members.  Returns an int representing
  the date in which the current MQ2Main.dll was built.
- Added a short message to warn you of a running macro when /camping.

23 September 2004 by Amadeus
- Fixed the MacroQuest2.exe to have correct links and added a few new links!
- Offsets fixed for recent patch
- Couple more spell gem 9 fixes

19 September 2004 by Amadeus
- Fixes related to the extra buff slots and extra spell gem for Omens of War.

17 September 2004 by Amadeus
- MQ2Map has issues and is being debugged in house.  I suggest turning it
  off until it officially fixed if you are having problems.
- Added ${xxx.Attuneable} for items ..returns TRUE if item is Attuneable, 
  FALSE if it is not.
- Added some code to MQ2MapApi.cpp in the debugging stage.  Most of it is
  redundant code hoping to cut down on problems.
- Miscellanous fixes throughout the source

14 September 2004 by Amadeus
- All the fixes needed to make MQ2 work with Omens of War
- The way that EQ handles the initial splash screen has changed dramatically.
  MQ's custom SplashScreen is disabled.
- Almost all structs were modified/fixed.
- Removed the offset CEverQuest__GetTitleDesc
- Added Title to spawninfo structure
- Added ${xxx.Title} ..it returns a string that is your title.  Please note that 
  ${xxx.AATitle} will return the same thing.  I'm leaving both in for backwards
  compatability of macros although "Title" should be used in the future since 
  Titles are no longer exclusively AA based.
- updated TOTAL_SPELL_COUNT 
- Added TOTAL_SPELLS_ALLOCATED
- EQ_Character__Max_Mana removed ...it's a virtual function now (This means that 
  the MaxMana and PctMana datatypes are disabled for now)

26 August 2004 by Amadeus 
- Fixed /filter name on/off to work correctly [Efudd]

20 August 2004 by Amadeus
- Removed ${Me.GroupMember[]} and ${Me.GroupLeader} since it is already in as 
  ${Group[n].Name} and ${GroupLeaderName}.  Even though the information is stored in
  two locations, it was causing confusion.
- Tweaked ${Me.Grouped} some more ...I think I have it fixed now.

19 August 2004 by Amadeus
- Fixed ${Me.AltAbilityReady[]}
- Fixed ${Me.AltAbilityTimer[]}
- Added ${AltAbility[].MyReuseTime}  (proper reuse time if you hastened AA abilties)
- Added NEW COMMAND:  /aa
*** Syntax ***
/aa list all            -- lists all of your AA abilities in format [ID : name]
/aa list timers         -- lists just the AA you have that have timers
/aa info [ability name] -- gives information about a particular AA ability
/aa act [ability name]  -- works like "/alt act ##", but takes the name instead of ##
   (note:  You will notice a fraction of a second delay using this method vs.
           the /alt act ## method.)
***
(Note:  Yes, they do not list in any particular order (No, I don't know why).  No, 
I do not know why some abilities are duplicated.  Yes, it may have bugs 
that need testing.)
- Slight tweak to code to make it compile on Vc++ 6.0 cleanly
- Fixed GetSpellDuration (per corrections posted on the messageboard)
- Added an offset to eqgame.h and removed one from eqgame.h (Those that help find
  offsets..please note this change!)

18 August 2004 by Amadeus
- Fixed EQRAIDWINDOW and EQRAID structs
- Some tweaking to attempt to make ${xxx.Grouped} more consistant
- Added:  ${Me.GroupMember[n]}  (1-5) ...returns string
- Added:  ${Me.AmIGroupLeader}  ...return TRUE or FALSE
- Added:  ${Me.GroupList} ..simply returns a string of your group members (excluding you)
- Fixed ${xxx.Lore} for items
- Fixed {AltAbility[ability].xxx} ...all of these are now working
- Fixed All the AltAbility structs
(Note:  ${Me.AltAbilityReady.xxX}, ${Me.AltAbilityTimer.xxx} and ${Me.AltAbility[]} are 
        still BROKEN)
-----------
** SOE Coding Change (technical folks only)**  
EQ no longer stores information for ALL AA abilities in your memory space as it once did.
It allocates the space for all of the abilities;however, if your character is incapable of
using the ability, the pointer location for that ability is now 00000000.
-----------

14 August 2004 by Amadeus
- Fixed offsets to work with 8/13 "emergency" patch
- Updated TOTAL_SPELL_COUNT and MAX_ZONES
- Added dman's ${Target.HeadingToLoc[Y,X]} and ${Me.HeadingToLoc[Y,X].Degrees} routines

12 August 2004 by Amadeus
- Various fixes (including ${Me.Casting}, etc.)

11 Auguest 2004 by Amadeus
- Fixed to work with the 8/11 patch

27 July 2004 by DKAA
- Fixed ${Plugin}

23 July 2004 by Amadeus
- Lots of struct updates from the boards
- Added the following variables:  ${Me.EnduranceBonus}, ${Me.CombatEffectsBonus},
  ${Me.ShieldingBonus}, ${Me.SpellShieldBonus}, ${Me.AvoidanceBonus}, ${Me.AccuracyBonus},
  ${Me.StunResistBonus}, ${Me.StrikeThroughBonus}, ${Me.AttackBonus}, 
  ${Me.HPRegenBonus}, ${Me.ManaRegenBonus}, ${Me.DamageShieldBonus},
  ${Me.AttackSpeed}, ${Me.DoTShieldBonus}
- Added showbonuses.mac to the release/macros directory.  It will display your current
  stat bonuses as added by your gear.
- Added ${Me.LanguageSkill[languagename]} (ie, ${Me.LanguageSkill[Dark Speech]}.  You can
  also use a number (as given with /lang help) in place of the languagename parameter.

21 July 2004 by DKAA
- Fixed the macro not found error message.

18 July 2004 by Lax
- EQPlayNice 1.11+ compatibility

17 July 2004 by Amadeus
- Updated source to be compatable with the July 16 patch
- ${Me.AltAbilityTimer...} and ${Me.AltAbilityReady...} datatypes are broken atm and 
  have been disabled.

12 July 2004 by DKAA
- slot hand is now hands to be consistent
- updated some of the distributed macros

9 July 2004 by Lax:
- Newest version of the readme.chm from Wassup
- Added/changed MQ2Data type members
  int item.Tribute: Tribute value

3 July 2004 by DKAA
- added /who noguild

3 July 2004 by Amadeus:
- Added new command:  /substitute 
  ** Syntax: 
  **        - /substitute list
  **        - /substitute <orig> delete
  **        - /substitute <orig> <substitution>   (see examples below)
  ** This new command allows you to create custom midline substitutions that will work
  ** anywhere in a command.  It works VERY similarly to aliases in some respects, esp.
  ** in how it is saved in the .ini file and how the commandline syntax is structured. 
  ** Substitutes are called from any alias or commandline by using the percent sign (%)
  ** followed by your orig. text.
  **
  ** Examples:  "/substitute mom Mother"
  **            "/substitute omg Oh my god!"
  **            "/substitute k %omg, kill %t before I tell your %mom"
  **
  ** The final example if you typed "/say %k" would produce:  "/say Oh my god!, kill
  ** TARGET before I tell your Mother"
  **
  ** Please note the following rules/reminders:
  ** 
  ** 1.  You don't use the percent signs when creating the substitutions or editing your
  **     config file.
  ** 2.  You can use MQ's subsitutions without spaces around them (unlike EQs!) (ie: 
  **     "/echo %omg%mom" would return "/echo Oh my god!Mother"
  ** 3.  Substitutions do not currently work in macros.
  ** 4.  "/sub" is currently a valid shorthand for "/subsitute"
  ** 5.  You can use EQ's wildcards (ie: %t) within your substitutions; however, you 
  **     have to leave spaces around them (yes, they suck)
  ** 6.  You cannot CURRENTLY replace EQ wildcards with MQ substitutions (ie, you can't
  **     make a replacement for %m (This may be supported in the future.)
  **
- Fixed CONTENTS struct (thanks ieatacid)
- Fixed routines.mac, arrows.mac, and arraytest.mac (Dont_know_at_all)

2 July 2004 by Amadeus:
- Fixed "/who guild <guildname>" on some servers (It seems that on some servers, SOE
  removed guilds but left the entry giving bogus guild entries in the list where the
  'name' was blank, thus ending the search loop prematurely.)
- Added "/who knight"  (returns Paladins and Shadowknights in the zone)
- Added "/who tank"    (returns paladins, shadowknights, and warriors in the zone)
- Added "/who healer"  (returns druids and clerics in the zone)
- Added "/who dps"     (returns wizards, rangers, and rogues in the zone)
- Added "/who slower"  (returns shamans, enchanters, and beastlords in the zone)

30 June 2004 by Amadeus:
- Refined "/who npc named" to work a bit better
- Added "/who npc merchant"
- Added "/who npc tribute" (returns tribute masters)
- Added "/who npc gm" (returns GUILDmasters)
- Removed the Old SPAWNINFO struct

28 June 2004 by Lax:
- Added MQ2Data Top Level Object:
  bool LineOfSight[y,x,z:y,x,z]: Determines Line of Sight in 1, 2 or 3 dimensions.  Any not given will default to your character's current x y or z.
- Added MQ2Data type members:
  bool spawn.LineOfSight: Determines if your character has Line of Sight to this spawn
  bool switch.LineOfSight: Determines if your character has Line of Sight to this switch
  bool ground.LineOfSight: Determines if your character has Line of Sight to this ground item
- API now has static inline BOOL LineOfSight(PSPAWNINFO Origin, PSPAWNINFO CanISeeThis)

27 June 2004 by Amadeus:
- Added 'named' flag to the superwho filters.  It simply checks to 
  see if the spawn's name begins with a capital letter or with a
  pound (#) sign.  (examples:  '/who npc named', '/who npc named 65')
  ** This works best in places like the Plane of Hate.

23 June 2004 by Amadeus:
- ieatacid's CHARINFO update (primarily just offset locations updated)
- ieatacid's update to EQRAIDWINDOW struct
- Removed OLDCHARINFO struct

23 June 2004 by Lax:
- Fixed Bank stuff in CHARINFO
- "listselect" notify now works in combo boxes
- Fixed minor problem with operator precedence in Calculate (1-1-1 previously evaluated to
  positive 1, now it correctly evaluates to negative 1)
- Changed/Added MQ2Data members:
  int window.Items: Number of items in a list or combo box
  int window.List[text]: Find an item in a list or combo box by partial match (use window.List[=text] for exact)  Example: ${Window[TradeskillWnd].Child[RecipeList].List[=Inky Shadow Silk]}

21 june 2004 by DKAA:
- Fixed a crash in echo when the lines are longer than 2043

21 june 2004 by DKAA:
- Fixed the EQMERCHWND alignment and renumbered the CSIDLWND struct.

19 June 2004 by Lax:
- Fixed FastCalculate and EvaluateRPN functions.  Calculate works fine now, stfu rtfm etc ;)
- DKAA fixed some struct stuff
- Amadeus fixed some struct stuff

14 June 2004 by Lax:
- Replaced Calculate function with a much faster version. Also added an operator or two.
  I'll make sure they get added to the manual. How much faster? The existing calculate
  ran on my system 4,200 times in a short amount of time and took one full second of CPU
  time to do so. The same calculations ran with the new calculate 77,000 times and took 
  only 620ms. Extrapolating the data it would have taken about 124,000 times calling 
  calculate to match the old 4,200... or about 29.5 times faster (that's a lot).
- Added sub lookup map from Gus to speed up macros a little bit
- Undid MQ2EQBugFix, which was currently creating a bug (note to self: in future bug fixes,
  make sure it's only going to try to fix it for the correct version)
- Fixed an offset
- Standard search spawn now allows multi-word names.
- /mqlog no longer adds an extra line

3 June 2004 by Lax:
- Fixed string.Arg, string.Token, NearestSpawn, spawn.NearestSpawn, LastSpawn

2 June 2004 by Lax:
- Fixed some stuff, yadda yadda.  I forget now.
- Bodytype 10 has been identified as Dain, thank you for the reports

29 May 2004 by EqMule:
- Fixed EQ_INTERACTGROUNDITEM so click left item works again...
- Updated zipit.lst (personal reminder: dir * /s /N /A-D /B > zipit.lst)

28 May 2004 by DKAA:
- Fixed the message ID for mq2bzsrch.

27 May 2004 by Lax (more):
- Fixed stack overflow bug in one of the functions that handles window names.  I fixed it in one
  before putting up the update but didn't in an exact copy of it above it.  Lax truly lacks. ;)
- Added pet weapon procced pet body type to the list of known body types.
- Fixed captioncolors not working correctly
- /who <level> will work properly, as you would have expected previously.  e.g. /who 65.
  Coincidentally this now works with the other spawn searches, /who /target /highlight /mapshow
  /maphide, ${Spawn[search]} etc.

27 May 2004 by Lax:
- Added "chest" to the standard spawn searches used by /who, /target, /highlight, /mapshow, 
  /maphide, etc
- Fixed some problems with the window suff introduced in the May 16 zip
- Added/changed MQ2Data members:
  string spawn.Type: PC NPC Untargetable Mount Pet Corpse Chest Trigger Trap Timer Item 
- New MQ2Data Top-Level Object:
  int SpawnCount: Total number of spawns in current zone
  int SpawnCount[search]: Total number of spawns in current zone matching the search

24 May 2004 by DKAA:
-Fixed a couple problems with the makefiles (mq2chat wasn't building)
-A special update for mq2safe users

16 May 2004 by Lax:
- UI subsystem of MQ2 is now smarter.  All window and control names are now case insensitive,
  and controls can be used by ScreenID *or* Piece name.  /windows <windowname> now shows, for 
  each child of the given window, ScreenID, Piece name, and the TYPE of control (e.g. label,
  button, invslot, spellgem, etc).
- window.List now only works on list boxes (will not crash on other types, just give NULL)
- Added/changed MQ2Data members:
  string window.Name: Name of window piece (e.g. "ChatWindow" for top level windows, or the Piece name (NOTE: CUSTOM UI DEPENDANT) for child windows)
  string window.ScreenID: ScreenID of window piece (ScreenID is NOT custom ui dependant, this *must be* the same on ALL UIs)
  string window.Type: Type of window piece (Screen for top level windows, or Listbox, Button, Gauge, Label, Editbox, Slider, etc)
- Fixed /target next, as well as targeting the origin of the search (e.g. you, or the spawn
  already targeted)
- Fixed turbo problem with using /macro from within a macro

16 May 2004 by DKAA:
- Fixed a where using loc and radius in spawn searches would return spawns further than the radius

15 May 2004 by Lax:
- Fixed bug in /who that made it show no spawns for some people, even though there were spawns...
- Standard search spawns will accept class names or short names without using the "class" keyword.
  Shadowknight is used without a space, and short names are all 3 letters ("shd", not "sk").  
  Note that cleric's short name is "clr" not "cle".
- Bug with MQ2Chat plugin that caused events to be processed twice has been fixed
- MQ2IRC will now process all lines as custom events.  Note that it does not process them as 
  #chat events.
- Turned off the PCClass captioncolor option, PC caption colors will default to EQ's settings.
  It was left on by mistake after testing a bug fix.  You can turn them back on if you wish by
  using the /captioncolor command like so: /captioncolor pcclass on

14 May 2004 by Lax:
- MQ2ChatWnd (the MQ2 Chat Window support) got some upgrades.  First of all the window was not
  limiting the size of its scrollback, so after so much went on in the MQ2 window, your framerate
  would drop like a rock.  To achieve proper scrollback limiting without lagging you too much,
  I put in a system to make it buffer the chat that goes to it, and only display so many lines
  per frame.  The MQ2ChatWnd font size option now works somewhat...  The font sizes are not the
  same as EQ's chat window sizes yet, so be aware of that.  I'll work on it ;)  You will probably
  want somewhere from -3 to 2.  /mqfont <#>
- MQ2Map filters added: untargetable, trap, timer
- /who has been changed a little bit.  When a TRIGGER, TRAP, TIMER, or UNTARGETABLE is listed,
  that will be noted at the end of the line in red (very helpful).  The routine has also been
  updated for efficiency, so there is less lag with large /who result sets.
- Standard spawn searches (This includes /who, /target, ${Spawn[search]}, etc) have been 
  slightly modified.  "invis" is NO LONGER A VALID KEYWORD.  If you have this in macros, etc 
  you will need to change it.  The updated spawn types ARE valid keywords (trigger, trap, 
  timer, untargetable). If your search is for type "npc" you WILL get untargetable types in
  your search results (particularly helpful for /who).
- Added/changed MQ2Data members:
  string spawn.Type: PC NPC Untargetable Mount Pet Corpse Trigger Trap Timer Item 
  string string.Token[n,separator]: Retrieve a token from the string using a custom separator.  Unlike Arg, this will not skip empty values
  spell item.Spell: Spell effect
  float item.CastTime: Spell effect's cast time
  string item.EffectType: Spell effect type
  ticks character.AltAbilityTimer[n]: Alt ability reuse time left, by number
  ticks character.AltAbilityTimer[name]: Alt ability reuse time left, by name
- spawn.Hunger and spawn.Thirst have returned to active duty
- You can now list child windows from in-game with the /windows command, like so:
  /windows <name>
  e.g.: /windows InventoryWindow
- /itemnotify in <pack> <#> <notification>  now works with sharedbank slots.

13 May 2004 by Lax:
- Fixed "by class" caption colors
- Fixed some bodytypes being identified as triggers (note that untargetable NPCs *are* 
  triggers)
- Fixed target caption leakage (would stay drawn after switching targets)
- /who will show "invis" spawns if any parameters are given.  Spawn search functions,
  including /who and /target, will probably get updated soon.	
- Fixed problem with leading spaces in sub parameter declarations
- MQ2HUD now allows for different HUDs.  Each different HUD is stored in MQ2HUD.ini, but
  in different sections.  The default HUD is "Elements" because that's what it originally
  used.  To load a different HUD, the command is "/loadhud <name>" like "/loadhud bard".
  In this case, the [bard] section (not case sensitive, so it could also be [BARD]) of
  MQ2HUD.ini will be used.  To load the default HUD specifically, the command is 
  "/defaulthud".  MQ2HUD also now adds the following MQ2Data Top-Level Object:
  string HUD: Name of currently loaded HUD.
- MQ2FPS now fixes the bug where CTRL ALT and SHIFT keys stick when you switch windows.
  This is a bug in EQ that happens because the release of the key is not captured by EQ after
  it has been swapped to the background.  MQ2FPS now releases the keys as soon as EQ goes
  to the background, so this will no longer be an issue.
- New command to complement the /ctrlkey /altkey /shiftkey commands:
  Usage: /nomodkey <command>
  This command will release all ctrl/alt/shift keys for the duration of executing the 
  given command.
- Added/changed MQ2Data members:
  bool spawn.Anonymous: Anonymous?
  bool spawn.Roleplaying: Roleplaying?
  string string.Token[n,separators]: Retrieve a token from the string

12 May 2004 by Lax:
- Fixed the mysteriously disappearing #event handling in macros ;)

11 May 2004 by Lax:
- Added nifty changes.txt reader to character select screen.  Now you have no excuse!
- Fixed problem with events mysteriously having parameters disappear
- Updated Blech to fix a bug with some #events disappearing (and not firing)
- Your target's caption will now always be drawn
- Added LDoN Recruiters and Merchants to the list of full class names.
- Added /captioncolor command, which allows a lot of custom spawn caption coloring.  For example,
  the caption of marked NPCs or assist NPCs can be a specific color.. the caption of bankers and
  merchants can be a set color.  NPCs can be done by con color.  All spawns can be done by
  CLASS color (using the raid settings).  Note that you can only set the raid class colors right
  now through the raid options window.  You can open this window by typing
  /windowstate raidoptionswindow show
  Usage: /captioncolor <list|<name off|on|#>>
  Examples:
  /captioncolor list
  /captioncolor pcclass on
  /captioncolor pctrader on
  /captioncolor pctrader 255 128 0
- Changed /windowstate command to use the window mapping used by ${Window[name]}, /windows, etc.
- Fixed issues with "charm" and the invslot type
- raidmember MQ2Data type now inherits "spawn" (when they are in zone)
- Added/changed MQ2Data members:
  class raidmember.Class: Raid member's class (works without being in zone)
  int raidmember.Level: Raid member's level (works without being in zone)
  int item.WornSlots: The number of invslots this item can be worn in (fingers/ears count as 2 slots)
  invslot item.WornSlot[n]: The nth invslot this item can be worn in (fingers/ears count as 2 slots)
  bool item.WornSlot[name]: Can item be worn in invslot with this name? (worn slots only..)

10 May 2004 by Lax (more):
- Fixed once and for all the crash bugs relating to spawn captions (WHICH ARE *NOT* THE HUD)

10 May 2004 by Lax:
- Fixed problem relating to false negatives determining if a spawn is a TRIGGER (e.g. flavor
  text, trap, etc).  This solves crash issues in the latest zip with the custom caption
  system.  This also solves non-crash issues identifying "invisible spawns" in spawn searches,
  as well as spawns that were previously identified as NPCs in MQ2Map.

09 May 2004 by Lax (more):
- Fixed VS6 compile errors in Blech
- Fixed reported crash bug
- Fixed possible crash with HUDs
- Added MQ2HUD "type" 8, for character select screen.  This should fix some potential
  crashes when using custom HUDs and entering char select.

09 May 2004 by Lax:
- Removed remnants of MQ2Parms system.  Rest in peace.  Phase 4.
- Cleaned up a lot of old code that was being kept in comments
- Removed mount captions, they just crash the client
- Added optional parameter to /delay.
  Usage: /delay <time> [condition to end early]
  This lets you use a delay that has a possibility to end early.  For example...
  /keypress forward hold
  /delay 1s ${Spawn[1234].Distance}<${Spawn[1234].MaxMeleeTo}
  /keypress forward
- New command /noparse
  Usage: /noparse <command>
  Prevents a command from being parsed for MQ2Data.  For example..
  /noparse /ini blah blah blah ${stuff}
  Will actually write the ${stuff} literally instead of changing it to the current value
  of stuff.
- Added/changed MQ2Data members:
  int macroquest.MouseX: Mouse's x location
  int macroquest.MouseY: Mouse's y location
  string ticks.Time: Time in the form mm:ss
  string ticks.TimeHMS: Time in the form hh:mm:ss (if there are no hours, the form will be mm:ss)
  int character.CountBuffs: Total number of buffs (not including short duration buffs)

07 May 2004 by Lax:
- Added "Lax/Blech" support to custom events.  The Blech system allows much easier parsing of
  incoming chat.  Custom events will now support more parameters that are automatically
  parsed based on the match text.
- Fixed up EQ's handling of spawn captions (name above their head). Only the nearest 35 spawn
  captions will be updated by default (and even then, only those close enough that you'd see 
  their name).  EQ itself constantly updates the name of every spawn in the zone, even though 
  only a small portion of those are displayed.
- Added an option to /caption command
  Usage: /caption <list|type <value>|update #>
  "/caption update #" will set the number of nearest spawns for MQ2 to update the name of
  each pass.  By default, this is 35.  If you have performance issues after this update,
  please post about it on the forums.  Find a happy update number and let us know.
- Added marked NPC and assist target leadership stuff to default captions, also put guilds on
  the line below the name.  The defaults should mostly look like EQ's now.
- Fixed macro.Params
- Fixed invslot names
- Added/Changed MQ2Data Members:
	spawn character.TargetOfTarget: Target of target   (moved to character type)
	bool spawn.Assist: Current Raid or Group assist target?
	int spawn.Mark: Current Raid or Group marked npc mark number (raid first)
	spawn character.RaidAssistTarget[n]: Current raid assist target (1-3)
	spawn character.GroupAssistTarget: Current group assist target
	spawn character.RaidMarkNPC[n]: Current raid marked NPC (1-3)
	spawn character.GroupMarkNPC[n]: Current group marked NPC (1-3)

05 May 2004 by Lax (even more):
- Plenty of positive feedback on the custom spawn captioning.  Plenty also asking why shownames
  was not working properly.  There are now 4 levels of captions for Players, according to the
  shownames level, to solve this issue.  Therefore the ini options are now Player1, Player2, 
  Player3, Player4 rather than just Player.  Also, the guild status indicator now 
  capitalizes Leader and Officer, and added a "LDR" tag to your group leader.
- Added /caption command to set the custom captions from in-game.
  Usage: /caption <list|type <value>>
  To clear the specific setting, just do /caption <type> like so:
  /caption player1
- DKAA fixed the bzsrch problems
- Added MQ2Data member:
  bool spawn.GroupLeader: Is this your group's leader?
- Fixed CHARINFO struct.  Some Stuff appeared slightly wrong, like leadership exp and bank
  stuff.

05 May 2004 by Lax (more):
- Fixed crash on zoning relating to the new HUD functionality. Dont ask.

05 Max 2004 by Lax:
- Updated for patch and added README.CHM.  Keep an eye out, we should have the manual
  available in more formats (including printable) soon

04 May 2004 by Lax:
- New command
  Usage: /hud <normal|underui|always>
  * "Normal" will make the HUD display as it would normally on top of UI, not at char select
     or in "f10 mode"
  * "UnderUI" will make the HUD display as it would normally except UNDER the UI, and not at
     char select or in "f10 mode"
  * "Always" will make the HUD display under the UI, at char select, and in "f10 mode"
- New Plugin MQ2HUD.  Edit MQ2HUD.INI to add custom elements to your HUD.  You pick the spot
  on the screen, the color, and what gets displayed.  Every element gets parsed for MQ2Data
  each time it is displayed.
  Example MQ2HUD.INI:
    [Elements]
		TargetInfo=3,5,35,255,255,255,${Target}
		GMIndicator=3,5,45,0,0,255,${Spawn[gm]}
		CursorItemName=7,-15,-15,255,255,255,${If[${Cursor.ID},${Cursor},]}
		ClickMeForFun=6,-25,-25,255,255,255,${If[!${Cursor.ID},click me,]}
  The order is TYPE,X,Y,RED,GREEN,BLUE,TEXT.
  Type is currently any combination of the following:
    1 - Display in non-full screen mode
    2 - Display in full screen mode ("f10 mode")
    4 - X,Y is based on cursor location
  e.g. 1+2+4=7.  7 means all 3 of the above. 6 means 2 and 4. 3 means 1 and 2. Just add them
    together.  There is no way to end up with a number that could mean two different 
     combinations.
  Red, Green and Blue are each from 0 to 255. 255,255,255 is white, 0,0,0 is black.
  ** There is currently not a command to add or remove these from inside the game.  One will
     probably be added soon.  The plugin will automatically re-load the list from the .ini
     when you modify and save the .ini.
- Seeing as how the mouse functions perfectly fine in full screen mode, I've forced the cursor
  to display the same as it would in UI-visible mode.  The only difference is the item is not
  displayed on your cursor.  With MQ2HUD and the "CursorItemName" example, you could have it
  show the name of the item attached to your cursor in full screen mode (use type 6 if you
  want it to follow your cursor in full screen mode only).
- Added custom spawn captioning.  Set them in MacroQuest.ini [Captions].  Empty the setting 
  to make it use EQ's default.  By default our player caption is slightly different -  
  it shows their guild status if they are officer or leader of a guild.  Pet captions are a
  little different also - it will display the name of its master if it is a player's pet.
  Use "\n" to mean a new line when setting captions.
- Added MQ2Data Top-Level Object:
  spawn NamingSpawn: Spawn currently being captioned.  NULL when not captioning.
- Added/changed MQ2Data members:
  bool spawn.LFG: LFG?
  bool spawn.Linkdead: Linkdead?
  bool spawn.Trader: Trader?
  bool spawn.AFK: AFK?
  string spawn.AATitle: Actual AA title (e.g. Sage, Impresario, etc)
- MQ2Map adds Top-Level Object: spawn MapSpawn: If your cursor is on a spawn on the map, this is it
- Fixed ticks.Time

02 May 2004 by Lax:
- Added a popup box to the crash detected hook, explaining that the user should visit the
  MQ2::Bug Reports forum.
- Removed EasyDetour and EasyClassDetour.  There is a single replacement for the both of them
  called EzDetour.  EzDetour(offset,detour,trampoline).  Examples (which are all over in MQ2Main
  and plugins):
  EzDetour(ProcessGameEvents,Detour_ProcessGameEvents,Trampoline_ProcessGameEvents);
  EzDetour(CEverQuest__EnterZone,CEverQuestHook::EnterZone_Detour,CEverQuestHook::EnterZone_Trampoline);
- Renamed the REVERSE_DETOUR functions to reduce confusion.  These really had nothing to do
  with detours.  What it really does is lets you call a function at a given offset.  
  So, they are now:
  FUNCTION_AT_ADDRESS(function,offset)
  FUNCTION_AT_VARIABLE_ADDRESS(function,variable)
  FUNCTION_AT_VIRTUAL_ADDRESS(function,offset)
- Fixed small issue in MQ2Data parser
- Fixed /memspell not finding some spells correctly (Heroic Bond for example)
- MQ2 will now fix the string table by removing extraneous spaces from the end of strings,
  since EQ isnt smart enough to do it itself.  This fixes issues such as finding the AA
  "Bestial Alignment", which has two spaces after it in eqstr_us.txt.  
  ${AltAbility[Bestial Alignment]} previously did not work because of this issue.  It works
  now because of this fix.
- Added MQ2Data types
  raid, raidmember   (see reference for members)
- Added MQ2Data Top-Level Objects
  raid Raid: Raid you're in...
- Added/changed MQ2Data members
  string ticks.Time: Time in the form hh:mm:ss (if there are no hours, the form will be mm:ss)
  int skill.MinLevel: Minimum level for your class
  int skill.StartingSkill: Base skill level for your class
  int skill.SkillCapPre50: Skill cap pre-50 for your class
  int skill.SkillCapPost50: Skill cap post-50 for your class
  int character.FreeInventory: Count of free inventory spaces
  int character.FreeInventory[n]: Count of free inventory spaces of at least this size (giant=4)
  int character.LargestFreeInventory: Size of largest free inventory space
- LaxColor is now defaulted to off since most people now realize that it exists.  If you wish
  to turn it back on, LaxColor=1 in MacroQuest.ini.
- Fixed spawn.NearestSpawn issues
- Fixed ${Ini} absolute path issues
- Fixed some other issues that were brought up on the boards

30 Apr 2004 by Lax:
- Added MQ2Data members
  int macro.Params: Number of parameters to current sub

29 Apr 2004 by Lax (even more):
- Added option so that MQ2Data errors and normal errors (but not syntax errors that show
  /usage etc) will dump the macro stack.  This is ON by default.  To turn it off, set
  AllErrorsDumpStack=0 in MAcroQuest.ini section [MacroQuest]
- Added option so that the above errors will end the macro, aka makes them "fatal".  This is
  OFF by default. To set this, set AllErrorsFatal=1 in MacroQuest.ini section [MacroQuest]
- If for some reason you need to clear all GLOBAL SCOPE variables,
  /deletevar * global
  will do the trick.  For example, after you try to run an old macro and then realize the
  global scope changed and /zapvars no longer exists, but you can't make the variables outer
  scope because theyre already in global scope and you dont want to delete them all one by
  one....
- Perfected Multi-dimensional arrays

29 Apr 2004 by Lax (more):
- Fixed Multi-dimensional arrays

29 Apr 2004 by Lax:
- Fixed SPAWNINFO structure.
- NOTICE: Some MQ2Data members are currently MIA.  They may come back soon.  These include:
  character.Hunger
  character.Thirst
  character.GukEarned
  character.MMEarned
  character.RujEarned
  character.TakEarned
  character.MirEarned
  character.LDoNPoints

27 Apr 2004 by Lax (more):
- MQ2DataVars is now default.  Share and enjoy, share and enjoy!
- Fixed timer type member availability
- Added MQ2Data type: altability
- Added MQ2Data Top-Level Objects:
  altability AltAbility[n]: Alt ability by number
  altability AltAbility[name]: Alt ability by name
- Changed/Added MQ2Data Members:
  float spawn.MaxRange: Max distance from this spawn for it to hit you
  float spawn.MaxRangeTo: Max distance from this spawn for you to hit it
  int character.AltAbility[n]: Alt ability rank by number
  int character.AltAbility[name]: Alt ability rank by name
  bool character.AltAbilityReady[n]: Alt ability readiness by number
  bool character.AltAbilityReady[name]: Alt ability readiness by name
  int character.AltAbilityTimer[n]: Alt ability reuse time (seconds) left by number
  int character.AltAbilityTimer[name]: Alt ability reuse time (seconds) left by name
  spell character.CombatAbility[n]: Combat ability by number in your list (not same as others lists!)
  int character.CombatAbility[name]: Combat ability number in your list by name (not same as others lists!)
- Added an option to MQ2Map:  The "TargetMelee" mapfilter when set to 1 will draw a circle 
  representing how close to this spawn you must be to hit it.  Set to anything but 0 or 1 
  will draw a circle representing how close to this spawn you must be for it to hit you.
- Added some flavor for error messages.  Set LaxColor=0 in MacroQuest.ini [MacroQuest] to
  disable.  It's on by default or it wouldn't be as fun.

27 Apr 2004 by Lax:
- spawn.MaxRange now uses the proper melee range algorithm
- Fixed a crash bug in the Ini TLO
- Added proper relative/absolute path detection to /ini
- Fixed window.Checked
- Added MQ2Data members:
  int window.Style: Window style code
  bool window.Enabled: Enabled?
  bool window.Highlighted: Highlighted/mouse over?

26 Apr 2004 by Lax:
- Various error messages have been updated to be more specific.
- Fixed "outer" scope not being cleared by /endmacro.  Removed /zapvars in MQ2DataVars 
  since all it did was clear the outer scope.  It's no longer needed because the old global
  scope is separated into two scopes in MQ2DataVars.
- Fixed FindInvSlotForContents function (used in item.InvSlot.  item.InvSlot will no longer
  give NULL for valid items in your inventory/bank)
- Sub parameters (including those for events) are now allowed to have a type other than 
  string, when MQ2DataVars is enabled, like so:
  Sub MySub(int A, string B, float C)
- Fixed out-of-bounds by 1 crash in MQ2DataVar arrays
- MQ2FPS now allows you to disable the framerate display with /fps off (/fps on to enable again)
- MQ2EQIM feature set adjusted.  Now keeps your list of buddies (per character) and the last
  time they were seen online or on eqim (by any character).  Your friends list is automatically
  added as buddies.  A member was also added to the "buddy" type EQIM adds, time buddy.LastSeen.
- ${Ini} will allow either relative or absolute paths.  Also slightly modified what it gives
  you when you try to get a list of keys and supply a default (previously it would ignore
  the default and give NULL if there was no list).
- Improved parsing of " and ] within MQ2Data indexing.
  ${String["hi"]}: hi
  ${String["hi","hi"]}: hi,hi
  ${String[""hi""]}: "hi"
  ${String[hi"hi"hi]}: hi"hi"hi
  ${String[[MQ2] - Hi]}: [MQ2] - Hi
  ${String["""]}: "
- MQ2BzSrch plugin is now updated for MQ2Data.
  MQ2Data reference for MQ2BzSrch (because it's a plugin, not in main reference)
  -------
  Types added- bazaar, bazaaritem
  TLO's added- bazaar Bazaar: Bazaar search info
  ---
  bazaar 
  Members:
  ...bool Done: Search complete?
  ...int Count: Result count
  ...bazaaritem Item[n]: Result info by index (1-based)
  To String: Same as Done
  ---
  bazaaritem 
  Members:
  ...string Name: Item name
  ...spawn Trader: The guy selling it
  ...int Price: Price the guy is selling it for
  ...int Quantity: Number of this item this guy has
  ...int ItemID: The item's ID number
  ...int Value: Value of the item?
  To String: Same as Name
  -------
  
25 Apr 2004 by Lax (revision C changes):
- Fixed merchant.Item[=name] and corpse.Item[=name]
- Fixed character.PctEndurance
- Fixed problems with tabs in macros, and also with leading and trailing whitespace
- MQ2DataVars is READY.  Keep an eye out for important announcements about this!
- Added MQ2Data types for MQ2DataVars: array, timer

25 Apr 2004 by Lax (even more):
- Hopefully fixed crash caused by fixing the "LastCommand" stuff...
- Added MQ2Data Members:
  int character.MaxEndurance: Max endurance
  int character.PctEndurance: Percent endurance

25 Apr 2004 by Lax (more):
- Fixed spawn.NearestSpawn
- Changed buff.ID so that it gives the song # or buff # instead of the spell's ID

25 Apr 2004 by Lax:
- Fixed once and for all the /itemnotify and /notify crashes
- Fixed the rendering rate defaults (will no longer flicker like a strobe light ;)

23 Apr 2004 by Lax (more):
- Added MQ2Data Type:
  skill (see reference for members)
- Added MQ2Data Top-Level Objects:
  string GroupLeaderName: group leader's name (works even if they are out of zone)
  spawn GroupLeader: group leader (only works if they are in zone)
  skill Skill[n]: Skill by number
  skill Skill[name]: Skill by name
- Added/Changed MQ2Data Members:
  spawn spawn.NearestSpawn[search]: Find the nearest spawn matching this search, to this spawn (most efficient on yourself)
  spawn spawn.NearestSpawn[n,search]: Find the nth nearest spawn matching this search, to this spawn (most efficient on yourself)
  string window.List[n]: Get the first-column text for the nth item in a list box.  Example: ${Window[TradeskillWnd].Child[RecipeList].List[1]}
  int window.List[text]: Find an item in a list box by partial match (use window.List[=text] for exact)  Example: ${Window[TradeskillWnd].Child[RecipeList].List[=Inky Shadow Silk]}
  int string.Count[char]: Count the number of occurrences of a particular character in the string
  bool window.Checked: Checked? (useful for buttons)
  string string.Left[-length]: The left ("all but" length) of the string.. Left[-1] of "Left" will be "Lef"
  string string.Right[-length]: The right ("all but" length) of the string.. Right[-1] of "Left" will be "eft"
  bool character.RangedReady: Ranged attack ready?
  bool character.AltTimerReady: Alternate timer ready? (Bash/Slam/Frenzy/Backstab.  Note that AbilityReady works fine with most of these)
  int macroquest.Running: Running time of current MQ2 session, in milliseconds
- Fixed AbilityReady for the alternate timer abilities (Bash, Slam, Frenzy, Backstab, possibly others)
- Fixed /ctrlkey /shiftkey and /altkey.  They would sometimes "stick" the key down.
- Added a notification to /notify "listselect", used to select the nth item in a list box.
  Example: /notify TradeskillWnd RecipeList listselect 1
  Use 0 to clear your selection.
- ${Group[0]} is now the same as ${Me}.  Group members are still 1-5.
- Added command to MQ2FPS:
  /render <fg|bg> <#|~#>
  Sets the foreground or background rendering rate.  This is how many out of n frames MQ2FPS
  will allow to be drawn.  You keep moving full speed, the client responds to mouse or keys,
  the UI is still drawn... but, the world itself will not be drawn as often.
  Use with ~ to draw n-1 out of n frames, or without to draw 1 out of n frames.
  e.g. /render bg ~3 will draw 2 out of 3 frames.  /render bg 3 will draw 1 out of 3 frames.

23 Apr 2004 by Lax:
- Changed top #turbo to 40, still defaults to 20
- Fixed Ini Top-Level Object again
- Fixed "enviro" slots so that they work for enviro1-10 not just 1-8

22 Apr 2004 by Lax:
- Readme.html has been removed from the zip by request of its author.  It is being worked on
  and will return.
- /selectitem GONE
- /finditem GONE
- /click functionality has been SEVERELY reduced.  It will now function given an x,y,
  and on an item or spawn (target).  Upgrade to /notify for UI interaction.
  /notify <window> <button screen id> <notification>
  example:
  /notify LootWnd DoneButton leftmouseup
  Window names and control ScreenID's are found in the XML files, and are NOT screwed up
  by custom interfaces (unless your UI does not have the button)
- Fixed item slot name discrepancies.  What was previously "primary" and "secondary" is
  "mainhand" and "offhand".  It was one thing in some places, but not in others.  Should
  be all the same now.
- Underscores(_) are again valid in variable names
- Added "STUN" to spawn.State
- Fixed Ini Top-Level Object
- ** Added/changed MQ2Data type members
  string macroquest.Error: Last normal error message (replaces $getlasterror but will NOT have the old values!)
  string macroquest.SyntaxError: Last syntax error message (usage: /blahblah)
  string macroquest.MQ2DataError: Last MQ2Data parsing error message
  spawn spawn.TargetOfTarget: Target of target (May only work in "Me": ${Me.TargetOfTarget.PctHps}, etc)
  int item.BuyPrice: Price to buy this item at this merchant
  int item.SellPrice: Price to sell this item at this merchant
  item merchant.Item[name]: Finds an item by partial name at this merchant (use merchant.Item[=name] for exact)
  item corpse.Item[name]: Finds an item by partial name in this corpse (use corpse.Item[=name] for exact)
  float character.PctGroupLeaderExp: Group leadership exp as a %
  float character.PctRaidLeaderExp: Raid leadership exp as a %- bool character.Stunned: Stunned?
  bool spawn.Sitting: Sitting?
  bool spawn.Standing: Standing?
  bool spawn.Ducking: Ducking?
  bool spawn.Binding: Binding wounds?
  bool spawn.Feigning: Feigning?
  bool spawn.Invited: Invited to group?
  bool class.PetClass: Pet class? (shaman, necromancer, mage, beastlord)
  bool class.PureCaster: Pure caster? (can gate!)
  bool class.CanCast: Can usually cast? (not melee only)
  bool class.DruidType: Druid/Ranger?
  bool class.ShamanType: Shaman/Beastlord?
  bool class.NecromancerType: Necromancer/Shadowknight?
  bool class.ClericType: Cleric/Paladin?
  float math.Sqrt[formula]: The square root of formula
- New MQ2Data type "plugin"
- New TLOs
  plugin Plugin[name]: Finds plugin by name
  plugin Plugin[n]: Plugin by number, starting with 1 and stopping whenever the list runs out of plugins.
- Fixed LastSpawn[n] and LastSpawn[-n], also added them to reference.
- New command: /combine <pack> - hits combine on this container
- New command: /drop - drops item on cursor
- New command: /clearerrors - clears each of the "last errors"

21 Apr 2004 by Lax:
- Fixed if/newif

20 Apr 2004 by Lax:
- /if is now GONE.  /if is now the same as what /newif was.  /newif is aliased to /if.
- /sendkey and /press are now GONE.  Please update to /keypress, which as of 15 Apr 2004 allows
  pressing key combinations as well as the actual command.  Example:  /keypress alt+f
- /filter macros will now hide the output of /endmacro (if successful) and /zapvars (always)
- MQ2Labels updated for MQ2Data
- Fixed time.Year and time.Date
- Fixed charm invslot (number 0)
- Fixed ${If[]} handling of conditions
- Fixed FindItemCount to give the number of individual items rather than stacks
- MQ2EQIM plugin (which notifies you when someone on your EQIM buddy list changes) now keeps
  track of your buddy list and adds a MQ2Data type and Top-Level Objects:
  ** buddy type
  Members:
  ...string Name: Buddy's name (may be fennin.Name or just Name, depending on how you added them)
  ...string Status: "Removed from list",  	"Offline",	"EQIM",	"EQIM (AFK)",	"Unknown Status(4)",	"Playing",	"Playing (AFK)"
  ...int StatusID: Numeric representation of the above (0,1,2,3,4,5,6)
  To String: Same as Name
  ** Top-Level Objects
  buddy Buddy[name]: Info on buddy with this name
  buddy Buddy[n]: Buddy with this index number in the system
  int Buddies: Size of the buddy index (will not necessarily be equal to the number of buddies, but n in Buddy[n] will never exceed this number)
- Added Top-Level Object:
  int FindItemBankCount[name]: Count of items in bank by partial name match.  FindItemBankCount[=name] will find exact
- Changed "character" member "PlatShared" to "PlatinumShared"

19 Apr 2004 by Lax:
- ** MQ2DATA PHASE TWO ** If something is missing from MQ2Data it's because you never opened
  your damn mouth.  If you need something in MQ2Data whether it was previously available or
  not, speak up.  You're on your own if you want to figure out how to enable MQ2Parm at this
  point, good luck (I'm making it difficult on you so you will get your ass in gear)!  The
  readme is not yet updated.
- Fixed alerts being missing from SpawnMatchesSearch.  They worked in some spawn searches but
  not others.
- character.Inventory now uses the same numbering as InvSlot
- Added/changed MQ2Data members
  invslot invslot.Pack: Container that must be opened to access the slot with /itemnotify
  int invslot.Slot: Slot # inside that pack
  string invslot.Name: For inventory slots not inside packs, the slot name
  string spawn.ConColor: GREEN, LIGHT BLUE, BLUE, WHITE, YELLOW, RED
  int character.PetBuff[name]: Finds slot with this spell name
  spell character.PetBuff[n]: The spell in this slot (1-29)
  int character.GroupLeaderExp: Group leadership exp
  int character.GroupLeaderPoints: Group leadership points
  int character.RaidLeaderExp: Raid leadership exp
  int character.RaidLeaderPoints: Raid leadership points
  int character.Platinum: Platinum
  int character.Gold: Gold
  int character.Silver: Silver
  int character.Copper: Copper
  int character.PlatinumBank: Platinum in bank
  int character.GoldBank: Gold in bank
  int character.SilverBank: Silver in bank
  int character.CopperBank: Copper in bank
- New MQ2Data Top-Level Objects
  int FindItemCount[name]: Count of items on character by partial name match.  FindItemCount[=name] will find exact
- MQ2FPS plugin now adds these Top-Level Objects (these are NOT in the reference because they
  are from a plugin not built in):
  float FPS - Current frames per second
  int MaxFPS - Current max frames per second
  bool Foreground - Is this session in the foreground?

17 Apr 2004 by Lax:
- Fixed "window" data type's "To String"
- Fixed all VC6 project files so PDB/MAP files are produced for debugging
- New MQ2Data type
  invslot - Inventory slot (not necessarily "in your inventory", this may be in merchant window, bank, etc)
  see reference for current list of members.
- Added/changed MQ2Data members
  invslot item.InvSlot: Inventory slot for this item
- New MQ2Data Top-Level Objects
  invslot InvSlot[name]: Inventory slot by name
  invslot InvSlot[#]: Inventory slot by number
  item FindItem[name]: Find item on character by partial name match.  FindItem[=name] will find exact
  item FindItemBank[name]: Find item in bank by partial name match.  FindItemBank[=name] will find exact
  item SelectedItem: When using a merchant, etc. this is the selected item
  
15 Apr 2004 by Lax:
- Fixed /destroy crash
- Fixed "random" crash on zoning with MQ2Map loaded, due to a bug in the recently revised ConColor
- Fixed /cast issue casting "Bane" instead of "Bane of Nife" etc
- Fixed spell manager structure
- Fixed /doortarget id #, which would invariably crash
- Fixed and changed /keypress so that it also accepts key combinations, and will not crash no matter how hard you try.
  /keypress with key combinations will have the same effect as /keypress using the command name, it will not
  type the key into the chat window.  If you need to type into a window specifically (chat windows, social edit, etc)
  /keypress <key> chat
  example: /keypress e chat
  Note that you cannot use both hold and chat, and chat is only valid for the key not a command name.
  ** /sendkey and /press will give a warning the first time per session they are used that they are
     now completely obsolete and you should switch to /keypress.  they will be removed soon.
- Fixed and tested "heading" type's "To String"
- /newif will no longer quietly execute the "false" branch when it fails to parse the conditions.  The conditions
  after parsing MQ2Data/MQ2Parm will be displayed in an error message, and the macro will end.
- Other minor issues fixed

14 Apr 2004 by Lax:
- Fixed MQ2KeyBinds
- Fixed MQ2ChatWnd.ini

13 Apr 2004 by Lax:
- Fixed ! in Calculate (worked most of the time, but not in some special cases)
- Fixed heading's "To String" to give the correct heading.  heading.Name/heading.ShortName were fine
- Fixed time.Time12 to be 12 hour (oops)

9 Apr 2004 by Lax:
- Fixed != in Calculate (and therefore in /newif, math.Calc, etc), and implemented ! as
  the unary NOT operator.  This gives 0 if your calculation is non-zero, or 1 if your
  calculation is zero.
- MQ2Data changes:
  -- Swapped Y and X back to being backwards-backwards or backwards-forwards, or whatever they
     originally were
  -- Added "NWU" coordinates (North/West/Up), the three positively oriented directions in EQ.  
     Spawns also have a shortcut for SED (South/East/Down).  All type member names involving 
     XYZ have a NWU complement (none necessary for the "index" bracketed part, of Heading[y,x] 
     for example)
  -- Fixed character.AbilityReady
  -- Fixed item (TO STRING)
  Top Level Objects
  * spawn LastSpawn: The last spawn chronologically.
  * spawn LastSpawn[n]: The nth from last spawn.. LastSpawn[1] is the LastSpawn.. LastSpawn[2] is 2nd from last, LastSpawn[3] is 3rd from last, and so on
  * spawn LastSpawn[-n]: The nth from FIRST spawn.. LastSpawn[-1] is you, LastSpawn[-2] is the second spawn, LastSpawn[-3] is the third spawn, and so on
  Additions/Changes to existing types:
  * heading Heading[y,x]: Heading from player's current position to y,x
  * float math.Distance[y,x,z:y,x,z]: Performs distance calculations in 1, 2 or 3 dimensions.
    Any not given will default to your character's current x y or z.
  * bool item.Stackable: Stackable?
  * bool merchant.Open: Merchant open?
  * float merchant.Markup: The amount used to calculate item values on this merchant 
    (Markup is what your charisma, faction, etc change).  Markup*Cost=Merchant's sell price.
    Cost*(1/Markup)=Your sell price. Markup of 1.05 is highest no matter what, so there might
    not be any actual cap based on charisma.
  * int merchant.Items: Item count on the merchant
  * item merchant.Item[n]: nth item on the merchant  
  * bool corpse.Open: Corpse open?
  * int corpse.Items: Item count on the corpse
  * item corpse.Item[n]: nth item on the corpse
  * item character.Inventory[slotname]: Item in this slot (inventory slots only, but 
    same names as /itemnotify)
  * bool character.SpellReady[name]: Gem with this spell name ready for cast?
  * bool character.SpellReady[slot]: Spell in this gem ready for cast?

8 Apr 2004 by Lax (more)
- MQ2Data changes:
  Top level objects:
  * heading Heading[x,y]: Heading from player's current position to x,y
  Additions/Changes to existing types:
  * int item.Container: The number of slots, if this is a container
  * int item.Items: The number of contained items, if this is a container
  * item item.Item[n]: The item in this slot, if this is a container
- Item links were apparently not working in the MQ2ChatWnd, nobody reported this until now.
  Thanks people who noticed it and never reported it!  Anyway, item links in MQ2ChatWnd are
  simply stripped until I figure out the issue.  Item links in MQ2Chat still work fine.

8 Apr 2004 by Lax
- MQ2Data changes:
  - macro.Defined is now a top level object instead
    bool Defined[name]
  - Fixed all variable parsing when MQ2Parms is not on
- Fixed a major problem with /newif, should now "work as intended"
- Fixed (I think) problem with /face which let the macro continue before facing the target
  completed

7 Apr 2004 by Lax
- Changes to MQ2Data system:
  *** NOTICE: All X and Y coordinates used by the MQ2Data system have been REVERSED.
      Internally, MQ2 stays the same as it has been forever.  However, you will now
      notice that "/echo ${Me.X}, ${Me.Y}, ${Me.Z}" will give the same order as seen
      by typing /loc
  Top level objects:
  * currentzone Zone: Zone information about current zone
  * zone Zone[id]: Zone information for zone with this id
  * zone Zone[shortname]: Zone information for zone with this name
  * time Time: Your local time in real life
  * time GameTime: Game time
  * type Type[name]: Info about the type with this name
  * heading Heading[degrees]: Forms a heading type in the given direction in degrees
  * string Ini[filename,section,key,default]: Reads from an ini file.  section, key, 
    and default do not need to be given.  section and key may be set to -1 to skip them 
    and give a new value.  If section or key are not given, multiple values are read...
  Additions/Changes to existing types:
  * bool string.Equal[text]: Strings equal? Case does not count...
  * bool string.NotEqual[text]: Strings not equal? Case does not count...
  * bool string.EqualCS[text]: Strings equal? Case counts!
  * bool string.NotEqualCS[text]: Strings not equal? Case counts!
  * string string.Arg[n,separator]: Gets nth argument using separator as the separator (single character). If separator is not given, defaults to space
  * zone character.Bound: The zone you are bound in
  * int character.Skill[name]: Skill level of skill with this name
  * int character.Skill[n]: Skill level of skill with this index
  * int character.Ability[name]: Doability button number this skill name is on
  * string character.Ability[slot]: Skill name assigned to this doability button
  * bool character.AbilityReady[name]: Ability with this name ready?
  * bool character.AbilityReady[slot]: Ability on this button ready?
  * spell character.Book[slot]: Spell assigned to this slot in your spellbook
  * int character.Book[name]: Spell slot the spell with this name is assigned to in your spellbook
  * float (TOSTRING): Changed to ###.## instead of .###
  * heading spawn.Heading: (changed to "heading" type)
  * heading spawn.HeadingTo: (changed to "heading" type)
  * heading switch.Heading: (changed to "heading" type)
  * heading switch.DefaultHeading: (changed to "heading" type)
  * heading switch.HeadingTo: (changed to "heading" type)
  * heading ground.Heading: (changed to "heading" type)
  * heading ground.HeadingTo: (changed to "heading" type)
  New types:
  * currentzone
  * time
  * heading
  * type
  *** Special handling is used for casting to "type", such that the new data is equal 
      to the old type, and the new type is "type".
  -- Fixed type casting so that members of the new type may be accessed as expected (this
     was incorrectly ending the parsing at the type cast until now)
- ConColor changed to take 1 parameter
- FindMount tweaked/inlined
- Changed the "RunNextCommand" to remain to TRUE until set to FALSE, so only cases where
  the next command should not be run need to be explicitly set (this should increase
  macro performance in most cases, but some commands may need to be correctly updated)
- /declare will no longer spam you if the variable previously existed.  If the variable
  previously existed, it will be quietly deleted and replaced by the new one.  This might
  cause some people problems but they will learn quickly ;)
- New command /deletevar <name> - Deletes an existing variable.  Gives a message if the
  variable did not exist, but no message if the variable did exist.
- /notify modified to work for clicking off buffs and other things it would not previously
  work for.  However, items must still be clicked using /itemnotify.  /notify now accepts
  all of the same clicks as /itemnotify (leftmouse,leftmouseup,leftmouseheld,etc)

31 Mar 2004 by Lax (more)
- Fixed character member PctExp
- Added character members:
  float PctAAExp: % AA exp..
  bool Moving: Moving? (includes the mount hack so you're not constantly "moving" when sitting on a mount)
- Added spawn members:
  bool Swimming: Swimming?
  bool Underwater: Underwater?
  bool FeetWet: Feet at least wet?
  int Animation: Animation id
  int Holding: Holding id
  float Look: Look angle
- Added "gm" to standard searchspawn, works with anything that uses that including MQ2Map commands,
  /target, ${Spawn[search]}, etc
- Modified the if block parsing in FailIf so that it only looks for } and { as the first and last characters on a line

31 Mar 2004 by Lax
- Fixed /newif so variables/parms/data get parsed
- string.Mid and string.Find are now 1-based instead of 0-based
- Calculate (and stuff that uses it) now supports parentheses, and will treat 
  "NULL" and "FALSE" as 0, and "TRUE" as 1
- Added float math.Distance[x,y,z:x,y,z]: Performs distance calculations in 1, 2 or 3 dimensions.  Any not given will default to your character's current x y or z.

30 Mar 2004 by Lax
- Added a distance-sorted spawn list in MQ2Main
- Added MQ2Data top-level object:
  * spawn NearestSpawn[n]: The nth nearest spawn
  * spawn NearestSpawn[search]: The nearest spawn matching this search (same as Spawn[search])
  * spawn NearestSpawn[n,search]: The nth nearest spawn matching this search

29 Mar 2004 by Lax (even more)
- Added /ctrl /alt and /shift commands:
  /ctrl <command>
  /alt <command>
  /shift <command>
  These execute a command while telling the window manager that a key is pressed.  This can
  be used in conjunction with /itemnotify to pick up a stack or a single item... example:
  pick up a single item from a stack: /ctrl /itemnotify pack1 leftmouseup
  pick up an entire stack: /shift /itemnotify pack1 leftmouseup
  Because they execute a command, they can also be used together, as in 
  /ctrl /alt /shift <command>...
- Fixed character.Buff[slot]
- Fixed character.Gem[name]
- Fixed If top level object crashing on false
- Added MQ2CHAT bind to start typing in the MQ2 Chat Window, also added MQ2CSCHAT bind which
  gets forced to bind as "/" at character select, and does not exist while in game.
- Added /timed command, which executes a command after a specified duration (in deciseconds like pause)
  /timed <deciseconds> <command>
  Example: /timed 10 /echo 1 second has passed
  Note: This does NOT "pause" successive commands.
- Added /newif command, which ONLY does numeric compares -- use MQ2Data string comparison to 
  turn string compares into numeric compares -- and note that this means you do NOT use the "n"
  stuff.  This will replace the current /if command in MQ2Data phase 3.  Until then, you may 
  "/alias /if /newif" if you wish to use newif exclusively.
  /newif <calculations> <command>
  <calculations> gets evaluated down to a single term from however many terms there are (You
  may use && and || freely.) *BE WARNED* that in calculations parentheses are still not
  officially supported.. that's on my TODO list.
  

29 Mar 2004 by Lax (more)
- Added < <= == >= > && & || | to the Calculate function (someone rewrite if please... 
  fail if zero, fall through if non-zero)
- MQ2Data updates:
  * Added top level object: string If[conditions,whentrue,whenfalse]
  * Added type corpse, top level object: corpse Corpse
  * Added top level object: item Cursor
  * Added string members:
    - int Compare[text]: -1 if the string is alphabetically before text, 0 if equal, 1 if after. Case does not count.
    - int CompareCS[text]: -1 if the string is alphabetically before text, 0 if equal, 1 if after. Case counts.
  * Lots of others...
- Fixed MQ2Parm slowness from debug spew if MQ2Data is also in use
 
29 Mar 2004 by Lax
- Phase 1 of MQ2Data system rollout begins! Please start updating macros, custom uis, plugins,  
  etc to use this sytem.
  To use MQ2Data modify these MQ2Main lines
   #define USEMQ2PARMS
   //#define USEMQ2DATATYPES  
  Uncomment the USEMQ2DATATYPES #define to allow MQ2Data parsing.  If you wish to disable
  MQ2Parms parsing, comment the USEMQ2PARMS #define.  You may use both or just one.
  See this thread to see how MQ2Parms will be phased out 
      http://macroquest.sourceforge.net/phpBB2/viewtopic.php?t=6008
  See this thread to see how to use MQ2Data instead 
      http://macroquest.sourceforge.net/phpBB2/viewtopic.php?t=6022
  Specific information for plugins to add types and Top Level Objects will be available soon
- Moved a few functions to MQ2Inlines.h
- Fixed a performance issue in GetSpellByName
- Trying to detour an already detoured address will now fail instead of crashing
- Added some offsets to eqgame.h (mostly CListWnd), removed some offsets that were virtual
  functions and probably not used anyway.  If you are adding basic UI offsets to your plugins
  ask to have them in eqgame.h please (people were doing this with CListWnd offsets).

23 Mar 2004 by Amadeus
- Removed DisplayZem function and calls and $zone(ZEM)  ...rest in peace.

20 Mar 2004 by Lax
** eqgame.ini is no longer used/needed by MQ2!  All offsets have been integrated 
   into eqgame.h.  The client DATE/TIME are in eqgame.h also.
- Fixed /itemnotify
- Renamed the "SpawnListTail" stuff to "LocalPlayer", added "ControlledPlayer".  These are
  both EQPlayer and correspond to .. you.  If you're on a mount, the one thats moving is
  ControlledPlayer. ** Things that use PCHARINFO to get your spawn should be phased out.
- Added /docommand
- Added /dosocial
- Made some minor improvements in MQ2UserVars

16 Mar 2004 by Lax (after patch)
- Changed exe date/time checking to use the date/time strings compiled into the exe

16 Mar 2004 by Amadeus
- Updated the Spell Information Window with code provided by Koad in his Spell Search
  Plugin.

16 Mar 2004 by Lax
- Fixed remaining issues with binds and custom binds

15 Mar 2004 by Lax (more)
- Added remaining, un-named EQ binds to the MQ2 bind system.  Some are still unknown, and
  some I'm surprised exist enabled in the client in the first place, and you should be 
  careful with those...
- Added /dumpbinds command.  Example: "/dumpbinds bill" will dump all current binds to
  Configs\bill.cfg to be loaded later.
- Added "/filter mq [on|off]", which prevents anything at all from being displayed by MQ2
- Added "/squelch <command>", which does the following:
  * Step 1: turns mq filter off
  * Step 2: executes the command
  * Step 3: turns mq filter back to the state it was in before step 1
  In other words, executes a command and prevents any output from the command
  
  ** It is recommended that you do this in your .CFG files that you dont want to see output from
  /squelch /filter mq on
  < do your stuff here>
  /squelch /filter mq off
- I promise this is my last update for a few days at least!

15 Mar 2004 by Lax
- Fixed some bugs with binds and the MQ2CustomBinds plugin
- Modified bind system so that the same key can be bound to an MQ2 bind and an EQ bind and
  both will work
- Added a system to run .CFG files, similar to quake .cfg files I suppose.  The file must
  contain commands the same as you would use them normally.  Each command will be executed
  in order, there are NO macro blocks, events, etc, in a cfg file.
  * CFG files may be present in <release>\Configs\, in <release>\, or potentially in the
    EverQuest directory.  Note that <release> would be the same as wherever your Macroquest.ini is.
  * Added /loadcfg <filename> command.
  * Plugins can use LoadCfgFile(filename)
  * Configs that are automatically loaded:
		AutoExec.CFG - Executed on the first pulse
		CharSelect.CFG - Executed when you are put at character select
		<server>_<character>.CFG - Executed when this character enters the world
		<mapshortname>.CFG - Executed when you zone into this zone
		<pluginname>-AutoExec.CFG - Executed when this plugin is loaded (after its initialization is complete)

		Examples of file names:
		tallon_lordsoth.cfg - character
		oot.cfg, soldungb.cfg, soldunga.cfg, take.cfg - maps
		MQ2Map-AutoExec.CFG, MQ2ChatWnd-AutoExec.CFG - plugins 

14 Mar 2004 by Lax
- Added /ranged [#] command.  Run with no parameters to do a ranged attack on your current
  target, or with a spawn ID to do a ranged attack on that spawn.
- Modified MQ2Spawns, hopefully this will solve the remaining stack corruption problems...
- Introduction of the new MQ2 key binding system
  * New command /bind <list|eqlist|[~]name <combo|clear>>
  * "/bind list" will list all MQ2 binds
  * "/bind eqlist" will list all non-MQ2 binds
  * The following work on both MQ2 and EQ binds the same way
  * "/bind <name> <combo>" will set a bind's normal key combo (example: "/bind forward e")
  * "/bind ~<name> <combo>" will set a bind's alternate key combo (example: "/bind ~forward up")
  * Combos use any combination of "alt", "shift" and "ctrl" plus a key.  Specific keys follow the 
    same rules as the /sendkey and /press 
    Example combos:
    shift+n
    alt+shift+f1
    -- Always separate with +'s or spaces.
  * Note that "clear" combo is to clear the bind, and also note that changing EQ binds will not
    immediately update the display in the options window.  Change the bind list selection in the
    options window to see the updated keys.
  * /keypress works the same way with all MQ2 and non-MQ2 binds
  * API additions include:
     BOOL AddMQ2KeyBind(PCHAR name, fMQExecuteCmd Function);
     BOOL SetMQ2KeyBind(PCHAR name, BOOL Alternate, KeyCombo &Combo);
     BOOL RemoveMQ2KeyBind(PCHAR name);
     BOOL ParseKeyCombo(PCHAR text, KeyCombo &Dest);
     PCHAR DescribeKeyCombo(KeyCombo &Combo, PCHAR szDest);

     typedef VOID    (__cdecl *fMQExecuteCmd)(PCHAR Name,BOOL Down);
     -- Note: This function will be called when the key goes down as well as up.  If you create a
        MQ2 bind function make sure to account for this.  The "Name" parameter is the name of the
        bind
  * /hotkey command is now removed, the new bind system will take over
- MQ2CustomBinds plugin is now live.  This plugin allows you to specify custom commands to execute
  on a key combination.  There may be a command for the keys being pressed (down), and another for them
  being released (up).
  * /custombind <list|add <name>|delete <name>|clear <name><-down|-up>|set <name><-down|-up> <command>>
  * "/custombind list" will list all of your custom binds names and commands (the key combinations must be set using /bind)
  * "/custombind add <name>" will add a new bind name for use here, with /keypress, /bind, etc.
  * "/custombind delete <name>" will remove a custom bind
  * "/custombind clear <name><-down|-up>" will clear a specific command for a custom bind.  If up or down is not specified, defaults to down.
  * "/custombind set <name><-down|up> <command>" will set a specific command for a custom bind.  If up or down is not specified, defaults to down.
  * Example usage (NOTE: MQ2's very first bind command is "RANGED" so you do not need to do this, but for example...)
    /custombind add mybind
    /custombind set mybind /ranged
    /bind bind n
    -- To set the real RANGED bind, do "/bind ranged <key>"
   
13 Mar 2004 by Lax
- Added /multiline <delimiter> <command[delimiter[command[delimiter[...]]]]>
  Executes all commands.  Example: /multiline ; /stand;/rude;/sit
- Wave 3 of MQ2Map updates:
  * Added /maphide command to hide spawns on the map given a search string.  Hidden spawns
    only take effect until the mapped spawns are re-generated (such as changing some map
    filters)
    "/maphide reset" will re-generate the spawn list.
  * Added /mapshow command, to explicitly show spawns on the map given a search string.
    These will only take effect until the mapped spawns are re-generated (same as maphide).
    "/mapshow reset" will re-generate the spawn list.
  * Added /mapclick command and special right click commands (hold a combination of
    shift, control, left alt, right alt to execute a special command when right clicking
    on a spawn).  Defaults include left-alt right-click to highlight and control r-click to
    hide.
  * Added Group filter (requires PC) and NormalLabels filter (shows/hides non-MQ2 labels)  
- Added notice when a new XML file is added to the list while in game.  The notice
  says which file was added and that the user must reload the ui for it to take effect.
- Fixed crash when adding a custom XML file that doesnt exist in the default UI directory
- Fixed $macro crash

12 Mar 2004 by Lax
- MQ2Map overhaul completed
- Fixed /keypress crash bug when you're an idiot and type an invalid command name :)
- Fixed client override problem

11 Mar 2004 by Lax 
- I forgot to update the changes.txt file, so Amadeus is putting this here
  so the masses will know I added/fixed/updated a bunch of shit.

11 Mar 2004 by Amadeus
- Updated tons of shit too
- MQ2 should be fully functional now with the 3/10 patch

11 Mar 2004 by Plazmic
- Complete rewrite of the way Guild ID tags are handled
- __Guild offset now points to the GUILD structure instead of the random offset
  that shows the beginning of the list
- GUILD structure added to eqgame.h
- EQADDR_GUILDLIST should now be pGuildList always
- Added EQSWITCH structure
- Updated DOOR & GROUNDITEM structs to reflect the new EQSWITCH struct

08 Mar 2004 by Lax
- Wave 2 of MQ2Map upgrades:
  /mapnames command added to change the naming scheme used for spawns on the map
  Map filters/options system updated, each option can now have a "requirement"
  When listing filters with /mapfilters, only options that have requirements are displayed
  Concolor filter is now PCConColor and NPCConColor
  Target filter now has 3 separate options - Target, TargetLine, TargetRadius

05 Mar 2004 by Amadeus
- Put in new CXWnd offsets [vzmule]
- Added structs in EQUIStruct.h for the Guildwindow and RaidWindow (work in progress)

05 Mar 2004 by Lax
- MQ2Map upgrade is now live.  It uses the new OnAddSpawn/OnRemoveSpawn API to increase efficiency.
  /highlight <spawn search string> will temporarily highlight these spawns
  /highlight color <#> <#> <#> will set the highlight color
  /highlight reset to reset the currently highlighted spawns
  Right clicking on spawns on the map now targets them
- /keypress command is now live. /keypress <name> <hold> like so:
  /keypress clear_target
  /keypress forward hold
  To release the key after holding, simply use the command again without the hold keyword.
- /itemnotify command is now live.  /itemnotify <slot> <notification>, or /itemnotify in <bag slot> <#> <notification>
  Bag slots are pack1-8, bank1-16 (and sharedbank1-2 and trade1-8 but these are not yet implemented in /itemnotify)
- Added OnAddGroundSpawn/OnRemoveGroundSpawn to plugin callbacks
- Fixed random crash on exit dealing with breakpoints

01 Mar 2004 by Zaphod
- Another bugfix in MQ2DetourAPI.cpp. 

29 Feb 2004 by Zaphod
- More optimization of ParseMacroParameter() and some of the parameter routines it calls.
- Minor bugfix in MQ2DetourAPI.cpp. 

28 Feb 2004 by Lax
- Added API to automatically maintain a list of all initialized windows 
  This will only have the most recent one initialized for each "screen item" name
  Functions are in place to add/remove windows to the list with different names, etc.
- Added /notify and /windows commands
- eSpawnType enum (NONE,PC,MOUNT,PET,NPC,CORPSE,TRIGGER,ITEM) and GetSpawnType function 

28 Feb 2004 by Zaphod
- Major optimization/cleanup of ParseMacroParameter().

22 Feb 2004 by Amadeus
- Updated readme.html [thanks Wassup!]

22 Feb 2004 by Lax
- Updated license notice in each source file for 2004 and made sure each had one
- Added MQ2Spawns.cpp, which gives us hooks when a spawn is added to or removed from a zone.
  This could be used, for example, to increase the efficiency of MQ2Map.
  PLUGIN_API VOID OnAddSpawn(PSPAWNINFO pNewSpawn)
  PLUGIN_API VOID OnRemoveSpawn(PSPAWNINFO pSpawn)
  
19 Feb 2004 by Amadeus
- General Cleanup and offset updates for 02/18/2004 patch
- Added Endurance to CHARINFO and $char(endurance,cur)  [Teh_ish]

17 Feb 2004 by Amadeus
- Added initial EQTRADESKILLWINDOW & EQTRADESKILLRECIPE struct
- Added pet window to the /windowstate command (ie:  /windowstate pet open/close)
- Added initial EQPETINFOWINDOW struct 
- Updated the mq2irc plugin to have the new irc server information
- Added a bunch of new parameters:
  * $pet(buff,"<spellname>")   [returns buff slot number]
  * $pet(buff,#,id)            [returns the spellID for the buff slot # given]
  * $pet(buff,#,name)          [returns the name for the buff slot # given]
  * $pet(level)
  * $pet(id)
  * $pet(x)
  * $pet(y)
  * $pet(z)
  * $pet(name)
  * $pet(class)
  * $pet(race)

16 Feb 2004 by Amadeus
- Fixed EQ_CONTAINERWND_MANAGER  (which fixes $envopen )
- Added "Frenzy" to skills.h [daerck]
- Fixed EQLOOTWINDOW struct (which fixes $corpse(empty) and $corpse(has,xxx)

15 Feb 2004 by Amadeus
- 'Grouped' location fixed in CHARINFO (thereby fixing $char(grouped))
- Fixed WhoFollowing in Actorinfo (thereby fixing $char(following)
- Added IsABoat to Spawninfo
- Went ahead and added the dx9.0 dinput.h to the cvs to be ready for next patch
  * As far as I can tell, the changes between 8.1 and 9.0 for dinput.h are VERY
    minimal.

14 Feb 2004 by Amadeus
- Fixed a LOT of wrong offsets in eqgame.h
- Added four offsets to eqgame.h:
  * pinstTextMessageWnd 
  * pinstCDynamicZoneWnd 
  * pinstCTargetOfTargetWnd
  * pinstCTradeskillWnd 

13 Feb 2004 by Amadeus
- Added CareerFavor and CurrFavor to CharInfo [Macrofiend]
- Added $char(favor,cur) & $char(favor,career) [Macrofiend]

12 Feb 2004 by Amadeus
- ACTORINFO struct fixes :: fixed $char(pet)
- Added a bunch of code by ml2517
   * $char(height), $spawn(#,height), $target(height)
   * $target(maxrange), $spawn(#,maxrange)
   * $distance(y,x[,z][:y,x[,z]])

11 Feb 2004 by Amadeus
- Fixed Attacks offset in eqgame.ini
- Added an emergency placeholder in the ACTORINFO struct to fix $char(casting)
  (This structure will be fixed soon.)

11 Feb 2004 by Zaphod (dohpaZ)
- Added Beserker to the classes and Gates of Discord to the expansions.
- Fixed my name in the readme.html

10 Feb 2004 by Amadeus
- Updated structs and offsets
- Added 'favor' (Tribute Value) to ITEMINFO
- Added code to MQ2ITemDisplay to show item tribute value

09 Feb 2004 by Amadeus
- UPDATED SOURCEFORGE CVS!
- Small additions to the structs from suggestions on the message boards and
  a couple new things to the ItemDisplay plugin.

20 Jan 2004 by dkaa
    According to Pragma:
        1 bug: in the code for $rand(), there needs to be a srand(time(0));
        2 bug: in the code for $gamestate, $servername, and $loginname, the 
            value returned is 1 too high. You need to return length-1, which 
            is 8 for loginname and gamestate, and 9 for servername, this will 
            fix parsing issues.

18 Jan 2004 by Amadeus
- SpellID in _SPELLBUFF is now a DWORD vs. WORD 
- Updated SpellInfo formulas used in the itemdisplay mod
- Added Instrument mod information to the itemdisplay mod (thanks TheColonel)

17 Jan 2004 by Valerian
- Fixed _ITEMINFO struct -- minor correction to the size of one of the unknowns to realign.

11 Jan 2004 by DKAA
- Fixed the $combat to reflect the status of autoattack (Thanks Sharp of Fairlight)

7 Jan 2004 by EqMUle
- added Readme.html updated by Wassup

5 Jan 2004 by EqMUle
- Added [bzrtrader_start] and [pc_trade_yes] to locations.txt. Thanks to Zacaria for theese.

1 Jan 2004 by Lax
- Chat hook is no longer responsible for when zoning is finished or game is entered
- Added $merchant(markup)

31 Dec 2003 by Lax
- ESC no longer hides the MQ2ChatWnd or MQ2IRC windows and they are no longer closable
- Fixed STMLToPlainText
- Made MQ2Labels use STMLToPlainText to convert the tooltip tags (this means you can
  use < and > by using "&lt;" and "&gt;", respectively)

31 Dec 2003 by Amadeus
- Added $spell(xx,spelltype),$spell(xx,targettype),$spell(xx,name),$spell(xx,aerange),
  $spell(xx,pushback),$spell(xx,resisttype),$spell(xx,resistadj),$spell(xx,fizzletime)
- Removed $spawn(#,castingspellid) & $target(castingspellid)  
  [http://macroquest.sourceforge.net/phpBB2/viewtopic.php?p=33124#33124]
- Added Uninterruptable and Autocast to SPELL along with other fixes (thanks SoF & Koad)
- Added more functionality to the Spell Inspect Window.  You will now see the Effect of the 
  spell and the classes that can use it.  You might really find it interesting to 
  Alt-LeftClick on some of your buffs and find out exactly what they are doing to you!  It's
  almost like having an ingame Lucy connection -- and we owe a great deal of this functionality
  to Koad and borrowed code from his spellsearch plugin.
  
  **NOTE:  The formulas for this are still being tweaked.  If you wish to help iron these
           out, please post under Koad's thread on MQ2:Plugins board.  He is the keeper of 
           of the spell effects/slots formula. **


30 Dec 2003 by Lax
- Updated version number since it's not Christmas anymore..
- Fixed commands that werent supposed to be working at char select so they dont crash
- Removed some extraneous offsets from eqgame.h
- Fixed RemoveOurDetours() so it doesnt hang
- Add something very special that everyone will love!
- Fixed a bunch of $target(xxx) crashes when no target

30 DEC 2003 by EqMule
- fixed a couple unsigned/signed warnings when compiling in VC6

29 Dec 2003 by Amadeus
- Added Levitating and Sneaking; Fixed AARank and Linkdead in SPAWNINFO (thanks source)
- Added $char(levitating), $target(levitating), $spawn(#,levitating) -- returns TRUE or FALSE
- Added $char(sneaking), $target(sneaking), $spawn(#,sneaking) -- returns TRUE or FALSE
- Went through all macro routines and made sure that everything uses lower case 
  ie, $target(castingspellid) rather than $target(CastingSpellID).
- Added <Sneak> to the superwho (thanks vzmule/source)

29 Dec 2003 by Lax
- MQ2Auth modified.
    * MQ2Auth now produces MQ2Auth0.h instead of MQ2Auth1.h and MQ2Auth2.h
    * MQ2Auth will import existing MQ2Auth2.h into MQ2Auth0.h if MQ2Auth0.h does not
      already exist but MQ2Auth2.h (in other words, it will import your "keyring" to
      MQ2Auth0.h)
    * MQ2Auth now accepts a command line parameter telling it the path to use
- Merged BOOK, COMMON, CONTAINER structs into ITEMINFO (the individual structs no
  longer exist!)

29 DEC 2003 by EqMule
- fixed /click left item

28 Dec 2003 by Amadeus
- Added PushBack and ResistAdj to Spell struct
- Added functionality to the ItemDisplay Plugin that shows the following information
  about spells when you "examine" a spell from a gem or your spellbook: ID, Duration, 
  RecoveryTime, RecastTime, Range, AERange, PushBack, Resist Type and Resist Adjust.  
  You will notice that if a spell doesn't have any of these values, then that field 
  will not be shown at all.  (**More functionality to come later**)
- Added MQ2Bzrsearch to the VS.net solution file.

27 Dec 2003 by Lax
- Changed around plenty of stuff
- EQUIPMENT struct no longer uses names for its union members...
- SPELLLIST changed to SPELL, SPELLPOINTER changed to SPELLMGR
- Added O(1) access to GetSpawnByID
- Added O(1) access to GetSpellByID
- Most window base classes set up correctly
- MQ2ChatWnd updated to use a custom window, and allows typing in edit box.  Also shows up at char select to annoy you all.
- MQ2IRC updated to allow typing in edit box (goes to channel...)
- Tons of function offsets added for UI stuff, have fun with that
- Added functionality so commands can be set to work in-game only (will be ignored outside of game, at char select for example)

26 Dec 2003 by Amadeus
* Added szBaneDmgType (thanks to TheColonel)
* _CONTENTS tweak (thanks to TheColonel)
* "Price" added to _CONTENTS (thanks to Pragma)
* SPELLLIST update (thanks to Sharp of Fairlight)
* Updated MQ2Ext
* Added $spell(id,xxx) -- **$spell() will now accept either ID# or Name as first parameter**

25 Dec 2003 by Amadeus
* Added CastingSpellID to Actorinfo struct (thanks to Sharp of Fairlight)
* Reworked $char(casting) to use more efficient CastingSpellID
* Added $char(castingspellid), $spawn(#,castingspellid), $target(castingspellid)  
* Fixed $char(held,left), $char(held,right), $char(held,shield)
* Added $char(held,primary), $char(held,offhand) 
* Fixed $target(held,left), $target(held,right), $target(held,shield)
* Added $target(held,primary), $target(held,offhand) 
* Fixed $spawn(#,held,right), $spawn(#,held,left), $spawn(#,held,shield)
* Added $spawn(#,held,primary), $spawn(#,held,offhand)
* Added AERange to SPELLLIST struct (thanks to Sharp of Fairlight)
* More changes to ActorInfo (Timestamp stuff) thanks to Sharp of Fairlight

25 Dec 2003 by EqMule
- fixed /banklist crash
- fixed $char(ismoving) - thanks to ml2517
- added makezip.bat to make zip file creation easier...

24 Dec 2003 by Lax
- Updated offsets with correct ones
- Replaced remaining calls to AddDetour with EasyDetour and EasyClassDetour
- Updated EasyDetour/EasyClassDetour defines to explicitly cast the offset to DWORD
- Updated MQ2IRC with current version from forum
- Modified CHARINFO struct to use Inventory and InventoryArray for inventory member names.
- Fixed $lastcommand
- Fixed $char(hp,cur), $char(hp,max), $char(hp,pct)

24 Dec 2003 by Amadeus
- Fixed CHARINFO (thanks to TheColonel for new stuff)
    * CHARINFO now has:
  	+ HPBonus
	+ ManaBonus
	+ PercentEXPtoAA
	+ GukEarned
	+ MMEarned
 	+ RujEarned
	+ TakEarned
	+ LDoNPoints
- Removed Stamina from all references in parser and struct
+ Added $char(HPBonus), $char(ManaBonus), $char(PercentEXPtoAA), $char(GukEarned),
  $char(MMEarned), $char(RujEarned), $char(TakEarned), $char(LDoNPoints)
+ Updated _COMMON (thanks again to TheColonel)
   	* Added BaneDMG;
   	* Added Lore
   	* Added BaneDMGType
   	* Added InstrumentType
   	* Added InstrumentMod
   	* Added DmgBonusType
   	* Added DmgBonusVal
   	* Fixed Range
+ Added szTheme[]
+ Added szDmgBonusType[]
+ Updated ItemDisplay Plugin to include LDoN stuff (TheColonel)
+ Updated itemtypes.h with "All Instruments" as type 51 (thanks TheColonel)
+ Removed $item(lore) & $cursor(lore)
+ Added $item(LDTheme) & $cursor(LDTheme)
+ Added $item(DmgBonusType) & cursor(DmgBonusType)
+ Fixed $char(Mounted)


21 Dec 2003
+ Added MQ2Mouse2.cpp.  Don't need to compile this, it's the new mouse code.  Incomplete and inop.

21 Dec 2003 by Amadeus
- Fix for MQ2Ext

19 Dec 2003 by EqMule
+updated offsets, structs for todays patch...

15 Dec 2003 by Amadeus
- Fix for $target(sclass)
- Fix for FullClassToShort
* Thanks to Schark for these*

13 Dec 2003 by Amadeus
- Added MQ2Ext to the project

06 Dec 2003 by Lax
- Added benchmark system.
- Modified pulse behavior so that executing macro commands is separate from other pulse stuff
- Modified MQ2FPS to take the above into account (it no longer needs to know about macros)
- Updated MQ2IRC to be current with the version posted in forums
- Added /bench command which with no parameters outputs currently active benchmark stats to chat
  When used with parameters, /bench will benchmark a command.  /bench [command]
  Example: /bench /who all friends

05 Dec 2003 by Mckorr
+Fix for CTD when using /click left|right target when nothing was targetted (motd2k)

05 Dec 2003 by EqMule
+Fixed $searchspawn(pc,loc:x:y,radius:100) using Ohmz code. see
http://macroquest.sourceforge.net/phpBB2/viewtopic.php?t=3394&highlight=searchspawn+loc
for more info
+Fixed /selectitem to look in all 80 merchantslots, previously it would stop at 79
+misc small fixes

03 Dec 2003 by Lax
- Added custom windows system:
** CCustomWnd base class for your windows
** AddXMLFile, RemoveXMLFile to manage custom xml files
** More info / example coming
- Added MQ2IRC plugin to CVS with some changes
- Added MQ2EQIM plugin, which handles buddy list info (custom window soon, also auto loading buddy list)
- Updated MQ2EQBugFix plugin to solve current journal npc window crash (and it shouldnt make it not show anything this time)
- Added OnReloadUI callback, called after /loadskin command is used
- Fixed hangups compiling with VC6
- Added EasyDetour and EasyClassDetour to ease the pain of hooking functions

02 Dec 2003 by Mckorr
- Fixed SHA in short classes, is now SHM.  Added Rogue/ROG (I missed that one before)
- Added $spawn(#,sclass)

27 Nov 2003 by Lax
- / command correctly does EQ /who by default
- MQ2Telnet redone.
- Plugins using DoCommand() will execute it on the next pulse instead of immediately (corrects problems unloading the plugin)
- MQ2FPS shouldn't cause major problems when switching from absolute to calculate mode
- MQ2Template removed from VS6 workspace and .NET solution

25 Nov 2003 by Lax
- MQ2FPS now has a /fps command that can change some other settings.  Selecting "absolute" mode will switch to "cpu limiter" style, while "calculate" mode will switch to "fps limiter" style.  FPS limiter is default.  The same command will allow you to reposition the FPS indicator display.
- MQ2FPS display now shows a * if using absolute mode, and will show /MACRO if a macro is being executed that causes the limiting to be minimal
- Added aliases /g and /gu to the default list
- Macroquest2.exe now pops up a message box if the system failed to load MQ2Main.dll

20 Nov 2003 by EqMule
fix for $merchant(name)

20 Nov 2003 by Lax
*** MacroQuest2.exe is now pre-compiled, you no longer compile this yourself.  MQ2Auth implemented.  Run it before compiling on each machine.

- MacroQuest program will no longer use loadlibrary, it loads our library directly.
- The version number is now stored in MQ2Main.h as the top line, and not in macroquest.ini.  When compiled it becomes a global variable.  Comparing the global variable gszVersion with the #define in MQ2Main.h will cause the tray icon tooltip to suggest recompiling if necessary.
- Removed EQADDR_SLOTLIST, which is now ppInvSlotMgr/pInvSlotMgr
- Fixed MQ2Telnet crashes (for real)
- Added DebugSpewNoFile which does not write to file even if debugspewtofile=1.  This is useful for when we can't put up with the file access times.  All Macro commands and parser api debug spew has been changed to this form.  Note that this debug spew is still useful for when you attach a debugger.

19 Nov 2003 by EqMule
+Added new command /destroy
will destroy whatever you have on your cursor. Use with care.
example: /if "$cursor(name)"~~"rusty" /destroy
In order to get that to work I had to declare EQ_PC (MQ2Globals.h(250):EQLIB_VAR EQ_PC **ppPCData;)

19 Nov 2003 by Lax
- Fixed MQ2Telnet to not crash on unload (probably).  Critical sections were getting deleted twice.
- Fixed aliases to work when given parameters

18 Nov 2003 by EqMule
+fix: mouseto and click by changing ScreenX and ScreenY to ScrX and ScrY)
+Added  EQLIB_API VOID AddParm(PCHAR Name, fMQParm Function);
    EQLIB_API VOID RemoveParm(PCHAR Name);
to MQ2Main.h so that custom plugins will find them...
+updated $merchant(has,xxx) with HanzO's code for it, thank you.
+Updated $selecteditem() with new (count) for easier usage of /sellitem and /buyitem
example: /sellitem $selecteditem(count) self
+misc fixes...

