EQEMu Changelog (Started on Sept 24, 2003 15:50)
-------------------------------------------------------
== 4/16/2017 ==
KLS: Merge eqstream branch
	-UDP client stack completely rewritten should both have better throughput and recover better (peq has had far fewer reports of desyncs).
	-TCP Server to Server connection stack completely rewritten.
		-Server connections reconnect much more reliably and quickly now.
		-Now supports optional packet encryption via libsodium (https://download.libsodium.org/doc/).
		-Protocol behind the tcp connections has changed (see breaking changes section).
		-API significantly changed and should be easier to write new servers or handlers for.
		-Telnet console connection has been separated out from the current port (see breaking changes section).
			-Because of changes to the TCP stack, lsreconnect and echo have been disabled.
	-The server tic rate has been changed to be approx 30 fps from 500+ fps.
		-Changed how missiles and movement were calculated slightly to account for this (Missiles in particular are not perfect but close enough).
	
	-Breaking changes:
		-Users who use the cmake install feature should be aware that the install directory is now %cmake_install_dir%/bin instead of just %cmake_install_dir%/
		-To support new features such as encryption the underlying protocol had to change... however some servers such as the public login server will be slow to change so we've included a compatibility layer for legacy login connections:
			-You should add <legacy>1</legacy> to the login section of your configuration file when connecting to a server that is using the old protocol.  
			-The central eqemu login server uses the old protocol and probably will for the forseeable future so if your server is connecting to it be sure to add that tag to your configuration file in that section.
			-Telnet no longer uses the same port as the Server to Server connection and because of this the tcp tag no longer has any effect on telnet connections.
				-To enable telnet you need to add a telnet tag in the world section of configuration such as:
					<telnet ip="0.0.0.0" port="9001" enabled="true"/>

== 4/1/2017 ==
Akkadius: Cleaned up some of the NPC to NPC aggro code, only do aggro checks to other NPC's when the NPC is flagged for it
Akkadius: [Performance] Reworked how all log calls are made in the source
	- Before we used Log.Out, we will now use a macro Log(
		- Before: Log.Out(Logs::General, Logs::Status, "Importing Spells...");
		- After: Log(Logs::General, Logs::Status, "Importing Spells...");
	- The difference is 
		1) It's 200-300x faster especially when log statements are inside very hot code paths. We already
			had most hot paths checked before we logged them, but this blankets all existing logging calls now and not just the 
			select few we had picked out in the source.
		2) Strings don't get copied to the stack, popped and pushed constantly even when we hit a log statement that 
			actually isn't going to log anything.
				- We do an 'if (LogSys.log_settings[log_category].is_category_enabled == 1)' before we call a log function
					in the log macro so the log function doesn't get called at all if we're not logging the category
	- This has increased binary executables roughly 15KB
	- The old extern for EQEmuLogSys is now named LogSys appropriately instead of Log (Ex: LogSys.StartFileLogs())
	- The result keeps logging footprint non-existent for when we're not logging that category

== 03/30/2017 ==
Akkadius: [Performance] Fixed an overhead issue where many hot paths would trigger quest subroutines and beneath that the code would
	try to see if a quest existed perpetually (checking if file exists) even though it should have determined the quest 
	didn't exist the first time.
	- This caused a lot of overhead in an instance where an entire zone of NPC's is pathing, triggering EVENT_WAYPOINT_ARRIVE
	and EVENT_WAYPOINT_DEPART when there is no global_npc.pl/lua, or all NPC's pathing don't have a quest assigned, similar 
	behavior would occur. This goes for any other type of quests: spells, items, encounters etc.

== 03/28/2017 ==
Akkadius: [Performance] Fixed a large overhead issue where every single NPC in a zone was checking to depop themselves
	as a swarm pet every 3ms regardless of being a swarm pet or not. Swarm pets now check to depop only when their timer is up
Akkadius: [Performance] Removed a timer where clients would constantly calculate light amount on equipment every 600ms, instead 
	clients will update light when changing equipment or entering a zone
Akkadius: [Performance] Disabled enraged timer checks for NPC's that do not actually have enrage as a special attack
Akkadius: [Performance] Don't process ProjectileAttack checks for NPC's that are not engaged in any combat

== 03/27/2017 ==
Akkadius: [Performance] Reworked how client to NPC aggro checks are made
	- Before when reverse aggro checks were done (client to NPC), checks would happen every 750 millseconds where a client would
		check an entire entity list with distance calcs and other checks for aggro, with many clients in a zone and many NPC's this would
		add a lot of unecessary overhead. A temporary adjustment on 3/25 was made and upped the check to 6 seconds.
	- Now, there is a new methodology to scanning. The client will build a cache list of NPC's within close range as defined in new rule:
		RULE_INT(Range, ClientNPCScan, 300) and will also get any NPC that has an aggro range beyond that defined range to use in 
		the frequent checks for aggro, the result is far less overhead
	- Client scanning changes when moving versus not moving, the client will scan aggro every 500 milliseconds while moving, and
		3000 millseconds aggro check when not moving, with a 6000ms re-fetch for close NPC's
	- A demo of these changes can be found here:
		https://youtu.be/aGroiwLSTVU

== 03/25/2017 ==
Akkadius: [Performance] Reduced CPU footprint in non-combat zones doing constant checks for combat related activities
Akkadius: [Performance] Reduced CPU footprint in cases where a client is checking for aggro excessively every 750 millseconds. This has 
	been adjusted to 6 seconds per new rule RULE_INT(Aggro, ClientAggroCheckInterval)
	- When zones have many players, with many NPC's, this adds up quickly

== 03/12/2017 ==
Akkadius: [Performance]
- Implemented range rules for packets and other functions
	RULE_INT ( Range, Say, 135 )
	RULE_INT ( Range, Emote, 135 )
	RULE_INT ( Range, BeginCast, 200)
	RULE_INT ( Range, Anims, 135)
	RULE_INT ( Range, SpellParticles, 135)
	RULE_INT ( Range, DamageMessages, 50)
	RULE_INT ( Range, SpellMessages, 75)
	RULE_INT ( Range, SongMessages, 75)
	RULE_INT ( Range, MobPositionUpdates, 600)
	RULE_INT ( Range, CriticalDamage, 80)
	
 - (Readability) Also cleaned up some formatting in messaging and packets so it is easier to understand what is going on with the code

== 03/09/2017 ==
Uleat: Fixed a few glitches related to bot trading and other affected code
	- Added a temporary fail clause for partial stack transfers to prevent client item overwrites
	- Return messages no longer repeat the top cursor item when multiple items are pushed there
	- Test slot for client returns is now handled appropriately for parent and bag searches
	- FindFreeSlotForTradeItem() now begins at the correct bag index on subsequent parent iterations
Uleat: First step of implementing inventory v2.0

== 03/08/2017 ==
Uleat: Complete rework of the bot trading system
	- Equipment slot priority can now be tailored..though, a recompile will be required
	- All item validations and slot assignments for trades and returns are now performed before any actual item movements occur
	- Failed trade/returned items will now go straight into the client's inventory, just like a normal trade transaction
		- A 'green' message appears at the end of each successful trade informing the trader of 'accepted' and 'returned' item counts
		- Bots respond to the trader directly now instead of using BotGroupSay()
	- Bots will still only allow trades from their owner (currently, too high a risk of exploit and/or malicious activity)
	- Partial stack movements (i.e., ammo refills) have been scoped..but, not implemented
	- I have not been able to reproduce any 'illegal' weapon combinations with this code
	- NOTE: The report of item duplication with bot return items appears to be an inventory desync condition
		- I experienced this condition both before and after the rework with RoF+ clients (UF- appears ok)
		- The bug lies within the actual client inventory system and not with bot trades
	- Please post any issues with this change as they arise

== 02/27/2017 ==
Uleat: Notes on bot movement speed changes:
	- Clients (players) appear to be on a different speed scale than other entities (NPCs, etc...)
	- The server does not calculate deltas/velocities for moving players..those come the client itself
	- GetBotWalkspeed() and GetBotRunspeed() are specific to bot movement calculations
	- The class Mob equivilents are not scalared so that a 'client-oriented' value can still be attained
	- The value of ~1.786f is derived from the ratio of 1.25f/0.7f (npc speed/client speed)
	- Modifying the two speeds like this is a rough guess-timate..but, appears to at least bring the incongruous behavior to acceptable levels

== 02/26/2017 ==
Uleat: Moved bot `npc_spells` entries from '701-712' to 3000 + <class_id> .. also, added melee types for future expansion
Uleat: Moved bot spell casting chance values into database - this will allow admins to tailor their bots without having to rebuild server code
	- Each entry uses a 3-dimensional identifier: [spell type index][class id][stance index]
		- [spell type index] is not the SpellType_## bit value..use SpellType_##Index instead
		- [class id] values of 1-16 are valid and hold a direct correlation to server-coded player class values
		- [stance index] is a direct correlation (0-6)
		- the 'conditional fields' are currently predicated on 4 compounded boolean states:
			- `pH_value` represents bit '0'
			- `pS_value` represents bit '1'
			- `pN_value` represents bit '2'
			- `pD_value` represents bit '3'
			- all other conditional fields are masked based on these 4 predicates
		- the full conditional field enumeration is as follows:
			- `nHSND_value`		- negative Healer/Slower/Nuker/Doter
			- `pH_value`		- positive Healer
			- `pS_value`		- positive Slower
			- `pHS_value`		- positive Healer/Slower
			- `pN_value`		- positive Nuker
			- `pHN_value`		- positive Healer/Nuker
			- `pSN_value`		- positive Slower/Nuker
			- `pHSN_value`		- positive Healer/Slower/Nuker
			- `pD_value`		- positive Doter
			- `pHD_value`		- positive Healer/Doter
			- `pSD_value`		- positive Slower/Doter
			- `pHSD_value`		- positive Healer/Slower/Doter
			- `pND_value`		- positive Nuker/Doter
			- `pHND_value`		- positive Healer/Nuker/Doter
			- `pSND_value`		- positive Slower/Nuker/Doter
			- `pHSND_value`		- positive Healer/Slower/Nuker/Doter
	- Single- and mixed-bits fields should be filled-in based on the boolean 'AND' concept
		- (i.e., if 'healer' then `pH_value`=x; if 'slower' then `pS_value`=y; if 'healer' AND 'slower' then `pHS_value`=z; )
		- most cases can allow the same value across all fields..but, there are some that shouldn't and this format allows for their discrimination
	- Valid `##_value` entries are 0-100..though, the field accepts up to 255... Anything above 100 is clamped to 100 upon loading, however...
	- Not all conditions are currently coded and changing a field may not produce any results
	- The 'default' database values will be changed and tweaked as bot spell code modifications occur

== 02/25/2017 ==
Uleat: Implemented rule-based node pathing for bots
	- This currently applies to out-of-combat following movement and blocked los in-combat movement
	- The default is set to 'true' (use node pathing)..so, consider disabling it if cpu use is too high
	- If you want to disable node pathing, apply the optional sql '2017_02_25_bots_use_pathing_rule.sql' file located in the utils/sql/git/bots/optional sub-directory. This will apply a 'false' rule..but, it can be changed as desired
	- This helps with bot movement..but, there are still issues...
Uleat: Implemented rule-based position update packet with movement timer check for bots
	- This currently only applies to out-of-combat movement
	- The default is set to 'false' (original behavior) to help save bandwidth (each bot will send an update packet every 1/10th of a second when enabled)
	- If you want to enable the position update packet, apply the optional sql '2017_02_25_bots_update_position_with_timer_rule.sql' file located in the utils/sql/git/bots/optional sub-directory. This will apply a 'true' rule..but, it can be changed as desired
	- This appears to help with/eliminate rubber banding

== 02/23/2017 ==
** THIS NOTE HAS BEEN SUPERCEDED ON 02/26/2017 **
Uleat: Moved bot spell casting chance values into database - this will allow admins to tailor their bots without having to rebuild server code
	- Each entry uses a 4-dimensional identifier: [spell type index][class index][stance index][conditional index]
		- [spell type index] is not the SpellType_## bit value..use SpellType_##Index instead
		- [class index] values of 0-15 are valid and determined by subtracting 1 from the actual class value
		- [stance index] is a direct correlation (0-6)
		- the [conditional index] is currently predicated on 2 compounded boolean states:
			- not primary healer/not primary slower: 0
			- primary healer/not primary slower: 1
			- not primary healer/ primary slower: 2
			- primary healer/primary slower: 3
	- Valid `value` entries are 0-100..though, the field accepts up to 255... Anything above 100 is clamped to 100 upon loading, however
	- Not all conditions are currently coded and changing a field may not produce any results
	- The 'default' database values will be changed and tweaked as bot spell code modifications occur

== 02/20/2017 ==
Uleat: Reworked bard bot spell twisting and updated their spell (song) list
Uleat: Added ability to shift to pre-combat song buffing by selecting a non-pet npc target, eliminating the need to mix all bard buff songs together

== 2/19/2017 ==
Akkadius: Added a fix for limiting the amount of items sold in a stack when the resulting return coin is higher than the supporting struct for returning coin

== 01/31/2017 ==
Uleat: Modifed bot movement behavior in an attempt to 'normalize' it. This is a hack fix and will be revisited at some point. (Probably just need a follow function rather than use movement, when the leader of the follow chain is moving.)

== 01/26/2017 ==
Uleat: Change rogue bot behavior to eliminate twirling combat. They will only get behind the mob if they are not the mob's target or if the mob is feared or fleeing. This may lower rogue bot dps a small fraction..but, is more in-line with realistic game mechanics.

== 01/17/2017 ==
Mackal: Combat Revamp
	- This change brings melee combat into line with how combat is done on live.
	- This correctly applies the PC damage tables and corrects stacking order of many spells
	- Given the scope of what had to be rewritten, it was not feasible to preserve the old combat system.
	This means you will likely have to rebalance your server, which sucks, but this is very
	accurate so shouldn't require any more changes, at least none that would cause you to have
	to rebalance your server again.
	- For rebalancing, I would recommend running the optional SQL and tweaking from there.
	- To help with rebalancing there is a simulator included at utils/combat-sim.
	- You can enter the mitigation or offense values you would like to balance around (#showstats will show you them)
	a 1 on the sim is min damage 20 is max.
	- Quick recommendations for best ways to improve PC DPS, give them some worn (or AA) SE_DamageModifier and/or SE_MinDamageModifier
== 12/03/2016 ==
Uleat: Added hack detection to trade code
	- If illegal items are found in trade slots when the 'trade' button is clicked, the trade is cancelled and a message is sent to the offending player
	- Future revisions will, at a minimum, log the player as a hacker once the quirks have been worked out

== 12/01/2016 ==
Uleat: Disabled RoF+ clients from augmenting items not in their possessions slots (0-29, 9999, 251-330) to abate an exploit in the current code

== 10/17/2016 ==
Uleat: Moved namespace ItemField from item_instance.h to shareddb.cpp - the only place it is used
Uleat: Separated class Inventory from item_instance files into inventory_profile files
Uleat: Renamed class Inventory to EQEmu::InventoryProfile
Uleat: Renamed enum class InventoryVersion to MobVersion

== 10/16/2016 ==
Uleat: Renamed struct EQEmu::ItemBase to EQEmu::ItemData and class ItemInst to EQEmu::ItemInstance
Uleat: Added class EQEmu::InventorySlot. Re-attached pertinent inventory token references to EQDictionary

== 10/15/2016 ==
Uleat: Changed filenames to facilitate future inventory naming conventions

== 10/09/2016 ==
Noudess: Rogue usage of merchants while utilizing sneak was limited to
temporary items, as the code that checked faction per item sold did not
take into account that rogue was sneaking.  Now sneaking rogues can see full
inventory on merchants (well, unless an item requires a + faction value).

== 09/12/2016 ==
Akkadius: Massive overhaul of the update system and EQEmu Server management utility framework
	(known as eqemu_update.pl) now known as eqemu_server.pl
	- eqemu_server.pl is now a general EQEmu Server management utiltiy framework that can be used
		to extend to many purposes. It's main purpose is to simplify server management
	- eqemu_server.pl changes:
		- Menu has been completely changed, instead of a number based (enter number and hit enter)
		you now type commands within the menu (Ex: 'database')
		- Handles last mile installation for Windows Servers (See Github Readme)
		- Handles last mile installation for Linux Servers (See Github Readme)
			- Ubuntu
			- Debian
			- Fedora
			- CentOS
		- Now checks for Internet connection before performing web requests
		- Database:
			- Regular schema updates now happen automatically, if new binaries present updated
				database schema changes, script will backup first, auto update database, and continue
				world bootup
			- Regular bots database schema changes now happen automatically similarily to the above
			- Database checks can also be ran manually via the script menu
		- CLI Arguments
			- Arguments passed to eqemu_server.pl can execute the same name-based operations that
				are present in the interactive menu
					- Example: "perl eqemu_server.pl opcodes" will download opcodes
					- Example: "perl eqemu_server.pl backup_player_tables" will backup and export player tables
		- Bots
			- Bots can now be automatically setup in Linux or Windows via the 'setup_bots' command
				- Windows will auto download binaries and install, along with installing bots db schema
				- Linxu will auto compile binaries and install, along with installings bots db schema
		- Utility scripts
			- Linux now has the following utility scripts for download, available via menu 'utility_scripts'
				and via Linux default install:
					- server_launcher.pl
					- server_start_dev.sh
					- server_start.sh
					- server_status.sh
					- server_stop.sh
		- Usage analytics
			- eqemu_server.pl now collects usage analytics, this is very helpful for our developers
				- Example: We can see how many installs have been performed:
					https://github.com/EQEmu/Server#server-installs
				- This helps us see how often certain utilities are used as well
		- Console Messages
			- All script messages have been prefixed with a bracket action Ex: [Update] [Database] [Info]
				to be more consistent with our log conventions
		- 'New Server' Utility
			- Running 'new_server' from the main menu or 'perl eqemu_server.pl new_server' while in
				a completely new folder with just the script present, will allow a server operator
				to initiate a full clean PEQ install in that folder. Pulling down all assets and
				installing a PEQ database with the name the server operator gives the prompts in the
				script

== 09/10/2016 ==
noudess: Task system experience based on a % of a level did not take into
account the hell levels rule.  Now it does.

== 09/04/2016 (Changes over past few months) ==
Akkadius: Fixed an issue where clients would crash with health marquee's
Akkadius: Fixed issues with NPC's "ghosting" when they path
Akkadius: Overhauled worldserver logging
Akkadius: Pets now don't actually spawn until the player has fully entered the zone (Live-like)
demonstar/KLS: Adjusted some background workings on how spell buff tics are synced with the client
Uleat: Optimizations to map loading and zone times
Uleat/Akkadius: Fixed bandolier exploit where you could equip a 2H and Shield
mackal: Re-worked spell re-use timer logic
mackal: Source optimizations all over, crash fixes
mackal: Fixed some issues with illusions on zoning
mackal: Fixed some client DOT stacking bugs
mackal: Invis will now break on AA spell casts and item cast
mackal: Changed how Loot response code works
mackal: Implemented 3 additional spell gems with (Mnemonic Retention)
mackal: Instant spells now have instrument mods
mackal: Rate limit character saves
mackal: Made it so items no longer do TGB (Live-like) Rule implemented to disable
mackal: Set pet buffs limit to 30

== 09/03/2016 ==
Uleat: Changed 'Bind Wound' behavior to match the best references that I could find for post-2004 era.
	Note: If you wish to retain the old method, source in the optional '2016_09_03_old_bind_wound_rule.sql' script file.

== 08/27/2016 ==
Kinglykrab: Added optional IP-based account exemptions.
	- To use this system simply set World:EnableIPExemptions to true and create an entry in the ip_exemptions table.
	- Example: exemption_ip of IP 192.168.1.4 in ip_exemptions with exemption_amount of 1 will allow only 1 account to login from IP 192.168.1.4.
	- Note: If there is no exemption, the amount of accounts logged in from a singular IP will default to World:MaxClientsPerIP

== 08/23/2016 ==
noudess: Force mobs on a depop @ end pathgrid to still do this on idle zones.
This makes them be more random after a zone is idle, rather than always showing
up at start point when 1st person logs into an idle zone.  Much more like live.
I dion't think this will be much of a performance problem.  Once they path and
depop, no mkore cpu usage.

== 08/14/2016 ==
mackal: Implement Linked Spell Reuse Timers
	- For whatever reason this is a bit unfriendly, but that's how it is on live.
	- Titanium is especially unfriendly with large differences in reuse times (ex higher canni and the first 4)
	- Unsure when this went live for spells, but canni was at least linked at OoW launch

== 08/13/2016 ==
Kinglykrab: Implemented optional avoidance cap rules.
	- Serves to eliminate God-like characters on custom servers with high item stats
	- Rule Names:
		- Character:EnableAvoidanceCap (default is false)
		- Character:AvoidanceCap (default is 750, beyond 1,000 seems to make characters dodge all attacks)

== 08/02/2016 ==
Uleat: Changed 'SendZoneSpawnsBulk' behavior to use near/far criteria (live-like) when sending packets.
	- Zone-to-Zone client loading will see a small decrease in time (less than 10~15%)
	- World-to-Zone client loading appears to greatly benefit from this (tested 'devastation' - pre-change: ~22 seconds, post-change: 12~15 seconds)
	- This change does not affect the final spawning of mobs in the client

== 07/31/2016 ==
mackal: Implement more spell gems!
	- There are a few things still left to due like make dealing with losing gems nice (reset AAs, going to an older client etc)
	- Sadly SoF disc release doesn't support gem 10 like one might expect :(
	- So changed clients:
		- SoD = 10
		- UF = 12
		- RoF/RoF2 = 12. I know the UI supports 16, but the client does not and can cause client crashes
	- The quest APIs assume you pass a valid spell gem ...

== 07/28/2016 ==
Uleat: Implemented zone memory-mapped file usage
	- Zone map files are converted to pre-loaded binary files, bypassing the (sometimes) time-consuming raw data transform process
	- There are three ways to convert files:
			-- Do nothing! The zone bootup process will check for a mmf file and load it, if found, or create it after the 'normal' transform process is complete
			-- Use the command line option: zone convert_map <zone_name>.map (for singular conversions)
			-- Drop the 'convert_maps_to_mmfs.pl' into your server directory and execute it for a batch conversion
			-- Note: Any zone maps not pre-converted will be processed once a zone is booted up that does not have one
	- To enable this feature, you must have the 'USE_MAP_MMFS' option checked in cmake and have built binaries on that
	- To disable this feature, or if you encouter problems, disable the 'USE_MAP_MMFS' option and rebuild your binaries
	- This feature will test the validity of your zlib library. If you get errors/crashes upon conversion, then your zlib1.dll is most likely suspect (check our forum for solutions)

== 07/25/2016 ==
mackal: Fix up the SpellBuff struct
	- THERE MAYBE BUGS
	- there shouldn't though, most of the hackery was from badly named fields causing confusion

== 07/09/2016 ==
Uleat: Important fix for mob pathing
	- This should fix failed pathing issues (and high cpu usage for zone.exe) for mobs in affect zones
	- Changed variable 'gridno' type from int16 to int32 to reflect actual return value of fetch (values do exceed 32767 aka int16.max)
	- Precision loss from int32 to int16 conversion was causing grid id to be changed to quest controlled movement in cases where (gridno & 0x8000 == true)

== 06/28/2016 ==
Noudess: Resurrection effects now block certain buffs like on live.
Noudess: Added message about why spells are blocked (rule based)
Noudess: Added new rule:  Client:UseLiveBlockedMessage
Uleat: Fix for bot inventory save failure involving items with unlimited charges

== 06/13/2016 ==
Noudess: Changes personal faction earned min/max to -2000/2000 from -3000/1200

== 06/06/2016 ==
Uleat: Reworked EQEmuDictionary to use class LookupEntry

== 06/01/2016 ==
Uleat: Implemented EQEmu::TintProfile
Uleat: Implemented EQEmu::TextureProfile

== 05/31/2016 ==
Uleat: Converted enumeration MaterialSlots to EQEmu::textures::TextureSlot

== 05/28/2016 ==
Uleat: Merged client_version and inventory_version into emu_versions files

== 05/27/2016 ==
Uleat: Renamed EQEmu::Item_Struct to EQEmu::ItemBase (and appropriate files) to coincide with new inventory naming conventions

== 05/25/2016 ==
Uleat: Renamed and moved enumeration SkillUseTypes to EQEmu::skill::SkillType - added class EQEmu::SkillProfile, though not implemented at this time
Uleat: Some more work on eq_dictionary

== 05/21/2016 ==
Uleat: Moved struct Item_Struct into namespace EQEmu along with associated enumerations - enumerations into namespace EQEmu::item (run shared_memory)
Uleat: Fixed a few possible crash points in linux builds associated with augments/ornamentations

== 05/18/2016 ==
Uleat: Changed client 'constants' files to 'limits'

== 05/10/2016 ==
Uleat: Converted client translators' 'SerializeItem()' to recursive, single buffer methodology. Titanium SerializeItem() now adds a null term between parent items instead of the invoking function
Uleat: Converted server 'BulkSendInventoryItems()' to use single buffer methodology
Uleat: Added 'ItemInst::Serialize()' overload to make use of the above single buffer methodology

== 05/08/2016 ==
Uleat: Re-coded Titanium client translator 'SerializeItem()' to use coded property assignments over file enumerated ones

== 04/22/2016 ==
Uleat: Reworked ClientVersion into namespace EQEmu; Added InventoryVersion
Uleat: Delinked current inventory slot enumeration and constants from EQEmu::constants and global definition (inv2 pre-work)

== 04/19/2016 ==
Uleat: Changed the recent EQEmu rework to eliminate the nested class design (possible cause of VS2015 update crashes - unverified)
Uleat: Some more inv2 convergence work

== 04/15/2016 ==
Uleat: Reworked EQDictionary into namespace EQEmu

== 04/08/2016 ==
Uleat: Added Heal Rotation HOTs (Heal Override Targets) that can be set for proactive healing (default HR behavior is reactive)
Uleat: Added the ability to save/load/delete Heal Rotations based on targeted member - load is automatic when ^hrcreate is used on a bot that has a saved HR entry

== 04/07/2016 ==
Uleat: Rework of eq_dictionary to facilitate inventory work

== 04/05/2016 ==
Uleat: Moved database query code out of bot.cpp and into the new BotDatabase class

== 03/25/2016 ==
Uleat: Fix for heal rotation 'Stack Overflow' error
Kayen: Defensive procs will now only proc once per attack round (instead of every attack chance).
       Live like modifier added that decreases defensive proc chance if you are higher level then your attacker.

== 03/24/2016 ==
Kayen: Fix for AE taunt to use correct range and hate modifier.
       Fix for spell effect version of taunt to use correct range.
Uleat: Activation of new 'Bots' command system
	- You will need to re-run cmake to capture the file additions and then re-compile your server binaries
	- You will also need to manually run eqemu_update.pl and select the bots update option - you should have 2 pending updates: 9001 & 9002
	- The new command system is accessed with the '^' character - start with '^help' and see where that takes you
	- More information can be found on the eqemu forums

== 03/05/2016 ==
mackal: Implement extra bind points (secondary recall)
	For SE_Gate, base2 is which bind to use (starting at 1)
	For SE_BindAffinity, base1 is which bind to set (starting at 1)
	For SE_GateCastersBindpoint, base1 is which bind to use (starting at 1)
		There was actually no spells that don't send to the main bind, but it uses a base1 of 1 which matches with SE_Gate
		This also doesn't break anything

== 03/01/2016 ==
Uleat: Fix for LDoN treasure 'npcs' not leaving a corpse (please report any issues..)

== 02/29/2016 ==
Uleat: Change in AddItemBonuses - now includes ammo slot for skill mods only. Defined SoD- client SkillModMax packet property (client does not show..but, does enforce.)

== 02/11/2016 ==
Hateborne: Added IgnoreSpellDmgLvlRestriction rule (boolean) to ignore the 5 level spread when checking to add SpellDmg

== 02/10/2016 ==
Hateborne: Added FlatItemExtraSpellAmt rule (boolean) to allow SpellDmg on items to be added as raw damage versus scaled.

== 01/26/2016 ==
Uleat: Fix for Berserker 'Piercing' skill issues. Server Admins: If you run custom skill sets, this patch touches the code segments that you will need to modify if you have changed the default berserker 1H-/2H-piercing skill values.
Uleat (Daerath): Fix for precision-loss item weight conversions in older clients.
	- WARNING: YOU MUST RE-RUN SHARED_MEMORY.EXE BEFORE STARTING SERVER OR ITEM LOSS WILL OCCUR!
	- Note: Cmake must be re-run to include/exclude the required files

== 01/13/2016 ==
Kinglykrab: Modified #flag so you can refresh your target's account status (GM status level) without them having to relog.
	- Just target the person whose flag you want to refresh and type #flag.
Uleat: Added itemlink functionality to the #summonitem command. Current use is limited to extracting the item id from the link.
	- Invoking by item link '#summonitem Arrow' produces the same result as by item id '#summonitem 8005'

== 01/12/2016 ==
Athrogate: Adding ClearCompassMark() to Lua.
	- Lua didn't have ClearCompassMark().  Perl already had this.

== 01/12/2016 ==
Uleat: Fix for tradeskill containers remaining locked after a RoF+ client leaves. Intermediary fix for RoF+ clients accessing tradeskill containers when in use by another player (thanks Natedog!)

== 12/29/2015 ==
Akkadius: Implemented standardized zone controller scripts (Rule Zone, UseZoneController) Defaulted to true
	- When a zone boots, it will spawn an invisible npc by the name of zone_controller
	- Lua and Perl scripts can be represented with this npc as zone_controller.pl/lua
	- This NPC's ID is ruled be define ZONE_CONTROLLER_NPC_ID 10
	- Two EVENT's uniquely are handled with this NPC/controller (They only work with the zone_controller NPC)
		- EVENT_SPAWN_ZONE :: All NPC spawns in the zone trigger the controller and pass the following variables:
			$spawned_entity_id
			$spawned_npc_id
		- EVENT_DEATH_ZONE :: All NPC deaths in the zone trigger the controller event and pass the following variables:
			$killer_id
			$killer_damage
			$killer_spell
			$killer_skill
			$killed_npc_id

== 12/28/2015 ==
Kinglykrab: Added GetInstanceTimer() to Perl and Lua.
	- Added GetInstanceTimerByID(instance_id) to Perl and Lua.
	- Note: If you do not provide an instance id in the method it defaults to instance id 0 and returns 0 for time remaining.
	- Added UpdateZoneHeader(type, value) to Perl and Lua.
	- Note: UpdateZoneHeader allows you to manipulate fog color, fog density, and many other zone header settings on the fly in Perl and Lua.

== 12/21/2015 ==
Natedog: Updated item table fields and added a few missing fields for evolving items
	-DO NOT implement Heirloom items till the inventory code is fixed to allow placing NO DROP
		items in your shared bank. (but item field located on items table)
	-NYI - SkillModMax: Max skill point modification from the percent mods. EX:
		100% 2HSlashing (Max 50) - can only increase 2hslash by 50 MAX! (item field located though)
Kinglykrab: Added GetMeleeMitigation() for NPCs and Clients in Perl and Lua.
	- This allows you to check total item, spell, and AA melee mitigation contribution.

== 12/19/2015 ==
Kinglykrab: Added many methods to Perl and Lua, list below:
	- SeeInvisible()
	- SeeInvisibleUndead()
	- SeeHide()
	- SeeImprovedHide()
	- GetNimbusEffect1() - returns first nimbus effect
	- GetNimbusEffect2() - returns second nimbus effect
	- GetNimbusEffect3() - returns third nimbus effect
	- IsTargetable()
	- HasShieldEquiped()
	- HasTwoHandBluntEquiped()
	- HasTwoHanderEquiped()
	- GetHerosForgeModel() - returns int32 Hero's Forge model
	- IsEliteMaterialItem() - returns uint32 Hero's Forge Model
	- GetBaseSize() - returns Mob's base size
	- HasOwner()
	- IsPet()
	- HasPet()
	- IsSilenced()
	- IsAmnesiad()

== 12/16/2015 ==
Noudess: Repaired issue with Bind Wounds on someone else.  Message was not coming out on client (hold still) and a bind wounds on someone already binding their wounds would interrupt their bind and make them stand.  Also removed some duplicate messaging.

== 12/14/2015 ==
Kinglykrab: Added IsBlind() and IsFeared() functionality to Perl and Lua.
	- Note: Both methods are Mob methods and may be used on NPCs or PCs.
Natedog: Added Discipline functions, UpdateInstanceTimer function, and UnmemSpellBySpellID to lua and perl
	-Examples: http://wiki.eqemulator.org/i?M=Pastebin&Paste=BJ0ygmNM

== 12/07/2015 ==
Uleat: Command aliases are no longer handled through the command_add() function.
	- To add a command alias, edit the database table `command_settings` - here, you will find three columns: `command`, `access` and `aliases`
	- Adding command aliases require that the command contain an entry in `command_settings`.`command`
	- Only 'real' commands go inside of the command_init() function in command.cpp .. if you wish to add aliases, you must enter them into the database
	- 'Real' commands are loaded first .. then any access/alias data is loaded and applied afterwards
	- Duplicate aliases will be ignored .. only the first encountered occurrence will be honored - if it does not conflict with an existing command name
	- Aliases should not contain whitespace and should be '|' (pipe) delimited
	- The restriction on the number of aliases has been removed .. though each alias will still be limited to the access level of the parent command
	- If you need need more name space for aliases, simply edit the `command_settings` table and increase the size of the `aliases` column
	- The old `commands` table has been renamed to `commands_old` for reference
	- All of the current 'standard' commands have been added to the new `command_settings` table

	- YOU WILL NEED TO VERIFY/IMPORT OLD ACCESS VALUES AS THIS CHANGE REVERTS ALL COMMAND ACCESS VALUES TO THEIR PEQDB DEFAULTS

== 11/30/2015 ==
Uleat: Changed criteria for a few bots scripts from count to null/not null in hopes of fixing special case failures

== 11/22/2015 ==
Uleat: Fix for loginserver project compile failure

== 11/7/2015 ==
Akkadius: Implemented #repopclose [distance in units] - Used for development purposes, defaults to 500 units
	- Real case use: Large zones with 700 NPC's and you are making fast quick tweaks to nearby NPC's you can refresh just the NPC's around you instead of all in the zone
	- This can be quite the time saver
	- This command will depop all NPC's and only respawn the NPC's that are 500 units around you or unless you specify otherwise

== 11/2/2015 ==
Akkadius: Performance boost (exponential) - Adjusted default idle cast check timers in rules
	- Spells:AI_IdleNoSpellMinRecast	500 (Now 6000) 6 seconds
	- Spells:AI_IdleNoSpellMaxRecast	2000 (Now 60000) 60 seconds
	- Database version 9089 will take care of this update automatically only if you used the default values
	- The CPU cost of NPC's checking the entire entity list to cast beneficial spells (Heals/Buffs) becomes extremely high when higher NPC count zones exist (Based off of process profiling)
			- Distance checks for every single NPC to every single other NPC who are casting beneficial spells occur every .5 - 2 seconds unless npc_spells dictates other values, which most of the time it does not
	- Zones that once fluctuated from 1-8% CPU with no activity (Idle but players present) now idle at .5% based on my testings due
		to this change in conjunction with the past few performance commits, these are zones that have 600-800 NPC's in them
	- These values normally are overidden by the spells table (npc_spells), fields (idle_no_sp_recast_min, idle_no_sp_recast_max)

== 11/1/2015 ==
Akkadius: Made many performance optimizing oriented code changes in the source
	- Added Rate limit the rate in which signals are processed for NPC's (.5 seconds instead of .01 seconds)
Akkadius: Added Perl Export Settings which should heavily reduce the Perl footprint
	- Normally when any sub EVENT_ gets triggered, all kinds of variables have to get exported every single time an event is triggered and
		this can make Perl very slow when events are triggered constantly
			- The two most taxing variable exports are the item variables ($itemcount{} $hasitem{} $oncursor{}) and qglobals ($qglobals{})
			- qglobals can pose to be an issue quickly when global qglobals build up, it is highly recommend to use the GetGlobal() and SetGlobal()
				methods instead as they don't reference the hashmap $qglobals{} that is rebuilt every single time a sub event is triggered
	- A stress test conducted with 10,000 samples shows an excess of time taken to export variables: http://i.imgur.com/NEpW1tS.png
	- After the Perl Export Settings table is implemented, and all exports are shut off you see the following test result:
		http://i.imgur.com/Du5hth9.png
	- The difference of eliminating uneeded exports brings the overhead and footprint of 10,000 triggers from 54 seconds to 2 seconds
	- In a 10,000 sample test (10,000 sub event triggers), exporting item variables adds 12 seconds alone, when item variables are only needed in
		EVENT_ITEM and EVENT_SAY a majority of the time if at all
	- In a 10,000 sample test (10,000 sub event triggers), exporting qglobals with approximately 1,000 global qglobals in the database creates
		about 11-20 seconds of delay on its own (Depending on hardware of course)
	- I've written a parser that has determined which of these exports are needed in which sub routines and have turned off all of the unneeded
		exports in sub routines that do not need them and used it to create the default table that will be installed in the database.
	- The export table is called 'perl_event_export_settings' and it resembles the following structure and contains all current 81 EVENTS
		- If an entry doesn't exist in this table and a new subroutine is added to the source, all exports will be on by default for that routine

	+----------+-----------------------------------------+-----------------+------------+-------------+-------------+--------------+
	| event_id | event_description                       | export_qglobals | export_mob | export_zone | export_item | export_event |
	+----------+-----------------------------------------+-----------------+------------+-------------+-------------+--------------+
	|        0 | EVENT_SAY                               |               1 |          1 |           1 |           1 |            1 |
	|        1 | EVENT_ITEM                              |               1 |          1 |           1 |           0 |            1 |
	|        2 | EVENT_DEATH                             |               1 |          1 |           1 |           0 |            1 |
	|        3 | EVENT_SPAWN                             |               1 |          1 |           1 |           0 |            1 |
	|        4 | EVENT_ATTACK                            |               0 |          1 |           1 |           0 |            1 |
	|        5 | EVENT_COMBAT                            |               1 |          1 |           1 |           0 |            1 |
	+----------+-----------------------------------------+-----------------+------------+-------------+-------------+--------------+

	- If a change is made to this table while the server is live and running, you can hot reload all zone process settings via:
		#reloadperlexportsettings
	- For those who wonder what "exports" are, they are reference to variables that are made available at runtime of the sub event, such as:
		(export_qglobals) (Heavy) : $qglobals https://github.com/EQEmu/Server/blob/master/zone/embparser.cpp#L916
		(export_item) (Heavy) : $itemcount{} $hasitem{} $oncursor{} https://github.com/EQEmu/Server/blob/master/zone/embparser.cpp#L1103
		(export_zone) : $zoneid, $instanceid, $zoneln etc. https://github.com/EQEmu/Server/blob/master/zone/embparser.cpp#L1083
		(export_mob) : $x, $y, $z, $h, $hpratio etc. https://github.com/EQEmu/Server/blob/master/zone/embparser.cpp#L1032
		(export_event) : (event specific) IE: EVENT_SAY ($text) https://github.com/EQEmu/Server/blob/master/zone/embparser.cpp#L1141

== 10/16/2015 ==
Uleat: Added command '#bot clearfollowdistance [ <target> | spawned | all ]' to coincide with the activation of the load/save feature for follow_distance

== 10/13/2015 ==
Uleat: Important update to 2015_09_30_bots.sql - fix for orphaned entries causing crashes during the conversion process
Note: Please visit the thread below if you encounter issues during the conversion process

== 10/12/2015 ==
Uleat: Implemented 'bots' database versioning
Note: See thread for more information: http://www.eqemulator.org/forums/showthread.php?t=40091

Kayen: Feign death will now break when hit by casted spells, consisted with live.
Implemented suport for AA/spell effect which provides a chance to avoid FD breaking from spells.

== 10/10/2015 ==
Kayen: Updated mechanics to be consistent with live regarding how invisible breaks when the client is the target of a spell.
Invisible will drop whenever a client is hit with a detrimental spell, regardless of if resisted, if it does damage or AOE.
Hide skill now also follows the same rules as above.
Implemented support for Rogue AA - Nerves of Steel which gives a chance for hide NOT to break
when client is hit with an AOE spell.

== 09/25/2015 ==
Uleat: Implemented 'Inventory Snapshot' feature to track online player inventories at timed intervals.
rules:
	'Character:ActiveInvSnapshots'			- active (true) or inactive (false - default)
	'Character:InvSnapshotMinIntervalM'		- minimum time between snapshots (in minutes)
	'Character:InvSnapshotMinRetryM'		- minimum time to attempt a retry after a failed snapshot (in minutes)
	'Character:InvSnapshotHistoryD'			- minimum time to keep snapshot entries (in days)
commands:
	'#invsnapshot'						- Takes a snapshot of target client's inventory (feature active or inactive)
	'#clearinvsnapshots [use rule]'		- Clears snapshot entries based on bool argument ([true] - honors the 'InvSnapshotHistoryD' rule, [false] - erases all)

== 08/02/2015 ==
Shendare: VS2013 query StringFormat glitches when "%f" is passed for the int GetRunSpeed().
Shendare: In CreateNewNPCCommand(), the npc_type_id and spawngroupid are created in the database, but never set in the spawn class, so later it can't delete them with #npcspawn remove or #npcspawn delete.

== 07/27/2015 ==
Uleat: Reworked the QS Audit code in Handle_OP_ShopPlayerBuy (\zone\client_packet.cpp) to help eliminate potential for exception errors

== 07/22/2015 ==
mackal: Corrected some hate value calcs based on updated http://www.eqemulator.org/forums/showthread.php?t=39819

	Rule Aggro:MaxStunProcAggro to Aggro:MaxScalingProcAggro since the cap applies to more than stuns

== 07/16/2015 ==
mackal: Rework spell aggro based on http://www.eqemulator.org/forums/showthread.php?t=39819

== 07/15/2015 ==
Hateborne: 	Added optional ability to enforce task level requirements in perl and lua via an added, optional parameter to $client->AssignTask and quest::assigntask.
		Use cases:
			quest::assigntask(703); # this still assigns the task as normal, no functional change
			quest::assigntask(703, 1); # this will assign the task, provided the character meets the db-stored level requirements
			$client->AssignTask(703, $npc->GetID()); # still assigns the task as normal, no functional change
			$client->AssignTask(703, $npc->GetID(), 1); # this will assign the task, provided the character meets the db-stored level requirements
== 07/06/2015 ==
mackal: Implement Triple Attack Skill
	Parses showed about rand(1000) for the chance, may need more investigating
	Corrected Double Attack chances as well
	Running optional 2015_07_06_TripleAttack.sql will set current toons to their max skill
	This is optional because the admins might want to go a different route.

== 07/05/2015 ==
mackal: Rewrite NPC combat attack round logic
	An NPC "quading" is really just an NPC with innate dual wield that doubles on both hands
	The old rules allowed NPCs to hit 6 times in one round
	NPCs also seem to have their own skill progression for DW/DA
	See: http://www.eqemulator.org/forums/showthread.php?t=38708
	You can set Combat:UseLiveCombatRounds to false to use the old rules
	PC Double Attack rates kind of follow the same thing but still needs to be implemented
Kinglykrab: WARNING: summonburriedplayercorpse is now summonburiedplayercorpse, getplayerburriedcorpsecount is now getplayerburiedcorpsecount, summon_burried_player_corpse is now summon_buried_player_corpse, and get_player_burried_corpse_count is now get_player_buried_corpse_count FIX THESE IN YOUR SCRIPTS OR THEY WILL NOT WORK!!!!
	Added bot saylinks (thanks Uleat!)
	Command aliases for #augmentitem (#aug), #findnpctype (#fn), #findspell (#fs)
	Bot command changes: #bot sow -> #bot speed, #bot magepet -> #bot setpet, #bot resurrectme -> #bot resurrect
	Changed all occurrences of burried to buried in the code.
	client_packet.cpp was referencing old columns in character_corpses, not sure how we didn't already see this before.

== 7/4/2015 ==
mackal: Reworked the activated avoidace skills (riposte, dodge, etc) based on dev quotes
	This also fixes the order things are checked (avoidance skills, THEN hit/miss)
	Also riposte immunity from the increase riposte chance spell effect.

== 7/2/2015 ==
KLS/mackal: AA system has been rewritten fixing a ton of bugs and extending functionality while making it easier to create new AA points.
KLS/mackal: New tables are needed and so older data will need to be migrated to the new system.
KLS/mackal: The SQL saves the old aa points spent/avail/character_alt_abilities data if any server ops want to do something different than PEQ did with it.
KLS/mackal: Will try to get a wiki entry written up next week some time explaining the system but it's really not hard to follow the db tables in the meantime.

== 7/1/2015 ==
Akkadius: Fix an issue where emote messages would overflow the buffer of 256 by increasing the size and changing some of the initialization
Akkadius: Added a custom Health Update message that will display in the middle of the players screen, to enable this server wide you must enable rule 'Character:MarqueeHPUpdates'
	Example: https://www.youtube.com/watch?v=KUVdbPxLIn0
Akkadius: (Haynar) Fixed some runspeed issues with Perl and LUA scripts
Akkadius: (Haynar) Updated #showstats and #npcstats for new speed calcs to display speeds again in familiar float format.
Akkadius: (Haynar) Improved client movement while AI Controlled, such as feared and charmed.  Movement will be much smoother from clients perspective.

== 06/12/2015 ==
Uleat: Adjusted SessionStats to better reflect a sister implementation

== 06/07/2015 ==
Uleat: Implemented optional rule for using disenchanted bags. Action triggers at the same point that temporary items are removed.
Optional SQL: utils/sql/git/optional/2015_06_07_TransformSummonedBagsRule.sql
mackal: changes to AA packets since more fields have been identified
mackal: fix exploit with expendable AAs punching holes in the aa_array and staying around longer than they are welcomed

== 05/25/2015 ==
Akkadius: Implemented disjointed zone based time, this can be triggered via quest methods
Akkadius: Added parameter to LUA and Perl method settime(hour, minute, [update_world = true])
	- If update_world is false, the zone will then unsubscribe itself from regular worldserver time synchronizations
	- Basically this localizes the zones time and keeps it from syncing with world updates
Akkadius: Added DB ver 9082 with update to add npc_types texture columns if table does not currently have them

== 05/22/2015 ==
Uleat: Added null-term declaration for character names in ENCODE(OP_CharInfo) - where appropriate

== 05/20/2015 ==
mackal: Bard instrument mods should be more consistent with live. Zoning will keep instrument mod for long duration buffs (selo's)
	Still need to have procs/doom effects to inherit the instrument mods from their source buff/whatever

== 05/18/2015 ==
KLS: Changed how fishing locates water to hopefully be a bit more accurate at the expense of a bit more cpu power per line cast.

== 05/15/2015 ==
Uleat: Added check to EntityList::CheckSpawnQueue() to bypass dereference if returned iterator is npc_list.end() - should fix the debug assertion failure crash

== 04/30/2015 ==
mackal: Implement mob and client melee push
       You can set Combat:MeleePush to false to turn off or change Combat:MeleePushChance to increase the chance an NPC can be pushed
       PCs are always pushed, need to do more testing to verify.

== 04/22/2015 ==
Uleat: Probable fix for 'Debug Assertion Failure' in Client::GarbleMessage() when calling the 'isalpha' macro.
ref: https://connect.microsoft.com/VisualStudio/feedback/details/932876/calling-isdigit-with-a-signed-char-1-results-in-a-assert-failure-in-debug-compiles

== 03/29/2015 ==
Secrets: Identified the Target Ring fields for RoF/RoF2.
Secrets: Added a perl accessor for the last target ring position received from the client. Usage: $client->GetTargetRingX(), $client->GetTargetRingY(), $client->GetTargetRingZ()

== 03/12/2015 ==
Akkadius: [eqemu_update.pl V7] Add Option 9) LUA Modules - Download latest LUA Modules (Required for Lua)

== 03/11/2015 ==
Akkadius: [eqemu_update.pl] Add Option 7) Plugins - Download latest Perl plugins
Akkadius: [eqemu_update.pl] Add Option 8) Quests - Download latest PEQ quests and stage updates
Akkadius: [eqemu_update.pl] Set version 5 of script

== 03/10/2015 ==
Akkadius: [eqemu_update.pl] Add Option 6) Download Latest map and water files

== 03/04/2015 ==
Akkadius: Fix Spell Book Deletion

== 03/03/2015 ==
Uleat: Fix for 'Invalid Slot ID' messages. Bag slot count is now enforced during database saves to eliminate existing 'hidden' duplicated items..sorry MQ2 users...
Uleat: Fix for Item loss during corpse looting and possible item loss when purchasing items from LDoN or Adventure merchants. (cursor-related)

== 02/27/2015 ==
Uleat: Final 'tweak' for light sources until a valid issue arises. Wearable equipment now matches client behavior. Stackable light sources are bugged in the client..but, the current timer update implementation alleviates this condition.

== 02/26/2015 ==
Uleat: Updated light source criteria to (hopefully) match what the client uses (still needs tweaking)
Uleat: Changed 'general' light source checks to accept the last valid light source (client behavior)
Notes:
	- "Fire Beetle Eyes" are still causing issues in general slots (no item movement sound effect)
	- Wearable equipment types still register as valid light sources when in general slots (needs exemption criteria)

== 02/23/2015 ==
Noudess: Allow for a rule to set starting swimming && SenseHeading value.
I moved the swimming override to char create instead of setting it
every time a char enters a zone.

Also added rules to not ignore, but rather forrce sense heading packets to be
used to train it instead of maxing it out like before.

Uleat: Fix for RoF+ clients showing active 'Return Home' button when action is not available (swapped 'GoHome' and 'Enabled' fields in RoF-era CharacterSelectEntry structs)

== 02/21/2015 ==
Noudess: Starting erudites that were supposed to start in paineel were landing in erudin on Titanium. Fixed to be paineel.

== 02/20/2015 ==
mackal: Implement claims for RoF/RoF2 (should no longer crash the client!)
	- fixed bugs related to claims for the rest of the clients (woo infinite loops)

== 02/18/2015 ==
Trevius: Fix for potential recursive loops if using RemoveFromHateList() within EVENT_HATE_LIST.

== 02/17/2015 ==
Uleat: Implemented per-client character creation limiting. Caps are unknown atm..so, don't get over-zealous!
Notes:
	- Titanium is hard-coded to min/max of 8 in both the server and client translator code (client doesn't support variations in available character count)
	- SoF thru RoF2 have had their max characters raised to 12 from 10
	- Changing the number of characters per account is accomplished by:
		1) Setting consts::CHARACTER_CREATION_LIMIT to the desired count in the client's constants file in ../common/patches/
		2) Ensuring that eq_dictionary's EmuConstants::CHARACTER_CREATION_LIMIT is equal-greater than the client's new value..referencing is good
		3) Recompiling the server code
	- A rules-based qualifier may be added at some point

== 02/16/2015 ==
Trevius: (RoF2) Bazaar Trading (Buying/Selling) is now fully functional.  Bazaar (/bazaar) search is not yet functional.
mackal: (RoF2) Send the bard focus effects, note custom servers will need to fix their items, server side we still use the old system, but RoF2 wasn't showing anything with not sending focus, so send them

== 02/14/2015 ==
Trevius: (RoF2) Bazaar is now partially functional.  RoF2 clients can start/end trader mode and other clients can purchase from them.  No other functionality yet.
Uleat: Implemented higher bandolier and potion belt counts for clients that support it..you will still need to activate them through the proper aa's, etc...

== 02/12/2015 ==
Akkadius: Implement zone based gravity, required SQL DB change
	- To test `zone` table `gravity` values, change the value and use #zheader <zoneshortname> to test

== 02/11/2015 ==
Trevius: (RoF+) Bandolier no longer displays a Treasure Chest Icon when no Bandoliers are set.

== 02/09/2015 ==
Trevius: (RoF+) Setting Alt flag on characters in the Guild Management Window is now saved and functional for filtering.
Trevius: (RoF+) Guild Invites between RoF+ and previous Clients is now functional.

== 02/08/2015 ==
Kayen: Implemented npc specialability (44) COUNTER_AVOID_DAMAGE which when applied to the ATTACKING NPC will make their attacks more difficult to be avoided by riposte/dodge/parry/block.
Parama0: Negative modifer value that affects ALL avoid damage types dodge/parry/riposte/block) chance on defender. Ie (44,50 = 50 pct reduction to ALL)
Parama1: Negative modifer value that affects RIPOSTE chance on defender. Ie (44,1,0,50 = 50 pct reduction to riposte chance)
Parama2: Negative modifer value that affects PARRY chance on defender.  Ie (44,1,0,0,50 = 50 pct reduction to parry chance)
Parama3: Negative modifer value that affects BLOCK chance on defender.  Ie (44,1,0,0,0,50 = 50 pct reduction to block chance)
Parama4: Negative modifer value that affects DODGE chance on defender.  e (44,1,0,0,0,0,50 = 50 pct reduction to dodge chance)
Example of usage: Player has Improved Dodge V (+50 pct dodge chance), you want to negate this bonus you would set 44,1,0,0,0,0,50 on your NPC.

== 02/07/2015 ==
Akkadius: Reduced #repop time dramatically by taking down hundreds of individual SELECT/DELETE/INSERT queries in routines and bringing it down to very few
	See: https://www.youtube.com/watch?v=9kSFbyTBuAk

== 02/06/2015 ==
Uleat: Updated returns for Inventory and ItemInst const iterators. (const == const)
Uleat: Replaced 'iter_inst' and 'iter_contents' typedefs with their stl definitions
Uleat: Removed 'limbo' from the 'HasItem' series of checks - including lore checks. The client excludes this range and it causes issues when performing item searches - dupe lore checks were added to account for this.
Uleat: Updated command #iteminfo to show light source information and a few other things

== 02/05/2015 ==
Trevius: Fixed Environmental Damage for RoF2.

== 02/03/2015 ==
Trevius: Crashfix for TempName() when numbers are passed at the end of the name.
Uleat: Tweaking of item type exclusions to alleviate strobing conditions with light sources

== 02/02/2015 ==
Akkadius: Implement Packet logs with dumps
	- Category: 41: Packet: Server -> Client With Dump
	- Category: 42: Packet: Server -> Client With Dump
	See: http://wiki.eqemulator.org/p?Logging_System_Overhaul#packet-logging-levels

== 02/01/2015 ==
mackal: Add quest debugging to lua
	eq.debug("Test debug level implicit 1")
	eq.debug("Test debug level explicit 1", 1)
	eq.debug("Test debug level explicit 2", 2)
	eq.debug("Test debug level explicit 3", 3)
Akkadius: Add Packet Logging Categories
	- 5 - Packet: Client -> Server - Logs::Client_Server_Packet
	- 39 - Packet: Server -> Client - Logs::Server_Client_Packet
	- 40 - Packet: Client -> Server Unhandled - Logs::Client_Server_Packet_Unhandled
	See: http://wiki.eqemulator.org/p?Logging_System_Overhaul#packet-logging

== 01/31/2015 ==
Trevius: Fixed FindGroundZ() and GetGroundZ() to once again utilize the X and Y arguments that are passed to them.

== 01/30/2015 ==
Akkadius: Implemented event type "EVENT_ENVIRONMENTAL_DAMAGE"
	- This event triggers when taking any sort of environmental damage. Example use:
	sub EVENT_ENVIRONMENTAL_DAMAGE{
		quest::debug("EVENT_ENVIRONMENTAL_DAMAGE");
		quest::debug("env_damage is " . $env_damage);
		quest::debug("env_damage_type is " . $env_damage_type);
		quest::debug("env_final_damage is " . $env_final_damage);
	}
	Result: (Test falling in Velks): http://i.imgur.com/tPRL7yL.png
	- Implemented LUA counterpart of this same implementation above
Akkadius (Bobaski): Add PoK New Merchant sql/git/optional/2015_01_30_poknowledge_spell_vendors.sql

== 01/29/2015 ==
Trevius: Added more information to Mercenary Logging.
Trevius: Added potential fix for Mercenaries that fail to unsuspend.
Trevius: Added a new "statscale" field to the merc_stats table that can be used to quickly balance Mercenary Stats based on Level.
Trevius: The new "statscale" field now combines with the Mercs::ScaleRate rule value (default 100 percent for both).

== 01/28/2015 ==
Akkadius: Added Logs::DebugQuest category per request from Trevius (Great idea)
	- Exported quest::debug(log_message, [debug_level = 1)
	- Example:
		quest::debug("This is a test debug message, level 1 (default)");
		quest::debug("This is a test debug message, level 1", 1);
		quest::debug("This is a test debug message, level 2", 2);
		quest::debug("This is a test debug message, level 3", 3);

		Result: http://i.imgur.com/6VoafGE.png
	- Uses traditional logging system to output this category
	- Required MySQL Source in Database version 9070

== 01/27/2015 ==
Trevius: Removed "Mercenary Debug:" from the Mercenary Log entries.
Trevius: Resolved duplicate "You have no Mercenaries" messages when zoning without owning a Mercenary.
Trevius: Mercenaries should now always be able to unsuspend if the timer is up.
Trevius: More work on Mercenaries and Grouping to reduce bugs and redundant queries.
Uleat: Finished ClientVersion update to include patch file and namespace updates - don't forget to copy the renamed 'patch_UF.conf' into your eqemu directory.)

== 01/26/2015 ==
Uleat: Changed Corpse::MoveItemToCorpse() to allow 'by address' passing of removed item slot list. Fixed a bug that kept soul-bound items inside of bags from attuning properly

== 01/25/2015 ==
Trevius: Fixed an issue where Mercenaries were causing several DB queries per second while suspended.
Trevius: Added Logs::Mercenaries to the new Logging System.  Logging of Mercenary information is off by default with the required SQL.

== 01/24/2015 ==
Uleat: Added equipment light source functionality to all mob derived classes (may still need tweaking...)
Notes:
	- In addition to equipment light sources, innate npc_type light sources have already been activated
	- Valid light source values are 0 thru 15 (values are bitmask checked and limited to 0x0F)
	- Not all classes handle equipment light sources the same way due to their equipment/loot list configurations
	- Spell (casting?) light sources may be implemented at some point..more information is needed
	- Currently, loot list (general inventory) light sources are limited to ItemTypeMisc and ItemTypeLight to avoid issues with worn-specific light sources emitting
	- Augment light sources are not recognized by the client and, therefore, not implemented in the server code

== 01/22/2015 ==
Akkadius: Massive Log System overhaul, see: http://wiki.eqemulator.org/p?Logging_System_Overhaul&frm=Main

== 01/21/2015 ==
Uleat: Added `light` field to npc_types load query (all six clients tested positive for functionality.)
Note: This only affects 'innate' light. Equipment (other) light is still in-work.
Optional SQL: utils/sql/git/optional/2015_01_21_NPC_Types_Light_Field_Primer.sql

== 01/20/2015 ==
Uleat: Fix for Inventory::_HasItemByUse(bucket) using the parent container when searching for bag container items.

== 01/19/2015 ==
Uleat: Changed 'enum EQClientVersion' to 'enum class ClientVersion.' Other light modifications were made to accommodate this namespace. Added 'RoF2' to the lua client version enumeration.

== 01/15/2015 ==
Uleat: Attempted fix for elusive inventory bug:
  - Removed 'iter_queue' typedef and converted lcast to explicit or auto defines
  - Reworked several functions that manipulate the cursor queue
  - Found/corrected one occurrence of post-processing iterator incrementing in an ItemInstQueue handler
  - Added many scope declarations in code that handles inventory manipulation (loose macros are bad...)
Uleat: Added Item_Struct pointer checks to ItemInst methods that did not have them
Uleat: Changed IsEquippable(race,class) to use bit-wise 'and' (&) over '(x%2)==1' in conditional check.
Uleat: Changed DyeArmor() assignment of 'armor_color' to use bit-wise 'or' and bit-shifting (|,<<) over multiplication and addition (*,+).

== 01/13/2015 ==
Uleat: Placed an upper limit on the cursor queue save loop.
Trevius: (RoF2) Guild invites now add new members as members instead of recruits, and /guild chat works properly.
Trevius: (RoF2) Guild Promote is now functional.

== 01/12/2015 ==
Uleat: Fix for OP_FormattedMessage text link server crashes
Uleat: Added text link translators for OP_TaskDescription (RoF+ -- all clients current)
Uleat: Fix for load_bots.sql using '\\' as a delimiter (Changed to '$$')

== 01/11/2015 ==
Uleat: Added text link translators for OP_TaskDescription (Ti thru UF..RoF+ in-work)

== 01/10/2015 ==
Uleat: Added text link translators for OP_Emote

== 01/09/2015 ==
Uleat: Added text link translators for OP_FormattedMessage

== 01/08/2015 ==
Trevius: Added some extra checks and clean-up related to Groups and Mercenaries.

== 01/07/2015 ==
Uleat: Excluded text link body from message scrambling in Client::GarbleMessage()
Trevius: Mercenaries now load directly from tables only.  The vwMercNpcTypes view is no longer required and can be deleted.
Trevius: Query fix for group_leaders table.  This may resolve some crashes/bugs related to Mercs/Bots and Groups.

== 01/06/2015 ==
Trevius: Changed the pet command #defines to be based on RoF2 list of pet commands and added decodes to Titanium, SoF and SoD.
Trevius: (RoF+) The /pet focus on/off and /pet hold on/off commands are now functional.
Trevius: Added defines for all remaining pet commands and some support for them as well.

== 01/05/2015 ==
Uleat: Fixed (added translators for) item/text links. Only 'OP_ChannelMessage' and 'OP_SpecialMesg' are currently handled..more text channels will be added as the need arises.

== 01/03/2015 ==
Trevius: (RoF2) /shield (shielding) and /key (key ring) are both now functional after opcode updates.

== 01/02/2015 ==
Trevius: (RoF2) *Hopefully* Fixed looting incorrect items from NPCs.  Please report any issues!
Trevius: (RoF2) Now able to loot items past the 10th slot on NPC corpses.
Trevius: Attuned Items can now be auto-looted and will equip properly.
Trevius: Mercenaries and Bots will no longer take a share from /split or /autosplit.

== 12/30/2014 ==
Trevius: (RoF2) Aug Type 21 no longer shows the "Buy Now" button in the aug slot of items.
Trevius: (RoF2) Identified the "Copied" item flag with the help of Uleat.

== 12/29/2014 ==
Trevius: (RoF2) Identified a few Item Fields and resolved an issue with cloth armor not accepting certain augments that they should.
Akkadius: Updated $client->UpdateTaskActivity to have optional argument ignore_quest_update IE: Client::UpdateTaskActivity(THIS, TaskID, ActivityID, Count, [ignore_quest_update])
Akkadius: Also updated internal UpdateTaskActivity methods to optionally ignore quest based task updates to prevent feedback

== 12/28/2014 ==
Uleat: Implemented class Client::TextLink as a replacement for the dozens of individual link formatters.

== 12/27/2014 ==
Akkadius: Add option to automatic database upgrade script 5) Download latest Opcodes from Github
Trevius: (RoF2) Fixed dropping items on the ground so they go to ground level instead of camera height.
Trevius: Show Helm Option should be functional again.
Kayen: Implemened npc special ability (43) CASTING_RESIST_DIFF which sets innate resist modifier on
ALL spells used by that NPC. Ie. 43,1,-200 will set a -200 innate resist diff, so if your npc cast
a spell that has a -10 resist modifier the final resist diff would be -210.

== 12/25/2014 ==
Uleat: Updated 'links' code for all clients

== 12/24/2014 ==
Trevius: (RoF+) Added herosforgemodel field to the npc_types table.
Trevius: (RoF2) Updated item links from #npcstat command output.
Trevius: (RoF+) Implemented Hero's Forge Armor for NPCs.  Set the herosforgemodel field in npc_types table to the model (example: 84 for full set, or 12107 for robe).
Trevius: (RoF+) Hero's Forge Armor now overrides NPC texture settings.  To display Hero's Forge Armor Helms, set helmtexture field to anything other than 0.

== 12/23/2014 ==
Uleat: Tidied up some ItemInst* declarations and added some nullptr checks.
Trevius: (RoF+) Added support for Hero's Forge Robe Models.  Set herosforgemodel field in items table to exact model such as 11607, 11707, etc.

== 12/22/2014 ==
Trevius: (RoF2) Fixed Tracking.
Trevius: (RoF+) Added a work-around for the cursor buffer issue.

== 12/21/2014 ==
Trevius: (RoF2) Fixed Extended Targets Window by correcting opcodes.
Trevius: (RoF/RoF2) Fixed Guild Rank in the Player Profile, which prevents the guild rank message on login/zone.

== 12/20/2014 ==
Akkadius: Updated #cvs to display RoF2 Client Stream count

== 12/19/2014 ==
Trevius: (RoF2) Fixed Leadership AA Purchasing and Recipe Search by correcting opcodes.
Trevius: Fixed Armor Tinting (players and NPCs) that was broken during a previous update.
Trevius: (RoF2) Fixed Rest Timer, Show Helm Option, Auto-Consent Options, and identified Krono in the PP.
Trevius: Fixed Selling for Alternate Currency Merchants for RoF and RoF2.

== 12/18/2014 ==
Trevius: Finished lining up the RoF2 Player Profile Struct.  Zone times are now normal, and everything from the PP is accurate in game now.
Trevius: Fixed zoning after death for RoF2.

== 12/17/2014 ==
mackal: Use vectors for route stuff, should be more CPU cache friendly so faster
Secrets: EQStream changes as recommended by a community member in private.

== 12/15/2014 ==
Trevius: (RoF+) Implemented the 6th Augment Slot for Items.
Trevius: Player Corpses now saved attuned settings for Items.

Required SQL: utils/sql/git/required/2014_12_15_multiple_table_updates.sql

== 12/13/2014 ==
mackal: Fix guild rank spam on zone (needed to be in OP_PP).
Trevius: (RoF+) Implemented Armor Ornamentation using Hero's Forge Armor Models.  To use, create an ornamentation augment and set the herosforgemodel field in the items table.
Trevius: (RoF+) Added command #heromodel (#hm for short) - Usage: #heromodel [hero forge model] [ [slot] ] (example: #heromodel 63)

Be sure to run this or there will be item loss:
Required SQL: utils/sql/git/required/2014_12_13_inventory_table_update.sql

== 12/12/2014 ==
mackal: Add special attack 42, Ignore Root Aggro Rules. This allows you to root a mob and have them still use the normal aggro rules (so they will attack the one with most hate, not closest)

== 12/09/2014 ==
Trevius: (RoF+) Implemented Hero's Forge Armor Models for Items.  To use, set herosforgemodel field in the item table to a model number such as 63 (for example).
mackal: SoF+ swarm pets will no longer be F8able (without a hack!)

== 12/08/2014 ==
Secrets: Added a feature that allows an EQ client to log in directly to World without having to enter the LoginServer, provided the 'password' field is set in WorldServer.

== 12/04/2014 ==
Kayen: Ranged attacks will now more accurately check MAX firing range, fixing the issue where you would
hit ranged attack and nothing would happpen due to incorrect server side range checks.
Trevius: Initial addition of the RoF2 client from May 10th 2013 (currently available on Steam as the F2P client).
Trevius: RoF2 is disabled by default, but you can enable by editing /common/patches/patches.cpp (see comments)

== 12/01/2014 ==
Trevius: Mercenaries now spawn as the same Gender and Size of the Merchant they are purchased from.
Trevius: Mercenaries now spawn with randomized facial features when purchased.
Trevius: Setting a lastname for NPCs will now override any hard coded lastname (such as GM Trainers).

Required SQL: utils/sql/git/required/2014_12_01_mercs_table_update.sql

== 11/28/2014 ==
Trevius: Fixed a zone crash related to numhits for spells.
Trevius: Fixed a query related to group leaders logging in.
Trevius (Natedog): Fixed a world crash related to attempting to join an adventure with Mercenaries.

== 11/27/2014 ==
Kayen: Projectiles (ie Arrows) fired from archery will now do damage upon impact instead of instantly (consistent w/ live).
Optional SQL: utils/sql/git/optional/2014_11_27_ProjectileDmgOnImpact.sql

== 11/25/2014 ==
Trevius: Spells that modify model size are now limited to 2 size adjustments from the base size.
Trevius: Fix to prevent Mercenaries from being set as Group Leader.

== 11/24/2014 ==
Trevius: Added Rule NPC:EnableMeritBasedFaction (disabled by default) - Allows faction gain to work similar to experience.

== 11/22/2014 ==
Trevius: Grouping with Mercenaries is now considerably less buggy.
Trevius: Fixed an issue with Spell Globals related to high Character IDs.
Trevius: Crash fix for Swarm Pets.

== 11/19/2014 ==
Trevius: Mercenaries now Dismiss, Suspend, Unsuspend, and Die correctly.

== 11/18/2014 ==
Trevius: Mercenaries can now zone once again.

== 11/17/2014 ==
mackal: Correct OP_AugmentInfo reply. This fixes RoF display issue with Adventurer's Stone. Still issues with UF/SoF/SoD though.

== 11/16/2014 ==
mackal: fix size issue with ControlBoat_Struct and exploit fix in OP_BoardBoat

Akkadius: Implemented Automatic Database update and versioning system
Akkadius: Created database revision define, this is located in version.h in common #define CURRENT_BINARY_DATABASE_VERSION 9057
	- This revision define will need to be incremented each time a database update is made
	- Along with a revision define increment, you will need to update the db_update manifest located in:
		- https://raw.githubusercontent.com/EQEmu/Server/master/utils/sql/db_update_manifest.txt
		- An entry needs to be made at the bottom of the manifest, the entry is quite simple
		- Example: 9057|2014_11_13_spells_new_updates.sql|SHOW COLUMNS FROM `spells_new` LIKE 'disallow_sit'|empty|
			- This latest example is checking to see if the spells_new table contains the column 'disallow_sit', if its empty, the update needs to be ran
				- More examples of match types below:
		# Example: Version|Filename.sql|Query_to_Check_Condition_For_Needed_Update|match type|text to match
		#	0 = Database Version
		#	1 = Filename.sql
		#	2 = Query_to_Check_Condition_For_Needed_Update
		#	3 = Match Type - If condition from match type to Value 4 is true, update will flag for needing to be ran
		#		contains = If query results contains text from 4th value
		#		match = If query results matches text from 4th value
		#		missing = If query result is missing text from 4th value
		#		empty = If the query results in no results
		#		not_empty = If the query is not empty
		#	4 = Text to match
	- The manifest contains all database updates 'Required' to be made to the schema, and it will contain a working backport all the way back to SVN -
		currently it is tested and backported through the beginning of our Github repo
	- On world bootup or standalone run of db_update.pl, users will be prompted with a simple menu that we will expand upon later:

		============================================================
			   EQEmu: Automatic Database Upgrade Check
		============================================================
				Operating System is: MSWin32
				(Windows) MySQL is in system path
				Path = C:\Program Files\MariaDB 10.0\bin/mysql
		============================================================
				Binary Database Version: (9057)
				Local Database Version: (9057)

				Database up to Date: Continuing World Bootup...
		============================================================
		Retrieving latest database manifest...
        URL:    https://raw.githubusercontent.com/EQEmu/Server/master/utils/sql/db_update_manifest.txt
        Saved:  db_update/db_update_manifest.txt

Database Management Menu (Please Select):
        1) Backup Database - (Saves to Backups folder)
                Ideal to perform before performing updates
        2) Backup Database Compressed - (Saves to Backups folder)
                Ideal to perform before performing updates
        3) Check for pending Database updates
                Stages updates for automatic upgrade...
        0) Exit

Akkadius: Created db_update.pl, placed in utils/scripts folder, used for the automatic database update routine (Linux/Windows)
	- db_update.pl script created db_version table if not created, if old one is present it will remove it
Akkadius: Created db_dumper.pl, placed in utils/scripts folder, used for the automatic database update routine backups and standalone backups (Linux/Windows)
Akkadius: World will now check the db_update.pl script on bootup, if the db_update.pl script is not present, it will fetch it remotely before running -
	when db_update.pl is done running, world will continue with bootup

== 11/15/2014 ==
Uleat(Natedog): A better fix for OP_ShopPlayerBuy - doesn't cause the issues that I introduced
Kayen: Implemented NPC Special Ability 41 'Allow To Tank', gives NPC opportunity to take aggro over a client in melee range.
Kayen: Updated swarm pet AI to be consistent with live.

*OLD AI: Swarm pet would lock on to target until target died, then depop as soon as target died.

*NEW AI: Swarm pet will attack cast on target, NOT perma locked it can change targets if attacked
by something else that generate more hate. When target dies swarm pet will follow owner, if owner is
attacked by something else the swarm pet will attack it (until duration timer despawns the pet).

Kayen: Updated perl quest function: MakeTempPet(Tspell_id, name=nullptr, duration=0, target=nullptr, sticktarg=0)
Kayen: Implemented perl quest function:  Mob::TypesTempPet(npctypesid, name=nullptr, duration=0, follow=0, target=nullptr, sticktarg=0)
Note: 'sticktarg' field will cause the swarm pet to use the OLD AI

Rule to use OLD AI only - default is disabled.
Optional SQL: utils/sql/git/optional/2014_11_15_SwarmPetTargetLock.sql

== 11/14/2014 ==
Secrets: Identified object size and solidtype as flags. Exported them as functions to Perl.
mackal: Don't use the hack for charms that doesn't work on RoF
mackal: UF too
mackal: Tit
mackal: SoF
mackal: SoD
mackal: 62 (untested)

== 11/13/2014 ==
Kayen: Implemented target type (44) 'Beams' (which projects an AE infront of caster with a specified length and width).
Kayen: Implemented target type (32) AE Target HateList
Kayen: Implemented target type (36) Area Client Only
Kayen: Implemented target type (37) Area PC Only
Kayen: Implemented target type (39) Group No Pet
Uleat: PlayerLogMerchantTransactions does not support partial stack purchase logging at this time

== 11/12/2014 ==
Uleat: Changed 'GMTrainee' struct to reflect the actual client hard-coded max skill count (100) - applies to all currently supported clients (6.2->RoF)

== 11/11/2014 ==
Uleat: Third attempt at a fix for GM trainer zone crashes... (this is starting to look like a KLS fix...)

== 11/10/2014 ==
Uleat: Fix for GM Trainer crashing server (really!)
JJ: Yellow faction messages.

== 11/09/2014 ==
Kayen: Implemented support for spell target type (45) 'Target Rings' on Underfoot (does work earlier expansions). Thanks to Lecht for figuring out the op_code side.
JJ: Implement new Live-like faction adjustment message using rule Client:UseLiveFactionMessage.
Optional SQL: utils/sql/git/optional/2014_11_09_LiveFactionMessages.sql

== 11/06/2014 ==
mackal: Tracking default sort will now be correct order
Trevius: Fixed dynamic merchant list loading.  Allows any merchant to be used in any zone.

== 11/03/2014 ==
Secrets: Fixed an overflow in melee lifetap calculations (int16 vs int32)
Secrets: Fixed overflow on AC and ATK values that can go out of range.
Secrets: Merc/Bot fixes for previous updates.
Secrets: Changed a lot of int16s for stat-related functions to int32 because they were causing combat formula overflows (int16/int32 mismatch).
Secrets: Linux fix?

== 11/02/2014 ==
Akkadius: Added out of range checking for Spell Save/Loads

== 11/01/2014 ==
Trevius: Fixed potential crash related to Pets/Mercs buffs when targeting themselves.
JJ: (noudess) Revamped faction system. See https://github.com/EQEmu/Server/pull/256

== 10/28/2014 ==
Uleat: Added Client::InterrogateInventory(). Can be invoked by #interrogateinv and is also called when Handle_OP_MoveItem() calls for SwapItemResync()

== 10/22/2014 ==
Uleat: Fix for stacking items in a world object..added a new command option: #peekinv world - will show world container contents, if one is in use by target.

== 10/20/2014 ==
mackal: Inspect Buffs rank 1 will now show NPC buffs in target window (SoD+)

== 10/19/2014 ==
Uleat: Updated command #peekinv to display item links properly in RoF clients
mackal: Group Mentoring in raids
mackal: Inspect Buffs (text only version) works in raid groups
mackal: Make use of the Inspect Buffs op/packet. 62 SOL until someone finds its op

== 10/18/2014==
mackal: Implement group mentor, sharing leadership exp (SoF+ only)
mackal: Add gaining of group leadership while in raids

== 10/16/2014 ==
Uleat: Fixed the auto-conversion view naming error and renamed the views in the script files. Added a fix sql for databases that auto-converted.
Fix SQL: ../sql/git/bots/deprecated/2014_10_16_Lower_Case_View_Fix.sql

== 10/15/2014 ==
Uleat: Cleaned up load/drop bots sqls, added '../utils/sql/git/bots/deprecated' and '../deprecated/load_bots_old.sql' (use this file on pre-player blob conversion databases.)
Notes: I modifed the behavior of both load and drop bots to fail on the first operation if their modifications have been performed already.
       'load_bots.sql' will explicitly add bot schema, while 'drop_bots.sql' will explicitly drop it. I also added a few lines to change
	   a few altered tables back to their original state - as of the date in the file.

== 10/13/2014 ==
mackal: Partially implement leadership and raids
	Currently working: client side only effects and stat bonuses.
	Not working: Mark NPC, and other stuff that need extra server side support
	Currently only UF tested (Tit and 62 may just work, others need packet work)

== 10/12/2014 ==
Akkadius: Fix for LDON Character Stat load

== 10/11/2014 ==
mackal: Implement Raid MOTD for UF
	Don't forget 2014_10_11_RaidMOTD.sql!

== 10/09/2014 ==
Uleat: Added 'BOTS' conversion code to supplement the database 'PlayerProfile' blob conversion that Akkadius recently implemented.
Note: This automatic conversion uses the view `vwbotcharactermobs` as an update vector. If you need/would like for the converter to run on
previously and/or manually changed code, or just have a need for it to re-run, change the following in the database view and save:
	"c.`last_login`,"				to	"c.`timelaston`,"
	"c.`zone_id`"					to	"c.`zoneid`"
	"FROM `character_data` AS c"	to	"FROM `character_old` AS c"
** This will only work if you haven't deleted your `character_old` table **

== 10/07/2014 ==
mackal: Identified tutorial flag in all charcreate packets, reworked logic to correctly set homes binds

== 10/05/2014 ==
Uleat: Added Server<->Corpse slot translators needed for re-enumeration (inactive until phased in)

== 10/03/2014 ==
Uleat: Fixed Ti(6.2) OP_AugmentInfo translation that I broke (does not currently need and I mis-read a process)
Uleat: Moved client patch OP_LootItem slot translation to external handlers

== 10/02/2014 ==
Kayen: Exported to PERL $client->SendSpellAnim(targetid, spellid)
This function sends the spell graphic of a spell without actually having to cast the spell.

== 10/02/2014 ==
Uleat: First round of Ti/6.2 translators added - needed for re-enumeration

== 10/01/2014 ==
Kayen: Exported to PERL $client->SendColoredText(color, msg)
mackal: Exported SendColoredText to lua

== 09/30/2014 ==
Uleat: Implemented click-casting from bag slots for clients that natively support it (RoF)

== 09/28/2014 ==
mackal: Add support for post June 18, 2014 Hundred Hands Effect spells (they changed the formula and stuff)
set Spells:Jun182014HundredHandsRevamp to true if you're using a spell file from June 18, 2014+

== 09/27/2014 ==
Kayen: Implemented perl function $mob->GetSpellStat(spell_id, identifier, slot);
Note: identifier is the stat field in spells_new, slot is used for certain effects like effectid, base,base2, max ect.
Example $mob->GetSpellStat(121, "range"); //Returns spell range
Example $mob->GetSpellStat(121, "effectid", 1); //Returns the the value of effectid1
This will allow you to pull almost all the data for any spell in quest files.
mackal: Move the client's SetAttackTimer to the end of Client::CalcBonuses to keep the haste in sync
mackal: Correct haste/slow "stacking" rules
mackal: Correct SE_AttackSpeed4 to respect unslowable
mackal: Make the haste be between 1-225 like the client (<100 = slow, >100 = haste) to ...
mackal: Correct Hundred Hands effect and use formula provided by devs

== 09/24/2014 ==
Uleat: Re-ordered server opcodes and handlers to give them some predictability of location (I need this for the inventory re-enumeration.)
mackal: Added helper function bool EQEmu::IsTradeskill(uint32 skill)

== 09/23/2014 ==
Kayen: Spell recourse effects will now be applied AFTER the base spells effects have been applied (consistent with live).
Kayen: SE_ApplySpell and SE_TriggerSpell will now be applied based on which effect slot they are used in (instead of always before all spell effects are checked).
Note: If a spell has multiple SE_TriggerSpell effects within it. Only one will be able to trigger. (If you want multiple spells use SE_ApplySpell)

== 09/22/2014 ==
Akkadius: #resetaa now covers the function of #resetaa and #refundaa
	- #resetaa will wipe all AA data, refund the spent points into the available points and send character to character select properly
Akkadius: Removed #refundaa
Akkadius: Removed a lot of debug code for blob conversion
Akkadius: Changed status logging for loads/saves to Debug category

== 09/21/2014 ==
Akkadius: Player Profile Blob to Database Conversion
	- Summary: HUGE difference in database speeds reads/writes and 1:10 datasize difference
		- The new character storage engine unlike the character_ table before, is able to properly index data and make use of
			proper MySQL/MariaDB caching optimizations and performance has increased phenominally
		PERFORMANCE AND STATISTICS FIGURES (Varies on hardware):
		- EZ Server Character data size of 2.6GB `character_` table alone now takes up approx 600MB
		- Character Data Loads take approx .03 seconds BEFORE MySQL/MariaDB cache
		- Character Data Loads take approx .001-.0035 seconds AFTER MySQL/MariaDB cache
		- Character Data Saves take approx .0001 - .003 for any particular save operation
		- Database Auto Conversion: When the 'character_' table exists, World boot-up will queue an auto-conversion prompt and convert all of your characters, BACKUP
			YOUR DATABASE BEFORE CONVERTING, here is an EASY backup script: http://wiki.eqemulator.org/p?MySQL_DB_Backup_Script
			- On auto conversion, the following tables are created automatically:
				- Table: `character_skills` - Stores Character Skills
				- Table: `character_languages` - Stores Character Language
				- Table: `character_bind` - Stores Character Bind point and Home Bind point designated by is_home bool field
				- Table: `character_alternate_abilities` - Stores all Character AA
				- Table: `character_currency` - Stores all Platinum/Gold/Silver/Copper and character related currencies
				- Table: `character_data` - Stores basic character data (Fields from `character_` table migrated to this table)
				- Table: `character_spells` - Stores character spells
				- Table: `character_memmed_spells` - Stores character memorized spells
				- Table: `character_disciplines` - Stores character disciplines
				- Table: `character_material` - Stores character armor dye textures
				- Table: `character_tribute` - Stores character tributes
				- Table: `character_bandolier` - Stores character bandoliers
				- Table: `character_inspect_messages` - Stores character inspection messages (Moved from `character_` table)
				- Table: `character_leadership_abilities` - Stores character Leadership AAs
	- Loads: Majority of Player profile loads now occur at Client::Handle_Connect_OP_ZoneEntry
		LoadCharacterFactionValues(uint32 character_id, faction_map & val_list);
		LoadCharacterSpellBook(uint32 character_id, PlayerProfile_Struct* pp);
		LoadCharacterMemmedSpells(uint32 character_id, PlayerProfile_Struct* pp);
		LoadCharacterLanguages(uint32 character_id, PlayerProfile_Struct* pp);
		LoadCharacterDisciplines(uint32 character_id, PlayerProfile_Struct* pp);
		LoadCharacterSkills(uint32 character_id, PlayerProfile_Struct* pp);
		LoadCharacterData(uint32 character_id, PlayerProfile_Struct* pp, ExtendedProfile_Struct* m_epp);
		LoadCharacterCurrency(uint32 character_id, PlayerProfile_Struct* pp);
		LoadCharacterBindPoint(uint32 character_id, PlayerProfile_Struct* pp);
		LoadCharacterMaterialColor(uint32 character_id, PlayerProfile_Struct* pp);
		LoadCharacterBandolier(uint32 character_id, PlayerProfile_Struct* pp);
		LoadCharacterTribute(uint32 character_id, PlayerProfile_Struct* pp);
		LoadCharacterPotions(uint32 character_id, PlayerProfile_Struct* pp);
		LoadCharacterLeadershipAA(uint32 character_id, PlayerProfile_Struct* pp);
	- Saves: Occur all over the code now instead of calling full saves
		SaveCharacterBindPoint(uint32 character_id, uint32 zone_id, uint32 instance_id, float x, float y, float z, float heading, uint8 is_home);
		SaveCharacterCurrency(uint32 character_id, PlayerProfile_Struct* pp);
		SaveCharacterData(uint32 character_id, uint32 account_id, PlayerProfile_Struct* pp, ExtendedProfile_Struct* m_epp);
		SaveCharacterAA(uint32 character_id, uint32 aa_id, uint32 current_level);
		SaveCharacterSpell(uint32 character_id, uint32 spell_id, uint32 slot_id);
		SaveCharacterMemorizedSpell(uint32 character_id, uint32 spell_id, uint32 slot_id);
		SaveCharacterMaterialColor(uint32 character_id, uint32 slot_id, uint32 color);
		SaveCharacterSkill(uint32 character_id, uint32 skill_id, uint32 value);
		SaveCharacterLanguage(uint32 character_id, uint32 lang_id, uint32 value);
		SaveCharacterDisc(uint32 character_id, uint32 slot_id, uint32 disc_id);
		SaveCharacterTribute(uint32 character_id, PlayerProfile_Struct* pp);
		SaveCharacterBandolier(uint32 character_id, uint8 bandolier_id, uint8 bandolier_slot, uint32 item_id, uint32 icon, const char* bandolier_name);
		SaveCharacterPotionBelt(uint32 character_id, uint8 potion_id, uint32 item_id, uint32 icon);
		SaveCharacterLeadershipAA(uint32 character_id, PlayerProfile_Struct* pp);
	- Deletes:
		DeleteCharacterSpell(uint32 character_id, uint32 spell_id, uint32 slot_id);
		DeleteCharacterMemorizedSpell(uint32 character_id, uint32 spell_id, uint32 slot_id);
		DeleteCharacterDisc(uint32 character_id, uint32 slot_id);
		DeleteCharacterBandolier(uint32 character_id, uint32 band_id);
		DeleteCharacterLeadershipAAs(uint32 character_id);
	- Now occur all over the code and only trigger when necessary
	- Two FULL saves when looting a corpse, this has been reduced to just currency saves on initial loot and trimmed to one save since AddToMoneyPP did it already
	- Every time a player moves coin with any situation (Splits/Trades/Merchant/Skills/Bank Coin Exchange/Coin Moves), a full save is made, this is now just a currency save
	- Every time a player skilled up at a skill vendor, a full blob save hit was made, this is not just a currency hit
	- Every time an AA was purchased, a full save was made
	- Every time a spell was scribed/swapped, disc was trained
	- When a client exists a zone, when a client enters a zone
	- NOTE: These amount of excessive saves have caused scalability issues that cause the `character_` table to hang which causes process hangs that affect the whole server
		because of the slowness of the `character_` table and the blob not allowing any indexing to occur
	- All functions that once depended on the `character_` table are now rewritten to appropriately read from the `character_data` table
	- Database query errors that occur during conversion or from and load/save/delete character functions are now leveraged via ThrowDBError and logs now go to
		Server_Folder_Root/eqemu_query_error_log.txt (You cannot log errors natively through MySQL)
	- DBASYNC IS NOW COMPLETELY REMOVED - This was mainly for Character data async loads/saves and merchantlist loads
	- Side implementations:
		Perl Exports:
			- quest::crosszonesetentityvariablebynpctypeid(npctype_id, id, m_var) - Sets entity variables world wide with specified npctype_id
			- quest::crosszonesignalnpcbynpctypeid(npctype_id, data) - Signals all NPC entities world wide with specified npctype_id
			- $client->GetTaskActivityDoneCount(TaskID, ActivityID) - Gets task activity done count by task id and activity id for client entity

	VIEW TABLE SIZE AFTER CONVERT:

	SELECT CONCAT(table_schema, '.', table_name) as table_name,
		   CONCAT(ROUND(table_rows / 1000000, 2), 'M')                                    rows,
		   CONCAT(ROUND(data_length / ( 1024 * 1024 * 1024 ), 2), 'G')                    DATA,
		   CONCAT(ROUND(index_length / ( 1024 * 1024 * 1024 ), 2), 'G')                   idx,
		   CONCAT(ROUND(( data_length + index_length ) / ( 1024 * 1024 * 1024 ), 2), 'G') total_size,
		   ROUND(index_length / data_length, 2)                                           idxfrac
	FROM   information_schema.TABLES
	WHERE `table_name` LIKE 'character_%'
	ORDER  BY DATA DESC;

== 09/20/2014 ==
mackal: Fix crash in SendEnterWorld on illegally long names
mackal: The client only lets you enter 15 characters for your name (UF at least)
mackal: Add rule Spells:SHDProcIDOffByOne for pre-UF spell file, set to true, UF+ set to false
KLS: #suspend and #ban now have required messages to record the reason for the ban/suspension.

== 09/19/2014 ==
mackal: Added Client::Tell_StringID (used in tell queue messages)
mackal: Tell queues (and offline) messages now show correctly
mackal: Fix starting with capital check

== 09/18/2014==
mackal: Implement tell queues
	Currently set to a limit of 20 by default (World:TellQueueSize) I was unable to hit the limit on live though (100+)
	The required SQL nukes the old tell queue table, which may or may not be in your DB
	Optional SQL adds the rule to the DB to allow easy of change
	Note: this does not play well with multiple sessions with the same name on (crash and relog and have multiple sessions) but normal tells don't play well either

== 09/16/2014 ==
mackal: Implement spell formula 137 (BER AA Desperation)
Uleat (NateDog): Fix for LoadBuffs() crash when a spell with a non-persistent Illusion effect was loaded.
mackal: Fix some effect calcs + implement more (derived from the client)

== 09/15/2014 ==
Kayen: Nimbus effects will now be reapplied after zoning and will be removed when associated buff fades.

== 09/13/2014 ==
mackal: Fix rogues not having Thieves' Cant

== 09/09/2014 ==
mackal: Incrase Mob kick/bash timer by 3
	see: http://www.eqemulator.org/forums/showthread.php?t=38734
mackal: Fix slow effect on NPC special attack reuse timers
	see: http://www.eqemulator.org/forums/showthread.php?t=38734
mackal: Slow fixes to bots!
mackal: Revamped how NPC attack rate is set
	SQL: 2014_09_09_attack_delay.sql
mackal: Added attackdelay to #npcedit

== 09/08/2014 ==
mackal: Fix slow calc
	see: http://www.eqemulator.org/forums/showthread.php?t=38734

== 09/07/2014 ==
Akkadius: Fixed ROF Augment item dupe with not checking for available slots properly and adding items to the virtual instance

== 09/06/2014 ==
Uleat: Tweaked 'Smart' trading code to return main slots before sub slots in stackable and free space search processes. (If enough people ask for it, I'll add an optional rule to allow 'bag packing' - the original implementation behavior)

== 09/05/2014 ==
Uleat: Fix for cursor item loss when zoning. (Thanks to the other devs who traced and fixed the 'macro' issue!)
mackal: Fix size getting nuked with lua's SendIllusionPacket

== 09/03/2014 ==
Secrets: Identified the routines needed to augment items in RoF. Currently, only Insert and Remove are supported. Swap and Destroy do not work due to missing functions related to the cursor.
mackal: Added work around command to show numhits on your buffs (#shownumhits)
Uleat: Fix for timer issue introduced by Zone::ShutDown() fix.

== 09/02/2014 ==
Secrets: Identified OP_GuildPromote for RoF clients.
Secrets: Fixed promotion, demotion, transferring a leader and displaying of client ranks in the Rain of Fear client. The rain of fear client, as such, will only have 3 ranks like the other clients, but supports a theoretical 8 ranks later.
Secrets/Akkadius: Fixed an issue involving character name lookup in the new DB code.
mackal: crash fix checking DivineAura in hate_list.cpp
Secrets: Reverted some code that got in the main branch that shouldn't have gotten there.
Uleat: Changed #loc to report the same precision as /loc for Cartesians

== 08/31/2014 ==
KLS: Fixed a bug in fishing in S3D zones
KLS: Fixed a bug in turnins with new any abstraction
KLS: Fixed a few quest related inconsistencies.
KLS: Added Lua EntityList::ChannelMessage(from, type, msg, language)

== 08/30/2014 ==
mackal: (noudess) Merchants should be more descriptive of why they don't sell to you

== 08/26/2014 ==
Uleat: Implemented 'Smart' Player Trade transfers. Trades are processed by containers, stackables and then all remaining. QueryServ logs have been updated to match these transactions.
Note: QueryServ logs previously listed 'Items' on the main entry table. This indicated the number of slots affected and not the actual number of items.
This field now indicates the actual number of items transferred. For non-stackable, the value is '1' and stackable is the number of charges. A _detail_count
property has been added to both 'Trade' and 'Handin' structs to indicate the number of details recorded..though, not tracked..it could be added.

== 08/24/2014 ==
Uleat: Fix (attempted) for zone crashes related to zone shut-down. This change disables all Mob AI and disables/deletes all Mob timers once Zone::ShutDown() is called. More areas will be addressed as reports come in.
Note: Perl and Lua quests tested to work..please post any aberrant behavior. (I finally set my spell-check to US English...)
Akkadius: Character creation process crash fix and query cleanup
Akkadius: Created `character_lookup` table for applications that mirrors all `character_` table fields minus blob fields for application lookups
	- A 2.4GB character_ table will take 7 seconds to query on a SSD versus .1s on the character_lookup table
	- This also causes applications like Magelo to burst reads of the entire character table because of the blob fields that come with the reads, as much as 500-600MB/s even if a indexed id filter is provided
	- This field is synchronized on player save and has 0.001s DB hit
	- When we split out from the blob, ideally this table can be removed
	- Required SQL: utils\sql\git\required\2014_08_24_character_lookup.sql

== 08/23/2014 ==
Akkadius: Changed zone process window title format, example: 'crushbone :: clients: 6 inst_id: 1 inst_ver: 0 :: port: 7015'
Akkadius: Most of the following changes are QueryServ related, fully implemented its original functionality to be able to offload
	intensive or metric based logging to a remote server process that could exist on another server entirely
Akkadius: Implemented Player Event Logging Types (Go to table `qs_player_events`):
			1 = Player_Log_Quest,
			2 = Player_Log_Zoning,
			3 = Player_Log_Deaths,
			4 = Player_Log_Connect_State,
			5 = Player_Log_Levels,
			6 = Player_Log_Keyring_Addition,
			7 = Player_Log_QGlobal_Update,
			8 = Player_Log_Task_Updates,
			9 = Player_Log_AA_Purchases,
			10 = Player_Log_Trade_Skill_Events,
			11 = Player_Log_Issued_Commands,
			12 = Player_Log_Money_Transactions,
			13 = Player_Log_Alternate_Currency_Transactions,
		- All QueryServ logging will be implemented with a front end in EoC 2.0 very soon
		- Architecture page: http://wiki.eqemulator.org/p?QueryServ_Architecture
Akkadius: Changed all QS Error related logging to 'QUERYSERV__ERROR'
Akkadius: (Natedog) (Crash Fix) Legacy MySQL bug revert for loading AA's COALESCE( from COALESCE (
Akkadius: Implemented Perl Quest objects (LUA still needed to be exported):
	- quest::qs_send_query("MySQL query") - Will send a raw query to the QueryServ process, useful for custom logging
	- quest::qs_player_event(char_id, event_desc); - Will process a quest type event to table `qs_player_events`
Akkadius: Added MySQL Tables
	- `qs_player_aa_rate_hourly`
	- `qs_player_events`
	- Source table structures from:
		- utils\sql\git\queryserv\required\08_23_2014_player_events_and_player_aa_rate_hourly
		To get the complete QueryServ schema, source from here:
		- utils\sql\git\queryserv\required\Complete_QueryServ_Table_Structures.sql
Akkadius: Added rules for each logging type, source rules here with them enabled by default:
	- utils\sql\git\queryserv\required\Complete_QueryServ_Rules_Enabled.sql
Akkadius: Spawn related logging cleanup
Akkadius: General code cleanup
Akkadius: More to come for QueryServ

== 08/22/2014 ==
Uleat: Rework of Trade::FinishedTrade() and Trade::ResetTrade() to parse items a little more intelligently.

Trade window items are now sent to client inventory in this order:
	- Bags
	- Partial stack movements
	- All remaining items

If any of these procedures cause any problems, please post them immediately.

== 08/20/2014 ==
Uleat: Rework of Trade::AddEntity() - function used to move items into the trade window. Now accepts argument for 'stack_size' and updates client properly.
Note: I tested trade with Titanium:{SoF,SoD,UF,RoF} in both directions and no client generated an OP_MoveItem event for attempting to place a stackable
onto a partial stack already in the trade window. The only way to achieve stacking is to click on the receiving client. If there is a partial stack remaining
on the cursor after the OP_MoveItem event, and there is room available, the client will generate subsequent events to move the remaining count.

== 08/19/2014 ==
Akkadius: Implemented a Stop_Return feature (Accidental item handin prevention) that will be symmetrically used with plugin::return_items that I am currently running live testing on EZ before releasing to EQEmu. This does not hurt to have this in the source.
Akkadius: Fixed crash where 'attacker' validation is not being checked
Akkadius: Removed petition console spam that does not follow traditional logging and is useless
Akkadius: Made fix with SympatheticProcChances where it was checking for TempItem->Focus.Effect instead of TempItemAug->Focus.Effect

== 08/18/2014 ==
Uleat: Fix for https://github.com/EQEmu/Server/issues/127 -- also activated a remarked action in doors.cpp to eliminate a memory leak.

== 08/16/2014 ==
KLS: (addmoreice) Trying out some unstable DB changes.  Do backup your database before trying them as master will be considered unstable for a few days at least.
Uleat (Noudness): Fixed a floating-point comparison error that led to the notorious 'client bounce' (this is not related to the
'mob falling' due to not having maps installed.) This fix also eliminates a sizeable amount of unnecessary out-going packets due
to invalid orientation corrections.
Note: This patch is probably of significant enough importance that admins may wish to manually apply this to older server builds.
The number of packets reduced per second should be approximately (num_stationary_close_clients * (num_close_clients - 1)). This will
likely have the most effect in zones like: Nexus, Bazaar, Guilds (Halls) and RAID INSTANCES - where players don't move around a lot.

== 08/15/2014 ==
Uleat: Reactivated the Bot::Spawn() code for sending post-spawn wear change updates..temporary until I can sort out the proper usage.

== 08/13/2014 ==
Uleat (Kingly_Krab): Fix for bot chest armor graphic glitch. (fix also caused RoF #wc to work properly)

== 08/02/2014 ==
Kayen: Implemented spell_news fields
- npc_no_los (check if LOS is required for spells)
- InCombat, OutofCombat - Used together to restrict spells to only be cast while
in/out of combat (beneficial) or if target is in/out of combat (detrimental).
-min_dist, min_dist_mod, max_dist, max_dist_mod - Scales spell power based on targets distance from caster.
*This will require further work to fully implement but will work with 90% of live spells as is.
*If making custom spells do not include effects that can't be scaled (like a spell trigger)
- min_rage sets minimum distance range that must be away from target.

Required SQL: utils/sql/git/required/2014_08_02_spells_new.sql

== 07/31/2014 ==
Uleat: More inventory slot constant conversions. This should be the bulk of everything..but, due to the size of the server code, there
may be some hidden ones. (client_packet.cpp and the client translators still need a thorough review.)
Note: Please report any abnormal behaviour with inventory-related content..each diff file was reviewed 3 times..but, things CAN be missed.
Uleat: Test fix for client crashes in Bazaar, while actively selling, with a charm in the Trader's Satchel.

== 07/27/2014 ==
Uleat: More updates to the dictionary. Added a 'constants' file for each client translator..these will tie-in to the dictionary. Started
replacement of hard-coded numeric values with a pre-defined constant. This will help in the transition.

== 07/16/2014 ==
Uleat: Initial commit of new client/server 'dictionaries' - work in-progress... Changed equipment slot references to reflect new naming
conventions. Lua enumerations maintain both the old and new names as to not break existing scripts..but, the old names are deprecated.


== 07/14/2014 ==
KLS: Changes to CMake build
	-Lua builds by default now
	-Common has been renamed common
	-Binary files will now be put into ${CMAKE_BINARY_DIR}/bin instead of ${CMAKE_BINARY_DIR}/Bin
	The last two are of note to people on non-windows systems as case sensitivity is important.  Edit your scripts accordingly, thank you.


== 07/10/2014 ==
Kayen: Updated table npc_spells to now support defensive and ranged procs.
Note: Proc rate modifier work as it does for spell effects (ie 200 = 200% baseline chance modifier)
Table is also now contains 12 AI spell casting variables that can be set to fine tune casting behaviors per spell set.
Global default rules have also been added that can further fine tune all content if no specific variables are set.

Descriptions of new AI casting fields in npc_spells
'fail_recast' AI spell recast time(MS) when an spell is cast but fails (ie stunned)
'engaged_no_sp_recast_min' AI spell recast time(MS) checked when no spell is cast while engaged in combat. (min time in random)
'engaged_no_sp_recast_max' AI spell recast time(MS) checked when no spell is cast while engaged in combat. (max time in random)
'engaged_b_self_chance' Chance during first AI Cast check to do a beneficial spell on self (ie check to heal self)
'engaged_b_other_chance' Chance during second AI Cast check to do a beneficial spell on others.(ie check to heal others)
'engaged_d_chance' 'Chance during third AI Cast check to do a determental spell on others (ie check to nuke others)
'pursue_no_sp_recast_min' AI spell recast time(MS) checked when no spell is cast while chasing target. (min time in random)
'pursue_no_sp_recast_max' AI spell recast time(MS) checked when no spell is cast while chasing target. (max time in random)
'pursue_d_chance' Chance while chasing target to cast a detrimental spell.
'idle_no_sp_recast_min' AI spell recast time(MS) checked when no spell is cast while idle. (min time in random)
'idle_no_sp_recast_max' AI spell recast time(MS) checked when no spell is cast while idle. (max time in random)
'idle_b_chance' Chance to cast a beneficial spell while idle (ie cast heal on self while out of combat).

Kayen: Updated table npc_types, adding field 'ranged_type' and 'ammo_idfile'
'ranged_type' Will set what skill / animation is used when NPC uses a ranged attacked (special ability 11)
'ammo_idfile' Will set what projectile graphic an NPC uses in a ranged attacked (special ability 11) Format IT#### (same as item 'idfile')
(*Set to IT11118 for some fun*)
Added parameters: SPECATK_RANGED_ATK = 11
Param0: Min Ranged distance (default: 25)
Param1: Max Ranged distance (default: 250)
Param2: Percent Chance to Hit modifier
Param3: Percent Total Damage modifier

Kayen: Updated to Chance to Hit code with how bonuses are applied to be consistent for all effects.
Added field to npc_types 'Avoidance' which will modify chance to avoid melee
Added rules to set max and min chance to hit from melee/ranged (Default 95% / 5%)

Required SQL: utils/sql/git/required/2014_07_10_npc_spells.sql
Optional SQL: utils/sql/git/optional/2014_07_10_AICastingRules.sql


== 07/5/2014 ==
Kayen: Updated SE_Sanctuary - Adjust way hate lowering effect worked to be more accurate
Kayen: Updated SE_SympatheticProc - Revised proc rate formula to be accurate to live.
Sympathetic foci on items with proc rate mod will now benefit from that modifier.
Sympathetic foci can now be placed on AA's (This should always be slot1 in the AA)
Kayen: Implemented SE_IllusionPersistence- Allows illusions to last until you die or the illusion is forcibly removed.
Kayen: Added rule 'PreNerftBardAEDot' for SE_BardAEDot to allow it to once again do damage to moving targets. (Set to true)
Kayen: Completely revised SE_SkillProc, SE_LimitToSkill, SE_SkillProcSuccess to overall just work better and more accurately, AA support.

Required SQL: utils/sql/git/required/2014_07_04_AA_Update.sql


== 07/2/2014 ==
Kayen: Implemented SE_Sanctuary - Places caster at bottom hate list, effect fades if caster cast spell on targets other than self.
Kayen: Implemented SE_ResourceTap - Coverts a percent of dmg from dmg spells(DD/DoT) to hp/mana/end.
Kayen: Implemented SE_FactionModPct - Modifies faction gains and losses by percent.
Kayen: Re-Implemented SE_TriggerMeleeThreshold and SE_TriggerSpellThreshold correctly - Trigger spell if owner of buff
takes more than the specified damage amount in a SINGLE hit, then fade the buff.
Kayen: Implemented SE_LimitSpellClass - Focus Limits spell to pre defined categories. (3=Cures,3=Offensive, 6=Lifetap)
Kayen: Changed SE_LimitMaxMana to SE_MeleeVulnerability - Weakness/Mitigation verse melee damage
(Despite lives SPA lable as the former it clearly is not what the effect does from all spell examples)
Kayen: Updated SE_BardAEDot to no longer damage target while target is moving (consistent with live)
Kayen: Update SE_InterruptCasting: Will now work for instant spells (as well as over time).

== 06/25/2014 ==
Kayen: Updated SE_Hate (Renamed from SE_Hate2) to now properly work for instant +/- hate spells.
Kayen: Updated SE_FadingMemories - Base value will be properly utilized to set % chance for fade effect to work.
Kayen: Implemented SE_StrikeThough (Was incorrectly defined as implemented previously) - Works same as item bonus.
Kayen: Update SE_Taunt - Limit value if present will now add instant hate.
Kayen: Implemented SE_MassGroupBuff - Allows next group buff cast to be a MGB (AA now uses this)
Kayen: Implemented SE_IllusionOther - Allows next Illusion buff (self only) cast to be cast on target. (AA now uses this)
Kayen: Update SE_AETaunt - Base value will now determine AE taunt range (This will not result in any change to currently used spells).
Kayen: Udpated SE_ReclaimPet - Correct forumla for mana returned to properly return 75% of actual pet spell mana cost.
Kayen: Implemented SE_ImprovedReclaimEnergy - Modifies % mana returned from SE_ReclaimPet.
Kayen: Implemented SE_HeadShot, SE_HeadShotLevel - Defines headshot damage and level requirements.
Revised HeadShot mechanic so damage now receives all archery bonuses, proc chance can be set to either (lives new Proc Per minute
system, or flat chance based on dex (formula updated).
Kayen: Implemented SE_Assassinate, SE_AssassinateLevel - Defines assassinate damage and level requirements.
Revised Assassinate mechanic so damage now receives all backstab bonuses, proc chance can be set to either (lives new Proc Per minute
system, or flat chance based on dex (formula updated). Assassinate can now proc from THROW if behind target, various other adjustments.
Kayen: Fix to AA Finishing Blow missing aa_effects data, update required SQL.
Revised Finishing blow so that damage now receives all melee bonus. Support also for this effect if placed on items or spells.
Kayen: Implemented SE_PetMeleeMitigation - Bonus applied to pet owner. Gives AC to owner's pet.

Required SQL: utils/sql/git/required/2014_06_25_AA_Update.sql
Optional SQL: utils/sql/git/optiional/2014_06_29_HeadShotRules.sql


== 06/17/2014 ==
Kayen: Implemented SE_AStacker, SE_BStacker, SE_CStacker, SE_DStacker.
These effects when present in buffs prevent each other from stacking,
Any effect with B prevents A, C prevents B, D prevents C.
Kayen: Implemented SE_DamageModifier2 (Stacks with SE_DamageModifier, mods damage by skill type)
Kayen: Implemented SE_AddHatePct (Modifies +/- your total hate on NPC by percent)
Kayen: Implemented SE_AddHateOverTimePct (Modifies +/- your total hate on NPC by percent over time)
Kayen: Implemented SE_DoubleRiposte (Modifies +/- your double riposte chance) *Not used in any live effects
Kayen: Implemented SE_Berserk (Sets client as 'Berserk' giving chance to crippling blow) *Not used in any live effects
Kayen: Implemented SE_Vampirsm (Stackable lifetap from melee effect) *Not used in any live effects
Kayen: Minor fixes to how lifetap from melee effects are calced. Removed arbitrary hard cap of 100%, Negative value will now dmg client.
Kayen: Fix to issue that prevented NPC's from receiving HP Regeneration derived from spell buffs.
Kayen: Fixes and Updates for melee and spell mitigation runes.
Kayen: Update to SE_NegateAttack, 'max' value can now set upper limit of damage absorbed. DOT ticks will no longer be absorbed.
Kayen: Implemented SE_Metabolism - Modifies food/drink consumption rates. [Data for AA is already in database]
Kayen: Update to SE_BalanaceMana, SE_BalanceHP to support limit value which caps max mana/hp that can be taken per player.

== 06/13/2014 ==
Kayen: For table 'npc_spell_effects_entries' setting se_max for damage shield effects (59) will now determine the DS Type (ie burning)
Setting se_max to 1 for SkillDamageTaken effects (127) will allow for stackable mitigation/weakness same as quest function ModSkillDmgTaken.
Kayen: Implemented SE_AlterNPCLevel (not currently used on live). Will +/- to NPC level. When fade will revert back to original level.
Kayen: Implemented 'special_abilities' 38 ALLOW_BENEFICIAL (Allows an NPC to recieve player buffs/heals)
Kayen: Implemented 'special_abilities' 39 DISABLE_MELEE (Prevents NPC from auto attacking, will still aggro)
Note: These two special abilities were previously implemented and still remain as quest functions. (SetDisableMelee() and SetAllowBeneficial())

== 06/8/2014 ==
KLS: Changed lua API: eq.get_globals(client, npc) has been removed.  Use eq.get_globals(npc, client) instead.
There's a bug with something in gcc 4.6.3 (maybe other versions) on x86 that this is attempting to combat.

== 05/17/2014 ==
Secrets: Identified the opcode/struct for guild ranks in Rain of Fear+ clients.
Secrets: Implemented a work-around for Rain of Fear clients to have all guild permissions until proper database support is added for newer ranks.

== 05/14/2014 ==
Kayen: Rooted NPC's will no longer target players with Divine Aura effect if they are the closest target and other targets exist on the hate list.

== 05/12/2014 ==
Uleat: Re-arranged functions in Item.cpp to somewhat match the order they are declared in Item.h. Should make finding their location a little easier when using declarations as a guide. (This will facilitate readability of an upcoming change...)

== 05/07/2014 ==
Kayen: AA/Item/Spells that allow pets to critical and flurry will now work on the owners swarm pets consistent with live.

== 05/05/2014 ==
Uleat: Oops! Wrong state check (conn_state != client_state)
Uleat: Test fix to eliminate seemingly random crashes when an AE spell is being used. (Possible access to uninstantiated pointers during client connection process when someone casts a beneficial AE spell within range of a connecting client.)

== 04/29/2014 ==
KLS: Implemented new map code based on some of Derision's earlier work.  Old maps still work with this system and don't need to be regenerated. We're still working on a new azone solution for better/more efficient maps.

== 04/27/2014 ==
Kayen: Implemented new table 'npc_spells_effects' and 'npc_spells_effects_entires'.
       Implemented new field in 'npc_spell_effects_id' in npc_types.


These are used to directly apply spell effect bonuses to NPC's without requirings spells/buffs.
Example: Allow an npc to spawn with an innate 50 pt damage shield and a 5% chance to critical hit.
Please see the wiki page: http://wiki.eqemulator.org/p?npc_spell_effects_entries for details.
*NPC's can now do critical heals / damage spells if bonus is applied from table.

Required SQL: utils/sql/git/required/2014_04_27_AISpellEffects.sql
Note: 30 examples of spell effects have been included by default in this sql. Edited/removed as needed.


== 04/25/2014 ==
cavedude: Corrected a crash in spawn_conditions caused by NPCs on a one way path.
cavedude: Added strict column to spawn_events which will prevent an event from enabling if it's mid-cycle.
cavedude: Prevented disabled or strict spawn_events from enabling when the zone first boots.
cavedude: Fixed the quest function toggle_spawn_event under Perl.

If you're using the quest function toggle_spawn_event (worked on Lua only) it has changed syntax to:
toggle_spawn_event(int event_id, bool enable, bool strict, bool reset_base)

Required SQL: utils/sql/git/required/2014_04_25_spawn_events.sql

== 04/23/2014 ==
Kayen: Improved SE_LimitCombatSkills will now more accurately determine if a spell is a combat proc.
Kayen: SE_LimitInstant will now also work when set to include instant spells.

Optional SQL: utils/sql/git/optional/2014_04_23_FocusComabtProcs.sql
Note: Set to false, if enabled will allow all combat procs to receive spell focuses.

== 04/21/2014 ==
Secrets: Crash fix for more hatelist crashes.
Secrets: Hate list fixes, again.
Secrets: Revert of hatelist changes.

== 04/20/2014 ==
Secrets: Changed the functionality of EQDEBUG cmake flag. It now suppresses logs, but shows crashes in any scenario when set to 1. It will also now show crashes even if the log system is disabled.
KLS: Change to how quest signals work, signals with no delay will now be added to the signal queue.  This addresses an odd timing issue where NPCs are in a state of life/death flux when a signal from event_death goes off.
KLS: Added cmake flags to define how logging behavior works for each different log type.
Secrets: Crash fix for Hatelist crash observed

== 04/18/2014 ==
Akkadius: Added #command error message suppression for those who don't want to see 'Command is not recognized' constantly
	- You need to have rule 'Chat:SuppressCommandErrors' set to true, this is set to false by default
	- Required SQL: 2014_04_18_Suppress_Command_Error.sql

== 04/15/2014 ==
Akkadius: Exported $client->SendMarqueeMessage(type, priority, fade_in, fade_out, duration, msg) - Will be available for simple plugin use
Akkadius: Exported $client->ExpeditionMessage(THIS, ExpdID, Message) - In use with custom expedition mod that will be released soon

== 04/12/2014 ==
Kayen: Fixed an with the slow mitigation code that would cause it to spam the message. Optimized the way the variable is handled for slow mitigation.

Required SQL: utils/sql/git/required/2014_04_12_SlowMitigation.sql
Note: This changes the variable type in the sql table from FLOAT to INT and updates your database.
(When setting slow mitigation 50 = 50%, 100 = 100% ect. You can also set > 100 which will cause slow to become haste now with appropriate in game msg given)

== 04/10/2014 ==
Kayen: Added 'no_target_hotkey' field to npc_types table. This will prevent the NPC from being targeted with F8 (Warning: Will also turn it's name YELLOW)
Kayen: Added a rule to make all (Player cast) Swarm Pets not targetable with F8 (nearest NPC) by default (Warning: Will also turn pets names YELLOW). This is semi-hack but it works.
Kayen: Player cast swarm pets can now be healed and buffed consistent with live.

Optional SQL: utils/sql/git/optional/2014_04_10_SwarmPetNotTargetableWithHotKey.sql
Required SQL: utils/sql/git/required/2014_04_10_No_Target_With_Hotkey.sql
Note: For the required new npc_types field you DO NOT need to set values for swarm pets if you enable the above rule.

== 04/09/2014 ==
Kayen: Implemented ability to use the actual live spell projectile graphics that are defined in the modern spell file.
   *This is disabled by default. Recommend enabling if your server uses an UF+ spell file AND most of your players use UF+ clients.
Kayen: Expanded the PERL ProjectileAnim(mob, item_id, [IsArrow?, speed, angle, tilt, arc, IDFile]) so you can now just set the weapon model graphic IT####
Example: ProjectileAnim($npc, 0, 0, 1, 0, 0, 0, "IT10747")  This will shoot an SK 2.0 sword.
Kayen: Updated wizard innate critical damage modifier to be from 20-70% of base damage (based on live parses)


Optional SQL: utils/sql/git/optional/2014_04_09_SpellProjectileRule.sql
Note: This sql also contains a query to check if your spell file is compatible.

== 04/06/2014 ==
Uleat: Changed Mob::CanThisClassDualWield() behavior. This should let non-monk/beastlord dual-wielding classes attack with either fist as long as the other hand is occupied.
Notes:
	See this thread for more information and to provide feedback: http://www.eqemulator.org/forums/showthread.php?p=229328#post229328

== 04/05/2014 ==
Akkadius: Fix for the Fix for the Fix: Rule Combat:OneProcPerWeapon was created so that you can revert to the original proc functionality
	for custom servers that have balanced their content around having more than 1 aug proc on weapons. By having this rule set to 'false' you revert this functionality.
	This rule is set to 'true' by default as the original functionality from Live was intended to be
Akkadius: (Performance Adjustment) Removed AsyncLoadVariables from InterserverTimer.Check() in both zone and world. By watching the MySQL general.log file on mass zone idle activity, you can
	see that the query 'SELECT varname, value, unix_timestamp() FROM variables where unix_timestamp(ts) >= timestamp' is called every 10 seconds. This function is loading
	variables that are initially loaded on World and Zone bootup. When running a large amount of zone servers, the amount of MySQL chatter that is produced is enormous and
	unnecessary. For example, if I ran 400 zone servers, I would see 3,456,000 unnecessary queries from all idle or active zone processes in a 24 hour interval.
Secrets: Added a rule to enable multiple procs from the same weapon's other slots if a proc is deemed to trigger, Defaults to true.
	If Combat:OneProcPerWeapon is not enabled, we reset the try for that weapon regardless of if we procced or not.
	This is for some servers that may want to have as many procs triggering from weapons as possible in a single round.

Optional SQL: utils/sql/git/optional/2014_04_05_ProcRules.sql

== 04/04/2014 ==
Kayen: Implemented 'Physical Resists' (Resist Type 9) to be consistent with live based on extensive parsing.
       SQL will add new field to npc_types 'PhR' and fill in database with values consistent with observations.

Required SQL: utils/sql/git/optional/2014_04_04_PhysicalResists.sql

== 04/03/2014 ==
Kayen: Implemented live like spell projectiles (ie. Mage Bolts).

Optional SQL: utils/sql/git/optional/2014_04_03_SpellProjectileRules.sql
Note: The rules in this SQL are for setting the item id for the graphic used by the projectile on different clients.

== 04/01/2014 ==
mackal: Implemented ability for a merchant to open and close shop.
	Lua quest functions: e.self:MerchantOpenShop() and e.self:MerchantCloseShop()
	GM Commands: #merchant_open_shop (short: #open_shop) and #merchant_close_shop (short: #close_shop)
		default to status 100, just in case you need to force the merchants status
Trevius: Fixed potential endless quest loop with EVENT_COMBAT and WipeHateList().

== 03/31/2014 ==
Uleat: Fix for unconscious skillups.
Uleat: Fix for crash issue with nullptr reference in recent Client::SummonItem() work.
Uleat: Added rule for GM Status check code in Client::SummonItem().
Note: Rule default is set to 250..but, implementation is on hold until load item code handles the database 'minstatus' field.
Uleat: Added RuleB(Bots, BotLevelsWithOwner). Bots will auto-update as their owner levels/de-levels. Appearance packets are sent to show the 'leveling effect' as well as updating client entities.
Trevius: Prevented an endless loop crash related to EVENT_TASK_STAGE_COMPLETE.

Optional Bot SQL: utils/sql/git/bot/optional/2014_03_31_BotLevelsWithOwnerRule.sql
Note: This sql is required to activate the optional behavior.

== 03/27/2014 ==
Kayen: SE_Gate will now use have a fail chance as defined by its base value in the spell data.
Kayen: SE_Succor will now have a baseline fail chance of (2%). Rule added to adjust this as needed.
Kayen: SE_FeignDeath will now have a fail chance as defined by its base value in the spell data.

Optional SQL: utils/sql/git/optional/2014_03_27_SuccorFailRule.sql

== 03/22/2014 ==
Uleat: Moved the existing 'load_bots' and 'drop_bots' sqls into the emu git repository for the time being. Look to the
	/utils/sql/git/bots/ folder to find them. The 'load_bots' sql has been updated to include the below fix, as well as
	collecting the multiple files into one. This should allow HeidiSQL to now run  it properly. (You will still need to
	search for the optional scripts for the time being.)
Uleat: Fixed bot guild script failure. For existing bot databases only, use this sql file to update the affected table and view.

Required Bot SQL: 2014_03_22_BotGuildMember_ScriptFailureFix.sql

== 03/19/2014 ==
Kayen: Further refinements to root, charm, mez and fear behaviors - See commit message for full details

New rule for 'Fear' break chance, and updates to default settings of various rules.
Optional SQL: utils/sql/git/optional/2014_03_19_RulesUpdates.sql


== 03/18/2014 ==
Uleat: Fixed the name/account discrepancy in the Client::SummonItem() code as well as the origin of the mistake (thanks K_K!)
Uleat: Condensed and rearranged certain snippets of code in SummonItem(). Added a 'augslotvisible' check to validation check.
Note: If you are experiencing issues with SummonItem, please enable 'INVENTORY_ERROR' logging if it not active on your server.

== 03/17/2014 ==
Uleat: Updated Client::SummonItem() to check for valid item combinations when augmentations are passed.
Uleat: Changed the return type of Client::SummonItem() from void to bool. Calling methods and APIs have not been update as yet.
Uleat: Fixed the RoF Item structure to properly pass the 'augrestrict' variable. RoF clients now show restrictions in the Item Information window.

Optional SQL: 2014/03/17_EnforceAugmentRules.sql
Note: This adds the rules Inventory:EnforceAugmentRestriction, Inventory:EnforceAugmentUsability and Inventory:EnforceAugmentWear.
	If you run into script/recipe issues, running this sql file will set the default enforcement rules to false.
	If you still run into issues, you may want to check that your scripts are not trying to augment non-common items.
	Please post any failures as bugs and be sure to include the base item ID, as well as any augment IDs that you are using.

== 03/12/2014 ==
Kayen: Melee/Magic runes are now calculated as bonuses. Resolved issues with runes not working and not fading properly.

== 03/08/2014 ==
Kayen: Revision to lull/harmony/pacification code to be consistent with live based on extensive personal parsing.
*Lulls on initial cast do not check regular resists (MR ect) but only apply a flat ~7.5 % resist chance + level modifier
*If Lull is resisted, a second resistance check is made this time using regular resists and a charisma modifier (same as charm)
which if 'resisted' will cause the caster to gain aggro.

== 03/05/2014 ==
mackal: Corrected rogue's evade to be single target
sorvani: fixed crash issue 119

== 03/04/2014 ==
Sorvani: Created RemoveFromInstance and RemoveAllFromInstance to remove a single player or all players in an instance.
Sorvani: Exported to Lua as eq.remove_from_instance(instance_id) and eq.remove_all_from_instance(instance_id).
Kayen: Revision to root code to be consistent with live based on extensive personal parsing.
*ROOT has a 40% chance to do a resist check to break each buff tick.
*If multiple roots on target. Root in first slot will always and only be check to break from nukes.
*If multiple roots on target and broken by spell. Roots are removed ONE at a time in order of buff slot.
*Roots on beneficial spells can not be broken by spell damage.

Optional SQL: utils/sql/git/optional/2014_03_04_RootRule.sql

== 03/03/2014 ==
mackal: Implemented deadly strikes and gave rogues higher innate throwing crit chance

New rules: Combat:RogueCritThrowingChance, Combat:RogueDeadlyStrikeChance, Combat:RogueDeadlyStrikeMod
	Defaults should give fairly close to live results

== 03/02/2014 ==
Kayen: Revision to charm code to be consistent with live based on extensive personal parsing.
*Charisma ONLY effects the initial resist check when charm is cast with 10 CHA = -1 Resist mod up to 200 CHA
*Charisma DOES NOT extend charm durations.

Optional SQL: utils/sql/git/optional/2014_03_02_CharmRules.sql

mackal: Melee Crits, HoTs, DoTs messages should now be filtered correctly on all clients.
	Clients that also support seeing others DoTs will now see them if they don't filter them
	note: some newer clients have a 'mine only' option for HoTs but it functions the same as show

== 02/27/2014 ==
cavedude: Exported TrainDisc to Lua.

== 02/26/2014 ==
Kayen: Implemented SE_FrenziedDevestation - increase critical spell chacnce and 2x mana cost for DD spells
Kayen: Fixed SE_SpellProcChance - Now works on spell dervived procs
cavedude: Added two new NPC special_abilities. ALWAYS_FLEE, which forces the NPC to always flee ignoring FleeIfNotAlone and FLEE_PERCENT which allows you to change the HP an individual NPC will flee at. If no value is set, the rule is used as normal.
cavedude: Fixed an issue where rectangular roamboxes could cause an NPC to get stuck on a single coord.
cavedude: Added a new roambox column, mindelay allowing you to have more control over the roambox delay.
Uleat: Fix for 'sqrt' failure on vs2010 clients
image: Added idle zone timer to save CPU cycles.

Required SQL: utils/sql/git/required/2014_02_26_roambox_update.sql

== 02/24/2014 ==
cavedude: Better flee runspeed calculation. Added rule Combat:FleeMultiplier to alter this behavior.
Sorvani: Updated GetUnusedInstanceID to not recycle instance ID's unless it has reached max (65535)

== 02/23/2014 ==
Secrets: Exported the client object SendTargetCommand to Perl.
cavedude: Merchants will now keep better track of charges.

== 02/20/2014 ==
Kayen: Implemented SE_MitigateDotDamage	- dot spell mitigation rune with max value
Kayen: Implemented SE_DistanceRemoval - removed from target when target moves X amount of distance away from where initially hit.

Required SQL: utils/sql/git/2014_02_20_buff_updates.sql

== 02/18/2014 ==
Kayen: Implemented SE_TriggerOnReqCaster - triggers a spell which a certain criteria are met (below X amount of hp,mana,end, number of pets on hatelist)
Kayen: Implemented SE_ImprovedTaunt	- Locks Aggro On Caster and Decrease other Players Aggro by X% on NPC targets below level Y
Kayen: Fixed an error where SE_ChangeAggro was adding its bonus x 2 for spell generated aggro. (this applies also to spell casting subtlety AA reduction)

== 02/14/2014 ==
Kayen: Fixes for buffs not fading under certain conditions in revised numhits system, and other fixes.
Kayen: Implemented support for spell_new field CastRestrictions (limits what type of targets spells can effect).
*A detailed list describing what the values used in this field do can be found in Mob::PassCastRestriction*
Kayen: Implemented support for spell_new field not_reflectable, no_partial_resists.

Required SQL: utils/sql/git/2014_02_13_spells_new_updates.sql
Names many unknown fields in the table.

== 02/13/2014 ==
Sorvani: Renamed the instance_lockout and instance_lockout_player tables to instance_list and instance_list_player. Cleaned up the Database::GetUnusedInstanceID logic.

Required SQL: utils/sql/git/2014_02_13_Rename_instance_lockout_tables.sql

== 02/10/2014 ==
mackal (Secrets): Re-wrote the entity list to be a std::map. This should be used for direct entityID lookups and is noticably faster performance-wise. Also should result in less nil pointers potentially.
Secrets: Fixed a crash issue that could occur on #repop related to quest timers.
Kayen: Divine Arbiration and other similar spell effects will now utilize a spell range check.
Kayen: Revised how heal amount is calculated to properly incorporate all current focus effects/bonuses.
Kayen: Various updates/fixes/clean-ups to focus effect related code. Focus effect limits should now all work properly.

== 02/09/2014 ==
Sorvani: Added new spawn condition onchange action: DoRepopIfReady. Choosing this will not repop mobs when the spawn condition is enabled if they have an existing respawn timer. Additionally, this condition will not even attempt repop when the condition is is changed to disabled. Will be in use on PEQ for: Cragbeast Queen in Natimbi.
Secrets: Fixed a weird crash issue with deletion of pointers if task loading fails.

== 02/2/2014 ==
Kayen: Revised how spell/dot damage is calculated to properly incorporate all current focus effects/bonuses.

Required SQL: utils/sql/git/2014_02_02_SpellCriticalsAA.sql

== 01/27/2014 ==
Kayen: Implemented SE_CriticalMend  (chance to critical monk mend)
Kayen: Implemented SE_IncreaseChanceMemwipe (increases the chance to wipe hate with memory blurr)
Kayen: Implemented SE_FcStunTimeMod (modify stun duration from casted spells)
Kayen: Implemented SE_StunBashChance (increase chance to stun from bash)

Required SQL: utils/sql/git/2014_01_27_CritcalMendAA.sql

== 01/26/2014 ==
Kayen: Revised 'dispel' type spell effects (ie cancel magic) to be consistent with live

== 01/23/2014 ==
Kayen: Implemented SE_FfLimitUseType (focus limit to numhits type)

== 01/20/2014 ==
cavedude: Live-Like weather system (Thanks to robregen for figuring it out!)
mackal: Implemented not_extendable spell flag
mackal: Moved Spell Casting Reinforcement to DB
mackal: Moved Mez Mastery to DB
Kayen: Complete revision of the numhits systems to utilize 'numhits type' field in spell file.

== 01/18/2014 ==
sorvani: Implemented for Lua eq.get_characters_in_instance(uint16 instance_id), return a Lua HashTable
mackal: NPCs will now cast their charms.

== 01/13/2014 ==
Kayen: Numerous minor fixes to spell effects.
Kayen: Changed SE_ArcheryDoubleAttack -> SE_DoubleRangedAttack (now works with throwing ect)
Kayen: Changed SE_IncreaseHitDmgTaken -> SE_TriggerMeleeThreshold (now only works on melee)
Kayen: Changed SE_MitigateMeleeDamageSP -> SE_MeleeThresholdGuard
Kayen: Implemented SE_SpellThresholdGuard (Partial Spell Rune that only is lowered if spell hits are over X amount of damage)
Kayen: Implemented SE_TriggerSpellThreshold (implemented  Trigger effect on X amount of spell damage taken)
Kayen: Changed SE_ReduceHealing -> SE_FcHealAmtIncoming (focus limited Add/Remove amount of healing on target by X amount)
Kayen: Change SE_CriticalHealChance2 -> SE_CriticalHealDecay
Kayen: Change SE_CriticalHealOverTime2 -> SE_CriticalRegenDecay
Kayen: Implemented SE_CriticalDotDecay
Note: 'Decay' effects means the chance to critical decays based on the level of the spell using the effect (like focus decay)
Kayen: Implemented SE_FfLimitUseMin (focus limit to require a min amount of numhits value)
Kayen: Implemented SE_FcLimitUse (focus to increases numhits count by percent)
Kayen: Implemented SE_LimitRace	(Limits to spells cast by a certain race)
Kayen: Implemented SE_FcMute  (silences casting of spells that contain specific spell effects) ie silence only heals

== 01/09/2014 ==
mackal: Add pet size preservation like live (zone, camp, etc)

== 01/07/2014 ==
mackal: Moved pet can attack check to before it tries to attack, which is more live like.

== 01/03/2014 ==
mackal: Crash prevention for emote.

== 01/02/2014 ==
mackal: Stuns from beneficial spells (Harvest) ignore immunity

== 12/26/2013 ==
mackal: Added classes_required to merchantlist (same bitmask as items)

== 12/24/2013 ==
Secrets (Akkadius): Perl $client->SilentMessage("Message"); addition, this is a pre-req for a Perl plugin I've shared with EQEmu. This function essentially mimics a player speaking with an NPC - which is used in popup window responses
Secrets: Added functionality to Perl for $client->PlayMP3("name of file").
  Usage varies, but typically you can place an MP3/WAV/XMI in the EQDir//sounds, pfs, s3d, or root client folder and it will play through this Perl function. Example, $client->PlayMP3("combattheme1.mp3") or $client->PlayMP3("TUTBTrade1.mp3")
  All clients except Secrets of Faydwer and 6.2 have their opcodes identified for this function. The struct + supported params is the same throughout versions.
  Use $client->PlayMP3 with an invalid sound file to stop playback or simply wait for it to end.
KLS: Added functionality to Lua for Client:PlayMP3(filename)
KLS: Added functionality to Lua for Client:SendMarqueeMessage(type, priority/opacity, fade_in_time_ms, fade_out_time_ms, duration_ms, msg)

== 12/16/2013 ==
Kayen: Implemented SE_ArcheryDoubleAttack (Chance to do an extra archery attack)
Kayen: Implemented SE_ShieldEquipDmgMod (Increase damage in primary hand if shield equiped)
Kayen: Implemented SE_ShieldEquipHateMod (Increase hate generated if shield equiped)
Kayen: Implemented SE_TriggerOnAmountValue (Trigger spell if HP/Mana/End bellow X value or num pet on target)

== 12/16/2013 ==
Kayen: Fix to SE_BlockNextSpellFocus to make it functional again.

== 12/15/2013 ==
mackal: Moved the blocked buff check down so we get spell effects like on live
Kayen: Implemented SE_ReduceHealing (Reduces amount of healing on target by X amount)
Kayen: Implemented SE_CastonFocusEffect (Triggers spell as part of a focus, when that focus effect is used)
Kayen: Implemented SE_IncreaseHitDmgTaken (Effect is triggered when X amount of damage is taken)
Kayen: More fixes for various spell triggers/procs to now properly use their resist modifier.

== 12/14/2013 ==
mackal: Blocked buffs shouldn't fail, they should just not be applied.
JJ: Changed enable/disable recipe to confirm change made.

== 12/13/2013 ==
Kayen: Implemented additional functionality for SE_CurrentHP utilizing base2 values. (ie limit to body type)
Kayen: Implemented SE_MitigateMeleeDamageSP (Partial Melee Rune that only is lowered if melee hits are over X amount of damage)
Kayen: Implemented SE_SpellOnAmtDmgTaken (Effect is triggered when X amount of damage is taken)
Kayen: Fix for various spell triggers/procs to now properly use their resist modifier.
Kayen: Fix to mob->ModSkillDmgTaken(skill_num, value), setting value to -1 will now properly effect all skills.

== 12/11/2013 ==
mackal: Fixed issue with crippling blow from berserker frenzy not actually doing anything
mackal: Fix haste caps

== 12/04/2013 ==
mackal: Fixed SpellType_Charm case in AICastSpell

== 12/03/2013 ==
mackal: Added #showspellslist to view a mobs spell list
mackal: Fix procing off of unattackable things

== 12/02/2013 ==
JJ: Bandaid fix to CopyCharacter function.

== 11/29/2013 ==
mackal: Stacking issues should be resolved now, probably could be optimized more, but went from 3 loops that do stuff to 3 where only 2 really does stuff and one breaks early in most cases, so slightly better

== 11/23/2013 ==
Secrets: Fixed an issue related to a zone crash where the count of the abilities in an AA was 0, leading to a size 0 buffer issue.

== 11/19/2013 ==
Secrets: Fixed an issue with two zone crashes reported on PEQ related to the buff restrictions code and AAs.
mackal: Partially make use of dot_stacking_exempt (case when it's 1 is implemented, -1 case isn't)

== 11/18/2013 ==
mackal: Added assistradius to npc_types, defaults to aggroradius if set to 0 (old behaviour)

== 11/17/2013 ==
Sorvani: fixed leash and tether special abilities to use the specified range correctly.
mackal: Rewrote the Mob::_GetMovementSpeed fix an issue that arose from the change on 11/11
	- Added the rule Character:BaseRunSpeedCap (default 158) so people can customize what their runspeed cap is. Hardcapped to 225 so stuff doesn't get too crazy.

== 11/16/2013 ==
Leere: Fixed the drinking message for auto-consume, it will again correctly show up for forced consumption instead.
mackal: Added Mob::DoCastingChecks() which will check for various fail conditions while the casting bar is up. This is called after Mob::DoCastSpell() starts the casting and before it returns.

== 11/15/2013 ==
mackal: Fixed Mob::CalcFocusEffect()'s SE_LimitEffect
Leere: Fixed a stacking issue for SE_StackingCommand_Block

== 11/13/2013 ==
mackal: Implemented bard song effect cap. You can set the base cap with the rule Character:BaseInstrumentSoftCap, defaults to 36 or "3.6" as it is sometimes referred to.
mackal: Fix Echo of Taelosia and Ayonae's Tutelage to increase the mod cap instead of further improving the instrument mod
mackal: Implemented Singing/Instrument Mastery as an AA bonus.

== 11/11/2013 ==
mackal: Changed the way walk speed is calculated to allow mobs to have their walk speed equal a 100% movement reduction

== 11/09/2013 ==
Leere: Fixed Bard mana regen, they now only are affected by items and AA.

== 11/07/2013 ==
KLS: Added a system to use the BaseData system in the client.
KLS: Added an optional utility to import spells, skill caps and base data (will import from ./import and export to ./export).

Be sure to source the SQL and run shared_memory.

== 11/06/2013 ==
JJ: (Kingly_Krab) Fix for #npcedit qglobal command.

== 11/01/2013 ==
JJ: Added in-game commands to enable/disable tradeskill recipes
-Commands: #enablerecipe recipe_id, #disablerecipe recipe_id
-Perl: quest::enablerecipe(recipe_id), quest::disablerecipe(recipe_id)
-Lua: eq.enable_recipe(recipe_id), eq.disable_recipe(recipe_id)

== 10/31/2013 ==
Leere: Add the ability to disable a tradeskill recipe

== 10/28/2013 ==
Uleat: Client patch prep work for extending usable skill range (no apparent issues with Ti through RoF[12-10-2012] testing - i.e., clients showed proper skills and they didn't crash)
Uleat: This final patch aligns the existing server PlayerProfile_Struct with the previous changes. The pp_struct, as well as the character 'pp' blob, remains unchanged in size and alignment. The only difference is that the first trailing 100 bytes of the unknown array have been re-assigned to the skills array, and the unknown array decreased by the same amount.
Notes:
	- The existing configuration will allow the use of any new skills up to 99
	- Due to this new segment of the blob having never been written to properly, we may have erratic data there that needs to be cleared before use
	- None of the new skills are coded to use these 'new' skill slots
	- A per-client method will still need to be observed when coding for the new skill uses

== 10/27/2013 ==
Uleat: Attempted fix for high level (12) debug compile failures
Notes:
	- Explicit Windows vs. Linux code was not changed due to my inability to compile Linux code
	- Only CMake accessible flags were corrected if adding the 'std' namespace did not correct the issue
	- the tag [CODEBUG] was added to failed code identifed by the above note
	- If you are having compile issues after this patch is committed, look to the changes here first
Uleat: Changed riposte fail check to proper failure criteria - (x == a && x == b, where a != b) never passes, so skills a and b can riposte (discovery find, no known reported occurences)
Uleat: Enforced naming standard on my recent changes (Sorry for any inconviencies)
Uleat: Moved DeityTypes enumeration from eq_constants.h to deity.h (expanded utility of accessors, but are yet to be implemented)
Uleat: Changed ItemUseType to ItemInstTypes to better reflect the definition (also to free-up the namespace)
Uleat: Changed ItemClass to ItemClassTypes
Uleat: Converted MATERIAL defines to MaterialUseSlots enumeration - use of scripted 'Bracer' and 'Max' are deprecated
Uleat: Changed ItemTypes to ItemUseTypes - retained the 'ItemType' prefix to avoid too much confusion. Also adopted the '1H Piercing' model found in later clients
Uleat: Converted SkillType typedef enumeration to SkillUseTypes enumeration - Some prep work for adding the newer skills
Uleat: Prepped the client patch files for larger skill buffer size (not active)

== 10/24/2013 ==
mackal: Fix some memory leaks in Mob::SpellOnTarget

== 10/21/2013 ==
mackal: Changed GetMinLevel return 0 for more cases that EQ uses for some reason ...
mackal: Added buff level restrictions, set the Spells:BuffLevelRestrictions to false to have the old behavior.

== 10/18/2013 ==
Uleat: Expanded the 'Bag Type' enumeration to include all known values. Also, set in place additional 'Bag Type' to 'Skill Type' conversions. Some of these will need to be verified before activation.
Uleat: Cleaned up some unused enumerations to show a move towards standardization. More to come...

== 10/12/2013 ==
mackal: Allow Titanium and lower clients to enter Tutorial zone from character select
Bad_Captain: Fixed merc crash issue by updating special_abilities & vwMercNpcTypes (Sorvani).
Bad_Captain: Bots- added out of combat bard songs & #bot bardoutofcombat on|off command to turn them on/off.

== 10/11/2013 ==
JJ: (mackal) Allow use of Go Home button when Tutorial still selected in RoF.

== 10/10/2013 ==
Secrets: Fixed zone shutdown (or #reloadqst) reinitalization of Perl. This should allow for Perl 5.14 and later to work on Windows under the new quest system.
mackal: Beneficial single target buffs shouldn't have their mana/timers set if they fail to cast after the Mob::SpellOnTarget call in Mob::SpellFinished
JJ: Revert change to EnterWorldPacket introduced on 22 April 2013 to fix inability to enter Tutorial or Go Home from character select screen.

== 10/09/2013 ==
mackal: Fixed some more instances of the AA timer being eaten

== 10/08/2013 ==
mackal: Added IsBuffSpell(spell_id) that will return true if the spell has a duration, so would end up in effects/song/discs etc windows on the client
mackal: Replaced instances of using CalcBuffDuration to determine if a spell was a buff with IsBuffSpell
mackal: Removed Mob::HasBuffIcon since it was doing what IsBuffSpell does in a more convoluted way with a rather misleading name
mackal: Fixed issues that arose from the 10/03/2013 change

== 10/05/2013 ==
Sorvani: fixed issue with stackable items being created with 0 charges cause by fix to SummonItems

== 10/03/2013 ==
mackal: Fix when the random +1 tick is added to nerf extension focus effects to where they should be

== 09/30/2013 ==
Sorvani: Changed SummonItem to only summon an item with max charges when said default value is present and not on zero charges
mackal: Fixed issue with #showstats showing your level for a bunch of values

== 09/13/2013 ==
mackal: Add support for /pet hold on and /pet hold off (UF and RoF)

== 08/29/2013 ==
KLS: Removed Common Profiler and Zone Profiler.  They're well past outdated status and are just code bloat.
KLS: Fix for reported issue on forums with skills that could potentially be trained before a player achieved the level to train.

== 08/20/2013 ==
Uleat: Fix for bot pet spell buff corruption (existing db issues will correct themselves through pet death attrition)

== 07/18/2013 ==
KLS: Fix for crash in special_abilities code due to existing use of some dangerous code we didn't catch before.

== 07/15/2013 ==
Sorvani: fix for lua_general.cpp funtion get_spawn_condition
Uleat: added non-extensioned wildcard filter to \\...\dependencies\.gitignore to fix tortoisegit inclusion errors (fixes commit and display overlay issues.)

== 07/13/2013 ==
KLS: Added packet class and helper functions to Lua.
KLS: Added quest event: event_unhandled_opcode

== 07/11/2013 ==
KLS: Added a few lua functions.
KLS: Redid the npcspecialatk system with a new system that is more flexible but a little more complicated (this will break any 3rd party tools that deal with them).

Instead of a string such as "ERS" to denote "Enrage Rampage Summon" abilities are indexed by their ability number, level and params separated by '^'.
It is stored in the following format: ability,level[,param0,param1,param2,param3,param4,param5,param6,param7] Params will be read until there are 8 total or a '^' is reached.
Eg: 'ERS' -> '2,1^3,1^1,1

Levels allow us to dictate how abilities behave that may be different even though they're the same ability.
Params allow us to further refine behaviors on a case by case basis.  Passing 0 as a param will use the default value.

NOTE: Be sure to source 2013_07_11_NPC_Special_Abilities.sql.  Also due to the large impact this has on a database it is very HIGHLY SUGGESTED to BACKUP YOUR DATABASE FIRST.

The following are the special abilities currently in the game as well as their levels and parameters currently in use:

SPECATK_SUMMON = 1
Level 1: Summon target to NPC
Level 2: Summon NPC to target
Param0: Cooldown in ms (default: 6000)
Param1: HP ratio required to summon (default: 97)

SPECATK_ENRAGE = 2
Param0: HP ratio required to enrage (default: rule NPC:StartEnrageValue)
Param1: Enrage duration in ms (default: 10000)
Param2: Enrage cooldown in ms (default: 360000)

SPECATK_RAMPAGE = 3
Param0: Proc chance (default: 20)
Param1: Rampage target count (default: rule Combat:MaxRampageTargets)
Param2: Percent of a normal attack damage to deal (default: 100)
Param3: Flat damage bonus to add to the rampage attack (default: 0)
Param4: Ignore % armor for this attack (default 0)
Param5: Ignore flat armor for this attack (default 0)
Param6: Percent of npc's natual crit that can go toward this rampage (default: 100)
Param7: Flat crit bonus on top of npc's natual crit that can go toward this attack (default 0)

SPECATK_AREA_RAMPAGE = 4
Param0: Proc chance (default: 20)
Param1: Rampage target count (default: 1)
Param2: Percent of a normal attack damage to deal (default: 100)
Param3: Flat damage bonus to add to the rampage attack (default: 0)
Param4: Ignore % armor for this attack (default 0)
Param5: Ignore flat armor for this attack (default 0)
Param6: Percent of npc's natual crit that can go toward this rampage (default: 100)
Param7: Flat crit bonus on top of npc's natual crit that can go toward this attack (default 0)

SPECATK_FLURRY = 5
Param0: Proc chance (default: rule Combat:NPCFlurryChance)
Param1: Flurry attack count (default: rule Combat:MaxFlurryHits)
Param2: Percent of a normal attack damage to deal (default: 100)
Param3: Flat damage bonus to add to the flurry attack (default: 0)
Param4: Ignore % armor for this attack (default 0)
Param5: Ignore flat armor for this attack (default 0)
Param6: Percent of npc's natual crit that can go toward this attack (default: 100)
Param7: Flat crit bonus on top of npc's natual crit that can go toward this attack (default 0)

Ex: Normal Flurry with 25% proc rate and 100% crit chance that ignores 500 armor.
5,1,25,0,0,0,0,500,0,100

SPECATK_TRIPLE = 6
SPECATK_QUAD = 7
SPECATK_INNATE_DW = 8
SPECATK_BANE = 9
SPECATK_MAGICAL = 10
SPECATK_RANGED_ATK = 11
UNSLOWABLE = 12
UNMEZABLE = 13
UNCHARMABLE = 14
UNSTUNABLE = 15
UNSNAREABLE = 16
UNFEARABLE = 17
UNDISPELLABLE = 18
IMMUNE_MELEE = 19
IMMUNE_MAGIC = 20
IMMUNE_FLEEING = 21
IMMUNE_MELEE_EXCEPT_BANE = 22
IMMUNE_MELEE_NONMAGICAL = 23
IMMUNE_AGGRO = 24
IMMUNE_AGGRO_ON = 25
IMMUNE_CASTING_FROM_RANGE = 26
IMMUNE_FEIGN_DEATH = 27
IMMUNE_TAUNT = 28

NPC_TUNNELVISION = 29
Param0: Aggro modifier on non-tanks (default: rule Aggro:TunnelVisionAggroMod)

NPC_NO_BUFFHEAL_FRIENDS = 30
IMMUNE_PACIFY = 31

LEASH = 32
Param0: Range (default: aggro range * aggro range)

TETHER = 33
Param0: Range (default: aggro range * aggro range)

DESTRUCTIBLE_OBJECT = 34
NO_HARM_FROM_CLIENT = 35

The following Lua API functions were added to deal with the new system:
Integer GetSpecialAbility(Integer ability);
Integer GetSpecialAbilityParam(Integer ability, Integer param);
Void SetSpecialAbility(Integer ability, Integer level);
Void SetSpecialAbilityParam(Integer ability, Integer param, Integer value);
Void ClearSpecialAbilities();
Void ProcessSpecialAbilities(String str);

The old API functions that worked with letters still exist for backwards compatibility reasons but wont be updated further.

== 07/08/2013 ==
Secrets: Cleanup of some log functions that did not have an 'off' function.**
Secrets: Unknown opcode messages only show on EQDEBUG* >= 5 or higher now. (including the dumped packet)

*NOTE: We recommend for debugging and feature development that you keep EQDEBUG to 5 or higher. For production environments, we recommend 1 to help with CPU performance on windows machines and disk I/O on all platforms.
**Affected filters:
NET__ERROR
NET__DEBUG

== 07/05/2013 ==
KLS: Added some lua functions
KLS: Fixed some lua functions
KLS: Perl now will (like lua) keep track of the values you return from EVENT_*.  This allows perl to use the extra behavior in things like EVENT_DEATH.  Now generally the perl system is now considered deprecated (in favor of lua in the long term) I felt this was too big a change to pass up adding when I got it working.

== 07/02/2013 ==
KLS: Exported eq.follow(entity_id, [distance]) and eq.stop_follow() to lua.

== 07/01/2013 ==
mackal: Fix Monster Summoning related to giants/cyclops
mackal: Prevent Monster Summoning from summoning a portal in bothunder
KLS: Merge of lua branch to master
See: http://www.eqemulator.org/forums/showthread.php?t=37008 for more detailed information on what is added.
Upgrade notes:
	-'templates' quest folder needs to be renamed 'global'
	-'items' quest folder needs to be moved into the 'global' folder
	-'spells' quest folder needs to be moved into the 'global' folder
	-EVENT_PROXIMITY_SAY needs to be enabled via quest before it will work, calling quest::enable_proximity_say() in EVENT_SPAWN will suffice.
	-quest::handleturnin, quest::completehandin, quest::resethandin, and quest::clearhandin have been removed. Take a look at https://code.google.com/p/projecteqquests/source/browse/trunk/quests/plugins/check_handin.pl plugin::mq_process_items, plugin::check_mq_handin, plugin::clear_mq_handin for MQ viable replacements.
	-Some spell quests that overwrote the effects from the spell they were cast on no longer function properly on perl, it's suggested you make the spells empty or rewrite the broken quests in lua and return a non-zero value.
	-Some item quests have changed in a subtle way, though it's unlikely any quests are impacted and the thread has more information if you found any of your quests broke.  As far as I know for example: PEQ didn't have to update any of its nearly 70 item quests.
	-Cazic Touch (982) no longer shouts the name of the thing it is targeting without a script.
	-EVENT_DEATH now triggers before the death is complete.  For the old functionality you may use EVENT_DEATH_COMPLETE.  It might be a good idea to replace all EVENT_DEATH with EVENT_DEATH_COMPLETE in existing spells.

We sought to minimize changes required but it's still a bit disruptive so take a few minutes when upgrading to make sure everything is correct.  Most notably quest::clearhandin was used in some popular plugins to avoid a dupe involved with its code and now that it's gone those will not function if fixes are not applied.

== 06/16/2013 ==
Secrets: Fixed an issue with RoF items and Req/Rec level above 100 appearing yellow. Recommended to enable the #iteminfo command for items that have a req/rec above 100 to display proper information regarding the info.

== 06/15/2013 ==
KLS: (image) Potentially could bypass some spell checks by passing a specially crafted spell slot.  This has been addressed.

== 06/12/2013 ==
KLS: Merge Hateborne's hp cap stuff
KLS: We haven't updated changelog in a while but there's been:
	-Some string stuff
	-A lot of fixes to things like caps.
	-More work on custom mod stuff (including examples)
	-Fix for login not bailing out if it cant connect to a db
	-Quite a few warning changes.

== 05/09/2013 ==
Uleat: (Updated: 06/12/2013) Fixed a few observed bot issues and an beneficial AE casting bug:
	Added missing Bot primary weapon proc call (secondary and ranged already exist)
	Added Bard Bot instrumentation bonuses
	Added checks to avoid AE Buff casting on enemy mobs
	Fixed a few typos in 'Vah Shir'-related code
	(Please post any discrepancies as bugs)

== 05/05/2013 ==
Tabasco: Added EVENT_ITEM_TICK for interactive item quest scripts.  (See https://github.com/josheb/quests_dc/blob/master/items/12204.pl)
	Added simple account flags.  Would this work better as an additional qglobal category?
	Added SendMessage to EQW, useful for using CURL to broadcast to the server.
	Added WorldShutDown to EQW for timed world shutdowns, also updated console worldshutdown command to optionally use timed behavior.
	Added numerous modding hooks and mod_functions.cpp for easy custom formulas or future lua integration.
	Added various rules for monk AC bonus weight, archery bonuses, kick/bash stuns and mob stun levels.
required SQL: 2013_05_05_Account_Flags.sql
required SQL: 2013_05_05_Item_Tick.sql

== 04/28/2013 ==
PiB: Implement CRC16 using CRC32.

== 04/27/2013 ==
PiB: Verify OP_Ack size & fix crash in BasePacket::build_raw_header_dump due to uninitialised timestamp.
Derision: Verify minimum size of OP_Packet, OP_Fragment and OP_OutOfOrderAck.

== 04/24/2013 ==
Bad_Captain: Fixed a couple of merc stat issues.
Bad_Captain: Removed unneeded bot pet AI.
Bad_Captain: Fixed a few bot aggro issues. (Uleat)

== 04/20/2013 ==
JJ: Fixed rare case where heals from buffs could go negative.

== 04/12/2013 ==
Derision: Moved entity_list.Clear() prior to destruction of Perl objects in zone shutdown as I was seeing a segfault due to attempts to call EVENT_HATE_LIST as mobs were being destroyed.

== 04/09/2013 ==
mackal: Realized I was an idiot, changed salvage script to be better
optional SQL: 2013_04_09_SalvageCleanOld.sql - run if ran old script

== 04/08/2013 ==
mackal: Implemented Salvage AA
required SQL: 2013_04_08_Salvage.sql
script: generate_salvage.py - will generate the entries for some exceptions for salvage returns.

== 04/04/2013 ==
mackal: Implemented SE_ForageAdditionalItems as a bonus
required SQL: 2013_04_04_NaturesBounty.sql

== 04/03/2013 ==
mackal: Overloaded Mob::Say_StringID with the option to provide a message type
mackal: Switched rest of the Pet Messages to MT_PetResponse (Leader commands intentionally left the old way)

== 04/2/2013 ==
Bad_Captain: Fixed Merc lack of use of heal over time spells (causing excessive healing).
Bad_Captain: Fixed pet mitigation/AC issues.

== 04/01/2013 ==
mackal: AA reuse timers now start when you hit the button and are reset upon failure
mackal: Instant Cast bard AAs can now be used while singing a song

== 03/30/2013 ==
mackal: Fixed most of the pet talking, all use StringIDs now. Pet now informs you when it taunts.

== 03/23/2013 ==
mackal: Fix issues with escape not always working and fixed SE_FadingMemories to have the message since the message isn't part of the spell data.
    Escape now uses just the spell and not the AA Actoin
    Fading Memories now only uses the AA Action to eat mana

== 03/21/2013 ==
Bad_Captain: Fixed merc buffing bugs.
Bad_Captain: Added checks before dismissing merc to prevent possible bugged mercs.
Bad_Captain: Merged in Secret's merc memory leak fixes.

== 03/20/2013 ==
mackal: Fixed stacking issues with SE_Limit* (ex. Unholy Aura Discipline and Aura of Reverence)

== 03/18/2013 ==
Bad_Captain: Fixed zone crash due to merc focus effects & tribute.
Bad_Captain: Fixed merc aggro issues when client in melee range & spell recast timers.
Bad_Captain: Added melee DPS spells/disciplines & support.

== 03/17/2013 ==
Secrets: Fixed that pesky merc memleak.
Secrets: Bit of code cleanup regarding mercs.

== 03/15/2013 ==
Derision: RoF: Added ENCODE for Resurrect_struct (Accepting a rez should now work).
Derision: Fixed a couple of memory leaks in Rez code.

== 03/14/2013 ==
JJ: (NatedogEZ) Fix for hate list random never selecting last member of hate list.
Bad_Captain: Fixed Merc spell recast timers.
Bad_Captain: Changed how Mercs add mobs to their hate lists (should prevent IsEngaged() issues).
Bad_Captain: Initial Caster DPS Merc spell casting AI, including initial Merc stance implementation.
Bad_Captain: Mercs now suspend when their owner dies to prevent them being bugged (until it can be fixed).

OPTIONAL SQL: 2013_03_14_Merc_Spells.sql

== 03/09/2013 ==
Zaela_S: Stop mobs aggroing on dead players when using RespawnFromHover.
Derision: Removed _log message from zone/CatchSignal on Linux as it can deadlock on shutdown if another signal is received while the _log call is being processed.
Derision: Added some error logging into ZoneDatabase::NPCSpawnDB for #npcspawn create.

== 03/07/2013 ==
af4t: Melee tomes with names beginning "Skill:" (e.g. RNG Warder's Wrath, etc) can be memorized now, by hand-in-to-guildmaster or right-click-from-inventory.

== 03/02/2013 ==
af4t: Stop NPCs aggroing each other with buffs/beneficial spells.

== 03/2/2013 ==
Bad_Captain: Fixed Merc depop bug.
Bad_Captain: Added merc rest regen.
Bad_Captain: Fixed merc group spell casting bug where mercs would continue to try to cast group buffs on pets of caster who didn't have Pet Affinity AA.


== 03/1/2013 ==
Bad_Captain: Fixed Merc duplicate save bug.
Bad_Captain: Focus items, spell_scale and heal_scale now work implemented and new merc equipment (with focus items).
Bad_Captain: Added checks during merc hire, unsuspend, & timer update for states where a merc can't be hired, unsuspended, or can't be retained due to insufficient funds, no room in group, in raid, invalid merc data, etc, and give appropriate feedback.
Bad_Captain: Added rules for charging of merc purchase and upkeep costs.

REQUIRED SQL: 2013_03_1_Merc_Rules_and_Equipment.sql

== 02/27/2013 ==
KLS: Changed how shared memory works:
    Instead of System V/windows pagefile shared memory we now have shared memory that's backed by the filesystem.
    What that means is basically instead of EMuSharedMem(shared library) we now have shared_memory(executable), shared memory will be persistent between runs until you delete or reload it using the shared_memory executable.

    STEPS FOR PEOPLE WHO CAN'T BE BOTHERED TO FIGURE IT OUT:
        1) Create a directory in the place you run world/zone named shared and make sure files can write there.
        2) Run the shared_memory executable from the same place you run world/zone (it's basically doing the loading we would do on startup so will take a moment).
        3) Run world/zone/whatever

== 02/25/2013 ==
af4t: Add Touch of the Wicked AA redux to SK Improved Harm Touch and Leech Touch.

== 02/22/2013 ==
mackal: Mobs will now be removed from XTargets when they get back to their way point, should be last instance of XTarget mobs not clearing when they are not aggroed anymore

== 02/19/2013 ==
Derision: World should no longer crash if the start_zone query fails at character creation.

== 02/18/2013 ==
Bad_Captain: Moved merc save to merc table, save merc buffs, added cure and rez spells to healer merc.
JJ: Chat garbled for drunk characters.
Derision: Charmed pets should no longer be targettable with F8. Charmed pets no longer get a surname of Soandso's Pet.
mackal: Added potionbelt tool tip
KLS: Added EVENT_DEATH to Player Quests

REQUIRED SQL: 2013_02_18_Merc_Rules_and_Tables.sql
OPTIONAL SQL: 2013_02_18_Merc_Spells.sql

== 02/17/2013 ==
Derision: Added optional guildid and minstatus parameters to quest::gmsay(<messsage>, [color], [toworld], [guildid], [minstatus])
Derision: Client version is now returned by the stream proxy as a number.
Derision: Fixed bug where BecomeTrader packets were only being sent to the Trader, not all other clients in the bazaar.

== 02/16/2013 ==
mackal: Fix AA reuse timer calc
mackal: Remove old filters and change all remaining old to new (Also fix Auction filtering out OOC as well due to incorrect define)

== 02/12/2013 ==
Kayen: AA fix

REQUIRED SQL: utils/sql/svn/2504_required_aa_updates.sql

== 02/11/2013 ==
Derision: RoF: Added ENCODE for OP_BeginCast (fixes no sound during spell casting). Corrected OP_DeleteSpell.

== 02/10/2013 ==
JJ: (mackal) Language skill up should use proper function.
JJ: SetLanguageSkill now updates client immediately. Both functions do proper limit checks.
    Added two missing languages. Skill level 0 in a spoken language now shows 'in an unknown tongue'.
JJ: Initial implementation of a GarbleMessage function and implemented for languages. Can be shared with drunk speaking.

== 02/09/2013 ==
KLS: Was pointed out to me that we're in violation of ActiveState Licensing terms for their perl distribution.
To rectify this we have removed the Windows perl binaries from the source.

== 02/06/2013 ==
Uleat: Changed conversion of bot armor colors from long to unsigned long. Conversion error led to #FFFFFFFF for all returns.

== 02/05/2013 ==
cavedude00: Added heading to start_zones
Uleat: Fixed the 'nude' bot issue. Mob::texture was not set to the appropriate value and forcing an unclad body model.
Uleat: Fixed the show/hide helm feature. Added rebroadcast of packet so that changes take place immediately instead of after zoning.
KLS: Addressed several (completely stupid and inexcusable) bugs in the avoidance code that made it impossible to dodge and parry in certain situations.
As a note: please don't touch the avoidance code if you don't know what you're doing, seriously.

Required SQL: utils/sql/svn/2482_required_start_zones.sql

== 02/03/2013 ==
Trevius: RoF: More work on Bazaar Traders.
Sorvani: Items with more than 1 charge should be purchased at max charges again. This does not fix players recharging by sell/buyback method. That will come in the future.

== 02/02/2013 ==
Trevius: RoF: Fixed some opcodes related to surnames and traders.  Surnames can now be cleared.
JJ: Fix to #spawn: Automatically truncate name if too long so spawn will happen as expected rather than a NameTooLong NPC.
JJ: Fix to #spawn: Output actual NPC result after creation rather than projected result before.

== 02/01/2013 ==
Trevius: RoF: Loading Spell Sets now unmems spells before meming the new set.
Trevius: RoF: Turning on Trader mode in bazaar now works, but no further trader functionality is available yet.
Akkadius: Fixed an issue where global_npc.pl was not initializing (initially)

== 01/31/2013 ==
cavedude00: (mackal) Rune aggro fix
cavedude00: (Drajor) Tradeskill skillneeded fix.

== 01/30/2013 ==
Kayen: Various AA fixes, mostly related to SOF display issues.

REQUIRED SQL: utils/sql/svn/2471_required_aa_updates.sql


== 01/29/2013 ==
Secrets: Another attempt to fix this bot/merc group crash on zoning.
cavedude: Added $client->GetInstanceID() Perl export.

== 01/28/2013 ==
Secrets: Fixed a crash issue involving invalid buff slots in SpellEffect code. (Crash fix.)
Secrets: QuestParserCollection no longer processes EventPlayer in the case that a player zones and the group is still valid via linkdeath. (Crash fix.)
Secrets: Added the command #augmentitem. Does the same thing that the #bot augmentitem command does but without the bot command needing to be active. Default 250 status.
JJ: Added quest::depop_withtimer() which will depop NPC and start spawn timer (a replacement for $npc->Depop(1) code if desired)

== 01/27/2013 ==
Trevius: Fixed a bug introduced in Rev2448 that caused some spell casting to use all of a player's mana.
Trevius: Mercenary buffs now display in the Target Buffs window.
Trevius: RoF: Populated a couple more bit fields in the spawn struct.
Trevius: Mercenaries are no longer targetable with NPC targeting hotkeys.

== 01/26/2013 ==
Derision: RoF: Updated spell buffs in the PP to account for instrument_mod/bard_modifier.
Sorvani: Missed a spot on the stun proc aggro change.
Trevius: Fixed Mercenary Upkeep Timers and Stances again for UF and SoD.
Trevius: Fixed Mercenary Upkeep Timers to properly restart after the timer is up for all clients.
Bad_Captain: Mercs - Initial spell casting AI committed.
KLS: Added crash logging for Windows builds.
Trevius: Mercenaries now despawn when a player camps out or disconnects in any way.
Trevius: Players with a Mercenary spawned can now be invited to and join another group with their mercenary.
Sorvani: (mackal): Moved stunproc rule implmentation to catch all cases

OPTIONAL SQL: utils/sql/svn/mercs.sql		-- rerun for updated merc stats & merc spell lists

== 01/25/2013 ==
Sorvani: Implemented max aggro from stun proc set to 400. It is rule based set rule to -1 for unlimited.
Derision: RoF: Should fix x10 Buff bug.
Trevius: Reworked some of the code dealing with Mercenary packets and spawning them.  There is still some work to be done, but the basics are more solid now.
Trevius: Mercenaries function much more consistently now for Hiring, Suspending, Unsuspending, Dismissing.
Trevius: Mercenaries no longer fail to group up after being hired, unsuspended or after zoning/logging in.

== 01/24/2013 ==
Trevius: RoF: The #fixmob command can now go up to race 724 when cycling through races.
Trevius: RoF: The #npcstats command no longer truncates itemlinks.

== 01/23/2013 ==
Trevius: RoF: Corrected multiple opcodes.
Trevius: RoF: Apply Poison is now functional.
Trevius: RoF: /getguildmotd is working.
Trevius: RoF: GM commands /changename, /summon, /emotezone, and /emoteworld are working.
Trevius: RoF: Sense Traps is now working.
Trevius: RoF: Potion Belt is now functional.
Trevius: RoF: /who and /who all now display the correct player counts.

== 01/21/2013 ==
Akkadius: Should have fixed some scenarios where the global_npc.pl script wasn't unloading correctly
Trevius: RoF: Alternate Currencies now display correctly in the inventory window.
Trevius: Changed one of the mercenary data packets to use the same packet Live does instead of the Merchant packet.
Uleat: RoF: Aligned the extended client slots back into slottype 0. Previously, corpse looting stopped after looting the ninth slot. (There's still an issue addressing slots 31 and 32..this cannot be efficiently corrected until an inventory rework is performed.)
Uleat: Fixed a corpse looting issue where the power source item (slot 9999) was being omitted from the corpse inventory. A previous oversight on my part. Also refined message reporting. (RoF: increased corpse slot limit to 34)
Uleat: Power Source items will now report in 'worn' instead of 'inv' when using #peekinv.

== 01/20/2013 ==
KLS: intN types have changed to more closely reflect C99 and C++11 types:
intN was an unsigned int of N bits -> it is now a signed int of N bits.
sintN was a signed int of N bits -> it has been removed in favor of intN.
uintN is still unsigned.
The existing types in the code have been changed automatically(intN -> uintN, sintN -> intN), but keep this in mind when developing in the future.

== 01/19/2013 ==
Akkadius: Implemented global_npc.pl, this is very similar to global_player.pl where any normal NPC script will run dual-stack or in tandem with the global_npc.pl located in the templates folder
Akkadius: Implemented the ability to modify EXP and AAEXP modifiers per Level, these are loaded from an optional table (level_exp_mods) that is attached to the commit, you MUST enable the rule first!
Akkadius: Added #reloadlevelmods - which will reload level mods from the `level_exp_mods` table
Derision: RoF: Guild name now appears in the Guild Management window and over player's heads. /guildstatus now works. Guild members status now updates in the GMW.
Uleat: Corrected the BulkSendInventory process for incomplete item trade returns resulting from a server crash. Previous code used an external reference and items were never moved..and hence, lost once a new trade occurred.
Uleat: Added mlog messages to existing BulkSendInventory code to report hidden item movements and deletions. All BSI and helper processes now log movements/deletions.
Uleat: Added two new client pre-entry inventory validation methods - RemoveDuplicateLore and MoveSlotNotAllowed. Duplicate lore was not checked and IsSlotAllowed failures were not handled. Both were causes of persistent desyncs.
Uleat: Corrected a bug in ItemInst::IsSlotAllowed that 'passed' PowerSource slot checks regardless of ItemInst::Slots value.
Uleat: [Client-Server Inventory Desyncronization] Most CSD bugs should now be corrected, or at least, compensated for. Please post any desync issues as a new bug post or pm a Dev or GM if it involves an exploit.

Optional SQL: \utils\sql\svn\2428_optional_levelbasedexpmods.sql

== 01/18/2013 ==
Akkadius: Fixed an size value of hp_regen_rate for NPC's so values don't roll over into negative values
KLS: EQEmu has been setup to use CMake, this is mandatory.
Visit http://www.eqemulator.net/wiki/wikka.php?wakka=CMake for instructions on Windows/GCC.

== 01/17/2013 ==
Uleat: Added opcode handlers for OpenInventory(SoF and SoD) and OpenContainer(SoF, SoD, UF and RoF). Both still need slot translators.
Uleat: Changed internal SwapItem method from void to bool return. Added appropriate code to handle returns.
Uleat: Added an abbreviated form of the resync code - SwapItemResync. Handles failed item swaps on a case-by-case basis.
Uleat: Fixed a bug that allowed duplication of non-stackable, charged items..lore or otherwise. (Sorry cheaters...)

== 01/16/2013 ==
Derision: RoF: Updated OP_LogServer encode based on a live packet in order to enable 'Enter Tutorial from character select.
Secrets: Added five new functions to perl for clients: GetBindX, GetBindY, GetBindZ, GetBindHeading, and GetBindZoneID. They all have an optional parameter of index of playerprofile's bindpoint.
Secrets: Added an optional parameter to GetBind for index.

== 01/15/2013 ==
Derision: RoF: Added Encode for OP_TaskDescription and removed RoF specific code for it from tasks.cpp
Derision: Fixed some compiler warnings.
Trevius: RoF: Varlinks and Saylinks now display properly for RoF.
Trevius: RoF: Started work on Mercenaries.  They are partially functional but need more work.
Trevius: RoF: Started work on Guilds.  The guild window can now display members, but the guild name does not yet display.

== 01/14/2013 ==
Derision: RoF: Fixed bug that was causing only one task to show in the Active Task window.
Derision: Fixed potential crash in QuestManager::varlink. Removed some unused variables that gcc was warning about.

== 01/13/2013 ==
Derision: RoF: Encoded OP_TaskHistoryReply and added temporary handling for short OP_TaskActivity packets until encode is down for that.
Derision: Deleted Anniversary/HoT/VoA and Live patches.
Derision: Updated StaticGetZoneName with all zones currently in the PEQ database.
Trevius: RoF: Disciplines now update without zoning.

== 01/12/2013 ==
Derision: RoF: Personal Tribute and the Pet Buff Window now work.
Derision: Fixed potential crash in SendPetBuffsToClient.
Derision: RoF: Accounted for the fact the Duplicate Lore item message now includes the item's name.
Trevius: RoF: The Task Selector Window is now functional.

== 01/11/2013 ==
JJ: Added rule check to zone - no need to load Merc Templates if Mercs aren't allowed.

== 01/10/2013 ==
Trevius: RoF: Corrected multiple opcodes.
Trevius: RoF: #finditem now displays itemlinks correctly.
Trevius: RoF: Started work/testing to get Tasks functioning. Don't click tasks in the history tab or client will freeze.
Trevius: Added some possible crash fixes.
Bad_Captain: Mercs - temp fix for possible crash when dying with RespawnFromHover on, fixed infinite stats (buffs continually adding to stats).

== 01/09/2013 ==
Derision: RoF: Corrected LDoN merchant opcodes, added encode for OP_AdventureMerchantSell. Updated PP with available LDoN points.
Bad_Captain: Mercs - removed debug messages, fixed regen.

== 01/08/2013 ==
Derision: RoF: Marked position of Monk 'Mend' skill cooldown timer in PP. Fixed a typo.
Bad_Captain: Mercs - Merged from branch. Initial merc commit to trunk with semi-functional tank mercs.
Uleat: RoF: Changed opcode so that is handled properly. (Was writing to the log about twice-per-second.)
Trevius: RoF: Death no longer crashes players and the respawn window is now functional.
Trevius: RoF: More work on slot conversions.  This time for the cursor buffer.
Trevius: RoF: Some work on Guild Master Training packets, but still only seeing languages displayed.

REQUIRED SQL: utils/sql/svn/2383_required_group_ismerc.sql				-- adds ismerc column to group_id table
OPTIONAL SQL: utils/sql/svn/2380_optional_merc_rules.sql						-- Contains rules for mercs including rule to enable mercs
OPTIONAL SQL: utils/sql/svn/2380_optional_merc_merchant_npctypes_update.sql		-- Contains npc_types & spawn updates for merc merchants in PoK
OPTIONAL SQL: utils/sql/svn/2380_optional_merc_data.sql							-- Contains basic merc data, template info, & merc merchant entries
OPTIONAL SQL: utils/sql/svn/mercs.sql											-- Contains merc stats & armor - to be replaced as needed with updated stats, spells, etc. Allows a complete resourcing of file

== 01/07/2013 ==
Trevius: RoF: /who and /who all now function properly.
Trevius: RoF: Adjusted/corrected some of the slot conversion functions.
Kayen: Various AA Fixes including a critical crash bug.

REQUIRED SQL: utils/sql/svn/2376_required_aa_updates.sql

== 01/06/2013 ==
Kayen: Fix for missing and incorrect Healing Adept AA values.
Trevius: RoF: Possible crash fix for logging in on some server builds.
Trevius: RoF: Added VoA to the #cvs command output.
Derision: RoF: Short buffs should appear in the song/short buff box.
Lerxst/Hateborne: Updated Mob::TryDivineSave to allow someone to be saved even if there are no additional effects to be cast and rearranged the buff fading so the spell effect isn't lost before it can be cast.

REQUIRED SQL: utils/sql/svn/2370_required_aa_updates.sql

== 01/05/2013 ==
Trevius: RoF: Tradeskill combines (auto-combine and experiment) are now functional.
Trevius: RoF: The Popup Message window is now functional.
Trevius: RoF: Increased the max race id for #race to 724 (the max for RoF).
Trevius: RoF: Corrected the opcode for Augmenting Items and adjusted the struct, but it looks like it may require considerable work to implement the new augment system.
Akkadius: Trap Zone Crash issue where message is empty
Akkadius: Fixed a warning regarding AC
Vaion: RoF: Books now work properly.

== 01/04/2013 ==
Trevius: RoF: Looting items and loot all are now functional.
Trevius: RoF: Trading to NPCs and Players is now functional.
Trevius: RoF: AA Purchases are now functional.
Trevius: RoF: Opening Tradeskill Objects is now possible.
Trevius: RoF: Moving items into Tradeskill Objects is now possible, but combines will bug the client.
Uleat: QS: Added 4 additional logging options [MerchantLogTransactions], [PlayerLogDeletes], [PlayerLogHandins], [PlayerLogMoves]
Uleat: QS: PlayerLogHandins is partially enabled..currently logs NPCtypeID and Client-side trade information only.
Uleat: QS: Renamed 1 existing source files to maintain logging name continuity [PlayerLogTrades].
Uleat: Fixed minor issue that was causing armor glitches with RoF clients from UF and lower clients.
Uleat: Fixed minor bug in the #iteminfo command where the material value reported 0x20xx.

REQUIRED SQL: utils/sql/svn/2361_required_qs_rule_values.sql
REQUIRED SQL: utils/sql/queryserv/2361_QueryServ.sql
REQUIRED SQL: utils/sql/queryserv/2304_QueryServ.sql (rename '2304_qs_playertradelog.sql' - Does not need to be re-sourced)

== 01/03/2013 ==
Trevius: RoF: Fixed slot conversion issues for Bank and Shared Bank
Trevius: RoF: Normal Merchants are now fully functional for buy/sell
Trevius: RoF: Item Links now display item stats when clicked, but the links are still truncated.
Trevius: RoF: Corrected the Illusion Struct and corrected some opcodes.
Trevius: RoF: Updated the DeleteSpawn struct and added an encode for it.
Trevius: RoF: Hopefully fixed Consuming food/drink.

== 01/02/2013 ==
Vaion: RoF: Crash prevention for Item Preview window.
Trevius: RoF: Finished identifying basically all of the remaining RoF opcodes.
Akkadius: Fix for Guild Crash again...

==01/01/2013==
Uleat: Fixed the wear change issue where the server was not translating the SoF, SoD and UF clients' update request properly.
Uleat: Fixed the non-clickable quest reward bug triggered when the item was in a container and the player traded the item or zoned.
Vaion: RoF: Found Opcode for Item Previews.  Made base packet support so that Item Preview (Alt+Right Click) works.  Still a few issues to hash out.

==12/31/2012==
Derision: RoF: Added encode/decode for BlockedBuffs and OP_FindPerson. Added opcodes for FindPerson and RestState
Derision: RoF: Found XP/AAXP in the PP. Updated OP_ExpUpdate/OP_LevelUpdate.

==12/30/2012==
Derision: RoF: Did some work on buffs & buff removal. OP_SetChatServer2 for UCS. Encode for OP_HPUpdate

==12/29/2012==
Derision: RoF: Added Leadership AA into the PP. Few opcodes to make Track work.
Derision: RoF: Some spell related opcodes and PetCommands struct update.
Vaion: RoF: Fixed OP_PetCommands and OP_TargetCommand to correct opcodes.  Identified OP_Jump.
Vaion: Fix for an issue with attuneable augments and an issue in guild bank.
Sorvani: Fix for pets causing a crash. Do not set rule > 25!
Trevius: RoF: Corrected wearchange packet structure.
Trevius: RoF: Added new arguments to #wc ( #wc [wear slot] [material] [ [hero_forge_model] [elite_material] ] ) - Example: "#wc 1 5 6"
Trevius: RoF: Hero's Forge Robes can now be used with #wc by using wear slot 7 - Example: "#wc 7 6 11"
Akkadius: Guild Bank crash fix, checking for valid items before going through the iterator

REQUIRED SQL: utils/sql/queryserv/2340_required_maxbuffslotspet.sql

==12/28/2012==
Derision: RoF: Found GM and PVP flags in PP.
Derision: RoF: Found endurance & some group/raid leadership stuff in PP.
Sorvani: Restricted pet buffs to 25. could be made a rule when/if the extpp gets changed to handle it.
Sorvani: Changed a few more VS2010 projects to build as $ProjectName

==12/27/2012==
Sorvani: Removed #PRAGMA statements around OP_CharacterCreate from patch files now that real problem with RuleI is resolved.
Derision: RoF: Found more of the Spawn_Struct bitfield values.

==12/26/2102==
Secrets: Fixed an issue where the pets code was counting the wrong number of buffs to load, resulting in invalid memory. "And no one likes getting in the middle of invalid memory!"
Derision: RoF: Updated position/movement related structs (per SEQ), OP_Animation encode and CombatDamage_Struct
Akkadius: Increased max item ID to 300000 (You will need to replace your EmuShareMem.dll for sure next build!
Akkadius: Fixed an issue where initiating CreateDatabaseEntry() for a door would reset version back to 0, it now grabs the current version the door is saved in.
Sorvani: Fixed quest::summonitem to summon charged items with max charges if no charge amount specified
KLS: Fixed an issue with RuleI returning an unsigned int32 instead of a signed int32.  This is a critical vulnerability, please update right away.

==12/24/2012==
Akkadius: Fixed an issue where quest::createdoor would return a door id of 0 when doors exist with version -1 (All Zones)

==12/23/2012==
Trevius: RoF - Fixed the item struct so items can be loaded properly.
Trevius: RoF - Added back all of the opcodes that were previously identified and a few more.
Derision: RoF - Commented out lots of Guild opcodes that were causing crashes.
Derision: RoF - Updated RequestClientZoneChange struct and encode. Altered default Bitfields setting to only apply tyo NPCs
Derision: RoF - Updated RoF.cpp to remove all the warnings in a Linux compile

==12/22/2012==
Secrets: Fixed the x64 portability issue reported by Akkadius. No idea how long this has been broke but at least it's fixed.

==12/21/2012==
Sorvani: Items with zero charges remaining and located in a bag will no longer get set to MaxCharges when looted from a corpse. Round 2.
Sorvani: (Hateborne) copy paste issue in Mob::TryDivineSave corrected
Trevius: RoF - Fixed the Character Select Struct, which should prevent an error when trying to enter world on certain characters.
Trevius: RoF - Character Creation is now functional.
Trevius: RoF - Identified more fields in the Player Profile and added the correct checksum so the current packet should work (thanks Derision).
Trevius: RoF - Added the opcode for max characters to allow up to 10 chars to be created per account instead of 0 (thanks Noport).
Trevius: RoF - Fixed Drakkin Appearances at Character Select.  Appears that all facial/body features are now perfectly aligned.
Uleat: QueryServ player trade log code is now enabled. Set the rules_value to true to enable logging.

REQUIRED SQL: utils/sql/queryserv/2304_qs_playertradelog.sql

==12/20/2012==
Akkadius: Changed maxlevel default value and value for lootdrop_entries, this is a thing more affecting servers with higher than 127 so this doesn't affect many people.

OPTIONAL SQL: utils/sql/svn/2300_optional_loot_changes.sql

==12/19/2012==
Trevius: RoF - More work on RoF Structs and added the Client Version stuff.
Trevius: RoF - Removed/Disabled most opcodes until we are further along and then I will add them all back in and populate the rest.
Trevius: RoF - Added a new packet dealing with membership status, but it may need more work.
Uleat: Added inspect message functionality for SoF+ clients.
Uleat: Added bot command #bot setinspectmessage (use #bot setinspectmessage help)

REQUIRED SQL: utils/sql/svn/2299_required_inspectmessage_fields.sql

==12/18/2012==
Lerxst: Added the RoF.cpp files to the patches folder of the project for the vs2008 people.

==12/17/2012==
Sorvani: Added the RoF.cpp files to the patches folder of the project for the windows people.
Akkadius: Added EntityList::GetDoorsByDoorID(int32 id) which is exported to Perl $entity_list->GetDoorsByDoorID
Akkadius: Added Door Class object $Door->GetDoorID(); to return the obvious Door ID for the entity

==12/15/2012==
Trevius: Initial addition of the RoF client.  Currently disabled by default.  Uncomment the 2 RoF lines in common/patches/patches.cpp to enable the client.

==12/13/2012==
Sorvani: (Uleat) Player Inspect works for Titanium users again. Spell casting from a clicky effect checks that the item is still in the slot it was cast from before applying the affect and removing the charge (if applicable).

==12/08/2012==
Secrets/Akkadius: Implemented the customary ability to scale an NPC's spell damage or healing % by a modifier loaded from the npc data in npc_types
	This will allow an NPC to do for example 150% of the damage of their damage spells if spellscale is set to '150'
	'healscale' field needs to be set to affect heals in a similar manner
	Both of these can also be accessed via ModifyNPCStat through 'healscale' and 'spellscale'

REQUIRED SQL: utils/sql/svn/2283_required_npc_changes.sql

==12/06/2012==
Secrets: Fixed OP_PVPStats in HoT to the proper opcode, OP_WebLink. You can use $client->SendWebLink("website"); in perl to use this functionality to pop open a web browser ingame.

==12/05/2012==
Akkadius: Ability to send signals through the Telnet console to character: signalcharbyname <playername> <id>

==12/04/2012==
Sorvani: (Uleat) Update to inspect (SoF+) and corpses to related to handling power sources. Titanium inspect still broken.
Vaion: Renamed the rule for targeting swarm pets so that it make sense with the code.

OPTIONAL SQL: utils/sql/svn/2280_optional_rule_targetableswarmpet-rename.sql

==12/3/2012==
Vaion: New rule created for handling whether swarm pets are targetable or not.  Set to false for default to allow targeting swarm pets.

OPTIONAL SQL: utils/sql/svn/2278_optional_rule_targetableswarmpet.sql

==12/2/2012==
Secrets: Pets can no longer proc from any hand other than their primary hand. This fixes an issue where beastlord pets could proc two, three or four from dual wielding/double attacking pets (as well as a general mechanics fix).
Secrets: NPCs will no longer attempt to heal through walls. There is now a LOS check for friendly NPC heals through walls. This was especially apparent in the PEQ database in Splitpaw, where you could have maybe 10 NPCs healing through walls at a time. I don't recall this ever happening on live past OoW. If this is incorrect revert it and make it a rule.

==12/1/2012==
Vaion: Swarm Pets are now untargetable.  They still gain aggro, are attackable and can be casted on by NPCs, but clients cannot target them.
Sorvani: Items with 0 charges will no longer get a free recharge when players die. Changed the TargetName property for all projects to be $(ProjectName). The only project that will have a new name is chatserver. It is now called ucs matching the linux build.

==11/27/2012==
Sorvani: fix for newly created items with unlmiited charges to actually be usable.
Sorvani: (Uleat) Lore check is now made for items inside bags being trade before the trade completes.
Akkadius: Started first works of implementing QueryServ for what it was meant to be used
Akkadius: Moved QueryServ to it's own configuration block in the eqemu_config.xml (example):
	<qsdatabase>
		<host>localhost</host>
		<port>3306</port>
		<username>root</username>
		<password>password</password>
		<db>queryserv</db>
	</qsdatabase>
Akkadius: QueryServ can now be used on a separate server and can use an entirely separate database as it was meant to
Akkadius: Added 'loottable_id` to NPC::ModifyNPCStat which also changes quest::ModifyNPCStat(identifier, newValue); as well
Akkadius: Fixed heap corruption in quest_globals that would occur if a value over 64 bytes was created
Akkadius: Changed value size in qglobals from 64 bytes to 128 bytes
Akkadius: Added #reloadworld - This command will reload every single zones Perl quests and repop them
Secrets: Minor code fix for qglobals. Since we removed the id field from qglobals, I suppose we shouldn't use it in code.
Secrets: Warning fix for a quest function.
Secrets: Fixed a crash issue where player corpses did not exist at all in a function (ie; they were disabled) yet we are trying to use an invalid pointer
Secrets: durp, i'm retarded. memleak fix.

Perl Changes:
Akkadius: Added EVENT_DISCONNECT to global_player.pl/player.pl - Event that triggers whenever a character disconnects from the world
Akkadius: Added EVENT_CONNECT to global_player.pl/player.pl - Event that triggers whenever a character connects to the world
Akkadius: Added EVENT_TASK_UPDATE to global_player.pl/player.pl - Event that triggers whenever a donecount is incremented in a task, exports variables: $donecount, $activity_id and $task_id
Akkadius: Added EVENT_TASK_COMPLETE to global_player.pl/player.pl - Event that triggers whenever a task is complete, this can sort of be checked in EVENT_TASK_STAGE_COMPLETED already but this is more finite, exports variables: $donecount, $activity_id and $task_id
Akkadius: Added EVENT_TASK_FAIL to global_player.pl/player.pl - Event that triggers whenever a task has failed, exports variables: $task_id
Akkadius: Added $client->SignalClient($data), it uses the client as the initiator and the client that gets sent the data, good for entity_list iterations through client
Akkadius: Exported $client->AddAlternateCurrencyValue(currency_id, amount); originally created by KLS
Akkadius: Added quest::gettaskactivitydonecount(task, activity); which obviously will get the amount done in a task based on task and activity
Akkadius: Added cross zone client signalling capability by character ID: quest::crosszonesignalclientbycharid(char_id, data);
Akkadius: Added cross zone client signalling capability by character Name: quest::crosszonesignalclientbyname(Name, data);
Akkadius: Added cross zone client messaging capability by character Name: quest::crosszonemessageplayerbyname(Type, Name, Message);
Akkadius: Added the ability to flow #commands through Perl, by flow meaning if the command doesn't process through the traditional command system, it will dump the output to EVENT_SAY in player.pl/global_player.pl based on rule Chat:FlowCommandstoPerl_EVENT_SAY

QueryServ Changes:
* I plan on adding much more logging to this server, but for now I've started with the following:
* QueryServ requires rules to be enabled before packets get sent to QueryServ, otherwise World/Zone doesn't need to even craft the packets for logging
Akkadius: Logging all player kills through QueryServ, you need to have QueryServ:PlayerLogNPCKills Rule Enabled, type: 0 = Solo, 1 = Group, 2 = Raid
Akkadius: Player trades logging started but definitely not finished
Akkadius: Removed the rules system from QueryServ, rules should only be read from World/Zone

REQUIRED SQL: utils/sql/queryserv/2268_QueryServ.sql

Database Changes:
Akkadius: Added a field in `character_` called `firstlogon` that will essentially be booled true when a player logs on, it handles a characters online status between world and zone and ultimately gets used in EVENT_CONNECT
Akkadius: Completely dropped the `id` column in `quest_globals`, the (`charid`, `npcid`, `zoneid`, `name`) fields will act as the primary keys, tested and working fine. This solves capping out on ID's as they are unecessary.
Akkadius: Changed value size of `quest_globals` field `value` from 64 bytes to 128 bytes
Akkadius: Removed an AA that was causing heap corruption

REQUIRED SQL: utils/sql/svn/2268_required_updates.sql

==11/25/2012==
JJ: Initial fix for /MQZone detection to reduce false positives.
Sorvani: Corrected Improved Familiar pre-req and commited Vaion's AA update to fix animation Empathy.
Required SQL: utils/sql/svn/2264_required_aa_updates.sql

==11/24/2012==
Sorvani: (Vaion) Added /pet no cast and /pet focus
Required SQL: utils/sql/svn/2262_required_pet_discipline_update.sql

==11/23/2012==
cavedude: (Tabasco) Re-added probability, setting it to 100 (default) effectively bypasses probability and no additional roll is made. Setting it to 0 prevents the table from being rolled at all, so you can disable the table but still keep the entries if needed.
Required SQL: utils/sql/svn/2260_probability.sql

==11/22/2012==
Sorvani: Tabasco sent in this bugfix: Ranged attack crash
It doesn't happen every time, but if an NPC is flagged for ranged attacks and they kill their target, the AIProcess function continues on under the assumption that the target is still available.

I just adjusted it to set a flag and do the actual attack at the end of the function. I haven't been able to reproduce the crash since.

==10/31/2012==
Akkadius: Added the ability to govern player max levels through the source per character. It will look for a qglobal named 'CharMaxLevel', type 5 qglobal, if the rule is enabled and the character flag is set, they will not be able to pass that level.
Optional SQL: utils/sql/svn/2243_optional_char_max_level_rule.sql

==10/22/2012==
Lerxst2112: Fixed issue in AddMoneyToPP where the amount of silver was being added to copper instead of the leftover copper.

==10/03/2012==
Sorvani: Disabled optimization around the DECODE(OP_CharacterCreate) in all SoF+ patches to force character creation to validate correctly.

==10/02/2012==
Sorvani: A NPC that is immune to Mez, Slow, Fear, Charm, or Snare will now generate aggro based on the respective spell's normal aggro.

==09/28/2012==
Sorvani: SE_SummonCorpse will now work in raid groups.

==09/27/2012==
Bad_Captain: Bots- Changed #bot healrotation timer to allow decimal values.
Bad_Captain: Bots- Rewrote bot AAs to load from DB.
Bad_Captain: Bots- Synced bot code to client code for aabonuses, attack, spell casting, etc., as the result of the client aabonuses changes.

==09/23/2012==
Kayen: Fix for crippling blow chance, other minor fixes related to bonuses.

==09/20/2012==
Kayen: AA dbase table fixes - Archery Mastery, Fury of Magic.

REQUIRED SQL: utils/sql/svn/2215_required_aa_updates

==09/19/2012==
KLS: Faction mods (Race, Class, Deity) can now be added on the fly, without adding database columns or editing the code. Source in the database change, run utils/factionmod.pl, and then drop the faction_list table to convert.

REQUIRED SQL: utils/sql/svn/2214_faction_list_mod.sql

==09/18/2012==
cavedude: Overhauled loot system. I've outlined the new system on the forums here: http://www.eqemulator.org/forums/showthread.php?t=35770

REQUIRED SQL: utils/sql/svn/2213_loot_changes.sql

==09/16/2012==
Kayen: Implemented SE_HealFromMana changed to SE_HealGroupFromMana - now implemented correctly.

==09/14/2012==
Kayen: Implemented SE_CriticalHealRate - Focus that increase chance for heals cast on you to critical.
Kayen: Implemented SE_IncreaseNumHits - Focus that can inceases max number of hits a buff can have before being removed.
Kayen: Removed SE_Twinproc - This is not an actual spell effect, Twin proc is now correctly implemented as on live using SE_Twincast.
Kayen: Implemented SE_TwoHandBluntBlock - Chance to block when using two hand blunt weapon (similiar to shield block).
Kayen: SE_NegateEffect will now negate all AA, item and spell bonuses for the specified effects.
Kayen: Added support to allow for certain bonuses to now properly be calculated when cast as debuffs (ie decrease chance to critical hit)
Kayen: Implemented rule to allow certain bonuses to be calculated by adding together the value from each item, instead of taking the highest value.
  *Ie. Add together all worn cleave effects, ferocity effects ect.

OPTIONAL SQL: utils/sql/svn/2209_optional_additive_bonus_rule.sql (disabled by default)

==09/13/2012==
cavedude: Uleat implemented the following changes:

The bandolier function should no longer CAUSE desyncs. Its use can still be affected by previous issues, just like any manual swap. Message cues have been temporarily added to certain procedures to indicate to the player that a possible desync condition exists and that they should zone or relog to correct the situation immediately.

The chance of player corpses becoming bugged should now be minimal. Corpse processing was changed to better emulate client behavior when 'RespawnFromHover' is set to true or false. Message cues and #commands were added to help determine whether a corpse is bugged. (Previously, queued cursor items were sent to the corpse..but, the packet builder did not include the 8000-series of items when a player looted their corpse.)

Tweaked several areas where item swaps were not handled properly, or at all, and the client-server inventories became desyncronized. Additional areas are still suspect for causing desync's. (A 'ResyncInventory' method is in-work to eliminate the need for item deletion...)

Client::SummonItem now limits the size of a summoned stack to the value of stacksize in the database. If you are using script to summon stacks greater than item->stacksize, this action was/is incorrect and you will need to modify your 'quest' to summon multiple stacks.


command changes:
	#equipitem - modified partial stack movements..if a partial stack would be left on cursor, the action now fails.
	#corpse - added subcommand 'InspectLoot'..works for client and npc corpses..additional information with client.
	#peekinv - added stack size(charges) to report and modified the cursor depth reporting of bag slots.
	#zopp - new command for troubleshooting..forces a client 'trade' or 'summon' to desync the client inventory.

references:
	http://www.eqemulator.org/forums/showthread.php?t=35604 - CSD Support Patch
	http://www.eqemulator.org/forums/showthread.php?t=35629 - CSD Bugged Corpse Patch
	http://www.eqemulator.org/forums/showthread.php?t=35699 - CSD Bandolier Patch

cavedude: (mackal) Damage shields by default will no longer count towards EXP gain. (Rule also added to change this behaviour.)
cavedude: (mackal) Extended targets should now clear when aggro is lost using skills.
cavedude: (mackal) AAs with shorter reuse timers should now reset if the cast failed (interrupted.)
KLS: Fixed a cause of raids disbanding on zoning.

OPTIONAL SQL: INSERT INTO `rule_values` VALUES (1, 'Combat:EXPFromDmgShield', 'false', 'Determine if damage from a damage shield counts for EXP gain.');

==09/12/2012==
Kayen: Implemented NPC Special Attack 'i'. Immune to Taunt.
Kayen: Implemented: SOF+ live like stacking of AA's that belong to the same series in the AA window (Expection: AA's that use hot keys).
Kayen: Implemented SE_SpellEffectResistChance - Increase chance to resist specific spell effects ie. Charm
Kayen: Revision to how AA focus effects are handled to correclty utilize live AA data.
Kayen: Almost all 'General' and most 'Archetype' AA's implemented through Underfoot.
Kayen: aaID data (AA.h) updated through VoA expansion.

Following AA effects are now implemented as bonuses: You must update your 'aa_effects' table with 'required_aa_updates.sql' for these to work.
MISC AA: Spell Casting Subtlety now implemented with bonus SE_ChangeAggro
MISC AA: Many AA that are spell focus effects now implemented using live data.
MISC AA: Finishing Blow ect, will now implemented using bonus, SE_FinishingBlow and SE_FinishingBlowLvl.
ENC  AA: Total Domination now implemented with bonus SE_CharmBreakChance.
SK   AA: Soul Abrasion now implemented with bonus SE_ImprovedDamage2.
*Many fixes to previously implemented AA effects.

REQUIRED SQL: utils/sql/svn/2208_required_aa_updates
OPTIONAL SQL: utils/sql/svn/2208_optional_aa_stacking_rule.sql (If false will disable AA stacking for all clients)
OPTIONAL SQL: utils/sql/svn/2208_optional_EnableSoulAbrasionAA
 *If using an older server spell file (pre SOF), will need to run this to correctly populate the 'spellgroups' field.

=======
==09/07/2012==
Bad_Captain: Bots- Fixed an issue where bots couldn't have spells with target type of ST_GroupClientAndPet cast on them.
Bad_Captain: Bots- Added #bot healrotations command. Please see forums for more information.

==09/04/2012==
cavedude: Added NPC:UseMultiQuest rule to turn multiquest support on or off.

OPTIONAL SQL: INSERT INTO `rule_values` VALUES (1, 'NPC:UseMultiQuest', 'false', 'If true, NPC will remember items handed to them for classic multiquest support.');

==09/03/2012==
Akkadius: First set of efforts to clean up Windows compiling. See:
	http://www.eqemulator.org/forums/showthread.php?p=212217#post212217
	- Cleaned up x64 compiles, x86 compiles coming right up
	- Removed pragma comments and forced them to be used under 'Additional Dependencies' (Windows)
Akkadius: Fixed-up Release & Debug 32-bit compiles
Akkadius: Uploading includes and libraries for both x64 and x86 so that VS2010 can automatically reference those libraries and requires no configuration
Akkadius: All project types have had includes and libraries linked to the appropriate machine type
Akkadius: Most project types have been set to /MP (Multiprocessor compile) and Warning Level 1 to filter most of the garbage
Akkadius: Got the rest of the VS2010 compiles working on a fresh SVN:
		Debug x64|x64 = Debug x64|x64
		Debug|Win32 = Debug|Win32
		Debug|x64 = Debug|x64
		DebugBots x64|x64 = DebugBots x64|x64
		DebugBots|Win32 = DebugBots|Win32
		Release x64|x64 = Release x64|x64
		Release|Win32 = Release|Win32
		ReleaseBots x64|x64 = ReleaseBots x64|x64
		ReleaseBots|Win32 = ReleaseBots|Win32
		ReleaseBots|x64 = ReleaseBots|x64

==09/02/2012==
cavedude: (image) Added Classic Multiquest support.
cavedude: Added quest::clearhandin and #clearquestitems so that multiquest can co-exist with out current system without issues.

REQUIRED plugin: utils/defaults/plugins/check_handin.pl (Or use PEQ quests repo)

==08/27/2012==
Akkadius: (Uleat) Temporary dupe fix until we can iron this out the way it should be (Not use signed ints in the blob). This should trap a majority of it to client saves.
Akkadius: Account shared platinum field type change (signed to unsigned) to no longer allow negative values...

REQUIRED SQL: utils/sql/svn/2195_required_sharedplatupdates.sql

==08/17/2012==
Kayen: Taunt skill updated to work consistent with live.
  *You can now taunt NPC's over the users level. (RULE: TauntOverLevel)
  *Taunt success chance should be accurate to live. Penalty of not being at max skill lv can be adjusted with (RULE: Combat:TauntSkillFalloff)
  *Live messages for taunt success and failure are now implemented. (Note: Only NPC races that can 'talk' will say the success message).
Bad_Captain: Bots- Fixed an issue when with bot spell timers that could lead to a crash.
Kayen: Fixed SQL files from rev2185+ that were not saved as .sql

OPTIONAL SQL: utils/sql/svn/2189_optional_taunt_rules
OPTIONAL SQL: utils/sql/svn/2185_optional_NPCFlurryChance_rule (run this again)

==08/16/2012==
Kayen: Complete revision of the Death Save and Divine Save effects and related bonuses to be consistent with live.
  *Death Save (Death Pact/DI) will no longer fire on death. It should only fire when less 15% HP but not killed.
  *Death Save chance is determined soley by charisma of client with the buff. (RULE: DeathSaveCharismaMod)
  *Divine Intervention baseline is now correctly set to 8000HP (from 50k) (RULE: DivineInterventionHeal)
  *AA Touch of the Divine provides upon failure of first Death Save, a second roll and if successful will
   do a portion of the original heal value. (Ie DI=8000HP with ToTD-3(60%) your heal will be 8000*0.6 = 4800HP)
  *Implemented functionality for later expansion Death Save effects (Divine Intercession ect)
   These can add heal value to the base heal which is limited by level (ie Heal 10,0000+8000 if client less then level 80)

  *Divine Save (AA Unfailing Divinity) only fire upon death of client with this effect and is independent of Death Save effect.
  *Increased ranks of AA only increase the chance of firing upon death. Heal value does NOT increase with rank.
  *Upon firing you will still recieve the Divine Aura like buff, which now also correctly removes all determental effects.
Kayen: Implemented: SE_Purify - Removes determental buffs. Value determines how many buffs are removed.
Kayen: Added RULE MaxCastTimeReduction - Max percent your spell cast time can be reduced by spell haste(is/was 50%).

Following AA effects are now implemented as bonuses: You must update your 'aa_effects' table with 'required_aa_updates.sql' for these to work.
MISC AA: Internal Metronome/Channeling Focus now implemented with bonus, SE_ChannelChanceSpells.
MISC AA: Concentration now correctly implemented with bonus, SE_ChannelChanceItems.
MISC AA: Pet Affinity now implemented with bonus, SE_GivePetGroupTarget.
MISC AA: Spell Casting Expertise, Mastery of the Past ect will prevent fizzles from spells under certain level, SE_MasteryofPast.
BRD  AA: Extended Notes/Sionachie's Crescendo will increase ranage of songs with bonus, SE_SongRange.
BRD	 AA: Jam Fest now implemented with bonus, SE_CastingLevel2.
CLR  AA: Unfailing Divinity now implemented with bonus SE_Unfailing Divinity.
CLR  AA: Touch of the Divine now implemented with bonus SE_DivineSave.
DRU  AA: Enchanted root/Viscid Root (was implemented completely wrong), now uses bonus SE_RootBreakChance.
  *If a root is cast on the target and target has this AA it will decrease the chance for that root to break
   from any damage spells. The damage spells can be cast by any one, not just the client with the bonus.
   Added RULE: RootBreakFromSpells - Baseline is/was set at 20% chance from nukes.


REQUIRED SQL: utils/sql/svn/2188_required_aa_updates
OPTIONAL SQL: utils/sql/svn/2188_optional_miscspelleffect_rules

==08/13/2012==
Kayen: Update to how chance to hit bonuses are applied.
  *Accuracy spell effect will now stack with Hit Chance spell effect. (Accuracy/15 = 1% chance to hit).
  *Skill specific Hit Chance effects should stack correctly now.
  *Accuracy/Hit Chance effects that DECREASE your chance to hit will now function.
Kayen: Minor update to duel wield, chance bonuses will be correctly applied to baseline dw chance.
Kayen: Implemented Perl MOB Quest Object SetFlurryChance(value) (ie 50 = 50% chance for NPC flurry if special atk "F")
Kayen: Implemented Perl MOB Quest Object GetFlurryChance(value) returns flurry chance.
Kayen: Added rule to adjust server wide flurry chance (Default = 20%) *Perl object will override this.

Following AA effects are now implemented as bonuses: You must update your 'aa_effects' table with 'required_aa_updates.sql' for these to work.
MISC AA: Dead Aim, Precision of the Hunter, Scout's Efficiency will now calculate from bonus SE_Accuracy.
MISC AA: Combat Agility line will now calculate from bonus SE_AvoidMeleeChance. (Now implemented through SoD)
MISC AA: Combat Stability line will now calculate from bonus SE_CombatStability. (Now implemented through SoD)
MISC AA: Double Riposte, Return Kick now calculated from bonus SE_GiveDoubleRiposte. (New AA's implemented that use this)
MISC AA: Natural Durability, should be working correctly now from bonus SE_MaxHP.
MISC AA: Ambidexterity will now apply properly to increase chance to duel wield from bonus SE_Ambidexterity.
MISC AA: Flurry,Rapid Strikes will now properly be applied from bonus SE_Flurry. (New AA's implemented that use this)
MISC AA: Pet AA's that give flurry chance will now be applied by bonus, SE_PetFlurry.
MAG  AA: Elemental Agility was incorrectly giving melee mitigation instead of avoidance, to now use SE_PetAvoidance.
MAG  AA: Elemental Durability will now add to pet max hp with bonus, SE_PetMaxHP.

REQUIRED SQL: utils/sql/svn/2185_required_aa_updates
OPTIONAL SQL: utils/sql/svn/2185_optional_NPCFlurryChance_rule

==08/12/2012==
Bad_Captain: Fixed an issue when using bots where you would not get xp when your pet did most of the damage and you are not grouped.
Bad_Captain: Added rule to enable receiving xp from bots not in your group. Defaults to false.

OPTIONAL SQL: utils/sql/svn/2183_optional_bot_xp_rule.sql

==08/08/2012==
Kayen: Updates to critical hit calcuations to be consistent with live.
  *Baseline critical rate is determined by DEX stat (255 dex = 2%),this baseline is then modified by item,spell and AA critical chance bonuses.
  *Pet critical baseline is determined by the rate from AA effects that give pets the ability to critical. (Can not crit w/o this effect)
Kayen: Slay Undead effect will now be working consistent with live.
  *Slay rate is no longer effected by critical hit rate, it uses it's own predetermined rates from the spell effect data.
  *Damage modification will now be much closer to that of lives utilizing the spell effects damage modifier.
  *Example(AA Slay Undead I - Rate: 225 (2.25%) Damage Mod: 680%)
  *Note that that spell effects using Slay Undead (Holyforge) will stack with AA and increase the damage and the rate.
Kayen: Crippling Blow's derived from spell effects will now be calculated consistent with live.
  *Cippling blow chance is determined by modifying your critical hit chance.
  *Example (Savage Onslaught - 200% chance to crippling blow) If you have a base chance to critical hit of 10%
   and you score a critical hit, you will then have a 20% chance to crippling blow.
Kayen: Fixed effect for AA 'War Cry' will now provide group fear immunity for duration.
Kayen: Few new AA's added including shaman Ancestral Aid and Spirit Channeling.

Following AA effects are now implemented as bonuses: You must update your 'aa_effects' table with 'required_aa_updates.sql' for these to work.
MISC AA: 'Combat Fury', 'Fury of the Ages' will now calculate from bonus SE_CriticalHitChance.
MISC AA: 'Veteran's Wrath' will now calculate from bonus SE_CriticalDmgMod.
MISC AA: All AA that give pet criticals will be calculated from SE_PetCriticalHit.
PAL AA: 'Slay Undead', 'Vanquish Undead' will now calculate from bonus SE_SlayUndead. (Holyforge now works correctly)

REQUIRED SQL: utils/sql/svn/2178_required_aa_updates

==08/06/2012==
Kayen: Fixes to rev2176 - Double Attack, EndlessQuiver, Run Speed.
REQUIRED SQL: utils/sql/svn/2176_required_aa_updates will need to be applied again for Run Speed fix.

==08/05/2012==
Kayen: Complete revision of how double attack chance is calculate to be consistent with live.
Kayen: Berserker 'Frenzy' skill attack will now function as it does on live. Gives a chance for 1-3 attacks using frenzy skill specific damage.
*Note: This will be a considerable nerf to bersekers because it was previously coded to give actual melee rounds using weapon damage.
Kayen: Implemented a few miscellaneous new AA's, mostly from DODH. (These will show in OoW Window in Titanium)
Kayen: Added almost all remaining spell effects into spdat.h (~90% defined).
Kayen: Alternate Advancement Update: In the process of coverting most of the hard coded AA data out of the source and into the 'aa_effects' table
using live data. These effects are then reimplemented using the bonus system in the broadest possible way, most of these effects will
also be useable as regular spell/item effects. This will allow developers in the future to adjust,implement and customize AA effects
without requiring source changes. Beware in doing this, many AA effects that were previously either implemented incorrectly or with values
not consistent with live data will be adjusted to be as accurate as possible.

Following AA effects are now implemented as bonuses: You must update your 'aa_effects' table with 'required_aa_updates.sql' for these to work.
MISC AA: All innate run speed AA's have been converted to use bonus SE_BaseMovementSpeed.
MISC AA: All bind wound related AA have been converted to use bonuses, SE_ImprovedBindWound, SE_MaxBindWound.
MISC AA: Shield Block will now be calculated using bonuses, SE_ShieldBlock.
MISC AA: Sinister Strike will now correctly allow your off hand weapon to recieve a weapon damage bonus, SE_SecondaryDmgInc.
MISC AA: Strengthened Strike/Vicious Smash/Kick Mastery will now accurately to live add skill damage to respective special abilities.
MISC AA: StrikeThrough, Tactical Mastery - will now be calculated from bonus, SE_Strikethrough2.
MISC AA: Ferocity, Knight's Advantage ect - will now be calculated from bonus SE_DoubleAttackChance.
MISC AA: Harmonious Attacks, Bestial Frenzy - will allow double attack chance using bonus SE_GiveDoubleAttack (any class can be given this)
MISC AA: Weapon Affinity, will now use SE_ProcChance.
MISC AA: PunishingBlade, SpeedoftheKnight will now allow an extra 2 Handed attack using bonus, SE_ExtraAttackChance.
BRD  AA: Fleet of Foot will now correctly allow bards to run over the speed cap using, SE_IncreaseRunSpeedCap.
WAR  AA: Previously non functional 'Stalwart Endurance' and 'Dauntless Preservence' now working using bonus, SE_FrontalStunResist
MNK  AA: HightenedAwareness - Implemented using bonus, SE_BlockBehind.
MNK  AA: Technique of Master Wu - Will now correclty use a random monk special attack, chance for double/triple attack as SE_DoubleSpecialAttack.
MNK  AA: Dragon Punch - Implemented as now using bonus SE_SpecialAttackKBProc, (base1 = 100 [25% proc chance at 100] base2 = skill)
RNG  AA: Endless Quiver - Implemented as SE_ConsumeProjectile which gives a percent chance NOT to consume an arrow. (EQ base1 = 100)
RNG  AA: Archery Mastery- Implemented as SE_ArcheryDamageModifier which gives a percent increase to archery attacks.
BER  AA: Throwing Mastery - Implemented using SE_DamageModifier.
BER  AA: Blur of Axes, Vicious Frenzy - will now correctly add skill damage to 'Frenzy' skill attacks.
ROG  AA: Triple Backstab, SiezedOpportunity, Chaotic Stab - as bonus, SE_TripleBackstab, SE_FrontalBackstabChance,SE_FrontalBackstabMinDmg.

REQUIRED SQL: utils/sql/svn/2176_required_aa_updates
Optional SQL: utils/sql/svn/2176_optional_FrenzyBonus_rule
Optional SQL: utils/sql/svn/2176_optional_aa_expansion_sof_fix (Allow AA to show proper expansion in SOF+ clients)


==08/01/2012==
Bad_Captain: Fixed bot compile issue introduced in Rev 2171.
Bad_Captain: Integrated Kayen's skill attack code with bots' code, as well as other changes from Rev 2171.

==07/31/2012==
Akkadius: (KLS) Fix for global_player.pl synchronization. There was an issue where certain subroutines were not passing as global

==07/26/2012==
Kayen: Fixed: SE_ImmuneFleeing - Will now disable fleeing if used after mob begins to run, will not effect fleeing from fear.
Kayen: Implemented Perl MOB Quest Object SetDisableMelee(1=Disabled) - Prevents the ability to auto attack.
Kayen: Implemented Perl MOB Quest Object IsMeleeDisabled()
Sorvani: corrected build name for queryserv project in all the various build types.

==07/24/2012==
Kayen: Implemented: SE_HundredHands (incorrectly marked as already implemented) - Increases/Decrease actual weapon delay by % of value.
Kayen: Implemented: Missing modifications from the Archery/Throw damage pathways.
	*SkillAmount/SkillDamageTaken mods, ability to Block/Dodge/Parry ranged attacks (Can not riposte), other new focus/mod effects.
Kayen: Fixed: aaThrowingMastery will no longer be applied 2x per throw.
Kayen: Implemented: Damage bonus to skill attacks from specific armor slot AC (ie KICK from BOOT AC) can adjust with rule 'SpecialAttackACBonus'
Kayen: SE_MinDamageModifier should now apply to skill specific effects and to special attacks.
Kayen: Implemented: Complete revision of SE_SkillAttack. (+ required various fixes/adjustments to functions related to special attacks)
	*This spell effect performs a physical attack from a specific skill with a set weapon damage value and chance to hit modifier.
	*Attacks will now calculate correctly and use their actual respected pathways utilizing all skill specific mods/bonus.
Kayen: Implemented Perl MOB Quest Object DoMeleeSkillAttackDmg(target, weapon_damage, skill, chance_mod, focus, CanRiposte)
Kayen: Implemented Perl MOB Quest Object DoArcheryAttackDmg(target,NULL,NULL, weapon_damage, chance_mod, focus)
Kayen: Implemented Perl MOB Quest Object DoThrowingAttackDmg(target,NULL,NULL, weapon_damage, chance_mod, focus)

Optional SQL: utils/sql/svn/2171_optional_SpecialAttackACBonus_rule

==07/18/2012==
Kayen: Implemented NPC Special Attack 'K'. Immune to Dispell.
Kayen: Fixed SE_RangedProc to be applied after zoning, calculate proc rate correctly, utilize numhits.
Kayen: Fixed a bug that would cause NPC procrates to be incorrectly effected by equipped weapon delay.
Kayen: Modified functions related to obtaining proc chance to no longer recalculate the 'attack rate' every swing.
Instead it will use the already calculated attack timer values. (Not implement for BOTs, but should be no compile problems).
Kayen: Fixed for buff issue with rev2167.

==07/16/2012==
Kayen: Implemented: SE_SpellProcChance, SE_CharmBreakChance, SE_BalanceMana, SE_DotCritDmgIncrease, SE_TripleAttackChance, SE_Taunt
			SE_BardSongRange, SE_ACv2, SE_ManaRegen_v2,	SE_SpellCriticalFocus, SE_AdditionalHeal2, SE_HealRate2,
			SE_CriticalHealOverTime2, SE_CriticalHealChance2, SE_SkillDamageAmount2, SE_LimitSpellSkill, SE_LimitClass
			SE_LimitExcludeSkill, SE_ShieldBlock, SE_BlockBehind
Kayen: Implemented: SE_Empathy - A focus limited debuff which causes (spells/skill attacks) cast on target to do +X amount more damage.
			*This spell effect is often limited using SE_LimitSpellSkill.
			*(Ie. If empathy value is 1000 and limited to evocation, all nukes on target using evoc. will get +1000 damage)
Kayen: Implemented: SE_SpellPowerIncrease - Can be used to apply a worn/buff focus effect with limits for...
			1) Additional bard instrument modifiers.
			2) Healing/Damage focus to bard songs. (Note: This is only effect that can do this).
			3) Increase effectiviess of casted/disc Skill Attacks.
			4) General use stackable Healing/Damage focus.
			5) Increase the value of melee runes by focus amount.
Kayen: SE_HPtoMana will no longer drain your HP before the spell is finished casting. Effect now handled as a bonus using best value.
Kayen: SE_SpellVulunerability will now correctly calculate and apply the highest value if target has mulitple effects.
Kayen: Fixed an issue where DOTs cast by an NPC on another NPC would not generate hate per tick. Improved how we calc damage from DOTs.
Kayen: SE_BlockSpellEffect was implemented incorrectly and has been revised to SE_NegateSpellEffect.
		*It is not meant to block buffs, rather it negates the specific spell bonuses or effects from buffs you already have.
		*Currently functional with any effect that is handled under bonuses, and focus effects.
Kayen: Vastly improved how we handle melee/spell runes/partial mitigation runes ect. Should be significantly more efficient.
		*Melee/Spell Mitigation runes and ManaAbsorbPercentDamage effects will now use the best mitigation value if multiple effects.
Kayen: Improved the process we use to get spell/item focus effects. An initial check if the client has a specific focusType
is done while checking for item/spell bonuses. GetFocusEffect will no longer check all inventory and buff slots every cast for the
focusType if that focusType doesn't exist on the client. This should improve performance since these checks are done 10-20x per cast/proc.

==07/15/2012==
Secrets: Fixed an issue with saylinks above 255 characters. If you do want to use saylinks above 255 characters, it is reccomended you adjust the varchar field in the saylinks table to a "TEXT" field, which supports up to 65535 characters.

==07/13/2012==
Bad_Captain: Fixed another bug that allowed pets to steal xp when using bots.
Bad_Captain: Bots: Persisting spell & discipline timers.
Bad_Captain: Bots: Bot pets will no longer continuously try to get behind a mob if they are tanking.
Bad_Captain: Bots: Fixed potential duplicate lore item bug when trading with bots.
Bad_Captain: Bots: Fixed bot compile issue from Rev 2160.
Bad_Captain: Bots: Fixed multiple issues with #bot spawn and #bot botgroup load (c0ncrete).
Bad_Captain: Bots: Implemented new #bot defensive command for Warriors and Knights. Includes most of the code required to implement disciplines for bots. Requires disc AI & disc lists.

Required SQL: utils/sql/svn/2164_require_bots_bottimers.sql

==07/09/2012==
Kayen: Fixed issue causing npc special attacks (kick/bash ect) to do extra damage.
Kayen: Fixed major crash bug with rev2159.
cavedude: AFTERDEATH npc_emote will now use emoteid instead of npcid.

==07/08/2012==
Kayen: Implemented: SE_SkillProc, SE_SkillProc2 which can be limited by SE_LimitToSkill - Procs an effect when a specific skill is used
       *Functional with all melee skills, special attacks, backstab, taunt, dodge,block,parry,riposte.
Kayen: Added checks to attack process to prevent mob from performing certain actions after being killed (riposte, defensive proc ect).
Kayen: Fixed bug where if client had delay death effect NPC would not be able to attack them if HP < -11, clients without delay death will now bleed again.
Kayen: Implemented: SE_CastingLevel2, SE_ReduceHate
Kayen: Fix to bug where some spell procs and defensive procs were not loading after zoning.
Kayen: Updated spdat.h with many new live spell effects that were previously 'unused'.

==07/05/2012==
Kayen: Implemented: SE_Manaburn: Drains mana for damage/heal at a defined ratio up to a defined maximum amount of mana.
Kayen: Implemented: SE_CastonNumHitFade: Casts a spell when a buff fades due to its numhits being depleted.
Kayen: Implemented: support for all remaining live spell effects that use 'numhits'.
	   Significantly optimized how all spell effects that utilize 'numhits' are handled throughout the source.
Kayen: Fixed: SE_DefensiveProc - Proc rate will now be calculated similiar to live.  *Spell specific rate modifcations will now work.
Kayen: Added Rule: Combat:AvgDefProcsPerMinute (Default = 2.0) Determine defensive procs per minute.
Kayen: Added Rule: Combat:DefProcPerMinAgiContrib (Default = 0.075) Determines how much agility effects proc rate.

Optional SQL: utils/sql/svn/2159_optional_defensiveproc_rules

==06/29/2012==
Kayen: Implemented Perl NPC Quest Object GetSlowMitigation()
Kayen: Implemented Perl NPC Quest Object GetAttackSpeed()
Kayen: Implemented Perl NPC Quest Object GetAccuracyRating()
Kayen: Fixed: Slow Mitigation (was not loading from dbase),optimized its application in source and added lives slow mitigation messages.
		Slow mitigation Messages: 'slighty' 0.00 - 0.25 'partial' 0.25-0.75 'mostly' 0.75-1
Kayen: Implemented: SE_AttackSpeed4: 'Inhibit Melee' effect works different then regular haste/slow effect
		1) If target is hasted (or no haste) Inhibit Melee will decrease attack speed by the Inhibit Melee value.
		2) If target is slowed Inhibit Melee is applied as a percent change to remaining attack speed after regular slow.
		ie. You cast 75% Slow (25 attack speed remains) then apply 25% Inhibit melee (18.75 attack speed remains): Final slow 81.75%
Kayen: Added Rule: Spells:CharismaEffectiveness (Default = 10) Deterimes how much resist modification charisma applies to charm/pacify checks (10 CHA = -1 resist mod).
Kayen: Added Rule: Spells:CharmBreakCheckChance (Default = 25) Determines percent chance for a charm break check to occur each buff tick.
Kayen: Reworked code to that handles charm breaks/lull to be accurate to live and more functional in general.
		1) Each charm buff tick there is a default 25% [Rule.CharmBreakCheckChance] chance to trigger a spell resistance check.
		2) Spell resistance check then adds an additional bonus resist modification based casters Charisma at a default
		   ratio of 10 CHA per -1 resist mod [Rule.CharismaEffectiveness]
		3) If resisted (ie Charm is to break) Total Domination AA is then applied to give another chance to maintain the charm.
Kayen: Implemented: SE_AdditionalHeal:  Focus Effect that adds an additional heal amount to the casted spell.
Kayen: Implemented: SE_CastOnCure: Casts a spell on cured target.
Kayen: Implemented: SE_CastOnCurer: Casts a spell on the curer of the target.
Kayen: Modified: Mob::TryFadeEffect	to avoid interaction wtih Twinproc effect.
cavedude: (Uleat) Multiple changes and additions to doors, per the forums.

Optional SQL: utils/sql/svn/2156_optional_charm_break_rule.sql

==06/25/2012==
Trevius: Reviewed and Committed the below by Kayen:
Kayen: Added Rule: AvgSpellProcsPerMinute (Default = 6.0) Determines proc rate of spells applied from sympathetic focus effect
Kayen: Added Rule: ResistFalloff (Default = 67) Max that level that will adjust our resist chance based on level modifiers
Kayen: Adjusted Mob::TrySpellOnKill()
		- Will now check AA, Items and Buffs for SE_SpellOnKill (Same logic problem as TrySpellOnDeath)
		- Level of the npc you killed and the spell_id used to kill it now both passed into the function.
		- SE_TrySpellOnKill will now correctly check if there is a min level of the npc required for the spell effect to work (max value in spelldat)
Kayen: Implemented: SE_SpellOnKill2: For deterimental spells where landing the kill gives x% chance to give a buff.
Kayen: Sympathetic proc now calculates chance to proc a sympathetic spell accurately like live using Procs per minute.
Kayen: Adjusted Mob::TrySpellOnDeath() - Now checks all avialable effects and trys to use each one.
Kayen: Fixed SE_TargetsTarget - Target's Target must be in CombatRange to recieve the effect (Verified from live)
Kayen: Fixed TryApplyEffect - No longer incorrectly lands on the target's target's taget. (Example of spells that use this are Shaman Mending Couterbias)
Kayen: Adjusted Twincast to now select the buff with the highest chance to Twincast and use that, it will also stack with item focus and AA (when implemented).
Kayen: Removed the mana cost portion from twin casting a spell.
Kayen: Fix for SE_SympatheticProc - The focus effect now checks all items/buffs for the focus effect and adds all returned proc spellid's to a list from which one is randomly selected.
Kayen: Implemented SE_FF_Damage_Amount - Focus/Buff that adds damage to the casted spell. Usually found on spell group limited augments and stackable with SE_SpellDamage.
Kayen: Adjusted SE_SpellDamage to be handled properly as a focus effect.
Kayen: Extra damage from Focuses is now calculated correctly for DoTs
Kayen: Implemented Perl NPC Quest Object SetSpellFocusDMG(focus amount) - Focus all npc direct/dot damage spells by value
Kayen: Implemented Perl NPC Quest Object SetSpellFocusHeal(focus amount) - Focus all npc healing spells by value
Kayen: Implemented Perl Mob Quest Object ModSkillDmgTaken(skill_num,value) - Set a weakness/bonus of weapon attacks to a Mob
		- Example: mob can be set to take 5% more damage from blunt weapons - ModSkillDmgTaken(0,5)
		- Stacks with spell/item bonuses - Setting skill to -1 will effect all skills
Kayen: Implemented Perl Mob Quest Object GetModSkillDmgTaken(skill_num) - Returns only the quest skill mod for specified skill
Kayen: Implemented Perl Mob Quest Object GetSkillDmgTaken(skill_num) - Returns the total skill damage taken mod for the specified skill (item+spell+quest_mod value)
Kayen: Implemented Perl Mob Quest Object SetAllowBeneficial(false) - Allow a specific Mob to be healed/buffed by a client
Kayen: Implemented Perl Mob Quest Object GetAllowBeneficial() - Returns SetAllowBeneficial flag
Kayen: Implemented Perl Mob Quest Object IsBeneficialAllowed(target) - Returns if target can have beneficial spells cast on them
Kayen: Implemented Perl Mob Quest Object ModVulnerability(resist type, value) - Set Spell Vulnerability of mob by resist type(0-9) ALL = -1
		- Example: mob can be set to take 5% more damage from Fire spells (2,5);
		- Applied effect will stack with spell buff effects.
		- If a resist type SPECIFIC and a resist type ALL mod are applied to the same MOB, the SPECIFIC value will be used if spell cast on MOB is the same resist type.
Kayen: Implemented Perl Mob Quest Object GetModVulnerability(resist type) - Return the quest applied value for each resist (ALL = -1)

Optional SQL: utils/sql/svn/2154_optional_rule_spell_procs_resists_falloff.sql

==06/22/2012==
Secrets: (mackal) Spells now display to all clients and can be filtered as such.
Secrets: Damage Shields now go to the proper filter, and do not show the non-melee damage to everyone.

==06/03/2012==
Akkadius: Added the ability to run a dual-stack global_player.pl with the existing player.pl that will run locally in quests/zone/player.pl or quests/templates/player.pl
	- This allows the player.pl to be ran globally without interference of a local script (quests/zone/player.pl OR quests/templates/player.pl)
	- 'global_player.pl' simply needs to be added to quests/templates/global_player.pl to be parsed otherwise it will not be loaded
	- 'global_player.pl' parses after the local player.pl
	- 'global_player.pl' parses all of the same events a regular player.pl does and will work with any new subroutines added to it in the future
	- Thanks Derision for being a pair of eyes on a part of the diff for this

==06/02/2012==
cavedude: Exported quest::addldonwin(wins, theme); and quest::addldonloss(losses, theme);

==05/30/2012==
Bad_Captain: Fixed bug that allowed pets to steal xp when using bots.
Bad_Captain: Bots: Fixed bug that allowed bots to sometimes cast HoT buffs during combat instead of HoT heals.
Bad_Captain: Bots: Tweaked bard casting chances to restore twisting of multiple songs.
Bad_Captain: Bots: Implemented Shaman cannibalization during combat.

==05/13/2012==
cavedude: Corrected the text merchants give when they refuse to sell to you.
cavedude: The graveyard timer will now resume when a dynamic GY zone boots, instead of resetting.
cavedude: When a corpse is moved to the graveyard, it will no longer attempt to use an instanced version of the zone.
cavedude: Added the ability to load NPC emotes from the DB. Wiki entry for this will be at http://www.eqemulator.net/wiki/wikka.php?wakka=NPCEmotes when I write it up.

REQUIRED SQL: utils/sql/svn/2142_emotes.sql

==05/06/2012==
Akkadius: Added the ability to load a default.pl script underneath quests/templates

==05/05/2012==
Derision: Fixed reference to freed memory in Mob::BardPulse, plus a couple of minor memory leaks in  Load/SavePetInfo
==05/01/2012==
Derision: Corpses no longer appear in Extended Target Auto slots.

==04/30/2012==
Derision: Fixed some minor bugs with Extended Targeting (if the tank/assist/puller had a target before you allocated an XT slot to that function, you would not see the target unti they changed target).

==04/29/2012==
Derision: UF+: Support for the Extended Target window (aside from the Raid target types).
Derision: Fixed Extended Target bugs where CurrentTargetPC targets were incorrectly cleared when leaving a group, and a CurrentTargetPC wasn't updating when they zoned in.

REQUIRED SQL: utils/sql/svn/2136_extended_targets.sql

Note: Default number of Extended Targets is 5. This is stored as a column in character_
GMs can increase a players slots by targetting them and typing #xtargets <n> where n is between 5 and 20.

==04/22/2012==
Trevius: VoA - The AA Window now populated AAs.  AA hotkeys can be created, but purchasing still needs work.

==04/21/2012==
sorvani: Bard AE DoTs should now be affected by mods correctly.

==04/19/2012==
cavedude: quest::buryplayercorpse will now despawn corpses in zones other than the client's current location, preventing dupes.
cavedude: Added quest::summonallplayercorpses (same syntax as quest::summonburriedplayercorpse) which will depop and summon all of the player's corpses, buried or not.
cavedude: Fixed a bug that caused some summoned corpses to use a static 5 minute decay timer.
cavedude: Changed player_corpses_backup schema to match player_corpses. If the rule is enabled, corpse backups will now be created for players that are high enough level to drop items to their corpses.
cavedude: Added a rule to determine whether or not to remove player corpse backups older than 2 weeks.
cavedude: #corpse now has options to depop a single player corpse, or every corpse belonging to a single player.
cavedude: You can now specify if a faction hit is temporary (is removed when player camps/zones) or whether or not to display the faction hit to the player in-game.
If temp in npc_faction_entries is set to:
0 (Default): Faction is permanent, player recieves a message. (Same functionality as we had previously.)
1: Faction is temporary, player does not recieve a message.
2: Faction is temporary, player recieves a message.
3: Faction is permanent, but player does not recieve a message.
cavedude: Added an optional argument to quest::faction to utilize the functionality and values listed above.
cavedude: Added minlevel and maxlevel to lootdrop_entries. The player credited with the kill (most hate) has their level checked against both columns, and if they are lower than the specified minlevel, or higer than the max, that item entry if it exists is removed from the NPC before it becomes a corpse.
cavedude: You can now specify if a NPC automatically repops (rerolls against their spawngroup) or depops after the reverse spawn timer is up.
If despawn in spawngroup is set to:
0 (Default): Do not depop or repop, no depop timer is set. (Same functionality as we had previously.)
1: Despawn the current NPC and repop the spawngroup after the associated spawn2 timer is up (including variance.)
2. Repop, after the value specified in despawn_timer is up (also uses spawn2 variance.)
3: Depop the NPC after the spawn2 timer is up + variance.
4. Depop the NPC after despawn_timer is up + variance.
Example: Setting despawn to 1 will despawn the NPC and immediately respawn the spawngroup after it has been up for the length of its spawn2 timer + variance.
Example: Setting despawn to 4 and despawn_timer to 3600 will depop the NPC after it has been up for an hour + variance. It then will respawn after its normal respawn timer is up.
cavedude: Fixed a crash in groups.cpp.

Required SQL: utils/sql/svn/2133_required_faction_loot_despawn.sql (Backup your data first!)

==04/17/2012==
Bad_Captain: Bots: Added Bot Group Messages and #bot groupmessages command to turn them on or off per bot or for all bots.
Bad_Captain: Bots: Fixed bugs that allowed more bots to be spawned than specified in the Bots:SpawnBotCount rule, fixed bug that allowed more bots to be created than specified in the Bots:CreateBotCount rule, and fixed slow buffing bug.
Bad_Captain: Bots: Various spell ai tweaks (including HoT spells should no longer block other heals from being cast in certain situations and hybrids should use less mana by healing less often).
Bad_Captain: Bots: Removed client xp gain from bots outside the player's group.


==04/14/2012==
Trevius: Fixed inspect for SoF+ clients, which was broken by Rev2128.

==04/15/2012==
Derision: Added support for the 'Looking For Guild' window.

Required SQL: utils/sql/svn/2129_required_lfguild.sql

IMPORTANT NOTE:

To use this feature, you must be running the querserv process. If you are not running queryserv, LFGuild will not work, but your server will
run normally in all other respects.

Underfoot users can bring up the LFGuild Window by pressing the EQ buton and selecting Players/Looking For Guild.

I think all other clients can only access the feature by clicking on the notice boards in the Guild Lobby. To allow them to do this, you must
add the following to the SUB EVENT_CLICKDOOR of your guildlobby/player.pl

if(($doorid >= 5) && ($doorid <= 38))
{
	$client->OpenLFGuildWindow();
}

==04/14/2012==
Trevius: VoA - Corrected a few alignment issues with the item struct and it should be fully aligned now.
Trevius: VoA - Identified a few new item fields including: Prestige, SkillModMax, SkillModExtra, and Power
Trevius: VoA - #summonitem and functions that summon items such as quests are now fixed.
Trevius: VoA - Identified multiple Membership fields, which corrects multiple issues such as limited inventory slots, assigned AA limit, level limit, shared bank, and more.
Trevius: Added packet length verification to all packet handling that was missing it.

==04/13/2012==
Secrets: VoA - Character Creation is now functional. Fixed creation request struct (opcodes were right), and membership is now sent (characters can now be created!)
Secrets: VoA - Membership levels are now sent to the client via the SendMembership opcode. Hardcoded to be like older clients for now. Might need bag slots looked into; upon applying this, bag slots & items went missing.
Secrets: Updated #race command to support races up to 714 (as per the 4/12/2012 client)
Trevius: VoA - Items now display food/drink correctly and consuming them is now functional.
Trevius: VoA - Items no longer display UKNOWN SKILL for skill mods on some items that don't have skill mods set.
Trevius: VoA - Items no longer display Prestige on them.
Trevius: VoA - Buying from merchants is now functional, though selling to merchants is not yet.
Trevius: VoA - Disabled the Guild Member List temporarily to prevent guilded characters from crashing.

==04/12/2012==
Trevius: VoA - Casting Spells and Click Effects on items is now functional.

==04/11/2012==
Trevius: VoA - Corrected the Player Profile which should now be perfectly aligned.
Trevius: VoA - More Opcode and Struct corrections/adjustments.

==04/09/2012==
Trevius: VoA - Identified/corrected some more opcodes and packet structures.
Trevius: VoA - Merchants now display items for sale, but purchasing is not yet functional.
Trevius: VoA - Added new packet for setting the max number of characters allowed to be created on an account (10 for now).

==04/08/2012==
Trevius: VoA - Identified/corrected some more opcodes.
Trevius: VoA - Items can now be moved around through all slots.
Trevius: VoA - Updated structs that use inventory slots to use the new format.  Still need to verify some of the struct changes.

==04/07/2012==
Trevius: Initial addition of the VoA (March 21 2012) client. To enable, you must uncomment the VoA lines in /common/patches.
Trevius: Many of the core systems are basically functional, but this client is still in an early development phase and not recommended for normal players yet.
Trevius: Non-Player Race spawns will cause the client to crash, so it is recommended to test it in an empty zone.
Trevius: Also, items in the bank will cause it to crash, but normal inventory seems to work fine so far.
Trevius: You cannot create a character on this client yet, so you must use an existing character.
Derision: VOA: Fixed zoning. Adjusted spawn encoding.

==04/02/2012==
JJ: Removed additional library and include directories from windows projects as they were not standard locations for all.

==03/29/2012==
Sorvani: Resurrections effects will again be applied to characters who are in a zone where combat is not allowed (GL, PoK etc) when they receive a rez.

==03/19/2012==
Bad_Captain: Bots: A few fixed for #bot stance command

==03/19/2012==
Bad_Captain: Bots: Implemented bot stances. See forum post.

Required SQL:
utils/sql/svn/2107_required_bot_stances.sql

==03/2/2012==
Bad_Captain: Fixed potential crash in group roles code when a group member is removed.

==02/28/2012==
Sorvani: Added check for ST_AEBard song before sending spell SPELL_NO_HOLD
Bad_Captain: Implemented Group Roles via UI (SoD+)- Set group roles, maintains across zones, save/load grouprole sets (load doesn't appear to work on UF- may be a client bug as client doesn't send request to the server for saved group roles as SoD client does)
Bad_Captain: Fixed FindType to allow for spell effects > 127. Observed by bots trying to cure corruption (effectid 369) when client has a mount (summonhorse effectid 113: 369-128-128=113).
Bad_Captain: Bots- fixed bot summoning of client corpses, fixed ability to spawn more bots than allowed via server rule (#bot botgroup load was not checking for SpawnBotCount rule), fixed bot issue with receiving buff with Group with Pets target type.

Required SQL:
utils/sql/svn/2104_required_group_roles.sql

==02/11/2012==
Secrets: Fixed two more hanging issues introduced regardless of the item discovery feature was on or off.
Secrets: Fixed a hanging issue introduced regardless of the item discovery feature was on or off. Keep in mind the item discovery feature still takes a reasonable amount of time to work, and this will be fixed in a future update.
Secrets: Added OP_IncreaseStats for use with the #incstats command (and other things, in due time!)
Secrets: Added QueryServ to the VS2008 project in preparation of moving eventlog, hackers, discovered items, and other non-essential database tasks over to it.

==02/03/2012==
Trevius: Added accout_status field to the discovered_items table to make it easier to remove accidental GM item discovery from the table.

Required SQL:
utils/sql/sv/2099_required_discovered_items_account_status.sql

==01/28/2012==
Trevius: The version field in the zone_points table can now be set to -1 if you want all versions of the zone to inherit the same zone points.
Trevius: Added extra option to the "#npcspawn create" command that will try to create the npc_type ID within the standard range for the current zone (zone_id * 1000). Usage: "#npcspawn create 1"

Required SQL:
utils/sql/sv/2098_required_zonepoint_version_changes.sql

==01/14/2012==
Trevius: Added Grid ID to the #npstats command output.

==01/06/2012==
Trevius: Increased MAX_ITEM_ID to 200000 to match the new item ID max.  This is only used for Min Status on items.

==01/02/2012==
Trevius: Fix for loading buffs on suspended pets.

==12/12/2011==
Trevius: Pets set to a petpower of -1 in the pets table will scale stats to the petpower like they used to.

==12/11/2011==
Bad_Captain: Fixed hatelist/aggro bug I introduced in rev 2087 causing NPCs to attack the closest client instead of the top of their hatelist.
Bad_Captain: Updated some live opcodes for EQExtractor.

==12/06/2011==
Leere: Added IsFromSpell to Attack() to allow its use from spell effects. This allows the Rampage AA to actually hit mobs again.
Leere: Added a rule for the minium hasted delay that can be reached for weapons. Default set to 400 based on best guesses from the Moss-Covered Twig tests posted on the net.
Congdar: (ptarp)compile warnings in windows
Bad_Captain: Fixed Enchanter's Mezmerization AA - it was extending buffs 35%, now extends mez spells by 1 tick / rank.
Bad_Captain: Fixed NPC aabonuses issue(s) - NPCs were trying to access nonexistent aabonuses within combat code (hatemod as an example)
Bad_Captain: Temporary Fix on crash due to non-player spell proc from Monster Summoning Pets until I can figure out the cause.
Bad_Captain: Bot changes / fixes including maintaining HP & Mana after camp/zone/death, ability to maintain aggro over clients, taunting toggle command (#bot taunting [on|off]), delay death AA, and others. Please see http://www.eqemulator.org/forums/showthread.php?p=205139#post205139 for all Bot changes.

Required SQL: 2087_required_bots_hp_and_mana_and_spell_updates.sql

==12/05/2011==
Trevius: Crash fix for trying to zone into a flagged zone without having the flag.

==12/04/2011==
Secrets: Added QueryServ for VS2010 x86/x64. QueryServ allows queries to be sent to it for use on an external database, through the means of packets.
Currently, the only thing it logs is a #command input, but that will be expanded onto soon. A suggestion for our developers would be to move any statistic logging stuff (hackers table, eventlog, etc) over to it eventually
to save processing power on the main executable's machine. This will allow for things like discovered items to work a bit more better resource-wise.
Akkadius: Added #advnpcspawn setversion (version#) - This will change the instance version in which the targeted NPC resides in
Akkadius: Added #npcedit setanimation (stand, sit, crouch, dead, loot (0-4)) so that setting animations are much easier. This also makes animations much more reliable setting them with the spawn packet rather than through Perl.
Akkadius: Added /MP switch to VS2008 so that it will compile with multiple processors
Akkadius: Fixed compiles for VS2008 from the Queryserv commit
Secrets: Added #qtest <string>, which will populate the remote database through QueryServ with information as a test only. Requires 255 status by default.
Trevius: LDoN points are now capped at 2,000,000,000 instead of ~16,000, and no longer roll back to 0 if they exceed the cap limit.

Reccomended SQL: (ON QueryServ's database, NOT the main db) utils/sql/queryserver/2079_queryserver.sql


==12/01/2011==
Secrets: v90 toolset bugs reported on forums. In order to use Perl 5.14, you MUST upgrade to VS2010 (preferrably ultimate), if you do not have vs2010, it will default to Perl 5.10 and you will be unable to use the much more stable Perl 5.14, an upgrade is reccomended.
Secrets: Fixed Windows x64 rulesys bug where it would store them as an x64 version of an int (long long) and mess up the ordering of pointers, resulting in certain rules not loading properly.
NOTE: For those having issues compiling vs2010, there will be a guide up shortly to help you set up your dev environment. In the meantime, make sure your "Additional Include" and "Additional Library" paths
are correct and pointing at the right location. Failure to do so will result in mysql header/lib and perl header/lib issues. If you are looking for zlib x64, it's in SVN.

==11/30/2011==
Secrets: Implemented Visual Studio 11 and Visual Studio 10 project/sln files.
Secrets: Added x64 configuration settings to VS11 and VS10 project files/SLN files.
Secrets: Changed WIN32 define to _WINDOWS across the board. In the case where WIN32 is needed over WIN64 (ie; assembly references) there is still WIN32 defines and a new WIN64 define.
Secrets: Upgraded ActiveState Perl lib define to 5.14 -- others still work but it is strongly reccomended to use 5.14 as it contains less memory leaks.
Secrets: Added Zlib 1.2.3 x64 to the SVN for use with the windows solution files.
Secrets: Fixed vs2008 project files to reflect the new _WINDOWS define
Secrets: Perl 5.14 Compile Fix

NOTE: Since VS11 is in beta, I only set up the debug options. You should use Vs2010 Ultimate to compile in x64 mode.
NOTE2: Perl 5.14 is stable, but if you absolutely need to use 5.10, ctrl f search for "perl514.lib" and replace it with "perl510.lib"
NOTE3: A forum post will be made for help with compiling Windows x64 on EQEmulator.org, it is an experimental feature but has less issues than x64 linux, imo.

==11/28/2011==
Leere: Fixed a problem with no drop items inside of bags when trading with NPCs. Pets retain buff based procs through zoning now.

==11/26/2011==
Leere: NPCs now have the ability to ignore level limits for stuns. This ability can be turned off via rule. Also added a rule for what the base stun immunity level is for spells with a max level of 0.
Leere: NPCs (and thus pets) are now able to equip items in non-visble slots. They will also look inside of bags that are traded to them for those items.
The pets table was expanded. It can now map to several npc IDs for the same pet type string, based on pet power. (This has replaced the old approach of letting pet power be a direct boost to NPC stats. The intention is to now have distinct npc_type table entries for the various pet power levels that a pet supports.) Pet naming and pet control was likewise moved out of code logic and to the pets table. (The default pet control is now petFamiliar rather than petOther.) Pets can now have items already equipped when summoned. The equipment sets used for that can be shared between pets and also be nested up to a depth of 5.
Pets are no longer stored as part of the profile blobs.
Pets (charmed and summoned) belonging to clients should no longer attempt to assist other NPCs if they hear a call for help.

Required SQL:
utils/sql/sv/2069_required_pets.sql

==11/21/2011==
Akkadius: Implemented NPC Special Attack 'Z'. This will keep clients from being able to attack an NPC altogether similar to live.

==11/17/2011==
Congdar: Fix charms Platinum Disc and Gold Pin. You'll need updated items\CHRMGold.pl and \items\CHRMPlatinum.pl once pushed to the quest repository.

==11/17/2011==
Lerxst: Fixed crash when calculating random focus effect from an augment when the base item had no focus effect.
Also added some bulletproofing in case that isn't the only place an invalid spell id might be passed.

==11/16/2011==
Akkadius: Added the ability to specify doors/objects/ground spawns to load for all versions of the same zone regardless by setting the value to -1.
This reduces serious redundancy of copying the same data over and over for instances.

Required SQL:
utils/sql/svn/2062_required_version_changes.sql

==11/15/2011==
Trevius: Potential zone crash fix for Discovered Items pointed out by Congdar.

==11/09/2011==
Trevius: Fixes for issues caused by the extra SoF+ item click checks.

==11/05/2011==
Trevius: Added extra checks for SoF+ item clicks.

==11/01/2011==
Trevius: Added Discovered Items table to track who discovered an item for the first time and when.
Trevius: Added new EVENT_DISCOVER_ITEM player event.  It exports the item id to the $itemid variable.
Trevius: Added Rule Character:EnableDiscoveredItems to make item discovery tracking optional.

Required SQL:
utils/sql/svn/2057_required_discovered_items.sql

Optional SQL:
utils/sql/svn/2058_optional_rule_discovered_items.sql

==10/31/2011==
Leere: Changed raid leadership ability costs to match client expectations.
Leere: All stuns should now treat a max level of 0 as meaning level 55.

==10/24/2011==
Akkadius: Mysql CLI changes
Akkadius: Preliminary work to some future additions, added int32 Database::GetGuildDBIDByCharID(int32 char_id)

==10/23/2011==
Akkadius: Another memory leak in parser.cpp, NewEventList never deallocated
Akkadius: Reduced code checking redundancy in several places regarding functions that reference ExecWeaponProc, only valid invalid spells are checked and logged.
Akkadius: (Lerxst/Akkadius) Approximately 8 memory leak fixes based on findings from 'cppcheck', some found in loot, popup windows and a few other places.
Akkadius: (Lerxst) Various quest object fixes, sanity checks and initiator adjustments
Akkadius: (Lerxst) Minor trading code adjustments
Akkadius: (Lerxst) Logic fixes with bot code
Sorvani: Critical hit filter should work again.
Secrets: Reverted my changes.

==10/22/2011==
Derision: Underfoot: Extended Buffs should now last the correct time without needing to zone.

==10/21/2011==
Derision: Fixed rez bug.
Akkadius: Fixed a spell crash that has been reported on The Hidden Forest with TryFadeEffect
Akkadius: Fixed a spell crash with ExecWeaponProc when a spell or weapon procs a spell that does not exist, you can catch the invalid spells in your spells log if you have them enabled

==10/20/2011==
Trevius: Fix for Perl Doors GetID() command.
Akkadius: Mysql #command CLI - Fixed an issue where the query string was being escaped
Akkadius: Mysql #command CLI - Added switches -s and -h. Switch -s providing space between the select lines in a query, -h highlighting every other row to be more readable

==10/19/2011==
KLS: (lerxst2112) Client::Message memory leak
Trevius: Potential crash fix for MoveTo() being used on an NPC that has a grid with wandertype 3.

==10/14/2011==
Leere: More than 6 members of a raid can now receive raid experience.
Sorvani: Added AE Rampage message and filter

==10/11/2011==
KLS: Added Ebon/Radiant crystal reclaim for the clients I have.(Titanium/SoD/Underfoot)
KLS: Seperated buffs from the player profile.
KLS: Seperated buffs allowed me to fix the counters on buffs for the newer clients across zone lines, as well as melee and magic runes are no longer limited to 65k as they are no longer uint16s.
KLS: Added ability to save variables to items. Via $client->SetCustomItemData(13, "SomeVariable", 1024); #give our mainhand some variable.
KLS: Added ability to retrieve items from the inventory in perl with $client->GetItemInInventory(slot_id);
KLS: Fixed Item::IsAugmentable() to return correctly if the first augment slot is not used.
KLS: Updated for latest code and readded Derisions' cross-zone /inviting.  I've been testing it for a while now and can't find any real issues with it so I readded it.
KLS: Added class and race combo's into the database so they can be potentially changed; only SoF+ clients will correctly display this.
KLS: Fixed a bug in WorldDatabase::GetCharSelectInfo.
KLS: Changed internal faction values to go in order this change will break some quests in the short term but should be more intuitive in the long run.
KLS: Changed player.pl loading slightly: it will now look for player quests in the following order: .\quests\{zone}\player_v{instance_version}.pl, .\quests\{zone}\player.pl, .\quests\templates\player.pl
KLS: CanClassX functions are no longer hardcoded, they will now check the skillcaps data instead.
KLS: EntityVariables are now identified with a string instead of an int ex: $npc->SetEntityVariable("SomeId", 5), this shouldn't break any existing quests.
KLS: Fixed an issue where bard songs could get stuck in the *on* position even if the bard had turned singing off.
KLS: Fixed an issue where merchants would load and send items more than once in cases where npcs had merchants that shared merchant_ids in a zone.

==10/09/2011==
Akkadius: Fixed an optional argument in client 'NukeItem'
Akkadius: Added two #npcedit commands; armortint_id and alt_currency_id
Akkadius: Exported $client->GetAggroCount();, this will get how many NPC's are aggroed on the client. This can also be used to determine when in combat.
Akkadius: Mysql ingame basic CLI to run select queries or execute queries from in-game, default account access 250, be careful when using this.
Akkadius: (Lerxst) Added a crash fix for spells that do not find a valid item in the database SE_SummonItem

Optional SQL:
utils/sql/svn/2023_optional_mysqlcli.sql

==10/01/2011==
Trevius: Added Destructible Objects for Underfoot.

==09/25/2011==
Derision: Implemented Tune Of Pursuance AA.

==09/24/2011==
JJ: Added hacker entry for possible instant camp disconnects.

==09/23/2011==
Trevius: Destructible Objects now change damage states as they reach 75%, 50%, 25% and 0%.
Trevius: Added Perl Mob quest object SendUntargetable(to_client, in) to toggle the ability to be targeted.

==09/22/2011==
Trevius: Initial implementation of Destructible Objects (SoD only for now).  Most of the work was done by Derision.
To Create a Destructible Object, use the 'lastname' field in npc_types to set the model (ie. DEST_DEV_TENT1), and add "o" in the 'npcspecialatks' field.

==09/21/2011==
Leere: Damage shields should no longer break root spells.

==09/20/2011==
Trevius: New rule added to allow a cap for GM skill training on specializations (default is 50).
Trevius: #maxskills will now only set specializations to 50 each to prevent them from all resetting to 1.
Trevius: GM Trainers will no longer allow training more than 1 (or 2 if you have the AA) specializations above 50.
Bad_Captain: Added rule for Bot AAs by expansion, bot bash fix (bots with bask/slam skill could bash regardless of weapon(s) or shield), various bot AA fixes, added a few bot AAs


Optional SQL:
utils/sql/svn/2015_optional_specialization_training_rule.sql
utils/sql/svn/2016_optional_rule_bot_aa_expansion.sql

==09/12/2011==
Leere: (Tabasco) Added a deque for signals received by an NPC.
Sorvani: Various message type fixes, most notably NPC Flurry/Enrage/Rampage and Pet Flurry/Rampage.

==09/05/2011==
Akkadius: (Akkadius/Lerxst) Fixed Beastlord 1.5 and 2.0 pet clickies.

==09/03/2011==
KLS: Added working Alternate Currency system for SoD and SoF(Untested but hopefully works).
KLS: Added two fields to merchantlist that allows one to filter which items are offered to players by minimum faction and minimum level.
KLS: Max stacks on items increased from 254 to 32767.
Akkadius: Modified items id cap to 200,000
Akkadius: Changed Perl Client Object 'NukeItem' to use the new fields implemented by KLS's Alternate Currency revision:
$client->NukeItem(itemnum, [where_to_check, 1 = invWhereWorn, 2= invWherePersonal, 4 = invWhereBank, 8 = invWhereSharedBank, 16 = invWhereTrading, 32 = invWhereCursor]); Ex: $client->NukeItem(1001, 2);
Akkadius: (Lerxst) Fixed Enduring Breath bot code, adjusted level requirements and added Beastlord class case.

Required SQL: utils/sql/svn/2004_charges_alt_currency.sql

==09/01/2011==
Derision: Spell resist messages now use the same MT as fizzles (for chat filter purposes).

==08/28/2011==
Bad_Captain: Rewrote Bot AAs to use aabonuses and GetAA(). Also added a few AAs.
Bad_Captain: Fixed Bot chance to hit. (they never missed with their primary weapon attacks, and only missed ~5% with their offhand)
Bad_Captain: Added WipeHateList to bot group attack, bot group follow, and bot group guard to allow target switching and keeps bots and their pets from attacking their target when you no longer want them to. (suggested by Criimson)

==08/23/2011==
Trevius: Exported to Perl Mob: SetDeltas(delta_x, delta_y, delta_z, delta_h), SetLD(value), SetTargetDestSteps(target_steps).
Trevius: (SuperUserJD) SpellOnTarget fix for casting beneficial spells on group members while in a raid.

==08/21/2011==
Derision: Added rule to prevent looting corpses when a player has an item on the cursor (to prevent item loss using Loot All).
Derision: Alcohol intoxication is maintained across zoning (can be turned off with a rule).
Derision: Intoxication level affects STR/STA/DEX/AGI/WIS/INT.
Derision: Added 'Update' button to #showstats window for SoD+ clients.

Optional SQL: utils/sql/svn/1998_optional_intoxication_and_looting_rules.sql

==08/18/2011==
Leere: Removed lore item from the restrictions for pick pocket.

==08/13/2011==
Derision: Player pets will now show their owners name. UF users can turn this off in options.
Derision: SoD/UF: Beneficial Pet Buffs can be clicked off in the Pet Window.
Derision: Underfoot: Can now click off buffs in the short buff box. Removed registraion of HoT in patches.cpp

==08/12/2011==
Bad_Captain: Fixed double class / race stats for bots.

==08/09/2011==
Derision: Underfoot: OP_ClearSurname

==08/05/2011==
Akkadius: Corrected a grammatical error with training disciplines.

==08/04/2011==
Bad_Captain: Updated Bot::MeleeMitigation to match mob version.

==08/02/2011==
Trevius: (Akkadius) Exported Freeze() and UnFreeze() to Perl Client.

==07/27/2011==
Caryatis: Added Special Attack 'p' (Makes mob immune to pacify)
Caryatis: Added Special Attack 'j' (Tether - returns mob to spawn point if its distance away from spawn point is greater than its aggro range)
Caryatis: Added Special Attack 'J' (Leash - same as Tether except heals mob to full, strips all buffs and wipes the hatelist as well)
Caryatis: Fixed TGB(if you cast a group buff with a corpse or an npc thats not a client's pet as target, it will use your group instead)

==07/26/2011==
Congdar: redo world container check

==07/24/2011==
Caryatis: Added support for higher level invis and see invis(eg Ethereal Invisibility & Skylight Sagacity)
Congdar: update check to world containers

==07/23/2011==
Congdar: (Criimson)Bot dyes (and tweaks)
Congdar: (lerxst2112)Bot dyes (and tweaks)
Bad_Captain: Fixed Bot GetAC() and GetATK() to work with #ShowStats

==07/22/2011==
Congdar: update check for Lore

==07/17/2011==
Congdar: (pfyon, Criimson)Various bot tweaks
Caryatis: Updated My/Showstats window.

Required SQL:
utils/sql/svn/1974_required_bot_spells_update

==07/16/2011==
Trevius: Exported AssignToInstance(instance_id) to Perl Client.

==07/14/2011==
Caryatis: Implemented the Extra Skill Damage itembonus(+bash, +kick dmg)

Optional SQL:
utils/sql/svn/1972_optional_extradmg_item_cap.sql

==07/14/2011==
Leere: Fix for reading books in SoF and later clients.

==07/13/2011==
Derision: OP_DisciplineUpdate for SoF and Underfoot (expanded Disc struct in UF player profile, added encode for Disc update).

==07/12/2011==
Caryatis: Added Perl Object: $mob->SetBodyType(bodytype).
Caryatis: Fixed issue with swarm(and wake the dead) pets where they would not despawn if they spawned as the target died.
Caryatis: Changed when mobs enrage to 9%(from 14%) to match live, with a rule to customize the value if wanted.
Caryatis: Added rule to allow matching of new live rules for enrage(it was removed from all non player-pet npcs).

Optional SQL:
utils/sql/svn/1968_optional_enrage_rules.sql

==07/11/2011==
erde: FreeBSD compile fix for Rev1963 (no strncpy in FreeBSD).

==07/10/2011==
Derision: Underfoot - Support for /emote
Derision: Underfoot - Support for Guild Creation via new window in Underfoot.
Derision: SoD+ - Changing group leader should update Group Leadership AA to that of the new leader.
Caryatis: Live like focus effect behaviour added(Improved Damage, Healing and Reduce Manacost focus effects will now be random if the spell contains both a min(effect_base_value) and max value(effect_limit_value)

Optional SQL:

utils/sql/svn/1962_optional_guild_creation_window_rules.sql
utils/sql/svn/1963_optional_rule_live_like_focuses.sql

==07/09/2011==
Derision: Underfoot - Instrument modifiers / AAs should now improve runspeed.

==07/06/2011==
Trevius: Fix for EVENT_ITEM_CLICK_CAST bugging Titanium clients.

==07/05/2011==
Trevius: Fix for EVENT_ITEM_CLICK_CAST for SoF+ clients.
Trevius: (Akkadius) Added new rule Console:SessionTimeOut for adjusting console session timeout.

Optional SQL: utils/sql/svn/1960_optional_console_timeout_rule.sql

==07/02/2011==
JJ: Split wander type 4 to allow depop with/without spawn timer. Type 4 is with, type 6 is without.

==06/26/2011==
JJ: Added functions to count all corpses, get corpse ids, and allow checking of items on player corpses

==06/25/2011==
JJ: (Leere) Fix for bards in reagent code

==06/24/2011==
KLS: Dest zone would buffer overflow if it was >= 16 characters, fixed.
KLS: Comment clean up + added EntityList::FindDoor($doorid) to perlXS
KLS: Fixed the PerlXS export for GetDoorByID and GetDoorByDBID
Sorvani: Added door object perl functions GetKeyItem(), SetKeyItem([value]), GetNoKeyring(), SetNoKeyring([value]). Example Usage: my$doorobj = $entity_list->FindDoor(6); $doorbj->SetKeyItem(10615); $doorbj->SetNoKeyring(1);
JJ: (Akkadius) Exported some task functions to perl.

==06/23/2011==
JJ: (Sorvani) Stop forcing client to tutorial when button not selected.

==06/22/2011==
Trevius: Added new Perl Mob quest object RemoveNimbusEffect(effectid) for removing permanent nimbus particle effects.
JJ: EVENT_CLICKDOOR now passes the zone version to perl.

==06/20/2011==
JJ: Added message to client when using #instance destroy command.
JJ: Altered doors index to include version to help bring door ids below 256 in zones with multiple versions. Required SQL provided.

Required SQL: utils/sql/svn/1946_doors.sql

==06/19/2011==
JJ: (Leere) Fixed reagent consumption oddities

==06/18/2011==
JJ: Depop with spawntimer reset option now works properly. Default use is changed to false.
KLS: Added some minor stuff
KLS: Added animation field to spawn2 that will control what the spawned npc will do at their guard point. 0 = eaStanding, etc etc
KLS: Tweaked books in SoF+ as they weren't displaying right; it may still not be perfect though I haven't tested it with every book in the game. Required SQL Provided.

==06/17/2011==
KLS: Lowered resolution on QuestTimer process timer to actually allow you to use sub 1 second times.
KLS: Added quest::settimerMS(timer, duration) to allow timers not in integer second intervals.
JJ: Moved ENTERZONE event for items to execute before SCALE_CALC.

==06/15/2011==
Secrets: Modified the pound command #reloadstatic to respawn doors after it despawns them.
Secrets: Made the default door dest zone be "NONE" for quest::createdoor's constructor
Secrets: Added potential fix for UCS assertion error under windows after being up for so long.

==06/14/2011==
Secrets: Opcode to remove all doors.
Secrets: Perl door support.
Secrets: Perl objects added for Doors since first PerlDoors commit: SetSize, GetSize, SetIncline, GetIncline, GetOpenType, SetOpenType
Secrets: Added quest::createdoor(model, x, y, z, h, [opentype], [size]) . This spawns a door similar to quest::creategroundobjectfrommodel, and can be manipulated in the same way as other doors. To save it, get the door object using $entity_list->GetDoorByID(id), as it returns an entity ID (and preliminary DBID/DoorID is stored on the object itself) upon creation of the door. otherwise the door is temporary, and does not save the stored DBID.  $doorobj->CreateDatabaseEntry() saves it and its temporary DBID + DoorID.
Secrets: Added door object perl functions GetLockpick() and SetLockpick([value]).

==06/10/2011==
JJ: Added more tables to remove entries from when deleting character.

==06/06/2011==
Secrets: Adjusted the default value for Character:SkillCapMaxLevel. It now defaults to 75 because PEQ only has skillcaps up to 75, and if the level is higher than 75 it will always return 0, breaking skills. (layer 8 issue fix)
Secrets: Made stat cap adjustable via rules, Character:StatCap. The client won't be in sync but that's what #mystats is for. 0 = feature disabled, defaults to 0.

==06/05/2011==
Derision: Fixed /yell

==06/04/2011==
Secrets: Fixed pet HP resetting if the pet is above 32k when zoning.
Secrets: Fixed player HP rollover bug (~495k hitpoints, rarely encountered) with AAs by temporarily casting it as a float.
	 NOTE: the client only displays 10 million hitpoints in titanium. Keep that in mind when designing items. Only issue is displaying them, unlike the rollover bug you won't die and it will show on show/mystats.
Secrets: Fixed damage on weapons above 255. They only display on SoF+ clients, and Titanium will simply show a cosmetic issue (an incorrect value). You can set an item to any value up to the max for an uint32 and it will work.
Secrets: Added rules for the low-level damage cap. There is a rule for the pre-10 cap, and one for the pre-20 cap. Defaults to 20 and 40 respectively.

REQUIRED: You will have to recompile sharedmem with this update. Items will fail to load otherwise.

==05/31/2011==
Trevius: Added EVENT_CLICK_OBJECT to player quest events.  It exports variable $objectid which holds the entity id of the clicked object.

==05/29/2011==
Secrets: (Akkadius) Added quest::createguild(name, leader) for creating a brand new guild.

==05/28/2011==
Trevius: Added quest::getguildnamebyid(guild_id) for getting a guild name from the guild ID.

==05/25/2011==
JJ: Implemented Arcane Tongues research AA. Chance for research success increases for each rank (10, 25, 50).
JJ: Implemented New Tanaan Crafting Mastery tradeskill AA. Each rank allows an additional tradeskill above 200.
Note: For servers with players who have tradeskills already above the limit without previously purchasing these AAs will freeze the chance to increase until they purchase the proper amount of NTCM AAs.

==05/24/2011==
KLS: Changed Mob::NPCSpecialAttacks(atk, perm) to Mob::NPCSpecialAttacks(atk, perm, [reset = 1], [remove = 0]).
This should allow one to add and remove flags individually without having to reset everything each time.
ex:
$npc->NPCSpecialAttacks(RQ, 0); //would enable the npc to rampage and quad.
$npc->NPCSpecialAttacks(S, 0, 0); //Would enable the NPC to summon as well as rampage and quad by telling it to set S but don't reset the earlier flags.

ex:
$npc->NPCSpecialAttacks(RQS, 0); //would enable the npc to rampage, quad and summon.
$npc->NPCSpecialAttacks(S, 0, 0, 1); //Would enable the NPC rampage and quad by telling it to set S but don't reset the earlier flags and also remove the flag being set.

==05/23/2011==
JJ: (Akkadius) Fixed camera shake usage output.

==05/22/2011==
KLS and Co:
-All liquid should count for skill ups.
-Finished unified quest interface... this is fairly large and will probably have a few problems here and there; report them to me and ill fix them asap.
The goal behind the system is to allow more than one scripting system to work at a time (though with limited interaction due to pre-existing implementation limitation).
This was a feature requested by the Dalaya community as they plan to merge back to the eqemu codebase and clients but are stuck with an old parser and thousands of files
that can't be realistically rewritten in a short time frame.

==05/20/2011==
JJ: Doubled buffer for tradeskill search when using experiment mode. Outputs message in error log when matches exceed buffer.

==05/17/2011==
JJ: Changed tradeskills to distinguish world containers in multiple recipe matches. Split invalid container vs. non-unique recipe error log entries. Allowed server to select first match for duplicate recipe contents.

==05/16/2011==
JJ: (Zothen) UCS message logic fix.
JJ: (Zothen) Learning basics clean name fix.

==05/09/2011==
KLS: (lerxst2112) *nix compile fix.
KLS: Added #picklock #sensetrap and #disarmtrap for LDoN traps since they still don't work quite right on the newer clients because we don't implement destructable objects yet.

==05/08/2011==
Congdar: (Timothy_nonax) Add Bot Command ( #bot pull )

==05/03/2011==
Trevius: (Vaion) Fix for focus effect decay over max level.
Trevius: (Zothen) Crash fix for UCS.
Trevius: Rule added for Skill Caps Max Level to resolve issues with servers that have Chars over level 75 after Rev1875.

Optional SQL: utils/sql/svn/1889_optional_skill_cap_rule.sql

==05/02/2011==
Secrets: Added OP_CameraEffect for Titanium.
Secrets: Added commands: #reloadallrules, #reloadrulesworld, and #camerashake. These default to
Secrets: Added optional "global" flag as item 5 in the $mob->CameraEffect() quest object. This does #camerashake, but in quest form.
Secrets: #reloadallrules reloads rules in every single zone plus world. #reloadrulesworld reloads the rules in world only.
Secrets: #camerashake shakes the camera in every zone with required args intensity and duration.

==04/24/2011==
Trevius: Added new Perl Mob quest objects GetItemHPBonuses() and GetSpellHPBonuses().

==04/17/2011==
Secrets: Converted PVP flags to be a variable, as there are other PVP rulesets embedded in the client. These will need code support to work properly. (IsAttackAllowed specifically.)
Secrets: Enabled Firiona Vie ruleset as an option. This disables OOC, makes languages hard to understand between races (somehow), and disables no-drop. If set to 2, this rule will only affect GMs, allowing players to be traded no-drop items from GMs. Player-to-Player trades are still considered active hacks, and are still detected.
Secrets: Made a rule to toggle the GM Petition Window in titanium. You will need the guide petition files for that client, and it still needs code support to work. (find these yourself.)
Secrets: Added expansion settings to the rule_values table instead of the variables. The PVP settings will also be here now, too. (See Optional SQL with this update.)
Secrets: Fixed an issue pointed out by Trevius in the previous commit.

Optional SQL: utils/sql/svn/1885_optional_rules_fv_pvp_expansions.sql


==04/13/2011==
BadCaptain: Bot spell update- Group Heals, debuff spells, spell recast timers, healing AI tweaked, bot bards can now have more than one song active
Optional SQL: utils/sql/svn/1884_optional_bot_spells_update.sql

==04/12/2011==
Trevius: The mana regen portion of bard songs is no longer affected by instrument mods.
Trevius: (scruffy) Identified opcodes for /zone and petition queue on Titanium.

==04/06/2011==
Derision: Underfoot: Corrected OP_CompletedTasks.

==03/30/2011==
Trevius: Implemented spell formulas 1001 to 1998.  They subtract/add values by increasing amounts each tick based on the formula - 1000 value.

==03/23/2011==
JJ: (Danyelle) Face fix for Iksar Beastlord pet.

==03/21/2011==
JJ: (Jaekob/Danyelle) Texture fix for Iksar Beastlord pet.

==03/11/2011==
Trevius: Skill caps now use the MaxLevel rule for deciding max level of skill caps instead of being hard capped at level 75.
Trevius: All spells can be blocked in a zone by setting a spell id of 0 in the blocked_spells table.
Trevius: If a zone has all spells blocked by setting spell id 0 in blocked_spells, any additional spells added for that zone will become exceptions and be allowed.
Trevius: Reverted Sorvani's swarm pet change from Rev1872 due to some bugs it caused for normal pets.

==02/24/2011==
Trevius: Power Source slot can now be augmented.
Trevius: Corrected spell formula 122 (Splurt) and implemented the reverse splurt (Ex. Corath Venom) where damage reduces each tic.

==02/22/2011==
gaeorn: (sorvani) fix to make swarm pets not be targetable as NPCs

==02/19/2011==
Trevius: Added variable export $slotid to EVENT_ITEM_CLICK and EVENT_ITEM_CLICK_CAST, which exports the slot id of the item that triggered the event.

==02/18/2011==
Trevius: Fixed a potential crash in TrySpellOnKill().
Derision: Underfoot: Bard instrument modifiers now show (as focus effects) in the item stats window.
Derision: Allowed fishing in 'VWater' (Region type 7) on the basis this is the only type of water in Sleeper and you can apparently fish there.

==02/17/2011==
Derision: Fixed bug in GetZoneForage where generally only the first three zone specific items could actually be foraged.
gaeorn: (sorvani) fix for bard pacify songs

==02/13/2011==
Trevius: Finalized implementation of Item Faction Mods.  The bonuses now remove if the item is unequiped.
Trevius: Added Rule Character::ItemCastsUseFocus - If true, this allows item clickies to use focuses that have limited max levels on them
Derision: Handle Spell duration formula 15 (for Distillate of Skinspikes).

Optional SQL:
utils/sql/svn/1859_optional_item_casts_use_focus_rule.sql

==02/11/2011==
Trevius: Implemented item faction modifier stats (i.e. factionmod1, factionamt1).
Trevius: Added Power Source slot to item stat (charm) scaling.
Derision: SoD+: Fixed bug when looting items from last two inventory slots (commonly seen when using Loot All).
gaeorn: only send hp/mana/endurance updates to group members when in raid instead of entire raid

==02/10/2011==
JJ: (c0ncrete) Fixed shared bank database query to match schema.

==02/08/2011==
Trevius: Replaced most uses of strncpy with strn0cpy for consistency and stability.
Trevius: Increased zone name loading to 32 characters for doors.

Required SQL:
utils/sql/svn/1847_required_doors_dest_zone_size_32.sql

==02/07/2011==
Derision: SoD/UF: /makeleader and changing Group Leader via Roles works.
Derision: If the leader of a group of exactly 3 members quits, leadership should now be transferred to another member.

==01/30/2011==
Caryatis: Stability fixes for Mystats window.

==01/26/2011==
Derision: Support for door opentype 57 (instant intra-zone portals which don't require the client to click, such as in the bazaar).

Note: For opentype 57, the client automatically sends the click when the player moves onto the portal.

Optional SQL, to set the bazaar portal discs to type 57 (they are type 58 in the PEQ database, but collects show they should be type 57):

update doors set opentype = 57 where zone = 'bazaar' and name = 'PORTAL_DISC';

==01/24/2011==
Trevius: Exported GetFreeSpellBookSlot(start_slot=0) and GetSpellBookSlotBySpellID(spell_id) to Perl Client.
Trevius: Fix for potential crash with EVENT_ITEM_CLICK.
Trevius: (Secrets) Identified OP_SpellEffect for Titanium.
Congdar: bad_captain: more Bot Updates / Fixes V 2.0

==01/22/2011==
Congdar: fix stack buffer overflow

==01/20/2011==
Congdar: bad_captain: Bot Updates / Fixes V 2.0

==01/18/2011==
Trevius: Changed Perl NPC AddItem(itemid, charges, slot = 0) to AddItem(itemid, charges = 0, equipitem = true) since slot was unused anyway.
Trevius: Added equipitem option to quest::addloot(item_id, charges = 0, equipitem = true).

==01/16/2011==
Caryatis: Fix for Phantom line of discs not working.
Caryatis: Fix for buffdurationformula 5(0 value results in a 3 tick spell, was set to 1 tick).
Caryatis: Fix for discs(and AAs) setting a reuse timer if used while not able to(ie stunned)
Caryatis: Implemented SE_VoiceGraft
Caryatis: Added scaling for pet focus items based on the pet power in the spell file.

==01/15/2011==
Caryatis: Fix for fear effects not fading when the buff does, also added check so that a negative recast is not set with SE_ReduceReuse

==01/14/2011==
Trevius: (l0stmancd) Fix for invalid slot move warnings on SoF+ clients.
Trevius: (l0stmancd) Fix for potential item loss issue while using an inventory augmentation sealer.
Trevius: Adjustment to the augmentation code logic to remove potential issues.
Trevius: Added updateclient option to Perl Client TakeMoneyFromPP(copper, updateclient=false).
Derision: UF: Translated command code for /pet hold
Caryatis: Implemented SE_ReduceReuseTimer(epic 1.5/2.0 focuses, sof type3), SE_BlockNextSpellFocus(chance to block next spell matching focus)
Caryatis: Implemented SE_SetBodyType, SE_SpellOnDeath, SE_BlockSpellEffect, SE_Leap, SE_ImmuneFleeing, SE_AddMeleeProc
Caryatis: Delay Death AA is now functional(optional sql).

Optional SQL:
utils/sql/svn/1823_optional_delay_death.sql

==01/13/2011==
JJ: (Leere) Exported quest::LearnRecipe(recipe_id) to PERL

==01/12/2011==
gaeorn: possible fix for some short duration buffs (bard songs) fading one tick early
Caryatis: Changed SE_NoCombatSkills to SE_CombatSkills(0 = spells only, 1 = discs only)
Caryatis: Implemented SE_SpellDurationIncByTic(formerly SE_FocusCombatDurationMod), it adds tics to spells/discs
Caryatis: Added support for Special Attack 'Y'(Ranged Attack), so when an NPC can't reach or summon his target, he will use range if able to
Caryatis: Implemented SE_Forceful_Rejuv(refreshes spell gems), SE_HealFromMana, SE_ManaDrainWithDmg, SE_EndDrainWithDmg
Caryatis: Implemented SE_LimitHPPercent, SE_LimitManaPercent, SE_LimitEndPercent(limit you to a certain % while you have the buff)
Caryatis: Implemented SE_SwarmPetDuration(swarm pet focus)
Caryatis: Res Timer changes have been reverted temporarily.

Optional SQL:
utils/sql/svn/1817_optional_npc_archery_bonus_rule.sql

==01/11/2011==
gaeorn: fixed lull max level check to account for no max level
Caryatis: Change to Doppelganger NPCID due to PEQ's next rev already using the IDs.
Trevius: Added quest::stopalltimers() to allow stopping all current timers on an NPC at one time.
Trevius: Added option to stop all timers when using #reloadquest by adding any argument after the command (ie. "#reloadquest 1"). Also added new #rq alias for the command.

Required SQL:
utils/sql/svn/1813_required_doppelganger_npcid_change.sql

==01/09/2011==
Caryatis: Viral spells are now supported(field191 determines how many targets it will spread to and field 192 determines how often(in seconds)).
Caryatis: Lull spells will now only work on the levels they were intended to.
Caryatis: Corpses now have a res timer(like live). You may res a corpse as many times as you want however you will only recieve exp for the first.

Optional SQL:
utils/sql/svn/1809_optional_rules.sql

==01/08/2011==
Caryatis: Implemented Target's Target(target type 46). Places effect on your target's target(ie cast with mob as target but spell lands on mob's target)

==01/05/2011==
Trevius: Changed xpreward field in the tasks table to be signed so it can display negative values for the level based experience rewards.
Trevius: Tasks now show item links in Task Rewards correctly for all clients.
Trevius: Tasks now reward any set Experience and/or Coin even if the rewardmethod is set to 2 (perl quest).
Caryatis: Mobs now summon starting at 97%, not 94%(like live).
Caryatis: Charmed pets can no longer summon mobs from out of their LoS while charmed.
Caryatis: All fixed duration charm spells now have fixed duration instead of only 2 that were supported.
Caryatis: SpinStun effects now work on mobs up to the max level that the spell denotes(previously limited to 55 regardless of spell info)
Caryatis: SpinStun durations have been changed to be pulled from the effect_value, instead of buff duration(which stopped alot from working), also spins mobs now
Caryatis: Implemented SE_Fearless(Valiant Companion), SE_AntiGate(Translocational Anchor), SE_DispelBeneficial(various spells and clicks)
Caryatis: Implemented SE_IncreaseBlockChance, SE_CurrentEnduranceOnce, SE_CurrentManaOnce, SE_AEMelee(duration rampage)
Caryatis: Persistent Casting AA is now functional(required sql)
Caryatis: Rampage(-) and Destructive Force(+) have changed, the duration on both has been altered based on the live spell info(required sql)
Caryatis: Flurry will no longer hit the highest on hatelist, it will hit the mobs current target like live(fixes rooted flurrying mobs).
Caryatis: Updated spdat.h with current status of all spell effects
Caryatis: Reorganized spell_effects.cpp to remove alot of the clutter of effects handled elsewhere

Required SQL:
utils/sql/svn/1803_required_tasks_xpreward_signed.sql
utils/sql/svn/1804_required_ae_melee_updates.sql

==01/04/2011==
Trevius: (l0stmancd) BagType 53 can now be used as an Augmentation Sealer from inventory.
Caryatis: Implemented SE_Doppelganger(Doppelganger AA is now functional)

Required SQL:
utils/sql/svn/1802_required_doppelganger.sql

==01/03/2011==
Caryatis: Implemented SE_GravityEffect(424)
Caryatis: Added rule for endurance to be included in rest regeneration

Optional SQL:
utils/sql/svn/1799_optional_rest_regen_endurance_rule.sql

==01/01/2011==
Derision: UF: Tweaked Arrow_Struct and implemented new OPCode for changing player size.

==12/31/2010==
Derision: UF: Fix for extended duration buffs not reporting correctly after first tic.

==12/30/2010==
Derision: Added a new table aa_required_level_cost to allow specifying a required level and cost for each rank of an AA.
Derision: Implemented spell formulas required by AA versions of Harm Touch/Lay on Hands.
Caryatis: ShowStatWindow was changed to ShowWindow and had some features added
Caryatis: title_type = 0 for custom titles, 1 for first and last name and 2 for guild titles
Caryatis: Implemented a limit on how low a weapon speed can be when procs are calculated to reflect the innate swing speed limit

Required SQL:

utils/sql/svn/1790_required_aa_required_level_cost.sql

If there is no entry in this new table for a given rank of an AA, then the level (class_type) and cost_inc
from altadv_vars will be used as normal.

==12/28/2010==
Derision: /corpsedrag & /corpsedrop. Optional SQL: utils/sql/svn/1784_optional_corpsedrag_rules.sql

==12/25/2010==
Derision: Underfoot: Correct OP_SwapSpell
Derision: SoD/Underfoot: List of traders in /bazaar dropdown now works.
Derision: Implemented Advanced Tracking AA.

==12/24/2010==
Trevius: (Orkim) Zone Short Name restriction fixes.

==12/21/2010==
Derision: HoT: OP_SendFindableNPCs
gaeorn: bugfix for quest::movegrp to work with raids. no really, its fixed this time

==12/15/2010==
Trevius: Added an extra check for buffs while zoning to make sure it is a valid spell being applied.
Derision: Underfoot - Fix for /dismount not dispelling horse and Group Leadership fixes (opcode changes).
Congdar: fix for bot trading exploits

==12/13/2010==
gaeorn: fixed underfoot to properly handle new packet struct for LoadSpellSet_Struct
Derision: Underfoot - UCS should now retain /announce setting properly.

==12/11/2010==
gaeorn: bugfix for quest::movegrp to work with raids
Derision: UCS Support for Underfoot and later clients
Congdar: bot item trading fixes for lore, dual wield, augmenting, inspecting

==12/10/2010==
gaeorn: fixed quest::movegrp to work with raids
gaeorn: fixed casting group spells in a raid
gaeorn: (vanicae) code support for tactical mastery warrior aa
gaeorn: (vanicae) code support for touch of the divine cleric aa
gaeorn: (vanicae) item loot messages when in a raid
gaeorn: (Wolftousen) fixed spawn variance

==12/09/2010==
Derision: Updated HoT opcodes following patch.

==12/07/2010==
Trevius: Resolved a potential zone crash with memorizing spells.
Trevius: Added $item1_charges, and $item1_attuned exports for all 4 turn in slots item1-item4 for EVENT_ITEM.
Trevius: Fixed GetMinDMG() so it should work now.

==12/03/2010==
Caryatis: Fix for SpellResistChance effect.

Required SQL:
utils/sql/svn/1755_required_sql_fear_resist_aas.sql

==12/01/2010==
Caryatis: Fix for Reflect Spells and Healing Adept AAs
Caryatis: Showstats has been updated.

Required SQL:
utils/sql/svn/1754_required_sql_healing_adept_aa_fix.sql

Optional SQL:
utils/sql/svn/1753_optional_haste_cap_rule.sql

==11/30/2010==
Trevius: SoF+ - Stacked Potions will no longer show a factor of how many you have remaining in the potion belt.
Trevius: Increased the max spell ID allowed in the spell book from 20000 to 50000.
Derision: Underfoot. Corrected PP for LDoN points, Tribute and Leadership AA.  Corrected offset comments/unknown names.

==11/27/2010==
Derision: Renamed Live patch to Underfoot.
Derision: Added basic support for current live patch (HoT).
Caryatis: Reverted Bot changes due to crash issues
Caryatis: Reverted physical resist changes until we can find a more live-like solution
Caryatis: Gender Illusions are now functional
Caryatis: Implemented SE_Twinproc and Reflect spells

Note:

HoT support is limited to being able to enter a zone with spawns and items.
Combat, spells, moving items around, basically anything other than zoning, spawns, initial inventory load and movement will NOT work.
Note ZoneUnavailable is not implemented, so let at least one dynamic zone finish booting before attempting to enter.
This support is mainly to allow people to admire HoT zones, full playable HoT support is not planned at this time.

Optional SQL for zone and zonepoint table (thanks to robregen for the collects):

utils/sql/svn/1747_optional_HoT_zone_and_zonepoints.sql

For spawns etc, go to the PEQ logs repo for data collected by robregen.

Optional SQL:

utils/sql/svn/1750_optional_sql_reflect_rule.sql

==11/24/2010==
Trevius: The Rule, NPC:ReturnNonQuestNoDropItems, will now also return items that have been Attuned to a character as well as normal NO DROP items if set to true.
Trevius: Fixed an issue with tradeskill auto-combines.
Caryatis: Fix for SpellResistChance, Hit-limited focus effects(eg Gift of Mana) & SpellDamageShield(no longer will trigger on beneficial spells).
Caryatis: Showstats window will not show mana fields if the class does not use mana(to preserve the already shaky alignment).
Caryatis: (bad_captain) Removed the level bonus granted to standing mana regen, it was not like live and diminished the need to sit or use a horse considerably.
Caryatis: (bad_captain) Bots have been updated, see forums for complete details(new command: #bot showstats).
Caryatis: (Secrets) Haste values can exceed 127%(ie Can o' Whoop Ass).

Optional SQL:
utils/sql/svn/1746_optional_sql_bot_manaregen

==11/22/2010==
JJ: Updated waypoint handling to properly account for aggro and quest engagements. NPCs will no longer skip waypoints when distracted from their grid path when resuming wandering.

==11/21/2010==
Caryatis: Implemented SE_SkillDamageAmount & SE_Amnesia(silence vs disciplines), SE_CripplingBlow
Caryatis: Updated Silence so that is no longer prevents the use of disciplines(like live)

==11/20/2010==
Caryatis: Fix for discs being resisted too much, beneficial spells and resurrection effects will no longer be resistable.
Caryatis: Fix for CriticalHitChance being calculated incorrectly, leading to massively increased crit rates.
Caryatis: Fix for Healrate effect
Caryatis: Implemented ManaAbsorbPercentDamage, ReduceSkillTimer, HpToMana and LimitSpellGroup effects.
Caryatis: Updated DamageModifier effect to be more robust.

Required SQL:
utils/sql/svn/1737_required_sql_rule_and_aa_update

Optional SQL:
utils/sql/svn/1736_optional_sql_feral_swipe

==11/14/2010==
Derision: Underfoot: Buff removal should now work correctly.
Derision: Underfoot: Fixed Pet Buff window.
Trevius: Fixed quest::setnextinchpevent().
Trevius: Added Player EVENT_GROUP_CHANGE that exports variables $grouped and $raided when changes in group or raid status are made
Trevius: Added Perl Client MarkCompassLoc(x, y, z) and ClearCompassMark().
Trevius: Minor rewrite to EVENT_HP again to use less variables.

==11/13/2010==
Derision: Corrected OP_Track for Underfoot/June 8 2010 Client.
Derision: Corrected FindPersonRequest_Struct for Underfoot/June 8 2010 Client.
Derision: Buying AAs seems to work better now for Underfoot/June 8 2010 Client.
Derision: Most Pet commands should now work for Underfoot/June 8 2010 Client.
Caryatis: Corruption resist is now fully functional
Caryatis: Showstats has been updated.
Caryatis: Implemented SpellOnKill and CriticalDamageMob effects.
Caryatis: Fix for CriticalSpellChance

Required SQL:
utils/sql/svn/1723_required_sql_corruption.sql

Optional SQL:
utils/sql/svn/1723_optional_sql_new_stats_window_rule.sql

==11/12/2010
Caryatis: Implemented CriticalSpellChance, SpellCritChance, SpellcritDmgIncrease, CriticalHealChance, CriticalHealOverTime, CriticalDoTChance, SpellResistChance.
Caryatis: Migrated some AAs to the bonus system
Caryatis: Fading Memories is fixed(uses mana, cant use without mana, makes you invis and can use while singing.)
Caryatis: Support for new types of AAs: Expendable, Quest, Racial/Bloodlines.
Caryatis: New client object: IncrementAA(skill_id) and GetAALevel(skill_id)

Required SQL:
utils/sql/svn/1720_required_sql_AA_effects_update.sql

Optional SQL:
utils/sql/svn/1720_optional_sql_AAs.sql

==11/10/2010==
Caryatis: Added support for HealAmt, SpellDmg, Clairvoyance, DS Mitigation, SE_SpellDamageShield, SE_SpellDamage
Caryatis: Heroics fully supported now(points in brackets are how many Heroics to achieve a gain)
Caryatis: hInt = For int-based casters, increases mana pool, mana regen(25), and the maximum amount of mana regen a character can have(25).
Caryatis: hWis = For wis-based casters, increases mana pool, mana regen(25), and the maximum amount of mana regen a character can have(25).
Caryatis: hStr = Increases endurance pool, endurance regen(25), and the maximum amount of endurance regen a character can have(25). Also increases damage done by melee attacks(10) and improves the bonus granted to armor class while using a shield(2).
Caryatis: hSta = Increases hit point pool, hit point regen(25), and the maximum amount of hit point regen a character can have(25). Also increases endurance pool, endurance regen(25), and the maximum amount of endurance regen a character can have(25).
Caryatis: hAgi = Increases endurance pool, endurance regen(25), and the maximum amount of endurance regen a character can have(25). Also increases the chance to dodge an attack(25), grants a bonus to defense skill(10).
Caryatis: hDex = Increases endurance pool, endurance regen(25), and the maximum amount of endurance regen a character can have(25). Also increases damage done by ranged attacks(1), improves chance to successfully assassinate or headshot(10), and improves the chance to riposte, block, and parry incoming attacks(25).
Caryatis: hCha = Improves reaction rolls with some NPCs(25) and increases the amount of faction you gain or lose when faction is adjusted(5).
Caryatis: AA Focus revamped to support new effects
Caryatis: Disciplines will no longer be dispelled

Optional SQL:
utils/sql/svn/1719_optional_triggerOnCastAAs.sql

==11/09/2010==
Caryatis: Implemented MaxHPChange, SkillDmgTaken, Endurance Pool and Stun Resist.

Optional SQL:
utils/sql/svn/1717_optional_rule_bash_stun_chance.sql

==11/07/2010==
Congdar: Fixed OP_InterruptCast for newer clients(SoF, SoD, Live). You'll now see Npc's and other players cast interrupted message properly.

==11/06/2010==
Trevius: Fixed an issue with EVENT_HP that was sending $hpevent with a value of -1 in certain cases.

==11/04/2010==
Trevius: Added new Perl Client GetAAExp() quest object.
Trevius: Corrected the level based Experience quest command and task reward functionality to not affect AA Experience.

==10/30/2010==
KLS: Added NPC::AddAISpell() and NPC::RemoveAISpell() to perl NPC object.
KLS: Added field to limit AAs based on account creation time.
KLS: Implemented fade on meditate field for spells like the higher yaulp spells (it will fade just before a regen tic).
JJ: Cleaned up Win32 build locations, moved eqlaunch into build folder, and set project dependencies to guarantee build order in Windows.

==10/16/2010==
Trevius: Added optional slot_id field to Client SummonItem(item_id, charges, attune, aug1, aug2, aug3, aug4, aug5, slot_id) - Default is slot 30 (cursor).

==10/16/2010==
Trevius: Added Perl Item IsAttuned() and GetCharges() quest commands.
Trevius: Added Attune and Aug fields to Client SummonItem(item_id, charges, attune, aug1, aug2, aug3, aug4, aug5)

==10/15/2010==
Trevius: NPCs can now load a default.pl file from the /quests/zone_short_name/ of the zone they are in.

==10/14/2010==
Trevius: Added Race 502 Boats to be a controllable boat race.

==10/10/2010==
Trevius: Added Perl Client AddLevelBasedExp(exp_percentage, max_level=0) command to add experience as a percentage of the client's current level up to the max level entered.
Trevius: Level based experience percentage rewards for tasks can now be set using a negative value of the max level * 100 + experience percent (IE. -510 for 10% exp up to level 5).

==10/09/2010==
Trevius: Object model names can now use up to 32 characters.
Trevius: Zone short names can now use up to 32 characters.
Trevius: Added extra checks before AIYellForHelp call is made to prevent potential issues.
Secrets: Added Perl Client GetIP() and NPC GetMinDMG() commands.
KLS: Adjust procs: only check once per round now instead of once per hit, this will result in lower proc rates especially for dual wielding classes but this is how it should behave. Adjust your proc per minute rule up if you desire higher proc rates under this change.
KLS: Directional Cone Spells; still needs a little work as it isn't 100% accurate but it works enough that there's no point in me sitting on it.

Required SQL:
utils/sql/svn/1696_modify_zone_and_object_tables.sql

==10/03/2010==
Derision: Fixed bug in SoD+ tracking.
JJ: Removed redundant namespace usage.

==10/02/2010==
Derision: Players disconnected with the Respawn Window up will now return to bind.
Derision: Players rezzed in an instance via the Respawn Window will no longer zone.
Derision: Implemented Blocked Buffs.
Derision: Fixed Blocked Buff spam every time you zone.
Derision: Implemented OP_ClearBlockedBuffs.

==09/29/2010==
Derision: Fixed crash in combat logging when a player was DoTted, zoned and then died from the DoT.
Derision: Spells should no longer land on players with the Respawn Window up (e.g. AE DoTs, Evac spells).
Derision: The client should now ummem spells on death when the Respawn Window is in use.

==09/26/2010==
WildcardX: Updated bots.sql to catch a couple database object changes that affected bots over the last months.

==09/25/2010==
Derision: Only one Rez confirmation box is allowed to be up at a time (per character).
Derision: Enabled Respawn Window for SoF and later clients. Rule disabled by default.
Derision: Respawn Window only pops-up if a corpse is left (so #gm off to test it).

Optional SQL (and to enable it):

utils/sql/svn/1672_optional_rules_respawn_window.sql

==09/24/2010==
Congdar: Remove obsolete bot code, fix compile warning

==09/23/2010==
Congdar: Bots can now equip multi slot items in the desired slot. The first available empty slot will get the item.
Congdar: Bots now check Lore and Dual Wield with the new multi slot item code.

==09/13/2010==
JJ: Fix to prevent NPCs using death animation from facing target during EVENT_SAY and EVENT_ITEM
Derision: Fix for missing tradeskill objects etc in SoF and later clients.
Derision: Reverted stun resist changes.

==09/12/2010==
Derision: /guildstatus now works for SoD and UF.
Caryatis: Spells with a Melee Lifetap effect now cap the heal at the percentage specified in the spell data.
Caryatis: Work on stun resists.
Vanicae: Fix for potential world crash in online guild-member processing.

==09/11/2010==
Vanicae: Fix for guild management window updates
wheeljack: Fix for missing tradeskill favorites
Vanicae: Tribute Focus, SE_DivineSave, SE_Flurry, SE_Accuracy
wheeljack: Fix for losing items in world containers
pfyon: quest::createBot()
Derision: None potions that are potion belt enabled (mod rods etc) should now work from the potion belt when they are inside a bag.
Derision: Recast timers should now be honoured for clicky items with a single charge (e.g. Modulating Rod).
gaeorn: more fixes for newer gcc/glib

==09/08/2010==
gaeorn: fixes for new stricter version of gcc/glib

==09/08/2010==
JJ: ChannelMessageSend in Client now cleans the "from" name to allow NPCs to be used as the message sender.

==09/06/2010==
Trevius: Added to Perl Mob: SetSlotTint(material_slot, red_tint, green_tint, blue_tint).
Trevius: Added to Perl Mob: WearChange(material_slot, texture, color).
Trevius: Added to Perl Mob: GetArmorTint(material_slot).
Trevius: Changed EVENT_COMBAT to now export the normal client variables when combat state changes to 1.

==08/28/2010==
Derision: Fixed potential buffer overrun in item_struct. NOTE: Linux users may have to increase shmmax.
Trevius: Added to Perl Mob: SetGlobal(varname, newvalue, options, duration, other=NULL).
Trevius: Added to Perl Mob: TarGlobal(varname, value, duration, npcid, charid, zoneid).
Trevius: Added to Perl Mob: DelGlobal(varname).

==08/26/2010==
Trevius: Added new Perl Mob quest object GetItemStat(itemid, stat).
Trevius: Added new Perl Client quest object NPCSpawn(target_npc, option, respawntime=1200) to do create, add, update, remove, and deletes just like #npcspawn.
Trevius: Fixed a potential crash while augmenting items.
Trevius: Fixed a crash caused by using tradeskill container objects created with the CreateGroundObjectFromModel() quest command.
Trevius: Added an optional decay time setting for quest::creategroundobjectfrommodel(modelname, x, y, z, heading, [type], [decay_time]).
Trevius: Decay time is now optional for quest::creategroundobject(itemid, x, y, z, heading, [decaytime]) (default is not to decay at all).

==08/25/2010==
JJ: Updated PP comments/unknowns to match size changes over time

==08/24/2010==
gaeorn: mana updates for group should be sent to SoD clients when in raid now

==08/23/2010==
Trevius: EVENT_TARGET_CHANGE now also works for player scripts.
Trevius: Added new EVENT_ITEM_CLICK for SoF+ clients.  File naming format is: /quests/items/script_<scriptfileid>.pl (I.E. /quests/items/script_12345.pl)
Trevius: Effect Name overrides (SoF+) for the following item table fields: clickname, procname, wornname, focusname, or scrollname.
Trevius: Added to Perl Object: SetEntityVariable(id, var), EntityVariableExists(id), and GetEntityVariable(id).
Trevius: Added Rule UseRaceClassExpBonuses to allow choosing whether to use the Racial and Class Experience Bonuses (Default: True).

OPTIONAL SQL:
utils/sql/svn/1625_optional_rule_class_race_exp_bonus.sql

==08/15/2010==
Derision: Fixed crash when a mob died to a DoT in a zone where buff timers are suspended.

==08/14/2010==
Derision: Spells/Songs with a Locate Corpse effect now work in SoD and later clients.
Derision: Spells/Songs with a Sense Undead/Summoned/Animal effect now work in SoD and later clients.
Trevius: Exported Perl Mob SetCurrentWP(waypoint), Perl NPC SetSaveWaypoint(waypoint), and Perl Client GetTotalSecondsPlayed().
Trevius: Changed grid from int32 to sint32 since grid pausing requires negative values.

==08/13/2010==
Derision: Elemental Draw should now work for SoD.

==08/08/2010==
Derision: Added check for invalid neighbour nodes on loading .path files.
wheeljack: Fixed Bazaar search for items with focus effects.
wheeljack: Buff Timer Suspension.
wheeljack: Tradeskill messages for missing components.

REQUIRED SQL:

ALTER TABLE zone ADD suspendbuffs tinyint(1) unsigned NOT NULL DEFAULT 0;
UPDATE zone SET suspendbuffs = 1 WHERE short_name IN ('guildlobby', 'guildhall');

==08/01/2010==
Trevius: Exported the following to Perl Mob: GetWaypointX(), GetWaypointY(), GetWaypointZ(), GetWaypointH(), GetWaypointPause(), and GetWaypointID().

==07/27/2010==
Trevius: Exported SpellFinished(spell_id, spell_target = this, mana_cost = 0) to Perl Mob.

==07/26/2010==
Trevius: (Secrets) Added quest::creategroundobjectfrommodel(modelname, x, y, z, heading, [type]) command.
Trevius: (Secrets) quest::creategroundobject(itemid, x, y, z, heading) now returns object ID.
Trevius: (Secrets) Added Object List Iteration functions GetObjectByDBID(id), GetObjectByID(id), GetObjectList().
Trevius: (Secrets) exported Objects to Perl with the following commands:
		IsGroundSpawn(), Close(), Delete(reset_state=false), StartDecay(), DeleteItem(index), IsObject(),
		Save(), SetID(set_id), ClearUser(), DBID(), GetID(), GetX(), GetY(), GetZ(), GetHeading(), VarSave(),
		GetType(), SetType(type), GetIcon(), SetIcon(icon), GetItemID(), SetItemID(itemid), SetLocation(x, y, z),
		SetX(XPos), SetY(YPos), SetZ(ZPos), SetHeading(heading), SetModelName(name), GetModelName(), Repop(), Depop().

==07/25/2010==
Trevius: (Caryatis) Added the following Spell Effects:
		SE_SympatheticProc, SE_ImprovedSpellEffect, SE_SpellVulnerability, SE_SpellTrigger
		SE_InterruptCasting, SE_CastOnWearoff, SE_ApplyEffect, SE_BossSpellTrigger, SE_Twincast
		SE_HealRate, SE_SkillDamageTaken, SE_EffectOnFade, SE_MaxHPChange, and SE_EndurancePool.

==07/19/2010==
gaeorn: fix for foraging

==07/17/2010==
JJ: Added events for tradeskill failure and success.
JJ: Added quest flag for tradeskills to be handled by perl. Required SQL in the utils folder.

==07/14/2010==
Trevius: Hopefully fixed the issue for SoF+ clients alcohol consumption causing item loss.

==07/13/2010==
Derision: Azone2 - Fixed crash processing fungalforest and possibly other Underfoot V4 .eqg zones.
Derision: Azone2 - Culled placeable shrooms to reduce fungalforest .map from ~80 to ~20MB.

==07/11/2010==
Trevius: Live - Environmental damage is now functional on this client.

==07/08/2010==
gaeorn: fixed confusing and likely flawed logic in GetZoneForage()

==07/06/2010==
Trevius: Fix to prevent a potential item loss bug.
Trevius: Fix for Nimbus Particle Effects to make them appear properly.
JJ: Added $oncursor as an export to the parser.
JJ: Added ability for NPCs to use heading in waypoint table. Added option to use heading when adding waypoints in game (-h switch). NPCs will use in-stride heading if the default heading (-1) is used. Optional SQL included in the utils folder.

==06/24/2010==
Trevius: EVENT_CLICKDOOR should now always show the correct door ID from the $doorid export.
Trevius: Doors with IDs higher than 126 should now work.
Trevius: Added perm_effect and client fields to SpellEffect(effect, [duration, finish_delay, zone_wide, unk20, perm_effect, client]).

==06/23/2010==
KLS: Instances can use spawn conditions now, requires SQL change in required sql folder.  Also updating will wipe all current spawn condition variables so you'll want to make sure they're set in the new table. (ps instance_id=0 for base zones!)
KLS: Added expedition expire warning to dynamic zones that aren't LDoNs, requires conf change for SoF/SoD.

==06/22/2010==
gaeorn: replaced calls to rand() with calls to MakeRandomInt()

==06/20/2010==
KLS: Added command #maxskills to max your skills instead of having to #setskill everything for testing.
KLS: Implemented partial melee and spell runes.
KLS: Right click tome learning in sof/sod.
KLS: Adjusted AC; should now be more sensitive to changes in gear as well as implemented softcaps.

==06/19/2010==
Trevius: Stopped NPCs from sending an appearance packet for each WP they arrive at or depart from.

==06/18/2010==
Trevius: Nimbus particle effects now show correctly from spells/clickies.
Trevius: Removed the ability to stack the same Nimbus particle effect repeatedly.
Trevius: Existing Nimbus particle effects are now sent to players as they zone in.
Trevius: EVENT_SPAWN should work better for more quest commands now.  Please report any bugs/issues with this change.
Trevius: SoF/SoD/Live - Stand state appearances are now set in the spawn struct.

REQUIRED SQL:
utils/sql/svn/1548_nimbuseffect_required.sql

==06/16/2010==
gaeorn: fixed possible bug with unlocking cursed containers in LDoN
Trevius: SoF/SoD/Live - Corrected the item structures to allow summonedflag setting to show on items.
Trevius: SoD/Live - Identified Clairvoyance and added it to load from the DB to be shown on items.
Trevius: SoD - Possible fix for empty corpse looting bugging clients.
gaeorn: fixed another issue with the integer transformation for the RNG where it was not converting from a double float properly

==06/15/2010==
Secrets: Characters with HPs higher than 30k will no longer be set back to 30k current health when zoning.
gaeorn: fixed integer transformation for RNG as it previously would only return the high value of the low to high range if the RNG returned exactly 0xffffffff
Trevius: The following item fields now load from the database: EliteMaterial LDoNSellBackRate ScriptFileID ExpendableArrow QuestItemFlag.
Trevius: Identified some unknown fields in the database from 13th floor findings, and removed multiple unused fields.
Trevius: The summonedflag field is copied from UNK109 field.

REQUIRED SQL:
utils/sql/svn/1542_items_table_cleanup.sql

==06/10/2010==
gaeorn: modified method of transforming RNG output into a range of integers. this should improve the equalization of the distribution of the returned random numbers

==06/09/2010==
Trevius: Added new Perl Mob quest object SpellEffect(effect, [duration, finish_delay, zone_wide, unk20, unk26]) for sending a spell paticle effects without casting a spell.
gaeorn: replaced random number generator with the first one on this page: http://www3.ocn.ne.jp/~harase/megenerators.html

==06/08/2010==
Trevius: Added new quest::resettaskactivity(task, activity) command for resetting a task activity done count to 0.

==06/07/2010==
gaeorn: compile fixes for linux
KLS: Added EVENT_SPELL_EFFECT_TRANSLOCATE_COMPLETE, EVENT_SPELL_EFFECT_BUFF_TIC_CLIENT, EVENT_SPELL_EFFECT_BUFF_TIC_NPC in the similar style of the other spell effect events.

==06/06/2010==
KLS: Added spell quests. Spell quests reside in {EQEMU_DIR}/quests/spells/ and are in the format of {spell_id}.pl.  (ex: C:/eqemu/quests/spells/15.pl for greater heal)
KLS: Spell quests allow the overriding of specific spell effect. If a spell quest and sub exists then a spell's effect aside from buff duration and knockback is not used and instead the script is executed.
KLS: Two acceptable subs for spell quests: EVENT_SPELL_EFFECT_CLIENT and EVENT_SPELL_EFFECT_NPC and has a special export of $caster_id.

==06/04/2010=
Trevius: Fixed a potential crash with pick pocket.

==06/02/2010=
KLS: Revert titanium hp boost.
KLS: Random 10 grid type(1) will actually return the 10 closest in 3d space not the 10 closest on the grid list.
KLS: Added new grid type(5): Random 5 with LOS.
Trevius: Added new command #tempname <newname>, to allow temporarily renaming NPCs and Clients.  Name resets on repop or zoning.

RECOMMENDED SQL:
utils/sql/svn/1519_zone_primary_key_id.sql

==06/01/2010=
Trevius: Added new Perl Mob quest object TempName(name) to allow changing a name temporarily.  Setting no name will return the name to the original name.

==05/31/2010=
Derision: Increased the name field in the internal Ground_Spawn struct from 16 to 20 characters to cater for ground_spawns that are longer than 15 characters.

==05/27/2010==
Trevius: Unreverted the revert from R1502 and added a fix for the tradeskill container combine issue.
Trevius: Fixed a crash when using NukeItem on the Power Source slot for a Titanium client.

==05/25/2010==
KLS: Many changes..
KLS: Rewrote much of the adventure subsystem; moved from zone based calculations to world based.
KLS: Implemented adventure leaderboard (sort by # kills only)
KLS: Custom merchant (Adventure/PvP/Discord) purchases should attempt to put the item in a player's inventory before the cursor.
KLS: Corpses should move to an adventure GY if possible on the end of an adventure.
KLS: Adventures should always award points to zoning/offline players when they reconnect now.
KLS: Collect adventures will populate the zone with enough dropped items always automatically now, relying on drop rates is now out of the picture.
KLS: Mech. treasure chests will now be affectable by spells and destroyable; at least until we figure out the spawn structure on SoF and beyond to enable them correctly with rogue skills.
KLS: Addressed an issue that made chests slightly harder to open than they were intended to be.
KLS: Addressed a few issues with raids not being duplicated along with groups in the code. This should be apparent in the spell code.
KLS: Added a default ruleset to the zone table and added a version to the zone table.  Version will default to 0 if non is found (base zone).
KLS: OP_MoveItem will ignore requests from a slot to the same slot.
KLS: Lowered the quick loot timer significantly, hopefully loot all works better.
KLS: Several memory leak and exploit fixes.
KLS: This could all probably use a bit more testing that I was able to give it as one person, I believe I got most if not all the crash bugs though!

==05/22/2010==
Trevius: Exported ModifyNPCStat(identifier, newValue) to Perl NPC.
Trevius: Added a check for destroying items to ensure the source slot is the cursor.
Trevius: Moved the SwapItem() check to verify the source and destination slots are both valid before doing anything else.
Trevius: The client will now be updated to delete an item if the server does not see an item in that slot while moving items around.

==05/20/2010==
Trevius: Added new Perl Mob quest object CameraEffect(duration, intensity, singleclient).  Duration is in ms, intensity is from 0 to 10, and singleclient can be set to a client.

==05/18/2010==
Trevius: Live - Corrected the end of the Item Structure.

==05/17/2010==
Trevius: Live - Updated more Live Opcodes.  The list should be about 95%+ accurate now.  Live Client is very playable now.
Trevius: Increased the race max to 667 for #race and #fixmob race to match Live's current race count.

==05/14/2010==
Trevius: Added new Perl Mob quest object QuestReward(client, silver, gold, platinum) that awards money to the client and makes the quest completed sound.
Trevius: Added 2 new optional fields to Perl Client quest object MaxSkill(skillid, [class, level]).
Trevius: Minor corrections for SetSkill(skill_num, value) and AddSkill(skillid, value) to set skill values to int16 instead of int8.

==05/13/2010==
Trevius: Live - Updated Player Profile and Spell Buff Structs to allow the May 12th Live patched client to enter the game.
Trevius: Live - Updated about 50% of the opcodes so most basic stuff should be functional.
Derision: Live - Encoded OP_GroundSpawn plus updated OP_ClickObject/OP_ClickObjectAction.
Derision: Added Live to the list of clients reported by #cvs.

==05/12/2010==
Trevius: SoD - Coin no longer adds weight for this client server-side, since the client itself no longer adds coin weight
Trevius: SoD - Heroic Stats should now add the correct amount of HP/Endurance/Mana to match the client in most cases.
Trevius: The scribespell and traindisc commands and quest commands should sort Disciplines properly once again.

==05/11/2010==
Derision: Guild invitations to a player already in receipt of an invitation will now be rejected.
Derision: Fixed quest::pvp("off")
gaeorn: fixed a couple issues with the login server code.

==05/10/2010==
Trevius: SoD - Heroic Stats/Resists now increase the cap server-side as they should.

==05/09/2010==
Derision: Live - Added an encode for OP_ChannelMessage
Derision: Live - Encoded OP_GuildsList and corrected OP_GuildUpdateURLAndChannel.
Derision: Live - Door and Group OPCodes. Set OP_GroundSpawn=0x00000 until an encode can be done for it (was causing crashes, particularly in PoK).

==05/08/2010==
Derision: Guild Bank fix.
Trevius(Derision): Added special handling for certain types of opcodes to correct an issue on the Live client.
Trevius: SoF/SoD - Type 5 clicky items can no longer be used if the character does not meet the race/class requirements of the item.
Trevius: Live - Can now log into the game with new character fine, but some existing characters cause zoning loops.
Derision: Live - Added a Decode for OP_ChannelMessage
Derision: Live - Corrected OP_Camp, OP_MoveItem and OP_ItemPacket.
Derision: Live - Corrected: OP_SetChatServer2, OP_MemorizeSpell, OP_CastSpell, OP_Death, OP_Animation, OP_SenseHeading
Derision: Live - Corrected: OP_Damage, OP_TargetCommand, OP_MobHealth, OP_DeleteSpawn, OP_AutoAttack, OP_AutoAttack2
Derision: Live - Corrected: OP_SaveOnZoneReq, OP_Track, OP_TrackTarget (Tracking messages not yet working, probably due to Filter opcode).
Derision: Live - LogServer_Struct.
Derision: Live - Corrected OP_FormattedMessage and padded out ServerFilter_Struc to match live. OP_WhoAllResponse.

==05/05/2010==
Trevius(Derision): Fixed a potential crash related to Saylinks and Antispam code.
Trevius: Live - Initial update to the Live patch files.  Can only get to a blank character select at this point.

==05/04/2010==
Trevius: SoF/SoD - Resolved an issue that was preventing some AAs from being able to be trained properly.
Derision: Updating a character's Alt or Banker flag no longer resends the entire guild member list.
joligario: quest::givecash cleaned up.
Congdar: SoF: Fix starting city for freeport characters.

==05/03/2010==
Derision: The facility to flag 'Alts' in the Guild Management Window now works for those clients that support it.
Derision: The facility to specify a Guild chat channel and URL now work for those clients that support it.
Derision: SoD - Item links for Task rewards now display correctly in the task window.

REQUIRED SQL:
utils/sql/svn/1451_guilds.sql

==05/02/2010==
Derision: The Guild Management Window should now reflect the true online status and zone of members at all times.
Derision: Added a command, #cvs (Client Version Summary) to display connected client version counts.

OPTIONAL SQL:
utils/sql/svn/1450_cvs.sql

==05/01/2010==
Trevius: Added new Perl NPC quest object GetSwarmTarget() to get the ID of a swarm pet's set target.
Trevius: Added new Perl NPC quest object SetSwarmTarget(target_id) to set the ID of a swarm pet's target.
Derision: Group member locations are now always updated in entity_list.SendPositionUpdates (for SoD group member location on map).
Derision: Certain detrimental spells will still allow the player to enter a rested state.

REQUIRED SQL:
utils/sql/svn/1446_allowrest_required.sql

OPTIONAL SQL: (Read the comments in it before executing)
utils/sql/svn/1446_allowrest_optional.sql


==04/30/2010==
Trevius: Fixed a bug that would cause clients in an existing trade to get bugged if another client tried to trade with them during their existing trade.
Trevius: Added new Perl Mob quest object MakeTempPet(spell_id, [name=NULL, duration=0, target=NULL]).
Trevius: Added new Perl NPC quest object GetSwarmOwner() to get the ID of a swarm pet's owner.
Trevius: Hide will now break if you move when not sneaking, even if you have invisibility on.
Derision: Fixed bug in Guild Bank.
gaeorn: reverted my change from 4/24 as it did not work.

==04/29/2010==
gaeorn: fixed tables to avoid login server hang if ServerTagDescription in tblWorldServerRegistration is null

Optional SQL: utils/sql/svn/1436_login_server_table_fix.sql

==04/28/2010==
Trevius: Attempting to trade with a player who is already in a trade will now give the "I'm busy right now" message for all clients.
Derision: Applied slot conversion so Apply Poison should now work in SoF.
gaeorn: login server now creates db entries for unregistered servers to keep same id across sessions
Derision: Fixed a cash amount display bug when the two participants in a Barter transaction are using different clients.

==04/27/2010==
Trevius: SoD/SoF - Clicky items with charges can no longer be cast if they have 0 charges left.
Secrets: Mana can now exceed 32k without rolling over to 0.

==04/26/2010==
Trevius: SoD/SoF - Failing a clicky item cast in certain scenarios should no longer cause the client to get bugged where the spells won't refresh.
Trevius: SoD/SoF - Cast bars from clicky items now use the cast time from the item, not from the spell.
Trevius: SoD - Potions in the potion belt can now be used even if they are inside bags.

==04/25/2010==
Derision: Fixed azone2 to handle missing model files (no longer crashes on oldfieldofbone.eqg)

==04/24/2010==
gaeorn: possible fix for long standing reconnect to login server problem if login server connection is down for an extended period of time.
Trevius: SoD - Added AA support for Harm Touch and Lay on Hands to replace the innate skills of the PAL/SK classes.

Optional SQL: utils/sql/svn/1410_optional_sod_aas_ht_and_loh.sql

==04/23/2010==
cavedude: Added Drakking to faction_list, updated wolf form and Skeleton.

REQUIRED SQL:
ALTER TABLE `faction_list` ADD COLUMN `mod_r42` smallint(6) NOT NULL default '0' AFTER `mod_r14`;
ALTER TABLE `faction_list` ADD COLUMN `mod_r367` smallint(6) NOT NULL default '0' AFTER `mod_r330`;
ALTER TABLE `faction_list` ADD COLUMN `mod_r522` smallint(6) NOT NULL default '0' AFTER `mod_r367`;
UPDATE faction_list SET mod_r367 = mod_r60;
UPDATE faction_list SET mod_r42 = mod_r120;
ALTER TABLE `faction_list` DROP COLUMN `mod_r60`;
ALTER TABLE `faction_list` DROP COLUMN `mod_r120`;

==04/22/2010==
Trevius: Added the following to Client Perl; GetEndurance(), GetMaxEndurance(), GetEnduranceRatio(), SetEndurance(amount).
Trevius: SoD - Size fix for player races.
Trevius: SoD - Manual consumption of food/drink works and deletes the consumed item.
Trevius: SoD - Consumption of alcohol now gives a chance for skilling up tolerance and also deletes the consumed item.

==04/21/2010==
Trevius: SoD - The Mana and Endurance formulas are as close as I can get them for now.
Trevius: SoD - NPC default size is now 6 if the database is set to 0.
Trevius: It is no longer possible for current Endurance to be higher than max Endurance.
Trevius: Corrected a mistake pointed out by Rogean that was sending an unnecessary packet when clients were moving.

==04/19/2010==
gaeorn: bug fix so login server does not send world local_ip if option local_network is not set in login.ini

==04/18/2010==
Trevius: SoD - Added HP formulas for the SoD client, and a new rule to enable them for SoD clients only.

Optional SQL: utils/sql/svn/1394_optional_rule_sod_hp_mana_end.sql

==04/17/2010==
gaeorn: fixed login server auto-reconnect
cavedude (Leere): Tradeskill recipe learning
Congdar: fix windows compile: warning C4405: 'crc32' : identifier is reserved word
Congdar: fix windows compile: warning C4554: '>>' : check operator precedence for possible error; use parentheses to clarify precedence
Congdar: fix windows compile: warning C4800: 'char *' : forcing value to bool 'true' or 'false' (performance warning)

Required SQL: utils/sql/svn/1392_recipe_learning.sql

==04/16/2010==
KLS: (Leere) Melody Fix.
KLS: Other merges from spell branch, some more to come.  Tell me if there are any crashes I only tested it for about 25 minutes.

==04/15/2010==
cavedude (Leere): Increased the number of tradeskill favorites that can be stored client side to 500.
cavedude (Leere): Fixed avgcoin.
cavedude (renoofturks): Fixes to SK harm touch.
cavedude: Lowered snare movement speed when fleeing to 41% or higher to allow "Snare" to prevent movement at all levels.
gaeorn: multiple login server support in world. protocol to update login server account information from within game. "trusted" field for world accounts in loginserver to limit where account updates can come from. in eqemu_config.xml, use <loginserver1></loginserver1> to specify first of multiple login servers. increment the number to specify additional login servers. NOTE: be sure to replace the <loginserver></loginserver> entry or you will be limited to just one login server. MULTIPLE LOGIN SERVERS WILL NOT WORK WITH MINILOGIN.

Required SQL for loginserver tables:
alter table tblWorldServerRegistration add ServerTrusted integer NOT NULL after ServerAdminID;

==04/12/2010==
Derision: SoD - /who <name>, /whotarget now work.
Derision: Corpses summoned in Shadowrest should no longer decay before you can finish looting them.

==04/11/2010==
Derision: SoD - Corpses should now vanish instantly rather than decay when using /hidecorpse.
Derision: SoD - Players can now see other players buffs in their target window.
Derision: SoD - Tracking - Player filter now works.
Trevius: SoD - Added Primary/Secondary weapon textures into the spawn struct for non-playable races.

==04/10/2010==
Trevius: SoD - Identified showhelm in the spawn struct.
Trevius: SoD - Corrected Face in the Player Profile.  Frogloks and Vah Shir now show matching head and body correctly.
Trevius: SoD - Added Mana and Endurance update packets for clients.

==04/08/2010==
Derision: SoD - Tracking Auto-refresh should no longer fail with Recovery timer not met.
Derision: SoD - Previously memmed spells are now unmemmed when loading a spell set.
Derision: SoD - Added Slot conversion to ApplyPoison_Struct (Apply poison should work as well as Titanium).
Derision: AllButSoD - Fixed bug in Barter code.

==04/06/2010==
Derision: SoD - Players may now be tracked and fixed a bug where tracking would not work when switching tracking targets without cancelling tracking.
Derision: SoD - Initial work on /hidecorpse serverside support. All but /hidecorpse looted should work.

==04/05/2010==
Derision: SoD - Loot All now works.

==04/04/2010==
Derision: SoD - Group member (client or bot) mana and endurance should update correctly in the group window.
Derision: SoD - Altered SpawnStruct encode to send colors for all playable races (including corpses and NPCs).
Derision: SoD - Group Main Assist may be assigned via the Group Window. As the group leader cannot explicitly assign it to himself, use /grouproles set <leadername> 2
Leere:	A moving mob that becomes mezzed will no longer appear to continue moving.
Fourier: Added location to the output of #listnpc.

==04/03/2010==
Trevius: SoF/SoD - Total Spent AA Points now show correctly for these 2 clients.
Trevius: Froglok characters now default to size 5 instead of 7.  This corrects size issues when using illusions.
Derision: SoD - Bazaar Trader Mode/Bazaar Search should now work correctly.
Derision: SoD - Found the helm field in the spawn struct.
Derision: SoD - Implemented new packets for sending the list of findable NPCs to the client.
Derision: SoD - Flymode and Titles in the spawn struct.

==04/02/2010==
Derision: SoD - Group Leadership AA should mostly work (Main Assist is no longer a GLAA and Health Awareness seems intermittent).
joligario: Pet behavious change.
Trevius: SoF/SoD - Added clicky item checks to match previous clients. All clicky item hacker entries should now be actual hack attempts.
Trevius: Added an extra hacker check for clicking a must equip effect without having it equipped.
Trevius: SoD - Removed the opcodes for the Pet Buff Window until the structure is updated.  Prevents pet classes from crashing when pets are buffed.
Derision: SoD - Pet Buff Window now works.
Derision: SoD - Fixed OnLevelMessage struct (popup windows).
Derision: SoD - Fixed Barter mode.
Congdar: (Taurinus) Drakkin bots

==04/01/2010==
Derision: SoD - Tracking
Derision: SoD - Fixed price bug when buying from merchants.
Trevius: SoD - Spell books now display all scribed spells (was previously hiding the first 9 slots).
Trevius: SoD - Stopped the Barter error that was reporting when logging in due to an incorrect opcode.

==03/31/2010==
Derision: SoD - Groups should be as functional as previous clients, except Group Leadership AA doesn't work.
Derision: SoD - Fixed items being incorrectly flagged as No Trade/Copied

==03/30/2010==
Trevius: SoD - Corrected the opcode for Mob Health Updates so they update properly.
Trevius: SoD - Added a few new Opcodes and Structures for SoD packets that aren't used yet.


==03/28/2010==

Derision: SoD - Fixed client animation/runspeed glitch.
Derision: All Clients - Player position updates to other players should be more accurate.
Trevius: Updated #race and #fixmob commands to allow up to race 626 which is the total for the SoD client.
Derision: SoD - Very preliminary work on groups. You can form a group, but nothing else.

==03/27/2010==
Trevius: SoD - A couple more Opcode updates.
Trevius: SoD - Some group structures work, but grouping is still not functional.
Derision: SoD - Fixed random client crashes due to spawn packets and invisible mobs should now be invisible.
Derision: SoD - Did a basic Encode on OP_WhoAllResponse. Still needs work for various flags (LD/Trader/Buyer) etc.


==03/26/2010==
Trevius: SoD - Finished updated Opcodes and they should now be caught up with what we have in SoF.
Trevius: SoD - Updated Item Struct and now 1 inventory item can load correctly.
Trevius: SoD - Updated Position Update packet structures.
Trevius: SoD - Character Inventory now fully loads.
Trevius: SoD - AAs now load and appear to function properly.
Derision: SoD - Spawns work, sometimes. Client will crash randomly sometimes when receiving spawns
Derision: SoD - Added SoD.cpp to .vcproj files
Derision: SoD - Found showname field in Spawn Struct.
Derision: SoD - Identified equip_chest2 field in Spawn Struct.
Trevius: SoD - Looting now works.
Trevius: SoD - Commands that display item links now show links correctly.

==03/25/2010==
Trevius: SoD - Updated PlayerProfile_Struct and CharacterSelectEntry_Struct
Trevius: SoD - Updated Spawn_Struct and the encode (hackish for now), but can get in game with it!

==03/24/2010==
Trevius: SoD - Updated the NewZone struct and encode

==03/23/2010==
Trevius: SoD - Initial addition of the Seeds of Destruction patch files.  Note: The SoD Client is not functional at all yet, but work has begun!

==03/22/2010==
Derision: Implemented the Guild Bank.

REQUIRED SQL: utils/sql/svn/1293_guild_bank.sql

==03/20/2010==
cavedude: Added $client->UpdateGroupAAs(), exported GetGroupPoints() and GetRaidPoints() to Perl.

==03/19/2010==
cavedude: Added $client->GetLDoNPointsTheme() Perl function.
Trevius: Added new EVENT_TARGET_CHANGE perl event.  It triggers when an NPC target changes or is removed. It exports $hastarget which is 0 if no target and 1 if there is a target.
Trevius: Exported new quest objects to Perl Mob - SetRace(race), SetGender(gender), and SetTexture(texture).
Trevius: Exported to Perl Mob - SendIllusion(race,[gender,texture,helmtexture,face,hairstyle,haircolor,beard,beardcolor,drakkin_heritage,drakkin_tattoo,drakkin_details,size]).
Trevius: Added rule: Character:DeathExpLossMaxLevel - Any level greater than this will no longer lose experience.  Default is 255 (disabled).

Optional SQL: utils/sql/svn/1290_optional_exp_loss_rule.sql

==03/18/2010==
Trevius: Added 3 new Perl Entity commands - GetMobByID(id), GetNPCByID(id), and GetNPCByNPCTypeID(npc_id).
Congdar: Bots: Fixed picklock and summon corpse

==03/16/2010==
Trevius: Saylinks should no longer cause zone crashes if used outside of EVENTs.  They should function from anywhere now.

==03/13/2010==
Trevius: Added new SetFlyMode(0|1|2|3) Perl Mob command.
Trevius: NPCs in flymode 1 or 2 will no longer use BestZ when pathing to waypoints.
Trevius: Added new optional single client argument to SendAppearanceEffect(effect1, effect2, effect3, effect4, effect5, client) to allow sending the effect only to specific players.

==03/12/2010==
joligario: Fixed some spelling mistakes.

==03/11/2010==
Congdar: bots can now equip items with augments.  required sql:  \utils\sql\svn\1280_bot_augs.sql
Congdar: new bot command '#bot augmentitem' Allows you to augment items for your other bot classes. Your must have the Augmentation Sealer window filled.

==03/10/2010==
Derision: Begging should no longer bug the client. Still needs some work around chance/amount/skillups etc.

==03/07/2010==
Derision: Fix for temporary items on merchants appearing to increase in price.
Leere: Refinement to above and fix for purchase price of stacked items != displayed price * quantity.

==03/05/2010==
Trevius: Inspecting SoF players is now possible.
Derision: A mob corpse will now be left even if a Bot's pet does the most damage.

==03/03/2010==
Trevius: Added functionality to the EQEmu Web Tool to show IP information based on account searches.
Derision: Set Message Type for spells wearing off, experience and leadership messages so they aren't classed as 'Other' by the client chat filters.
Derision: Removed -fpermissive from zone/makefile so invalid type conversions should now cause an error rather than a warning for Linux compiles.

==03/01/2010==
Trevius: Added 2 new optional arguments to quest::gmsay(text, [color, send_to_world?]) - allows changing color and sending to world or just zone.
Trevius: Normal Saylinks should now work without requiring a target for proximity says.  Silent saylinks still require a target.
Trevius: Added a check for valid slots when moving items from 1 slot to another.
Trevius: NPCs using 2 Hand Pierce weapon models can be set to skill 99 in the prim_melee_type field of the npc_types table to show the correct attack animations and messages.

==02/26/2010==
Derision: Fix for crash in Mob::DetermineSpellTargets.
Congdar: fixed bot right-click inspect window title bar shows player name instead of target bot name.

==02/25/2010==
Secrets: Added new Perl::Client command, ReadBook(Book Text, Type), to allow sending a book/scroll to clients via quests.  Type 0 = scroll, type 1 = book.
Trevius: GMs with #gm on should now be able to /target NPCs across the zone again.
joligario: Fixed typo relating to Pet pursuit speed in MobAI.cpp
joligario: Manual WP Add fix.
joligario: Fixed duplicate declaration of command_wp in command.h

==02/24/2010==
Derision: SoF: TRADER/BUYER will now be displayed as appropriate in /who for SoF clients.

==02/23/2010==
Trevius: Added new Perl::Mob quest object SendAppearanceEffect(effect1, effect2, effect3, effect4, effect5) which can send up to 5 particle effects at once.
realityincarnate: spells requiring dragon/giant targets will now work on velious raid targets

==02/22/2010==
Trevius: Added 2 new fields (prim_melee_type and sec_melee_type) to the npc_types table to allow setting attack animations/messages to go with weapon models (Default is 28 - Hand to Hand)
Trevius: Added Perl Quest Objects; GetPrimSkill(), GetSecSkill(), SetPrimSkill(skill_type), SetSecSkill(skill_type) for altering the above setting temporarily.

Required SQL: utils/sql/svn/1259_npc_skill_types.sql

==02/17/2010==
Trevius: Added new quest::untraindiscs() command to untrain all disciplines
Trevius: Added Client Perl Objects UntrainDisc(slot) and UntrainDiscAll() to untrain either just 1 discipline slot or all disciplines
Trevius: Added functionality to quest::traindisc() to allow it to use the spell_globals table and system
Trevius: Added in code to prevent a zone crash related to group/raids using group recourse spells as a temporary fix until the Spells branch goes live

==02/15/2010==
Gaeorn: (iRFNA) Fixed flaw in IsPureNukeSpell() logic. Fixes bug where bots were healing enemies.
Derision: Added default value to suspendeduntil column in utils/sql/svn/1195_account_suspendeduntil.sql

==02/07/2010==
Derision: Reverted cross-zone group invites from Rev1086

==02/06/2010==
Trevius: Added an account status setting option to the database page of the EQEmu Web Tool.

==02/02/2010==
Richardo: Added options wep1 and wep2 to #npcedit to allow changing primary and secondary weapon models.

==02/01/2010==
Trevius: Renamed BoolNPCSpecAtks() to HasNPCSpecialAtk() to fit better into the proper naming format and to make more sense.
Derision: Added $client quest methods to get current PVP point and crystal counts and to award PVP points and crystals.
Derision: Mapped out the part of the player profile used for recording recent PVP kills.
Derision: Removed EVENT_WAYPOINT. Use EVENT_WAYPOINT_ARRIVE or EVENT_WAYPOINT_DEPART instead.

==01/31/2010==
Trevius: Exported new BoolNPCSpecAtks() to Perl::Mob.  This can be used to check if an NPC has certain special attacks set.
Derision: Added support for purchasing from Discord Merchant (Class 59).
Derision: Added support for purchasing from Norrath's Keepers and Dark Reign Merchants (Classes 67 and 68).
Derision: Added commands #setpvppoints <amount> and #setcrystals <radiant|ebon> <amount>
Derision: EVENT_POPUPRESPONSE is now passed to player.pl

==01/30/2010==
cybernine186: Implemented the #suspend command.

Required SQL: utils/sql/svn/1195_account_suspendeduntil.sql

==01/28/2010==
gaeorn: added EQEmuLoginServer/EQCryptoAPI.h (contents from a EQEmu forum post by KLS)

==01/28/2010==
Rabayn: Fixed reference to freed memory in Doors::HandleClick.
Derision: Anti Kill-Stealing fix.

==01/27/2010==
Trevius: Suspend Minion AA now requires level 62 or greater to use it.
Secrets: Implemented quest::voicetell(PlayerName, MacroNumber, RaceNumber, GenderNumer).

==01/26/2010==
Trevius: Exported new ProjectileAnim(mob, item_id, [IsArrow?, speed, angle, tilt, arc]) command to perl::mob.
Trevius: Added the following to perl::NPC - GetSpawnPointX(), GetSpawnPointY(), GetSpawnPointZ(), GetSpawnPointH(), GetGuardPointX(), GetGuardPointY(), and GetGuardPointZ()
Derision: Leadership abilities should now work correctly for groups with 1 Player + Bots.

==01/25/2010==
Trevius: Exported CheckLoSToLoc(x, y, z, [mob_size]) to perl::mob.
Trevius: Exported FindGroundZ(x, y, [z_offset]) to perl::mob.

==01/24/2010==
Trevius: Exported CheckLoS() to perl::mob.
Trevius: Added SoF Decode/Encode for OP_InspectAnswer.  SoF clients can now inspect Titanium clients and everything shows up properly.  SoF clients still cannot be inspected at all by either client.
Derision: Fix for armor not showing to other player's after looting your corpse.
Derision: Call of the Hero should no longer transfer aggro to the caster.
LeftRoad: Implemented /pet leader command.
Derision: Fix for item loss when going Linkdead with items in the trade window.
Derision: /getguildmotd now works.
Derision: Fixed Bazaar search filter for Endurance, Attack, HP & Mana Regen, Haste and Damage Shield.

==01/23/2010==
Trevius: Added NPC:ReturnNonQuestNoDropItems rule to enable/disable a new feature that allows all NO DROP items to be returned if turned into a non-item-quest NPC (no EVENT_ITEM).
Trevius: Removed a possible exploit with quest turn-ins.
Derision: Added check for spell target type SummonedPet (e.g. Elemental Draw).
Derision: Implemented /searchcorpse GM command.
Derision: Reset Trade Accepted state if money is added to a trade.
Derision: Shrunk/Grown players/mobs will now appear the correct size to new players entering the zone.
Derision: OP_GuildMemberList for SoF (used to populate Guild Management Window Roster.
Derision: OP_GuildDemote for SoF.
Derision: OP_GuildPublicNote for SoF.
Derision: Corrected message produced when trying to use Suspend Minion on a charmed pet.

Optional SQL: utils/sql/svn/1144_optional_rule_return_nodrop

==01/22/2010==
Trevius: Adjusted quest::wearchange(slot, texture) so it will now show the weapon slot changes to players who zone in after the change has already happened.
Derision: Implemented Secondary Forte AA.

==01/21/2010==
Trevius/Andmetal: Added new Spell Globals system.  Adding spells to the new spell_globals table with a qglobal name and value there will require characters to have the matching qglobal in the quest_globals table in order to scribe spells via the quest::scribespells command. Note: Only integers can be used for values currently.
Trevius: Added EnableSpellGlobals rule to enable/disable the new Spell Globals system.
Trevius: Minor change to how NPC loot tables are handled for selecting drops.  This should make actual drop rates a bit closer to how they are set in the database.
WildcardX: Implemented a new client animation rate to server-side speed ratio for bots to make bot movement as precise and natural looking as possible. It is possible all other Mob's could benefit from this same tuning if anyone wants to try it on their server.
WildcardX: (Frumph) Implemented a new set of #bot commands to customize bot appearances within the game!
WildcardX: (Frumph) Fixed so bot spell casters don't ghost while casting a spell with a long cast time and bot casters don't sit while a spell is being casted.
WildcardX: Fixed bot casters from doing rapidly and repeatidly going from sit to stand and back to sit during buff casting.

Required SQL: utils/sql/svn/1136_spell_globals.sql

==01/20/2010==
Trevius: Added quest::wearchange(slot, texture) to allow any slot to be changed to any texture/weapon model.  This works just like the #wc <slot>, <texture> command.
blmille2: Implemented Calliav line of spells.
Derision: Reverted flawed change to client_packet.cpp.

==01/19/2010==
WildcardX: Tweaked bot spell healing ai to improve general group healing.
WildcardX: Fixed a zone crash caused by adding an non-existent mob to a bot's hate list.
blmille2: Implemented Suspend Minion and Persistent Minion AA.
garim12: Mastery of the Past AA Ranger/Beastlord version fix.
WildcardX: Added new command, #distance to return the in game distance between you and your target.
WildcardX: Bot casters will now stay in ange to cast heals and other spells during combat.

==01/18/2010==
WildcardX: Potential bug fix for #bot camp zone crash bug. Continued work on bot animations. (thanks much to Frumph and Secrets for their assistance)
joligario: New EVENT_WAYPOINT_ARRIVE and EVENT_WAYPOINT_DEPART. The old EVENT_WAYPOINT will be removed shortly, so be sure to replace all occurences of EVENT_WAYPOINT with EVENT_WAYPOINT_DEPART in all your current scripts.
joligario: Faction values of zero are no longer written to the faction_values table.
WildcardX: Smoothed out bot melee animations. Another attempt at isolating the #bot camp zone crash bug.

==01/17/2010==
WildcardX: More bot ai refactoring that is focused on making the bot movements more smooth and accurate. Still a lingering issue when bots fight a mob that has a giant body type.
WildcardX: Bots in melee range of their target will now seperate themselves some so they won't appear so much on top of each other in combat. "Tank" classes will always be closer than "DPS" classes.
WildcardX: Fixed a issue with bot pet hitpoints not persisting correctly to the database and an issue that prevented the client from getting all HP updates for bots and their pets.

==01/15/2010==
Derision: Added check in Handle_ApplyPoison to verify the specified inventory slot contains a poison in case the player moved items around after beginning to apply the poison.
Derision: Fixed a bug where Mend would not report failures for skill levels below 75.

==01/15/2010==
WildcardX: Refactored the general bot ai logic. It appears I have bots properly showing their run animations and bots will now stand before they cast a spell. Because I touched soo much bot ai code, this rev should be evaluated fully before implementing on a public play server. I may decide to revert this rev of the bot code if it proves too unstable.

==01/14/2010==
WildcardX: Fixed a bug in the EQEmuLoginServer that resulted in the server not processing login requests because the application's connection to its MySQL database engine was closed. I have implemented an auto reconnect feature of the MySQL client api.
WildcardX: Cleaned up a couple compiler warnings for EQEmuLoginServer.
WildcardX: Refactored some code that worked fine on a Windows OS, but was incompatible with a Linux OS. New code is compatible with both operating systems.

==01/13/2010==
WildcardX: Implemented auto melee or archery weapon selection for the bot ranger if the bot ranger is level 61 or better and the bot owner toggled the #bot archery command. After toggeling once, the bot then decides on archery or melee until the #bot archery command is toggled again or the bot zones or camps.
WildcardX: Fixed a bug that prevented bots from being created on systems running MySQL on a linux OS. Windows MySQL servers were unaffected.
WildcardX: Enchanter bots will no longer cast any illusions as part of "buffing". In the near future, I will implement a new #bot command to cast illusions instead.
WildcardX: Fixed a bug that prevent enchanter bots from casting any damage over time or nuke spells against their target.
WildcardX: Fixed a bug that caused bots to "ghost" as they followed their client owner.

==01/12/2010==
WildcardX: Implemented a bot spellcasting ai overhaul that improves upon the existing ai and creates a framework to expand additional ai enchancements around for bot coders. NOTE: Please evaluate this version of bots BEFORE you replace your existing server as this is still a work in progress.
WildcardX: Implemented bot wizard nuke spell selection for the new bot spellcasting ai.
WildcardX: Fixed various bugs to now allow any characters except the bot owner to give bot commands or spawn the bot. Also fixed #bot mana command to filter out non-caster bots.

==01/10/2010==
Derision: /invite can now be used to invite a player in another zone into a regular group.

==01/09/2010==
Derision: Changed Client::GroupInvite2 to use the Invitee name passed in the OP_GroupInvite packet rather than the player's target.

==01/08/2010==
WildcardX: Fixed a bug that allowed a bot to be created with the same name as an existing player character. This would cause said bot to not zone with other bots the group.
WildcardX: Added new bot command, #bot mana. This will give a mana report for all spawned bots in the zone. Bot mana report spamming is now disabled.

==01/07/2010==
WildcardX: Fixed a EQEmuLoginServer crash that can happen as the result of a null reference in the database code.
WildcardX: Fixed a bug with bot archery. The command shouldn't crash the zone and the bot should correctly display the bow only.

==01/06/2010==
WildcardX: Fixed a bug that prevented Bot casters from casting if a mob becomes enraged.
WildcardX: Changed #bot list and #bot spawn commands to use bot name instead of the bot table id
WildcardX: Added new commands to save, load, delete and view bot groups. See the #bot botgroup help command to view them.
WildcardX: Fixed SQL syntax issues with database scripts for bots.
WildcardX: Fixed a bug that may have made it difficult to add bots to bot only groups.

<SQL Required for BOTS> 1077_botgroups.sql

==01/05/2010==
WildcardX: Fixed the EQEmuLoginServer project file, fixed a crash caused by referencing a NULL object and made a couple improvements to error handling.
Derision: Fix for quest::depopall related crash.
WildcardX: Improved healing for Bots inspired by contribtions from Bad_Captain! Bot healers won't let a HoT spell block them from casting a heal spell when in combat.
WildcardX: Bot pets will now seek to engage their target's from behind when their Bot master's are fighting the same mob from in front.

==12/30/2009==
Derision: Update azone2 with EQG v4 support.

==12/27/2009==
Derision: Fix to set required heading when zoning.

==12/23/2009==
cavedude: (Kilelen) Added quest functions quest::checktitle(int titleset), quest::enabletitle(int titleset), and quest::removetitle(int titleset) to allow Perl to enable or remove titles for a player.

Required SQL: utils/sql/svn/1057_titles.sql

==11/21/2009==
KLS: Ad hoc task selectors should ignore tasks that are not enabled now.

==11/19/2009==
Congdar: Fixed Resist Stat Caps, Removed GetMax...() methods calculating some AA's twice.

==11/18/2009==
KLS: Added check for character deletion as pointed out by Rogean.

==10/31/2009==
AndMetal: Changed HP regen calculations to be Live-like. Basically higher level regen will be about 50% more than it is currently & FD regen should be better than standing, but less than sitting (instead of 25% of sitting regen).
AndMetal: Races that get the HP Regen "bonus" (Iksar & Troll by default) can be customized as a bitmask via rule Character:BaseHPRegenBonusRaces(4352).
AndMetal: Added #setallskills alias for #setallskill/#setskillall.
AndMetal: Added '#rules get [rule]' for a single rule & '#rules values [catname]' for a category to allow real-time viewing of the rule values from the zone (not the DB).
AndMetal: Added client HP, Mana, & Endurance regen info to #showstats/#mystats

==10/30/2009==
KLS: Exported DoSpecialAttackDamage() to perl::mob;

==10/25/2009==
WildcardX: Tweaked guilds a little to accomodate integrating BOTS.
WildcardX: Bots can not join guilds in the same way as characters can. Bots can only be members, not officers.
WildcardX: Deprecated the legacy BotRaids system and all #bot raid commands. Also deprecated the legacy botgroups table.
WildcardX: Renamed the #bot group order ... series of commands into only #bot group ...

<SQL Required for BOTS> 1040_DeprecatedBotRaidsSystems.sql

==10/23/2009==
KLS: Added discussed work around for SoF > level 75 issue from forums.
WildcardX: Bot pets and bot pet items and bot pet buffs will now save their state to the database between zones and camps just like a character.
WildcardX: Add SQL to create unique columns in group_id and group_leaders tables in hopes of removing the last of the seemingly random issues with groups and zoning.

<SQL Optional> 1038_grouptablesuniquecolumndefinitions.sql
<SQL Required for BOTS> 1038_botpetstatepersists.sql

==10/21/2009==
WildcardX: Bots will now persist their buffs to the database while zoning or camped.

<SQL Required for BOTS> 1036_botbuffs.sql

==10/20/2009==
WildcardX: Bots can now be a group leader. A character can now make not only a group mixed with both bots and other characters, but also groups with all bots and lead by a bot the character designates. Please see #bot botgroup help for details. The legacy BotRaids logic will be removed from the server code in the next 24/48 hours. This effectivly makes bot raiding the same as before the raid system was created. Much of the existing "#bot group order" commands will also be deprecated soon.
WildcardX: Fix for a bug with #bot botgroup add.
WildcardX: Fix for a bug with bot group leader's record in group_id table not removing any older records.
WildcardX: Fix for a bug that caused a bot group leader to say it is following itself.
WildcardX: Fix for a bug that caused a zone crash when a client ungracefully disconnects from zone but zone still runs and the client had spawned bots.
KLS: Added #globalview
KLS: QGlobals will update instantly for the zone they're in.

==10/19/2009==
WildcardX: Fixed a number of bugs with support bots zoning. Refactored the code and eliminated the botactives table.

<SQL Required for BOTS> 1030_botzoningsupport.sql

==10/18/2009==
WildcardX: Bots can now zone with their bot owners as long as they are in a group. Bots not in a group will camp instead of zone.

<SQL Required For BOTS> 1027_botactives.sql

==10/17/2009==
WildcardX: A character and a bot can now recieve an ldon adventure.

<Required SQL> 1022_botadventuring.sql

==10/15/2009==
AndMetal: Added rule Combat:ProcTargetOnly(true). Allows the change from Rev 606 that limits procs to only the target to be removed. Note: AE procs can still cause stability issues if it is set to false.
AndMetal: Fixed some "no newline at end of file" warnings.
AndMetal: Corrected formatting/typo for some # commands.
AndMetal: Fixed a memory leak in Client::ZonePC().
KLS: Changed how QGlobals are tracked on the server to reduce the amount of times we query the database.  I've tested it quite a bit but if you find anything wrong with the new implementation: report it.

==10/07/2009==
Rogean: #motd now updates clients instantly serverwide.

==09/30/2009==
Rogean: Fixed possible crash in Mob::CheckWillAggro();
Rogean: Temporarily Disabled Fear MaxLevel Check causing a crash.
Trevius: Added Quest Commands quest::playerfeature(feature, setting) and quest::npcfeature(feature, setting) - See Wiki for details on usage.
Trevius: Added Quest Objects GetHairColor(), GetBeardColor(), GetEyeColor1(), GetEyeColor2(), GetHairStyle(), GetLuclinFace(), GetBeard(), GetDrakkinHeritage(), GetDrakkinTattoo(), and GetDrakkinDetails().

==09/29/2009==
Rogean: Direct Heal and Rune Aggro are now based off the mana cost of the spell.
Rogean: HoT Aggro is now based off the per-tic heal amount, when the spell lands.
Rogean: Fixed several issues with focus effects. Beneficial Hate Reduction Focus should now work.
Rogean: Fixed AA Spell Casting Subtlety not applying to heal aggro. Also changed to correct values.

==09/27/2009==
cavedude: (Shin Noir) Implemented Wizard AA: Teleport Bind.
cavedude: (tsowl) GMs will no longer need a key for locked portal doors.
cavedude: (tsowl) Fix for shared and normal bank dupes.
cavedude: (Nachyoz) Corrected a bug preventing $faction from reporting correct values.
cavedude: (drakelord) Runes will now block stuns, provided the damage does not exceed the rune's limit.

==09/23/2009==
gaeorn: small fix to pathing code for 64bit
gaeorn: a few changes to makefiles to clean things up

==09/20/2009==
Rogean: Small (Big?) Aggro change, melee swings now generate same aggro regardless of hit/miss/dodged.
Rogean: Aggro Formula changed to weapon_damage + dmg bonus + elemental dmg + (if applicable) bane dmg.

==09/18/2009==
KLS: Fixed an error with Perl::Group::GetMember(index) added Perl::Raid::GetMember(index).
KLS: Added new npc types field: 'unique_spawn_by_name'.  NPC will only attempt to spawn if there isn't already a npc with it's exact name in the zone already.
Rogean: Added World IP Logging @ Login.

<Required SQL> 980_account_ip.sql

==09/16/2009==
KLS: Added support for raid all loot (type 4), raids will default to this loot type now(may have some appearance issues).
KLS: Added command #raidloot to change raid loot manually, this is needed for titanium if they want to switch from 4 to another and back to 4 since the client does not support type 4 natively.
KLS: Added private_corpse to npctypes to dictate whether a corpse will unlock to outside people or not, by default(0) it will unlock.

==09/08/2009==
Trevius: SoF - Corrected disciplines for SoF clients so they can load up to 100 instead of being cut-off at 50 max.

==08/28/2009==
KLS: Fix for bug with AI_Start not clearing feign death.
KLS: Worked out basics for /claim, not yet implemented but worked out all the packets needed for sof/titanium.
KLS: Finished with /claim implementation.

==08/26/2009==
KLS: Significantly lowered karma required to talk globally if using the system.
KLS: Fixed some small potential exploits.
KLS: Extended anti-spam to /tell, will extend fully to universal chat server soon.
KLS: Started work on /report but did not finish implementation yet.
KLS: Added hotzone support.
KLS: Finished /report implementation.

==08/23/2009==
WildcardX: *BOTS* Fixed a bug that made bots ghost when moving.
KLS: More tweaks to anti-hack systems, should trigger MQWarp less often.
KLS: Instituted a cooldown on looting items from corpses, 200ms per item looted.

==08/17/2009==
KLS: Fix for zonesummon variables influencing next zone attempt if you inner-zone first.

==08/13/2009==
KLS: Added method to enable / disable spawn2 entries from spawning, enabled by default obviously.
KLS: Two quest methods to modify spawn2 behavior quest::enable_spawn2(spawn2_id) and quest::disable_spawn2(spawn2_id), disable will force depop whatever mob is currently spawned in that spawn2 point if any.
KLS: quest::spawn_from_spawn2(spawn2_id), will force a spawn_2 point to spawn a npc even if disabled or it already has a npc spawned.
KLS: Exported several new C-Objects to perl: MobList, ClientList, NPCList, CorpseList, HateEntry, HateList. Examples of how to use can be found in utils/Examples/ListIteration.pl

==08/11/2009==
WildcardX: *BOTS* Refactored some bots code and implemented a new feature. Players can now inspect bots and their equipment just like players inspect other players. Enjoy!
Trevius: (Secrets) Minor fix for the new Maxlevel Scaling for NPCs to correct a HP issue if they have visible armor/weapons or buffs.
Trevius: SoF - Updated Opcodes for Voice Macros. They now function in SoF (/vtell, /vgroup, /vraid).
WildcardX: *BOTS* Cleaned up bot inventory code a little and fixed a bug that caused some items to display in incorrect slots in the inspection window.
WildcardX: *BOTS* Bot bards are now holding concerts for those willing to listen...

==08/10/2009==
WildcardX: Tweaked Groups a little to allow a group to consist of both Bots and Clients, doesn't matter what order you invite either nor does it matter how many of each.
WildcardX: *BOTS* A client camping out or zoning will now auto camp out all their bots and clean up any group those bots may have been in.
gaeorn: renamed zone->map to zone->zonemap to eliminate compile warning
gaeorn: added lots of type casting for 64bit compatibility
KLS: Added #revoke support to /auction and UCS chat channels.
KLS: Added rule Chat:KarmaGlobalChatLimit amount of karma needed to be able to chat in global channels below the minimum level and Chat:GlobalChatLevelLimit. By default the level is 8 and the karma amount equal to 24 hours of /played time. Meaning that unchanged someone must be >= level 8 or have more than a day of played time before they can chat in global channels.

==08/09/2009==
WildcardX: *BOTS* Fixed the bots illusion bug that caused a bots gender and race values to be changed to that of the illusion in the bots table.
WildcardX: *BOTS* Added new bots command, "#bot giveitem". This command lets you give a NO DROP, NO TRADE item to your bot as long as its on your cursor.
WildcardX: *BOTS* Added new commands, "#bot camp" and "#bot camp all". The first orders your bots to camp out if you target them. The second orders all bots you own to camp out, no need to target each.
Trevius: Created methods for when an NPC is spawned to clean up the NPC code some.
WildcardX: *BOTS* Fixed a bug caused by using #bot giveitem that didn't update the client that the iyem that was on the cursor is now gone.
WildcardX: *BOTS* Fixed a bug that crash the client when trading with a bot.
KLS: Fix for #ban
KLS: #ban will now update the player's flag and kick them from the server.

==08/08/2009==
WildcardX: *BOTS* More code refactoring.
WildcardX: *BOTS* Bots now appear as another client player to your client. This will lead to using your UI to perform operations like group invites/disbands and the raid UI. Perhaps even guilding your bot! (Thanks Trev for your assistance!)
WildcardX: Fixed a bug that negatively impacted BOTS when the NPC scaling logic was introduced. This caused bots to spawn as outrageously large levels, like level 185!
WildcardX: *BOTS* Bots can now be invited and disbanded from your group by simply using the group "Invite" and "Disband" buttons from the client's UI.
WildcardX: *BOTS* Tweak to the bots total play time calculation to make it more accurate.
KLS: Added #path meshtest simple to do a faster search on errant path nodes.
KLS: Modified the accurate hazard code to make automatic path maps with more accurate info that requires less manual editing afterward.
cavedude: (mackal) Pets will now be amiable to their owners, indifferent to all else.
cavedude: (mackal) Added $client->KeyRingCheck() and $client->KeyRingAdd() to allow Perl to manipulate the keyring.
cavedude: (mackal) Casting an invis spell on a player that already has a similar type invis spell will no longer drop the existing buff.
cavedude: (mackal) Corrected message string for heal spells.
cavedude: Added rule to determine at what HP a fleeing NPC will halt due to being snared.

==08/07/2009==
WildcardX: *BOTS* More code refactoring.
WildcardX: Implemented 4 additional abstract methods in the mob object, HasRaid(), HasGroup(), GetRaid(), GetGroup(). These will be implemented as common interfaces by any class deriving from Mob.
WildcardX: *BOTS* Tweaked bot logic so group channnel doesnt get spammed with every swing.
Trevius: Minor adjustment to the flow of logic for the MaxClientsSetByStatus rule to allow it to override settings for the additional max client rules if enabled.
Trevius: Corrected the Attack Rating portion of #showstats and #mystats
Trevius: (Secrets) Added new quest::gmsay("message") command that will send a message to all GMs (GMs only) on the server.
Trevius: (Secrets/Trevius) Added 2 new fields (maxlevel & scalerate) to npc_types for allowing NPCs to spawn within a range of levels and scale stats at the rate set
WildcardX: NPC is no longer a friend class in the Mob class. Moved the class member Mob::target to Mob's private scope to ensure other classes use the Mob::GetTarget() and Mob::SetTarget() methods.
WildcardX: *BOTS* Commented out code that let bots use the groups chat channel until I can fix I bug I found that causes bots to have their targets repeatedly reset to null values and back to their attacker while in combat.

Required SQL: utils/sql/svn/898_npc_maxlevel_scalerate.sql

==08/06/2009==
WildcardX: *BOTS* Significantly modified the bots table. Removed several unnecessary columns and changed  many interger columns to accept signed values. Added new columns to track dates and times for bots.
WildcardX: *BOTS* Slowed bot runspeed to a more reasonable default value.
WildcardX: *BOTS* Bots will now depop instead of being murdered to go away.
WildcardX: Only a Client object will try to update its group id in the database when a group member is removed from the group.
WildcardX: *BOTS* Bots will now record their total play time.
WildcardX: Modified Group::AddMember() to be more bots friendly and removed specific bot code to do the same thing.
WildcardX: *BOTS* Modified the IsBotAttackAllowed() method to prevent a bot wizard's familiar from attacking.
WildcardX: *BOTS* More code refactoring. Bots will now use group message channel to communicate with the group (idea being bots may eventually be in a different zone than the group and/or client).

Optional SQL: *BOTS* utils/sql/svn/892_optional_bots_table_mod.sql
Optional SQL: *BOTS* utils/sql/svn/893_optional_bots_table_mod.sql

==08/05/2009==
WildcardX: Fixed a bug that prevented COMBAT_EVENT signaling to NPC's from working correctly.
WildcardX: Bots will now call the database a lot less regarding their inventory. They can get info about their inventory from memory during runtime.
WildcardX: Bots appearance like face, hair, etc is now persisted to the database and used during runtime.
WildcardX: (Taurinus) Tweaked the way bots calculate their AA's so the code isn't as long and is easier to read.
WildcardX: A bot getting aggro will aggro its group members for them to come to the bots defense.
gaeorn: added utils/sql/svn/botsconvert.sql to convert old schema bots and inventory to new schema. if you need to convert old bots, use this instead of bots.sql.

==08/04/2009==
WildcardX: Fixed a bug that broke cash handins with NPC's.
WildcardX: Fixed a bug that reversed a riposte attack's target.
WildcardX: Merged the "bots" branch into trunk and removed the prior "EQBOTS" system from trunk. Please carefully evaluate this version before making any decision to upgrade your servers.
Trevius: Added a Distance option for quest::follow(entity_id, distance) to allow setting the distance for the NPC to follow at.

==08/02/2009==
realityincarnate: SoF - Added opcode values to avoid packet dumps of some of the more annoying unknowns
realityincarnate: SoF - Tradeskill success messages now display the recipe name instead of %1
realityincarnate: Added #myskills command to bring up an SoF-style skills window showing current and capped skill levels
realityincarnate: Skills can no longer pass the cap from initial training (specifically bard meditate)

==7/31/2009==
WildcardX: Implemented a method to calculate the reciprocal heading of a specified mob object.

==7/30/2009==
Trevius: Added heading option and bool option for saving guard spot to quest::moveto(x,y,z,[h,saveguardspot?]).
Trevius: Added rule MaxClientsSetByStatus. If True, IP Limiting will be set to the status on the account as long as the status is > MaxClientsPerIP.

==7/29/2009==
AndMetal: Small fix to quest::scribespells() to return the correct amount of scribed spells.
AndMetal: #setaapoints/#setaapts will now consistently add the correct amount of AA points. Also added a rule AA:ExpPerPoint(23976503).
AndMetal: Added a little bit of logging for exp (CLIENT__EXP). Disabled by default.

Optional SQL: utils/sql/svn/853_optional_rule_aaexp.sql

==7/27/2009==
gaeorn: changes to login server to compile under linux. added linux makefile for linux. converted utf16 sql files to normal ascii text.
KLS: Fix for issue where client would stop recieving communication when recieving more than 36 nodes in a find reply. Resolved by capping the amount of nodes find can return, more than 36 will result in unable to easily find message.

==7/26/2009==
AndMetal: AGI Penalty for being encumbered now matches the Titanium client. The old formula was much higher than the client was reporting.
AndMetal: Added InLiquid() function to the WaterMap class. Will return true if you're in Water or Lava (or both?)
AndMetal: Converted to some more Message Strings in zone/spells.cpp.
AndMetal: Changed GetNextAvailableSpellBookSlot() & FindSpellBookSlotBySpellID() to return a result much faster.
AndMetal: The scribespells commands/quest functions should no longer overwrite existing spells & will use only unused book slots.
KLS: Added #path resort nodes to facilitate with keeping the pathing nodes in order.
KLS: Fix for crash from adding/removing nodes.
KLS: Combat range will now check the z axis as well.

==7/25/2009==
KLS: Added a much more accurate but slower Hazard Detection algorithm for #path process that will calculate water and very spikey terrain between two points, other instances of PathManager::NoHazards untouched.
KLS: Added #path move and #path disconnect all.

==7/24/2009==
Derision: Moved RecalcWeight to after CalcAABonuses in bonuses.cpp because valgrind complained aabonuses.packrat was used uninitialised.
Derision: Fixed memory leak in /who all processing.
KLS: Added functionality to #path to faciliate making .path files in game, including a very CPU intensive #path process filename which will try to create a connected path from unconnected laid out nodes.
KLS: /find will now do a hazards check.

==7/22/2009==
realityincarnate: Added quest::factionvalue() command to give more logical faction values than the client uses (Scowling = 1, Ally = 9)

==07/21/2009==
Trevius: Added a 4th type for quest::getlevel(type) that will get the characters level2 value, which is the max level the character has ever reached.
Trevius: Added a 3rd option for saylink() to allow the link to be different than the say message. Ex quest::saylink("bind my soul", 0, "bind your soul")

==07/20/2009==
Trevius: Corrected/Updated some minor size stuff with illusions and player races.

==07/19/2009==
Trevius: EVENT_PROXIMITY_SAY will now work whether you have a target or not.
Trevius: Added bool option to quest::saylink() to allow them to be silent. Ex. quest::saylink("silent link",1)
Trevius: Added quest::FlyMode() command to allow setting flymode on players via quest scripts.
WildcardX: Fixed the build by casting this->GetTarget() as NPC in void Client::Handle_OP_ItemLinkClick method as a parameter to a EVENT_SAY call.
WildcardX: Added the changelog file to the solution for convenience.
realityincarnate: Spells cast from items now reduce the charges before creating spell effects (stops loregroup conflict with Gloves/Hammer of Infuse)

==07/15/2009==
Trevius: (Shendare) New object command (#object List|Add|Edit|Move|Rotate|Save|Copy|Delete|Undo) to manipulate objects in real-time from in-game in almost every possible way!

==07/14/2009==
WildcardX: (for BOTS alpha code only) Set textures to 0 to create the correct appearance of a naked bot on spawn without any equipment.
AndMetal: Changed AA Effects to be loaded into a map instead of a static array.
AndMetal: Changed weight in the client class to uint32 from int16 since the client uses 32 bits for the weight. This should prevent it from overflowing.
AndMetal: Corrected Packrat from 10% per level to 1% per level per the Titanium client. It also now affects coin weight (also 1% per level) per the Titanium client.
AndMetal: Cleaned up a few compile warnings.
WildcardX: Advanced a couple error messages before a return statement in the EQEmuLoginServer project.

==07/13/2009==
KLS: Reimplemented pet hate scaling.
KLS: Removed code that ports you if you're found warping.
WildcardX: (for BOTS alpha code only) Inviting a bot to group will show the bot name without any numeric characters (ie, mob::cleanname()).
WildcardX: (for BOTS alpha code only) Detecting pacified mobs via spell effect type instead of specific spell id's.

==07/12/2009==
Trevius: Added "featuresave" option to #npcedit that will save all currently set facial features.
Trevius: Fixed crash for #randomfeatures if no target was selected before using it.
Congdar: Fix EQBOTS AISpells break. Add new rules, features too much to list.
KLS: Upped default monk melee damage, halved default monk special attack damage by a little over half.

SQL: /utils/sql/svn/773_monk_rules.sql

==07/11/2009==
KLS: SoF - Changed raid join packet encode slightly.
KLS: SoF - Added workaround for disconnection on death for now.
WildcardX: Fixed BOTS so the bot doesn't warp to its owner.
WildcardX: All commands for the BOTS system can be tested now except for bot raiding and bot group raiding.

==07/10/2009==
Trevius: (Zeice) Added #mystats command as an alternative to #showstats that only shows stats for the client or it's own pet.
WildcardX: Migrated more code from EQBOTS to BOTS. The BOT code is less buggy than last iteration and now has even more active features that can be tested but there is a known issue or two I am aware of and working to correct.
KLS: Fix for fear not wearing off properly.
KLS: Small tweaks to npc spell ai.
KLS: SoF - Raids should now function properly.

==07/09/2009==
WildcardX: Migrated more code from EQBOTS to BOTS. The BOTS code can do basic functions now but its still "buggy" compared to EQBOTS until migration/integration is complete.
KLS: Clients are no longer immune to charm.
KLS: Added several checks for IsFeared where we were previously only checking IsStunned.
KLS: EVENT_COMBAT should no longer be called when a NPC dies.
KLS: Changed way AISpells was loading, did away with arbitrary 16 spell limit on npc spell lists.

==07/08/2009==
WildcardX: Migrated more code from EQBOTS to BOTS.
WildcardX: Included StringIDs.h to the zone project file and allowed the ";" to replace the "," characters in the WORLD project file.
Trevius: Added rule ArcheryBaseDamageBonus to allow easy adjustments to archery base damage
Trevius: SoF - Adjusted how AAs are loaded to allow all to be fully functional.  This is a temp work-around until the correct way is finalized.
KLS: Lowered aggro backstabs generates by roughly 2/3 for a high level rogue, probably a bit less for a low level rogue.
KLS: Backstab will now use the backstab damage field from items instead of weapon damage.
KLS: Redid all combat skill ups, can only skill up against light blue targets or better for offensive and defensive actions, wont work against clients or NPCs who don't have aggro lists.
KLS: Mobs will prefer targets who are not feared to targets who are feared when selecting new targets.
KLS: Added Rule (Character, MaxFearDurationForPlayerCharacter).
KLS: Fear will now cause PCs to run instead of just be stunned, beware.

==07/07/2009==
Derision: Fix for mobs getting stuck if their path between waypoints attempts to take them 'under the world'.


==07/06/2009==
KLS: Reworked EVENT_ATTACK to be more efficient.
KLS: Reworked EVENT_COMBAT to be both more efficient and smoother, no longer having an arbitrary delay before it fires.
KLS: Took out code in HateList::IsEmpty() that no longer makes any sense to me, it should be noticably faster.
KLS: Took out old unused quest::flagnpc stuff.
KLS: Added #netstats command, allows GM to view the network sent/recv & sent/recv per second on their target or themselves.
WildcardX: Migrated more code from EQBOTS to BOTS and reworked BOTS to derive from NPC object instead of Mob.

==07/05/2009==
gaeorn: (drakelord) Added slow migitation. Set npc_types.slow_mitigation with the portion of slow you want mitigated: 0 = 0%, 1 = 100%, .5 = 50%, etc.
AndMetal: AAs are now calculated in CalcBonuses for clients.
          AAs that have been converted: (Advanced) Innate STR / STA / AGI / DEX / INT / WIS / CHA, Innate Enlightenment, Natural Durability, Physical Enhancement, Planar Durability, Packrat. They should already be in the PEQ aa_effects table.
          For new AAs, you'll want to modify the StatBonuses struct in zone/mob.h. You'll also need to add a case in ApplyAABonuses in zone/bonuses.cpp to add it to aabonuses.
AndMetal: (via Congdar) Fix for quest::traindiscs().
AndMetal: Fixed Packrat. However, it doesn't seem to be updating correctly to the client (or we're taking too much off).
AndMetal: Added weight to #showstats, accurate to 1 decimal point.
KLS: NPCs will no longer try to base their attack speed off weapons they're using, the code wasn't working anyway.
KLS: Lowered monk kick damage and damage table bonuses but added rules to govern this damage so they can be boosted up for any servers that want.
KLS: More work on ranged damage for npcs, not yet fully implemented but quest functions can cause NPCs to ranged attack.
KLS: Added quest::IsEffectInSpell(spell_id, effect_id), quest::IsBeneficialSpell(spell_id), quest::GetSpellResistType(spell_id), quest::GetSpellTargetType(spell_id)

Required SQL:

utils/sql/svn/745_slow_mitigation.sql


==07/03/2009==
KLS: Fix for AA reuse timer text.
KLS: Added rules to replace defines: Combat:MaxRampageTargets, Combat:MaxFlurryHits
KLS: Redid inner workings of rampage a bit to be more efficient memory wise and to hold an unlimited number of rampage targets instead of capping at 20.
KLS: Made ranged combat stuff virtual so I can implement npc ranged attacks tomorrow.
KLS: Added 3 perl functions for the mob scalar type: SetEntityVariable(id_num, var), GetEntityVariable(id_num) and EntityVariableExists(id_num), taking int32 for id_num and string for var. Allows someone to store as many variables on the entity being targeted as they would like.

==07/02/2009==
KLS: Berserker NPCs will now frenzy instead of kick.
KLS: Fix for GetHateRandom() method crash if there are 0 people on the hate list.
KLS: Repop force was broken when we went to the instancing system, it has now been fixed.
KLS: Updated #advnpcspawn to be able to edit respawn and variance timers of spawn points in game.

==07/01/2009==
AndMetal: Added rules for Sacrifice, which also corrects the minimum level you can use it on: Spells:SacrificeMinLevel(46), Spells:SacrificeMaxLevel(69), & Spells:SacrificeItemID(9963).
AndMetal: Switched to some more Message String IDs.
AndMetal: quest::scribespells can now accept minimum level as a 2nd argument. Examples: quest::scribespells(60,60) will scribe just level 60 spells, quest::scribespells(75,71) will scribe spells from 71 through 75.
AndMetal: Ditto with #scribespells, quest::traindiscs, & #traindiscs.
AndMetal: quest::scribespells & quest::traindiscs will now return the amount of spells/disciplines that were scribed/learned (an optional way to verify success or failure).
AndMetal: #scribespells & #traindiscs will limit the max level to whatever the rule Character:MaxLevel is set to, unless you have GM Mode turned on, in which case it's limited to 255 (uint8).
AndMetal: Fixed a compile error introduced in Rev 729.
gaeorn: SE_Harmony and SE_ChangeFrenzyRad effects were reversed. This is based on info from alla regarding spells post OoW that only have SE_Harmony effect (reaction radius).
KLS: Added NPC code 'd' to make npcs be able to see through feign death attempts. (mostly implemented, still have to look into aggroing people who are feigned by proximity)
KLS: Fixed a typo in the petition code and un-reverted the petition.h file (hi, there's a reason it was changed).
KLS: Added mob perl object HealDamage(amount, caster = 0);

Optional SQL:
utils/sql/svn/732_sacrifice_rules.sql

==06/30/2009==
Derision: Fix for mobs in pathing enabled zones fleeing at low health at full run speed.
Derision: Made rule Map:UseClosestZ default to false. Only set true if using azone2 generated maps (specifically those for EQG zones).
realityincarnate: Starting cities are now tracked for newly created characters.
realityincarnate: Enabled the /setstartcity command for characters without a start city assigned.
realityincarnate: Added $client->SetStartZone and $client->GetStartZone perl commands.
KLS: Petitions will assign id based on character id instead of this stupid desyncing junk.
KLS: Max NPC name length increased to 50 characters up from 30.
KLS: Save on zone success will now commit immediately instead of possibly delaying. Hopefully will help with some of the situations where people zone to bad locations.
gaeorn: New rule NPC:SmartLastFightingDelayMoving. When true (default), if a mob is already wandering home during a FD pull and the puller stands up and then FD again, the mob's timer to return home will not reset, but instead will return home immediately. The timer will be reset if the mob forgets about the FD puller.
gaeorn: New rule Combat:AssistNoTargetSelf. When assisting a target without a target: true = target self (default), false = leave target as was before assist (this is the behavior on live).

Optional SQL:

utils/sql/svn/730_smart_delay_moving.sql
utils/sql/svn/731_rule_assist_notarget_self.sql

==06/29/2009==
Derision: Fixed a pathing bug relating to nodes incorrectly culled from the front of a path.
KLS: Reworked bind code a bit.
KLS: Pets no longer get client war/berserker crit bonuses.

==06/28/2009==
Derision: Began work on pathfinding for aggro/fear and Find NPC.

The path files for the first few zones can be found at http://code.google.com/p/projecteqemu/downloads/list
Put the .path files in your Maps directory with your .map and .wtr files.

Optional SQL:

utils/sql/svn/721_pathing_rules.sql

==06/27/2009==
KLS: Specialization should now never increase the amount of mana it takes to cast a spell.
KLS: Fix for mana preservation focus not functioning correctly.
KLS: Fix for duration enhancement focus effects not affecting detrimental spells.
KLS: Fix for summoning focus not reducing the cast time of nec/beast pets serverside.
KLS: Insufficient mana serverside check will now be before any modifiers instead of after, if you don't have enough mana in your mana pool to cast a spell after modifiers but do before modifiers the spell will cost your entire mana pool.
KLS: Added new npc code 'g', lets npcs resist spells by casters that are not in melee range.
WildcardX: More code migration from EQBOTS to BOTS.

==06/26/2009==
Trevius: SoF - Tradeskill containers within a character inventory can now combine recipes.
Trevius: SoF - Items with Recast Delays no longer appear as greyed out.
KLS: More changes to archery damage.

==06/25/2009==
Trevius: Structure work for Player Profile Recast Timers and Illusions in 6.2 Client.

==06/24/2009==
Trevius: #wc (wearchange) as well as all of the facial feature commands will now retain armor tint when used.
Trevius: Using #wc now makes temporary changes visible by all clients.
Trevius: Decimals can now be used with the #size command instead of it only accepting whole numbers.
Trevius: Size is now identified in the illusion struct for SoF and Titanium.
KLS: Implemented quiver haste.
KLS: Change to ranger stationary archery bonus. (Re: Nerfed)
KLS: Adjusted high level ranger archery hate.
KLS: Fix for mana reduction focus effect checking base instead of base2
KLS: Fix for hybrids not getting mana reduction effects.

Optional SQL: /utils/sql/svn/710_tint_set_naming.sql

==06/23/2009==
KLS: /surname changes
KLS: Implemented OP_ClearSurname
KLS: (gaeorn) Several 64-bit compile and runtime fixes
KLS: (gaeorn) NPC wander back rules.
Trevius: #texture will now allow player races to retain armor tint for both PCs and NPCs.
realityincarnate: bug fix for changing max_hp with the modifynpcstat command

Required SQL: /utils/sql/svn/704_rules.sql

==06/22/2009==
Trevius: (Rabayn) When creating recipes, it is no longer required that componentcount be on separate rows from the successcount or failcount row.
Trevius: (takatok) AA Shield Block added.
Trevius: (Shendare) Armor Tint on NPCs can now be set on a per-slot basis.
cavedude: Added rules to disable/change #peqzone debuffs. Cleaned up code regarding it some.
Derision: Fixed the BestZ stuff I broke in Rev686

WildcardX: More work migrating EQBOTS code into BOTS.

Required SQL: /utils/sql/svn/702_aashieldblock_tint_table.sql
/utils/sql/svn/703_peqzone_rule.sql

==06/20/2009==
WildcardX: Migrated more code for BOTS from database.cpp to bot.cpp.
AndMetal: Added rule 'Zone:PEQZoneReuseTime' to adjust the reuse time on the #peqzone command. Defaults to 300 per change in Rev 612.
AndMetal: Correction to the item link code used in quests.
AndMetal: Cleaned up zone/StringIDs.h to make it easier to read, plus added some additional String IDs.
AndMetal: Cleaned up fishing some.
AndMetal: Fishing failures should now happen immediately instead of waiting for the timer to run.

Optional SQL: /utils/sql/svn/699_peqzone_rule.sql

==06/19/2009==
KLS: NPCs will no longer warp to their very first waypoint if they start on a grid, make sure they're spawned near their first waypoint!
KLS: Added quest::SetRunning(value) (1 for run, 0 for walk) to let a NPC run when out of combat instead of walk.
KLS: Added quest::IsRunning() return 0 for walk, 1 for run to let quest know if the npc is walking or running.
cavedude (nilbog): Added many missing pet names.
realityincarnate: Restricted monster summoning to things more traditionally considered monsters (no boats, among others)

==06/18/2009==
Derision: Fixed some flawed database queries and a few compile warnings.
Derision: Added command #reloadtitles to reload titles from the database.
Derision: Added second optional argument to #title and #titlesuffix to save the title to the database if 1.
Derision: Added second optional argument to $client->SetAATitle/SetTitleSuffix to save the title to the database.
realityincarnate: Monster Summoning pets should work properly now.

==06/17/2009==
Derision: Removed redundant flymode on/off in water code (not needed since Rev161).
Trevius: New fields added to the alt_vars table to allow SoF and Titanium to both use it.
KLS: Aggro tweaks + melee spell procs wont proc off ranged attacks anymore.

Required SQL: /utils/sql/svn/687_aa_table_changes.sql

==06/16/2009==
Derision: Old corpses summoned by Expedient Recovery will no longer rebury after 5 seconds.
Derision: Added optional duration parameter to quest::popup.
Trevius: SoF - Adventure Merchant Selling is now functional.
Trevius: SoF - Items with click effects now show the min level required to click them.
Trevius: SoF - Items being sold now show the correct price that the merchant will pay for them.
cavedude: Changed the items-0.6.0-DR2-0.6.1-DR1-convert.sql error message to stop confusing people.
cavedude: Green con KOS NPCs will now aggro clients while sitting.
Derision: Spells Gems now stay greyed out after zoning until their recast time is met.
KLS: More aggro tweaks.
KLS: Fix for zone crash from world server.
WildcardX: Migrated more code for BOTS from database.cpp to bot.cpp.

==06/15/2009==
Trevius: SoF - The following fields now show up on items that have values set for them, but the stats are not actually used by the server yet:
	       svcorruption, purity, backstabdmg, dsmitigation, heroic_str, heroic_int, heroic_wis, heroic_agi, heroic_dex, heroic_sta
	       heroic_cha, heroic_mr, heroic_fr, heroic_cr, heroic_dr, heroic_pr, heroic_svcorrup, healamt, and spelldmg
Trevius: SoF - Corrected Max Stat calculation for SoF clients over level 75.
Trevius: Fix for compile error; should have been fixed already *hint*.
Trevius: More tweaks to make illusions work better with features and armor/helm graphics
Trevius: Added alias #rf for the #randomfeatures command. Note that the feature changes are not permanent.
Trevius: Changed the default way of loading spells to now load from the spells_new table instead of from the spells_us.txt file.
Derision: Implemented the Title Window.
KLS: Aggro tweaks.
KLS: Fixes to compile errors/warnings.

Required SQL: \utils\sql\svn\665_heroic_resists.sql
Required SQL: utils/sql/svn/667_titles.sql

Recommended SQL: (This is recommended for databases that don't stay current with PEQ or are custom)
UPDATE items SET backstabdmg = damage WHERE backstabdmg = 0 AND itemtype = 2;

Warning: If you do not have a spells_new table yet, you must create one and load spells into it or zones will crash when loading in.
	 To create the spells_new table, use the SQL from \utils\sql\svn\230_spells_table.sql
	 After creating the table, you can import or export your spells from the spells_us.txt file by using the scripts:
	 import_spells.pl
	 export_spells.pl

	 The easiest way to import your spell file to the table is to move the import_spells.pl file to your main server directory
	 where your spells_us.txt file and your eqemu_config.xml file are.  Then run the following command at a command prompt:
	 perl import_spells.pl

See this post for more information on importing/exporting the spell file:
http://www.eqemulator.net/forums/showpost.php?p=160509&postcount=45

==06/14/2009==
Trevius: Added new command #randomfeatures which will randomize all possible features for playable races.
Derision: Code support for Steadfast Servant Veteran AA.
Derision: Added entity_list::GetRandomClient accessible from Perl.
Dersiion: Fixed infinite loop in EntityList::RadialSetLogging.
Derision: AATimers are now sent at level 1 rather than level >= 51.
KLS: Fix for name_filter checking.
KLS: Name filters will now apply to surnames and will consider any name with 3 repeating characters or more invalid.
KLS: Fix for compile error; should have been fixed already *hint*.

==06/13/2009==
Derision: Implemented SE_PercentXPIncrease and Resist caps.
Trevius: Removing an Illusion should now restore all features to their original settings in most cases.
Trevius: SoF - Adjusted Power Source code some to remove a bug with using the slot.
Derision: Implemented SE_SummonAndResAllCorpses
KLS: Rebalanced some spell effects aggro values.
KLS: Hate added should now be treated correctly.
KLS: Archery should now cause aggro.
KLS: Added rule Aggro:PetAggroAmount to control how much hate a pet causes, 50% default.
KLS: Bash will now cause extra hate depending on the AC of the shield you're using if any.
KLS: Implemented resist reduction and hate reduction spell focus.
KLS: quest::updatespawntimer will now set the respawn timer in the database.
KLS: Stole Trevius' idea to let augments work as focus items.

==06/12/2009==
Trevius: The #nukeitem command and related quest commands is now able to remove items on the cursor and within bag slots of the cursor.
Trevius: SoF - The Power Source Slot is now a usable slot.  Items set to use slot 22 in the items table will be able to use this new slot.
KLS: On successful completion of an adventure players should be removed from the adventure immediately instead of after 30 minutes.

==06/11/2009==
AndMetal: Rule values can be viewed and modified through the web interface. They're updated into the database only, so they won't go into effect until you restart the server.

==06/10/2009==
realityincarnate: Added /makeleader command functionality
realityincarnate: Non-leaders can no longer kick members from the group
KLS: Added $zoneweather perl export

==06/09/2009==
Trevius: Added rule Combat:ArcheryStationaryPenalty to allow adjustment of the Archery damage penalty for moving or rooted targets.
KLS: Backstab tweak again.
KLS: Added Perl commands: GetItemAt(slot), GetAugmentAt(slot, aug_slot) both returning type ItemInst usable from the Client object.
KLS: Added Perl command: IsType() for use on the ItemInst object.

Optional SQL: \utils\sql\svn\646_archery_penalty_rule.sql

==06/08/2009==
KLS(realityincarnate): Charms: Added charm item scaling with scriping support and initial work on evolving items.
KLS(realityincarnate): Added perl method $client->GetModCharacterFactionLevel(FactionID)
KLS(realityincarnate): Added perl method $group->GetMember(index)
KLS: Added perl method $client->GetLDoNWins()
KLS: Added perl method $client->GetLDoNLosses()
KLS: Added perl method $client->GetLDoNWinsTheme(theme 1-5)
KLS: Added perl method $client->GetLDoNLossesTheme(theme 1-5)
KLS: Added support for item clicklevel and item clicklevel2
Trevius: Increased spellbook from 400 to 480 in the Player Profile for use with SoF (60 page spell book)
Trevius: SoF - Added new functions to SoF.cpp for converting Slot IDs between Titanium and SoF
Trevius: SoF - Corrected the location of the spellbook field in the Player Profile to fix an issue with loading spells
WildcardX: Check in of the start of what will become the new BOTS subsystem/framework. This is far from done so just continue to use the existing EQBOTS code you have been using.
KLS: Change to dangerous item inst aug creation, hopefully addresses segfault on 64 bit linux.
KLS: Hopefully fix for pets not giving adventure credit to players in ldon instances.

==06/07/2009==
NOTE (WildcardX): This version of the server code is a little dangerous for BOT enabled servers. I do not recommend using this revision for BOT enabled servers. Most of the existing BOT code is going to be re-implemented as a "BOT" object in the server code so until I complete this architecture change the BOT code may become somewhat unstable. I apologize for the inconvience but this is necessary to allow the server code for the BOTs to be more flexible and extensible than it is now.

Derision: Check for duplicate lore items when fishing.
Derision: Fixed a memory leak in fishing/foraging code.
WildcardX: Traded static integer values for the appropriate enumeration that defines group action types.
WildcardX: A Player grouping with one or more BOTS will now correctly be set as the group leader.
WildcardX: You can now target your BOT to disband it from the group just as you would a player. This does not call the logic that #bot group remove does, though. Keep using the BOT command for now.
WildcardX: A group of one Player and a BOT can now request a LDoN Adventure, but doing so will crash the zone.
KLS: Change to BS formula: moved backstab bonus to damage table. Still might be off but I have another change in mind if so.
KLS: Fix for bug in client calcbonuses.

==06/06/2009==
Trevius: SoF - Corrected Char select Primary/Secondary slot display order.
Trevius: SoF - Added gender to the conversion for bodytypes 66 and 67, which should resolve any remaining issues with it.
Derision: New Universal Chat Server combining both mail and chat server functionality.
          Required to support mail, chat and friends/ignore for SoF clients.
          See http://www.eqemulator.net/wiki/wikka.php?wakka=UCS
WildcardX: Corrected the project file for eqlaunch. This should allow eqlaunch to execute correctly for Windows XP and Windows 2003 Server.
WildcardX: Corrected database table definition that created a bug which prevented a BOT from being created.

REQUIRED SQL:

CREATE TABLE `friends` (
  `charid` int(10) unsigned NOT NULL,
  `type` tinyint(1) unsigned NOT NULL default '1' COMMENT '1 = Friend, 0 = Ignore',
  `name` varchar(64) NOT NULL,
  PRIMARY KEY  (`charid`,`type`,`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

634_TrapTemplateDefaultValue.sql

==06/05/2009==
Derision: SoF - Adventure OPCode updates

==06/04/2009==
Trevius: SoF - Added conversion for bodytypes 66 and 67 so they are now untargetable, invisible and have no showing name as they should be.
Congdar: Bots - Implemented raid maintarget, updates to magepet and pvp.  Added Sinister Strikes & Strikethrough AAs and several other updates.
KLS: Pets will no longer gain aggro from their owners before their owners load in. Fixes both a dupe and crash issue.
KLS: Players will no longer take damage or die before they finish loading into the game.
KLS: Fixed a crash in /open.

==06/03/2009==
KLS: Used Cbodmer old ldon trap code as a base for ldon trap implementation. About 50% of the code for this system was his so I figured he deserves credit too.
Derision: Added messages when Leadership Exp is toggled on/off.
Derision: Fixed bug where group retained Leadership AA benefits of previous leader.

Required sql: 621_LDoNTraps.sql
Updated titanium .conf file for ldon opcodes. Will look at other clients later.

==06/02/2009==
Trevius: Updated the new Adventure Opcodes for SoF

==06/02/2009==
KLS: Forgot to update .conf files with the merge. Please update yours if haven't.
KLS: Added settable flavor text to adventure recruiter entries.

Required sql: 619_Adventure_Recruiter_Flavor.sql

==06/01/2009==
KLS: (takatok) Fix for agil being factored twice in to-hit calc.
KLS: (tsowl) Reimplemented corpse reloading timer fix.  Should work with burried corpses now. (Sorry it took so long to get back to).
KLS: Finished implementing Assassinate and Rescue adventure type
KLS: AC in calc will now not cap at 0.  What this means: A level 65 hitting a level 1 will now hit for a majority of attacks at or near maximum damage, it should affect any other situations.
KLS: Spells shouldn't cause interrupts any longer.
KLS: LDoN theme "ALL" items should show up properly now.
KLS: Added sanity check on adventure merchant for both lore items and trying to purchase items of one theme that has a min point requirement while not meeting that requirement.
KLS: Rule Adventure:ItemIDToEnablePorts will now actually cause the door to ignore this rule if it is set to 0.
KLS: Changed the evacuate work around to use zone 1 and zone 2 instead of plane zones that probably have requirements set on them.

==05/31/2009==
realityincarnate: Added EVENT_CAST to player quests
realityincarnate: AA $quest functions: $client->GetAAPoints(), SetAAPoints(value), AddAAPoints(number), RefundAA(), GetSpentAA()
KLS: Procs will now only occur on a player's targeted mob.
realityincarnate: fixed a calculation error with spent AA's
KLS: Merged instance branch to trunk.

==05/30/2009==
KLS: Redid procs a bit, spell procs should work more consistently and ppm formula should be less broken and will also take into account haste now.
Highly suggested you change your Combat:AvgProcsPerMinute rule to 2.0 if you want it to be live like.
Derision: Group Leadership AA

REQUIRED SQL:

ALTER TABLE `group_leaders` ADD `assist` VARCHAR( 64 ) NOT NULL ,
ADD `marknpc` VARCHAR( 64 ) NOT NULL ,
ADD `leadershipaa` TINYBLOB NOT NULL ;

OPTIONAL SQL:

INSERT INTO `rule_values` VALUES (1,'Character:KillsPerRaidLeadershipAA','50','');
INSERT INTO `rule_values` VALUES (1,'Character:KillsPerGroupLeadershipAA','50','');

==05/29/2009==
Derision: Lay Hands/Harm Touch hot buttons now remain depressed across zoning until reuse timer is up.

==05/28/2009==
Congdar: Bots - updates to bot pvp, raidexp and magepet

==05/27/2009==
Trevius: SoF - Added new opcode and structure to support the Respawn Window.  It isn't fully functional yet, but most of the code is there now.
Congdar: Bots - Fixed botraid experience distribution.

==05/26/2009==
WildcardX: Fixed a bug that displayed the name of a target being summoned in an incorrect format.
Angelox: Bots- Weapons that proc'd rune-types were proc'ing for the whole group. 3 fighters with PGTs made you pretty much bullet-proof.

==05/25/2009==
cavedude: (gaeorn) Added a possible fix for some NPCs not always spawning.
Congdar: Bots - Added PvP for bots.
WildcardX: (erde) Added include for limits.h.

==05/24/2009==
KLS: Fixed dodge/parry/riposte, lowered their effectiveness from skill points slightly.
Congdar: Bots - Added new command #bot magepet [earth|water|air|fire|monster] - Select the pet type you want your Mage bot to use.

==05/23/2009==
KLS: Spells with 0 spell mod will now act as if their mod was 100% or normal instead of 0% of normal.
KLS: (Derision) Implemented discipline reuse timer's client side effects
Congdar: New feature to choose if a key should go on the keyring or not.
	required sql 564_nokeyring.sql

==05/21/2009==
Trevius: Added new quest command quest::saylink() to create itemlinks in quest text that can be clicked for a response

Recommended SQL: .\utils\sql\svn\553_saylink_table.sql

==05/20/2009==
Angelox: Bots- Bots can't stack invis-undead, invis-live, or any other invis type spell.
KLS: Fix for NPCs jumping in place when they have the fixpathingZ rules for movement enabled.
KLS: Traps will no longer attempt to clean up their npcs, every time a trap is destroyed so are the NPCs so it's redundant and risky.
Congdar: Bots - Added Magician AA Elemental Durability, Fixed #bot corpse summon, AI Tweak

==05/19/2009==
Trevius: Identified hairstyle, haircolor, beard, and beardcolor in the Titanium Illusion struct so the related commands now work in Titanium.
KLS: PvP info will only be set if the server type is set to 1 (pvp)
KLS: Adjusted chances on dodge/parry/riposte modifiers
KLS: Made experience con scaling into a rule.
KLS: Added Rules: (Character, UseXPConScaling), (Character, LightBlueModifier), (Character, BlueModifier), (Character, WhiteModifier), (Character, YellowModifier), (Character, RedModifier)
Derision: Bandolier bug fix.
Derision: Equipped items that should confer an extra potion belt slot now do so in Titanium and the 6.2 client (was already working in SoF).
Angelox: Bots- (Congdar) fixed Bot illusion / change form spells as to who is affected.
Angelox: Bots- added check to Bot pacify for casting from a distance.


==05/18/2009==
Trevius: New Commands added: #face, #helm, #hair, #haircolor, #beard, #beardcolor, #heritage, #tattoo, #details
Trevius: Adjusted the #fixmob command to use all features.  The new format is "#fixmob featurename prev/next"
Trevius: Corrected the R524 optional SQL file

==05/16/2009==
Trevius: (Shendare) Added armor tinting functionality for NPCs by setting it in the npc_types table
Trevius: Added base support for illusions to use all facial features, but functionality still needs to be added.
Derision: Reverted (Minimum 3% chance to proc from weapon proc buffs)
KLS: Reduced chance to hit for min damage with AC.
KLS: Added AC scaling by level, will put it in a rule soon.
KLS: Enabled both petition window 'p' and pvp window 'ctrl p' on titanium/sof; neither are functional but they're enabled now and we can work on that later.
Congdar: Bots - fix compile error and update to current combat code
Congdar: Bots - fix pet exploit
KLS: Added backward compatibility to older corpses.

Required SQL: .\utils\sql\svn\527_npc_armor_tint.sql

==05/15/2009==
Trevius: (Trevius/Shendare) Swapped Beardcolor and Beard in the spawn struct for Titanium and Titanium Facial Features should be finalized now.
Trevius: SoF - Drakkin Specific Features (Heritage, Tattoo and Details) should now be fully functional for NPCs and PCs
Derision: Minimum 3% chance to proc from weapon proc buffs (e.g. vampiric embrace, call of sky etc.)
Trevius: Added encode for Illusion packets in Titanium so they see Drakkin as human after clicking off an illusion
Trevius: Optional SQL for adding a notes field to the rule_values table with notes from ruletypes.h

Required SQL: .\utils\sql\svn\518_drakkin_npc_type_features.sql
Optional SQL: .\utils\sql\svn\524_rule_values_notes.sql

==05/14/2009==
Trevius: More work on Facial Features for Characters. Trying to get them functioning properly without hacks before adding SoF Features.
Trevius: SoF - Character Facial Features other than Drakkin specific ones all now work 100% in Character Select and in game.

==05/13/2009==
Trevius: SoF - (Shendare) Corrected the FaceChange Structure and added an encode to make it work
Trevius: SoF - Identified the Drakkin related fields of the Character Select Structure
KLS: Fix for elemental dmg not calculating correctly.

==05/12/2009==
Trevius: SoF - (Shendare) Added a temp commented out test section of code to spawn struct encode
Trevius: SoF - (Shendare) Identified hairstyle, haircolor, flymode, drakkinheritage and drakkintattoo in the spawn struct
Trevius: SoF - (Shendare) Changed facial feature code for getting features slightly
Trevius: SoF - Identified beardcolor, invis, and drakkinspikes in the spawn struct
Trevius: SoF - Updated the OP_CastSpell to convert bag slot from Titanium to SoF for potion use
KLS: Reverted player corpse changes from 5/10 as they caused shadow rest to stop functioning.
KLS: Fixed the /bug structure and updated the table to be more useful.

Required SQL: .\utils\sql\svn\503_bugs.sql

==05/11/2009==
mackal: Added a function to allow Perl to check augments within items.
cavedude: Increased bind wound skill up speed some.
KLS: Fix for potentially dangerous typo in spawn conditions code.
KLS: Removed some non-functioning but still taking up database resources database code.
KLS: Change to a spawn2 table query to reduce disk writes.

Suggested SQL: ALTER TABLE `spawn2` DROP INDEX `ZoneGroup`, ADD INDEX `ZoneGroup` (`zone`);

==05/10/2009==
KLS: Fix for a add/remove raid looter across zones error.
KLS: Changed order of split raid exp, ensures amount given to a player is always at least 1.
KLS: (tsowl) Various Fixes

==05/09/2009==
realityincarnate: Modified quest::say to allow npcs to speak in other languages, added $langid quest variable
realityincarnate: Made low language skill/drunkenness a bit less understandable
realityincarnate: Duplicate lore items from foraging/ground spawns are now handled correctly
realityincarnate: Lore items in the shared bank no longer trigger conflicts with items in individual inventories
KLS: Fix for Group:: and Raid:: splitexp bonus calculations happening once for every person in the group / raid, resulting in very high numbers for group and non-positive numbers for raid.
Trevius: SoF - Corrected a minor issues with new mounts where they weren't setting helm texture properly.

==05/08/2009==
Derision: Fixed a bug where a pet set to guard would appear not to stop on returning to it's guard spot after being ordered to attack.
Derision: Fixed a bug where a mob aggroed would sometimes appear to run past it's target.

==05/07/2009==
Trevius: (Erde) The Web Tool now shows the name of the process running each Dynamic zone (example: dynamic_01)

==05/06/2009==
Angelox: Bots: Added command '#bot shrinkme' requires Shaman or Beastlord (defaults to Shaman).
Derision: Added redux_aa2, redux_rate2 fields to aa_actions.
Derision: Improved Hasty Exit should now reduce the reuse time of Escape.
Derision: The reuse timer in the AA window now shows the reuse time reduced by applicable AAs.
	  (although if you purchase an AA that reduces the reuse time, you must camp before the reduced reuse time will be updated).

REQUIRED SQL:

ALTER TABLE `aa_actions` ADD `redux_aa2` MEDIUMINT( 8 ) UNSIGNED NOT NULL DEFAULT '0',
ADD `redux_rate2` TINYINT( 4 ) NOT NULL DEFAULT '0';
UPDATE `aa_actions` SET `redux_aa2` = '886',
`redux_rate2` = '10' WHERE `aa_actions`.`aaid` =243 AND `aa_actions`.`rank` =0 LIMIT 1 ;

==05/05/2009==
Trevius: SoF - Melee stun/bash no longer causes you to spin
Trevius: SoF - Spell Fizzles and Interrupts no longer cause abnormally long refresh times
realityincarnate: Fixed lore check bug with items in lore group -1
KLS: DoTs should no longer break roots early.
KLS: Added Special Attack hit magical 'm' and special attack hit bane 'b', will allow the mobs affected to hit things that require magical or bane weapons to hit.

==05/04/2009==
KLS: Code block for pets getting sent into attack did not verify that other was not null, causing rare crashes the old way and a pretty common crash with it's new positioning.  This has been corrected.
Derision: Updated spell_type in altadv_vars table to reflect the shared reuse timer ID that it really is.
Derision: AA reuse timers should now display correctly with hotkeys remaining depressed when appropriate.
KLS: Code block for pets getting sent into attack did not verify that other was not null, causing rare crashes the old way and a pretty common crash with it's new positioning.  This has been corrected.
KLS: Added area rampage 'r' npc special attak code.
Congdar: Bots - Added Rogue Triple Backstab AA, Enhanced #bot list, Fixed beneficial weapon procs to not effect the entire group.
realityincarnate: Fix for SoF attunable items
realityincarnate: Added checks for multiple items in the same lore group
Congdar: Bots - Fix Cleric resurrect spell selection, Added zone profiles, Fixed crash with bot follow

REQUIRED SQL: utils/sql/svn/463_altadv_vars.sql

==05/03/2009==
KLS: Some optimizations for the aggro code.  Added a timer for aggro checking will do it twice a second by default: lower AItarget_check_duration in features.h if aggro feels too sluggish for your tastes and recompile.
Derision: Increased reuse_time in AA_DBAction to a uint32 to support reuse timers greater than 18 hours.
Derision: Code support for Chaotic Jester Veteran AA.
Congdar: Bots - Improve Cleric healing ai, fix ae break, update attack code.
Congdar: Bots - Fix sql error for bot table
KLS: (Secrets) min/max damage updated to int32
KLS: Fixed a bug with accuracy tweaks and finished them up.  The system should work fairly well now.
KLS: Removal of several rules associated with the dual accuracy system and the old system for defensive and offensive accuracy bonus.
KLS: Some warning fixes on MSVS.
KLS: Fixed pets not getting sent into battle on attack.
KLS: (theblaz) Pets who were previously guarding after a pet attack command will return to their guard spot; though it appears a stop moving packet is missing on the pet guard spot waypoint.
KLS: Rampage will no longer hit the main tank unless the main tank is the only target in range.
KLS: Swarm pets will once again disappear when their target dies.
KLS: Added zone zone profiling stuff.

==05/02/2009==
realityincarnate: Augment Item Info.
realityincarnate: Show helm option will now save on camping/zoning.
Derision: Corrected a few memory leaks.
Derision: 'Live'/Anniversary patches no longer registered.
Derision: Fix for random client crashes when combining items in world containers (e.g. augmenting items).
BWStripes: Fix for quest::echo.
erde: Added long zone name support to the web interface.
Cripp: Fix for the web interface for those using Perl 5.10.
Congdar: Bots - randomized face/hair etc. so they don't all look the same.  Fixed Bard AE songs.

==4/30/2009==
Congdar: Bots - bots can now use bows, new command '#bot archery'. Added Ranger archery AA's. Reduced chat mana spam. Tweaked spell ai. Fixed memory leak. Updated '#bot corpse summon'.
Derision: SoF - AAs affecting stats now show the correct stats in the client.
Derision: Tweaked base resists to match the client.
gatorman: Fix for QuickSummoning AA (to include Call of the Hero)
Congdar: Bots - root/snare spell ai fix

==4/29/2009==
Trevius: SoF - Added rule for setting a startzone for SoF Clients separate from where Titanium Clients are set to start.  Set as Zone ID number.

optional sql: utils\sql\svn\447_sof_startzone_rule.sql

==4/27/2009==
Derision: SoF: Reading books/notes/scrolls now works.

==4/25/2009==
Derision: SoF: Ranged attack animations.
Derision: When shooting a bow, there is no longer a superfluous 1HS animation.

==4/23/2009==
Trevius: (realityincarnate) Added new quest command quest::varlink(item_id) for putting item links into variables.
Derision: Fix for Tradeskill combines where a LORE ingredient is returned.
Derision: Fix for pet names containing spaces losing the space after zoning/camping.
Derision: Fixed bug where Return Home sent players bound in Grobb to Qeynos/Unknown Zone.

==4/22/2009==
Derision: When Tribute is manually deactivated, it should stay deactivated.
Derision: Tribute will not continually try and reactivate when you run out of tribute points.

==4/20/2009==
Derision: Added EVENT_PROXIMITY_SAY

==4/19/2009==
Wolftousen: Player Flurry rate was slightly increased
Wolftousen: Player Flurry messages will now show up as red text, but use the same filter as NPC flurry messages
Wolftousen: Rage Volley no longer requires you to have an thrown weapon in your ranged slot
Wolftousen: Rage Volley now uses the proper damage calculation and is not based on the item you have in the ranged slot
Wolftousen: Rave Volley can no longer be dodged/blocked/parried/reposted.
Wolftousen: Procs from Buffs have been tweaked to go off more often Wolftousen: Players will now receive the "proper" bonus HP for stamina above 255.
Wolftousen: Knight class Tactical Mastery AA was implemented and should now give the strike through message
renoofturks: Created rule Aggro:StunAggroMod to dial in on aggro of stun based attacks.
cavedude: Reverse DS and some DS will now cause aggro on intial cast.
realityincarnate: Controllable boats should now work. Please see: http://eqemulator.net/forums/showthread.php?p=167892#post167892 for additonal information.
realityincarnate: Safe fall skill up is now checked on failure.

Optional SQL:

INSERT INTO rule_values VALUES(1,'Aggro:StunAggroMod',750);

==4/18/2009==
Derision: Changed Account Session Limiting to kick off the old connection and allow the new one.
drakelord: Rest State HP and MP Bonus
Derision: SoF - Combat/Rest state indicator now works.
Derision: No longer need to zone for /corpse to work.
Derision: Fixed Bazaar bug.

Optional SQL:

INSERT INTO rule_values VALUES(1,'Character:RestRegenPercent',0);
INSERT INTO rule_values VALUES(1,'Character:RestRegenTimeToActivate',30);

==4/13/2009==
Congdar: Bots - Fix release vs. debug compile for focus effects, updated bots to new attack code.

==4/13/2009==
Trevius: SoF - Corrected corpse looting slots so that the correct item is looted when there are multiple on a corpse
Trevius: SoF - Item Links from corpse looting messages now display properly for both client versions
Derision: Personal Tribute should now have an effect serverside, rather than just showing increased stats in the client.
Derision: Deactivating Tribute should no longer crash the client.
Derision: SoF - Personal Tribute should now work.

==4/12/2009==
Trevius: SoF - Commands that return itemlinks will now show the full name instead of cutting off the first 5 characters
Trevius/Derision: SoF - Fix for subitem serialization.
Derision: SoF - Corrected money update opcodes.
Derision: SoF - Bazaar Trader mode.

==4/11/2009==
Trevius: SoF - Stopped the bogus "Deleting Item" messages from being sent to SoF Clients
cavedude: (Congdar): You can now safely delete a key item after its been added to your keyring.
cavedude: (realityincarnate): Added quest::MerchantSetItem and quest::MerchantCountItem to add temp items to a merchantlist. See Wiki for usage.
cavedude: Added rule World:MinGMAntiHackStatus to manage the min status checked against the GM AntiHack list.
Derision: Sof: Added support for regular /who

==4/10/2009==
Derision: Tradeskill recipes involving weapons as an ingredient should no longer dupe the weapon.
Derision: Expendable items with charges are now deleted when the last charge is used.
Derision: Tradeskill skillups now based on unmodified skill level.
Derision: (realityincarnate): Prevent bard skillups for instruments they aren't trained in.
Derision: (realityincarnate): Implemented SE_Hunger (e.g. for Song of Sustenance).
Derision: (realityincarnate): Undying armor by setting RGB to 255 255 255 fixed.
Derision: (realityincarnate): Title suffix quest command, Syntax: $client->SetTitleSuffix(title)
Derision: (erde): cleanipc fix for GCC 4.3.2
Derision: (BWstripes): Beastlord pets are now named SoAndSo's Warder.

==4/09/2009==
Derision: Fix for Alchemy, Poison Making and Tinkering.

==4/08/2009==
Derision: Added $client->GetClientVersion(). Returns: 1 (6.2 Client), 2 (Titanium), 3 (SoF)

==4/07/2009==
Derision: Fixed crash in chatserver.
Derision: Fixed possible crash in QuestManager::attacknpc

==4/06/2009==
Derision: (Image): Check packet length is at least 4 bytes in EQStream::ProcessPacket
Derision: (Image): EQStreamFactory::ReaderLoop - Assure that the incoming buffer contains an opcode to analyze.
Derision: (Image): Sanity checks on OP_SessionResponse/OP_SessionStatRequest size in EQStream::ProcessPacket

==4/05/2009==
Derision: GM Training: SoF - Points now update correctly in the Training Window.
Derision: GM Training: Points now update correctly in the Training Window for languages.
Derision: GM Training: The correct amount of money is deducted from the player profile.
Derision: SoF - Mapped findable field in Spawn struct and OP_FindPersonRequest/Reply.
Derision: SoF - Duelling now works.
KLS: Compile option to ignore login fatal errors in world.

==4/04/2009==
Derision: Tracking: Now works in SoF and as a side effect, Tracking 'sort by distance' works properly in 6.2 and Titanium clients.

==4/03/2009==
Congdar: Bots - Added Healing and Lifetap AA's and Focus Effect support
Derision: SoF - Fix for incorrect animation (NPCs frozen/walking while standing still).

==3/29/2009==
Derision: SoF - OP_PetBuffWindow, OP_Charm, OP_Stun

==3/28/2009==
Derision: SoF - Tasks now work.
Derision: SoF - OP_Sacrifice, OP_Sound, OP_OnLevelMessage, OP_PopupResponse
Derision: Item Links in Task Descriptions are now formatted correctly based on the client version.

==3/25/2009==
Derision: 'Hack' to display Froglok/Drakkin corpses correctly.
Derision: SoF - OP_Translocate & OP_LevelAppearance

==3/23/2009==
Trevius: SoF - Corrected Right Click item effects so they no longer fizzle
Trevius: SoF - Right Clickable item effects with set recast delays now observe that delay properly
Trevius: SoF - Item Effect Charges now get used and updated properly
Trevius: SoF - Food and Drink are now consumed at the proper rates

==3/21/2009==
Derision: Implemented 'Your total time entitled on this account' in /played.

==3/20/2009==
Trevius: SoF - Fixed a fairly major crashed caused when attempting to use the 8 new bank slots, or shared bank
Trevius: SoF - Banking is now fully functional including the 8 new bank slots, shared bank and bag slots in the bank
Trevius: SoF - Bandolier and Potion Belt are now both functional
Trevius: SoF - Filled in multiple missing opcodes

==3/19/2009==
Trevius: SoF - Grouping should now be fully functional
Trevius: SoF - (Xinu) Added many missing opcodes
Angelox: Bots- More mobs for the "#bot track rare" filter.
Derision: Fixed memory leak in Chatserver /announce processing.

==3/15/2009==
Trevius: SoF - Tradeskill Objects/Containers and Augment Pools should now be fully functional
Trevius: SoF - PC to PC/NPC trading should now be fully functional without bugs
Trevius: SoF - Auto-Consume and Right Click consume of food/drink is functional
Trevius: SoF - Right Click Effects on Items now works in most cases, but needs coding to clean it up a bit
Trevius: SoF - Spell Interrupts are now functioning properly

==3/15/2009==
cavedude: (realityincarnate) Languages can now be taught to other players. Also implemented drunk speak.
cavedude: (realityincarnate) Bonuses will now properly apply when switching items with bandolier.
cavedude: (realityincarnate) Corrected some instances of Bard songs that were incorrectly requiring an instrument.
cavedude: (Wolftousen) Fixes for Rage Volley, Blur of Axes, and Dead Aim.
Derision: Spells that damage the caster will now do full damage.
Congdar: Spells that summon items with charges will now summon said item fully charged.
Angelox: Bots:Added a few more mobs to the "#bot track rare" filter.
Congdar: Bots - Added commands #bot saveraid, #bot spawnraid, #bot groupraid
	required sql: utils\sql\svn\386_bot_save_raid.sql

==3/14/2009==
Trevius: SoF - Tradeskill/Augment Combines in tradeskill containers/objects now works, but currently bugs players when they close the window.
Derision: Fixed bug when activating a bandolier set without a required item in your inventory.
Trevius: SoF - Identified more fields in the Spawn Struct; Face, LFG, Beard, ShowHelm and more

==3/13/2009==
Trevius: SoF - Added a few more encodes/decodes to resolve more slot change issues related to the addition of the Power Source Slot
Trevius: SoF - Ammo now depletes properly when used.  Probably some other minor issues resolved by this change as well.

==3/12/2009==
Trevius: SoF - AAs can now be trained and will update without needing to zone. Point Spent is still wrong.
Trevius: SoF - Char Select now shows Primary and Secondary items properly.

==3/10/2009==
Trevius: SoF - PC to PC/NPC Trading now works, though canceling a trade will bug the character and require them to zone or relog
Trevius: SoF - Players can now sell to merchants
Trevius: SoF - Corrected a bug introduced in Revision 376 that was causing single stackable items to not be stackable

==3/09/2009==
Trevius: SoF - Buffs and debuffs now last for the correct duration.

==3/08/2009==
Trevius: SoF - Corrected Item Struct to fix the issue with non-stackable items showing up as being stackable
Trevius: SoF - Identified an unknown field in Item Serialization as being item charges and set it accordingly so that items should now show accurate current charges.
Trevius/Xinu: SoF - Adjusted a few opcodes for more accuracy - No visible change yet

==3/07/2009==
Trevius: SoF - AAs now show up in the AA window, but do not give bonuses yet.
Trevius: SoF - Spent AA points are partially showing up, but still need work.
Trevius: SoF - Updated some grouping structs, but grouping still isn't working just yet
Trevius: SoF - Buffs can now be clicked off, but the duration still isn't working for them
cavedude: Added new AA, group, and raid EXP multiplier rules. Removed the associated variables.
cavedude: Removed the USE_RACE_CLASS_XP_MODS define as it was outdated and horribly broken.
cavedude: Added group XP bonus. The larger the group, the higher the XP gain.
cavedude: Added XP bonus for Warrior, Rogue, and Halfling.
cavedude: Corrected ZEM for AAs.
cavedude: (Thanks to mackal) Pet Affinity will no longer effect charmed pets.
cavedude: (realityincarnate) Bard songs that require instruments will now require them.

Please note: XP gain has pretty much been overhauled. You may need tweak the multiplier rules for your server.

Optional SQL:

REPLACE INTO `rule_values` VALUES ('1', 'Character:ExpMultiplier', '0.5');
INSERT INTO `rule_values` VALUES ('1', 'Character:AAExpMultiplier', '0.5');
INSERT INTO `rule_values` VALUES ('1', 'Character:GroupExpMultiplier', '0.5');
INSERT INTO `rule_values` VALUES ('1', 'Character:RaidExpMultiplier', '0.2');

==3/03/2009==
Angelox: Fixed most (if not all) npc pet ghosting at zone safepoints.

==3/02/2009==
cavedude: (realityincarnate) Implemented Bard song Magical Monologue
cavedude: (Theeper) Attuneable items will now save over zoning/camping and will no longer auto-loot from corpses.
cavedude: Implemented quest::buryplayercorpse, similar syntax as quest::getplayerburriedcorpsecount. This will bury and depop the oldest of a specified player's unburried coprses. It will bury all corpses, but it only depops corpses in the same zone, or in zones that aren't currently open. Hopefully, somebody else out there can finish this one up so corpse summoners can be implemented.

==2/28/2009==
WildcardX: Begun work on LDoN expansion. Adventure Recruiter window is now operational.

==2/27/2009==
Trevius: SoF - Corrected the NewZone struct a bit, which fixed Fall Damage and Environment Damage
WildcardX: Implemented the rogue skill, Apply Poison. Includes support for the 6.0 client, Titanium and SoF.

==2/26/2009==
Trevius: Added #define options in /zone/attack.cpp to allow an easy switch to use the old hit change code until the new code is finalized.
Trevius: Added new rule MinRangedAttackDist for setting the Minimum Ranged Attack Distance
Trevius: SoF - Updated the SoF opcodes, one of which corrects a false Hacker message and log entry

Optional SQL:
364_ranged_dist_rule.sql

==2/25/2009==
KLS: Fix for backwards rule in anti-spam.

==2/24/2009==
KLS: Added initial anti-spam features to global chat operations at popular request.
KLS: Added option to turn off IP verification in chat and mail servers (for people who use internal networks and find it troublesome).
cavedude: Added peqzone column to zone to allow or deny access to zones using #peqzone.
cavedude: #peqzone will give you the approximate time remaining before reusing.
cavedude: Altered merchant price structure to better match Live. Created rules to govern its behaviour. See ruletypes.h for basic explanations!
cavedude: Added command #givemoney.
Trevius: SoF - Corrected WearChange Struct so primary and secondary items now show properly after zoning and #wc works as well.

Required SQL:
ALTER TABLE `account` ADD `karma` INT(5) UNSIGNED DEFAULT '0' NOT NULL AFTER `revoked`;
ALTER table zone ADD column `peqzone` tinyint(4) NOT NULL default '1';

Optional SQL: 360_peqzone.sql

==2/23/2009==
Trevius: (Xinu) SoF - Many more Opcodes filled in from the client
Trevius: SoF - Doors are now able to open and clickable portals now function as well
Trevius: SoF - Armor tint from dyes is now showing properly
Congdar: Bots: '#bot group remove' now removes any of your spawned bots, if it's a group leader then that whole group

KLS: Changes to combat:
-AC has a slightly higher chance to mitigate into a miss than before
-AC is no more effective per point but the bonus ac every character and npc gets in the calculation has been effectively increased.
-The accuracy falloff from level is now more variable based on defender's level, this should address the issue where at higher levels you can grind npcs that are still blue or light blue at little risk.
-The base chance to hit has been increased.
-Added both hit and avoidance mods for class types that are adjustable by rules.
-Archery now has an accuracy penalty that is rule adjustable, with ranger buffs the penalty should make it so archery is slightly more accurate than melee at default.
-Skill is now a flat 0.33% chance to miss for every point under your max skill you are.
-The benefit from agility to avoidance has been decreased by roughly 33%.
-Maximum chance to hit is now 95%, down from 99%.
KLS: Bug fix in skill up with the skill up mod rule.

Recommended SQL and Optional SQL:
356_combat.sql

==2/21/2009==
cavedude00: Removed Combat:ChanceToHitDivideBy rule. Default value is now Live Like.
	Required SQL: delete from rule_values where rule_name = 'Combat:ChanceToHitDivideBy';
Congdar: Bots: Revert svn328
	Required SQl:	delete from rule_values where rule_name = 'EQOffline:SpawnBotCount';
			delete from rule_values where rule_name = 'EQOffline:CreateBotCount';
			delete from rule_values where rule_name = 'EQOffline:BotQuest';
Congdar: Bots: UN-Revert svn328 + bug fixes
	(if you updated to svn354)
	Required SQl:	328_bot_management.sql
	Optional SQL:	328_optional_bot_management.sql

==02/19/2009==
Trevius: (Xinu) SoF - Many Opcodes filled in from the client
Trevius: SoF - Aligned the Player Profile a bit more.  Should be pretty accurate now
Trevius: SoF - Added Drakkin race again for use of equipment.  Should work correctly this time.

==02/19/2009==
KLS: SoF - Fix for ammo
Angelox: Bots: Fixed '#bot track' command
Angelox: Bots: Fixed broken entry in BotAI.cpp for '#bot track rare' command
Angelox: Bots: 'Fixed #bot gate airplane' typo
Congdar: Fix for Flash of Steel AA

==02/18/2009==
Trevius: SoF - Combat Damage message now show up in the chat window
Trevius: SoF - GM Skill Trainers will now actually train skills
Angelox: Bots: Added emerald, skyfire, hateplane, skyplane to command #bot gate.
Trevius: SoF - Backed out item stat fix for SoF due to it causing the problem to happen in Titanium

==02/17/2009==
Trevius: SoF - Added Drakkin race to the source so $race and probably other race related stuff can use it.
Trevius: SoF - Added multiple opcodes
Trevius: SoF - Cleaned up the patch_SoF.conf file some
Derision: SoF - Enter Tutorial/Return Home buttons work - Enter Tutorial directly on char creation does not.
Derision: SoF - OP_ZonePlayerToBind (no more disconnection on death).
Derision: SoF - Target nearest NPC (F8) now works.
Derision: SoF - /who all now works.
cavedude00: SellRate column in items will now help determine an item's sell price.
cybernine186: Optional system to ensure GMs are logging on from a known IP.
Trevious: SoF - Drakkin now gain stats from items and weapons now work for combat
Trevious: SoF - Drakkin now start with Common Tongue, Dragon and Elder Dragon Languages maxed

Required SQL: utils/sql/svn/340_gm_ips.sql

==02/16/2009==
Trevius: SoF - The Item Struct should be aligned almost perfectly now.
Trevius: SoF - Merchant Lists, Buying and Selling are now all functional
Trevius: SoF - Looting Items and Currency from Corpses is now functional
Trevius: SoF - Item Links are now functional
Trevius: SoF - Combat animation is now functional
Trevius: SoF - More opcodes added/updated
Trevius: SoF - Titanium users will now see Drakkins (and any race over 473) as a normal Human race

==02/15/2009==
KLS: SoF - Item movement and bag support.
AndMetal: Augments are now visible when linking items.
Trevius: SoF - Adjusted the new Item Structure to align more fields
Trevius: SoF - Added OP_Consume and OP_LootRequest opcodes
cavedude00: (AndMetal) AAs now use skill_id instead of index for prereqs.
cavedude00: (mackal) Implemented Improved Instrument Mastery, Improved Singing Mastery, and Echo of Taelosia AAs.
cavedude00: Created Combat:ChanceToHitDivideBy rule and increased default value to 1250.
	Required and Optional SQL: utils/sql/svn/326_aas.sql
KLS: SoF - Fix for item slots in bags.
KLS: SoF - Added work around for client inventory, it should no longer crash and items shouldn't fail to load. *fingers crossed*
KLS: SoF - Implemented summon item packet.
Congdar: Bots - Expaneded BotCount Management
	required sql: utils/sql/svn/328_bot_management.sql
	optional sql: utils/sql/svn/328_optional_bot_management.sql


==02/14/2009==
Derision: SoF - New struct for OP_ExpansionInfo
Derision: SoF - Character Creation now works.
Derision: SoF - support now compiled in by default.
Derision: Small changes to compile SoF under Windows
KLS: SoF - initial inventory load.
KLS: Change to streams, streams will now initialize to an unestablished state instead of closed.  Prevents a race condition that would cause the client to hang on identification.
Trevius: SoF - Identified most or all needed fields in the illusion struct for future use.
WildcardX: Made Perl v5.10 the default for WIN32 compiles.
WildcardX: (Angelox) Added many header declarations to make gcc v4.3 happy.

==02/13/2009==
WildcardX: Compatibility for Perl 5.10. WIN32 compiles will still need to rename perl58.lib to perl510.lib.

==02/12/2009==
Trevius: Identified the Size, Eye Color and Texture fields in the SoF spawn structure.
Trevius: Added multiple Opcodes for SoF

==02/12/2009==
cavedude00: Added #findzone (#fz) command to aid in getting a zone's short_name or id.
cavedude00: #peqzone now accepts both short_name and zoneidnumber.

==02/09/2009==
Angelox: Bots:Added command '#bot corpse summon' for Necromancer.

==02/08/2009==
Trevius: Corrected Z Coordinate on clientupdates in SoF.  All Client and NPC positition structures should now be accurate
Trevius: Corrected the Object structure in SoF.  Objects should now all load in the correct location and size.
Trevius: Added a few new Opcodes for SoF.
Trevius: Corrected the Opcode for OP_RequestClientZoneChange - Zoning is now fully functional including zone commands

==02/07/2009==
cavedude00: Added faction modifiers for Berserker and Froglok.
Derision: Fixed item load failure when using MySQL 5.1.

Required SQL:
ALTER TABLE `faction_list` ADD COLUMN `mod_c16` smallint(6) NOT NULL default '0' AFTER `mod_c15`;
ALTER TABLE `faction_list` ADD COLUMN `mod_r330` smallint(6) NOT NULL default '0' AFTER `mod_r161`;

==02/05/2009==
Trevius: NPC coning is now working in SoF.
Trevuis: NPCs and Players can now be targeted in SoF.
Trevius: Corrected the illusion packet structure in SoF so helm change will work with the #fixmob command
Trevius: Adjusted the #fixmob and #race commands to allow up to 586 races (the max for SoF)
Trevius: Client Self position updates now report correct X, Y, and Heading in SoF, but still need Z corrected.
Trevius: All other position updates (NPC or other clients) now seems to be accurate.
Trevius: Names are now viewable over NPC and Player's heads
Angelox: Bots: charm level problem fixed.

==02/04/2009==
Derision: Fixed ammo consumption.

==02/02/2009==
Derision: Fix for temp merchantlists where a merchant has a single item with slotid=1

==02/01/2009==
Angelox: Bots:(leslamarch) corrected the'#bot gate [combines]' typo.
Angelox: Bots: Added '#bot dire charm'.
Angelox: Bots: Both 'charm' and 'dire charm' will now choose from three charmer classes.
Angelox: Bots: Added '#bot pet remove' (can't charm a mob while sporting a pet).
Angelox: Bots: Fixed exploit where player could remove charmed mobs at will.
Derision: Merchant lists with gaps should now not cause problems wih temporary merchant lists.
Derision: Logging to the eventlog table for trades with NPCs is now controlled by two rules rather than the loglevel variable.

Required SQL:
ALTER TABLE `eventlog` ADD `event_nid` INT NOT NULL DEFAULT '0';

Optional SQL:
INSERT INTO `rule_values` VALUES (0, 'EventLog:RecordSellToMerchant', 'false');
INSERT INTO `rule_values` VALUES (0, 'EventLog:RecordBuyFromMerchant', 'false');

==01/31/2009==
Trevius: Adjusted the NewZone Structure for SoF - Players can now move and spawns appear in place
Trevius: Adjusted the WearChange Structure for SoF - Armor shows, but need Tint to work still
Trevius: Adjusted the Object Structure for SoF - Objects now load, but need more work
Trevius: Added many new opcodes for SoF
Trevius: Adjusted when SendExpZonein is sent for SoF only
Trevius: Added new Opcode List file for SoF development purposes only

Note: You must move the patch_SoF.conf file from /utils into your server directory for the opcode updates

==01/31/2009==
Derision: Tweaks to temp merchant list window updates.
cavedude00: Renamed the AugSlotUnk items columns to AugSlotVisible.

Required SQL: utils/sql/svn/292_augslots.sql

==01/29/2009==
KLS: VC71 solution files.

==01/28/2009==
Angelox: Bots: Added a directory with the BOT Makefiles for Windows and Linux.

==01/27/2009==
Derision: Bazaar bug fix.
Angelox: Bots: Added command '#bot runeme' (Enchanter Rune spells)

Optional SQL: utils/sql/svn/285_optional_bot_spell_update.sql (removes auto-runes)

==01/24/2009==
Trevius: Initial Addition of Secrets of Faydwer Patch files.  Must uncomment the #define in common/patches/patches.cpp to use SoF for now.

==01/22/2009==
Derision: Fixed a buffer overflow problem.

==01/19/2009==
cavedude00: Increased itemid limit to 120,000.
cavedude00: Meditate will now skill up at a more Live Like speed.

==01/18/2009==
Derision: Fixed a cause of zone crashes.
Congdar: Worn items with charges will no longer delete when the charges are used up.

==01/17/2009==
Derision: Fixed several cases of integer overflow relating to moving large amounts of money around.
Angelox: Bots: Added command '#bot gate', for Druid Circles or Wizard Portals (Druid Primary).
Angelox: Bots: Changed BotCount to RULE_INT.

==01/16/2009==
Derision: Implemented voice macros (CTRL-V). Update your opcodes.
Derision: Food and drink should no longer be auto-consumed in the Bazaar
Derision: Added rule Spells:TranslocateTimeLimit. If >0, translocate must be accepted within this number of seconds.

Optional SQL: (Required to enable voice macro use on your server

REPLACE INTO `rule_values` VALUES (0, 'Chat:EnableVoiceMacros', 'true');

==01/14/2009==
Derision: Fixed makefile references for rulesys.o
Derision: Mapped field in LogServer_Struct to allow voice macro window to be opened (needs work on Opcodes to make it functional).

==01/12/2009==
Derision: Removed code that stole all your money if you logged on with more than 1 million of any denomination of coin on your person.

==01/11/2009==
Angelox: Bots: Added rule 'EQOffline:BotCount' defaults to 5, for desired amount of bots in the group - values are 0-5 (0 means bots are disabled, max limit is 5).
Derision: Mail/Chatchannels: Added sanity check on packet size in EQPacket::ChatDecode.
Derision: Mail/Chatchannels: Increased stream timeout from 45 to 135 seconds.
Derision: Mail: Use correct opcodes for sending Headers.  **utils/mail_opcodes.conf updated**
Derision: Chatchannels: Recognise and ignore AFK command.
Derision: Chatchannels: Added uptime command (usage ;uptime or /chat uptime).
Congdar: Bots: Added Lore item check to command #bot inventory remove

==01/08/2009==
Congdar: Bots: Fix compile issue under linux for Visible Gear update.

Angelox: Bots: Updated required SQL, utils/sql/svn/250_bot_spell_update.sql (some spells were still being auto-casted)
Derision: Chatserver: Fix for crash when multiple connections are made in quick succession.

==01/07/2009==
Angelox: Bots: Added command '#bot charm' (requires enchanter in group). Charm does not work while Chanter has pet so I added the grouped Chanters pet to '#bot group remove' (remove the pet before #bot charm).
Angelox: Bots: '#bot sow wolf' should not affect pets anymore.
Derision: Chatserver: Added some extra syntax error checking to prevent crashes.
Angelox: Bots: Added Wizard class and level check to the '#bot evac' command
Angelox: Bots: Added '#bot invis see' for see invisible
Required SQL:
DELETE FROM npc_spells_entries where (npc_spells_id >=701 and npc_spells_id <=712) AND spellid=80;
Congdar: Fix NPC::RemoveItem(uint16 item_id) to uint32 to work with items that have id's larger than 65535. '#npcloot remove [itemid]' will now successfully remove items with larger id's from npc loot.
Congdar: Bots: Visible gear will now show correctly when trading/equipping bots.

==01/05/2009
Angelox: Bots: Re-did command '#bot cure'- one of three Curer class (Cleric is primary), will ask what you want if you use '#bot cure' alone.

==01/04/2009==
Angelox: Bots: Added command '#bot endureb' (enduring breath).
Angelox: Bots: Hopefully fixed bug where other sowers replaced primary sower (Druid).

==01/03/2009==
Angelox: Bots: remade/improved commands '#bot levitate'and '#bot invis'

==01/02/2009==
Congdar: Bots: update command #bot inventory list   Now shows gear as item links.  Removed (Bot) as last name during bot creation.
Optional SQL: update npc_types set lastname='' where isbot=1;

==01/01/2009==
Angelox: Bots: Added command '#bot sow' (Druid has options)
Angelox: Bots: Added command '#bot levitate'.
Angelox: Bots: Added command '#bot invis' - (has options).

Required SQL: utils/sql/svn/250_bot_spell_update.sql

Angelox: Bots: Added command '#bot resist' (has options, don't use optional sql if you don't want).

Optional SQL: utils/sql/svn/250_optional_bot_spell_update.sql

Derision: Added chatserver for Chat Channel support. mail_opcodes.conf updated in utils.
Derision: See: http://www.eqemulator.net/wiki/wikka.php?wakka=ChatChannels

REQUIRED SQL:

CREATE TABLE `chatchannels` (
  `name` varchar(64) NOT NULL,
  `owner` varchar(64) NOT NULL,
  `password` varchar(64) NOT NULL,
  `minstatus` int(5) NOT NULL default '0',
  PRIMARY KEY  (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

also see utils/sql/svn/249_chatchannels.sql for suggested system channels.

==12/31/2008==
Congdar: Bots: Added rule EQOffline:BotManaRegen default 1.0 is fastest. 3.0 is closer to player regen rates
Congdar: Bots: Added rule EQOffline:BotFinishBuffing default true. Allows out of combat buffing to complete even if the bot is out of mana.
Congdar: Bots: Fixed bug where bot ownership could change to somebody else.
Congdar: Bots: Added caster AA's for critical damage

==12/27/2008==
Trevius: Changed QueryLoot so that commands that use it (#npcstats & #npcloot show) will now show Item Links instead of just Item Names.
Trevius: Added Item Links to #peekinv
Trevius: Added new console command "LSReconnect" to allow manually restarting the auto Login Server connect loops if they stopped for any reason
Trevius: Added a Reconnect option in the Web Tool to allow auto Login Server connect to restart if it has stopped and is not connected already.
Derision: New program, mailserver, to implement in-game mail. See: http://www.eqemulator.net/wiki/wikka.php?wakka=MailServer,
	  or mailserver/readme.txt

Required SQL:

CREATE TABLE `mail` (
  `msgid` int(10) unsigned NOT NULL auto_increment,
  `charid` int(10) unsigned NOT NULL,
  `timestamp` int(11) NOT NULL default '0',
  `from` varchar(100) NOT NULL,
  `subject` varchar(200) NOT NULL,
  `body` text NOT NULL,
  `to` text NOT NULL,
  `status` tinyint(4) NOT NULL,
  PRIMARY KEY  (`msgid`),
  KEY `charid` (`charid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

ALTER TABLE `character_` ADD `mailkey` CHAR( 16 ) NOT NULL ;

==12/22/2008==
Trevius:(Denivia) Pets that are on Hold will now follow their master
Trevius:(Denivia) Pets will no longer try to attack corpses

==12/20/2008==
KLS: Removed old unused Guildwars, RaidAddicts and GroupLinking code.

==12/19/2008==
KLS: Updated how spawn timers work, spawn timers will now be based off absolute time like regular timers which will allow them to tic down even when the server is offline.
KLS: Quest::clearspawntimers() has been disabled for now, will be reactivated in next update on spawn timers.
KLS: Likewise #repop force has been temp. disabled as well pending updated code.
=Update=
KLS: Enabled Quest::clearspawntimers() and #repop force once again.
KLS: Added quest::updatespawntimer(id, duration) to update the respawn time of a dead mob, this only applies if the mob is dead and will only apply once: ie. once the mob repops and dies again it will use it's normal respawn time unless this is called again. Not completely tested.
KLS: creategroundobject constructor should create objects with max charges now. Untested.

Required SQL:
DROP TABLE IF EXISTS `respawn_times`;
CREATE TABLE `respawn_times` (
  `id` int(11) NOT NULL default '0',
  `start` int(11) NOT NULL default '0',
  `duration` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `spawn2` DROP `timeleft`;

==12/15/2008==
KLS: Added 2nd pass to heal aggro to correctly divide aggro between those recieved not just give all recieved full aggro.

==12/13/2008==
Derision: Fixed a couple of causes of combat related zone crashes.

==12/12/2008==
Derision: Name of the seller now reported correctly in the /buyer window.

==12/09/2008==
AndMetal: Added Client::MakeItemLink function, which allows for augments in Item Links. Can be used for Chat & Task windows. See zone/inventory.cpp for detailed notes on usage in the source.
AndMetal: Updated quest::itemlink & loot drops to use MakeItemLink.
AndMetal: (trevius) Fixed a small typo in utils/export_spells.pl.

==12/08/2008==
Trevius: Changed #itemsearch output to now place itemlinks for all items it outputs from the search
Trevius: Increased the max results of #itemsearch from 20 up to 50
Trevius: Added alias #fi as an abbreviation of #finditem, to shorten the command
Trevius: Changed the default required status for accounts to access item search commands to min status of 10 (previously 0)

==12/01/2008==
Trevius: Moved mounts (Horses/Drogmors) into their own table instead of them being hard coded in the source.

Required SQL: utils/sql/svn/235_horses_table.sql

==11/26/2008==
cavedude00: Traps will no longer be trackable.

==11/24/2008==
AndMetal: Spells can now be loaded from the database, and is now enabled by default. Use utils/import_spells.pl to import, utils/export_spells.pl to export. Use -h on either for usage.
Trevius: Food and Drink will now actually give stats.

Required SQL: utils/sql/svn/229_spells_table.sql

==11/22/2008
Trevius/AndMetal: Corrected the output of #showstats to provide accurate Attack Rating calculations.
Derision: Initialise animation to zero in the Mob constructor to prevent players sometimes appearing to run off when they first spawn.
Derision: /buyer /barter fix.
Trevius: Added Account Limiting to allow limiting how many characters can be logged in per account at once - See Optional SQL.

==11/20/2008
Derision: Implemented /buyer (cash compensation only) and /barter. Update your patch_Titanium.conf from the utils directory.

REQUIRED SQL:

DROP TABLE IF EXISTS `buyer`;
CREATE TABLE `buyer` (
  `charid` int(11) NOT NULL,
  `buyslot` int(11) NOT NULL,
  `itemid` int(11) NOT NULL,
  `itemname` varchar(65) NOT NULL,
  `quantity` int(11) NOT NULL,
  `price` int(11) NOT NULL,
  PRIMARY KEY  (`charid`,`buyslot`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

ALTER TABLE `trader_audit` ADD `trantype` TINYINT NOT NULL DEFAULT '0';


==11/20/2008
cavedude00: (aza77) Added quest::collectitems.
cavedude00: (Rocker8956) Zones with IDs higher than 255 can now be instanced.

==11/19/2008
seveianrex: (Varkalas) WAR Sturdiness AA Fix
AndMetal: zone-*.log files on Linux will allow read access to group members. You may need to erase any existing logs to see the change.
AndMetal: Added some logging for spell crits (SPELLS__CRITS)

==11/18/2008
Derision: Bazaar: Added support for changing prices without ending Trader mode.

==11/16/2008
Derision: Added command 'undyeme' to restore all a player's armor slots to their natural undyed state.
Trevius: (Denivia) Changed Expansive Mind AA so that it raises the Worn Mana Regen Cap (as it should) instead of just increasing mana regen.
Derision: Bazaar bug fix relating to items with -1 max charges.

Optional SQL:

INSERT INTO commands (command, access, description) VALUES ('undyeme', 0, 'Remove dye from all of your armor slots');

==11/15/2008
seveianrex: Implemented AA use of SE_Accuracy (Ranger GoD AA "Precision of the Pathfinder" will have an effect now)
seveianrex: Implemented Enchanter GoD AA "Mesmerization Mastery"
seveianrex: Adjusted Monk Kick Mastery damage modifiers slightly.
Derision: Using Find Trader in the Bazaar will teleport you to the Trader.
Derision: Added Rule Bazaar:EnableWarpToTrader, default true.
Derision: Added Rule World:TutorialZoneID, default 189 (tutorialb).
Derision: MinPrice/MaxPrice in the Bazaar search window are now interpreted correctly as values in Platinum.
Derision: Bazaar bug fix.

==11/14/2008
seveianrex: Adjusted Coat of Thistles AA modifier.
seveianrex: Implemented Pet Crits for NEC/MAG/BST (Deaths Fury, Elemental Fury, Warders Fury GoD era AAs)
Derision: Bazaar Trader mode (not Barter). Please test it well.
Derision: Updated OP_ShopDelItem for Titanium.

REQUIRED SQL:

DROP TABLE IF EXISTS `trader`;
CREATE TABLE `trader` (
  `char_id` int(10) unsigned NOT NULL default '0',
  `item_id` int(10) unsigned NOT NULL default '0',
  `serialnumber` int(10) unsigned NOT NULL default '0',
  `charges` int(11) NOT NULL default '0',
  `item_cost` int(10) unsigned NOT NULL default '0',
  `slot_id` tinyint(3) unsigned NOT NULL default '0',
  PRIMARY KEY  (`char_id`,`slot_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `trader_audit`;
CREATE TABLE `trader_audit` (
  `time` datetime NOT NULL,
  `seller` varchar(64) NOT NULL,
  `buyer` varchar(64) NOT NULL,
  `itemname` varchar(64) NOT NULL,
  `quantity` int(11) NOT NULL,
  `totalcost` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

UPDATE doors set opentype=155 where opentype=154 and zone='bazaar';

==11/12/2008
Congdar: Bots: add command #bot lore - Casts Identify on the item on your mouse pointer
seveianrex: Tweaked the Slay Undead damage to once again. Damage should be in-line with live numbers now.
Angelox: (Kobaz): Fix for 'PIC register bx clobbered in asm' error
Angelox: Improved filtering on [bot track rare] option for Ranger
Angelox: Added option [bot track near] for Ranger

==11/11/2008
Congdar: Bots: fix ghosting when runnning up to targets

==11/10/2008
Trevius/Derision: Fix for GM Training Point exploit when de-leveling and leveling up again

==11/10/2008
Derision: Implemented Looking For Group/Looking For Players Window. patch_Titanium_conf has been updated.
Derision: Visual Studio users should add world/lfplist.h and world/lfplist.cpp to their project.

REQUIRED SQL:

ALTER TABLE `character_` ADD `lfp` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '0';
ALTER TABLE `character_` ADD `lfg` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '0';

==11/08/2008
Congdar: Bots: add command #bot resurrectme
Congdar: Bots: modify heal ai, more mana calcs
Congdar: Added Rule to allow melee to bind anywhere casters can bind, default is false
optional sql:
	insert into rule_values values (1, 'Character:BindAnywhere', true);
seveianrex: Figured out what was crashing ranged procs. Is fixed and fully implemented now. Rangers rejoice..
seveianrex: Modified the way #melody works to improve the delay between songs being casted. Bards rejoice..

==11/07/2008
seveianrex: GoD Rogue AA's: Seized Opportunity, Triple Backstab implemented
seveianrex: (LeftRoad) Provide a damage message to client when mob is killed by a spell
Congdar: Bots: reduce spam, fix crash when fighting Dain, change mana/hp from npc to client like calcs
Congdar: make heading calculation more efficient, change sint8 to float for float calculations and heading variable
seveianrex: Added #melody as a supplement for /melody until the OPcode can be located. Don't forget to:

INSERT INTO commands (command, access, description) VALUES ('melody', 0, 'A supplement for /melody until the OP code is found.')

seveianrex: Added support for defensive and ranged spell-effect based procs. Having some zone-crash issues with the ranged proc code for some reason, so it's commented out until I can fix it.

==11/05/2008
Derision: Dyed armor color should now show up correctly to other players.
Derision: Implemented the Potion Belt.

==11/03/2008
seveianrex: Added some scaling to the way NPC hitboxes are calculated. This corrects some of the issues with mobs like Wurms/Dragons who you could hit from miles away.
seveianrex: NPCs who are 5% HP or lower, are fleeing, and have a decent snare on will no longer cover so much distance.
seveianrex: Implemented Mob::GetSnaredAmount() function, utilized in the above. Returns the ABS() value of the snare.

==11/01/2008
seveianrex: GoD AA Implementations: [CLR] Touch of the Divine, [BRD] Internal Metronome, [SHD] Improved Consumption of the Soul
Derision: Allow backtick through the CleanName filter.
Derision: Pickpocket should no longer occasionally bug the UI.
Derision: Pickpocketing money should no longer show twice the amount taken in the client.
Derision: Looting stackable PVPItem now works.
Derision: Client now updates correctly when a charge on an item with a right click effect is used. Update your patch_Titanium.conf

==10/31/2008
seveianrex: Monk updates: Strikethrough AA, Mend Worsen Frequency Tweak, Kick Mastery AA Fix
seveianrex: Implemented Pet Flurries for MAG/BST/NEC
Derision: Extended quest::popup to take optional PopupID and buttontype (OK or YES/NO) fields.

==10/30/2008
KLS: Spell crits should work reasonably well once again.
Derision: Fixed inability to jump introduced in Rev161.

==10/29/2008
Derision: Mobs in water should no longer sink to the bottom.
cavedude00: Added rule to enable DeathExpLossMultiplier, or to use server code default.

Optional SQL:
Insert into rule_values values (0, 'Character:UseDeathExpLossMult', 'true');

==10/27/2008
seveianrex: Added server-side code for WAR sturdiness AA
Angelox: (Cbodmer) Experience loss based on cbodmers formula with added rule to regulate loss amount
Trevius: (Denivia) Added Critical Spell Damage for Lifetaps with the proper AAs

Optional SQL (options are 0-10, defaults to 3):
Insert into rule_values values (0, 'Character:DeathExpLossMultiplier', 3);

==10/26/2008
Derision: Implemented Bandolier. Test thoroughly before trusting it with your Epic.
Derision: Minor change to enable the spell Tiny Companion to work.

==10/25/2008
seveianrex: Slay Undead tweak + message gender fix, Tradeskill message gender fix
Trevius: Updated SQL file for R142 to correct some altadv_vars AA table issues with AA requirements

==10/24/2008
seveianrex: Implemented various GoD AAs: Coat of Thistles, Rapid Strikes, Elemental Durability, Subtlety2, Strengthened Strike, Vicious Smash
seveianrex: Implemented GoD Monk AA "Kick Mastery"
Trevius: Adjusted the new Frenzy AAs code to fix a crash
Trevius: Removed the Shield Block for Paladin/SK AA until code is revised and working
Trevius: (Denivia) Added Advanced Theft of Life and Soul Thief for Necros and SKs
Trevius: (Denivia) Added Death Peace AA
Trevius: (Denivia) Added Blur of Axes and Vicious Strike AAs for Berserkers
Trevius: (Denivia) Added Shield Block AA for Paladin/SK
Derision: 'Killing' LDoN chest type objects(e.g. Vermin Nests) will now update kill activities.
KLS: Revert Lag fixes that were causing movement and facing abnormalities.
KLS: Fix to a few problems with quest::creategroundobject that was causing it to not work in some situations.

==10/23/2008
Congdar: Clone NoDrop removal code to NoRent, Lore, NoTrade.  Optionally enabled in the db Variables table DisasbleNoDrop=1 DisableNoRent=true DisableLore=1 DisableNoTrade=1
Congdar: Bot code cleanup, method call reduction
Congdar: Bot DoubleAttack method is more like clients
Congdar: Remove AFK leveling with bots
Angelox: Added command '#Bot evac' for Druid bots
Angelox: Added command '#Bot target calm' for Enchanter or Cleric bots
Trevius: Removed the * 10 multiplier from the SE_ProcChance since it isn't needed
KLS: Zone appearance should update for players zoning.
KLS: Added command #modifynpcstat
KLS: Added quest::modifynpcstat(identifier, value)
KLS: Fix potential crash in MobProcess
KLS: Added decay option to CreateGroundObject
KLS: Added spelltype mez(2048) and spelltype in combat buff(1024).
KLS: Setting level for npcs will now update their spawn level too.
KLS: Fix potential memory leak in item link code.
KLS: Changed resists a bit.
KLS: Added rule: Spells:ResistPerLevelDiff(85) 8.5 resist points per level diff
KLS: Added rule: Combat:BaseHitChance(54.0)
KLS: Added rule: Combat:HitPerLevelDiff(145) 45% per level diff
KLS: Added rule: Combat:AgiHitFactor(0.015)
Derision: Added 'Repeatable' column to to tasks table. Default 1 (true).

Required SQL:

ALTER TABLE `tasks` ADD `repeatable` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '1';

==10/22/2008
AndMetal: Fix for item links to prevent occasional zone crashes
AndMetal: Critical DOTs should now work correctly
AndMetal: Fixed sql/svn/125_aggrozone.sql to work with current command table schema
AndMetal: (Theeper) Shared Bank platinum. Added rule Character:SharedBankPlat(false) to enable since it is possible to dupe plat with multiple characters logged in on the same account at the same time
AndMetal: Fixed a few random compile warnings
Angelox: Bot Tracking improves as levels increase.
Angelox: Druid Bot is now next best tracker
AndMetal: Support for +Stat Cap (Wunshi's Focusing, etc)
AndMetal: New rules for tweaking spell crits: Spells:BaseCritChance(0), Spells:BaseCritRatio(0), Spells:WizCritLevel(12), Spells:WizCritChance(7), Spells:WizCritRatio(15)
AndMetal: Loot messages will now have item links instead of just the item name

==10/21/2008
KLS: Some changes to make compiling with profiler enabled more error free.
KLS: Added player quest event EVENT_TASK_STAGE_COMPLETE exports $task_id and $activity_id.
KLS: Added player quest event EVENT_PICK_UP exports $picked_up_id for when a player picks up a ground spawn or dropped item.
KLS: Added quest::CreateGroundObject(itemid, x, y, z, heading) which lets the quest script create ground objects in the zone like if they had been dropped.
KLS: Objects should decay after they're loaded back into the world. Might want to backup your objects table till I can confirm this works 100%.
KLS: Lowered ground object decay time from 30 min to 5 min.

==10/20/2008
AndMetal: (erde) Moved SVN SQL updates to utils/sql/svn. File name will start with the revision they were introduced & optional updates have optional somewhere at the beginning of the name
Derision/Trevius: Implemented sub EVENT_AGGRO_SAY
AndMetal: Implemented Reverse Damage Shield
AndMetal: Fixed +Damage Shield on items so that it doesn't work without having a Damage Shield spell first
AndMetal: (seveianrex) Hate w[h]iped on CoH
AndMetal: (via Yeahlight) New command: #aggrozone. Requires 100 status by default

==10/19/2008
Angelox: Added a start to Bot tracking - Thanks Derision for all the help and know-how.
Derision: Altered damage shield message processing to be more like (the same?) as live.
Derision: If it exists, damage shield types are read from a new table (damageshieldtypes)
Derision: If no entry exists in the table, a default based on resist type is used.

Optional SQL: See utils/sql/damageshieldtypes.sql

==10/18/2008
KLS: Reworked classic style traps.
KLS: Debuff style traps should function perfectly, the level field in the DB gives what level the caster is for resists in this case.
KLS: Added respawn and respawn variance to traps.
KLS: Increased range on sense traps.
KLS: Sense trap will now point the player in the direction of the trap they are sensing.
KLS: Disarm trap will no longer use sense trap's timer.
KLS: Disarm trap will no longer fail to disarm traps on success.
KLS: Increased range on disarm trap slightly.
KLS: Change to MakeRandomInt() and MakeRandomFloat()
KLS: Int generation be nearly 100% or more faster in most cases and float generation should be slightly faster in most cases
cavedude00: (seveianrex) Slay Undead Fix
cavedude00: (seveianrex) Levitate effect will no longer be removed in cases where you have two stacked lev spells and the first wears off.
cavedude00: (seveianrex) Hate list will now be cleared following CoH
cavedude00: (seveianrex) Group members will now see tradeskill emotes.

Required SQL:
ALTER TABLE `traps` DROP `spawnchance`;
ALTER TABLE `traps` ADD `respawn_time` INT(11) UNSIGNED DEFAULT '60' NOT NULL AFTER `skill`;
ALTER TABLE `traps` ADD `level` MEDIUMINT(4) UNSIGNED DEFAULT '1' NOT NULL AFTER `skill`;
ALTER TABLE `traps` ADD `respawn_var` INT(11) UNSIGNED DEFAULT '0' NOT NULL AFTER `respawn_time`;

==10/17/2008
KLS: Tweaks to /pet attack
KLS: Renamed WhipeHateList to WipeHateList so I never have to view that spelling monster ever again.
cavedude00: (Rocker8956) Added shutdowndelay to zone query.

==10/16/2008
Derision: Cosmetic change to foraging to correctly identify food/drink items.
cavedude00: Added rules to determine if /ooc and /auction should be server wide (true) or zone wide (false - Live Like).
cavedude00: #peqzone can no longer be used if invulnerable.
KLS: More changes to proc code.  Added an option of calc. proc rate based on speed of the weapon
KLS: Added Rules: Combat:AdjustProcPerMinute(true), Combat:AvgProcsPerMinute(18.0), Combat:ProcPerMinDexContrib(0.075), Combat:BaseProcChance(0.035), Combat:ProcDexDivideBy(11000)
KLS: Tweak to monster AI to hopefully save computation.

Optional SQL:
insert into rule_values values (0, 'Chat:ServerWideOOC', 'true');
insert into rule_values values (0, 'Chat:ServerWideAuction', 'true');

==10/15/2008
Derision: Added OP_LevelAppearance to utils/patch_Titanium.conf and it is now sent to nearby clients (eye candy when you level)
Derision: (seveianrex) Alcohol Drinking / Skillup Fix
KLS: Change to proc code to correct some oddities with % chance to proc.
KLS: Changed how avoidance bonuses are calculated to be like other melee bonuses.
KLS: (seveianrex) Basic Pet Focus Implementation.

==10/14/2008
Trevius: Charm Spells set to max level of 0 now have unlimited max level as they should
Derision: Player pets should no longer be fearable if npcspecialattks contains 'D'.
cavedude00: (Rocker8956) Changes to quest::getlevel and quest::setinstflag/setinstflagmanually to reduce DB access
cavedude00: (Rocker8956) Added quest::getinstflag
KLS: Fixed crash in shutdown delay, please test things for crashes before adding them, this was pretty obvious.
Derision: Removed requirement to be grouped for Translocate spells.

==10/13/2008
Derision: Looting your corpse while liched/wolf form etc should now auto-equip items

==10/12/2008
Derision: No more binding wounds while feigning death.
Derision: (Rocker8956) Movegrp quest command fix.
Derision: (LeftRoad) TEMPORARY(NORENT) items in a character inventory will be retained if you log back into that character within 30 minutes.
KLS: Implemented Raid::TeleportGroup() and Raid::TeleportRaid(), untested but should work.
KLS: (seveianrex) Critical DoT and Sinister Strikes AA.

==10/11/2008
Derision: Resurrection fix.
KLS: Rebalanced skill ups.

==10/10/2008
AndMetal: Added functions to calculate AA bonuses just like item & spell bonuses (not turned on yet)
Condgar: Fix for Bots wont Attack
Congdar: Fix low level bots hitting too hard
Derision: Prevent two instances of possible zone crashes due to null pointers.
Trevius: (Striat) Added quest commands for zone and world emotes - quest::ze() & quest::we()
Derision: Recalculate Pet bonuses on zoning before setting current HP/Mana.

==10/09/2008
Congdar: Replace Client IsEngaged() checks in Bot Source with bot aggro check
Trevius: (AndMetal) Added quest Object SetOOCRegen() to adjust NPC Out of Combat Regen on the fly.
Trevius: Relocated the Empty Corpse check code so that the Decay Time rule for it will now work.
Trevius: Removed the Level 70 cap on the #traindisc <level> command.
Trevius: Added optional rule to allow Max Level Attainable via experience to be set independant of other Max Level rule checks.
Derision: Reworked code to stop mobs fleeing if they have buddies to account for recent hate_list changes.

Optional SQL:
Insert into rule_values values (0, 'Character:MaxExpLevel', 0);

==10/08/2008
Congdar: Fix orphaned bots when camping/zoning
Congdar: Link bot assist with client auto attack
Derision: Added #titlesuffix command to add a title after a player's name.

==10/07/2008
Congdar: Allow bot pets to be the main tank in a bot raid
Congdar: Remove old Sense Heading skill check
AndMetal: Web interface will now list open petitions.
Derision: #title should now prefix the target player's name, e.g. #title Lord_Protector (underscores are replaced with spaces, max 31 chars)

==10/06/2008
Angelox: Fix Bot names in group window (now is 'Mybot' instead of 'Mybot000')
cavedude00: (erde) Fix for world and zone crashing when compiled on VS 2008 in release mode.
cavedude00: (Rocker8956) Zone shutdown timer rule.
cavedude00: Added cleanipc to makefile.

Required SQL:
ALTER TABLE `zone` ADD column `shutdowndelay` bigint (16) unsigned NOT NULL default '5000';
INSERT INTO rule_values VALUES (1,'Zone:AutoShutdownDelay', 5000);

==10/05/2008
Derision: Total time playing <character> in /played now maintained across sessions.
Derision: Corrected OP_DuelResponse/OP_DuelResponse2/OP_Shielding opcodes in utils/patch_Titanium.conf

==10/04/2008
Congdar: Double Attack redo, tested working
Congdar: Fix Bot follow bug when a bot gets killed
Derision: Added minlevel and maxlevel fields to tasks table and new quest function istaskappropriate(task).
Derision: All tasks in a TaskSet with a taskid of 0 as one of it's entries are now available to a player, subject to level restrictions.
Derision: (Spoon/Andmetal) Rez spells with effectdescnum != 82 or 39067 (6.2 spells_us) will give 100% Mana/HP restoration and no rez effects.
Derision: Corrected message when interrupting a spell with Shift-S.
Derision: Fix to display Frogloks correctly in /who all and /who all froglok (half of the change came from a post by Theeper on the forums).

Required SQL:
ALTER TABLE `tasks` ADD `minlevel` TINYINT UNSIGNED NOT NULL DEFAULT '0',
ADD `maxlevel` TINYINT UNSIGNED NOT NULL DEFAULT '0';

==10/03/2008
Congdar: Add EQOffline Bot Source
Derision: Removed 'stepped' column from task table. See http://eqemulator.net/forums/showthread.php?p=157613
Derision: Added display of Task Description to #task show to aid in debugging a reported problem.
Derision: Lowered default required status for #task command from 250 to 150 for debugging purposes.
KLS: Removed some lingering printf from the raid stuff.
KLS: Auto attack code changed to not use target, instead we save the first target and now always use that.
KLS: Hate list will no longer work for non ai controlloed player characters.
KLS: Fix to crash in monk special attack function.

Required SQL: ALTER TABLE `tasks` DROP `stepped` ;

==10/02/2008
KLS: (Congdar) Update to Tech. of Master Wu AA.
KLS: Revert of double attack change, people reporting non warriors were no longer double attacking properly.
KLS: Compile Warning in Database::GetZoneName()
KLS: Change to IsPlayerIllusionSpell() to make it more consistant, illusion spells can be more than 49 so we work off behavior and effect now.
KLS: Added AA__Message logs to project illusion code to try to track down an error.

==10/01/2008
Derision: (erde) VS2008 Compile Fix (#if (_MSC_VER < 1500) #define vsnprintf _vsnprintf #endif
Derision: Fix to stop zone crashing when looting PVPItem and PVPReward is set to 3.
cavedude00: Group members will no longer recieve a split when a player corpse is looted.

==9/30/2008
Derision: Task activities with an activitytype of <= 0 in the activities table will be sent with an activitytype of 9 to the client.
Derision: The reward field in the task table will now be displayed even if rewardid=0
cavedude00: (Rocker8956) Added quest function to get average group/raid level.
cavedude00: (Rocker8956) Changes to setinstflagmanually to allow deletion of instance flags and to allow manual flagging of raids, groups, and individuals.

==9/29/2008
cavedude00: Added rule World:ClearTempMerchantlist to control whether world clears temp merchant items when started or not.
AndMetal: (Congdar) New Double Attack logic
Angelox: Keyring code fix, so clicky portals that require keys will work too.
AndMetal: Added AAs: Discordant Defiance, Blacksmithing Mastery, Baking Mastery, Brewing Mastery, Fletching Mastery, Pottery Mastery, Tailoring Mastery, Packrat, Expansive Mind, Veteran's Wrath, Advanced Fury of Magic Mastery, Destructive Fury
AndMetal: Ayonae's Tutelage should now calculate bonus for Singing

Optional SQL:
insert into rule_values values (0,'World:ClearTempMerchantlist','true');

==9/28/2008
AndMetal: Fixed exploit for pets ignoring Fear by using /pet commands
AndMetal: #wp add will now use the highest value in the grid_entries table + 1 if you don't use a Waypoint # or use 0

==09/26/2008
cavedude00: (AndMetal) Deathblow AA
cavedude00: (AndMetal) Swift Journey AA
cavedude00: (AndMetal) Convalescence and Healthy Aura AAs
cavedude00: (AndMetal) Slippery Attacks AA
cavedude00: (trevius/Derision) Additional IP limiting rules
cavedude00: (Congdar) Further PC main and second hand attack fixes
cavedude00: (Derision) Fix for percent heals
cavedude00: (Theeper) Fix for quest:itemlink()
cavedude00: (Rocker8956) More work on zone instancing

Optional SQL:
Insert into rule_values values (0, 'World:AddMaxClientsPerIP', -1 );
Insert into rule_values values (0, 'World:AddMaxClientsStatus', -1 );

==09/25/2008
cavedude00: (trevius) IP Limiting Minor Fix
cavedude00: (trevius) New Quest Command quest::clearspawntimers()
cavedude00: (trevius) New Quest Command quest::traindiscs()
cavedude00: (trevius) Enraged, Flurry and Rampage Spamming Fix
cavedude00: (seveianrex) Implemented Project Illusion AA
cavedude00: (seveianrex) Corrected AA ding message
cavedude00: (Congdar) PC main and second hand attack fixes
cavedude00: (Cantus) 2H weapon damage bonus
cavedude00: (Derision) /who all friend
cavedude00: (Derision) All merchants will now show player sold items correctly
cavedude00: (Derision) Enter tutorial and Return Home buttons during char creation/select
cavedude00: (Derision) Implemented Task system
cavedude00: (Derision) Implemented Translocate and Sacrifice Confirmation Boxes
cavedude00: (Derision) Client popup window
cavedude00: (James76) Implemented keyring
cavedude00: (AndMetal) Corrected Technique of Master Wu AA
cavedude00: (AndMetal) Corrected some proc spells not working after zoning
cavedude00: (Hugghiebear) Charm will now fade if invis is cast
cavedude00: (AiliaMorisato) New command #advnpcspawn and related functions
cavedude00: (Rocker8956) Preliminary zone instancing
cavedude00: (KLS) Implemented raid system
cavedude00: Fixed autosplit (Thanks WildcardX!)
cavedude00: New command #peqzone
cavedude00: Several minor forage/fishing fixes

Required SQL is in utils/sql/09252008.sql
Make sure you update your .conf files, also found in utils!

==09/01/2008
KLS: (derision) Crash Fix.
KLS: (haecz) Non-Melee damage filter.
KLS: (LordKahel) Lore Slotted Augment.
KLS: (Spider 661 via trevius) Chaotic Potential AA
KLS: (Derision) OP_Sound update for titanium.
KLS: (ndnet via trevius) MQ Illegal Item Equip Detection
KLS: Modified faction modifiers for buying/selling.
KLS: (AndMetal) Spell blocking implementation
KLS: (Derision) Resurrection confirmation
KLS: (Cripp) Delete stale corpse backup typos
KLS: (AndMetal) CHA stacking buff bug resolved.

Required SQL:
CREATE TABLE `blocked_spells` (
  `id` int(11) NOT NULL auto_increment,
  `spellid` mediumint(8) unsigned NOT NULL default '0',
  `type` tinyint(4) NOT NULL default '0',
  `zoneid` int(4) NOT NULL default '0',
  `x` float NOT NULL default '0',
  `y` float NOT NULL default '0',
  `z` float NOT NULL default '0',
  `x_diff` float NOT NULL default '0',
  `y_diff` float NOT NULL default '0',
  `z_diff` float NOT NULL default '0',
  `message` varchar(255) NOT NULL default 'You cannot cast that spell here',
  `description` varchar(255) default NULL,
  PRIMARY KEY  (`id`)
)

==08/15/2008
KLS: Fix for groups clearing on new group create.
KLS: Fix for null row access in Database::GetLeaderName()
KLS: CountDispellableBuffs now will validate buffs spells.

==08/14/2008
KLS: Very basic work on raids.
KLS: Moved group id calls to their own database as to not be blocked by long character_ selects and such.

Required SQL (Your groups will break completely without this):
CREATE TABLE `group_id` (
  `groupid` int(4) NOT NULL,
  `charid` int(4) NOT NULL,
  `name` varchar(64) NOT NULL,
  PRIMARY KEY (`groupid`, `charid`)
)
ENGINE = InnoDB;

==08/13/2008
KLS: Added dispel field for npc spells as 512.
KLS: NPCs should be smarter about when they choose to cast certain spells; namely dots, lifetaps and dispels.
KLS: NPCs should continue to cast nuke spells for a longer period of time.
KLS: NPCs will no longer have a 2-3 sec forced delay between spell casts; it is now whatever the recovery time of the spell is just like players, beware.
KLS: (trevius) Change to npcAI recast delay cap 1000->10000 seconds.
KLS: Increased amount of mana npcs gain from int and wis.
KLS: New rule: NPC:CorpseUnlockTimer (150000) 2.5 min default on corpses being unlocked after loot instead of decay time / 2
KLS: New rule: NPC:EmptyNPCCorpseDecayTimeMS (0) empty npc corpses will decay after this long + 1000MS on the ground.
KLS: More changes to groups: text should now be correct in *almost* all situations.
KLS: Groups should stay synced in almost all situations and leader disbanding should be smoother.
KLS: Groups will clear their info on the aquisition of a reused id.
KLS: .conf file from earlier /rewind change should be correct now make sure to update it if you want it to function.

Optional SQL:
UPDATE npc_spells_entries SET type='512' WHERE spellid='48';
UPDATE npc_spells_entries SET type='512' WHERE spellid='49';
UPDATE npc_spells_entries SET type='512' WHERE spellid='1526';
UPDATE npc_spells_entries SET type='512' WHERE spellid='1697';

==08/11/2008
KLS: Group leader info should transfer to a new zone when the leader transfers to that zone.
KLS: Will now force a group update to players not in zone, text not correct.
KLS: Added #refreshgroup command - will refresh group visually from DB
KLS: Deleting stale corpses will now bury corpses instead of make them decay if shadowrest is enabled.
KLS: Small change to temp merchant lists with regards to charges.
KLS: Initial implementation of Technique of Master Wu
KLS: Spell's fizzles will now base their mana cost on the correct amount.
KLS: Tweak to spell casting expertise and mastery of the past
KLS: Hopefully fix to AEUndead spells hitting more than undead

Required SQL (Your groups will probably break completely without this):
CREATE TABLE `group_leaders` (
  `gid` int(4) NOT NULL,
  `leadername` varchar(64) NOT NULL,
  PRIMARY KEY (`gid`)
)
ENGINE = InnoDB;

==08/09/2008
KLS: Minor tweaks to heal aggro.

==08/07/2008
KLS: Bald char fix revert, will try something else.
KLS: Wake The Dead initial implementation.
KLS: Hopefully better bald character fix base on kraeger's findings.

==08/04/2008
KLS: (Derision) Pet Buff Window Implemented.
KLS: Charmed pets should now function with the pet window, as well as appear correctly in group.
KLS: Added rule Character:SkillUpModifier (100) to govern how fasts skill ups happen on a server.  100% = normal chance, 200% = double normal chance.
KLS: (Derision) Implemented quest journal npc say.
KLS: (Derision) Fix for npc not always facing attacker.
KLS: (Derision) Stop Pets Fleeing
KLS: (CodeMephit) Hunger and thirst for new characters.
KLS: Upped food/water eat/drink gains by a lot.
KLS: (greggg230) Aggro LOS fix.
KLS: Fix for bald characters hopefully.
KLS: (kraeger) RNG name fix.
KLS: Big bug fixes with healing aggro.
KLS: Charm spells will stop making a cha check after a certain resist adj threshold
KLS: Adjusted melee hit chances to be more forgiving.
KLS: Changed how +hit mods are applied
KLS: Roughly implemented Skill Attack spell effect.

Required:
patch_6.2.conf and patch_Titanium.conf files have changed be sure to update them.

==07/21/2008
KLS: (irv0) Fix for out of order ack not being sent in some situations.
KLS: (Derision) Pet bar OOC update fix.
KLS: Should have made client pets unable to give experience, untested but should work.
KLS: Healing aggro should function better for people not on the hate list.
KLS: Some work on public tradeskill objects saving their content between uses.

==06/22/2008
KLS: Changed world/clientlist.cpp's line endings back to unix style line endings
KLS: Fixed up ipban based on updated code from TheLieka.

==06/21/2008
KLS: Belated updates to azone including (derision)EQG fixes and some changes to make it easier to compile under windows.
KLS: Fixed inconsistant line endings in ruletypes.h; there are probably more line ending changes I didn't catch, please try to keep your line endings consistant with what's in the repo.

==06/19/2008
Scorpious2k (Knightly): Correction of divine intervention text
Scorpious2k (LordKahel): Support for defensive Instinct and Reflexive Mastery AA

==06/18/2008
Scorpious2k (Derision): Fix for flee runspeed - linear flee speed reduction as HP drops
Scorpious2k (Derision): Rule to prevent mobs from fleeing if they are being helped by other NPCs
Scorpious2k (haecz): Distance check for corpse dragging
Scorpious2k (haecz): Distance check for taunt
Scorpious2k (greggg230): Merchant price faction/charisma fix
Scorpious2k (greggg230): Faction will now show on /con for agnostic players
Scorpious2k (BatCountry): Correction of a zone crash caused by reloading rules
Scorpious2k (Congdar): Eliminated array index error/zone crash in spells

==06/17/2008
Scorpious2k (TheLieka): Ban by IP
Scorpious2k (cavedude/TheLieka): Ability to limit melee guys from being bound in certain zones. This changes the canbind
            column of the zone table. Value 0 means noone can bind, value 1 means only casters can bind, value 2 means
            anyone can bind in the zone (ie cities).

Required SQL:
CREATE TABLE `Banned_IPs` (
  `ip_address` VARCHAR(32) NOT NULL,
  PRIMARY KEY (`ip_address`)
)
ENGINE = InnoDB;

Optional SQL:
Insert into rule_values values (0, 'World:UseBannedIPsTable', 0);
Update zone set canbind = 2 where zoneidnumber in (1,2,3,8,9,10,19,23,24,29,40,41,42,45,49,52,54,55,60,61,62,67,75,82,83,106,155);

==06/14/2008
Scorpious2k(Trevius): Door names can now go beyond the 16 char limit to allow doors and other objects from later expansions
                       to be used. The new max is 32 characters.
Scorpious2k(Derision): New fear adjustment to cause mobs to flee at the correct rates instead of running very fast at certain
                        percentages of health.
Scorpious2k(TheLieka): Limit the number of connections for an IP address There are 2 new rule values.
                World:MaxClientsPerIP = Maximum number of simultaneous EQ Client connections allowed per IP address.
                  Set the rule value to -1 to disable this feature.
                World:ExemptMaxClientsStatus = Minimum Account status to exempt the MaxClientsPerIP rule. This is
                  helpful for the inevitable random family of 16 that live together, and all want to play on your server,
                  as well as GMs, Devs, and QA staff. Again, set the rule value to -1 to disable this feature.
Scorpious2k(TheLieka): Added /rewind command
Scorpious2k(Striat): Quest Commands for Temp Race, Texture, Size and Gender Changes

Required sql:
ALTER TABLE `doors` MODIFY COLUMN `name` VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL;

==05/30/2008
Scorpious2k: (Derision/Wiz) Added code to implement fear.
KLS: (Leika) Implemented detection of various MQ activities.
KLS: EVENT_CAST_ON should now export $spell_id properly.
KLS: Further expanded on fear implementation including addition of rules to govern it's behavior.
KLS: Fear on clients still uses stun but the stun should match up with the buff duration in a more accurate manner.

Hackers SQL table:
DROP TABLE IF EXISTS `hackers`;
CREATE TABLE `hackers` (
  `id` int(4) NOT NULL auto_increment,
  `account` text NOT NULL,
  `name` text NOT NULL,
  `hacked` text NOT NULL,
  `zone` text,
  `date` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`)
) AUTO_INCREMENT=8;

==04/26/2008
KLS: Should have fixed discipline and combat ability timer overlap.
KLS: Added a rule for partial hits on fear, seperate from normal resist partial hits.
KLS: Fixed some quirks in the aggro system.
KLS: (Bulle)Added quest event EVENT_KILLED_MERIT will trigger if you got credit for doing the most damage to a lootable npc.
KLS: (Bulle)Added quest event EVENT_CAST_ON will trigger if a player casts on a npc.
KLS: Fixed crash in server-side check for removing detrimental effects.
KLS: (Magoth78), (Angelox)Added zone checks for levitating and being outdoors.
KLS: (haecz) Fix to dupe corpse money on a zone crash.
KLS: Changed root to resist per tic instead of partial hit.

Required SQL:
alter table `zone` add column `canlevitate` tinyint (4) DEFAULT '1' NOT NULL  after `cancombat`
alter table `zone` add column `castoutdoor` tinyint (4) DEFAULT '1' NOT NULL  after `canlevitate`;

==04/22/2008
Rogean: Server-side check for removing detrimental spells.

==04/13/2008
Rogean: Fixed a hack to sell no-drop items to merchants. (Reported by KingMort)
Rogean: Fixed #hideme, it won't show you zone in and then disappear anymore. (Reported by KingMort)
Rogean: Fixed /summon.
Rogean: Changes to /who all and GM's:
	* GM * Tags will no longer show up unless your #gm on
	You will not show up to players of lower status if your /anon and #gm on, if your #gm off and /anon you will show up as
	a normal player, regardless of statuses.

==04/09/2008
KLS: (AiliaMorisato)Fixed death packet bindzoneid and attack_skill fields being switched.
KLS: Added rule based caps for all PoP item abilities.
KLS: Agility will now affect a defenders chance to be missed slightly.
KLS: Added accuracy rating (10 AR. = 1% chance to hit) and (LordKahel)ATK to npcs.
KLS: Changed how mitigation is calculated slightly.
KLS: Enc animations will now respond to /pet get lost no matter what level of the animation empathy aa they have.
KLS: Hopefully fixed soul abrasion and consumption of the soul aas... again.
KLS: Added quest::forcedooropen(doorid), quest::forcedoorclose(doorid), and quest::isdooropen(doorid).
KLS: Changed archery calculations to be more similar to normal weapon damage calculations.
KLS: Taunt will now always add hate if the user is already on the top of the hate list.
KLS: Fixed EVENT_ZONE player event.

Character:ItemDamageShieldCap (30)
Character:ItemAccuracyCap (150)
Character:ItemAvoidanceCap (100)
Character:ItemCombatEffectsCap (100)
Character:ItemShieldingCap (35)
Character:ItemSpellShieldingCap (35)
Character:ItemDoTShieldingCap (35)
Character:ItemStunResistCap (35)
Character:ItemStrikethroughCap (35)

Required SQL:
ALTER TABLE npc_types ADD ATK MEDIUMINT NOT NULL DEFAULT '0';
ALTER TABLE npc_types ADD Accuracy MEDIUMINT NOT NULL DEFAULT '0';

==04/01/2008
Rogean: Fixed a merchant purchase packet exploit.

==02/28/2008
WildcardX: Tweaked the code for the Divine Intervention spell line code and the Unfailing Divinity AA ability.

==02/27/2008
WildcardX: Implemented HeadShot AA Ability.
WildcardX: Archery and throwing attacks will not cause you to suffer injury from your target's damage shield.
WildcardX: Implemented Spell: Death Pact.
WildcardX: Implemented Spell: Divine Intervention.
WildcardX: Implemented Unfailing Divinity AA Ability.

==02/25/2008
WildcardX: Enchanters can now control their pets if they purchased the Animation Empathy AA.
WildcardX: Mobs now have a chance to resist fear spell line each tic.
WildcardX: Mobs now have a chance to resist charm spell line each tic.
WildcardX: Implemented Total Domination AA.
WildcardX: Reworked new charisma test. This test now evaluates factors like MR, CHA, mob and caster levels. It yields better live-like results.
WildcardX: Enchanter pets now get the /pet report and /pet health commands by default.

==02/23/2008
WildcardX: Only characters with Pet Affinity AA can have group buffs casted on their pets.
WildcardX: Fixed a bug that would not allow a rune buff to be used in some situations.

==02/22/2008
WildcardX: Characters can now have only one caster specialization skill above 50. If more than one specialization skill is detected above 50, then all specialization skills are reset to 1.
WildcardX: Reworked mana reduction calculations.
WildcardX: Implemented spell casting specilization checks.

==02/21/2008
WildcardX: Removed the possible fix for the Call of Hero spell as it didnt actually fix the issue after extensive testing.
WildcardX: Added new command #scribespell. This will scribe a specified spell into the target's spell book.
WildcardX: Added new command #unscribespell. This will unscribe a specified spell from the target's spell book.

==02/20/2008
KLS: Zone crash fix caused by calling the TryWeaponProc() method when dead.
WildcardX: Changed the quest function depopzone() to accept a parameter to specify if the spawn timers should resume or become disabled. 0 = Disable, 1 = Enable.
WildcardX: Added the quest function repopzone(). This function will cause a zone to repop it's spawns normally.
WildcardX: Possible fix for a zoning bug caused by the Call Of Hero spell.
WildcardX: Harmony/Pacify line of spells will now cause aggro when resisted.
WildcardX: Added a check against CHA to avoid aggro from a resisted Harmony/Pacify spell.

==02/19/2008
WildcardX: Found a small efficiency for the code that determines if an item is equipable.
WildcardX: Re-worked the rune spell buff code to make it more efficient and reduce CPU utilization.
WildcardX: Added the quest function depopall(int npctype_id). This will remove all mobs from the zone with the specified npctype_id.
WildcardX: Added the quest function depopzone(). This will remove all mobs from the zone and NOT cause a repop.

==02/10/2008
WildcardX: Mesmerize line of spells will now cause aggro when casted on a mesmerize immune mob.
WildcardX: Fixed enchanter spell Theft of Thought. This spell will now work as described.
WildcardX: The pacify/harmony line of spells will no longer require a line of sight check to complete a cast.

==01/28/2008
WildcardX: Regenerated perl_mob.cpp due to deprecating the following methods: GetFamiliar(), SetFamiliar(), GetRune(), SetRune(), GetMagicRune(), SetMagicRune().
WildcardX: Enchanters, this is your patch! Characters will now benefit from all rune and spell rune spell effects all spell buffs will provide, consistent with spell rules.
WildcardX: Rune and spell rune spell buffs will now persist zoning and camping.
WildcardX: Fixed a zone crash caused by TryWeaponProc() method.

==01/27/2008
WildcardX: Subtle changes to zoning code to allow both the 6.2 and Titanium client to perform all zoning operations similiar to live.
WildcardX: Fixed #zone and #goto commands for both the 6.2 and Titanium client.

==01/25/2008
WildcardX: Regenerated perl_client.cpp and perl_groups.cpp due to parameter changes for Group::TeleportGroup and Client::MovePC methods. Changes to some quest files may be necessary.
WildcardX: void	MovePC(int32 zoneID, float x, float y, float z, float heading)
WildcardX: void	TeleportGroup(Mob* sender, int32 zoneID, float x, float y, float z, float heading)
WildcardX: Pets will now report their buff list along with their health.
WildcardX: Fixed a bug that resulted in a zone crash if spell error logging is turned on.
WildcardX: (cavedude) Corrected an item id and some small typos in fishing.
KLS: Fixed a potential crash in Mob::CheckWillAggro()
KLS: Tweaked melee accuracy.
KLS: Ironed out some quirks between min hit and the AC code that was keeping it from mitigating some hits into misses.
KLS: (Knightly)#time should no longer be off by an hour, $zonehour, $zonemin and $zonetime are now exported to perl
KLS: Added player quests, player quests are quests designed to be attached to player processes such as zoning and clicking objects.
KLS: Player quests are loaded as either 'quests/zonename/player.pl' or as a template in 'quests/template/player.pl'
KLS: Player quests will export qglobals the client should be able to see and the following events are available for player quests:
EVENT_TIMER with var $timer
EVENT_CLICKDOOR with var $doorid
EVENT_LOOT with vars $looted_id and $looted_charges
EVENT_ZONE with var $target_zone_id
EVENT_ENTERZONE with no special var
EVENT_LEVEL_UP with no special var


==01/24/2008
WildcardX: Removed a 64 character cap length on merchant names sent during a merchant greeting.
WildcardX: Fixed a bug that allowed players looting their corpse at just the right time, to duplicate their items.
WildcardX: Fixed a bug I caused in group portals when I corrected the Succor/Evac line.
WildcardX: Druids and Wizards rejoice! Succor/Evac will now perform a real zone and clear your aggro!
WildcardX: GM's can now summon players from one zone to another.
WildcardX: Cleaned up some of the code that handles zoning.
WildcardX: (cavedude) Reworked LeaveCorpses and LeaveNakedCorpses rules to allow for more options.
WildcardX: (cavedude) Created Character:DeathItemLossLevel rule to define when a player will leave items on a corpse.

Required SQL:
insert into rule_values values(0, 'Character:DeathItemLossLevel', 10);

==01/22/2008
KLS: Clients will be immune to proximity aggro until they are finished loading now.
KLS: Slightly reduced the melee accuracy of clients.
KLS: Melee mitigation should now properly enforce minimum damage.
KLS: Increased the level based damage bonus for high level characters in melee combat.
KLS: Removed tic by tic healing aggro.
KLS: Fixed several potential crashes in various parts of the code.
KLS: (Knightly)Merchants will now use their clean names when conversing with players.
KLS: Fixed some improper casting in the GMSummon code.
KLS: Figured in a work around for corpses between the server and client becoming unsynced for /corpse
KLS: AA Consumption of the soul should now function correctly.
KLS: AA Soul Abrasion should now function correctly

==01/19/2008
KLS: Slightly reduced the effectivness of the Flurry AA
KLS: Speed of the Knight AA implemented
KLS: Evade will now reduce hate by a static amount, the static amount of hate increased slightly.
KLS: Healing aggro should now not aggro pets instead of their owners,
KLS: Removed the clause that made it so healing aggro was only effective if the healer had 100 hate or more on the target, effectivly making healers below level 30 immune to healer aggro.
KLS: HideReuseTime on the server reduced by 1 second, should reduce the number of times a player sees the 'Reuse time not met' error message.
KLS: Pets should now default to taunt ON instead of taunt OFF
KLS: Fixed a typo in ZoneDatabase::UpdateSpawn2TimeLeft()

KLS: LDoN treasure should now really check only class and not body type.
KLS: Added new rule NPC:BuffFriends, if false npcs will only heal and not buff their friends, defaults to false.
KLS: Changed Mob::CheckHitChance() should be more consistant throughout the levels; puts more value into skill levels.
KLS: Changed Mob:AvoidDamage() to use a single roll system, as well as applied dex to parry, block and riposte chance and agil to dodge.
KLS: Brought the melee attack formula more in line with what it should be.
KLS: Added a moderate melee damage bonus to monks, and a small one to all classes at 50, 55 and 60.
KLS: Fixed an issue with strikethrough where it could go off even if you had no chance to strikethrough.
KLS: NPCs will now load their skills from the max skills of their level via the skill caps database instead of being randomly generated.
KLS: Increased the damage of backstab from str and dex and the general damage of several monk abilities.
KLS: Mob::GetProcID() should now try to fix SK spells automatically.
KLS: Aggro changes: Aggro has been changed to be based on a more live-like system, it is now based on potential damage instead of actual inflicted damage, hate is now unaffected by melee mitigation and resists.
KLS: Implemented jolt like effects straight into the aggro system, such effects should be calculated into a spells aggro regardless of resistance now.
KLS: Added an optional smart aggro list controlled by rule Aggro:SmartAggroList; true will enable it.  This aggro list attempts to choose targets in a much smarter fashion, prefering players to pets, sitting and critically injured players to normal players, and players in melee range to players not.

Added several rules to adjust the aggro system with:
Aggro:SmartAggroList ( true )
Aggro:SittingAggroMod ( 35 )
Aggro:MeleeRangeAggroMod ( 20 )
Aggro:CurrentTargetAggroMod ( 0 )
Aggro:CriticallyWoundedAggroMod ( 100 )
Aggro:SlowAggroMod ( 450 )
Aggro:IncapacitateAggroMod ( 500 )
Aggro:MovementImpairAggroMod ( 175 )
Changed Spells:SpellAggroModifier to Aggro:SpellAggroMod ( 100 )
Changed Spells:BardSpellAggroMod to Aggro:SongAggroMod ( 33 )
Changed Spells:PetSpellAggroMod to Aggro:PetSpellAggroMod ( 10 )

==01/16/2008
KLS: Updated AA_Data.sql with various small fixes.
KLS: Changed HasPet() to check for the existance of the pet as mob as well as the petid, should sync up with GetPet() nicely now.

==01/15/2008
KLS: LDoN /open will only check for class now, client does not enforce bodytype so neither will the server.
KLS: Numhits in disciplines should work correctly now
KLS: Changed many instances where HasPet() was being checked to verify that we have a valid pet pointer from GetPet(), GetPet() will be used instead, (it is possible to have a valid pet ID and an invalid GetPet() pointer)
KLS: Bind wound will no longer check for existance of skill, everyone gets this skill and it was breaking bind wound for people with 0 skill.
KLS: Fixed an issue that was keeping berserkers and rangers from triple attacking.
KLS: PickPocket should now correctly skill up on it's own through normal use.
KLS: GetMinLevel(int16 spell_id) will now return 0 if the level for the class was 255 instead of 255, many buff formulas do not work well with 255 which can cause some issues when a class can use a clicky item with a spell they cannot scribe normally.
KLS: GetProcID() should no longer have hard coded values.. whatever these represented are no longer valid in the current spell data.

==01/14/2008
WildcardX: Replaced the corpse consent system with one that allows cross zone player consents.

==01/13/2008
FatherNitwit: (Derision) Added tool (awater) to extract BSP tree with region type info from .s3d files into .wtr files.
FatherNitwit: (Derision) Added support for zone to load .wtr files.
FatherNitwit: (Derision) Employ water file to prevent under water mobs from sinking.
FatherNitwit: (Derision) Employ water file to enforce fishing near water.
New Rules (see ruletypes.h for more info):
Watermap:CheckWaypointsInWaterWhenLoading (Default: false)
Watermap:CheckForWaterAtWaypoints (Default: false)
Watermap:CheckForWaterWhenMoving (Default: false)
Watermap:CheckForWaterOnSendTo (Default: false)
Watermap:CheckForWaterWhenFishing (Default: false)
Watermap:FishingRodLength (Default: 30)
Watermap:FishingLineLength (Default: 40)

==01/12/2008
WildcardX: (cavedude) Fixed beastlord pet sizes.

==01/09/2008
KLS: Starting items will now be saved if they are placed in slots other than the primary 8, this includes inside bags and on the character's inventory and bank slots
KLS: Kick at level 55 or higher now has a chance to act as a spell interrupt as bash does.
KLS: (TheLieka) Stun Immunity for Frontal Stuns on Ogres
KLS: (TheLieka) Added out of combat regen to NPCs based on rule NPC:OOCRegen
KLS: NPCs with quests using the Perl Quest Parser should no longer stop if they do not have an EVENT_SAY sub
KLS: /autofire cleaned up some, fixed many situations where it shouldn't fire and it now will auto. use throwing weapons as well as bows
KLS: Ranged and Throwing attacks will break invis. correctly.
KLS: Added the following rules:
Character:HealOnLevel (Default: false)
Character:FeignKillsPet (Default: false)
Character:ItemManaRegenCap (Default: 15)
Character:ItemHealthRegenCap (Default: 15)
Combat:UseIntervalAC (Default: false)
Combat:PetAttackMagicLevel (Default: 30)
NPC:SayPauseTimeInSec (Default: 5)
NPC:OOCRegen (Default: 0)

==12/06/2007
KLS: Fixed logic on duration 7 formula.. again.

==12/02/2007
KLS: Reworked buff duration formula 7 calculations.
KLS: (Cripp)Added (Missing?) pathing z rules.

==11/30/2007
FatherNitwit: Reworked pathing z code to be rules based instead of built time options.

==11/29/2007
FatherNitwit: (Derision) Fix BestZ pathing cleanup code top stop hopping.
FatherNitwit: (Derision) New fix-z-on-load feature.

==11/28/2007
Rogean: Fixed another no-drop trade hack.

==11/26/2007
KLS: Dynamic zones will now not attempt to boot up more than one instance of the zone if two or more clients request it in quick succession.
KLS: Fixed: qglobals will now not be exported for npcs that do not have the qglobal flag set in the perl parser.
KLS: Added a new npc special attack 'H' for immune to aggro, mobs with this set should not aggro no matter what a person does to them.
KLS: Fixed ATK loading in item bonuses
KLS: AEDuration calculation will now take target type into account correctly
KLS: Player pets should now persist through a teleport spell
KLS: Players will now be able to target themselves for group spells if they are not in a group
KLS: Fixed some buff duration oddities.
KLS: Level should have somewhat less of an impact for players in the resist code.

==11/14/2007
KLS: Swarm pets should be forced to correctly depop after their owner disappears.
KLS: NPCs should be able to use swarm pets correctly now.
KLS: #traindisc should no longer learn disciplines over already known disciplines.
KLS: Added a few more known spell effects to spdat.h, not implemented any yet
KLS: Rez experience should now only goto regular experience, not AA experience.

==11/07/2007
KLS: Reworked swarm pets a bit
KLS: Swarm pets should no longer crash zones(I hope)
KLS: Swarm pets will now gain all their information from the normal pet tables and the spell data, as a result the aa_swarmpets table is now obsolete.

==11/06/2007
KLS: Reverted client timeouts.
KLS: Fixed NPC HP and Mana Regen not loading from DB for NPCs

==11/05/2007
WildcardX: Fixed a bug that prevented player corpse summoning spells from working on Linux platforms.

==11/04/2007
WildcardX: The spell "Reanimation" will no longer restore any player experience. This is a 0% experience resurrection.
WildcardX: Corpses moved by a consented player will now remember where it was moved to, even after a zone restart.
WildcardX: Necromancers and Shadowknights can now summon corpses belonging to other players.
WildcardX: Corrected a bug that would have allowed Necromancers and Shadownights to summon corpses belonging to non-grouped party members.

==11/03/2007
WildcardX: (Cavedude) Implemented perl wrappers for new quest methods supporting the Shadowrest zone implementation.
WildcardX: Fixed a bug that prevented a player from experiencing resurrection effects in designated no combat zones.
WildcardX: Fixed a bug in graveyard system that could leave a player corpse in the database, but without a location.
WildcardX: Fixed a bug that could prevent the corpse decay timer from expiring because the graveyard timer would reset before.
WildcardX: Implemented support for the Shadowrest zone. This is configured to be disabled by default.
WildcardX: Implemented the command #summonburriedplayercorpse.
WildcardX: Implemented the command #getplayerburriedcorpsecount.
WildcardX: Implemented the quest function bool summonburriedplayercorpse(int32 char_id, float dest_x, float dest_y, float dest_z, float dest_heading).
WildcardX: Implemented the quest function int32 getplayerburriedcorpsecount(int32 char_id).

Required SQL:
alter table player_corpses add column IsBurried TINYINT(3) NOT NULL default 0;
alter table player_corpses add column WasAtGraveyard TINYINT(3) NOT NULL default 0;
insert into rule_values values(0, 'Zone:EnableShadowrest', 0);

==11/01/2007
WildcardX: (TheLieka) Bug fix to discontinue player invisibility when the player loots.
WildcardX: (TheLieka) Bug fix to remove a type from the #npcedit loottable command.
WildcardX: Implemented corpse graveyard support for all zones. Once a zone is configured for a graveyard, a zone restart is necessary.
WildcardX: Zone shutdown and restart will result in all player corpses within the zone to be subject to the graveyard corpse timer.
WildcardX: Implemented the command #setgraveyard [zone name]. This command will create a graveyard for the designated zone based on your target's LOC.
WildcardX: Implemented the command #deletegraveyard [zone name]. This command will remove the graveyard for the designated zone (does not delete any corpses!).

Required SQL:
alter table zone add column graveyard_id float NOT NULL default '0' after safe_z;

DROP TABLE IF EXISTS `graveyard`;
CREATE TABLE `graveyard` (
  `id` int(11) NOT NULL auto_increment,
  `zone_id` int(4) NOT NULL default '0',
  `x` float NOT NULL default '0',
  `y` float NOT NULL default '0',
  `z` float NOT NULL default '0',
  `heading` float NOT NULL default '0',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `zone_id` (`zone_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

insert into rule_values values(0, 'Zone:GraveyardTimeMS', 1200000);

==10/19/2007
WildcardX: (Bleh) Enhancement to avoid a zone crash by avoiding a null pointer.
WildcardX: (UrbeIT) Bug fix to allow pet spells to effect players in PVP.
WildcardX: (UrbeIT) Bug fix to allow players to remain invisible while in PVP.
WildcardX: (Foin) Bug fix to display the correct pet for Ogre and Iksar beastlords.
WildcardX: (slowglass) Bug fix to properly update LDoN points.
WildcardX: (cbodmer) Bug fix to allow the bank change button to properly work.
WildcardX: (zydria) Bug fix to allow players to meditate while mounted.
WildcardX: (Cavedude) Enhancement to allow berserkers and rangers the chance to triple attack.
WildcardX: (Cavedude) Enhancement to quest::movepc method to accept a heading value.

==10/17/2007
KLS: Quick fix to quest::movegrp

==10/11/2007
KLS: Familiars should fall under the pet system instead of their own system now, familiars should act in a much more behaved fashion when it comes to functionality shared with normal pets.
KLS: Added a network timeout for clients in zone, clients should linkdead from zone when their connection is suddenly severed.
KLS: (AiliaMorisato) Added some checks for item bonuses, bonuses should not calculate if the item is not equipable.
KLS: NPCs should now accept signals while engaged in combat.

==10/10/2007
FatherNitwit: Quick fix for Divine Aura on pets exploit (KingMort)

==10/09/2007
KLS: Tweaked my AC system a bit, should get less default defense and the system should be much more lienent overall,
goal is to allow people to see more of a benefit from having AC.

==09/24/2007
FatherNitwit: (sfisque) Quick adjustment to item fishing probability.

==09/07/2007
KLS: Fixed melee mitigation and tweaks and a small fix to AC.
KLS: Small changes to the order in the getweapondamage code to make it a little more efficient
KLS: Added a field that allows you to override a factions innate desire to assist their own faction in battle to the npc_faction table

Required SQL:
alter table npc_faction add column ignore_primary_assist tinyint(3) not null default 0;

==09/02/2007
KLS: Fixed an issue with items adding stats to NPCs exponentially.
KLS: Added a rule (Boolean) NPC:UseItemBonusesForNonPets, if set to true (default) item bonuses will be applied to all npcs, but only to pets if it is false.
KLS: Lockpicking should work once again
KLS: Should hopefully no longer be possible to use teleport doors when they are in the closed position.
KLS: Added basic AC mitigation, not on by default uncomment #define USE_INT_AC in features.h to use it.

==08/31/2007
KLS: (gernblan) Added spawn group info to #npcstats
KLS: (TheLieka) Fix for zone exp modifiers not being used
KLS: (inkubus) Lull and harmony spells should land on enemy targets and not cause any aggro, still some work to be done on the AE portion.
KLS: (cbodmer) Pet aggro changed, owner will no longer gain more aggro from proximity than the pet
KLS: (cbodmer) Support for LDoN style boxes (class 62 + body type 33) implemented
KLS: The error in acmod() should no longer complain as much.
Required: Opcode files have changed, be sure to update to the latest .conf files.

==08/30/2007
KLS: Reworked Mob::GetWeaponDamage(), it will now return damage done by any item and NULL and will return a
value zero or less if we can't hit a mob with said item
KLS: Applied new GetWeaponDamage() to Attack and Special Attack code
KLS: Seperated Finishing Blow code to it's own function
KLS: Spell procs and innate procs should now function once again
KLS: NPC Weapons have more of an impact on NPC attack code now
KLS: Some NPC equipped items should correctly add bonuses to NPCs now
KLS: NPCs should no longer be able to dual wield with two-handed weapons
KLS: NPC weapons should properly show up if the item model is particularly high
KLS: Changed NPC_DW_CHANCE in features.h to 100% as default as opposed to the previous 5%
KLS: Archery will be affected by various crit AA effects and spell bonuses
KLS: Applied haste and slow modifiers to basic NPC special attacks such as kick and bash.

==08/26/2007
KLS: Fixed a misplaced field in the titanium spawn structure that was causing some spawn display issues on titanium.

==08/16/2007
KLS: Some cleaning up on autofire code
KLS: Reintroduction of item animation for archery

==08/15/2007
KLS: Fixed an /autofire crash
KLS: Added some conditions to RangedAttack() for now. Should keep from using ranged attacks when we shouldn't be allowed to attack.

==08/14/2007
KLS: Added /autofire
KLS: Fixed up SetAttackTimer() calculations a bit, especially when it comes to ranged attacks. Hopefully fewer instances where ranged attacks will be wasted because of the attack timer.
KLS: Ranged attack crits will now work no matter your chance to hit, also changed the appearances a tiny bit and added a min range check for /autofire.
KLS: Removed ReadBook packet size checking for now.. it was checking a wrong size and canceling out legitimate book requests
Make sure to update your .conf files to get /autoattack to work.

==08/12/2007
KLS: A little bit more tinkering with how potions and stacks work.

==08/11/2007
KLS: Fixed stackable potions in the item packet, they should now appear to have 1 charge instead of 0.
KLS: Added support for stackable items above 20.
KLS: Fixed forage, it will no longer overwrite slot 30 to create it's item, instead it will push the item onto the cursor like it should.

==08/10/2007
KLS: Fixed a stacking issue and made res effects not count to normal stacking rules.
KLS: Implemented a few more passive AA effects.
KLS: Added CanThisClassBlock() for the avoid code
KLS: Addressed some inconsistancies in the CanThisClass line of functions, GM classes should be able to do everything their base class can now.

==08/01/2007
FatherNitwit: (cavedude) Fix Iksar BL pet appearance.

==07/30/2007
Rogean: Fixed an item dupe exploit.

==07/28/2007
Rogean: Put in checks for No Drop Trading Hacks

==07/26/2007
KLS: Updated AA_Data.sql, still work to be done but should now be more complete than older AA sources.

==07/22/2007
FatherNitwit: Fixed another memory leak in world and zone.
KLS: Fixed up some message types so they match the client correctly.

==07/21/2007
Rogean: Fixed LDoN Merchant Item Inspect

==07/20/2007
FatherNitwit: (Striat) Fix for typos in perlparser.cpp to fix quest::me and quest::echo.
FatherNitwit: (Striat) Fix argument type in quest::setguild.
FatherNitwit: Fixed quest::settime
Rogean: Fixed up strikethrough a little
Rogean: Removed ability to proc on a riposte attack
Rogean: Implimented HoTT (Health of Target's Target) Functionality. This will only work for people with HoTT Built into their interface.
	To get UI Files for a Target Window, see http://www.eqemulator.net/forums/showthread.php?p=135291
FatherNitwit: Fix a few memory leaks.
Changes to opcode files:
patch_Titanium.conf: OP_TargetHoTT=0x6a12
patch_6.2.conf: OP_TargetHoTT=0x3ef6

==07/16/2007
FatherNitwit: (Glather) Fix for mobs showing weapons
FatherNitwit: (Cbodmer) Notify owner when buffs wear off pets.

==6/06/2007
KLS: (Darkonig) Change to the way tradeskill containers are handled.
KLS: (Darkonig) Change to item->isStackable() implementation, should let certain items that the client lets stack also stack server-side.

==6/01/2007
KLS: Addressed a memory leak in spell code and a memory leak in NPC destruction code.

==4/13/2007
KLS: Fixed an issue with buff duration inc. that was causing buffs to lose their effects (I hope)

==4/08/2007
KLS: Added support for the skill Frenzy.
KLS: Various tweaks and changes to some passive AA abilities.
KLS: Added #traindisc to train disciplines on the target player, #scribespells should no longer memorize disciplines to the spellbook.
KLS: Fixed an issue with spells that require components that use item ids higher than 32k
KLS: Fixed an issue with AAs and focus effects that increase buff duration not appearing correctly for clients until they zone.

==4/02/2007
KLS: Implemented number6 inspired item cooldown timers.
KLS: Added rules: NPC:MinorNPCCorpseDecayTimeMS & NPC:MajorNPCCorpseDecayTimeMS to set the decay time in millisecond of mobs below 55 and greater or equal to 55 respectively
KLS: Addressed an issue that caused some beneficial spells to generate incorrect aggro amounts.
KLS: Implemented some more passive PoP AA skills.
KLS: Fixed an problem with avoidance AAs adding chance to be hit instead of subtracting it.
KLS: Small change to the way pets and familiars initially aggro, familiars should never aggro now.
KLS: Fixed an issue where the combat code was checking for warrior triple attack but the skill check would always fail.
KLS: Critical hits should now be filterable as critical hits.
KLS: Redid hp and mana calculations based on magelo formulas, should be much more accurate, especially when using AA that increase hp.
KLS: Made mend skill checks more lienent, shouldn't ever fail after 200 skill, shouldn't ever hurt you after 150
KLS: Initial implementation of hp balance spell effect.
KLS: Focus effects that limit max level should now correctly reduce the effect by a percentage if the spell is over the level cap

==3/26/2007
FatherNitwit: Optimized the merchantlist_temp query on boot.

==3/14/2007
KLS: Put in FNW's requested changes to tradeskill combines from the other day that I almost forgot about
KLS: Tradeskill combines should check for container type now.

==3/11/2007
KLS: Attack() will not set our target unless we have no target now.
KLS: Tweaked some invis and hide stuff to hopefully catch more situations where it should break correctly.
KLS: Fixed the spell critical hit ratio to be accurate.
KLS: Spell Casting Deftness and Quick Buff should now work with spells that have duration formulas.
KLS: NPCs will no longer be restricted by the number of targets on their AE spells.
KLS: Spells base_1 will load as a 32 bit signed int instead of a 16 bit signed int, should correct some oddities with certain spells. For example certain summon spells using large item ids.
KLS: Fixed a tradeskill exploit with tradeskill containers and experimentation.

==3/10/2007
Rogean: Fixed #si and minstatus

==3/3/2007
FatherNitwit: Finally rewrote 'make depend' to properly track dependencies in linux builds

==2/22/2007
KLS: Some more changes to AA system:
KLS: altadv_vars.cost_inc will now be unsigned to allow your skills to cost less per level
KLS: Client side aa effects are now loaded from the database once again
KLS: Updated AA_data.sql to include AAs up to planes of power.
KLS: Added #refundaa as a way for server GMs to refund a players alt ability points and give them back their points.
KLS: Implemented limited numbered hits on buffs.
KLS: Root and charm will now act as partial capable spells.
KLS: Vampires will act as undead, which is consistant with what the client thinks is undead.

Required SQL:
CREATE TABLE aa_effects (
  id int(10) unsigned NOT NULL auto_increment,
  aaid mediumint(8) unsigned NOT NULL default '0',
  slot tinyint(3) unsigned NOT NULL default '0',
  effectid mediumint(8) unsigned NOT NULL default '0',
  base1 mediumint(8) unsigned NOT NULL default '0',
  base2 mediumint(8) unsigned NOT NULL default '0',
  PRIMARY KEY  (id),
  UNIQUE KEY NewIndex (aaid,slot)
) TYPE=MyISAM;

Optional SQL:
Resource AA_Data.sql

==2/18/2007
WildcardX: Player casted area of effect detrimental spells will not longer have an affect on players not engaged in PvP.
WildcardX: Fixed spawnlimit setting to control the maximum times a given npc_type can spawn in the same zone.
WildcardX: (Bleh) Fixed player emote animations.
WildcardX: Implemented a server-side check of a Client object's target to avoid it being null.
WildcardX: Fixed a zone crash that could occurr during a monk special attack or a rogue's backstab attack.
WildcardX: Area of effect beneficial spells will no longer affect non-player characters.

==2/16/2007
KLS: Updating Changelog AA work to be more clear as well as the required SQL.

Required SQL:
alter table altadv_vars add column cost_inc tinyint(4) not null default 0;

Optionally:
Source in AA_data.sql

==2/15/2007
WildcardX: Commented out the code supporting the deprecated OP_CloseContainer opcode.
WildcardX: Fixed world containers so when one player has closed a world container, another player can open it without the need for the first player to leave the zone.
KLS: Initial release of ongoing AA work
KLS: Most(Not all) Alternate Advancement abilities up to SoL Class working correctly with correct costs and client side effects
KLS: Fixed many many AA related bugs
KLS: Fixed Activatable AA buttons on titanium
KLS: Added #altactivate command to facilitate the new AA work
KLS: Added Character:ConsumptionMultiplier rule.
KLS: Server wont send a eat/drink message unless the player forces the client to eat/drink
KLS: Fixed an issue with TGB working in a backwards manner.
KLS: Fixed an issue with AE bard spells hitting the bard instead of the targets around him.
KLS: Fixed an issue with cancel magic spells that made them act as completely beneficial spells.
KLS: Added many missing spell effects into spdat.h
KLS: Fixed a beneficial aggro issue that was resulting in certain clicky items giving significant amounts of aggro.
KLS: MOBs with pets or familiars already out will not attempt to cast pet spells.
KLS: Curse, Poison, and Disease counters will go past 256 and all be active but will reset on zoning
KLS: Curse counters will work now.
KLS: Intimidation should work under the new skill cap rules.
KLS: Killing something will no longer clear your server side target unless you killed your target.
KLS: Fixed a int to float conversion issue in CalcRecommendedLevelBonus() (as per slowglass' post)
KLS: Fixed a crash issue related to resists, should help those crashing after zoning with a spell that has a heartbeat resist such as root.
KLS: Removed an unused spell function that didn't make much sense.

==2/14/2007
WildcardX: Implemented a cap of 4 mobs affected by targeted area of effect spells. This is consistent with EQ live.
WildcardX: Implemented the succor line of spells.
WildcardX: Specific mobs can now be toggled as findable or not findable by the track skill. Mobs which are not findable will not appear on any track lists.

Required SQL:
alter table npc_types add column trackable tinyint(4) not null default 1;

==2/13/2007
WildcardX: Fixed bug that broke #zone command.

==2/11/2007
WildcardX: Further enhancements to zone weather system to reduce the amount of work necessary to perform weather and to make it more logical.
WildcardX: Added a new opcode for both 6.2 and Titanium clients, OP_ZonePlayerToBind=0x385e. Please be sure to update your .conf files.
WildcardX: Implemented the beginnings of what will become a new "system" to deal with zoning.
WildcardX: Titanium clients will now zone correctly upon death and will not go link dead and get sent to character select screen.
WildcardX: Both 6.2 and Titanium clients will now return character view to first person from corpse hover after completing zone to bind point after death.
WildcardX: Group member camping will now auto-disband upon an actual logout.
WildcardX: Disbanding a link dead group member will no longer crash the zone.
WildcardX: Link dead group members will now automatically remove themselves from group.
WildcardX: Many zoning situations will now use "heading". This was largely being ignored before. However, there are still a couple more situations where this needs to be implemented. I will continue implementing "heading" as i continue to work on the zoning code.
WildcardX: (Cavedude) Implemented yet another container type to perform even more quest combines.
WildcardX: Added additional logging to zone "debug" and "error" to support zoning and intra-zone movement.
WildcardX: Group members disbanding in another zone will still fail to appear as removed from group from other group members, but disbanding this group member when he/she rejoins group in zone will no longer crash the zone and you will be able to re-add this former group member without having to destroy the whole group.

==2/10/2007
FatherNitwit: Reworked NPC Idle spell casting to avoid extra LOS checks (based on KLS's observations)
FatherNitwit: Reworked NPC spell casting timers to be more consistent.

==2/9/2007
Doodman: Fixed AdventurePoints_Update_Struct to be the correct struct.  Same structure for both 6.2 and Ti.  Changed core structure.

==2/1/2007
WildcardX: (Bleh) Fixed quest globals.
WildcardX: Fixed the common error message MakeNameUnique() has been recording in logs about being unable to make a unique name for mobs greater than 100 in a zone.

Required SQL:
ALTER TABLE quest_globals CHANGE expdate expdate INT;

==1/29/2007
WildcardX: Cleaned up zone weather code for better efficiency. Weather checks will be more frequent when their is snow or rain and less frequent when the sun is out.
WildcardX: Made weather log messages more consistent and informative.
WildcardX: Druids are now replace bards has the second best tracker in the game. This is consistent with live.
WildcardX: Fixed tracking skill. Tracking will now return a full list of every mob within the tracker's skill range, not just the first 100 mobs.
WildcardX: Clients will now see their coins update from quests or player trades. No zoning is required anymore.
WildcardX: The server is now using the OP_MoneyUpdate opcode, instead of OP_MoneyOnCorpse opcode for coin updates.
WildcardX: Clients entering a zone will now receive a weather packet. This will ensure all clients in the same zone will experience the same weather.

==1/23/2007
KLS: Fixed the change log so the current entries are correct
KLS: Fixed a small but significant crash.

==1/15/2007
KLS: Fixed an issue with storing timers.
KLS: Added in hide and basic support of hide improving AAs later
KLS: Some more changes to how procs work, perma procs will not be influenced by mob stats, should make them easier to balance.
KLS: Some internal changes to critical hits with some future spell effects in mind shouldn't change functionality.
KLS: WildCardX's key changes, keys should now work even if they're not on your cursor and no matter where in your inventory it's on you, including your bank
KLS: Pickpocket should work considerably better.
KLS: Removed some obsolete discipline code that I ran across.
KLS: Character:ExpMultiplier rule should work correctly now.
KLS: Fixed an issue with the client position update code that should see the server sending fewer redundant client position update packets.
Required SQL:
ALTER TABLE `npc_types` ADD `see_hide` tinyint(4) NOT NULL default '0';
ALTER TABLE `npc_types` ADD `see_improved_hide` tinyint(4) NOT NULL default '0';
Optional SQL:
UPDATE `npc_types` SET `see_hide` = 1 WHERE see_invis = '1';
UPDATE `npc_types` SET `see_hide` = 1 WHERE see_invis_undead = '1';

==1/07/2007
KLS: action_struct unknown06 renamed to instrument_mod to reflect it's behavior
KLS: WildCardX inspired weapon proc rate changes, proc rates should now load as a signed int instead of an unsigned int and should correctly calculate.
KLS: Some changes to the expired function of ptimers, it should return if the timer is expired whether or not the timer is enabled. This avoids certain situations where timers are disabled and then run down without ever being reenabled and essentially being locked down forever unless the database admin resets it manually.
KLS: Also fixed a small ptimer expire bug where if the timer just reached zero it would return expired until it was one second past zero.
KLS: Evade will no longer set the rogue's hate to 0, but instead will lower the hate by some amount based on level and the current hate of the monster. May need tweaking as don't know exact values.
KLS: Combat Range has been redone a bit so it no longer mixes ints and floats and also correctly factors in the size of the enemy you're fighting. Should prevent exploits where you can hit something rooted/permarooted but they cannot hit you back.
KLS: Rampage and enrage have been reworked and should work correctly, rampage will now carry a rampage list of 20 by default that does not get wiped until the monster stops fighting.
KLS: Fixed up spell fields and spell loading to make more sense, identified some fields. It should load in order now.
KLS: Sneak should now break when you deal / are dealt damage.
KLS: Hide should succeed a bit more and use the correct messages: "You have hidden your self from view", "You have failed to hide your self from view"
KLS: CalcAC() and CalcATK() now use signed values instead of unsigned.
KLS: When a mob returns to their guard point they should now correctly assume their guard heading.
KLS: Succor should fully wipe you from hate lists now, as should zoning.
KLS: Spin effects are now correctly capped at a max of level 55, all targets above this cannot be affected.
KLS: SE_LimitEffect should now correctly deal with any effect type the spell has and not just the ones hard coded into the server.
KLS: (Cripp)Fix for zone heading

==12/24/2006
KLS: (WildcardX) Fix for generic tradeskill container combines
KLS: (WildcardX) Fix for quest::depop and multipul mobs in the same zone that share a NPCType ID
KLS: (WildcardX) Zones can now be flagged to disallow offensive actions.
KLS: (WildcardX) Fix for zone weather, should no longer rain in places with no set weather, such as dungeons.
KLS: Interrupts should only be caused by melee, not spell damage now
KLS: Roots should only break on spell damage now.
KLS: DoT Focus effects should work correctly
KLS: Spell Formula 122 (Splurt) should now function correctly.
KLS: Berserkers should find themselves with the ability to double attack.
KLS: Curse, poison and disease counters should no longer be factored into stacking, should keep certain dots and certain slows from overwriting and blocking each other.
KLS: Complete Heal buffs will no longer stack with or overwrite other complete heal buffs.
Required SQL:
ALTER TABLE `zone` ADD `cancombat` tinyint(4) NOT NULL default '1';
UPDATE `zone` SET `cancombat` = 0 WHERE short_name = 'nexus';
UPDATE `zone` SET `cancombat` = 0 WHERE short_name = 'poknowledge';
UPDATE `zone` SET `cancombat` = 0 WHERE short_name = 'potranquility';

==12/19/2006
KLS: Fixed up Illusions a bit
KLS: Fixed a bug where the base2[0] field of a spell was not getting loaded correctly
KLS: Implemented Sacrifice Spells
KLS: Implemented Call of the Hero Spells
KLS: Implemented Silence spells
KLS: Implemented Invis Vs Animal Spells
KLS: Implemented Illusion Copy Spells
KLS: Implemented Dispel Detrimental Spells
KLS: Dispel Magic spells will skip spells with poison or disease counters.
KLS: Spells that imbue items(summon items with reagents, sacrifice) will not be affected by reagen conservation focus.
KLS: If a player is at max level the experience he has will cap at the max experience to gain the next level instead of being able to gain experience past his visible experience bar.
KLS: The max level you can group with and gain experience is now YourLevel*1.5 instead of YourLevel+8.
KLS: You'll only get an experience loss message if you actually lose exp now, no more You lost experience messages when you take a 0% rez.

==12/15/2006
FatherNitwit: Fix for possible crash when NPCs are immune to damage.
KLS: Small fix for newly created player corpses, hopefully they will no longer act like they are npc corpses.
KLS: Changed how recourse works a bit, it is now done after the resist check.
KLS: Group spells should be able to land on the caster's pet now.
KLS: Fixed crazy Bash/Kick damage.

==12/09/2006
KLS: Stun immune should apply to spin effects such as those found in One Hundred Blows.
KLS: Some cleanups in special attack and resist code.
KLS: Added a define SKILL_MAX_LEVEL in features.h that lets you define how high level you can get skills from the database, defaults to 75.
KLS: Damage shields wont proc on yourself any longer to avoid some wierdness. They only ever procced on yourself under special conditions so it shouldn't be noticable.

==12/03/2006
FatherNitwit: Fixed a few issues related to quest global expiration.

==12/01/2006
KLS: NPC ghosting fix with rule support.
FatherNitwit: Fixing up spell set loading crash.
KLS: More skill fixes
KLS: Moved the old class_skills system over to the new skills system.

==11/28/2006
FatherNitwit: (bleh) Added #hatelist command.
FatherNitwit: (bleh) Work on windows build issues.
FatherNitwit: Optimized merchant list query during zone boot.
FatherNitwit: Fix a few race related issues in eqbuilder.

==11/26/2006
FatherNitwit: Fixed berserker skill cap issue that KLS found.

==11/25/2006
KLS: The way resists are calculate have been changed and are now somewhat tweakable with rules, and partial hits should work correctly.
KLS: Ripostes have been seperated from the attack code and will now apply to all attacks.
KLS: Skills and Spells that directly modify melee damage should now work and be applied to all attacks.
KLS: Some fixes and optimizations in the attack code.
KLS: Familiars will no longer aggro like regular pets.
KLS: Damage Shield Bonuses on items should no longer be backwards.
KLS: Heals will report the amount of damage healed to their targets and casters.
KLS: Pets will now spawn at %t`s pet instead of %t's pet, the client filters out ' in certain things like combat and considering.
KLS: Stun Immunity will now only apply to the stun portion of the spell instead of the whole spell.
KLS: Instrument Mods should send correctly on the reapplication of bard pulses.
KLS: Spells should no longer check instant heals/damage portions of the spell for stacking purposes, several spells that should have stacked before but didn't now should properly.

=11/24/2006
FatherNitwit: (number6) Fix for loading saved spell sets.
FatherNitwit: Added #giveitem as inspired from the forums.
FatherNitwit: Changed default status required for #summonitem to 200.

==11/20/2006
KLS: Skill system tweaks and bug fixes.
KLS: Bard songs will now skill up while they are being sung instead of just when first cast.

=11/19/2006
FatherNitwit: Completely redid skills in the code to support >252
FatherNitwit: Skill caps are now database driven (shared mem)
Create this table, and source in SkillCaps.sql
CREATE TABLE skill_caps (
 skillID TINYINT UNSIGNED NOT NULL,
 class TINYINT UNSIGNED NOT NULL,
 level TINYINT UNSIGNED NOT NULL,
 cap MEDIUMINT UNSIGNED NOT NULL,
 PRIMARY KEY(skillID,class,level)
);

==11/07/2006
KLS: Changed how critical hits work, as a result things that could not crit before like special attacks, now can.
KLS: Cleave like effects should be fixed to do an increase of your already standing chance to critical instead of a flat increase.
KLS: Reworked much of the special attack code.
KLS: Applied haste to combat skill timers, they should give trouble much less often.
KLS: Monk skill damage will be more random but the max damage they can do has not changed.
KLS: Skills should be avoided less often, they were being avoided twice in the code instead of once.
KLS: Implemented basic strikethrough.

==11/06/2006
FatherNitwit: (Cripp) periodic auto save.
FatherNitwit: LostZaphod's possible win32 azone fix. (untested)
FatherNitwit: (cbodmer) Regen multiplier rules.

==11/04/2006
Rogean: Haste Fixes: Fixed Haste/Slow as well as Bard Songs (Including Overcap).

==11/03/2006
KLS: Added Magoth's stun opcodes for both Titanium and 0.6.2 clients
KLS: Changed Object Clear opcode for Titanium

==10/30/2006
FatherNitwit: (KLS) Fixes for max endurance calc on zone in
FatherNitwit: (KLS) Fix for rulesystem category issue.
FatherNitwit: Added rule support to world (no runtime manipulation yet)
FatherNitwit: Load the 'default' ruleset from the DB if no variable is set.
KLS: Fix for client corpses not appearing to clients who witnessed their death until they zone.
KLS: Updated detrimental and healing spell aggro.
KLS: Hate mods from spells should now work. (Enchanter Visage/Shadowknight Voice line of spells)
KLS: Found and implemented the Hate Added in detrimental spells. (Shadowknight Terror line of spells)
KLS: Change to let special messages use their correct types.
KLS: Group fix for leader being unable to invite a 3rd party member until he/she zones.
KLS: GroupInvite2 opcodes found for both Titanium and 0.6.2, make sure to get the updated .conf files.
KLS: Glow messages should only go off for instant spells.
KLS: How haste calculations have been calculated has been reworked somewhat, haste shouldn't break any more, nor should all hastes stack.

==10/28/2006
FatherNitwit: Fix for NPC weapon appearance due to loot items.
aza77: Fixed SendAppearancePacket
aza77: Fixed a PvP bug that caused the zone to crash on death

==10/26/2006
FatherNitwit: WildcardX's name cleanup.
FatherNitwit: Tweak for 64 bit pointer support in the item code of the struct strategy.
FatherNitwit: More const cleanup in npc.h

==10/22/2006
FatherNitwit: added EVENT_COMBAT triggered when an NPC engages any form of
FatherNitwit: 	combat and when combat is over. $combat_state signals which.
FatherNitwit: Hopefully fixed d_meele_texture
FatherNitwit: Cleaned up a lot of const related issues (attrs, AAs, and more)
FatherNitwit: Moved a lot of NPC specific stuff from Mob into NPC
FatherNitwit: Reworked special attacks a bit (monk, kick, backstab):
FatherNitwit:   they now use the standard combat hit chance forumals based on offense/defense instead of always hitting
FatherNitwit:   they are now subject to damage avoidance (parry, riposte, etc.) like normal attacks

==10/21/2006
FatherNitwit: Hopefully fixed spawn timer variance.

==10/18/2006
FatherNitwit: Maybe fixed issue with losing items when zoning in mysql 5.
FatherNitwit: Fixed issue with color saving properly.

==10/15/2006
FatherNitwit: (KLS) Implemented Endurance
FatherNitwit: (KLS) Implemented support for seperate discipline timers
FatherNitwit: (KLS) Fix for haste & slow issue on NPCs
FatherNitwit: (KLS) Fixed faction not changing issue (caused by min/max sticking fix)
FatherNitwit: (KLS) Changed con level code to be more accurate
FatherNitwit: Made /pet attack range a rule (Pets:AttackCommandRange) default to 150.
FatherNitwit: (KLS) Changed how consider and consider corpse is handled a bit, consider corpse should be more informative
FatherNitwit: (KLS) Fixed bug with charged/stacked items on corpses.
FatherNitwit: (KLS) Support for leaving naked corpses
FatherNitwit: Added rules: Character:DeathExpLossLevel, Character:CorpseDecayTimeMS
FatherNitwit: 	Character:LeaveNakedCorpses
FatherNitwit: Replaced db variable 'leavecorpses' with rule Character:LeaveCorpses
FatherNitwit: (KLS) hopefully fixing monk kill crash.
FatherNitwit: (KLS) made it so you can snare things while they're rooted
FatherNitwit: (KLS) made it so beneficial songs will stack with beneficial spells
FatherNitwit: (KLS) made it so a beneficial effect and a detrimental of an effect don't conflict
FatherNitwit: (KLS) let dots of the same resist type stack so long as they aren't the same spell
FatherNitwit: cleanup windows logging a bit
FatherNitwit: (eq4me) GCC 4+ build fixes

==10/05/2006
FatherNitwit: (KLS) Fix for explicit spell stacking rule problem.

==10/02/2006
FatherNitwit: (InsaneWallaby) Tradeskill skill gain fix.
FatherNitwit: (WildcardX) Improved spawnstatus command.
FatherNitwit: (number6) Work around for lay hands/harm touch recovery time hang.
FatherNitwit: Possible fix for faction sticking at min/max.

==09/21/2006
FatherNitwit: Revert part of bard mod fix, and fix it right.

==09/20/2006
FatherNitwit: Prevent stats from going negative.
FatherNitwit: Try to prevent skills from wrapping above 252 (still no support for higher)
FatherNitwit: Minor shop close tweak.
FatherNitwit: (Zuesrooster) Potential bard modifier fixes.

=09/07/2006
FatherNitwit: (eq4me) Reworked tradeskill success and gain rates
FatherNitwit: Potentially addressed trade coin display issue.
FatherNitwit: Undid clickie spell component change until dicussion finishes

=09/07/2006
FatherNitwit: (Aramid) Fixed ability to bind.
FatherNitwit: (Somebody, forget who) Fixed issue with reagents being consumed by clickies.
FatherNitwit: (eq4me) Fixed tradeskill stat bonus calculation for success rate.
FatherNitwit: Maybe fixed up zone solution file to only build perl versions, for debug and release.

==08/20/2006
FatherNitwit: Zero out buff counters when we occupy a new slot.

==08/16/2006
FatherNitwit: Glorandwarf's updated AA.h

==08/14/2006
FatherNitwit: More work on titanium AAs by Glorandwarf.
FatherNitwit: (Zuesrooster) Fix for pet self buffing.

==08/10/2006
FatherNitwit: Changed logic in quest parser to potentially avoid windows crash (Zuesrooster)
FatherNitwit: (Zuesrooster) fixed aggro quest related crash.
FatherNitwit: Untested update of OP_AugmentItem (John Adams)
FatherNitwit: A little bit further on AAs (Glorandwarf)

==07/27/2006
FatherNitwit: Added door info dump on click (DOORS__INFO)

==07/23/2006
FatherNitwit: Enforce some zone requirements on zone in too.
FatherNitwit: Fixed minor tradeskill crash.

==07/23/2006
FatherNitwit: (EverHood) Archery/self PvP mitigation changes
FatherNitwit: (EverHood) Regen tweaks
FatherNitwit: (EverHood) Fix DoT damage and messages
FatherNitwit: Killed erronious double-effects on regen/HoT buffs
FatherNitwit: Fixed replace-container client side appearance issue.

==07/17/2006
FatherNitwit: Added new rules subsystem to allow game rules to be changed
                at runtime. more about this will come as time goes on.
FatherNitwit: Added #rules command to manage rules data from in game.
FatherNitwit: Renamed old #rules to #serverrules
FatherNitwit: Moved max level into the rules system (Character:MaxLevel)
FatherNitwit: Added GM-trained tradeskill caps to rule system (Skills:MaxTrainTradeskills)
FatherNitwit: Fixed intimidation skill cap
FatherNitwit: Fixed adventure opcodes for adventure merchants on Ti.
FatherNitwit: Fix interrupt cast opcode for Ti.
FatherNitwit: Tweak to missing-spell-creagent case, might fix it?
Requred SQL:
CREATE TABLE rule_sets (
  ruleset_id TINYINT UNSIGNED NOT NULL auto_increment,
  name VARCHAR(255) NOT NULL,
  PRIMARY KEY(ruleset_id)
);
INSERT INTO rule_sets VALUES(0, "default");
UPDATE rule_sets SET ruleset_id=0;
CREATE TABLE rule_values (
  ruleset_id TINYINT UNSIGNED NOT NULL,
  rule_name VARCHAR(64) NOT NULL,
  rule_value VARCHAR(10) NOT NULL,
  INDEX(ruleset_id),
  PRIMARY KEY(ruleset_id,rule_name)
);

==07/16/2006
FatherNitwit: (EverHood) Implemented Eye of Zomm and Bind Sight
FatherNitwit: Reworked Eye of Zomm code

==07/16/2006
aza77: Fixed the lift issue + keyitems at doors
aza77: Fixed + modified traps and added a new type of trap
ALTER TABLE `traps` ADD `message` VARCHAR( 200 ) NOT NULL AFTER `effectvalue2` ;

==07/13/2006
FatherNitwit: Fixed zone crash when removing a guild member.
aza77: Added in game guild creation variables.GuildCreation + commands #guildcreate #guildapprove #guildlist
FatherNitwit: Fixed feign aggro crash.

==07/12/2006
aza77: Added triggered only doors.

==07/10/2006
FatherNitwit: Adding EverHood's lull fixes.

==07/09/2006
FatherNitwit: Wizardanim has dicovered the opcode to partiall fix AAs for Ti!!
FatherNitwit: EverHood's Mob ghost running on (feign)death fix.
FatherNitwit: Redid walkspeed code to be caclualted from runspeed (EverHood inspired)
FatherNitwit: Fixed up run AA speed mods.
FatherNitwit: Added EVENT_NPC_SLAY when NPCs kill another NPC. (fanman55 inspired)
FatherNitwit: Fixed up a long running memory issue in quest::ChooseRandom
ALTER TABLE `npc_types` DROP walkspeed;

==07/05/2006
aza77: Added variables.Rules + commands #rules #acceptrules
ALTER TABLE `account` ADD `rulesflag` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '0';

==07/04/2006
FatherNitwit: Maybe fixing feign memory.
FatherNitwit: EverHood's temp pets and group recourse fixes.
FatherNitwit: EverHood's NoLongerEngaged AI fix.
FatherNitwit: bufgix in log.ini reading.

==06/29/2006
aza77: Get the SQL right:
ALTER TABLE `npc_types` CHANGE `hp_regen_rate` `hp_regen_rate` INT( 11 ) NOT
NULL DEFAULT '0';
ALTER TABLE `npc_types` CHANGE `mana_regen_rate` `mana_regen_rate` INT( 11 ) NOT
NULL DEFAULT '0';

==06/28/2006
FatherNitwit: Added EverHood's feign memory fixes
FatherNitwit: Reverted regen of 0 to mean "auto config", and negative to mean "no regen"
aza77: Changed hp_regen + mana_regen such that negative values indicate no regen
ALTER TABLE `npc_types` CHANGE `hp_regen_rate` `hp_regen_rate` INT( 11 ) NOT
NULL DEFAULT '0';
ALTER TABLE `npc_types` CHANGE `mana_regen_rate` `mana_regen_rate` INT( 11 ) NOT
NULL DEFAULT '0';
UPDATE `npc_types` SET `hp_regen_rate` = '0' WHERE `hp_regen_rate` = '-1';
UPDATE `npc_types` SET `mana_regen_rate` = '0' WHERE `mana_regen_rate` = '-1';

==06/27/2006
aza77: Added quest::setnextinchpevent + $inchpevent
aza77: Added quest::sethp

==06/25/2006
aza77: Fixed PVP appearance issues
FatherNitwit: Fixed the #logsql command

==06/20/2006
FatherNitwit: tweaked some ability timers and fixed up ranger crit damage

==06/18/2006
FatherNitwit: necro DOT feign death fix (unicorn97211)
FatherNitwit: Disable kill-pet-on-feigndeath by default (features.h FEIGN_KILLS_PET)
MySQL 5 compatibility increases (WildcardX):
alter table account DROP packencrypt;
alter table character_ change extprofile extprofile blob NULL;
alter table player_corpses change data data blob NULL;
alter table player_corpses_backup change data data blob NULL;


==06/15/2006
aza: Added MySQL5 support (FOR CUSTOM COMPILE ONLY)
ALTER TABLE spawn2 CHANGE `condition` `_condition` MEDIUMINT(8) UNSIGNED NOT
NULL DEFAULT '0';

==06/07/2006
FatherNitwit: Fixed SetAATitle (#title), and experted it to perl.
FatherNitwit: Fixed quest money reward printing. (WildcardX)

==06/03/2006
FatherNitwit: Fixed a client-side inventory appearance issue, may help with trade bugs.

==05/31/2006
FatherNitwit: (aza) Added quest::unscribespells
FatherNitwit: fixed ranger critical hit chance.
FatherNitwit: Implemented conditions on windows.
FatherNitwit: maybe made NPCs stop buffing pets.
FatherNitwit: Fixed npc spawn limits.
FatherNitwit: Fixed feign death missing opcode.
FatherNitwit: Hopefully fixed an issue causing server to slow down terribly after being up for a day+.
FatherNitwit: Fixed crash on zone/world shutdown.
ALTER TABLE spawnentry DROP spawn_limit;
ALTER TABLE spawngroup ADD spawn_limit tinyint(4) NOT NULL default '0';
ALTER TABLE altadv_vars ADD class_type int unsigned NOT NULL DEFAULT 0;

==05/06/2006
FatherNitwit: (aza) Enabled newer froglok classes.
FatherNitwit: (aza) Enabled several berserker combat skills.
FatherNitwit: Fixed possibly infinite recursion in map code.
FatherNitwit: Holding EQStreams open until they send all their data.
FatherNitwit: Trying to fix death disconnect (and failing)
FatherNitwit: Maybe fixed tinkering searching.

==04/24/2006
FatherNitwit: Added new HTTP functionality for moving chars between accounts.

==04/21/2006
FatherNitwit: Fixed bane damage loading problem.

==04/20/2006
FatherNitwit: Hopefully fixed the unidentified stream crash and some memory leaks.
FatherNitwit: Fixed weapon affinity huge proc bonuses
FatherNitwit: Fixed spell-granted procs not getting removed.
FatherNitwit: Implemented the 'procrate' field on items.

==04/13/2006
FatherNitwit: Fixed the issue of charmed mobs getting assists from their old friends.
FatherNitwit: Changed version number to 0.7.0

==04/13/2006
FatherNitwit: fixed a crash related to client destructors and tradeskills
FatherNitwit: Adding the incstats canges from aza on the forums.

==04/01/2006
FatherNitwit: FINALLY found and fixed the netcod crash I introduced a while back.
FatherNitwit: Fixed bard group buff tics.
FatherNitwit: Fixed the global guild chat going to everybody problem.

==03/27/2006
Doodman: Added queuing for future packets, fixing lag reported by Richardo

==03/25/2006
FatherNitwit: Fixed character deletion to remove guild member entries. (Aeris1)

==03/24/2006
Doodman: Added live struct strategy.  Can get to char select

==03/22/2006
Doodman: Fixed Ti items
Doodman: Added some field name mappings to load_13thfloor_items script.
UPDATE items SET stackable=1 WHERE itemtype IN (14, 15, 17, 18, 19, 27, 37, 38, 55, 56);

==03/22/2006
FatherNitwit: Refactored the netcode to move the opcode manager back into the stream.

==03/21/2006
Doodman: Merge up from Source branch
Doodman: Fixed CreateItem

==03/20/2006
FatherNitwit: Fixed invisibility vs. undead to only apply to undead mobs.
FatherNitwit: Added `slot` column to starting items to support much more robust configurations.
FatherNitwit: Updated char backups. (noted by typhoon)
Required SQL:
ALTER TABLE starting_items ADD slot MEDIUMINT NOT NULL DEFAULT -1;
ALTER TABLE character_backup ADD class TINYINT NOT NULL DEFAULT 0;
ALTER TABLE character_backup ADD level MEDIUMINT UNSIGNED NOT NULL DEFAULT 0;
ALTER TABLE character_backup DROP guild;
ALTER TABLE character_backup DROP guildrank;
ALTER TABLE character_backup DROP publicnote;

==03/19/2006
FatherNitwit: A bunch of minor changes, should help some bugs in 0.6.6.
FatherNitwit: Wrote basic guild management pages, much more needed.

==03/18/2006
FatherNitwit: Queue fix in netcode, should help crashing problem.
Doodman: Redid world port allocation not start looking for a port at the begining each time
Doodman: Made zone send it's port to world on connect, in case it is reconnecting to a restarted world
FatherNitwit: Changed version number to 0.6.6
FatherNitwit: Un-broke some outbound TCP connection stuff I broke to allow reconnecting.
FatherNitwit: Completely rewrote guilds in both world and zone.
FatherNitwit: Removed guilds from shared memory.
FatherNitwit: Removed the seperation between EQ ID and DB ID.
FatherNitwit: Fixed countless rediculous things about guilds.
FatherNitwit: Any change in guild state should update in real time now.
FatherNitwit: Guild leadership may need re-establishing since it changed from account to char based.
FatherNitwit: Guild structure in database has changed significantly.
Note: custom rank stuff is too much work for me to preserve in the DB, since I doubt
	anybody uses it, so if you have them, you can figure it out yourself or remake them.
Required SQL:
ALTER TABLE character_ ADD class TINYINT NOT NULL DEFAULT 0;
ALTER TABLE character_ ADD level MEDIUMINT UNSIGNED NOT NULL DEFAULT 0;

CREATE TABLE guild_ranks (
    guild_id MEDIUMINT UNSIGNED NOT NULL,
    rank TINYINT UNSIGNED NOT NULL,
    title VARCHAR(128) NOT NULL,
    can_hear TINYINT UNSIGNED NOT NULL,
    can_speak TINYINT UNSIGNED NOT NULL,
    can_invite TINYINT UNSIGNED NOT NULL,
    can_remove TINYINT UNSIGNED NOT NULL,
    can_promote TINYINT UNSIGNED NOT NULL,
    can_demote TINYINT UNSIGNED NOT NULL,
    can_motd TINYINT UNSIGNED NOT NULL,
    can_warpeace TINYINT UNSIGNED NOT NULL,
    PRIMARY KEY(guild_id,rank)
);

# guild1 < guild2 by definition.
CREATE TABLE guild_relations (
    guild1 MEDIUMINT UNSIGNED NOT NULL,
    guild2 MEDIUMINT UNSIGNED NOT NULL,
    relation TINYINT NOT NULL,
    PRIMARY KEY(guild1, guild2)
);

CREATE TABLE guild_members (
    char_id INT NOT NULL,
    guild_id MEDIUMINT UNSIGNED NOT NULL,
    rank TINYINT UNSIGNED NOT NULL,
    tribute_enable TINYINT UNSIGNED NOT NULL DEFAULT 0,
    total_tribute INT UNSIGNED NOT NULL DEFAULT 0,
    last_tribute INT UNSIGNED NOT NULL DEFAULT 0,
    banker TINYINT UNSIGNED NOT NULL DEFAULT 0,
    public_note TEXT NOT NULL DEFAULT '',
    PRIMARY KEY(char_id)
);

ALTER TABLE guilds DROP eqid;
ALTER TABLE guilds DROP rank0title;
ALTER TABLE guilds DROP rank1title;
ALTER TABLE guilds DROP rank1;
ALTER TABLE guilds DROP rank2title;
ALTER TABLE guilds DROP rank2;
ALTER TABLE guilds DROP rank3title;
ALTER TABLE guilds DROP rank3;
ALTER TABLE guilds DROP rank4title;
ALTER TABLE guilds DROP rank4;
ALTER TABLE guilds DROP rank5title;
ALTER TABLE guilds DROP rank5;
ALTER TABLE guilds ADD tribute INT UNSIGNED NOT NULL;
ALTER TABLE guilds ADD motd_setter varchar(64) NOT NULL DEFAULT '';

INSERT INTO guild_members (char_id,guild_id,rank,public_note)
SELECT id,guild,guildrank,publicnote FROM character_
WHERE guild > 0 AND guild < 1500;

ALTER TABLE character_ DROP guild;
ALTER TABLE character_ DROP guildrank;
ALTER TABLE character_ DROP publicnote;


==03/11/2006
FatherNitwit: Redid netcode outbound queue to properly handle sequence wrapping.

==03/10/2006
Doodman: Worked up serialization for Ti and Live (/snicker)
Doodman: Converted the item table to match live (13th-floor) changes below (apply both)
Doodman: Worked items to be compatible for both (kept loreflag and loregroup)
6.2 -> Ti:
ALTER TABLE items CHANGE loreflag loregroup int not null;
ALTER TABLE items CHANGE UNK117 UNK123 int not null;
ALTER TABLE items CHANGE UNK150 UNK157 int not null;
ALTER TABLE items CHANGE UNK145 UNK152 int not null;
ALTER TABLE items CHANGE UNK140 UNK147 int not null;
ALTER TABLE items CHANGE UNK135 UNK142 int not null;
ALTER TABLE items CHANGE UNK130 UNK137 int not null;
ALTER TABLE items CHANGE UNK124 UNK130 int not null;
ALTER TABLE items CHANGE UNK121 UNK127 int not null;
ALTER TABLE items CHANGE UNK118 UNK124 int not null;

ALTER TABLE items ADD augslot1unk int not null AFTER augslot1type;
ALTER TABLE items ADD augslot2unk int not null AFTER augslot2type;
ALTER TABLE items ADD augslot3unk int not null AFTER augslot3type;
ALTER TABLE items ADD augslot4unk int not null AFTER augslot4type;
ALTER TABLE items ADD augslot5unk int not null AFTER augslot5type;
ALTER TABLE items ADD enduranceregen int not null AFTER manaregen;
ALTER TABLE items ADD notransfer int not null AFTER stacksize;
ALTER TABLE items ADD UNK133 int not null AFTER notransfer;

Ti -> Live:
ALTER TABLE items ADD UNK134 varchar(255) not null AFTER UNK133;

ALTER TABLE items CHANGE UNK130 potionbeltslots int not null;
ALTER TABLE items CHANGE UNK133 stackable int not null;

==03/08/2006
FatherNitwit: (BatCountry) Fixed throwing item crash.
FatherNitwit: (Hvitrev) Implemented Primsatic and Chromatic resists.

==03/07/2006
FatherNitwit: Fixed up adding a launcher to not falsely report an error.
Doodman: Fixed sending old style info from world->ls (fixing minilogin)
Doodman: Fixed TCPConnection cleanup on socket closed by the remote

==03/06/2006
Doodman: Fixed deadlock when zones are shutting down.
Doodman: Fixed MakeUpperString and MakeLowerString to function correctly on a NULL string
Doodman: Made HTTPSocket inherit from TCPConnection instead of using
Doodman: Fixed HTTP POST processing (needs a good workout still)

==03/05/2006
FatherNitwit: Developed stream proxy, stream identifier, and struct strategy to support dynamic structures.
FatherNitwit: Developed initial patch support for 0.6.2 and Titanium.

==03/04/2006
FatherNitwit: Fixed some broken logging in world.
FatherNitwit: Fixed the potential crash when zone connects to world.

==03/04/2006
FatherNitwit: Significantly refactored the old TCPConnection/TCPServer code.
FatherNitwit: Rewrote almost the entire web server to get rid of most of the socket lib.
FatherNitwit: Removed everything but the HTTP framework from the socket lib.
FatherNitwit: Rewrite better have fixed the windows crash.


==02/28/2006
Changed version number to 0.6.5-DR1
Doodman: Put in new XML configuration object and made zone/world use them
Doodman: Added auto ip configuration to world/LS
Doodman: Added auto ip/port configuration to zone
Doodman: Reworked logging in world to use the new logsys
Doodman: Made TCPConnection detect a closed socket like it should
FatherNitwit: Significantly refactored world for better code organization.
FatherNitwit: Significantly refactored the database object for better organization.
FatherNitwit: Fixed several valgrind errors.
FatherNitwit: Developed a custom webserver for world.
Doodman: Developed direct database support from perl.
FatherNitwit: Wrote many objects and pages for world.
Doodman: Wrote many objects and pages for world.
Doodman: Moved addon.ini (commands) into the database with world pages.
FatherNitwit: Developed a launcher for zone.
FatherNitwit: Developed world HTTP pages to manage launcher.
FatherNitwit: Fixed several issues with stats loading from the database.
FatherNitwit: Fixed high stat loading from the database.
FatherNitwit: Added `#grid max` command to help with grid creation.
FatherNitwit: Significant adjustments to combat, should bring things closer to live. Make sure your mobs have stats in the DB!
FatherNitwit: Fixed procs for NPCs with proc-only spell sets.

CREATE TABLE launcher (
 name VARCHAR(64) NOT NULL,
 dynamics TINYINT UNSIGNED NOT NULL,
 PRIMARY KEY(name)
);

CREATE TABLE launcher_zones (
 launcher VARCHAR(64) NOT NULL,
 zone VARCHAR(16) NOT NULL,
 port MEDIUMINT NOT NULL DEFAULT '0',
 PRIMARY KEY(launcher,zone)
);

CREATE TABLE commands (
  command varchar(20) NOT NULL default '',
  access tinyint(3) unsigned NOT NULL default '0',
  PRIMARY KEY  (command)
);


==01/20/06
FatherNitwit: Reworked melee and ranged attack code significantly.
FatherNitwit: Properly support recomended level on weapon DMG now.
FatherNitwit: Re-implemented racial/body bane damage and elemental damage.
FatherNitwit: Added "Immune to Non-Magical Melee" flag to NPCs (W)
FatherNitwit: Added "Immune to non-Bane Melee" flag to NPCs (O)
FatherNitwit: Added canbind flag to zone table to completely prevent binding in certain zones.
Required SQL:
ALTER TABLE zone ADD canbind TINYINT NOT NULL DEFAULT '1';

==01/14/06
FatherNitwit: Fixed ranged misses not generating hate.
FatherNitwit: Find is as working as good as it ever was (straight line)

==01/13/06
FatherNitwit: Made some changes to buff stacking rules reguarding DoTs and beneficial overwrite.

==01/12/06
FatherNitwit: Fixed the "Buffs do not apply effects in client after zoning" issue.

==01/09/06
FatherNitwit: Made NPCs actually load: resists, attack_speed, findable
FatherNitwit: npc_types cleanup day (they dont work or are not used):
ALTER TABLE npc_types ADD attack_speed float NOT NULL default '0';
ALTER TABLE npc_types DROP ipc;
ALTER TABLE npc_types DROP banish;
ALTER TABLE npc_types DROP social;

==01/08/06
FatherNitwit: Fixed more windows compile errors on .net 2003+...

==01/07/06
FatherNitwit: Fixed VS.net projects and compiling. (.net 2002)

==01/04/06
FatherNitwit: Fixed the quad special attack to not require triple in order to work.

==01/03/06
FatherNitwit: Added new debug logging facility. Will be implemented further in the time to come
FatherNitwit: Added command #mlog to manipulate the new logging facility.
FatherNitwit: Load log settings from log.ini if present.
FatherNitwit: Made GM's fade detrimental buffs when they die.
FatherNitwit: Reworked much of the spell casting subsystem.
FatherNitwit: Reworked bards, they should work OK now!
FatherNitwit: Debug Logging written for: spell casting, spawns, spawn conditions
FatherNitwit: Fixed block training for monks and beastlords
FatherNitwit: Fixed damage shields
FatherNitwit: Fixed a bunch of spell stacking issues
FatherNitwit: Properly enforced range checking on all spells.
FatherNitwit: Hopefully fixed long recast delay enforcement.
FatherNitwit: Removed rule that disallowed beneficial spells cast by NPCs on PCs
FatherNitwit: Hopefully fixed pottery firing.
FatherNitwit: Fixed NPC buffing faction checks.
FatherNitwit: Added LOS checks for detrimental AOE spells.
FatherNitwit: Changed version number to 0.6.4DR1

==12/30/05
FatherNitwit: Fixed event_waypoint in quests
FatherNitwit: Refactored a lot of NPC pathing code (no functional changes)
FatherNitwit: Added zone flagging concepts/enforcement
FatherNitwit: Added commands: #flags, #flagedit
FatherNitwit: Added quest functions: set_zone_flag, has_zone_flag, clear_zone_flag

Required SQL:
CREATE TABLE zone_flags (
	charID int NOT NULL,
	zoneID int NOT NULL,
	PRIMARY KEY(charID,zoneID)
);
ALTER TABLE zone ADD flag_needed VARCHAR(128) NOT NULL DEFAULT '';

==12/23/05
FatherNitwit: Added #reloadstatic to reload doors, objects, zone points, etc... (zone in/out required)
FatherNitwit: Fixed mobs to buff their friends, not their enemies.
FatherNitwit: Allow support for quests on charmed NPCs.
FatherNitwit: Changed quest timers to be tied to the specific NPC, instead of the name being zone global.
FatherNitwit: Fixed quest global expiration times... durations should be accurate now.
FatherNitwit: Re-enabled Y (year) expiration times, and added a 'F' time to say it dosent expire.

==12/18/05
FatherNitwit: Removed doors from shared memory.
FatherNitwit: Hopefully fixed pottery firing in kilns.

==12/15/05
FatherNitwit: Fixed Levitate.

==12/11/05
FatherNitwit: Removed some worthless fields.
FatherNitwit: Rewrote all the pet creation code to be based on npc_types
FatherNitwit: Completely changed the pets table.
You prolly want to run:
DROP TABLE pets;
You must load up the SQL in Sql-Files/pets.sql
the new pets sql assumes NPC IDs 500-700 are free, so edit them as needed.
ALTER TABLE npc_types DROP fixedz;

==12/09/2005
FatherNitwit: Fixed the issue where maxed out factions cannot be raised/lowered
FatherNitwit: Changed faction hits to properly ignore illusions.
FatherNitwit: Fixed an issue with converted chars and corrupt AAs. (not fully resolved)
FatherNitwit: Fixed the issue with mobs not pathing after respawning.

==12/01/2005
FatherNitwit: added USE_RACE_CLASS_XP_MODS (disabled by default) to features.h
FatherNitwit: These fields are not used:
ALTER TABLE zone_points DROP keep_x;
ALTER TABLE zone_points DROP keep_y;

==11/28/2005 (LiveCompat)
Doodman: Found additional world opcodes
Doodman: Updated char select struct

==11/24/2005
FatherNitwit: just some SQL updates you should run to make the recent aggro changes less annoying.
UPDATE npc_types SET _INT=80 WHERE _INT=75;
UPDATE npc_types SET _INT=60 WHERE _INT=80 AND ( bodytype=3 OR bodytype=8);
ALTER TABLE npc_types CHANGE _INT _INT mediumint(8) unsigned NOT NULL default '80';

==11/17/2005
FatherNitwit: Fixed a crash in the map code
FatherNitwit: Tweaked mob usage of d_meele_texture*

==11/11/2005
FatherNitwit: Changed most double prescision operations to single prescision.

==11/10/2005
FatherNitwit: Fixed waypoint ID limit (was 65535).
FatherNitwit: Implemented the #wpinfo command

==11/05/2005
FatherNitwit: Fixed the broken server side filters (reworked entirely).
FatherNitwit: Refactored damage code to be more consistent between PCs and NPCs.
FatherNitwit: Changed spell damage mechanism slightly to better utilize runes.
FatherNitwit: Tweaked a bit of illusion code to be more versitile.

==11/03/2005
FatherNitwit: Fixed AA storage in the player profile.

==10/28/2005
FatherNitwit: Fixed a lot of GCC 4.0 and 64 bit problems. Should build under both better now.

==10/24/2005
FatherNitwit: Fixed mob int loading.

==10/23/2005
FatherNitwit: Fixed Client->NPC->Client riposte.

==09/28/2005
FatherNitwit: added quest::attacknpc and quest::attacknpctype
FatherNitwit: Cleaned up usage of Appearance in the code
FatherNitwit: Fixed faction ally checking for npc->npc faction
FatherNitwit: Removed some stupid rules reguarding npc aggro
FatherNitwit: Fixed some faction issues with aggro, guards should work reliably now.

==09/25/2005
FatherNitwit: Fixed incorrect usage of EXPMod variable.

==09/24/2005
FatherNitwit: Hopefully fixed bard instruments.
FatherNitwit: Fixed crash when loading DoD+ spells_us.txt file
FatherNitwit: Rewrote a ton of the perl parser internals to suck less.
FatherNitwit: Reworked a bit of netcode to minimize chances of #opcode crashing.
FatherNitwit: Actually loaded luclin attributes from DB.
FatherNitwit: Added npc stats to npc_types and use them.
ALTER TABLE npc_types ADD STR MEDIUMINT UNSIGNED NOT NULL DEFAULT '75';
ALTER TABLE npc_types ADD STA MEDIUMINT UNSIGNED NOT NULL DEFAULT '75';
ALTER TABLE npc_types ADD DEX MEDIUMINT UNSIGNED NOT NULL DEFAULT '75';
ALTER TABLE npc_types ADD AGI MEDIUMINT UNSIGNED NOT NULL DEFAULT '75';
ALTER TABLE npc_types ADD _INT MEDIUMINT UNSIGNED NOT NULL DEFAULT '75';
ALTER TABLE npc_types ADD WIS MEDIUMINT UNSIGNED NOT NULL DEFAULT '75';
ALTER TABLE npc_types ADD CHA MEDIUMINT UNSIGNED NOT NULL DEFAULT '75';

==09/23/2005
FatherNitwit: Inverted XY coordinates on in zone objects and ground spawns.
FatherNitwit: Maybe fixed quests setting a waypoint in EVENT_WAYPOINT
ALTER TABLE ground_spawns ADD temp_x float NOT NULL;
UPDATE ground_spawns SET temp_x=min_x;
UPDATE ground_spawns SET min_x=min_y;
UPDATE ground_spawns SET min_y=temp_x;
UPDATE ground_spawns SET temp_x=max_x;
UPDATE ground_spawns SET max_x=max_y;
UPDATE ground_spawns SET max_y=temp_x;
ALTER TABLE ground_spawns DROP temp_x;
ALTER TABLE object ADD temp_x float NOT NULL;
UPDATE object SET temp_x=xpos;
UPDATE object SET xpos=ypos;
UPDATE object SET ypos=temp_x;
ALTER TABLE object DROP temp_x;


==09/22/2005
FatherNitwit: Reworked quest signaling implementation to be less dumb. Also exported SignalNPC to perl.
FatherNitwit: Implemented a missing bard AE DOT spell type.

==09/21/2005
FatherNitwit: Fixing a few issues with windows compiles and corpses.

==09/19/2005
FatherNitwit: Added missing packet for player death to create a corpse.

==09/16/2005
FatherNitwit: Fixed loot error case client hang, reported by Yablargo

==09/15/2005
FatherNitwit: Fixed coin trading bug reported by Windcatcher

==09/12/2005
FatherNitwit: Fixed adventure merchants

==09/11/2005
FatherNitwit: Made temp merchant lists clear on world boot.
FatherNitwit: Fixed some shared memory issues on windows.
FatherNitwit: exported some more mob methods to perl.

==08/26/2005
Doodman: Found most of the missing guild opcodes, except the manage ones.
Doodman: Moved guildlist to shared mem (ick) since zone now sends it too.
Doodman: Need to implement a way to recover the functionality of dynamicly
	  adding/removing guilds with the shared mem solution

==08/23/2005
FatherNitwit: Added range check for all combat abilities (reported by LoOsEr)

==08/21/2005
FatherNitwit: Fixed gaining AA exp (buying still broken)
FatherNitwit: Fixed weapon procs
FatherNitwit: Added looting messages (links to come later)
FatherNitwit: Fixed instant spells acting like DoTs

--- Version Changed to 0.6.2DR1 ---

==08/05/2005
FatherNitwit: Adding database support for both eye colors and beard type.
Required SQL:
ALTER TABLE npc_types ADD luclin_eyecolor2 int(10) unsigned NOT NULL default '1' AFTER luclin_eyecolor;
ALTER TABLE npc_types ADD luclin_beard int(10) unsigned NOT NULL default '0' AFTER luclin_beardcolor;

==08/03/2005
FatherNitwit: Work on eqextractor to support the newest patch.
FatherNitwit: Worked on spawn struct to identify the remaining missing fields.

==08/02/2005
FatherNitwit: Added initial fix for the shared bank dupe.

==07/28/2005
FatherNitwit: Fixed $wp in EVENT_WAYPOINT
FatherNitwit: added #aggro to query aggro checking info for mobs.
FatherNitwit: fixed a couple strange things in the aggro code.

==07/07/2005
FatherNitwit: Untested fix for zone point wildcards in GetClosestZone*

==05/09/2005
FatherNitwit: Fix some stuff related to zoning process.
update zone set min_status=0 where min_status is null;
update zone set min_level=0 where min_level is null;
alter table zone change min_status min_status tinyint(3) unsigned default 0 NOT NULL;
alter table zone change min_level min_level tinyint(3) unsigned default 0 NOT NULL;
alter table zone change long_name long_name text NOT NULL DEFAULT '';

==05/05/2005
FatherNitwit: Theoretically fixed a no-drop trading bug.

... Lots of work on 5/12/05 patch ...

==05/05/2005
FatherNitwit: A bunch of work on ranged attacks and attack timers.
FatherNitwit: Fixed issue with the first time a new char gains exp.
FatherNitwit: Fixed delete character at char select.
FatherNitwit: Fixed fizzle messages.
FatherNitwit: Fixed /goto and other cross-zone player teleporting.
FatherNitwit: Initial work on making arrows show up when shot.

==04/23/2005
LethalEncounter: Fixed compile errors on Windows
LethalEncounter: Fixed guild crash bug while logging in
LethalEncounter: Fixed most of the guild commands

==04/13/2005
Cofruben: Fixed possible crashes using #npscpawn command.
Cofruben: Added a few more cheat locators.

==04/10/2005
FatherNitwit: Reworked zone in code to make it more closely match live's ordering.
FatherNitwit: Fixed up stream factory problem with dynamic zones.
FatherNitwit: Added detailed connecting debugging.
FatherNitwit: Work on custom titles.

==04/08/2005
FatherNitwit: Completely rewrote zoning code to make sense.
FatherNitwit: Fixed some discipline related effects
FatherNitwit: Fixed archery hit chance cap (was 47%)
FatherNitwit: Initial title system implementation
FatherNitwit: Gave berserkers some of their special abilities
FatherNitwit: Initial work on raid system, lots to do still.
FatherNitwit: Found leadership AAs in the player profile and update packet
FatherNitwit: Enforce attack timer constraints on ranged weapons
FatherNitwit: (seq) Located crystal counters in the player profile
FatherNitwit: (image) Many of the following changes were written or inspired by GuildWars code
FatherNitwit: Enforce reuse timers for combat abilities & instill doubt
FatherNitwit: Enforce class and range checks on service providing NPCs
FatherNitwit: Enforce item slots containing proper items
FatherNitwit: Enforce range checking on ranged weapons better
FatherNitwit: Made /hideme persistent across zoning
FatherNitwit: Finally fixed no drop items in tradeskill containers for real this time I hope.
Required SQL (added to upgrade.sql):
ALTER TABLE account ADD hideme TINYINT NOT NULL DEFAULT 0;

==04/04/2005
FatherNitwit: Fixed guild member list struct, identified more fields of it (showeq)
FatherNitwit: (bUri) Fixed attack code with non-weapons and h2h weapons.
FatherNitwit: Split zone fog types into seperate DB fields.
FatherNitwit: Differentiated between guild and player tributes.
Required SQL: utils/0.6.1-upgrade.sql  (will be updated until release)

==01/15/2005
Doodman: Fixed charges/quantity
Doodman: Fixed IsStackable()
Doodman: Fixed some empty Handle() functons.
Doodman: Added instance level nodrop.
Required SQL:
alter table inventory add instnodrop tinyint(1) unsigned default 0 not null;

==01/13/2005
Doodman: Merged source (FNW changes) in to LiveCompat
Doodman: SendItemPacket's are now sent deflated (speeds up merchants)
Doodman: Combining is now turned on in makefile.perl for zone
Doodman: Fixed world to notice zone drops immediately
Doodman: Guild_MOTD and bulk door packets are now sent deflated
Doodman: New item structure is in:
	Items are preserialized in the database (utils/serialize_items.pl)
	Item fields names in item struct exactly match the dn
	Item fields now match the dump from (utils/load_13thfloor_items.pl)
		eqitems.13th-floor.org
	Item table convert script: utils/items-0.6.0-DR2-0.6.1-DR1-convert.sql

==01/10/2005
FatherNitwit: Disable sleep() in perl, it is bad news.
FatherNitwit: Fixed guild MOTD at login (hopefully).
FatherNitwit: Fixed minor security problem in SQL logging.
FatherNitwit: Added error reporting to waypoint editing commands.
FatherNitwit: Reworked client packet handling to use opcode dispatch
  routines, which is paving the way for dynamic opcodes.

==01/07/2005
FatherNitwit: Fixed rogue-like skill training (sneak, etc..)
FatherNitwit: Added spawn_limit field to spawnentry and npc_types
   which represent the maximum number of that npc_type which can spawn
   from that spawn group/in that zone overall. 0 == no limit.
FatherNitwit: Tweaks to the packet update manager
FatherNitwit: More SQL logging (spawn editing)
FatherNitwit: Fixed Monk bind wound over lvl 50 to 70%.
FatherNitwit: Fixed Monk attacks without weapons
FatherNitwit: Fixed intimidation, success formula needs work.
FatherNitwit: Fixed disciplines again.
FatherNitwit: Added quest::isdisctome to make tome handins work better.
FatherNitwit: Fixed levitate from other people's eyes.
FatherNitwit: Fixed a few minor crash bugs.
FatherNitwit: (Cisyouc) Fixed merchant purchases not costing anything.
FatherNitwit: Implemented the snare fix from the forums (edited spell calc formulas)
Required Queries:
ALTER TABLE spawnentry ADD spawn_limit TINYINT NOT NULL DEFAULT '0';
ALTER TABLE npc_types  ADD spawn_limit TINYINT NOT NULL DEFAULT '0';

==01/04/2004
Doodman: opcode/struct changes to allw zoning in on live.

==12/29/2204
Doodman: Fixed leak in Separator

==12/21/2004
FatherNitwit: fixed item handing to non-quest NPCs
FatherNitwit: delete nodrop or norent items left in world containers
FatherNitwit: changed quest::spawn commands to return the NPC ID of the spawned mob (in XS)
FatherNitwit: Cleaned up perl variable setting a lot
FatherNitwit: Tribute masters should work completely now.
FatherNitwit: Fixed login problem wher chars get into zone and move, but nothing else works.
FatherNitwit: fixed #level and other leveling commands to give proper ammount of training points.
FatherNitwit: Added new extended player profile for emu custom data storage
FatherNitwit: Implemented elemental damage on weapons
FatherNitwit: Cleaned up memory allocation a bunch
FatherNitwit: Made merchant lists load async, to speed dynamic boots
FatherNitwit: Fixed repop to not kill player pets.
FatherNitwit: Made pets cross teleport doors with their master.
FatherNitwit: Tweaked teleport doors, they should always work now.
FatherNitwit: Added optional command logging
FatherNitwit: Moved a lot of hard coded access levels for commands to features.h
FatherNitwit: Added optional status requirement to zone to specific coords
FatherNitwit: Fixed several minor crashes.
FatherNitwit: Added the unfearable flag (D in special attacks) to mobs.
FatherNitwit: Fixed mana burn and life burn (from Branks)
FatherNitwit: Added optional packet manager for mob movement packets (PACKET_UPDATE_MANAGER)
FatherNitwit:   Configure it in updatemgr.cpp (level_distances2,level_timers)
FatherNitwit: Added reference counting to applayer packet (for broadcasts)
FatherNitwit: Improved packet profiler a bunch, added #packetprofile command
FatherNitwit: Cleaned up eq_packet_structs.h a bit
FatherNitwit: Required DB update:
ALTER TABLE character_ ADD extprofile BLOB NOT NULL;

==11/20/2004
Doodman: Fixed merchant selling bug on merchant slot

==11/18/2004
Doodman: Fixed the initialization of augs on NPC loot that was causing a zone crash when looting NPC's

==11/16/2004
Doodman: Implemented Augmentation inserting, removal and distilling.
Doodman: Augment saves in inventory, shared bank, player_corpse and object_contents.
Doodman: Fixed world to detect and cleanup a zone disconnect immediately instead of when it tries to write to it.
Doodman: Reimplmented cursor queue using an actually queue.  Should be unlimited depth now.
Doodman: Updated items for new fields and new names.

==11/10/2004
LethalEncounter: Fixed a couple of corpse related bugs.
LethalEncounter: Added in various functions for the new login system.

==11/09/2004
FatherNitwit: Fixed minor crash with new grid delay thing.

==11/08/2004
LethalEncounter: Fixed loot bug with stacked items.
LethalEncounter: Added a 10 second timer to grid assignments to speed up zone in time.
FatherNitwit: Fixed invalid bind zone crash.
FatherNitwit: Fixed taunt crash.
FatherNitwit: Initial tribute system. Dosent give benefits, or save state yet.
FatherNitwit: Proximity quests: added quest::set_proximity, quest::clear_proximity
FatherNitwit: Proximity quests: added events: EVENT_ENTER, EVENT_EXIT
FatherNitwit: Added event queue for perl commands which cause perl events, like spawn and attack
FatherNitwit: Added the ability to define in game commands in perl (EMBPERL_COMMANDS)
FatherNitwit: Hopefully fixed multiple-death XP loss bug.
FatherNitwit: Hopefully fixed mob chain-casting buffs when target is immune
FatherNitwit: Reworked quest timers to not crash if the NPC depops/dies.
FatherNitwit: Added simple code profiling capabilities (-DEQPROFILE + features.h)
FatherNitwit: Rewrote command list to be map based instead of flat array
FatherNitwit: Rewrote NPC assist to use AIYellForHelp at regular intervals instead of each scan tic
FatherNitwit: Rewrote NPC assist code to use npc faction values to determine assist
FatherNitwit: Rewrote NPC aggro code to be a ton more effecient (REVERSE_AGGRO)
FatherNitwit: Rewrote NPC spell casting code to be a ton more effecient
FatherNitwit: Run this query (value of 1 == NPC might aggro other NPCs):
ALTER TABLE npc_types ADD npc_aggro TINYINT NOT NULL DEFAULT '0';

==11/07/2004
LethalEncounter: Added in three variables per feature request.

==11/06/2004
LethalEncounter: Fixed Merchant bug that wouldnt let you buy anything.
LethalEncounter: Fixed stack bug that wouldnt automatically stack any items you bought.

==11/05/2004
LethalEncounter: Client Freeze/Black Screen of Death bugs have been eliminated.
LethalEncounter: Added a simple count to our linked list so we can process a few things faster and more efficiently.
LethalEncounter: Fixed a small compile bug in regards to corpses.

==11/04/2004
FatherNitwit: Fixed exploit with split that kathgar found.

==11/01/2004
LethalEncounter: Inventory items on zone in are now sent in one packet like live instead of individual packets.  This will save on bandwidth and processing time.
Cofruben: Added support for /makeleader command.
FatherNitwit: Increased max buffs from 15 to 20
FatherNitwit: Fixed group zoning
FatherNitwit: Fixed loading map files on UNIX with capitol letters
FatherNitwit: Fixed a couple crashed related to old AA stuff
FatherNitwit: Cannot charm a corpse or charm something when you have a pet
FatherNitwit: A little work on zoneing with a chanrmed pet, not perfect yet
FatherNitwit: Fixed throwing weapons like shurikens
FatherNitwit: Broke all the old LDoN points stuff because it moved in the Player profile
FatherNitwit: Moved all quest command's logic into the QuestManager class
FatherNitwit: Rewrote perl to use XS instead of command queue (EMBPERL_XS)
FatherNitwit: Added routines to capture perl errors into proper log IO (EMBPERL_IO_CAPTURE)
FatherNitwit: Added a HUGE set of routines for quest objects, with new variables
  $client, $npc, and $entity_list... almost the entire class is exported. (EMBPERL_XS_CLASSES)
FatherNitwit: Added capability to send log messages to in-game clients (CLIENT_LOGS)
FatherNitwit: Added new log facility for quest messages named Quest
FatherNitwit: Added new commands #logs and #nologs to request/stop the server sending you its log messages
FatherNitwit: Fixed NPC -> NPC aggro, need to run these queries onan older DB:
ALTER TABLE npc_faction_entries ADD npc_value TINYINT UNSIGNED DEFAULT '0' NOT NULL;
UPDATE npc_faction_entries SET npc_value=1 WHERE value<0;

==10/31/2004
LethalEncounter: Aside from a few tweeks, merchants are finished.  They will now keep your items after you sell them like live.
LethalEncounter: Fixed bug that caused falling damage to be calculated twice.
LethalEncounter: Changed Sense Heading to start at 200 for new characters.
LethalEncounter: Black screen bug should be fixed now.
LethalEncounter: Fixed bash/slam.

==10/30/2004
LethalEncounter: Fixed a few issues with item charges.
LethalEncounter: Fixed illusions.
LethalEncounter: Rewrote the merchant code.  Its now much more efficient and instead of 81 database queries per shop request, a typical request doesnt pull anything from the db.  It loads the information at load time.
LethalEncounter: Added in the beginning parts of temporary merchant items. (you can sell items to merchants and purchase them back) Download the merchantlist_temp table from: http://www.eqemulator.net/sql/merchantlist_temp.sql

==10/27/2004
Cofruben: Added LDoN adventure system.Please,source the new sql file(thanks to skorch for testing).
LethalEncounter: Mob deaths should be sent to all players now.
LethalEncounter: ServerType 1 will make you pvp on zone in now.  Still trying figure out why the client doesnt send any pvp special combat abilities unless your dueling.

==10/26/2004
Scorpious2k: Fixed guild doors

==10/25/2004
FatherNitwit: Fixed zone crash related to character_ query.
FatherNitwit: Fixed book reading to give proper book window.
FatherNitwit: At least partialy fixed pet dual weild/double attack problem.
FatherNitwit: Tweaking on selling stackable items.
FatherNitwit: Fixed archery ammo issue.
LethalEncounter: Added ability to /consent (and /deny) other players so they can drag your corpse.
LethalEncounter: Fixed bug where other people were able to loot your corpse.

==10/24/2004
LethalEncounter: Fixed bug where you lost air supply on zoning in underwater.
LethalEncounter: Fixed GM damage bug.

==10/23/2004
FatherNitwit: Enable named quests by default (in features.h)
FatherNitwit: Fixed decaying world containers problem
FatherNitwit: Fixed undead nuke spells
FatherNitwit: Minor line of sight optimization
FatherNitwit: Minor tradeskill change to avoid a crash
FatherNitwit: Changed the way fear duration is calculated, hopefully it is better.
FatherNitwit: Implemented beta fear pathing code (disabled by default in features.h)
LethalEncounter: Reworked AA system and fixed some of the bugs with it.
LethalEncounter: Dyes should work correctly now.
LethalEncounter: Fixed Bazaar trader bug.
LethalEncounter: Zones now display the proper fog when you update your zone table with the latest.
LethalEncounter: Fixed zone crash and merchant item charge bug.

==10/22/2004
LethalEncounter: Fixed item deletion bug not updating client.

==10/21/2004
LethalEncounter: Fixed various AA related bugs.

==10/20/2004
LethalEncounter: Reworked zoning in, solved a couple of issues and should speed the process up a tad.

==10/19/2004
FatherNitwit: Fixed Disciplines and Abilities (lay hands & harm touch)
FatherNitwit: Added new server variable: DisableNoDrop (set to 1 takes nodrop off items when loaded)
FatherNitwit: Fixed NPC buffing through walls
FatherNitwit: Fixed symbol spell forumulas
LethalEncounter: Fixed equip bug when using two handed weapons.
LethalEncounter: Fixed resurrect bug that let you regain xp more than once.
LethalEncounter: Fixed bug that was making players corpses disappear on death when they shouldnt have.

==10/18/2004
LethalEncounter: Fixed pet only spells.
LethalEncounter: Fixed bug that wouldnt let you loot a corpse if someone got an error looting it. (such as a dupe lore error)
LethalEncounter: Fixed mana regen bug.


==10/17/2004
LethalEncounter: Added some debug code to make it easier for people that cant get minilogin working.
LethalEncounter: You will now eat/drink like eqlive if you arent a GM.
LethalEncounter: Fixed infinite recursion bug I made a few days ago :/

==10/16/2004
LethalEncounter: Fixed mana bug that was causing people not to regen their full mana.
LethalEncounter: HP Adjustments, will now send your hp update every tic and only the mob you have targeted (not including group hp updates) to reduce bandwidth.
LethalEncounter: Fixed a crash bug on character creation.  Thanks to blahblah for the help :P
LethalEncounter: Fixed item charge bug, need to update your database.

==10/15/2004
LethalEncounter: Changes necessary for the new MiniLogin :)
LethalEncounter: Z loc fix, it was placing you ten times the z loc it was supposed to :P

==10/14/2004
Rogean: omg we are so teh 0.6.0DR1 now~

FatherNitWit:
A HUGE thanks goes out to wiz for letting me have his source
to facilitate this merge.

WR Merges:
- An innumerable number of small bug fixes and tweaks all over
- A TON of AAs and related effects
- FISHING!!!!!!!!!
- Many timers enforced by server, not just client.
- Trap support.
- Sense trap and disarm trap
- Group linking
- Zone-crossing pets (lose their buffs though, for now)
- Voice graft
- poison and disease counters (in progress)
- hunger and thirst (in progress)
- stat food
- NPC door opening!
- Optimized idle zones to not eat the CPU
- Items tints display properly
- shielding other players (in progress)
- pick pocket
- Optional EXP scaling based on CON level
- Instill Doubt
- Made auto-putting items into bags respect size constraints.
- heal/buff aggro.
- reclaim pet gives you mana back.
- enforce undead and summoned targets spells
- reworked bard songs a bit
- implemented camping properly
- made alcohol tolerance gain skill (dunno if it does anything yet)
- better checking of lore items during trades and merchant buying
- prevent interaction with merchants on basis of bad faction
- pets should actually taunt now.
- rouge pets should backstab now.
- optional: group buffs hit group pets now.
- fixed memory blur chances
- several minor group tweaks, should make groups more stable
- improved duel messages
- optional random luclin attributes for NPCs with boring faces
- AGI adjustments based on encumbrance
- AC bonuses for iskars and monks


FatherNitwit Improvements:
- Made most member timers instances, not pointers.
- Rewrote focus effects system, spells that give focus effect should work too.
- Reagent reduction focus implemeneted
- Rewrote activateable AAs and swarm pets based on Brank's work
- AA spell effects are now in the DB, easily editable
- Added a bunch of simple GoD AAs
- Consolidated many #define options into features.h
- Fixed crash in world when starting zone dosent exist
- Fixed dual weild with hand-to-hand
- Extended fishing to allow mobs to spawn when items are fished up.
- Made item skill modifiers work.
- Identified meaning of old Skill field of common items.
- made bind wounds actually consume bandaids.
- Made archery and throwing consume ammo
- Archery weapons proc now
- Fixed bard item bonuses to apply to all a bard's spell effects.
- rewrote perl HasQuestFile function to behave properly.
- modified perl quest system to fit better into the virtual parser scheme.
- enforce spell/skill components being on the player, not in bank.
- fixed container loading from DB.
- implemented item skill bonuses
- prevent merchant purchases when inventory full.
- safe fall implemented, but the formula is wrong
- initial implementation of client rampaging
- eliminated a lot of sqrt calls
- added an optional packet profiler to EQ network to count opcodes
- fixed NPC-casted targeted AE spells affecting the caster
- fixed monk special attack damage to be skill based.
- most NPC classes do their special attacks now.
- fixed multi-dose potions (not 100% sure they were broken)
- implemented Percental Heal spells
- put caps on haste, HP, and mana regeneration items
- Changed HP regen to work without client's regen packet, which it dosent send anymore.
- Updated natural HP regen to be closer to live.
- corrected AC calculations
- Implemented new discipline interface.
- Added new perl function (traindisc(itemid)) to facilitate training disciplines
- changed discipline reuse timer to a ptimer, since it is long.
- implemented a ton of new spell effects to support disciplines.
- implemented PoP item attributes like shielding, accuracy, etc...
- rewrote much of group system to better support multi-zone groups.
- groups given world-wide IDs instead of zone local.
- group disbanding when split between zones works.
- Fixed warrior/monk triple attack
- Fixed NPC AE spells to respect faction
- Tweaked NPC non-caster mobs being able to cast 'proc' spells.
- Fixed base resistance calculations to match the client.
- Cleaned up NPC spell interruption messages when they were not needed.
- DOTs no longer make you stand every tic.
- Fixed mob immunities special flags
- Added new mob immunities: snare, magic, meele
- Immunity to stuns now includes spin effects as well
- Trading with NPCs should correctly handle no drop items.
- fixed AA EXP setting
- allow starting items to include books and empty bags
- Fixed starting zones problem on char creation.
- Allow bards to move and use clicky items.
- Make NPC casters send stop moving packet when they cast.
- Fixed archery ammo searching to fall over to inventory.
- mobs now dual-weild based on a chance instead of garunteed
- groups do not grant EXP if the mob is green to any group members
- some NPC combat tweaks to balance it over the levels better. Needs through testing.
- EXP is now awarded to the top damaging player/group instead of killer
- fixed donal's complete heal
- fixed AC calculations for high-agi players
- Changed mobs with primary faction = 0 to be indifferent.
- If a player logs/zones in to a Z below the world, they are placed at a valid Z if possible.
- labeled new item field as attuneable, updated DB code for it

==10/10/2004
LethalEncounter: Fixed some issues with hp and mana.
LethalEncounter: Fixed bug with zoning z coord.

==10/09/2004
LethalEncounter: Fixed spell scribing and meming.
LethalEncounter: Merged in Xabob's expansion fixes (except regen which FNW is working on).
LethalEncounter: Merged in RangerDown's fixed version of #spawnfix.
LethalEncounter: Fix for #zcolor that was brought up by rmanders on the bug forum.
LethalEncounter: Character conversions from 5.7 to 5.9 should be fixed now.
LethalEncounter: Implicit length fix and mana struct fixed.

==10/05/2004
FatherNitwit: Fix name generator opcode
FatherNitwit: Added loot table drop chance fix
FatherNitwit: Cleaned up some map code and other thing

==10/02/2004
LethalEncounter: Updated AAs so they are sent based on class now.

==10/02/2004
LethalEncounter: Updated to version 5.9-DR2 (EQLive Compatible).

==10/02/2004
LethalEncounter: Updated all the structs/opcodes necessary to login using the latest client.

==10/02/2004
LethalEncounter: Misc AA fixes.

==09/29/2004
LethalEncounter: Fixed AAs, you can now buy them correctly.  Big thanks to Xabob for PacketCollecting the information for me!!

==09/26/2004
LethalEncounter: Fixed the displaying of AAs, moving them into two tables. Be SURE to source aa.sql for these updates.
		 (Will fix the buying aspect soon)

==09/25/2004
Doodman: Fixed linux kernel 2.6.x shared memory bug.  IPC_NOWAIT is not allowd on shared memory segment operations.

==09/20/2004
Scorpious2k: Allow multiple Perl plug-ins

==09/17/2004
Doodman: (un)fixed world to hand the LS->world hand off like it did in the past

==/09/12/2004
FatherNitwit: Added my LOS code and map converter. Thanks to wiz for help with testing.

==/09/09/2004
FatherNitwit: Adding basics of spell specialization.

==/09/07/2004
FatherNitwit: Fixed #heal on pets.

==/09/05/2004
FatherNitwit: Fixed minor flaw in player profile with skills.
FatherNitwit: Merged My Tradeskill Rewrite
LethalEncounter: Moved zone configurations from the old flat file method to the database.
BE SURE TO SOURCE ZONECFG.SQL!!!

==/09/04/2004
FatherNitwit: Merged in ProjectEQ's 2grid system
FatherNitwit: Fixed new style hate/regen/mana regen on items
FatherNitwit: Collected PoP item features from equiped, not used yet
LethalEncounter: Fixed /bug
LethalEncounter: Fixed merchant messages/issues

==/09/03/2004
FatherNitwit: Fixed almost ALL compile warnings on UNIX
FatherNitwit: Added my named quest files patch as optional #ifdef
FatherNitwit: Added persistent timers (client->p_timers)
FatherNitwit: Added 508->588 byte .cfg file converter

==/08/31/2004
FatherNitwit: Fixed MOB point-blank AE spells to cast (from PEQ folks)
FatherNitwit: Fixed Spawned MOB's being permarooted.

==/08/29/2004
LethalEncounter/Cofruben: LOY Guild Management tool updated.
Cofruben: Added new perl function: quest::addloot(itemid,charges).

==/08/28/2004
Cofruben: Implemented inspect code.

==/08/26/2004
Wiz: Fixed a bug that was displaying unknown spells on login.
Wiz: Fixed a bug that was causing hp to go wonky when you join a group.
Wiz: Fixed a bug that was preventing you from attacking when invulnerable.
Wiz: Fixed a bug that would cause invulnerability spells to stop working if you zoned.

==/08/25/2004
FatherNitwit: Redid split, implemented autosplit.

==/08/23/2004
Draupner: Fixed spell haste focuses

==08/21/2004
LethalEncounter: Finished updating few structs, can now login with latest client.  Merchants, combat, loot, etc work fine.

==08/20/2004
LethalEncounter: Fixed player profile.

==08/12/2004
Cofruben:Added basics of begging.
Cofruben:Added group splitting.

==08/10/2004
Wiz: Severely cleaned up position update code and made it more efficent. Should drastically reduce update packets generated by other clients.
Wiz: Improved the LOS calculation. It should use less CPU and work better now.

==08/02/2004
Scorpious2k: Changed Quest command settimer to reuse timers with same name instead of creating new

==07/26/2004
Cofruben: Added some perl functions,including: ding,addldonpoint,surname,permaclass/race/gender,scribespells.

==07/20/2004
Draupner: Added #npcedit

==07/19/2004
Doodman(WizeOne): Added beacon.o and embxs.o to makefile.perl
Doodman: Fixed #serverinfo for linux.

==07/12/2004
Doodman(RangerDown): Added "You cannot attack while invulnerable" message.

==07/10/2004
Scorpious2k: Fixed AA related exploit
Scorpious2k: Fixed AA problem where % remained if player lost levels to below 51

==06/27/2004
Scorpious2k: Added quest command spawn2 - same as spawn except also requires heading
Scorpious2k: Modified Quest Globals. It now always creates a unique var if char specific (not ALL players)
Scorpious2k: Enabled traders
Sandy: Changed mobs so they must have SPECATK_SUMMON to summon players

==06/23/2004
Rogean: Mobs no longer Dual Wield with Shields

==06/22/2004
Sandy: Event Aggro added
Sandy: Permaroot added
Sandy: x,y,z variables for quests corrected

==06/17/2004
Dspirit: More patch 6/16 opcodes corrected

==06/16/2004
Dspirit: Patch 6/16 opcodes corrected

==06/14/2004
Dspirit: More opcodes corrected

==06/13/2004
Dspirit: Multiple opcodes corrected

==06/12/2004
LethalEncounter: #zone fixed.
Rogean: Fixed inspecting items in adventure window.
Rogean/Scorpious2k: AA Fixes Implimented

==06/11/2004
Doodman: Fixed OP_HPUpdate and SendHPUpate.  Client now gets proper HP updates.

==06/11/2004
Scorpious2k/Image: #reloadqst now works for perl (Reloads the entire zones quest files).

==05/29/2004
Scorpious2k: Changed opcode to fix trade windows >> THANKS Dspirit

==05/29/2004
Scorpious2k: Merged in Sandy's EVENT_HP code
Scorpious2k: Merged in Bleh's Perl/XS enhancement
Scorpious2k: Added quest commands for mob movement stop(),start(),pause(),resume() and moveto()

==05/28/2004
Doodman/Bleh: Move NPCTypes out of shared mem in to zone specific STL maps.
Doodman/Bleh: Removed NPCTypes.o from makefile in EMuShareMem
Doodman/Bleh: Fixed null pointer dereference in selling

==5/15/2004
Doodman: Upped MMF_MAX_NPCTYPE_ID to 400k to support tcsmyworlds db
Doodman: Fixed EQNetwork.cpp to be C++ standard compliant, -not- MS compliant

==5/11/2004
Image: Better netcode, rawr.
Scorpious2k: Added AC to mobs - be sure to check MobACupdate.sql
Scorpious2k: Changed AC so it can now be controlled with serverOp variables ACreduction, ACrandom & ACfail
Scorpious2k: Added check so items with req level can't be auto equipped if player not >= req level
Scorpious2k: Added generic (theme = 0) LDoN point processing

==5/6/2004
Image: Fixed tradeskill places like smiths

==4/28/2004
Image: EQNetwork changes to get packets to send in order
Image: Fixed zones getting bugged (unable to attack, see others, etc.)

==4/23/2004
LethalEncounter: Emu works with the latest patch now.  Sony did some crazy crap and added 4608 bytes to player profile :/

==4/20/2004
Image: Lifetap now works on PVP
Image: Fixed the stacks of snare/root/speed, snare breaks speed spells (SOW,JBoots,etc.), root breaks snare, root breaks speed spells also.

==4/17/2004
LethalEncounter:  Fixed merchants that were broken in the last patch.
Image:  Inventory item combining added to decrease the traffic sent on zoning.

==4/16/2004
LethalEncounter:  Fixed item struct that was changed in the last patch, items now work again.

==4/15/2004
LethalEncounter:  Fixed Player Profile that was changed in the last patch, you can now login correctly.

==4/08/2004
Scorpious2k & Tark: Fixed incompatability problem with Perl and combined packets

==4/02/2004
Image: Improvements made on the combination code.

==3/29/2004
Image: Combined packets now work to full extent.  Set app priority to 6 if you don't want it combined, all packets should no longer be deflated,encrypted unless priority 6.
Scorpious2k: Fixed mob movement

==3/28/2004
Scorpious2k: Added quest command signal() and EVENT_SIGNAL
Scorpious2k: Made mobs face player for EVENT_SAY and EVENT_ITEM
Scorpious2k: Added smogo's $hasitem for perl quests
Scorpious2k: Added selfcast() command to perl quests

==3/23/2004
Scorpious2k: Added AC. Probably needs major adjusting of values to match live, but its a start.

==3/22/2004
image: Group inviting is fixed.

==3/21/2004
solar: corrected an issue with channeling skill/regaining concentration
solar: changed spell resist so that only detrimental spells are resist checked.
	will have to flag beneficial flags that need resist checking later.

==3/20/2004
solar: spell resists implemented
solar: added/fixed up some spell effects.  notable ones are the stackable
	hastes like melody of ervaj
solar: added new version of Wiz's CheckLos routine
solar: fixed a problem with detrimental buffs (root, mez) not working in pvp

==3/15/2004
solar: door updates, find sql file in release dir - doorupdate-03-15-04.sql

==3/13/2004
solar: fixed zone to zone movement occasionally not working

==3/10/2004
solar: spells that are group only should only work on the group now.

==3/07/2004
solar: moving coin around should work properly now

==3/06/2004
solar: looted stackable items should distribute properly now.

==3/05/2004
solar: player armor will appear the proper color now
solar: LoY Dye works.  You need a vial of prismatic dye for each slot you
	want to change the color of.
solar: looting differentiates between left and right clicks.  left clicking
	will put the item on your cursor as expected, and right clicking will
	auto equip it.
solar: containers can now be auto equip looted

==3/02/2004
solar: implemented AE location spells. ex: rain of lava, sentinel.  small
	issue with this still; the caster continues to execute the casting
	animation for the duration of the spell.

==3/01/2004
solar: started implementing AE rain type spells, still some work left to do.
	There are 2 new files for a Beacon class that you have to add to
	the build.

==2/29/2004
solar: revised and corrected a ton of spell effect stuff
solar: corrected an hp regen issue, but need to get the proper calculations
	for regen rates.  until corrected, clients will see their hp regen
	and then immediately change to what the server thinks it should be
solar: probably broke something

==2/28/2004
solar: spells will now consume reagents properly
solar: lifts work again
solar: corrected a mistake that caused spells to not finish scribing properly
solar: fixed some memory leak issues regarding hp updates

==2/25/2004
Scorpious2k: Added vesuvias changes for 5.5 - luclin appearence should work now

==2/22/2004
solar: spells should be in working order again, more work to be done on this.

==2/20/2004
solar: merged vesuvias' appearance (face, beard etc) and zone change
	 changes from the old code.

==2/19/2004
kathgar:  Fixed, SE_Fear, SE_SpinStun, SE_Charm for fixed duration spells and not double checking breaking
	  Range check on Archery
	  Skill checks on Hide and Sneak
	  Fixed exp deaths in PvP by DoTs cast by clients, spells cast by clients no longer in zone, and client pets
	    Added member bool client to Buff_Struct to aid in above fix
	  Fixed solar's changelog entry where he spelled my name wrong
	  No EQLive fixes in this change
solar: fixed a bug that was causing people to be set as gm when they shouldn't

==2/15/2004
solar: characters being created are checked for validity now.  thanks to
	kathgar for the tables.

==2/14/2004
Zaphod: Added Door ZonePoint information.

==2/13/2004
solar: Doors should work now
solar: adventure merchant stuff fully working (check me)
solar: petition interface stuff believed to be working but not fully tested
LethalEncounter: (entered by solar) fixed item opcode, items fully working

==2/12/2004
solar: Opcodes updated from Zaphod's list, also a few others.  All the ops
	that are tabbed in are unconfirmed, and I marked unused ones also.

==2/10/2004
Image: NewSource directory created for 0.5.5 (EQLive Compatability Developement)
Image: Few opcodes updated, also implicitlen updated.

==2/8/2004
solar: fixed a world crash regarding deleting an empty character slot

==2/7/2004
solar: AE spells working properly now
solar: wrote all new buff duration formulas
solar: buffs being applied will properly displace multiple buffs if needed
solar: bard spells should keep casting while sitting now
solar: mobs should now have a proper casting animation when they cast

==2/6/2004
solar: some buff stacking changes, misc spell stuff

==2/5/2004
solar: more spell work, bards should be in a working state, but not done.

==2/3/2004
Image: Divine Aura now works cross zone.
Image: Invisibility now works cross zone.
Image: Added a zone(""); command to quest (Zones them to the specified short zone name)
Image: Added selfcast("spellid"); command to quest (Makes client cast spells on themself, good for self only spells)
Image: Tons of my personal GW stuff changed, you can't see bwuhahahhah
Image: Fixed platinum duping
Image: Levitate now works cross zone (others see you levitate and not warping)

==2/2/2004
Scorpious2k: added quest global variables (requires DB change see quest_globals.txt in EQEmu Release))
Scorpious2k: fixed faction command in parser

==2/2/2004
solar: worked on buff stacking and some misc spell stuff.

==2/1/2004
solar: group spell fixes
solar: implemented /targetgroupbuff

==1/31/2004
solar: revised the StringID based messaging.

==1/30/2004
solar: Merged in Wiz's CheckLos() mob method
solar: Spell casting fixes.
solar: Channeling skill should work very similar to live now.  If you end
	your casting where you started you have a chance to finish casting.
solar: Line of sight is checked for spells.

==1/29/2004
LethalEncounter: Fixed an issue with HT and LoH not repopping, apparently fatigue in player profile was moved into the timer hours slot.
solar: Updated death.  You shouldn't receive an extra message about being
	punched when you die to a spell anymore.

==1/28/2004
solar: fixed an item dupe bug.

==1/26/2004
solar: various fixes to spells, more coming.

==1/25/2004
LethalEncounter: Fixed some issues with the guilds.
LethalEncounter: No Rent items will now be deleted if your offline for more than 30 minutes.

==1/24/2004
LethalEncounter: The guild management tool has been updated and works again.
LethalEncounter: Guilds will now work almost 100% like live, only a few of the #guild commands are left over, mainly for gm management.
kathgar: Added #revoke and #oocmute
LethalEncounter: Fixed some resist issues with some spells.
LethalEncounter: Fixed item charges from merchants.
LethalEncounter: Fixed expansion issues like not being able to use Adventure merchants.
solar: bodytypes should be working correctly from the db now.  Also added it
	to #spawn and #npcstats.  Pets are all summoned, except necro which
	are summoned and undead.  Apply the bodytype_update.sql in release
	to flag your mobs.
solar: /surname command corrects capitalization and rejects non alpha now.
solar: #name fixed - renames player target
solar: made some fixes to kathgar's revoke patch - it now works as intended.

==1/23/2004
solar: LD clients should now be kicked when the LD timer is up, even if engaged.
solar: Buffs should be working correctly after zoning now.
solar: #gassign fixes

==1/22/2004
solar: Corpses are now sent to clients zoning in.

==1/21/2004
Trumpcard: Merged in mongrels fix for undead/invis. Use update sql provided in release to update.
solar: Buff fading should work for slots besides the first one now.  This will
	fix the 'mez bug' that was due to the icon not being stripped.

==1/20/2004=
solar: sense heading skill will now improve as you move around

==1/19/2004=
Scorpious2k: fixed faction command for quests
LethalEncounter: Fixed a problem with queued cursor items.
solar: fixes to #gassign

==1/18/2004=
LethalEncounter: Added item and spell bonuses to the mana regen formulas, they will now help.
LethalEncounter: Fixed a bug that was killing players even when they had hitpoints remaining.
LethalEncounter: Added server side filters
LethalEncounter: Added a new command (#setstat) that allows you to set a characters stats.
LethalEncounter: Added a new quest command that allows you to modify a characters stats.
LethalEncounter: Added the ability for a player to have more than one item on their cursor at once.  They will be queued like on live.
Scorpious2k: added random name generator for char create
Scorpious2k: changed order of parameters in flag console command to allow for spaces in name
kathgar:  Added FLAG_COMBINED and FLAG_IMPLICIT support, define COMBINED to try it
solar: fixed #mana
solar: fixed mana disappearing when you're interrupted mid cast
solar: applied kathgar's PetCommand crash fix
solar: fixed a pvp damage crash
solar: fixed channeling skill rolling over back to 1
solar: bumped PVP spell damage to 2/3 from 1/2 of normal

==1/17/2004==
Image: Memleaks for LDTimer, stamina_timer, CreateHPPacket have been fixed.
Image: World server now boots people with status < 0.
solar: Reworked melee hit/miss calculations to work better

==1/16/2004==
solar: Mez spells break properly on players now
solar: added a #stun command, takes a duration from 1 to 65535
solar: Fixed mana disappearing when a spell like cannibalize or necro
	subversion is cast.
solar: Fixed incorrect conditional that was causing ALL damage done TO a
	client to be halved.  Now only client to client damage is halved.
solar: Fixed a bug with the spell cast timer bar disappearing prematurely
	and the spell gems readying themselves while a spell was still being
	cast.
solar: Spells should interrupt properly when you duck, or are otherwise
	interrupted while casting.

==1/15/2004==
solar: HP should regen properly now

==1/14/2004==
solar: Divine Aura spells should now work

==1/10/2004==
LethalEncounter: Added ability for groups to zone.
LethalEncounter: Added the ability to use snares and roots in pvp.
LethalEncounter: Fixed mob movement to be more like live and to work correctly.
LethalEncounter: Added the tracking skill.
LethalEncounter: You will now get hit for max damage when you are sitting and an npc attacks.
LethalEncounter: Fixed loot messages.
LethalEncounter: Fixed loot so right click autoequips correctly now.

==1/4/04==
MYRA: changed to new opcode for follow
MYRA: changed to new opcode for taunt
MYRA: use new (5.x) Status labels in who for telnet connection
MYRA: Added code to depop at end of grid for wander type 4
MYRA: Added wander type 4 (single run)
MYRA: fixed eval in ExportVar per Eglin
MYRA: corrected spelling for var $uguildrank for event_timer (was $uguildrang)
MYRA: added vars $status & $cumflag per Eglin
MYRA: added vars $mobid & $mlevel per Eglin
MYRA: added missing commands + itemlink to perl
MYRA: added EVAL & KEEPERR to eval per Eglin's recommendation
MYRA: restore missing commands for qst type files & add itemlink
MYRA: fixed comma bug for me command
MYRA: fixed comma bug for echo command
MYRA: fixed comma bug for say command
MYRA: fixed comma bug for emote command
MYRA: fixed comma bug for shout command
MYRA: added itemlink(ItemNumber) command


==1/2/04==
LethalEncounter: Added further support for eqstr_us.txt, this should cut down on lag.
Image: Fixed client lockup related to spells. aka 'spell sticking'.

==1/1/04==
LethalEncounter: Updated spell structure to new spells_us.txt format. NOTE: You must have the latest eqlive spells_us.txt in your EQEmu directory.

==12/21/03 through 1/1/04==
Image/LethalEncounter/kathgar/devn00b/Shawn319:

Updated/added several opcodes to match eqlive.

Fixed spell interrupt casting.

Fixed NPC and player HP updates; should be pretty accurate now and cause less packet loss.

Fixed major crash bug with player death.

Fixed crash bugs related to Throwing weapons, Archery, Critical hits, Kick, Assassination and Beastlord pets.

Added more spells to the 'restricted list' of #cast.

Fixed flaw in #flag code. Only status 200+ should be able to set an accounts flag now.

Fixed crash bug with #time.

Pets now face the same heading as their owner.

Players no longer land critcal hits below 1 (no more 0 or negative hits).

Server no longer counts item stats in the ammo slot (as it should).

Fixed bug with eventlog that would cause certain entries to return a MySQL syntax error.


==12/21/03==
LethalEncounter: Ive been busy the last few days updating all the opcodes and structs for the recent patch.  Nearly everything works again please post any remaining unknown opcodes to the development forum.

==12/16/03==
Image: Fixed #zsave and added #zunderworld so you can set the zcoord for underworld.
==12/15/03==
Image: Took out an HP update in NPC::Damage() reduces HP updates big time and kills network traffic.
Image: All HP Updates are done only to targets now, TODO: Queue group clients with HP updates (once they work again)
==12/14/03==
LethalEncounter: Fixed a bug in tradeskills that was clearing the container before it was telling the client to.
LethalEncounter: Fixed the opcode for mend.
LethalEncounter: Fixed the guild trainer messages.
LethalEncounter: Fixed char create so it creates the character with a new aa struct.
LethalEncounter: Important fix for mob movement via waypoints and such.  Mobs now move nearly exactly like live and it uses 20 times less bandwidth than before.

==12/13/03==
LethalEncounter: Fixed Environmental Damage
LethalEncounter: Added support for a new database variable called startzone.
	To use this, add a record called startzone to the variables table and make the value the zone shortname you want players to start in. This will force all players to start in that zone.
LethalEncounter: Fixed a bug that Shawn found where /zone wouldnt work correctly in zones with similiar names.

==12/12/03==
Shawn319: (Bud9weiser) Fixed start_zones bug. Players should now start in correct location as long as db is up to date.
LethalEncounter: Item tint fix.
LethalEncounter: Tradeskill items being deleted without correct recipe fix.
LethalEncounter: Problem with the ' character inserting into the bug table fixed.

==12/11/03==
LethalEncounter: Added Archery in for pvp.
LethalEncounter: Fixed a throw bug.
LethalEncounter: Fixed char select colors not matching your colors in game.

==12/10/03==
LethalEncounter: Fixed the weapon delay bug.  Special thanks to haecz for bring this to our attention.
LethalEncounter: Fixed dup money bug.  Special thanks to afrospy also for bring this to our attention.
LethalEncounter: Fixed Bazaar Traders, they should work correctly.

==12/09/03==
LethalEncounter: Fixes for item tints and dyes.
LethalEncounter: Fixed NPC textures finally.

==12/08/03==
LethalEncounter: Fixed Horses/Drogmors.

==12/07/03==
LethalEncounter: Fixed a bug with pets causing lag.
LethalEncounter: Fixed a crash bug/1017 bug related to login in, people on slow/lagged connections should be able to login fairly
consistently now.

==12/02/03==
LethalEncounter: Trumpcard and I completely rewrote the linked lists to improve lag, they are about 4 times more efficient now.
LethalEncounter: Fixed a small bug with zone points. BE SURE YOUR USING THE MOST UP-TO-DATE TABLE!!

==11/30/03==
LethalEncounter: Fixed various loot bugs, including the duplicate lore item, blah blah blah bug..
LethalEncounter: Fixed #zonestatus and /servers to be on multiple lines
LethalEncounter: Fixed /who all guild tags to display the right guild
LethalEncounter: Added the ability to send multi-lined emotes with the <BR> newline.
LethalEncounter: Fixed the bug that gave the message: "Multiplier == 0 in Client::CalcBaseHP"

==11/29/03==
Image: Fixed last names for clients (When a new client zoned in, didn't send lastname).

==11/28/03==
LethalEncounter: Added a default instance for pets that arent created via legit spells.
LethalEncounter: Fixed the spell scribe issues.

==11/25/03==
LethalEncounter: Added a new table called ground_spawns.  This will allow you to spawn items randomly throughout the zone. Use this for only random locations, use the object table for static ones.
LethalEncounter: Added Timers for ground spawns so they will respawn based on the time you set.

==11/24/03==
Image: Fixed zoning and deaths so you no longer drop from the server.
Image: Properly enabled LDoN on EQEmu.
Image: Basic Adventure Merchant code implemented, throwing it to the STL guys to properly optimize.
LethalEncounter: Fixed Tradeskill objects.  If the objects show up as bags, thats a db issue

==11/23/03==
Trumpcard:  Several zone performance enhancements, as well as changes to decrease combat lag.
LethalEncounter: Reworked pets, they should now work properly.

==11/21/03==
LethalEncounter: Merchants wont trade with people while they are fighting now.
LethalEncounter: Players can no longer attack while invulnerable.
LethalEncounter: Fixed an AA bug that gave the player 199 aa points.

==11/18/03==
LethalEncounter: Lotsa cool fixes like crash fixes and guild fixes and cool stuff like that

==11/17/03==
LethalEncounter: Finally got /who all done and *hopefully* free of bugs.
LethalEncounter: Fixed a crash bug with guilds and added some of the Guildmanagement features.

==11/16/03==
Trumpcard: Several deallocate and mem leak errors corrected.
solar: Fixed bug with mobs assisting entities they shouldn't.  Often this
	show itself with other mobs helping the player when the player
	attacked one.
LethalEncounter: Added in the GuildManagement tool. You will need 2 new columns in your character_ table for this.
LethalEncounter: Fixed a couple crash bugs with guilds and spells.

==11/15/03==
solar: Fixed a bug in commands where if you didn't define an accesslevel for a command
	in the addon.ini it would default to accesslevel 0 instead of the hardcoded default.
solar: Modified #help command to search for a partial command specified as argument.
solar: HP wasn't being updated to client properly and would fall out of sync

==11/14/03==
LethalEncounter: Fixed a bug in doors that would cause triggered doors to go into an endless loop and crash.

==11/13/03==
kathgar: Fixed a crash when calling ZSList::FindByZoneID() when sending an invalid zone number.
         Stack was corrupt in the backtrace, so I am not sure what called it in this way.
LethalEncounter: Fixed animation bug with attack.
LethalEncounter: Fixed Tradeskills (again)
LethalEncounter: Character Select will now show your equipment (Existing characters will need to swap the items)
LethalEncounter: NPCs will now equip weapons and items from the db.
LethalEncounter: You can now give weapons and items to NPCs to equip.

==11/12/03==
LethalEncounter: Fixed skills, we had the struct one int32 off.
LethalEncounter: Fixed GM Trainers, they should now work as intended.

==11/11/03==
Doodman: Fixed zone crash in CheckCloseArrgo() during assist checking based on
flawed if logic.

==11/11/03==
LethalEncounter: Fixed Stamina issues.

==11/10/03==
LethalEncounter: Fixed Quests.
LethalEncounter: A quest fix that makes them use far less memory, up to 25 MB per computer

==11/09/03==
LethalEncounter: Fixed zoning, zone_points should now work correctly, but make sure you have the latest ones in zone_points!
LethalEncounter: Fixed problem with spells not scribing.
LethalEncounter: Fixed zoning bug where you zoned back into the same zone, but it looked like you were in the new zone.

==11/06/03==
Image: Guildwars code and fixed a bug in MobAI for NPCs assisting clients, clients do not use
IsEngaged(), so it always returned false, now it uses AutoAttackEnabled() in its place for clients.
Image: Reversed the AICheckCloseSpells if statements, now sanity checks before distance check, uses less CPU usage.

==11/05/03==
LethalEncounter: Updated all of the opcodes that were changed in the patch today.
LethalEncounter: Refined AA's some, added table to hold the timers for AA's so users can exploit them. Look in db.sql for the table.


==11/04/03==
LethalEncounter: Added in the basic structure for AA's and got some of them working.

==11/03/03==
LethalEncounter: Fixed factions.
LethalEncounter: Fixed issues with mobs of different factions or no faction assisting.

==10/29/03 to 11/02/03==
LethalEncounter: Fixed X, Y coords.
LethalEncounter: Added in groups.
LethalEncounter: Added in trades.
LethalEncounter: Fixed various animations.
LethalEncounter: Fixed client movement.
LethalEncounter: Fixed NPC movement.
LethalEncounter: Fixed forage.
LethalEncounter: Fixed Attack.
LethalEncounter: Fixed GM summon.
LethalEncounter: Fixed GM goto.
LethalEncounter: Fixed spells.
LethalEncounter: Fixed lifts.
LethalEncounter: Fixed automatic weather changes.  Change the default in the zone table to suit your needs. 1: normal 2: Rainy most of the time 3: Snowing most of the time
LethalEncounter: Fixed lotsa other important stuff that I cant remember :)

==10/29/03==
devn00b: Yet again removed Faulty pet code. LEAVE THEM ALONE

==10/17/03==
Image: Zone points code put in, need some testing done on it please!

==10/15/03==
Image: More optimization to the aggro code and an infinite for loop fixed.

==10/14/03==
kathgar:  Removed deprecated guildwars code
          Added #ifdefs for IPC code, no more IsInteractive checks wasting cycles
          Fixed a memleak in NPC with attacked_timer

merth: Updated zone objects:
	* Uses new item architecture
	* Fully supports imported data from packet collector
	* Objects dropped to ground persist zone sessions

==10/13/03==
Image: Optimizations to Aggro code, ~10% more efficient according to Trumpcard.

==10/11/03==
Trumpcard: Lots of performance improvements to combat code/AI code.  Streamlined several calls,  and found and removed unneeded calls
	   in MobAI that were causing serious bottlenecks.  Went through and caught a few memory leaks, and converted
	   many deletes to safe deletes.

==10/10/03==
LethalEncounter: Somewhere around this date I added in bazaar traders and cool features like that.

==10/8/03==
Trumpcard:  Starting items are now in.  LE also fixed the combat damage struct and mob hp bar updates.

==10/8/03==
scruffy:  Inverted the XY coordinates system to work like the EQLive system. Run invertxy.sql to update existing databases.

==10/6/03==
kathgar:  Added opcodes for things such as the LFG tool from SEQ, replaced some instances of static opcode use

==10/5/03==
devn00b: Removed Faulty pet code, replaced with working code.

==09/24/03==
Image: Added the functions for the GuildWars point system.

==8/10/03==
devn00b: Moved pets from hardcoded to DB based. need to source pets.sql

============
