UOX3 Changelog
------------------------
-==============================-
-= 24/01/2022 - UOX3 0.99.5a  =-
-==============================-
Contributors: Xuri, punt

Source Changes/Fixes:
	Adjusted values of _ITERATOR_DEBUG_LEVEL and _HAS_ITERATOR_DEBUGGING in ConfigOS.h to better support debug mode in VS2022
	Added support for a new TITLE tag to the command privileges section of commands.dfn, to allow customizing the title added in front of a character's name when they become an Admin, GM or Counselor
	Updated .gitignore, and removed redundant jaspi.h (use the one in spider monkey, no need to duplicate the header).
	Removed a prototype that had no implementation
	Added parenthesis on some simple logical and/or to make clear precedence (and eliminate warnings)
	Replace int with auto for some results to prevent size casting, across the different platforms (and eliminate warnings).
	Improved overall performance of NPC pathfinding (by nearly 60%!) by eliminating some double-work done when checking for blocking dynamics and statics
	Optimized how the system for determining which internal map regions should have active NPCs; instead of there always being 9 active map regions surrounding any given player who's online, that number will now vary between 3 to 6 map regions, depending on how far the player is from boundaries between such map regions. This should reduce the amount of NPCs active and trying to pathfind at any given point when players are online.
	UOX3 now adapts the time between each time it checks Spawn Regions based on how "full" the Spawn Regions are on average - the nearer they are to max capacity, the longer time between each time Spawn Regions are checked
	Fixed an issue with reloading of spawn regions where UOX3 would forget about previously spawned NPCs/Items and respawn everything all over again. As part of the reload process, UOX3 now iterates over previously spawned objects and deletes these where appropriate
	Added support for NPCs engaging other NPCs in combat if they are marked as racial enemies via races.dfn
	Extended the amount of JS events supported by UOX3's JS engine from 96 to 192
	Added new JS Event to allow overriding behaviour from Help button in paperdoll:
		onHelpGump( pChar )			// Overrides default gump menu when pressing Help button in paperdoll
	Added new JS Event to allow preventing characters from toggling on/off war/combat mode
		onWarModeToggle( p Char )	// return false to prevent war mode toggle
	Added new JS Event to allow overriding target selection in combat for default AI behaviours:
		onAICombatTarget( pAttacker, pTarget ) // return true to select current target, or false to skip and look for another
	Updated JS onDamage() JS event to allow returning false to override and prevent damage dealt to a character. Event must now return true to allow damage to go through
	Updated JS Event onSwing to work for characters with no weapon equipped (iSwinging will be null, in this case)
	Updated JS Object Method .KillTimers() to also work for Characters, not just Items
	Fixed an issue with initialization of wander areas for NPCs spawned via object spawners, which caused NPCs to not stick to their assigned areas, but wander according to their own free will. Can't have that!
	Fixed an issue where information on newly spawned characters would get sent twice to each nearby player
	Misc minor cleanup of console messages during startup and shutdown

JScript Changes/Fixes:
	Fixed a client crash caused by the admin welcome gump being too large! (js/server/misc/admin_welcome.js)
	Fixed a bug with the Anatomy skill that allowed gaining skill from targeting self (js/skill/anatomy.js)
	Fixed an issue with default NPC speech where a variable mySocket was not properly defined (js/npc/speech/speech_001.js)
	Fixed an issue with the moongate JS script, which would not work reliably (js/item/moongate.js)
	Updated Provocation skill to disallow directing provoked creatures at targets with the custom tag provImmune present
	Added JS script that renders characters it's attached to immune to physical damage (js/npc/special/physical_immunity.js)
	Renamed shadow_elemental.js to magical_immunity.js, as it's generic script that can be attached to any NPC
	Added script that allows Tinkerers to craft golem followers via Clockwork Assembly items (js/item/clockwork_assembly.js)
	Added script for mask of orcish kin, which when worn prevents all orcs from attacking the wearer (js/item/orcish_kin_mask.js)
	Added AI script for Exodus clockwork NPCs, which amongst a few other things makes them spawn with a magical shield that prevents physical damage being dealt to them until the shield has been brought down by magic damage (js/npc/ai/monster/exodus_clockwork.js)
	Added AI script for orc NPCs which prevent them from attacking characters wearing masks of orcish kin (js/npc/ai/monster/orc.js)
	Added AI script for orc brute NPCs, which makes the NPCs toss orc lords (up to 10 in total) when attacked by magic spells (js/npc/ai/monster/orc_brute.js)
	Added AI script for orc chopper NPCs, which makes the NPCs hit all nearby valid targets with their melee attacks (js/npc/ai/monster/orc_chopper.js)
	Added script for NPC special ability Colossal Blow, which both stuns and adds a temporary peacemaking effect to targets (js/npc/special/colossal_blow.js)

DFN Changes/Fixes:
	The 'make command will now strip clothes and hair/beard from characters that are turned into Counselors (dfndata/command/commands.dfn)
	Adjusted default privileges for Admins, GMs and Counselors to not show skill titles in paperdoll (dfndata/command/commands.dfn)
	Fixed incorrect section headers for base_bascinet and base_helmet (dfndata/items/gear/armor/base_armor.dfn)
	Fixed incorrect ID in item definition for Sai weapon (dfndata/items/gear/weapons/fencing.dfn)
	Fixed incorrect get tag value for a wand definition (dfndata/items/gear/weapons/wands.dfn)
	Reduced the amount of townfolk, poorfolk and richfolk NPCs spawning in Britain (dfndata/spawn/spawn.dfn)
	Added two new races to races.dfn - Ophidian (RACE 25) and Terathan (RACE 26) - which have been setup as racial enemies
	Updated the race ID of relevant Ophidian and Terathan NPCs (dfndata/npc/arachnids.dfn and dfndata/npc/reptiles.dfn)
	Added more pre-defined books to dfndata/misc/books.dfn (and dfndata/items/misc/books.dfn):
		A Welcome (a_welcome)			// Book by Blackthorn, dropped as loot by Betrayers
	Added definitions for additional NPCs, with scripted special abilities where applicable:
		Orc Brute (orcbrute) 			// Throws Orc Lords, cannot be targeted by provoked creatures
		Orc Chopper (orcchopper)		// Attacks deal AoE damage to nearby targets
		Betrayer (betrayer)				// Colossal Blow (stuns and peacemakes), AoE poison (2m range)
		Golem Controller (m_golemcontroller/f_golemcontroller)
		Golem (golem)					// Colossal Blow (stuns and peacemakes)
		Crafted Golem (craftedgolem)	// Crafted version of golem
		Exodus Overseer (exodusoverseer) // Magical Shield (immune to physical damage until shield down)
		Exodus Minion Lord (exodusminionlord) // Magical Shield (immune to physical damage until shield down)
		Exodus Minion (exodusminion)	// Magical shield (immune to physical damage until shield down), periodic AoE burst
	Fixed some issues with itemlists pointing to non-existing items (a turnip and 10 of each magical reagent)

Misc Changes/Fixes:
	Changed default value of NPCFLAGUPDATETIMER ini setting from 5 to 10 seconds
	Changed default value of NPCMOVEMENTSPEED ini setting from 0.38 to 0.5
	Changed default value of NPCRUNNINGSPEED ini setting from 0.2 to 0.3
	Changed default value of NPCFLEEINGSPEED ini setting from 0.3 to 0.4
	Changed default value of ACCOUNTFLUSH ini setting from 0.0 to 5.0 seconds

-==============================-
-= 12/01/2022 - UOX3 0.99.5  =-
-==============================-
Contributors: Xuri, punt, dragon slayer, giwo

Source Changes/Fixes:
	Updated UseDoor() JS function - now called UseItem() instead, and now supports both socket and character as first argument, to allow NPC use.
	Improved JS NPC methods WalkTo()/RunTo() so path is recalculated when blocked by other characters after original calculation took place. Only applies while advanced pathfinding is enabled in uox.ini.
	Added new JS event that triggers when pathfinding comes to an end after using WalkTo/RunTo JS methods:
		onPathfindEnd( mNPC, pathfindResult ) // pathfindResult returns result of pathfinding (-1 = failure, 0 = partial success, 1 = success)
	Disallowed invulnerable players/admins from attacking other characters, with a complimentary system message explaining why they can't attack
	Fixed a bug where NPC's original npvWander mode could get overwritten if multiple pathfinding actions overlapped
	Fixed an issue with NPC trainers where they would list incorrectly the available skills players could train
	When NPCs in wanderTypes WT_BOX, WT_CIRCLE or WT_FREE are blocked too many times from moving by other characters, they will now pause for 60 seconds before attempting to move again
	Exposed .oldWanderType NPC property to JS engine, and updated 'set command to also update this property when manually changing NPC wanderType
	Reduced max attempts at calculating path for NPCs in wanderTypes WT_BOX, WT_CIRCLE or WT_FREE to 25 steps, unless they are evading and attempting to move back into their original wander box/circle
	NPCs who enter "evasion" state because they are unable to find a valid path to an attacker will now have their health reset to maximum, to prevent an exploit to take down any NPCs without risk of taking any damage in return
	JS Methods WalkTo() and RunTo() now actually make use of the provided maxSteps parameter when advanced pathfinding is enabled; previously it would default to 500 steps.
	Added new JS event that triggers when an NPC enters evasion state in combat due to being unable to reach their target
		onEnterEvadeState( mNPC, enemyChar ) // enemyChar would be the character they are unable to reach
	NPCs of same race will no longer attack one another if hit by each other's AoE spells
	Fixed an issue with NPC pathfinding in combat that prevented ranged NPCs from closing in on their targets when losing LoS
	Spellcasting NPCs that cannot pathfind all the way to their target in combat will now attempt to pathfind to an area near the target instead
	Fixed an issue that prevented tiller-men from being correctly associated with their boats after a server restart
	Fixed an issue with combat where ranged characters could shoot bows further than the allowed max range for archery specified in uox.ini
	Fixed a compiler issue with GCC versions below 9.x in various Linux distros, by including iomanip library in UOPInterface.cpp and adding -lstdc++fs to the Makefile
	Exposed Item properties to JS Engine:
		.dexterity // dexterity required to equip item
		.intelligence // intelligence required to equip item
	Fixed issue where changing worldnumber of an item via tweak command would not remove the item from sight of nearby players in the original location
	Fixed issue where characters teleporting to a new world would sometimes not be removed from sight of nearby players in the original location
	Fixed issue where being released from jail cells to a location in a different world would not send map change packet
	Fixed issue where changing worldnumber of a player character via tweak command would not send map change packet
	Fixed issue where teleporting GM/Counselor to a player's location when responding to a help request would not send map change packet
	Fixed issue where recalling off a recall rune in a different world would not send map change packet
	Fixed issue where using travel menu or 'go place # command would not send map change packet when going to a location in a different world
	Tooltips for recall runes will now show the name of the facet they were marked in, with facet names being pulled from entries 1975 to 1980 in the dictionary files
	Added new option in UOX.INI under [settings] section:
		MAPDIFFSENABLED=0/1 // If enabled, server will attempt to load diff files, and send "Enable Map-diff files" packet to client to also load these. Disabled by default.
	Server no longer loads map/statics diff files by default, nor does it send packet to client to request loading these files, as only client versions below 7.0.8.2 will actively load these files. Can be re-enabled with new UOX.INI setting mentioned above!
	Fixed incorrect ID for gargish dagger in CHandleCombat::getWeaponType()
	Added missing weapon entries in CHandleCombat::getWeaponType(): bladed whip, barbed whip, spiked whip, gargish talwar
	Fixed an issue that would show the end part of some tiledata names as garbled text instead of cutting off the text(!) at 20 characters
	Fixed an issue with advanced character creation template when using ClassicUO client, which sends a profession value of 255 instead of 0 when no profession template has been selected.
	Fixed an issue where clones of NPCs that can split in combat didn't get the NPC flag correctly set
	Guild titles are now removed for players who leave their guilds
	Enabled closing some hard-coded gump menus using right-click (howto, guild, towns, wholist, addmenu, craftmenu, info)
	Fixed an issue where adding base items using 'add [itemID] would sometimes get false positive hits from harditems.dfn, depending on the length of the itemID
	Fixed an issue where items added using 'add [itemID] would not get names applied properly from harditems.dfn
	Item/NPC DFN tag GET can now inherit a random parent by adding additional values separated by spaces. Syntax:
		GET=parent1 parent2 parent3 (etc)
	Fixed an issue where NPC backpacks would not have the max item capacity set properly
	Added new properties for CItem objects (also exposed as JS Item Properties):
		maxRange // max distance a ranged weapon can fire at (replaces ARCHERRANGE ini setting)
		baseRange // base distance throwing weapons (when implemented) can be used at
	Added support for new Item DFN tag that replaces global UOX.INI setting ARCHERRANGE:
		MAXRANGE=# 				// Specifies max range of ranged weapon
	Added support for new Item/NPC DFN tags to support randomizing elemental resistances:
		RESISTFIRE=#/# #		// Set NPC's poison resistance; fixed or random value
		RESISTCOLD=#/# #		// Set NPC's poison resistance; fixed or random value
		RESISTLIGHTNING=#/# # 	// Set NPC's poison resistance; fixed or random value
		RESISTPOISON=#/# #		// Set NPC's poison resistance; fixed or random value
	Added support for two new DFN tags in dfndata/race/races.dfn that can be used to allow/ban lists of equipment for specific races
		ALLOWEQUIPLIST=#
		BANEQUIPLIST=#
	Added support for new section in dfndata/race/races.dfn - [EQUIPLIST #], which can be used to define lists of equipment that is whitelisted or banned for specific races.
	Fixed a bug that would report incorrect weight in tooltips for Item/NPC spawner objects
	ScriptSections are now reapplied for items bought by players from NPC vendors
	Fixed an issue where players could drop an item on the ground and other players would still see the item after it was picked up, because of a failed distance check vs old location coordinates (in pack) instead of vs current location on ground
	Fixed a bug with players being able to use last-target macro to target objects picked up and held by other players on their cursor
	Updated all references to "devinelock" to be "divinelock" instead - this includes the name of the JS Item property
	Fixed house commands triggering (useless) targeting cursors for players onboard boats
	Changed default statcap in UOX.INI from 325 to 225
	Fixed a out-of-range error for players attempting to combine ore inside their own backpack
	Fixed various issues with distance checks and container checks when using/target objects
	Added optional 4th "hue" parameter to AddGump JS method
	Added JS Function to get total amount of accounts on server - GetAccountCount()
	Added JS Function to get total amount of players online - GetPlayerCount()
	onSwing JS Event can now trigger in scripts attached to items, not just items attached to characters
	Added some JS Functions to expose some hard-coded constants to JS scripts:
		BASEITEMSERIAL() // Base item serial
		INVALIDSERIAL() // Invalid serial
		INVALIDID() // Invalid ID
		INVALIDCOLOUR() // Invalid colour
	Fixed an issue where JS character property .colour would modify origSkin property instead of colour
	Fixed an issue where JS character property .guildTitle returned the name of the character instead of the guild title
	Character JS property .poison can now also be used to set a character's poisoned level, not just read it
	Exposed Item property to JS engine:
		.ac // armour class for item (0-128). Primarily used for setting race-restrictions for equippable items, i.e. race X cannot equip items of armour class Y.
		.def // defensive value of item (Physical resistance post-AoS, AR in older UO)
		// NOTE: The following properties don't actually do anything yet, but can still be used in custom JS scripts if desired
		.resistCold // Cold resistance of item 0-1000, where 1000 equals 100.0%
		.resistHeat // Heat/Fire resistance of item 0-1000, where 1000 equals 100.0%
		.resistLight // Light resistance of item 0-1000, where 1000 equals 100.0%
		.resistLightning // Energy/Lightning resistance of item 0-1000, where 1000 equals 100.0%
		.resistPoison // Poison resistance of item 0-1000, where 1000 equals 100.0%
		.resistRain // Rain resistance of item 0-1000, where 1000 equals 100.0%
		.resistSnow // Snow resistance of item 0-1000, where 1000 equals 100.0%
		.damageHeat // Weapon deals Heat/Fire elemental damage (true/false)
		.damageCold // Weapon deals Cold elemental damage (true/false)
		.damageLight // Weapon deals Light elemental damage (true/false)
		.damageLightning // Weapon deals Lightning elemental damage (true/false)
		.damagePoison // Weapon deals Poison elemental damage (true/false)
		.damageRain // Weapon deals Rain/Water elemental damage (true/false)
		.damageSnow // Weapon deals Snow/Ice elemental damage (true/false)
	Added new UOX.INI setting under [server] to enable/disable shard response to ConnectUO server polling (disabled by default)
	Sub-commands are no longer included when registering packets to be overloaded via RegisterPacket function, as that part was never fully implemented. Packet-hook scripts can be setup for specific packet IDs, but any sub-command checking will need to be done in the script itself
	JS Packet Method GetDWord() now uses JS_NewNumberValue instead of INT_TO_JSVAL to read from the socket buffer, to better handle large numbers, which could previously be returned with wrong values.
	JS Function CalcItemFromSer() now uses a JS_GetStringBytes() and str_value() combo instead of JSVAL_TO_INT() to read the data provided in the function argument. This allows JS scripts to provide item serials to the function directly without needing to split it into four parts first (though that still works)
	Fixed issue where JS properties for multis didn't always return correct values
	Custom tags can now be set for multis in dfndata/house/house.dfn via the DFN tags CUSTOMSTRINGTAG and CUSTOMINTTAG, which can be read later for a placed multi via JS Item method GetTag( tagName ). Syntax is identical to custom tags in Item/NPC definitions:
		CUSTOMSTRINGTAG=tagName stringValue
		CUSTOMINTTAG=tagName intValue
	Definitions for multis in dfndata/house/house.dfn now support the COLOUR and COLOURLIST tags, which will (if present) be applied to new multis that are added in-game. Colour for existing multis can be modified via the 'tweak command.
	Re-implemented DoStaticEffect() as a stand-alone JS function that takes a location as a target instead of an object
	Fixed an issue with potions where entire stacks of potions would get consumed instead of just one potion
	Added new UOX.INI settings under [combat] to control the bonus damage modifier in explosion potions:
		ALCHEMYBONUSENABLED=0/1	// enable/disable bonus damage, defaults to disabled
		ALCHEMYBONUSMODIFIER=5 	// bonusDamage = alchemySkill / alchemyBonusModifier
	Exposed speechType as an additional 7th optional parameter for the JS TextMessage function, and the other optional parameters (speechTarget, speechTargetSerial, speechFontType) can now be supplied as -1 if one just want to use the default values. Supported speechTypes:
		TALK			= 0,	// normal system message
	    PROMPT			= 1,	// Display as system prompt
	    EMOTE			= 2,	// : text
	    SAY				= 3,	// character speaking
	    OBJ				= 4,	// at object
	    NOTHING			= 5,	// does not display
	    SYSTEM			= 6,	// text labelling an item
	    NOSCROLL		= 7,	// status msg, does not scroll
	    WHISPER			= 8,	// only those close can here
	    YELL			= 9,	// can be heard 2 screens away
	Added support for packet 0xE2 (New Character Animation, used to play animations in client v7.0.0.0+) via cEffects::PlayNewCharacterAnimation( CChar *mChar, UI16 actionID, UI16 subActionID, UI08 subSubActionID )
	Added support for new animation packet in JS Character method DoAction() using a second parameter that specifies animation variation, which if present forces server to send new animation packet instead of old. This means the 'action/npcaction commands can now be used to play animations on gargoyles/humans in client v7.0.0.0+ using the following syntax: 'action [action subAction]
	Created new enums for character actions and sub-actions, and updated code to refer to these instead of using "magic" numbers
	Added new options in UOX.INI under [settings] section:
		FORCENEWANIMATIONPACKET=0/1 // If enabled (default), forces the use of the new animation packet for playing various character animations for both NPCs in general and for player characters connected with client v7.0.0.0+
	Updated various actions performed by players and NPCs to use new animation packet (combat, spellcasting, mining) if connected with client v7.0.0.0+ and ini setting to force new animation packet is enabled
	Added basic support for gargoyle flying ability. Can now use flying ability itself to enter/exit flying state, and the state change will also get sent to nearby players. Flying players are treated the same way as mounted players; polymorph spells will auto-dismounts mounted/flying player, same rules for stealth applies to flying as riding, etc.
	Exposed Character property to JS engine:
		.isFlying // returns true if character is flying
	Fixed an issue where moving items around within a container at max item capacity was not allowed
	Exposed Item/Character properties to JS:
		.oldX // Previous X coordinate for object
		.oldY // Previous Y coordinate for object
		.oldZ // Previous Z coordinate for object
	Exposed Character properties to JS:
		.mana // Character's current amount of mana
	Updated version of Winsock requested by UOX3 from 2.0 to 2.2
	Exposed timer for updating NPC flags to [timers] section of UOX.INI:
		NPCFLAGUPDATETIMER=5 // Interval in seconds between each time NPC flags are updated. Default adjusted down from 30 to 5 seconds
	Fixed an issue where UOX3 was trying to output some debug/warning messages to console using the wrong console method
	Made some small tweaks to NPC pathfinding to make NPCs more likely to pick a new target location when their old one is blocked
	Removed -lstdc++fs from Makefile and replaced with special instructions for users of gcc below v9.x
	Fixed a buffer overrun issue with tiledata item names
	Eliminated a bunch of compilation warnings in VS2017
	Updated JS Method CreateDFNItem to allow creating items without referencing a socket/character. Syntax:
		var myItem = CreateDFNItem( null, null, itemSectionID, amount, "ITEM", false, worldNumber, instanceID );
	Option to define how much memory JS engine should be allowed to allocate before last-ditch GC kicks in has been moved from engine.dat to a new UOX.INI setting under [system]. Note that too low values can lead to server instability, especially if doing a lot of JS engine reloads, so default value has been increased from 16 to 256 MB per JS Runtime:
		JSENGINESIZE=256 // gcMaxBytes limit in MB per JS Runtime. Must be between 16 and 4095
	Reduced stackchunksize value provided for JS_NewContext from 0x500000 to the recommended default of 8192
	Updated how players are paid for completing NPC escort quests; instead of hard-coded random amount between 0-600 gold, the reward is now based partly on the NPC escort's fame, and partly on the amount of gold the NPC is carrying. The formula for quest rewards thus look like this: rewardAmount = (( totalFame / 100 ) * 50 ) + ( totalGold * 0.25 )
	Fixed healthbars of nearby characters not showing correctly for players who have just logged in. Cause seems to have been UOX3 reading more bytes from network buffer than required when (not) handling packets 0xB5 and 0xFB. Added basic handling of these packets to avoid that problem.
	Fixed an issue where UOX3 would send full status updates (packet 0x11) for each character on the screen, rather than just sending the minimum required for each character. Client doesn't need to know the weight of an NPC, or how much gold an opponent player is carrying!
	Fixed an issue with tooltips for characters and/or items not always appearing, caused by UOX3 not responding correctly to certain tooltip requests (packet 0xD6)
	Fixed a casting issue that prevented SEFunctions.cpp from compiling on Linux
	Added additional Region/Townregion JS properties. These (and other properties) can be viewed and modified using the 'tweak command, but changes are not permanently saved and will only be valid as long as the server stays running:
		.id 				// Region ID
		.scripttrigger 		// Script-trigger associated with region
		.numGuards 			// Number of guards associated with town (if any) in region
		.taxes 				// Gold reserves of town (if any) in region
		.reserves 			// Resource reserves for town (if any) in region
		.appearance 		// Appearance - 0 = Spring, 1 = Summer, 2 = Autumn, 3 = Winter, 4 = Desolation, 5 = Unknown
		.music 				// Music assigned to region in regions.dfn
		.weather 			// Weather ID assigned to region in regions.dfn
		.owner 				// Name of owner of guards in the region
	A JS function was added previously, but not mentioned in the changelog:
		GetTownRegion( regionID ) // Takes one parameter, regionID, and returns a region object
	Fixed long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux, after updating cConsole.cpp/h to conform to standard unix terminal commands/settings for certain features (punt)
	Fixed an issue that could cause a crash on Windows when attempting to broadcast system messages from the UOX3 console (punt)
	Fixed an issue that prevented text input in UOX3 console for system broadcasts from being displayed on Linux and MacOS (punt)
	Added support for new JS Object - IUE_ACCOUNT - which can be accessed via character property .account. The following account properties have been exposed to the JS engine:
		.id 				// Account ID (Read-Only)
		.username 			// Account Username (Read-Only)
		.flags 				// Flags set on account (Read-Only)
		.comment 			// Comment/contact info
		.character1 		// Character in account slot 1 (Read-Only)
		.character2 		// Character in account slot 2 (Read-Only)
		.character3 		// Character in account slot 3 (Read-Only)
		.character4 		// Character in account slot 4 (Read-Only)
		.character5 		// Character in account slot 5 (Read-Only)
		.character6 		// Character in account slot 6 (Read-Only)
		.character7 		// Character in account slot 7 (Read-Only)
		.currentChar 		// Currently logged in character (if any) (Read-Only)
		.lastIP 			// Last IP used to connect to account (Read-Only)
		// Flag shortcuts
		.isBanned 			// Is account banned?
		.isSuspended 		// Is account suspended?
		.isPublic			// Is comment/contact info to be considered public info?
		.isOnline			// Is account online?
		.isSlot1Blocked 	// Is character slot 1 blocked?
		.isSlot2Blocked 	// Is character slot 2 blocked?
		.isSlot3Blocked 	// Is character slot 3 blocked?
		.isSlot4Blocked 	// Is character slot 4 blocked?
		.isSlot5Blocked 	// Is character slot 5 blocked?
		.isSlot6Blocked 	// Is character slot 6 blocked?
		.isSlot7Blocked 	// Is character slot 7 blocked?
		.unused9 			// Unused flag
		.unused10 			// Unused flag
		.isSeer 			// Is account marked as Seer account?
		.isCounselor 		// Is account marked as Counselor account?
		.isGM 				// Is account marked as GM account?
	Fixed 'addaccount command - can now once again be used to add a new user account to the server from in-game. See accounts.adm for info on available flags. Syntax:
		'addaccount [username] [password] [(optional)flags]
	Updated AI for AI_HEALER_G and AI_HEALER_E to check for multi-ownership and line of sight before resurrecting dead players
	Added new helper function to get amount of minutes that have passed since midnight 01/01/1970 UTC - GetMinutesSinceEpoch()
	Converted wTimeBan property of CAccountBlock from UI16 to UI32
	Added check during login for timeban account property. If a timeban is in place, player will be unable to login until after the ban is over.
	Added JS property for Account JS Object:
		.timeban 			// Time in minutes that user is banned
	Completed implementation of onDecay JS event, which was not actually hooked up to anything! Can now be used to interrupt decay for items. Returning false will prevent code from deleting the decaying item, while returning true will continue running the decay code as normal.
	Fixed an issue with .brkPeaceChance JS Character property, which erroneously called on the GetBrkPeaceChanceGain()/SetBrkPeaceChanceGain() functions instead of GetBrkPeaceChance()/SetBrkPeaceChance()
	Fixed issue with loading of UOP map files that was introduced in a previous commit while attempting to get rid of some warnings when compiling UOX3 on Windows!
	Exposed a (read-only) JS property for characters to fetch their hunger rate. Uses race's hunger rate if defined, otherwise uses HUNGERRATE form uox.ini:
		.hungerRate 		// Seconds between becoming hungrier
	Added some details to console during UOX3 startup about which IPs and Ports UOX3 is listening to
	Added new JS event that triggers when a player clicks on the Quest button in the paperdoll. Triggers from character script if present, or global script if not:
		onQuestGump( pUser )
	Added new JS event that triggers when player toggles a special move from a combat book. See packet 0xBF, subCmd 0x19 in packet guides for details on the special moves, whose IDs range from 0x00 to 0x1D:
		onSpecialMove( pUser, abilityID )
	Updated FileSize() function in regions.cpp to fetch file size using std::filesystem::file_size() instead of creating an input stream, opening a file and then trying to seek the last position in the file
	Added findNearbyObjects() function to findfuncs.cpp, to find all objects (characters and items) of CBaseObject class near a specified location
	Improved performance when initializing multis on startup; now checks for items near multis, instead of checking for multis near every single item!
	Improved performance when loading items and characters from worldfiles during startup; around 33% faster for release builds, around ~50% faster when running in debug mode through visual studio (punt)
	Updated createSection() in ssection.cpp to use std::string and StringUtility functions instead of UString, and added some error handling (punt)
	Updated a bunch of casts to use UOX3-specific typedefs for consistency
	Startup performance is now faster by an additional 70% over the previous commit, primarily due to modernization of HandleLine() functions in cBaseobject.cpp, cChar.cpp, cItem.cpp and cMultiObj.cpp (punt)
	More UString instances replaced by std::string and associates (punt)
	Additional work done to modernize string handling in CPacketReceive.cpp, CPacketReceive.h, CPacketSend.cpp, CPacketSend.h, cScript.cpp, gumps.cpp (punt)
	Additional work done to modernize string handling in gumps.cpp, commands.cpp, cmdtable.cpp, commands.h, CJSMapping.cpp, scriptc.cpp and scriptc.h (punt)
	Fixed an issue with check for allowed/banned equipment for races; if a list of allowed equipment existed, it would never check the banned list
	Additional string handling modernization in cHTMLSystem.cpp, cRaces.cpp, gumps.cpp, townregion.cpp and uox3.cpp (punt)
	Increased default timer for worldsaves from 5 to 10 minutes
	Fixed an issue where the tile command could spawn items with incorrect ID because tempInt2 wasn't reset properly
	Additional string handling modernization in cAccountClass.cpp, cHTMLSystem.cpp, CResponse.cpp, cServerData.cpp, cServerData.h, cServerDefinitions.cpp, cSocket.cpp, cSpawnRegion.cpp, cSpawnRegion.h, cWeather.cpp, Dictionary.cpp, effect.cpp and uox3.cpp (punt)
	Fixed an issue where using JS Method PopUpTarget with ID 12 could crash the server
	Additional string handling modernization in magic.cpp, JSEncapsulate.cpp, jail.cpp, house.cpp, fileio.cpp, network.cpp, msgboard.cpp, mapstuff.cpp, pcmanage.cpp, scriptc.cpp, SEFunctions.cpp, sound.cpp, speech.cpp (punt)
	Removed ustring.h and ustring.cpp and references to these from the project as they have now been completely phased out by the move to std::string and the use of StringUtility.cpp/hpp
	Finalized string handling modernization in cRaces.cpp, house.cpp, items.cpp, npcs.cpp, skills.cpp, ssection.cpp, ssection.h and targeting.cpp (punt)
	All teleport locations in teleport.scp without a source/target world specified will now work for both Felucca and Trammel facets
	Deleted ustring.cpp/ustring.h from repository and removed last few straggling references to these
	Teleport locations from teleport.scp are now sorted upon initial load, and no longer require being sorted in the file itself (punt)
	Modified handling of CONT and PACKITEM tags loaded from worldfiles to no longer corrupt pointers (punt)
	Randomized initial position of items added inside containers via DFN tag PACKITEM
	Fixed various issues with in-game bulletin boards; posts can now be made, read and replied to using both regular client and ClassicUO client
	Fixed issue with bulletin board post removal that could cause infinite loops
	Fixed issues with and re-enabled bulletin board maintenance. Should no longer cause infinite loops, nor corrupt bulletin board posts when removing posts marked for deletion! This also fixes NPC escort quests not appearing on bulletin boards after initial quests were accepted and related posts removed.
	Fixed an issue where bulletin board posts submitted from client with lines of text longer than 255 bytes were stored with no null-terminator at end of the such lines, since they got cut off in wrong place
	Fixed server crash related to JS timers/other tempeffects by replacing the use of CDataList (which uses std::deque) in tempEffects with GenericList (which uses std::list), which is more optimized for removing records in the middle of the array
	Updated Sort() methods in GenericList to use std::list member function sort instead of std::sort (Xuri)
	Applied some code style changes for consistency :art: (Xuri)
	Replaced CDataList with the new GenericList class throughout UOX3, and removed CDataList from the project files
	Reverted an earlier change where scriptsections were supposed to be reapplied to items bought from NPC shopkeepers - didn't actually work!
	Fixed issue where total gold and armor rating of player was not getting sent for status window updates
	Updated LeaveBoat() function to use ValidSpawnLocation() instead of ValidMultiLocation() for more reliable disembarking from boats
	Added support for the following boat commands (and their triggerword aliases):
		raise anchor 		// Raise anchor, allowing boat to move
		drop anchor 		// Drops anchor, preventing boat from moving
		forward one 		// Moves boat one tile forward
		backward one 		// Moves boat one tile backward
		left one 			// Moves boat one tile in port direction
		right one 			// Moves boat one tile in starboard direction
		forward left 		// Moves boat forward left diagonally
		forward right 		// Moves boat forward right diagonally
		backward left 		// Moves boat backward left diagonally
		backward right 		// Moves boat backward right diagonally
		forward left one 	// Moves boat one tile diagonally, forward left
		forward right one 	// Moves boat one tile diagonally, forward right
		backward left one 	// Moves boat one tile diagonally, backward left
		backward right one 	// Moves boat one tile diagonally, backward right
	Added new enum BoatMoveType to keep track of all the additional boat movement types, and changed moveType from UI08 to SI08, in order to use -1 as a representation of an "anchored" and immovable boat
	Boats now start out with anchor dropped when initially placed, and must also have anchor dropped before they can be packed up into model ships, while anchor must be raised in order for tiller man to accept orders to sail
	Added support for two new DFN tags in houses.dfn, primarily for the use of boats/boat holds:
		MAXITEMS=#			// Max items that can be stored in a boat's hold
		WEIGHTMAX=#			// Max weight that a boat's hold can... hold (40000 = 400.00 stones)
	Fixed an issue where large dragon ships would be spawned with incorrect names due to server assuming they're houses
	Fixed an issue where it was not possible to turn a boat around under certain circumstances
	Tiller men on boats will now be named "a tiller man" if the boat is unnamed, and "The tiller man of [ship name]" if the ship has been named
	Boats now cannot be dry-docked if there are items in the hold
	Boats now cannot be dry-docked if either of the planks are open
	Names of boats are now stored in the title property of ship models, and is used to reapply the boat's name when unpacking the boat, while the ship model itself is named after the boat with a [Dry Docked] tag slapped on at the end.
	5/05/2021 - Xuri (0.99.4m)
	Fixed a long-standing (20+ years old) issue with objects not being sent/removed consistently when players login, teleport or move around, or when items are being removed, areas wiped, etc.
	Added new class RegionSerialList to store serial references to objects added to/removed from regions (both on worldfile load and when objects move in-game). This allows for faster lookup, insertion tests, etc. and results in worldfiles loading up to ~41% faster
	Fixed an issue where characters in different world instances could shove each-other when moving
	Fixed server crash related to using incorrect argument for REGSPAWN command
	Fixed an issue where characters would not get world changes updated properly in some older (5.x) client versions
	UOX3 will now attempt to resist being closed if a world-save is in progress, to avoid corruption of worldfile data
	Added TryParseJSVal() helper function in cScript.cpp, used to parse jsval values returned from script events. Provides results matching 0 (0, false), 1 (1, true) or any specific int value returned from script.
	JS events updated to use new TryParseJSVal helper function (no change in behaviour):
		onDecay, onResurrect, onCommand, onBuyFromVendor, onSellToVendor, onPickup, onCharDoubleClick, onSkillGump, onUseBandageMacro, onCombatStart, onCombatEnd, onDeathBlow, onBuy, onSell
	JS events with slight change of behaviour after update to use TryParseJSVal:
		onDrop, onDropItemOnItem, onDropItemOnNpc - previously, a blank or non-existent return value would be treated the same as a return true. This will now be treated as a return false. Update scripts accordingly!
	JS events updated to support return values from scripts:
		onCollide, onTalk, onSnooped, OnHungerChange
			Return false or nothing to prevent hard code from running
			Return true to allow hard code to run like normal
		onStolenFrom, onAISliver, onLightChange, onVirtueGumpPress, onQuestGump, onSpecialMove, onSwing, onClick, onHouseCommand, onSellToVendor, onSkillCheck, onSpellGain, onSpellLoss
			Return false to allow hard code and other scripts with event to run like normal
			Return true to prevent hard code and other scripts with event from running
		onSteal
			Return false or nothing to allow hard code and other scripts with event to run like normal
			Return true to prevent hard code and onStolenFrom event from running (theft failed?)
			Return 2 to prevent hard code, but allow onStolenFrom event to run (theft succeeded, but handled in script?)
		onLeaving, onEntrance, onEquip, onUnequip, onEnterEvadeState, onSoldToVendor, onBoughtFromVendor, onSpellSuccess, onSpellTarget, onFlagChange, onDeath
			Return false or nothing to allow other scripts with event to run like normal
			Return true to prevent other scripts with event from running
	Added new JS events that run prior to items being equipped/unequipped, with support for return values:
		onEquipAttempt( pEquipper, iEquipping )
		onUnequipAttempt( pEquipper, iUnequipping )
			Return false or nothing to reject attempt to equip/unequip item, and prevent hard-code or other scripts with event from running
			Return true to allow hard code to run like normal
	Added new JS event that runs prior to onSnooped event, for character doing the snooping:
		onSnoopAttempt( snooped, snooper )
			Return false or nothing to prevent hard code and other snooping-related events from running
			Return true to allow hard code and other snooping-related events to run like normal
	Updated onSnooped JS event to accept return values:
		Return true when success state is true to prevent other scripts with event from running
		Return true when success state is false to prevent hard code and other scripts with event from running
	Added second parameter to onCommand() JS event to match it up with the documented version. New syntax:
		onCommand( socket, cmdString )
	Updated onClick JS event to also run for characters with event attached (return 1 to prevent showing hard-coded name for whatever object is clicked)
	Updated onSteal JS event to include a third parameter, an object reference for the target of the theft
	Fixed an issue where the JS function TriggerEvent() didn't restore the original JSContext and JSObject of the calling script after calling an event in a separate script, causing timers to be associated with the wrong script when both TriggerEvent and StartTimer were used in same script
	Updated KillTimers JS method to support an optional argument specifying the timerID of the timer to be killed. If no arguments are provided, it will - as previously - kill all timers for the object
	Added support for assigning multiple JS scripts per object (item, multi, char, region).
		Any time a scriptID is added to an object, the list of such IDs for that object will be sorted from lowest to highest scriptID, which also determines the execution order for the scripts. Note that if the same JS event is present in several scripts assigned to an object, each of those events will trigger, unless the rules about return values for said event prevent this
	DFNs for Items, Multis, Characters and Regions can now contain multiple SCRIPT=scriptID tags per definition. Each such SCRIPT tag will be applied to the object in question, then sorted from lowest to highest scriptID by server.
	Added new JS property for Items, Multis, Characters and Regions:
		.scriptTriggers 		// If used to get property, will return array object with all script IDs assigned to object. If used to set property, will add script ID to existing list of script IDs for object.
	Modified JS property for Items, Multis, Characters and Regions, which for backwards compatibility functions similar to in older versions:
		.scripttrigger 			// If used to get property, will return last script ID in list of script IDs assigned to object. If used to set property, will clear list of script IDs and assign only the new ID
	Added new JS Methods for Items, Multis, Characters and Regions:
		.AddScriptTrigger( scriptID ) 	// Adds a new scriptID to list of scripts assigned to object
		.RemoveScriptTrigger( scriptID ) // Remove a specific scriptID from object (0 = remove all)
	Removed all traces of SETSCPTRIG and TWEAK commands from source. These commands are now entirely handled in JS.
	Stats and Tweak buttons in list of online characters ('WHOLIST) will now execute the CSTATS or TWEAK command respectively, with target automatically set to character being viewed in list
	Fixed an issue with TWEAK command where items equipped on a character's paperdoll could not be targeted
	Replaced UOX_MIN and UOX_MAX with std::min and std::max (punt)
	Moved StringUtility functions into a new namespace: strutil (punt)
	Unified duplicate tile/multi seeking code for HS/non-HS versions of tiledata & multis (punt)
	Updated MsgBoardMaintenance() to use standard filesystem directory listing (punt)
	Fixed return value logic for onUseChecked/onUsedUnchecked JS events - was reversed by mistake!
	Initiated start of revamped mul/uop handling, with some new files added to project: (punt)
		MultiMul.cpp/hpp, IDXMul.cpp/hpp and UOPData.cpp/hpp
	Updated code for loading and seeking in multis (punt)
	Added new files to VS project and project filter
	Added new files to source/CMakeLists.txt
	Added support for MultiCollections.uop. If present in the specified datafolder, this file will be preferred over the traditional multi.mul/idx files, and will enable access to the new multis contained within (punt)
	Added dependency for static library of zlib-1.2.11, of which a minimal version is included in a subfolder alongside spidermonkey in the root UOX3 project folder. This is needed for compression matters related to UOP files and certain UO network packets
	Added VS Solution (zlib.sln) to compile static-library of zlib-1.2.11 for Windows. Makefile for Linux/macOS also included.
	Updated CMakeList.txt to include zlib references
	Adjustments to source/CMakeList.txt in attempt to fix build issue with CMake
	Updated debug/release configurations for Win32 in VS solution to include required references to zlib
	Removed RemoveFromSight() from CItem::Update() in cItem.cpp, to address flickering issues with animated items, and for smoother updates of items on boats when sailing.
	Added new flag in CBaseObject - damageable - which determines if an Item or Multi should be considered a damageable object.
	Added new DFN tag for Items and Multis to mark objects as damageable objects
		DAMAGEABLE=0/1 // If enabled, allows client to display healthbar for object, using object's hp/maxhp values as basis. Note that any changes to a damageable object's health will not be reflected in the client until a stat update has been sent.
	Added new JS Property for Items and Multis and Characters to get/set an object's damageable flag
		.isDamageable // 1 or 0
	Added new JS Method for Items, Multis and Characters to force an update of the object's health bar to nearby players:
		.UpdateStats( statType ) // statType can be 0 (Health, only one that works for items), 1 (Mana) or 2 (Stamina)
	Updated updateStats() in uox3.cpp to work with CBaseObject instead of CChar
	Updated statwindow() in CSocket.cpp to work with CBaseObject instead of CChar
	Updated CPUpdateStat in CPacketSend.cpp to work with CBaseObject instead of CChar, to support sending packet 0xA1 to client for Items/Multis
	Updated CPStatWindow in CPacketSend.cpp to work with CBaseObject instead of CChar, to support sending packet 0x11 to client for Items/Multis
	Fixed an issue with outgoing packet 0x11 where a character's current HP might sometimes incorrectly be displayed as zero
	Updated CPNewObjectInfo in CPacketSend.cpp to send object information packet 0xF3 to client with datatype set to 0x03 for Items/Multis marked as damageable objects, to enable the client's ability to display health-bars for these items.
	Fixed an issue with JS Method for Items - .Refresh() - which previously did nothing, but now instead sends an update of item to all sockets in range
	Cleaned up some warnings caused by 64 bit/32 bit difference between macOS and Windows (punt)
	Fixed an issue that could cause player characters created in older versions of UOX3 to end up with backpacks without max item capacity set, thus being unable to add any items to their backpack
	More warnings cleanup, and some fixes to address size_t differences between Windows and Unix platforms (punt)
	Reverted changes to jsapi.h, which were causing some unwanted behavior
	Fixed some errors reading in UOP files in UOPData.cpp, and made some tweaks to other related files (punt)
	Fixed an issue with return values for onDrop JS event where not all return values would work as intended
	Added -Wno-shift-negative-value flag to CXXFLAGS in Makefile to potentially suppress some JS-related warnings when compiling on Unix platforms (punt)
	Added thirst system that works similarly to existing hunger system, where characters (and optionally, pets) grow thirsty over time, and gradually draining their stamina (down to a minimum of 1) if too thirsty
	Added new settings to uox.ini under a new [thirst] section to control thirst system:
		THIRSTRATE=6000 	// The rate at which characters grow more thirsty
		THIRSTDRAINVAL=2 	// The amount of stamina drained per thirst cycle when too thirsty
		PETTHIRSTOFFLINE=0 	// Enable/disable whether pets grow more thirsty over time while owners are offline
	Added new JS event that triggers when a character's thirst level changes.
		onThirstChange( pChanging, newStatus )
			Return false or nothing to prevent hard code from running
			Return true to allow hard code to run like normal
	Added new JS properties for Characters related to thirst system (Xuri)
		.thirst 			// Get/Set current thirst level of character
		.thirstRate 		// Get character's thirst rate, based on racial properties or global settings
		.willthirst/ 		// Get/Set whether character will get thirsty
		.tamedThirstRate 	// Get/Set tamed pet's thirst rate
		.thirstWildChance 	// Get/Set tamed pet's chance at going wild if too thirsty
	Added some error-checking to JS function AreaItemFunction() to avoid potential server crash
	Fixed an issue introduced in 0.99.4m, where objects being added to/moved to specific worlds or instances were still visible to players in other worlds/instances
	Fixed issue with loading SCPTRIG tag with value 65535 in older worldfiles, now treats these as if the value was 0
	Updated JS Methods .AddCheckbox() and .AddRadio() to support specifying the gumpImageID to display when button is checked/selected.
		Updated syntaxes:
			.AddCheckbox( topHeight, topLeft, checkImage, defaultStatus, unk2 )
			.AddCheckbox( topHeight, topLeft, checkImageOff, checkImageOn, defaultStatus, unk2 )
			.AddRadio( topHeight, topLeft, radioImage, pressed, id )
			.AddRadio( topHeight, topLeft, radioImageOff, radioImageOn, pressed, id )
	Added new Socket JS Method to close a specific generic gump:
		.CloseGump( gumpID, buttonID ) // gumpID is normally equal to 0xffff + scripttrigger of script gump is created in, while buttonID is the buttonID response we want the client to send when gump closes
	Added new Gump JS Method to end a group of radio buttons started with AddGroup():
		.EndGroup()	// Ends previously started group element
	Re-enabled Gump JS Method MasterGump(), in case someone can use it for something
		.MasterGump( masterGumpID ) // Define master gump of gump?
	Fixed an issue with getTileName() in uox3.cpp that could cause a server crash when fetching the names of certain items
	Added entry for a new directory path in uox.ini:
		SCRIPTDATADIRECTORY=./js/jsdata/ - dedicated to generic data read/written by JS scripts, data not directly linked to live content, which should not live or die by the state of the SHAREDDIRECTORY. Existing scripts will continue to write/read files in the SHAREDDIRECTORY if no changes are made.
	Updated JS File Method .Open() to support an optional fourth argument (requires third argument):
		useScriptDataDir (boolean) - when this fourth argument is included as true, UOX3 will look for the file in the SCRIPTDATADIRECTORY instead of the SHAREDDIRECTORY. Third argument - folderName - is required for this fourth argument to be used. New syntaxes:
			.Open( fileName, fileMode )
			.Open( fileName, fileMode, folderName )
			.Open( fileName, fileMode, folderName, useScriptDataDir )
	Updated JS File Function DeleteFile() to support an optional third argument (requires second argument):
		useScriptDataDir (boolean) - when this third argument is included as true, UOX3 will look for the file in the SCRIPTDATADIRECTORY instead of the SHAREDDIRECTORY. Second argument - folderName - is required for this third argument to be used. New syntaxes:
			DeleteFile( fileName )
			DeleteFile( fileName, folderName )
			DeleteFile( fileName, folderName, useScriptDataDir )
	Updated Item JS Method Dupe() to support passing NULL instead of a socket, for duplicating items without needing to place them in a player's backpack
	Fixed an issue with appending folder names to paths in File JS Method .Open() and JS File Function DeleteFile()
	Renamed default UOX3 server name (was too long) to My UOX3 Shard
	Rewrote server IP handling (new files: IP4Address.hpp/cpp) and did away with the need for the [play server list] section and SERVERLIST entries in uox.ini. UOX3 now automatically accepts and responds to connections on both local and LAN IPs, as well as an optional external/WAN ip defined in uox.ini tag EXTERNALIP, with server name defined by the existing SERVERNAME tag in the ini (punt)
	Following changes made to ensure compatable with some of my other projects
		Switched over to ConfigOS.h from Config.h
		UOX_PLATFORM to PLATFORM (and the corresponding platform types)
	Replaced NULL with nullptr
	Fixed an issue with how UOX3 lists out IP addresses it's actively listening to (punt)
	Some fixes to IP4Address code and output to console of which type of IP being listened (punt)
	Added cEffects::SpawnBloodEffect( UI08 worldNum, UI16 instanceID, UI16 bloodColour, BloodTypes bloodType ), which can be called upon to create blood splatter effects for things like death, bleeding, combat hits, etc.
	Added random blood effects that spawn when a character dies, and decays according to new ini setting
	Added new UOX.INI settings under [timers] to define how long blood effects take to decay:
		BLOODDECAYTIMER=3 			// Smaller blood effects spawned during combat, defaults to 3 seconds
		BLOODDECAYCORPSETIMER=450 	// Larger blood effects spawned upon death, defaults to half the duration of the default corpse decay timer
	Changed default value of MSGREDISPLAYTIME in [tracking] section of UOX.INI from 30 to 3, so tracking arrow will actually follow the target when it moves (every 3 seconds)
	Fixed an issue with the Tracking skill where attempting to left-click on the tracking arrow would cause client to freeze up
	Fixed an issue with the Tracking skill where right-clicking tracking arrow to dismiss it would not always work, especially if target had been killed/deleted
	Fixed an issue with the Tracking skill where the tracking arrow would not be automatically dismissed if the tracked target was killed/deleted
	Fixed an issue that prevented clients in 6.0.5 - 6.0.14.1 range from connecting even though CLIENTSUPPORT6050 was enabled in ini
	Fixed an issue where client 6.0.14.2 was being mis-classified as a T2A client, and not the first of the SA clients as it should be
	Changed how Race damage modifier is applied to damage dealt in combat - it's now a direct percentage bonus (or penalty) applied to the base damage dealt
	Updated default item decay timer from 300s to 1800s (30 minutes)
	Updated default corpse decay timer from 900s to 420s (7 minutes)
	Updated default blood decay timer for corpses from 450s to 210s (3.5 minutes)
	Added new UOX.INI setting that determines decay timer for NPC corpses (previously used regular decay timer):
		NPCCORPSEDECAYTIMER=420
	Updated onDecay JS event to support triggering in global script
	Fixed an issue that snuck in with regards to fetching server setting for BLOODEFFECTCHANCE in JS engine
	Fixed a potential server crash issue with OnUnequipAttempt JS event
	Added additional parameter to onCombatDamageCalc JS event - hitLoc, which contains the hit location calculated by code for an attack. New syntax:
		onCombatDamageCalc( pAttacker, pDefender, fightSkill, hitLoc )
	Moved CalculateHitLoc() and DoHitMessage() out of CHandleCombat::calcDamage(), so these can still happen if JS scripts override damage calculations using onCombatDamageCalc event
	Hairs/Beards inside corpse containers now not movable, even if displayed in client for some reason
	Fixed an error introduced with previous commit that caused some issues with the handling of items upon player death/resurrection
	Fixed an error where items that had AR/resistances with values lower than 10 would lose those values after a restart (for instance wooden buckler)
	Updated Character JS Method .Follow() to allow optional null parameter to clear follow target for an NPC
	Added new Character JS Method .Dupe(), exposing code functionality to duplicate a character and returning the new character object to scripts. Example:
		var newChar = myChar.Dupe()
	Removed old and outdated UOG response code from network.cpp, along with UOXMONITOR response (an old tool no longer found in the wild)
	Extended packet overloading to include packets received on first connection, to allow custom responses to things like UOG server poll and other early incoming packets
	Adjusted code that spawns blood effects when taking damage to only happen for damage values higher than 1% of max health, or 1 (whichever is higher)
	Adjusted code that prevents stamina regen from taking place if a character is thirsty to allow generating up to 25% of max stamina, to prevent characters from being unable to move due to thirst!
	Added new settings in uox.ini to enable/disable the hard-coded hunger and thirst systems, with thirst system being disabled by default:
		HUNGERENABLED=1 // defaults to 1. Affects hunger of players, tamed pets, animal AI
		THIRSTENABLED=0 // defaults to 0. Affects thirst of players, tamed pets, animal AI
	Responses to UOG/CUO server poll requests are now enabled in uox.ini by default
	Fixed an issue with CChar::RemoveAllObjectsFromSight(), which failed to remove nearby multis from sight, leading to ghost images when changing worlds/instances
	Added check for other multis when sailing - boats will now collide with other boats!
	Added check for dynamic items when sailing - boats will now collide with blocking objects
	Added "wrapping" support for maps 0 and 1 when sailing, meaning a ship can sail around the world in both N/S and E/W directions.
	Added new [magic] section in uox.ini with the following settings:
		TRAVELSPELLSFROMBOATKEYS=1 		// Toggle being able to travel via Recall and Gate spells directly to a boat via its key
		TRAVELSPELLSWHILEOVERWEIGHT=0 	// Toggle being able to travel via Recall and Gate spells when overweight
		MARKRUNESINMULTIS=1 			// Toggle being able to mark runes while inside multis. If enabled, runes marked inside multis will be associated with the multi in question, rather than a specific set of coordinates. If multi no longer exists, travelling to it via Recall or Gate will be impossible
		TRAVELSPELLSBETWEENWORLD=0 		// Toggle being able to travel via Recall and Gate spells from one facet to another
		TRAVELSPELLSWHILEAGGRESSOR=0	// Toggle being able to travel via Recall and Gate spells when marked as an aggressor (if attacked an innocent first, or if criminal)
	Fixed an exception that would only rear its head when running UOX3 in debug mode, by adding new function void CBaseObject::RemoveFromRefreshQueue(), which when called from the end of the Cleanup() process for an object will ensure it's removed from the refreshQueue (thanks giwo!)
	Fixed several issues with the regional spawning system:
		NPCs would quite often get created, only to be deleted shortly after because the system failed to find a valid spawn location. This part of the system has now been rewritten to look for a valid spawn location before actually spawning the NPC, to avoid unnecessary creation/deletion of characters
		Spawn system would not continue looking for a valid spawn location past the first failure (when it was supposed to make 100 attempts before giving up)
		Spawn system would not look for valid water tiles for ocean-based/amphibian creatures if valid land tiles could not be found. As a result, amphibian creatures that could have spawned on either land or water would only ever spawn on land.
		DoesMapBlock() function checked for TF_BLOCKING tile flag before it checked if waterwalking was allowed and if tile had TF_WET flag. As a result, no purely ocean-based creatures would spawn at all because no valid spawn locations could ever be found
	Fixed an issue with JS Function DeleteFile(), which would stop calling script from working if no file was found for deletion. Could break demolishing of houses, amongst other things
	Fixed an issue with DoSEErrorMessage() function that prevented JS function error messages from being displayed in UOX3 console if message size was below 512
	Fixed a bug that allowed players to place items on the same slot of walls when using a client that doesn't automatically restrict this
	When dropping items, UOX3 will now look for a valid surface to drop them on, and move the item to said valid surface if applicable
	Fixed an issue with loading of MultiCollections.uop where max boundaries of each multi was not set on load, preventing features that relied on finding corners of building from working (like automatic ban location detection for houses)
	Added new function in mapstuff.cpp to check flags on dynamic items, and exposed it as a JS Function with same name and parameters:
		CheckDynamicFlag( SI16 x, SI16 y, SI08 oldz, UI08 worldNumber, UI16 instanceID, TileFlags toCheck );
	Fixed an issue where items were not always properly added to/removed from map regions when picked up or dropped
	Added new helper function in dist.cpp to find 3D distance between two points:
		getDist3D( point a, point b )
	Added JS Function - DistanceBetween() - to find distance between two sets of coordinates, or two objects:
		DistanceBetween( x1, y1, x2, y2 )
		DistanceBetween( x1, y1, z1, x2, y2, z2 )
		DistanceBetween( sourceObject, targObject )
		DistanceBetween( sourceObject, targObject, checkZ )
	Added Item JS Method - GetTileName() - to get name of an item directly from tiledata
	Added new UOX.INI setting that defines the lower limit for when a purchase will withdraw money from bank instead of backpack:
		BANKBUYTHRESHOLD=2000
	Split the UOX.INI setting CONSOLELOG into three parts, to enable/disable different forms of logging:
		CONSOLELOG=1/0 	// Toggles logging of console messages, warnings and errors
		NETWORKLOG=1/0 	// Toggles logging of network traffic
		SPEECHLOG=1/0 	// Toggles logging of player/staff speech
	Exposed crafting entries to JS engine, along with associated properties from the crafting DFNs:
		New JS Object types
			CreateEntries	// Global JS object containing all item entries loaded from create DFNs
			CreateEntry		// A specific create entry retrieved from global object. Example:
				var createEntry = CreateEntries[7] // Fetches item entry #7 from create DFNs
		New CreateEntry JS Properties
			id			// itemID of item to craft
			name		// name of item entry from create DFNs
			addItem 	// section header of item to craft from item DFNs
			colour		// colour of crafted item
			sound		// sound played when crafting item
			minRank		// minimum rank value used by rank system to provide variable stats to crafted items
			maxRank		// maximum rank value used by rank system to provide variable stats to crafted items
			delay		// delay in milliseconds for crafting to finish
			spell		// spell ID primarily used when inscribing magic scrolls
			resources	// list of resources needed to craft item.
				resources[n][0] // amount of resource needed
				resources[n][1] // resource colour required
				resources[n][2] // list of IDs accepted as resource material
			skills		// list of skills requirements to craft item
				skills[n][0]	// skillNumber of skill required to craft item
				skills[n][1]	// minimum skill at which player will always fail to craft item
				skills[n][2]	// maximum skill at which player will always succeed to craft item
			avgMinSkill	// average minimum skill required to smelt item
			avgMaxSkill	// average maximum skill required to smelt item
	Fixed a bug with tracking menu that could cause UOX3 to crash when cancelling/closing the menu
	Added new UOX.INI settings under [speedup] section to control global speed of mounted NPCs:
		NPCMOUNTEDWALKINGSPEED=0.3
		NPCMOUNTEDRUNNINGSPEED=0.12
		NPCMOUNTEDFLEEINGSPEED=0.2
	Added new NPC DFN tags to allow overriding global mounted movement speeds:
		FLEEINGSPEEDMOUNTED=#
		RUNNINGSPEEDMOUNTED=#
		WALKINGSPEEDMOUNTED=#
	Corpse parts carved from human corpses will now have weight, and decay - as they're added as script items instead of base items
	Fixed some memory leaks in CMultiObj::GetBuildTimestamp(), CMultiObj::GetTradeTimestamp(), CWorldMain::SaveNewWorld() and cEffects::tempeffect()
	Misc smaller code cleanup
	Fixed an issue with ItemID skill where using the skill on a crafted item would not output a result if creator of item was unknown
	Command logs now also include any parameters used with a command
	Fixed an issue where messages used with CustomTarget JS function would not get truncated properly if longer than the allowed maximum length
	Fixed some instances of potential buffer overrun and/or out-of-bounds memory access
	Fixed some potential null pointer dereferences
	Fixed a couple instances of missing breaks in switch cases
	Added [[maybe_unused]] attributes in places where return values are intentionally unused
	Added [[fallthrough]] attributes in places where switch case fallthroughs are intentional
	Fixed some issues with converting account data from older (pre 0.99) versions of UOX3
	Misc minor code cleanup
	UOX3 now sends the appropriate packets (0x85 and/or 0x86) in response to client requests to delete a character from the char selection screen
	Fixed an issue with fetching create entries in JS - was incorrectly limited by number of registered spells!
	More code cleanup
	Updated how UOX3 handles more, morex, morey and morez properties:
		DFN tags for these properties can now handle data in multiple formats. Example:
			MORE=1285, MORE=0 0 5 5, MORE=0x00 0x00 0x05 0x05, MORE=0x00000505
		JS command 'set more/morex/morey/morez now accepts any of the above formats
		JS command 'get will now display both the decimal value for these properties, as well as the hex one
		JS command 'tweak will now display hex value for these properties in a tooltip
	Fixed an issue with target-based spells (like Magic Lock/Unlock, Magic Trap/Untrap, Telekinesis) that used the inverse result of a distance check to determine if players could cast such a spell at an item
	Fixed an issue where players could keep spawn containers open on screen to access items respawning inside without having to unlock/untrap container again after a respawn
	Locked containers (and spawn containers) will now show [Locked] in the item tooltip
	Spawn containers will now be re-trapped when new items spawn, if they were trapped originally. To trap a container:
		MOREZ=0x01 0x32 0x00 0x00 // 0x01 marks container as trapped, 0x32 says "deal 50 damage" when trap is set off
	Fixed trapped spawn containers not dealing damage when trap is set off due to magic damage function in source requiring a valid attacker (now no longer does)
	Updated source and scripts to use cliloc id 1050045 for custom tooltips rather than 1114778, as 1050045 is available in all client versions that support tooltips
	Added new JS Function to force-trigger a trapped item, as if the player tried to open a trapped container:
		TriggerTrap( pChar, iTrap )
	Fixed a server crash related to casting of spells
	Fixed some issues with Line-of-Sight checks related to items under/above ground, LoS checks between different floors of buildings, etc.
	Updated handling of skill-training keywords to be based on language-independent keyword IDs rather than trying to match player-input text to specific skill-names
	Added new NPC AI type to source - AI_STABLEMASTER (9) - and assigned this to animal trainers. This is used to identify this type of NPCs for the purpose of displaying relevant context menus
	Removed remaining hard-coded banking functionality - all handled by script anyway
	Added new context menu option for NPC bankers - Open Bankbox
	Updated code handling of context menus to only show context menus when relevant:
		Open Paperdoll - Shows for all characters with a paperdoll
		Open Backpack - Shows for player's character, pack animals and hirelings
		Open Bankbox - Shows for banker NPCs (if within 8 tiles)
		Buy/Sell - Shows for vendor NPCs (if within 8 tiles, and if they have anything for sale/are buying anything)
	Added new context menu entries for pets, which can be used if player is within 12 tiles of pet:
		Command: Kill
		Command: Stop
		Command: Follow
		Command: Stay
		Command: Guard
		Add Friend
		Remove Friend
		Transfer
		Release
	Added new context menu entries for stablemasters/animal trainers:
		Claim All Pets
		Stable Pet
	Added new context menu entries for Escort Quest NPCs
		Ask Destination (if within 3 tiles)
		Accept Escort (if within 3 tiles)
		Abandon Escort
	Added new context menus for NPCs that can teach skills to players (limited to max 10 per NPC)
		Train [skillName]
	Added new NPC DFN tag used by code to detect hireling NPCs for the purpose of displaying context menus:
		HIRELING 	// No additional value/data needed for tag
	Added new context menu entries for Hireling NPCs, in addition to the ones for regular pets:
		Hire 	// Can be used within 3 steps of the hireling, who will respond with cost to hire them
		Dismiss // Replaces the "release" command for pets, will dismiss the hireling
	Added new UOX ini setting to enable/disable context menus
		CONTEXTMENUS=1/0 (defaults to 1)
	Added new Item JS Method to check if an item's ID is on a specified food list
		.IsOnFoodList( foodList )	// Returns true/false if item's ID is on specified foodList
	Added new Character JS Properties
		.isGuarded 		// Gets/Sets whether character is guarded by a pet/hireling
		.guarding 		// Gets/Sets the object (if any) being guarded by a pet/hireling
	Fixed multiple issues with health bars, flagging and character highlighting
	Added some crash protection for invalid data used with CUSTOMINTTAG and CUSTOMSTRINGTAG DFN tags for Items, NPCs and Multis
	Fixed an issue which prevented hard-coded checks from running when using items
	Added new global js object (Timer) to make the use of character timers in JS more robust, with properties matching timer names from enum in source.
		Properties:
			.TIMEOUT 		// Time until next attack can be done in combat
			.INVIS			// Time until invisible character becomes visible
			.HUNGER			// Time until character grows more hungry
			.THIRST			// Time until character grows more thirsty
			.POISONTIME		// Time until next tick of poison damage
			.POISONTEXT		// Time until next message about suffering from poison
			.POISONWEAROFF	// Time until poison wears off
			.SPELLTIME		// Time until spell cast is completed. Can be set to 0 to interrupt
			.ANTISPAM		// Time until next speech message can be sent (for anti spam purposes)
			.CRIMFLAG		// Time until criminal flag runs out
			.MURDERRATE		// Time until next murder count decay
			.PEACETIMER		// Time until character can re-enter combat after being affected by peacemaking
			.FLYINGTOGGLE	// Time until next time flying ability can be toggled for gargoyles
			.MOVETIME		// Time until NPC can move again
			.SPATIMER		// Time until next time NPC can cast a spell
			.SUMMONTIME		// Time until a summoned NPC will vanish
			.EVADETIME		// Time until an NPC will exit evade state
			.LOGOUT			// Time it takes for a player char to vanish after logout
		Examples of use:
			var hungerTimer = myChar.GetTimer( Timer.HUNGER )
			myChar.SetTimer( Timer.HUNGER, 15000 )
	Added new Character JS Methods to add, remove and list friends of a pet/hireling:
		.AddFriend( playerToAdd )		// Adds player to friend list
		.RemoveFriend( playerToRemove )	// Removes player from friend list
		.GetFriendList()				// Gets list of friends
		.ClearFriendList()				// Clears list of friends
	Added new Character JS Method to fetch a player character's list of pets/followers
		.GetPetList()		// Gets list of pets/followers
	Added new persistent NPC property to keep track of a pet's previous owners, whether those tamed the pet or had it transferred to them. Every time a pet is tamed, or is transferred to a new owner, this list is updated:
		GenericList< CChar * >	petOwnerList
	Added new Character JS Method to check if a player is on a pet's owner list as a previous owner:
		.HasBeenOwner( mChar )
	Previous owners of a pet can re-tame it with guaranteed chance of success
	Updated JS Method Refresh() to be usable with both items or characters, to send updated state of object to nearby players
	Added character tooltip [Guarded] for characters being guarded by a pet/hireling
	Pets/hirelings that are transferred will now immediately start following their new master instead of wandering freely
	Pets/hirelings can no longer be transferred between players as long as either party is flagged as a criminal
	Pets/hirelings can no longer be transferred to dead players
	Pets/hirelings can no longer be transferred to NPCs
	Summoned creatures can no longer be transferred to other players
	Summoned creatures can no longer have friends
	Friend lists of pets/hirelings are now cleared when the pet/hireling is transferred to another player
	Added new UOX.INI settings to control how many pets players can have active:
		MAXCONTROLSLOTS=0 	// Maximum number of pet control slots available to player. Disabled if 0
		MAXFOLLOWERS=5 		// Maximum pets/followers a player can have active at the same time. Used if control slots are disabled
		MAXPETOWNERS=5 		// Maximum number of different owners a pet can have over its lifetime before it becomes impossible to retame
	Added new NPC property and NPC DFN tag that keeps track of how many pet control slots an NPC would take up if owned by a player:
		UI08 controlSlots 	// source property
		CONTROLSLOTS=# 		// DFN tag
	Added new Character JS properties:
		.ownerCount		// Get the total number of owners a pet/hireling has had, based on NPC's petOwnerList
		.controlSlots 	// Get/Set number of pet control slots an NPC will occupy
		.controlSlotsUsed // Get/Set the number of control slots used by a player
	Increased the max distance from player that onSpeech JS event will trigger from 7 to 12
	Updated how "all attack" and "all follow" commands for pets are handled. Now loops through all pets owned by character and executes command for each eligible pet
	Fixed an issue where NPCs could follow characters in different worlds/instances than them selves
	Updated default max amount of items that can be sold to NPC vendors from 5 to 250
	Guards can no longer train players in skills
	Pets now inherit the karma of their owners, but revert to their original karma upon release
	Pets and hirelings will no longer follow the ghosts of their dead owners, but stay to guard their corpse
	Added optional 9th parameter for JS Function CreateDFNItem to specify a color for item created. This comes before the other optional parameters - worldNumber and instanceID (which are only used if character is NULL):
		CreateDFNItem( mSock, mChar, sectionName, inPack, iAmount, itemType, iColor, worldNumber, instanceID )
	Added ID of Giant Beetle to various pack animal checks
	Pack animals will now drop any newbie/blessed items stored in their packs upon death
	Added new NPC properties to track pet loyalty, and exposed these as Character JS properties, and NPC DFN tags:
		JS Properties
			.maxLoyalty 	// Defaults to 100
			.loyalty 		// Starts at 25
		DFN Tags
			MAXLOYALTY=# 	// Defaults to 100
			LOYALTY=# 		// Starts at 25
	Updated TriggerEvent JS function to support return values (int, bool, string, object) from called script
	Added new UOX.INI settings under [pets and hirelings] section related to pet control and loyalty:
		CHECKPETCONTROLDIFFICULTY=1 	// Enable/Disable pet control difficulty system
		PETLOYALTYGAINONSUCCESS=1 		// Amount of pet loyalty gained on successful pet command use
		PETLOYALTYLOSSONFAILURE=3 		// Amount of pet loyalty lost on failed pet command use
		PETLOYALTYRATE=900 				// Amount of seconds between each time pet loyalty is automatically reduced by 1. Takes 25 hours to deplete completely from max
	Added new persistent NPC property that keeps track of the difficulty of taming and controlling a pet, and exposed it as a Character JS property:
		.orneriness
	Every time a tamed pet is released or goes wild, its "orneriness" increases, making it more difficult for other players to tame, and more difficult for anyone to control.
	Updated CBasePetResponse::canControlPet() function to use pet control difficulty system if enabled, which checks player's animal taming/animal lore skill vs a pet's "orneriness" to determine chance of pet accepting a given pet command
		On successful use of pet command, increases pet loyalty by value defined in PETLOYALTYGAINONSUCCESS ini setting
		On failed use of pet command, decreases pet loyalty by value defined in PETLOYALTYLOSSONFAILURE ini setting
	Added new Character JS Method to calculate chance of a player successfully controlling the pet:
		.CalculateControlChance( mChar )	// Returns value between 0 and 1000 indicating chance of success
	Feeding a pet will now restore its loyalty to maximum
	Pets will now lose loyalty on hunger checks when at maximum hunger
	Pets that are maximum hungry will now only have a chance to go wild if loyalty has dropped to zero
	Added secure pet trading. Players who trade pets will now see a pet transfer deed appear in a secure trade window with the name and type of creature, and upon completion of the trade the associated pet will be instantly transferred to the other player
	Updated code to use dictionaries for all system messages
	Fixed incorrect spelling for UOX.INI setting HIDEW(H)ILEMOUNTED and updated hiding skill (js/skill/hiding.js) to actually allow/disallow hiding while mounted based on this setting
	Added new Character JS Method to make it easier to make one NPC initiate combat with another:
		.InitiateCombat( targetChar )	// Character attempts to initiate combat with target character
	Updated parrying portion of combat code to be in line with Pub15/pre-AoS parrying mechanics. High AR shields now absorb more damage on a successful parry, while low AR shields have a higher chance of parrying. Shields are also now more effective against archery attacks (full absorption potential) than melee attacks (half absorption potential).
	Updated combat damage calculations to be in line with Pub15/pre-AoS damage calculations
	Adjusted default value of COMBATNPCDAMAGERATE ini setting (damage divisor when target is a player) from 2 to 1 to account for these changes.
	Removed dictionary.UNK, and made dictionary.ZRO the default dictionary used for all unsupported languages
	Added dictionary support for additional languages: Portuguese, Italian, Czech
	Updated default dictionaries for the following languages: English, French
	Added new UOX.INI setting to allow specifying a default dictionary language for server, which if set will force that language for all dictionary messages, regardless of client settings:
		SERVERLANGUAGE=0 	// Set default server dictionary language. Supported languages: 0 - None/language used by each client, 1 - English, 2 - German, 3 - Spanish, 4 - French, 5 - Portuguese, 6 - Italian, 7 - Czech
	Added new function in combat.cpp - AdjustArmorClassDamage() - which adjusts the damage dealt in combat based on whether armour class (AC DFN tag or .ac JS property) of weapon and armour equipped on hit location of target match up. A weapon with armour class 1 would essentially be doubly effective against armour of armour class 1. Allows setting up things like piercing weapons being better against some armor types than mace weapons, etc.
	Added new UOX.INI setting under [combat] to enable/disable double damage from armour class bonuses:
		ARMORCLASSDAMAGEBONUS=0/1 //defaults to 0)
	Fixed a bug with PACKITEM tag which seeped in with previous commit, which could cause a server crash due to incorrect handling of the tag data
	Blank recall runes will no longer have a tooltip with the world the runes were marked in
	A west-facing rune with item ID 0x1f17 has been added to represent blank, unmarked runes. This is now the rune that vendors sell, and which can be added through the magic-portion of the 'add menu. Upon being marked by a Mark spell, the rune will change ID to the north-facing one with ID 0x1f14. This is to accommodate the Inscription crafting skill, which will use the blank 0x1f17 runes as a crafting resource.
	Added new item type - IT_RUNEBOOK (49)
	Newbie/blessed items will now have [Blessed] displayed in the item tooltip
	Ghosts can no longer "speedhack" by spamming the tab button to go in and out of combat rapidly
	Fixed an issue with NPC titles in paperdolls
	Added new Character JS property to detect if a character is running, which also accounts for sprinting while mounted, or fast flying for characters who can fly (Xuri):
		.isRunning 		// Returns true if character is running, false if they're walking
		Added Fish as another resource type (in addition to logs and ore) for UOX3 to keep track of and respawn based on resource areas
	Added new UOX.INI settings to control the availability of and respawn times for fish:
		FISHPERAREA=10 			// Maximum number of fish in a given resource area
		FISHRESPAWNTIMER=600 	// Amount of time it takes for 1 single fish to respawn in a resource area
		FISHRESPAWNAREA=10 		// Number of fish-areas to split the world into
	Exposed the fish resource type to Resource JS functions, which now take "FISH" as an additional resource type on top of "LOGS" and "ORE:
		ResourceTime( resourceType ) 		// Return respawn timer for specified resource type
		ResourceTime( resourceType, int ) 	// Set respawn timer (in seconds) for specified resource type
		ResourceAmount( resourceType ) 		// Get max amount of resources per resource area for specified resource type
		ResourceAmount( resourceType, int ) // Set max amount of resources per resource area for specified resource type
		ResourceArea( resourceType ) 		// Get number of resource areas that world has been split into for specified resource type
		ResourceArea( resourceType, int ) 	// Set number of resource areas to split the world into for specified resource type
	Updated Resource JS properties with properties to get current amount of fish in a region, and the current respawn timer for fish:
		.fishAmount		// Returns/Sets the amount of fish in given resource object
		.fishTime		// Returns/Sets the respawn timer of fish in given resource object
	Added support for new Skills DFN tag:
		SKILLDELAY=# 	// Delay in seconds before another skill can be used after using this skill. Overrides global delay from UOX.INI
	Updated skill cSkills::SkillUse() to use skill-specific skill delays if set for a given skill, or global delay from ini if not. Also added a check to see if skill delay timer has been modified by onSkill JS event before attempting to set a default timer
	Updated skill delays to better match ~pub15 era:
		Reduced global SKILLDELAY setting in UOX.INI from 2 to 1 second
		Detecting Hidden skill now has a default skill delay of 10 seconds
		Herding skill now has a default skill delay of 10 seconds
		Hiding skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for trying to hide while in combat or for successfully hiding
		Meditation skill now has a default skill delay of 10 seconds, with shorter delays (global skill delay) for failing due to hands being occupied or already being at max mana
		Peacemaking skill now has a default skill delay of 10 seconds for failed skill checks, and 5 seconds delay for successful ones
		Poisoning skill now has a default skill delay of 10 seconds
		Provocation skill now has a default skill delay of 10 seconds
		Remove Trap skill now has a default skill delay of 10 seconds
		Stealing skill now has a default skill delay of 10 seconds
		Stealth skill now has a default skill delay of 10 seconds
		Tracking skill now has a default skill delay of 10 seconds
		Veterinary skill now has a default skill delay of 10 seconds
	Fixed an issue with global JS Timer object that would reference the wrong timerIDs
	Extended global JS timer object to include timers from socket as well (marked with SOCK_ prefix):
		.SOCK_SKILLDELAY	// Delay before the next time player can use another skill
		.SOCK_OBJDELAY		// Delay before next time player can use another object
		.SOCK_SPIRITSPEAK 	// Timer that tracks remaining duration of player's Spirit Speak
		.SOCK_TRACKING		// Timer that tracks remaining duration for player's Tracking skill
		.SOCK_FISHING		// Timer that tracks remaining duration for player's Fishing skill
		.SOCK_MUTETIME 		// Timer that tracks remaining duration a player remains muted
		.SOCK_TRACKINGDISPLAY 	// Timer that tracks interval between each time tracking display is updated
	Updated Persecution ability for player ghosts to use the skill delay of the Spirit Speak skill, if set
	Updated Persecution ability to base mana damage primarily on player's Spirit Speak skill rather than their Intelligence
	In order to cut down on the amount of messages sent from server to players trying to spam-use objects/skills, UOX3 now only sends a maximum of one message for object use delay and one message for skill use delay while the delay timers for these are in effect. This resets on the next successful use of an object or skill. This is tracked via bools in cSocket class:
		bool objDelayMsgShown
		bool skillDelayMsgShown
	Converted DELAY tag in spells.dfn to use seconds (with decimals) instead of tenths of a second, which was not precise enough. This controls the cast time of spells. What would previously say DELAY=10 (10/10ths of a second) now says DELAY=1.0 (1 second)
	Added support for new Spells DFN tag to control delay until damage takes place after casting a spell, replacing UOX.INI setting COMBATEXPLODEDELAY, which is no longer used:
		DAMAGEDELAY=# 		// Delay in seconds (decimal) until a direct damage spell deals its damage
	Added support for a new Spells DFN tag to control cast recovery time, during which additional spells cannot be cast:
		RECOVERYDELAY=# 	// Delay in seconds (decimal) until player can cast another spell
	Added new setting in UOX.INI to control whether player spellcasting gets interrupted upon equipping/picking up items:
		ITEMSINTERRUPTCASTING=1 	// If enabled, spellcasting gets interrupted by equipping/picking up items. Defaults to enabled.
	Reagent checks and skill-check now take place AFTER the spellcast animation, not before!
	Players can no longer cast spells while holding items on the cursor
	Fixed Magic Trap, Magic Untrap, Magic Lock and Magic Unlock not being usable on containers in one's own backpack
	Fixed an issue that caused Magic Trap to deal between 50 to 100 damage to the player. New damage: 5 to 10, depending on Magery skill
	Fixed an issue where Magic Untrap spell would completely remove traps from spawn containers instead of disable them
	Fixed an issue where Telekinesis spell would not set off traps on containers properly
	Added additional FX for Teleport spell played at player's original location before the teleport took place
	Fixed a bug where creatures summoned with the Summon Creature spell were not dispellable
	Fixed an issue where the Reveal spell would not reveal players hidden using the Hiding skill
	Dispel and Mass Dispel spells are no longer guaranteed to succeed at dispelling summoned creatures. Instead, the chance to dispel is based on the following simple formula, with dispelChance capped at 95% to always leave some chance for a creature to resist a dispel:
		dispelChance = ( 50 - ( targetResistSkill - casterMagerySkill )) / 1.5
			The targetResistSkill is based on the highest value of the summoned creature's spell resistance skill and the spell resistance skill of its summoner
	Fixed an issue where the Create Food spell attempted to create an invalid item
	Fixed issue where code that checked for valid drop locations for items didn't allow negative z values (Dragon Slayer)
	Fixed issue where players could drop items on blocking map tiles like water or mountains (Dragon Slayer)
	Fixed issue where some JS functions like CheckStaticFlag, CheckDynamicFlag, DoesStaticBlock, DoesDynamicBlock and DoesMapBlock would not work correctly when passed negative Z values
	Fixed issue where context menu were listing skills to train from NPCs based on effective skill rather than base skill
	Fixed issue where NPCs would offer skills for training even if those skills were not above the minimum 60 skillpoints
	Updated clilocID used for Gump JS Method AddToolTip - as well as for some item/character tooltip data - from 1050045 to 1042971 for improved client compatibility
	Human/Elf/Gargoyle NPCs with spellcasting capabilities will now play a casting animation and briefly stop moving when they cast spells
	Updated NPC spellcasting code to help NPCs make a bit better choices of what spells to cast during combat. Now they take their own health percentage into account, and cast more offensive spells when at near full health vs more defensive spells as their health drops
	Fixed an issue where Hirelings wouldn't always immediately start following their new owners
	Fixed a bug where the Earthquake spell could incorrectly add NPC characters marked for deletion to the refresh queue
	Added support for an optional third parameter for Character/Socket JS Method .CustomTarget() to allow highlighting targeting cursors as neutral (0, default aura), harmful (1, red aura), helpful (2, blue aura). A value of 3 will cancel the currently active targeting cursor. New syntax:
		myChar/mySock.CustomTarget( targetID, txtToSay, cursorType ) 	// supported cursorTypes: 0 = neutral, 1 = harmful, 2 = helpful, 3 = cancel current target cursor
	Various target cursors triggered by code (like hard-coded spells, some pet commands) also make use of these cursorTypes
	Fixed a bug that caused segmentation fault on Linux, related to item tooltips and socket language
	Fixed an issue where AF_ALL option in [disabled assistant features] of UOX.INI would override (duh) the setting for all the other assistant features, essentially leaving the shard admin with only two options (all features disabled, or none). The AF_ALL option has now been removed entirely.
	Extended support for negotiating with assistant tools to disable these additional assistant tool features (from UOS) via the [disabled assistant features] section of UOX.INI:
		AF_AUTOBANDAGE=0/1 			// Automatically apply bandages when low on health
		AF_ENEMYTARGETSHARE=0/1 	// Share enemy target in party/guild/alliance chat
		AF_FILTERSEASON=0/1 		// Force client to display a fixed season
		AF_SPELLTARGETSHARE=0/1 	// Share spell target in party/guild/alliance chat
		AF_HUMANOIDHEALTHCHECKS=0/1 // Check health of nearby humanoid characters?
		AF_SPEECHJOURNALCHECKS=0/1 	// Check journal for specific messages sent from server
	Applied a potential fix for an issue that could cause players to get disconnected immediately without delay before assistant tool had a chance to respond to feature negotiation request
	Addressed a couple of minor code issues that caused some warnings
	Extended Character JS Method DoAction() to support two additional parameters - frameCount and playBackwards - which define the length of the animation (defaults to 7) and whether the animation should be played backwards (defaults to false). Note that this only works for old-style animations, and thus is not available for Gargoyle characters. Updated method syntax:
		.DoAction( actionID ) // Old animation packet
		.DoAction( actionID, null, frameCount) // Old animation packet with frameCount
		.DoAction( actionID, null, frameCount, frameDelay ) // Old animation packet with frameCount, frameDelay
		.DoAction( actionID, null, frameCount, frameDelay, playBackwards) // Old animation packet with frameCount, frameDelay, playBackwards
		.DoAction( actionID, subActionID ) // New animation packet
	Renamed ORERESPAWNAREA ini setting to RESOURCEAREASIZE (it's also used for ore, and logs) and reduced it from 10 to 8 to divide each world into 8x8 sized resource areas
	Fixed a bug where the new fish resource type was not getting regenerated or saved properly
	Added INSTANCEID support to INSTALOG section of regions.dfn, and added default WORLD and INSTANCEID entries to all areas
	Fixed a bug in handling of the LOOT tag for NPCs where server would crash if a number was specified behind the item/itemlist to add as loot
	The DFN tags PACKITEM and LOOT are now handled similarly when used for NPCs and Items respectively. PACKITEM can be used for adding items with specific IDs, or "list objects" from itemlists.dfn, while LOOT can be used to add items from lootlists.dfn. One big difference between these is that if the optional amount parameter is specified for either tag when used with itemlists/lootlists (PACKITEM=listObject,amount vs LOOT=lootlist,amount), PACKITEM will add the specified amount of the specified/randomly chosen item, while LOOT will add X amount of random items.
	Updated implementation of ITEMLISTs and LOOTLISTs to support an optional weighting system, which can be used to adjust the probability of some items being chosen from these lists over other items. In the below example, specialfishingnet has a weight of 10, while the blank entry has a weight of 90, making it 9 times more likely for the blank entry to be chosen than the specialfishingnet! Note that higher weighted items should be sorted first for this to be accurate:
		[LOOTLIST shipwreck_treasure_special]
		{
		90|blank
		10|specialfishingnet
		}
	Extended functionality of JS Function DoMovingEffect() to allow a set of coordinates as source location, without having to specify a character as either the source or target of the effect
	Fixed an issue with sea creatures being unable to pathfind in shallow water due to underwater land tiles being treated as blocking
	Fixed an issue where the color of NPC corpse names would not always match up with the NPC's flag color
	Fixed a bug where the baseRange and maxRange properties of ranged weapons would not get saved to world files. These values are now saved in the format of RANGE=baseRange,maxRange
	Changed the way items are added to containers, to ensure that the order in which the items are displayed to the player always reflects the order in which they were added; now the most recent item added/moved in a container will always be rendered on top of older items.
	Made adjustments to how items are randomly added to containers; should use more of a given container gump's available area now
	Exposed Item property to JS engine, which contains serial of the creator of an item:
		.creator 	// contains serial of the creator of an item. If set, maker's marks will show up in the item's tooltip
	Fixed an issue where JS engine would lose track of script context if one script used CreateDFNItem() or SpawnNPC() functions and the new objects had events that triggered upon creation. UOX3 now restores the original script context at the tail end of these functions.
	Added new JS Event to allow inserting custom tooltip text for objects, which will be displayed in tooltips right after the object name. Any text returned from the event will be displayed, and the text can make use of the same HTML tags as gumps to make changes to color, font, etc.
		onTooltip( myObj ) 		// Triggers for objects right before the object's tooltip properties are sent to client
	Fixed an issue with NPC vendors and items bought from players not being properly removed from the vendor's "bought container" when players buy them again
	Fixed an issue with CustomTarget where the target message would not be displayed if the cursorType parameter was provided
	The feature that allows stats like Strength, Dexterity and Intelligence to provide bonuses to skill checks has been turned into a UOX.INI setting, which is disabled by default. The bonuses have also been nerfed; they will no longer contribute more to the success of a skill check than the actual skill being checked!
		STATSAFFECTSKILLCHECKS=0/1 	// If enabled, stats can provide bonuses to skill checks based on the weighting for those stats as setup in dfndata/skills/skills.dfn
	Updated damage tracking code to include the type of damage that was dealt (PHYSICAl vs HEAT vs COLD, etc)
	Updated Character JS Method Damage() to include a new parameter that can specify the type of damage that was dealt to the character. The new parameter must always be included if other optional parameters are used. Note that updates might be required for scripts making use of this method.Updated syntax:
		.Damage( amount )
		.Damage( amount, damageType )
		.Damage( amount, damageType, attacker )
		.Damage( amount, damageType, attacker, doRepsys )
		Supported damageTypes:
			PHYSICAL 	= 1
			LIGHT 		= 2
			RAIN 		= 3
			COLD 		= 4
			HEAT 		= 5
			LIGHTNING 	= 6 // magic damage
			POISON 		= 7
			SNOW 		= 8
	Updated JS Event OnDamage to include an additional parameter that describes the type of damage that was dealt. New syntax:
		onDamage( damaged, attacker, damageValue, damageType )
	Updated JS Event OnSpellTarget to allow rejecting a spell being cast on a target by returning a value of 2 from the script
	Split the character priv flag for magic reflection into a temporary one (one-time magic reflection spell) and a permanent one (innate permanent reflection ability). The temporary effect is put in place by Magic Reflection spell, and is removed after a successful spell reflect. The permanent one is an innate ability of a character and is not removed even after a spell is reflected.
	Added new Character JS property to get/set state of a character's permanent magic reflect ability:
		.permanentMagicReflect 		// 0 = disable, 1 = enable
	Removed an ancient piece of code that prevented corpses from being generated for various elementals and blade spirits on death. This was originally put in place because these creatures had no corpses, and would replace it with a backpack instead, but these creatures now all have corpses in all client versions supported by UOX3
	Fixed a bug where creatures (and humans, if FORCENEWANIMATIONPACKET was disabled in uox.ini) would play animations with wrong frame count, causing the animations to either freeze for a few frames at the end, or get cut off a couple of frames early
	Implemented bonus hit chance for Archery skill, based on mention of such a bonus in Publish 5 patch notes and related UO House of Commons chat. This has been exposed as a UOX.INI setting where this bonus can be tweaked:
		ARCHERYHITBONUS=10 	// Bonus hit chance for Archery skill added to regular hit chance in combat. Defaults to 10%
	Implemented optional extra delay between moving and being able to shoot with ranged weapons in combat (in addition to whatever delay is there due to speed of the ranged weapon). This is exposed as a UOX.INI setting:
		ARCHERYSHOOTDELAY=0.5 // Minimum delay in seconds from a player stops moving until they can start to fire their ranged weapon. Defaults to 0.5s
	Fixed a bug where players who never entered combat mode could fire ranged weapons while moving
	Updated Add-menu with some improvements for usability:
		Menu now directly on the Objects (previously "Shard") tab for quicker access, with a small welcome text and quick-link button for UOX3 docs
		Settings tab contains some (persistent, will be saved with character) options for how the Add-menu behaves, along with a few quick-access buttons to some useful commands. Available options:
			Option to add chosen item at specific location instead of in GM's backpack
			Option to add chosen item repeatedly until cancelled
			Option to automatically reopen Add-menu on last menu that was open when a selection is made
			Option to force decayable state of all added items to either off (doesn't decay), on (decays) or nothing (use item default)
			Option to force movable state of all added items to either off (not movable), on (movable) or nothing (use item default)
		Added a Home button at the bottom of the menu, that takes the user back to the front page of the Add-menu regardless of which menu page they're on
	Updated Character/Socket JS Method SysMessage() with an optional parameter to specify the color used to display the system message. Updated syntax:
		.SysMessage( "Text" ) 									// Display "Text" to user as a system message with default system message color from ini
		.SysMessage( "Text %s %s", txtArg1, txtArg2 ) 			// Display "Text" to player with string arguments injected into text
		.SysMessage( txtColor, "Text" ) 						// Display "Text" to user with a specified color
		.SysMessage( txtColor, "Text %s %s", txtArg1, txtArg2 ) // Combination of text color, text and string arguments
	Fixed a bug where hair/beard items could show up inside corpses
	Fixed a bug where items could sometimes vanish (visually) from containers when bouncing back because player was not able to pick them up
	Fixed a bug where players would be unable to pick up a freely movable item from a locked down container
	Updated handling of item bouncing on pickup to use UOX3 dictionary messages instead of hard-coded client messages
	Added support for new Dictionary language:
		dictionary.POL - Polish (SERVERLANGUAGE=8 in uox.ini, or client language 83 if SERVERLANGUAGE is set to 0)
	Added new Item/Character JS Methods to get/set temporary custom tags which don't persist across worldsaves (or across reconnects, for players):
		.GetTempTag( "tagName" )
		.SetTempTag( "tagName", tagValue )
	When applying HPMAX, STAMINAMAX AND MANAMAX DFN tags to new NPCs, their current HP, STAMINA and MANA properties will now be automatically updated to match
	Fixed a server crash caused by empty speech messages sent from certain clients
	Fixed a bug that prevented teleport locations in Felucca/Trammel from working properly
	Updated calculations in code for duration and damage of existing poison strengths (1 - Lesser, 2 - Normal, 3 - Greater, 4 - Deadly) to match with ~Publish 15 (LBR/pre-AoS), and added another poison strength for monster usage (5 - Lethal)
	The strength of the Poison and Poison Field spells is now based on the average of the caster's Magery and Poisoning skills, the distance from the target (Poison spell only) and the target's Resisting Spells skill. If caster is further away than 2 tiles from target, the poison strength always equals Lesser Poison, otherwise the following rules apply:
		If caster's combined skill is higher than 100.0, poison strength equals Greater Poison, with 5% chance of Deadly Poison (if Poison spell) or Deadly Poison (if Poison Field spell)
		If caster's combined skill is higher than 70.2, poison strength equals Greater Poison
		If caster's combined skill is higher than 30.2, poison strength equals Normal Poison
		If caster's combined skill is 30.2 or lower, poison strength equals Lesser Poison
		If target resists spell, poison strength is reduced by 1 level, unless it's already at the lowest level
	Fixed an issue that would would let players move faster than they should have been allowed to
	Fixed misc issues with Party System:
		Mana and Stamina should now update for Party Members when added to the party, when going in/out of range and when their stats update while in range
		Players who get disconnected or relog should now find themselves back in the same party they were in previously
		Added system messages to inform party members about updates to their party, and to let invited players know they've successfully joined a party (or rejoined, if relogging)
	World saves now operate on the principle of only saving changes done since the last world save. Combined with the fact that NPCs in UOX3 are only active if there are players in the same/neighbouring map regions, shard owners may expect to see a decrease in world save times ranging from ~11% to ~99%, depending on how active and how spread out their player base is. If no changes have taken place since last save, saves are virtually instantaneous!
	Fixed some lines of text in new 'add menu that would display incorrectly in regular UO client
	Fixed bug where player might get stuck as frozen in ghost form and unable to move if dying in the midst of casting a spell
	Fixed two broken timer references in JS: Timer.SPELLRECOVERYTIME and Timer.LOYALTYTIME
	UOX3 console should now show 100% when done saving, regardless of the amount of data it has to save
	Earthquake spell can no longer harm invulnerable characters
	Fixed issue where NPC would evade instead of change to a different nearby target if unable to pathfind to current target
	Damage dealt by Fire Field spell is now determined by BASEDMG tag (defaults to 2, if resisted, half of that) in spells.dfn
	The rate at which the effects of field spells (Fire Field, Poison Field and Paralyze Field) are applied is now determined via the DAMAGEDELAY tag in spells.dfn, which defaults to 1.0 seconds
	Adjusted how updates are sent to clients when TurnToward JS Method is used, to prevent an issue where animations triggered immediately after would not play properly in the client
	Added new system that lets shard admins assign a "network" budget to connected clients, which determines the maximum amount of bytes clients are allowed to send to/receive from server over a period of ten seconds. If a client exceeds these limits three times in the same connected session, they'll receive a temporary ban and get kicked from the server. The following new UOX.INI settings under the [system] section can be used to control this feature:
		MAXCLIENTBYTESIN=25000		// Max bytes client can send to server over 10 seconds
		MAXCLIENTBYTESOUT=100000 	// Max bytes client can receive from server over 10 seconds
		NETTRAFFICTIMEBAN=30 		// Duration (in minutes) of temporary ban for exceeding these limits
	Fixed an issue that prevented GMs from using CSTATS and TWEAK buttons in 'wholist
	Increased MAXBUFFER size for socket operations from 2560 to 4096
	Minor code cleanup
	Finalized implementation of GetTempTag and SetTempTag (Xuri)
	Fixed an issue with DoTempEffect JS function which prevented compilation on macOS (and potentially had unintended consequences)
	Cleaned up a warning in sound.cpp
	Updated onSkillGain, onSkillLoss and onSkillChange JS events:
		Additional parameters now supported by events - skillGainAmount and skillLossAmount
			onSkillGain( player, skillID, skillGainAmount ) 	// skillGainAmount is always positive
			onSkillLoss( player, skillID, skillLossAmount ) 	// skillLossAmount is always positive
			onSkillChange( player, skillID, skillChangeAmount ) // skillChangeAmount can be negative or positive
		The return value from onSkillGain and onSkillLoss events can now be used to control behavior:
			return true - skill gain/loss is allowed, and server will go through with the skill update
			return false - skill gain/loss is not allowed, and server will prevent the skill update, but will not block additional scripts with same event from running
		onSkillChange will now run as long as onSkillGain or onSkillLoss events return true, and if those events are not defined
	Shifted [directories] section of UOX.INI further up in the file, to make it easier to find
	Added new UOX.INI setting to control for which facets spawn regions are enabled (defaults to none):
		SPAWNREGIONSFACETS=#	// # is a bitmask that determines which facets to enable spawn regions for. Supported values:
			0 = No facets enabled (default)
			1 = Felucca
			2 = Trammel
			4 = Ilshenar
			8 = Malas
			16 = Tokuno
			32 = Ter Mur
				Examples: A value of 1 = only Felucca is enabled, value of 3 = Felucca + Trammel, 10 = Malas + Ilshenar, 63 = all facets enabled, etc.
	Updated CSpawnRegion::doRegionSpawn() function to only spawn objects in spawn region if world associated with spawn region is enabled in SPAWNREGIONSFACET uox.ini setting
	Stackable items given to newly created characters will no longer by default be marked as newbiefied/blessed items
	Added new Character JS Properties
		.actualDexterity 		// Returns the actual dexterity (minus temporary mods) of the character
		.actualIntelligence 	// Returns the actual intelligence (minus temporary mods) of the character
		.actualStrength 		// Returns the actual strength (minus temporary mods) of the character
	Fixed an issue where NPCs would be stuck not moving if they ended up trying to flee from non-existent targets
	Providing an invalid spellID with CastSpell() Character JS Method will no longer crash the server
	Fixed an issue where ranged weapons bought from NPC vendors would not have their baserange/maxrange properties set properly
	Updated onStatGained, onStatLoss and onStatChange JS events:
		Additional parameters now supported by events - statGainAmount and statLossAmount
			onStatGained( player, statID, statGainAmount ) 	// statGainAmount is always positive
			onStatLoss( player, statID, statLossAmount ) 	// statLossAmount is always positive
			onStatChange( player, statID, statChangeAmount ) // statChangeAmount can be negative or positive
		The return value from onStatGain and onStatLoss events can now be used to control behaviour:
			return true - stat gain/loss is allowed, and server will go through with the stat update
			return false - stat gain/loss is not allowed, server will prevent the stat update, and will prevent additional scripts with same event and/or hard code from running
		onStatChange will now run as long as onStatGain or onStatLoss events return true, and if those events are not defined
	Fixed an issue where players would experience higher than expected delays for firing ranged weapons after moving
	Updated item stacking code to disallow stacking items that have different more, morex, morey, morez, buyvalue or sellvalue
	Fixed issue where monsters would erroneously show context menu entries with skill training options
	Added new Item property that can be used to associate an item with a custom server event:
		DFN Tag:
			EVENT=eventName	// Name of event in one word, with no spaces
		JS Property:
			.event
	Added a code-check when placing house-addons to see if there's space in multi to place addon at selected location, starting from coordinates of target location and checking tiles east and south of that location based on the addon's SPACEX and SPACEY settings in house.dfn
	Changed how house addons are marked as addons; they will no longer have their item type set to 201 (IT_HOUSEADDON), as this would override any existing item type functionality of the items being setup as addons (like the dresser, which is a container). Instead, house addons are now marked with a custom tag "addon", which is used by scripts like axe.js to identify them as house addons instead of relying on the item type.
	NPC shopkeepers now spawn with full stocks of goods, instead of the bare minimum
	Fixed item weight tooltip for pileable items appearing in vendor shoplists
	Fixed an issue where selling items to NPC shopkeepers would sometimes not visually remove the items from player's backpack
	Fixed missing base_item inheritance and missing restock property for mount statues sold by animal trainers/stablekeepers, which prevented them from being presented for sale
	Hairs and Beards no longer count towards the total item count showing for corpses
	All leather containers are now dyable
	GM/Admin characters can now drag immovable items out of their own backpack even with "allmove" disabled
	A tip to enable "allmove" or modify item's movable property now shows for GMs attempting to pick up immovable items from the ground
	Hungry creatures with AI type 6 (AI_ANIMAL) will no longer suicide by indiscriminately attacking creatures with AI type 2 (AI_EVIL), but will instead only attack "peaceful" animals, or - if really hungry - other types of predatory animals (including humans...)
	Added new JS Item Methods to get/set the value (0-255) for specific parts (1-4) of temp variables ("more", "morex", "morey", "morez"):
		.GetMoreVar( moreVarName, moreVarPart )
		.SetMoreVar( moreVarName, moreVarPart, moreVarValue )
	Updated inRange JS event to also trigger for Items with this event attached, when player characters come within update range. Updated syntax:
		inRange( srcItem, pCharInRange )
		inRange( srcChar, objInRange )
	When UOX3 retrieves data from the onToolTip() JS event to potentially display custom object tooltips, it will use the ID specified in a temporary JS tag ("tooltipCliloc") on the object as the clilocID being sent to the client with the tooltip text returned from the script. If no such tag exists on the object, it defaults to cliloc ID 1042971.
	Added new JS event that triggers _after_ an item has been removed from a container (no return values supported):
		onContRemoveItem( iCont, objRemoved, pChar )
	The JS Function SpawnNPC() can now spawn NPCs from NPCLISTS if provided with a boolean parameter flag (useNpcList). Updated syntax:
		CChar SpawnNPC( npcSection/npclist, x, y, z, worldnumber, instanceID, useNpcList )
	Added new JS Event to allow detection of movement near an object (items only, for now). Distance at which it triggers determined by part 1 of the item's MORE property. Use long ranges with care! Syntax:
		onMoveDetect( srcObj, pChar, rangeToChar, oldCharX, oldCharY )
	Item and NPC definitions can now make use of randomization for the ID tag, for more variety. Syntax:
		id=[id1] [id2] [etc] // Example: id=0x0e42 0x0e43
	Updated code for spawn containers to allow spawning more than one item per container; by default, a spawn container will now spawn every item from an itemlist if set as the spawnobjlist property for that spawn container. These itemlists can contain direct item references, references to other itemlists or even lootlists
	Updated Unlock spell to check for existence of morey property value on lock. If there's a value, and the second part of the value is not 0x01, Unlock cannot be used to unlock the lock. By default, dungeon treasure containers level 1 and 2 are unlockable with the Unlock spell, while levels 3 and 4 are not, and require Lockpicking skill to unlock.
	Fixed an issue where player characters would "skip a step" when moving under certain circumstances (like coming out of hiding)
	Players flagged as criminals or non-innocent aggressors in PvP combat can no longer use public moongates
	Pets will now teleport along with the player both when using moongates (public or spell-based), recall, object-based teleporters or hard-defined teleport locations from teleport.scp
	Fixed an issue where the music set for a given region would not play for characters upon login, but only after exiting/re-entering the region
	If player moves between two guarded regions with identical GUARDOWNER, they will no longer receive a message saying they're protected by the guards of the new region (since there's no change in guarded status)
	Regions marked with PARENTREGION=# (# refers to parent region number) are loaded by UOX3 as "sub-regions". Entering or existing such a sub-region will not change the actual region a player is in, but they can be assigned a different MUSICLIST that will play instead of the music in the actual region the character is in. Sub-regions like these must have a lower region number than the region they're contained within
	Fixed a bug that snuck in when adding in PARENTREGION support in previous commit, that resulted in all regions being seen as sub-regions upon loading regions from regions.wsc
	Fixed an issue where Socket JS Property .account did not properly return an object reference to the account associated with the socket
	Updated JS Character Method .ResourceCount() to support -1 as value for the color argument, which will cause UOX3 to count all items of the specified ID, regardless of color
	Optimized portions of new crafting menus and added some additional features (Xuri)
		Updated Character JS Method .CheckSkill to support an optional fourth parameter - isCraftSkill. This is a boolean flag that, if set to true, will use an alternate formula for skill-checks that give players at least 50% chance at success if they at least meet the minimum requirements. The formula used:
		successChance = 500 + ((( playerSkill - minSkill ) / ( maxSkill - minSkill )) * 1000
		Fixed an issue where the Rank System for crafting could mess with stacking of items; stackable items now default to max rank
		Added new Item DFN tags:
			usesleft=# 	// The current amount of uses remaining for an item with limited use
			maxuses=# 	// The maximum amount of uses for an item with limited use
		Added new JS Item properties to match DFN tags:
			.usesLeft
			.maxUses
	Crafting and gathering tools bought from NPC vendors will now support a random and limited amount of uses (between what is defined as "current" and "max" uses)
	Crafting and gathering tools created by player crafters will support a limited amount of uses based on the quality of the item crafted
	Added new JS event that triggers for characters right after an item has been crafted (or failed to be crafted):
		onMakeItem( socket, crafter, craftedItem, createEntryID )
	Fixed an issue where negative values could not be used with Race DFN tags STAMMOD and HPMOD
	Fixed an issue where messages about being unable to equip race-restricted items would only appear properly for the first three races in races.dfn
	The 'make command can no longer be used on dead player-characters; the character must be alive before its status can change!
	Added support for an additional optional parameter in the RESOURCE tag in Create/Crafting system to make it easier to distinguish between resources with same ID, color but different name - moreValue. This can be set for a resource using the Item DFN tag MORE=#. Syntax:
		RESOURCE=id/resourcename amount color moreValue
	Updated ResourceCount() and UseResource() JS Methods to support optional paramter moreValue
	Updated internal quantity functions (GetSubItemAmount, GetItemAmount, DeleteItemAmount, DeleteSubItemAmount, GetBankCount and DeleteBankItem) in code to also compare against moreValue, if passed in.
	The above functions will now also prioritize reducing remaining uses on an item (if any) over consuming the item itself
	Fixed an issue in HandleGumpInput that prevented compiling UOX3 properly on Linux
	Added new uox.ini setting that determines if item stats on unidentified magic items are shown or hidden:
		HIDESTATSFORUNKNOWNMAGICITEMS=0/1 // Toggles whether item stats for unidentified magic items are hidden from tooltips. Defaults to 1
	UOX3 now stores a timestamp for when an account receives its first login, which can be accessed via the new (read-only) JS Account Property .firstLogin.
	UOX3 now stores a timestamp for when a player character is created, which can be accessed via the new (read-only) JS Character Property .createdOn. For legacy player characters, the creation timestamp is set the first time UOX3 loads the characters after this update.
	Fixed an issue on Linux where pressing the arrow keys in the console would cause UOX3 to shut down
	Modified tooltip for armors to describe the physical defensive value as Armor Rating instead of Physical Resist
	Updated console key input handling with a more robust approach for Linux (punt)

JScript Changes/Fixes:
	Fixed an edge case with 'time command that would not display time correctly (UOX3/js/commands/time.js)
	Fixed an issue where house key could not be used to open locked doors if key was not contained in root of player's backpack (UOX3/js/item/doors.js)
	Added a new command - 'cure - that can cure a targeted character of any poisons (UOX3/js/commands/targeting/stats.js)
	Fixed an issue with the 'tweak command that would set an item's movable property instead of type if used on non-spawnerobjects
	Fixed an issue with the 'tweak command that would trigger the wrong gump dialog when attempting to set an item's name, name2 and creator properties
	Fixed an issue with the 'tweak command where clicking ok in gump dialog with no value entered would reset chosen property to default value
	When marking recall runes, they will now get a hue reflecting the facet they were marked in (UOX3/js/commands/targeting/magic.js)
	The 'set command can now be used to set the armour class of items ('set ac #)
	Reimplemented 'tweak command in JS engine (js/commands/targeting/tweak.js) - can be used to view and modify properties of characters, character skills, items, multis and regions (target ground)
	Added placeholder packet-hook script (js/server/network/0xf1_connectUoServerPoll.js) to handle responses to ConnectUO server polling. By default this script does nothing, but serves as a placeholder for drop-in replacement scripts generated specifically for each shard by the ConnectUO service.
	Updated some commands to support an alternate STATIC keyword (can also be ommitted) to add base items:
		'add static itemID
		'tile static itemID
	Updated some commands with support for randomization. Provided itemID will be randomized based on provided rndValue:
		/js/commands/targeting/add.js:
			'add itemID rndValue
		cmdtable.cpp and targeting.cpp:
			'tile itemID rndValue
			'tile itemID x1 x2 y1 y2 z rndValue
	Updated js/commands/custom/repeatingcmds.js to support 'm delete as an alias for 'rremove
	Added 'props as an alias for the 'tweak command
	Added 'teleport as an alias for the 'tele command (js/commands/targeting/tele.js)
	Added 'shavehair and 'shavebeard as aliases for 'kill hair and 'kill beard (js/commands/targeting/kill.js)
	Added 'noinvul and 'mortal aliases for the 'invul false command (js/commands/custom/misc-cmds.js)
	Added 'immortal and 'invul (without parameter) as aliases for the 'invul true command
	Added 'bringtopack as an alias of 'movetobag command (js/commands/targeting/movetobag.js)
	Updated check for cancelling of target cursor in various JS scripts
	Minor updates to various JS scripts
	Moved countdown and explosion handling of explosion potions from code to JS (js/item/potion.js)
	Added LoS and Z distance checking for explosion potions
	Added optional randomization of countdown timer for explosion potions. Can be enabled via a boolean at the top of the potions script
	Added optional Alchemy skill bonus damage modifier for explosion potions, defaults to 1 additional damage per 5 skillpoints
	The GM command 'set can now modify a character's current mana using 'set mana #
	Added JS command to get specific object property values (using same property names as 'set command):
		'get [objectProperty]
	Added functional chessboard that operates on standard chess rules. Pieces cannot be removed from the board, snap to the chessboard grid when dropped, are subject to movement restrictions per chesspiece, will capture opponent pieces if landing on their square. Board can be reset by dragging king-piece off to the side of the board (js/item/gameboards.js and js/item/chesspiece.js)
	Added functional checkerboard, with pieces that cannot be removed, can only move in diagonals, can jump across opponent pieces to capture them. Board can be reset by either side moving one of their own pieces off to the side of the board (js/item/gameboards.js and js/item/checkerpiece.js)
	Using the 'go command without any additional parameters will now open the GM travel menu (js/commands/go.js)
	Updated 'get command to allow retrieving certain account properties for targeted player characters:
		username, flags, comment, character1, character2, character3, character4, character5, character6, character7, lastIP, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor and isGM
	Updated 'set command to allow setting certain account properties for targeted player characters:
		comment, password, isBanned, isSuspended, isPublic, isOnline, isSlot1Blocked, isSlot2Blocked, isSlot3Blocked, isSlot4Blocked, isSlot5Blocked, isSlot6Blocked, isSlot7Blocked, unused9, unused10, isSeer, isCounselor, isGM
	Updated 'tweak command to allow viewing and modifying of certain account properties for targeted player characters
		Note that any changes to account properties will not go into effect until a worldsave or manual save of accounts via console has taken place.
	Updated .get command to allow retrieving timeban value from account of player characters
	Updated .set command to allow setting timeban value on account of player characters. If set to higher than 0, player will also be marked as banned, and disconnected
	Added two new commands in js/commands/targeting/disconnect.js:
		'ban [durationInMinutes]	// Ban targeted player for specified duration in minutes, or for a default 24 hours if no duration is specified
		'unban 						// Unban targeted player
	Updated 'tweak command (js/commands/targeting/tweak.js) to support viewing and modifying .timeban account property
	Updated 'get command to allow retrieving a character's hungerRate property
	Fixed an error in tweak command (js/commands/targeting/tweak.js) when attempting to use it on characters with no backpacks
	Fixed an issue where 'get command attempts to retrieve incorrect property when isonline parameter is provided
	Fixed an issue where 'set weightmax # would fail because script used an incorrect property name
	Fixed issue with wipe command (js/commands/targeting/wipe.js) not working because script was referencing wrong name for socket
	Fixed issue with get (js/commands/targeting/get.js) and set (js/commands/target/set.js) commands where wrong property name was used for getting/setting old npcwander type
	Added new GM command in js/commands/msgmod.js:
		'msgmod on/off 		// If on, GMs who open a bulletin board while using ClassicUO client will be able to remove any individual message
	Moved SETSCPTRIG command from code to JS (js/commands/targeting/scptrig.js), and supplemented it with some additional commands:
		GETSCPTRIG				// List out all scriptIDs assigned to object
		SETSCPTRIG scriptID 	// Clears list of scriptIDs for object, then assigns the specified scriptID
		ADDSCPTRIG scriptID 	// Adds specified scriptID to list of scriptsIDs assigned to object
		REMOVESCPTRIG scriptID 	// Removes specified scriptID from list of scriptIDs assigned to object (0 = remove all)
	Fixed issue where sub-commands would still execute despite cancelling target cursor when using AREACOMMAND, just without being limited by such pesky things as coordinates (js/commands/targeting/areacommand.js)
	Updated AREACOMMAND to support adding/removing script triggers (js/commands/targeting/areacommand.js)
	Updated CSTATS command to support showing all script triggers attached to an object (js/commands/targetin/gumps.js)
	Updated GET (js/commands/targeting/get.js) and SET (js/commands/targeting/set.js) commands to support adding/removing script triggers from objects
	Updated the following JS scripts to use AddScriptTrigger() method instead of .scripttrigger property:
		kindling script (js/item/kindling.js)
		key script (js/item/key.js)
		pitchers script (js/server/resource/pitchers.js)
		houseSign script (js/server/house/houseSign.js)
		banker script (js/npc/ai/banker.js)
	Updated DFN entries for training dummies (dfndata/items/houseaddons/house_addons.dfn) to include DAMAGEABLE=1 and HP=100 tags, and also updated script for training dummies (js/item/trainingdummy.js) with some extra features for dummies marked as damageable:
		Show damage numbers over the training dummy when hit
		Update health of training dummy based on damage received when hit
		Restore health of training dummy to max after 4 seconds of inactivity
	Updated 'fullstats and 'heal commands (js/commands/targeting/stats.js) to support restoring the health of a damageable object
	Updated 'get (js/commands/targeting/get.js) and 'set (js/commands/targeting/set.js) commands to support getting and setting the damageable flag on objects
	Updated JS script for drinks (js/server/resource/pitchers.js) to reduce character thirst when consumed, with appropriate system messages displayed based on character's thirst level (Xuri)
	Updated JS commands get (js/commands/targeting/get.js), set (js/commands/targeting/set.js) and tweak (js/commands/targeting/tweak.js) to support getting/setting character hunger levels (Xuri)
	Added facet support for 'wipe and 'iwipe commands (js/commands/targeting/wipe.js). Updated syntax:
		'wipe/iwipe
			Brings up target cursors. Wipes all objects in area between target locations, on same facet as user
		'wipe/iwipe x1 y1 x2 y2
			Wipes all objects in specified area, on same facet as user
		'wipe [objType] [facet]
			Wipes all objects of specified type. If facet is specified, wipes only on that facet.
			objTypes: items, multis, boats, npcs, spawners or all
		'wipe all
			Wipes ALL objects, on ALL facets, regardless of object type
		'wipe all force
			Wipes ALL objects, on ALL facets, regardless of object type and whether wipeable flag is set
	Added new admin command (js/commands/decorate.js) to allow saving/loading world templates. These templates are essentially text files (with .jsdata file extension) that contain the bare minimum amount of details needed to decorate an entire game world, a facet or even a specific area of a facet. The files can be bundled with UOX3 for a smoother first-time-user-experience, can be easily shared with other people as blueprints for world decoration, and they can be saved and loaded on the fly without impacting existing data on a shard. By default, the command will save/load items to/from different files per facet based on the following item categories: doors, signs, lights, moongates, teleporters, misc (everything else).
		Command syntax:
			'decorate save
				Save all items to the default templates, based on each item's objectCategory and facet
			'decorate save [objectCategory]
				Save all items of specified objectCategory, regardless of facet
			'decorate save [facetName]
				Save all items on specified facet, regardless of objectCategory
			'decorate save [customFileName]
				Save all items of all objectCategories on all facets to custom template file
			'decorate save [objectCategory] [facetName]
				Save all items of specified objectCategory in the specified facet
			'decorate save [customFileName] [facetName] x1 y1 x2 y2
				Save all items within specified coordinates on specified facet to customFileName
			'decorate load
				Load all items from the default templates, regardless of objectCategory and facet
			'decorate load [objectCategory]
				Load all items of specified objectCategory, regardless of facet
			'decorate load [facetName]
				Load all items on specified facet, regardless of objectCategory
			'decorate load [customFileName]
				Load all items from file named [customFileName]
			'decorate load [objectCategory] [facetName]
				Load all items of specified objectCategory in the specified facet
			'decorate copy [sourceFacet] [targetFacet]
				Copy all items from one facet to another
			'decorate clean
				Clean up duplicate decorations that might have been loaded/added by accident.
		Note that world templates are by default stored in and read from a subfolder named "worldtemplates" under the new SCRIPTDATADIRECTORY (which defaults to UOX3/js/jsdata/)
	Added welcome gump that is displayed automatically for characters on the admin account (account 0) on first login. This welcome gump gives new shard admins the option to either start with a blank and empty world, or to load the default UOX3 world - based on the default set of world templates provided with UOX3, if any. It also provides a few tips to get started, as well as links to various documentation pages, forum and Discord server. The welcome gump can also be re-opened at a later stage using a new admin command: 'welcome
	Updated decorate command to support two additional object categories - containers and spawners - and the properties needed by these to function
	Added missing world template file (js/jsdata/worldtemplates/felucca_containers.jsdata)
	Fixed an issue with Forensic Evaluation skill (js/skills/forensics.js) not giving correct info on age of a corpse, because it incorrectly tried to check a .tempTime property instead of .tempTimer
	Added onDecay event to default global script (js/server/global.js), which detects when player corpses are about to decay, turns them into bones, and resets the decay timer back to full
	Updated GM command 'dupe to work with characters as well as items
	Moved splitting of NPCs in combat from hard code to JS (js/npc/ai/splitting_npcs.js). It relies on the onAttack JS event to trigger, but otherwise works identical to the previous hard-coded variant. The script has been assigned a default script ID of 3203
	Fixed an issue where UOX3 would attempt to update health bar of training dummies not marked as damageable (js/item/trainingdummy.js)
	Added packet-hook script (js/server/network/0x7f_uogatewayServerPoll.js) to handle responses to server polling by shard lists like UOGateway, ShardPortal, etc.
	Added script for rotating furniture via interior decorator tool or via dropping item
	Merged furniture rotating functionality into existing smartturn script, and expanded on the selection of items. Supported furniture can now be turned by double-clicking the item (if no other double-click functionality exists), picking up and dropping the item, or via the interiordecorator tool (Xuri)
	Updated js/jse_objectassociations.scp with furniture IDs supported by the furniture_smartturn script, so rotating will work for any supported furniture without needing to add scripts to each individual furniture DFN (Xuri)
	Added script for handling hair restyle (js/item/hairrestyle.js) and added it to jse_fileassociations.scp with ID 5028
	Updated hair restyle script with some coding style changes, added system messages to dictionary files and added gump tooltips (Xuri)
	Added JS command to reload dictionaries
		'reloaddictionaries
	Updated animal-trainer/stablemasterscript (js/npc/ai/stablemaster.js) with several changes:
		Fixed an issue where the same pet would be stabled in all available slots if payment was taken from player's bank account instead of their backpack
		Fixed an issue where stablemaster would not pause walking for a while when a player interacts with them
		Converted all system messages and text messages in stablemaster script to dictionary entries
	Reworked banker AI script (js/npc/ai/banker.js) to use triggerwords from client instead of hard-defined strings, to work better with multiple languages (and work with all relevant triggerwords)
	Fixed a bug with banker AI script (js/npc/ai/banker.js) that prevented players from using the "withdraw" command
	Added new AI script for NPC hirelings (3204=js/npc/ai/hireling.js), who can be hired to follow the player around for a limited amount of time, and function the same way as pets. In addition to the regular pet commands, these speech commands are supported:
		hire 	// The hireling will respond with the cost to hire them
		dismiss // Replaces the "release" command for pets; will dismiss the hireling
		patrol 	// The hireling will patrol between it's current location and a second targeted location nearby
		move 	// The hireling will try to shuffle out of the way
		fetch 	// The hireling will try to fetch a targeted item
		drop 	// The hireling will drop to the ground all loot they're currently carrying
		report 	// The hireling will report on the remaining time they're hired for
	Updated get (js/commands/targeting/get.js) and set (js/commands/targeting/set.js) commands to support getting/setting the following character properties:
		deaths
		ownerCount (read only)
		controlSlots
		controlSlotsUsed
	Updated various JS scripts to make use of new TriggerEvent functionality and reduce reliance on custom tags:
		js/item/archerybutte.js
		js/item/trainingdummy.js
		js/server/data/combatanims.js
		js/server/data/weapontypes.js
	Updated archerybutte script to use dictionary for system and text messages
	Updated archerybutte script to support increased range, distance penalty and dex/str bonuses when calculating score
	Updated resource JS scripts (js/server/resource/*) to use dictionaries for all system messages
	Updated skill JS scripts (js/skill/*) to use dictionaries for all system messages
	Updated housing JS scripts (js/server/house/*) to use dictionaries for all system messages
	Updated item JS scripts (js/item/*) to use dictionaries for all system messages
	Updated magic JS scripts (js/magic/*) to use dictionaries for all system messages
	Updated NPC AI JS scripts (js/npc/ai/*) to use dictionaries for all system messages
	Updated command JS scripts (js/commands/*) to use dictionaries for all system messages, gump tooltips, etc
	Implemented Remove Trap skill, which depends on player's detect hidden and lockpicking skills being at least 50.0, and removes or fails to remove traps based on trap difficulty vs skill checks. Trap difficulty is set in the last part of a 4-part MOREZ value, using the following format:
		MOREZ=0x01 0x32 0x11 0x37 	// First part is trap enabled/disabled, second part is damage dealt by trap, third part is minimum remove trap skill required to remove trap, and fourth part is minimum skill required for guaranteed removal success
	Updated Animal Lore skill with more details, more options. Defaults to showing UOX animal lore gump, but alternate gump with additional details for AoS and beyond can be enabled
	Integrated a version of the Runebook JS script rewritten from scratch to support all the features that ~pub15 era Runebooks did, including dropping runes and Recall scrolls on the books, recalling/gating directly from the spell icons in the Runebook, and more.
	Max charges for a newly crafted Runebook ranges from 5 to 10 depending on the Inscriber's skill (if rank system for crafting is enabled), and is stored in the book's direction property
	Updated various JS item scripts to unhide characters when the items are used (Dragon Slayer)
	Added AOS Bone cutting to create bones
	Added AOS toggle switch for the bone cutting.
	Fixed So cutting clothing up will give back cloth and not bandages.
	Fixed so the material will keeps its color when cut up.
	Added Scissor sound to cutting up the material.
	Made 5 new functions for ids so it can easily be expanded on to without having to edit any of the main function.
	Added a Newbie Check so you can not cut up your starting items.
	Updated scissors script to verify that scissors still exist and are within range upon targeting an object, and a check to ensure characters cannot use scissors while running (Xuri)
	Updated scissors script to base the amount of returned cloth/leather from cut up clothes/leather armor on the amount of resources used to craft the items, as well as on the player's Tailoring skill. The higher the player's skill, the more resources returned, capped at half the amount of resources used to craft the item. If the item was not crafted by a player, it returns 1 resource only. (Xuri)
	Updated Tailoring script (js/skills/tailoring.js) to accept cut leather as a valid tailoring resource
	Updated various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets
	Moved fishing skill out of code and into js for more user friendly control
	Added js/item/magicfish.js for the magic fish food
	Extended fishing JS script to include:
		Fishing special fishing nets, big fish, messages in a bottle/SOS messages and associated shipwreck treasures, with chances of attracting sea serpents, deep sea serpents, water elementals and krakens while fishing.
		Enhanced detection of fishing in shallow vs deep water, with deep water now being defined as any water tile that's 16 or more tiles away from the nearest land area.
		Updated timer system, LoS checks,
	Implemented SOS messages and shipwreck locations, with areas valid for potential shipwreck locations being defined in a new section of regions.dfn named [SOSAREAS], which follows the same syntax as the INSTALOG section in the same file. Once a message in a bottle is opened, a SOS message is generated with coordinates for a random shipwreck location, which players can sail to and fish near in order to find a sunken treasure (and other items).
	Implemented shipwreck treasures, which come in 3 levels of quality (with an optional 4th quality level available), with increasing amount of gold, gems, scrolls, reagents and magic items (coming in next commit!) per quality level of treasure
	Implemented special fishing nets, which can be used to fish up a variety of sea creatures (sea serpents, deep sea serpents, water elementals, kraken), which have a high chance of having SOS bottles on their corpses when defeated
	Fixed an issue with Runebooks (js/item/runebook.js) where the coordinates of a rune location would not be displayed properly
	Separated map coordinate function from Runebook script to its own script (js/server/data/map_coordinates.js), which other scripts can call upon to get map coords using TriggerEvent() JS function
	Ported sextant implementation from code to JS (5033=js/item/sextant.js), and removed the hard-coded version of this.
	Using bladed weapons on stacks of fish will now cut the entire stack at once, instead of one fish at a time
	Updated 'tweak and 'set commands to refresh item being modified if movable state of item changes, so the change is reflected in nearby clients
	Ported Item Identification skill from code to JS (js/skill/itemid.js) and removed hard-coded version
	Implemented magic item generator in JS (js/item/magic_item.js). When this script is attached to an NPC, it has a chance to generate magic weapons, armors, wands/staffs and rings as loot on the NPC's corpse when slain. The chance of getting quality magical items increases with the fame level of the NPC in question. The types of magical items generated follows the pattern of such items as implemented in UO prior to the AoS expansion.
		Examples:
			exceedingly accurate war hammer of vanquishing
			substantial, accurate axe of power and Daemon's Breath
			silver long sword
			massive platemail arms of Protection
			metal shield of defense
			durable ringmail tunic of guarding
		All magic items have a chance to have spell effects attached (with rings/wands being guaranteed to have these), with a limited amount of charges available. For weapons, these effects activate on successful hits in combat, while for armors they activate on equip, and then periodically as long as the item is worn. Rings and wands/staffs have to be manually activated and targeted - with the exception of rings of invisibility, which activate the moment you equip them!
		Related scripts:
			js/item/magic_armor_equipeffects.js
			js/item/magic_weapon_accbonus.js
			js/item/magic_weapon_equip.js
			js/item/magic_weapon_spell_attack.js
		The magic item loot generation script has been attached to a number of different NPCs, all of which now have a chance to drop magic items as loot when defeated.
	A bonus magical item - the glacial staff - has also been implemented (js/item/magic_glacial_staff.js), and has a chance to drop as loot from Giant Ice Serpents!
	Fixed bug with 'rename command, which referenced a non-existing variable that caused a script crash
	Added additional object properties to 'get and 'set commands:
		.shouldSave 		// Determines if an item should be saved in worldfiles or not
		.baseRange 			// Determines the base range of a ranged weapon, less than which it becomes less effective
		.maxRange 			// Determines the max range of a ranged weapon, beyond which it cannot reach its target
	Added special abilities/effects for the following NPCs:
		Acid Elementals now have a chance to damage the melee weapons of their attackers
		Dull Copper Elementals now explode on death
		Shadow Iron Elemental is immune to targeted spell damage
		Copper Elementals have permanent magic reflect, and reflect some physical damage back at their attacker
		Bronze Elementals deal passive area damage to nearby players every 5 to 10 seconds
		Valorite Elementals have permanent magic reflect, reflect some physical damage back at their attacker
		Snow/Ice Elementals deal passive area damage to nearby players every 5 to 10 seconds
		Lava Serpents deal passive area damage to nearby players every 5 to 10 seconds
		Phoenixes deal passive area damage to nearby players every 5 to 10 seconds
		Pixies have a chance to cast a random spell upon receiving a death blow:
			Bless (target)
			Curse (target)
			Explosion (target)
			Greater Poison (target)
			Greater Heal (self, prevents death)
		Ethereal Warriors will now resurrect dead players with positive karma
		Ethereal Warriors now have a chance to drain target's health, stamina or mana on hit
		Fire Breath special ability added to the following NPCs, with the random ability damage scaling with the NPCs current health:
			Hell Cat, 5 to 8 dmg at max health
			Fire Steed, 6 to 9 dmg at max health
			Hell Hounds, 8 to 11 dmg at max health
			Lava Lizard, 8 to 11 dmg at max health
			Predator Hell Cat, 9 to 14 dmg at max health
			Sea Serpent, 11 to 17 dmg at max health
			Swamp Dragon, 15 to 22 dmg at max health
			Armored Swamp Dragon, 15 to 22 dmg at max health
			Fire Gargoyle, 20 to 30 dmg at max health
			Deep Sea Serpent, 21 to 32 dmg at max health
			Serpentine Dragon, 22 to 32 dmg at max health
			Drake (Gray), 22 to 32 dmg at max health
			Drake (Red), 22 to 32 dmg at max health
			Nightmare, 26 to 39 dmg at max health
			Dark Steed, 26 to 39 dmg at max health
			Silver Steed, 26 to 39 dmg at max health
			Kraken, 39 to 59 dmg at max health
			Dragon (Red), 41 to 62 dmg at max health
			Dragon (Gray), 41 to 62 dmg at max health
			Shadow Wyrm, 50 to 75 dmg at max health
			Reptalon, 51 to 77 dmg at max health
			Skeletal Dragon, 52 to 77 dmg at max health
			Ancient Wyrm, 60 to 90 dmg at max health
	Updated potions script (js/item/potion.js) with updated formula for amount of hitpoints healed by healing potions, and added restrictions for using them when at full health and/or if poisoned (Dragon Slayer)
	Added taming restrictions for Unicorn, Ki-Rin and Cu Sidhe (js/skill/taming.js)
	Added modification of some creatures stats after they've been tamed (js/skill/taming.js)
	Added restrictions for who can ride certain creatures (Unicorn, Ki-Rin, Cu Sidhe)
	Removed some debug messages from pixie_death.js
	Disabled tooltips for admin welcome gump; too much for regular UO client to handle
	Fixed a bug where players could gain points in Evaluating Intelligence skill by targeting themselves (js/skills/evaluateintel.js)
	Updated Evaluating Intelligence skill to show more detailed information about targets (js/skills/evaluateintel.js)
	Fixed some issues with sound effects in JS based spells
	Added missing reference to wand_item_id.js in jse_fileassociations.scp
	Removed debug message from magic item generation script
	Fixed an issue with fishing script that prevented fishing up random sea serpents
	Fixed pitcher of water so it can be poured onto the bag of flour and remove one content and set 20 contents for flour bag
	Fixed four bag can be double clicked and target water and use one content of water. and give it self 20 uses for dough
	Added all dough baking
	Added all meat cooking
	Added Heatsources
	Fixed Flourmill to have animation and give bag of flour when double clicked
	Cleaned up baking and cooking - not every thing needed a skill check
	Misc style cleanup and bugfixes (Xuri)
	Tweaked flour mill usage and animation setup to make it more resistant to breaking (Xuri)
	Added tooltip with uses remaining for pitchers of water and sacks of flour (Xuri)
	Randomized the type of bread created when baking dough (Xuri)
	Healing someone with bandages now unhides player
	Updated calculations for duration it takes to heal self/another target, and for the amount of health healed
	Added karma gain for healing innocent players
	Added ability to heal various humanoid monsters with bandages and Healing skill
	Added ability to heal various animals with bandages and Veterinary skill (Xuri)
	Added chance for healer's fingers to slip if taking damage while healing (js/skill/healing_slip.js), with amount of health healed being reduced with each slip, though this effect is countered somewhat by healer's Healing skill and Dexterity stat (Xuri)
	Added some opening effects to some containers like armoires, chests of drawers and dressers
	Added new command to allow shard admins and GMs to quickly add signs to their world: 'addsign
	Added new Admin commands to enable/disable spawn regions in specific facets (note that this does not affect already spawned objects):
		'enablespawns <facetNum/facetName>
		'disablespawns <facetNum/facetName>
	Updated 'get command (js/commands/targeting/get.js) to support fetching actualDexterity, actualIntelligence and actualStrength properties for Characters
	Fixed an issue where 'wipe command could wipe NPCs and/or multis despite those being set as "unwipable"
	Added missing maxrange DFN tags to Item definitions for ranged weapons (dfndata/items/gear/weapons/archery.dfn, aos_weapons.dfn and se_weapons.dfn)
	Removed some dummy data that snuck into dfndata/items/gmmenu/spawners.dfn
	Fixed an issue where Healing script (js/skills/healing.js) would break because Math.Round() was used instead of Math.round() (Thanks, HeyYaNITO!)
	Added baseRange and maxRange to 'tweak menu (js/command/targeting/tweak.js)
	Updated 'get, 'set, 'tweak and 'areacommand commands to support the new event property
	Extended 'decorate command with some additional features to support saving, loading and unloading event decorations (example: xmas, halloween, etc):
		'decorate saveevent eventName	// Save all items with event property matching eventName to event_[eventName].jsdata
		'decorate loadevent eventName 	// Load all items from event_[eventName].jsdata and assign eventName to their event property
		'decorate unloadevent eventName	// Clear up all items associated with eventName
	Added new script (js/server/house/houseAddonUse.js) that will restore the double-click functionality of some house addons that would lose their regular functionality in the process of becoming house addons, as their item type changed. The same script also adds some extra functionality to a couple of other house addons (looms and spinning wheels), allowing players to choose between using the addons and then targeting materials like yarn or wool or using the materials and then targeting the addons
	Fixed an issue with the interior decorator tool that would allow using it outside one's house
	Updated 'decorate save command to not save items that are inside multis (the multis themselves are not saved anyway!)
	Fixed some issues that would crash decorate script when attempting to use event subcommands without event names
	Renamed 'fixcontweight command to 'fixcont and updated it to also fix maxItems property for containers that don't already have that set
	Updated container world file template for Felucca with containers with proper maxWeight and maxItems seet
	Updated admin welcome gump (js/server/misc/admin_welcome.js) to also include containers (previously missing) and disable facets that don't have any decorations yet. Anyone who already used the admin welcome gump to place default decorations for their shards can use 'decorate load containers to add the missing containers.
	Updated Remove Trap script (js/skill/removetrap.js) to make use of GetMoreVar() and SetMoreVar methods
	Added new JS script (js/server/misc/dungeon_traps.js) for handling trap mechanics in (primarily) dungeons. The traps all trigger on collision, and use different parts of the "morez" property to determine enabled/disabled status, damage, min skill required to disarm, max skill at which player can still gain skill from disarming. Disarming renders trap inactive for 60 seconds. Implemented trap types:
		Spike Traps 		// Active for ~5 seconds after triggered, deals damage every 1 second.
		Giant Spike Trap 	// Active for ~1 second after triggered, deals high instant damage one time
		Saw Traps			// Active for ~5 seconds after triggered, deals damage every 1 second.
		Gas Traps			// Active for ~5 seconds after triggered, applies poison to target every 1 second
		Fire Column Trap 	// Active for ~5 seconds after triggered, deals damage every 1 second after initial delay of 1 second
		Stone Face Traps	// Active for ~3 seconds after triggered, deals damage every 1 second after initial delay of 1 second
		Mushroom Trap 		// Active for ~2 seconds after triggered, applies poison to target every 1 second after an initial delay of 1 second
	Added new commands to make modifying IDs of items (and NPCs) easier:
		'incid #	// Increment/decrement ID of target by specified amount
		'rincid #	// Repeatedly increment/decrement ID of target/multiple targets by specified amount
	Updated 'add and 'radd commands with new, optional syntax to make adding trees easier (potentially with GM tools/macros), as it will add both trunk and leaf at same location with a single command:
		'add tree [trunkID] [leafID]
		'radd tree [trunkID] [leafID]
	Updated AreaCommand GM command to include support for setting the .decayable property on multiple items at once. Also updated the script with appropriate system messages throughout, which now also show how many items were affected by use of the command
	Added new item script (js/item/gate_opener.js) that can be used to make switches/levers raise/lower multiple nearby gates. See script comments for details on setup
	Updated various JS scripts that used GetSByte() to retrieve Z of last targeted location from Socket to manually add height of targeted tile for client version below 7.0.9 only
	Fixed an issue where items created with 'decorate load command could be set as decayable
	Fixed an issue where multiple timers could be running on a single door by manually opening and closing it repeatedly. Closing a door will now kill the associated timer on said door.
	Updated Lockpicking skill to check for the existence of skill difficulty on locks, and use those to perform skill checks when attempting to pick those locks. Difficulty on a lock can be setup using the morey property using this syntax:
		morey=[0x00] [0x00/0x01] [0x##] [0x##] // the first part is unused, the second is used with Unlock spell, the third and fourth are the minimum skill to unlock and the max skill that can be gained from picking the lock
	Added new decorations in default world templates for the following areas:
		Covetous, Deceit, Despise, Destard, Fire, Hythloth, Ice, Shame, Wrong, Hedge Maze, Wind (city), Terathan Keep, Orc Caves, Ilshenar facet, Ilshenar dungeons
	Updated decorations in default world templates for the following areas:
		All cities in Britannia and the Lost Lands
	Updated decorations in default world templates to address issues like missing water/swamp tiles, floor/roof tiles, etc. in various places
	Added special behaviours in some areas:
		Lever puzzle in Covetous
		Monster-spawning brazier in Deceit
		Switch/portcullis behaviour in Hedge Maze
	Updated teleport.scp with teleport locations for:
		Hedge maze, Hythloth lvl 2 teleport maze, Wrong dungeon, Buccaneer's Den to/from mainland, various Ilshenar teleport locations
	Added sound-effect for when lockpicks break (js/skill/lockpicking.js)
	Misc fixes to default world templates (some missing doors, a few duplicate decorations)
	Fixed an issue where incorrect property name for max health, max stamina and max mana were used in taming script (js/skill/taming.js) and fire breath script (js/npc/special/fire_breath.js)
	1/2022 - DragonSlayer, Xuri
	Crafting skills (Alchemy, Blacksmithing, Carpentry, Fletching, Tailoring) have been updated with new JS-based menus, up-to-date create DFNs with additional craftable items and extra features to fit the Pub15 era of UO (DragonSlayer)
	Updated getWeaponType() server script to support getting weapon type directly by ID instead of looking for item equipped by character
	Fixed an error with wheat.js that could cause flour mills to get incorrect IDs assigned
	Added some missing doors in a Serpent's Hold building to default world templates
	Players can now demolish a tent multi and convert it back to a deed by chopping up the tent's (empty) chest with an axe
	GMs can now force the removal of a tent multi by using the 'remove command and targeting the tent's chest (whether empty or not)
	Fixed some issues with 'wipe command that prevented some items (including multis) from being removed
	Added a new admin-command to force the removal of a targeted multi and all items contained within: 'removemulti
	Some minor updates to crafting related scripts
	Implemented Herding skill in JS (js/skill/herding.js) (Dragon Slayer)

DFN Changes/Fixes:
	Fixed issue where some item definitions in dfndata/harditems/harditems.dfn and dfndata/items/building/lighting.dfn used comma instead of space as delimiter for the VALUE tag, which thus never got applied
	Updated all NPC definitions to let NPCs spawn facing in random directions
	Added missing entries for normal and greater explosion potions to dfndata/items/magic/potions.dfn, and added them to the item menu
	Potions are now marked as stackable in dfndata/items/magic/potions.dfn
	Damage of explosion potions is now defined via DAMAGE/LODAMAGE/HIDAMAGE tags in Item DFNs, and the time before exploding is defined via the SPEED tag
	Moved Orc and Ratman races from RACE 1 and 2 to RACE 22 and 23 in dfndata/race/races.dfn to make room for two new player races, that are applied to new player characters during character creation:
		[RACE 1] - Elf
		[RACE 2] - Gargoyle
	Updated orcs and ratmen in dfndata/npc/humanoids.dfn with race IDs 22 and 23 respectively
	Added items in dfndata/items/skills/tools/cooking.dfn to item menu under Skills > Tools > Cooking
	Added HP DFN tag to guard NPCs to prevent them from spawning with half health
	Fixed invalid ID for items [0x0174] and [0x0175] in dfndata/items/building/walls/stone_walls.dfn
	Fixed some missing icons in dfndata/creatures/creatures.dfn
	Updated server status HTML template page (dfndata/html/online.htf) to match other templates
	Added layer=1 to spellbooks in dfndata/items/magic/misc_magic.dfn to allow NPCs to equip them (dragon slayer)
	Some minor fixes to regions.dfn - Name of Covetous dungeon, a set of coordinates for Ice Dungeon
	Updated dfndata/house/house.dfn to include default MAXITEMS (125 items) and WEIGHTMAX (400 stones) values for boats
	Fixed some missing/incorrect brackets in the following DFN files (thanks, punt!):
		dfndata/items/gear/armor/base_armors.dfn
		dfndata/items/gear/armor/leather_armor/ninja_leather.dfn
		dfndata/items/skills/misc/misc.dfn
		dfndata/items/building/walls/tent_walls.dfn
		dfndata/items/building/decs/stoneart.dfn
		dfndata/location/location.dfn
	Added decay=0 tag to bulletin boards
	Some minor cleanup in a few DFN files. Affected files:
		dfndata/creatures/creatures.dfn
		dfndata/items/gear/weapons/aos_weapons.dfn
		dfndata/items/magic/reagents.dfn
		dfndata/items/misc/equippable-mounts.dfn
		dfndata/items/misc/gems.dfn
		dfndata/items/npcmenu.bulk.dfn
		dfndata/items/skills/misc/misc.dfn
		dfndata/npc/femalevendors.dfn
		dfndata/npc/mounts.dfn
		dfndata/npc/undead.dfn
	Added in missing default [COMBAT MODS] section to dfndata/race/races.dfn. Each MOD# entry in this section represents a percentage modifier applied to skill checks for members of a race that subscribes to that MOD entry via skill tags like [SKILLNAME]G=# (bonus) or [SKILLNAME]L=# (penalty). These modifiers are also applied to base damage in combat, before other damage modifiers.
		Example1: SWORDSMANSHIPG=3 would apply a 20% bonus to swordsmanship skill checks for race the tag was added to, as well as a 20% bonus to base damage dealt in combat
		Example2: MACEFIGHTINGL=3 would apply a 20% penalty to macefighting skill checks for race the tag was added to, as well as a 20% penalty to base damage dealt in combat
	The colour of blood effects for characters and creatures hit in combat can be defined in dfndata/race/races.dfn using the BLOODCOLOUR tag and a colour ID. If the value 0xffff is provided, the colour of the blood will be inherited from the character's colour, if any
	Added SCRIPT=3203 tag to [slime]/[jwilson] NPCs (dfndata/npc/miscmonsters.dfn)
	Added new race for slime-related creatures (RACE 24 in dfndata/race/races.dfn), with a BLOODCOLOUR tag set to 0xffff to let blood effects inherit the colour of each individual slime
	Updated RACE tag for [slime]/[jwilson] NPCs to use the new slime-race (dfndata/npc/miscmonsters.dfn)
	Added [interiordecorator] tool (dfndata/items/misc/uor_misc.dfn) that can be used to raise, lower or rotate locked down items in houses
	Added interior decorator tool to Architect shoplists (Xuri)
	Added [hairrestyledeed] item that lets (human) players restyle their hair
	Re-added NPC AI 8 to banker NPCs (dfndata/npc/male_vendors.dfn and female_vendors.dfn) so code can check for presence of this AI when handling context menus
	Added HIRELING tag and SCRIPT=3204 to and updated stats of various NPCs that will be hireable:
		m_fighter, f_fighter, m_beggar, f_beggar, m_peasant, f_peasant, m_sailor, f_sailor, m_pirate, f_pirate
	Added new hireling NPC:
		m_paladin, f_paladin
	Added new OMNIVORE food list and assigned it to [basehuman] DFN section
	Updated NPC DFNs with default CONTROLSLOT=# tags
	Updated equipment itemlists (dfndata/items/itemlists/itemlists.dfn) with blank entries to introduce some more variety in the type of clothes NPCs wear in general
	Added new NPCs to DFNs (dfndata/npc/undead.dfn) and added them to undead npclist:
		[skeletalmage]		// variation of [bonemage]
		[skeletalknight]  	// variation of [boneknight]
	Updated Titles (dfndata/titles/titles.dfn) with up-to-date titles for skills around Pub 15, and added titles for skills added after that. Also added "Elder" and "Legendary" titles for 110 and 120 skillpoints
	Updated EQUIPITEM tag in newbie.dfn (dfndata/newbie/newbie.dfn) to support an optional hue parameter (EQUIPITEM=id,hue)
	Updated starting equipment for new characters (dfndata/newbie/newbie.dfn), with commented out practice weapons. Uncomment to use
	Added item definitions for practice weapons (dfndata/items/gear/weapons/practice_weapons.dfn):
		practice_skinning_knife
		practice_hatchet
		practice_axe
		practice_mace
		practice_longsword
		practice_spear
		practice_bow
		practice_club
		practice_crook
		practice_gnarled_staff
	Updated mount statues DFN (dfndata/items/misc/mount-statues.dfn) and JS (js/npc/pets/*.js) files to include pet control slot related stuff
	Inscription skill can now be used to craft Runebooks. In addition to the skill requirement (min 45.0 Inscription), it requires 8 blank scrolls, 1 blank recall rune, 1 Recall scroll and 1 Gate Travel spell.
	Added new item definition for Runebook ([runebook]) to dfndata/items/magic/misc_magic.dfn
	Added missing NPCs to DFN (thanks, Dragon Slayer)
		f_warrior, f_ranger, f_gambler, f_judge, f_mayor, f_prisoner, f_sculptor
		f_weaver, f_mapmaker, f_furtrader, f_tanner, f_waitress, f_miller, f_rancher
		m_warrior, m_ranger, m_gambler, m_judge, m_mayor, m_prisoner, m_sculptor
		m_weaver, m_mapmaker, m_furtrader, m_tanner, m_waiter, m_miller, m_rancher
	Added the new NPCs to npclists (dfndata/npc/npclists.dfn), spawners (dfndata/items/gmmenu/spawners.dfn), add-menu (dfndata/items/ItemMenu.bulk.dfn and dfndata/items/npcmenu.bulk.dfn) and added some new shopping lists (dnfdata/items/shoplist.dfn)
	Added some new item definitions:
		blank_map (0x14ec), wheat sheaf (0x1ebd)
	Updated fishinglist.dfn (dfndata/items/itemlists/fishinglist.dfn) with list objects that can be referenced by in-game ADD command or scripts to add random items from the fishing itemlists
	All direct damage spells by default have a 1.0s delay before damage (and VFX) is applied, except Explosion which has a 2.5s delay
	All spells by default have a cast recovery duration of 1.0s; from the moment a spellcast is completed/moment targeting cursor appears, the player will be unable to cast any other spell for the duration of the cast recovery
	Spell cast times now follow this formula, though values set per spell and can be modified: 0.25 + ( spellCircle * 0.25 )
	Overhauled spell sound FX and VFX for for all spells
	Updated skills and stats of all implemented human NPCs (including vendors) to better match the state of those NPCs around the time of Pub15
	Fixed SPATTACK values for a couple of NPCs that were still using values based on spell bitmask instead of spell circle value
	Updated stats of Jukan and Meer NPCs (dfndata/npc/lbrraces.dfn) to match stats from official LBR guide
	Updated fishinglist.dfn, itemlist.dfn and lootlist.dfn to support new fishing updates
	Updated movable state of various items that can be fished up (pillows, some pieces of furniture) to ensure players can move them!
	Updated Item DFN entry for sextants to include script=5033 tag
	Updated DFN entries for various sea creatures (dfndata/npc/seacreatures.dfn) to adjust color of NPCs, loot and NPC AI
	Update stats, skills and loot for all currently implemented NPCs
	Updated words of power for Meteor Swarm spell to follow the same logic as other spells using Kal (Summon): Kal Des Flam Ylem
	Updated entry for Wisp in creatures.dfn to mark them as animals to stop monsters from attacking them (and dying)
	Fixed bug where reagents could not be dropped directly from ground and into newbie reagents bag, as the bag didn't have the proper setup for a container. Now inherits its setup from a regular bag (dfndata/items/magic/reagents.dfn)
	Split food2.dfn into new dfn files: cooking.dfn, vegetables.dfn, meats.dfn, fruits.dfn
	Added a bunch of additional door IDs to js/item/doors.js and dfndata/harditems/harditems.dfn
	Added an [ADMIN] section to dfndata/commands/commands.dfn to make it easier to give shard admins (via 'make admin) a different default look than other GMs
	Fixed incorrect non-combat music entry [MUSICLIST COMBAT] section of dfndata/regions/regions.dfn
	Added new music section to dfndata/regions/regions.dfn
		[MUSICLIST DEATH]	// Plays music from this list for players who are in the realm of the dead
	Assigned different MOREZ value to each explosion potion (dfndata/item/magic/potions.dfn) to make distinguishing between them easier
	Fixed issue where some iron ore in GM add menu was showing up and being added as a brazier instead
	Added some new house addons to house.dfn, and in the 'add menu, under Deeds > Houseaddon Deeds:
		loom (south)
		small forge
		anvil (south/east)
		spinning wheel (north/south/east/west)
		small bed 1 (south/east)
		small bed 2 (south/east)
		large bed 1 (south/east)
		large bed 2 (south/east)
		training dummy (south/east)
		pickpocket dip 1 (east)
		pickpocket dip 2 (east)
		dresser (south/east) // Disabled, doesn't work as container after being turned into addon
		abattoir (stone pentagram)
		flour mill (south/east)
		sandstone oven (south/east)
		brick oven (south/east)
		large forge (north/south/east/west)
	Updated some house addons (bear rugs, pentagram) to be added from top-left to bottom right, for more consistency when placing items
	Uncommented the dresser house-addon from 'add menu, as it now works as intended
	Added house-addons to ArchitectShopping SHOPLIST so they can be bought from Architect shopkeepers for roughly the cost of the material it would have taken to craft them. This is a temporary solution until crafting these have been implemented.
	Updated default region spawn file to evict the beekeeper from Skara Brae bank to make room for some actual bankers! The beekeeper is now tending to the bees outside the bank instead.
	Fixed issue where NPC vendors would not restock more than 1 leather tunic and/or leather gloves, because of a missing restock tag in the DFN entries for those items
	Removed kindling from the shoplist of Armourer vendors
	Bananas are now edible
	Bowyer shopkeepers will now restock more than 1 shaft and/or feather
	Provisioner shopkeepers will now restock more than 1 candle, lantern, various masks, kindling, flour
	Jeweler shopkeepers will now buy some gems (star sapphire and tourmaline) they were previously not so interested in
	Bowyer shopkeepers now sell fletching tools
	Added fletcher's tools as newbie item for players starting with Bowcraft/Fletching skill
	Animals that belong in the Arctic (polar bears, snow leopards, walrus) will no longer spawn in forests and jungles
	Hellhounds will no longer spawn in forest and jungles; they can now only be found in dungeons
	Silver Serpents have been removed from the "weakforestlist" NPCLIST, because they are anything but
	Added dungeon traps to 'add menu, under Buildings > Decs > Dungeon Traps
	Fixed incorrect IDs for secret doors in Item DFNs (they were off by 1, so would not work properly)
	Updated name of all secret doors in dfndata/items/building/doors.dfn to inherit name from tiledata instead
	Added secret door IDs to dfndata/harditems/harditems.dfn
	Fixed MORE values of "hard scripted" books in dfndata/items/misc/books.dfn
	Added Ice and Fire dungeon locations (dfndata/location/location.dfn) and added these to the GM travel menu (dfndata/item/travelmenu.dfn/travelmenu.bulk.dfn)
	Fixed body ID for ancient wyrm NPCs, which also fixes their name (dfndata/npc/dragons.dfn)
	Added more pre-defined books to dfndata/misc/books.dfn (and dfndata/items/misc/books.dfn):
		Quest of the Virtues – Volume 1 	// [quest_of_the_virtues_vol1]
		Fropoz's Journal 					// [fropoz_journal]
		Translated Gargoyle Journal 		// [translated_gargoyle_journal]
		Kabur's Journal 					// [kaburs_journal]
	Added 4 levels of dungeon treasure chests that can be placed out as spawn objects in dungeons, with items and valuables spawning inside on a regular interval. These can be found in dfndata/items/gmmenu/dungeon_treasure_spawners.dfn, with associated itemlists being found in dfndata/items/itemlists/itemlists.dfn (dungeontreasureloot1, dungeontreasureloot2, dungeontreasureloot3 and dungeontreasureloot4). They can also be located in the 'add menu under GM Menu > Dungeon Treasures
	Added spawn regions for dungeon treasure chests in the following areas:
		Covetous, Deceit, Despise, Destard, Fire, Hythloth, Ice, Shame, Wrong, Yew Crypts, Daemon Temple, Trinsic Passage, Cove Orc Fort, Terathan Keep, Vesper Bank, Trinsic Bank
	Cleaned up door-section of add-menu so only doors in their closed state remain (dfndata/items/building/doors.dfn)
	Updated scripts to make use of .usesLeft property instead of custom "UsesLeft" tag
		Updated DFNs to include usesleft and maxuses tags and uses_left_tooltip script for all tools with limited use
	Added new crafting menu and create DFN entries for Cooking skill
	Updated item stats like def, hp and value for all armors to match Pub15 era
	Added item definitions for weapons added in AoS to ToL UO expansions, but with stats balanced against existing weapons from Pub15 era
	Added armor definitions for armors added in AoS to ToL UO expansions, but with stats balanced against existing armors from Pub15 era
	Added named "alias entries" for all existing item definitions of weapon, armor and clothes, which enables adding those via their names as an alternative to their IDs. Items added via the named aliases will randomize between variations (north/south vs east/west) of the items if there are any. Syntax:
		'add item [nameOfItemWithoutSpaces] (example: 'add item vikingsword)
	Removed redundant files dfndata/items/gear/weapons/aos_weapons.dfn, dfndata/items/gear/weapons/se_weapons.dfn and dfndata/npc/spawntags.dfn
	Split out ranged weapon projectiles into a separate DFN (dfndata/items/gear/weapons/projectiles.dfn)

Misc Changes/Fixes:
	Updated dictionary files with additional messages used in relation to banning/unbanning players
	Reorganized teleport.scp file with logical groupings by map and area for easier maintenance
	Added additional teleport locations in teleport.scp for Dragon Turtle Spawn area, Khaldun, Terathan Keep, Valley of Eodon, Minax Fortress, Stygian Abyss, Underworld
	Updated JS docs with updated return value details for events
	Updated UOX3 docs to latest version
	Updated default DATADIRECTORY path in uox.ini to match current day default installation path of UO (thanks, dragonslayer!)
	Updated UOX3 documentation to reflect recent changes to IP handling/config, addition of 'decorate command and world templates, updated instructions for building from source
	Added system messages to dictionary files (Xuri)
	Updated JS docs with some missing Functions/Methods
	Added default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!)
	Updated documentation with most recent changes to UOX.INI settings
	Updated dictionaries with cooking-specific messages (Xuri)
	Fixed a few issues with various dictionary files
	Updated JS Docs
	The community-based spawn file now comes bundled with UOX3, and shard admins can choose whether to activate the spawns from this file during the welcome gump that pops up first time they log in
	Updated main UOX3 docs to add a simple filter feature, to make it easier to find stuff in the docs
	Updated dictionary files
	Added some missing dictionary entries
	Updated UOX3 documentation
	Included new and revamped JS docs, and removed old, out-of-date legacy JS docs

-==============================-
-= 08/11/2020 - UOX3 0.99.4  =-
-==============================-
Contributors: Xuri, punt, Dragon Slayer

Source Changes/Fixes:
	Updated warning messages printed in UOX3 when attempting to inherit an invalid/non-existent item or character script entry using the GET tag, to also include the name of the script entry being inherited
	Added new tag for ore types in skills.dfn that determines default chance of finding a particular ore (can be overridden via OREPREFS tag in regions.dfn):
		ORECHANCE - takes a value from 0 to 1000, where 1000 equals 100.0%
	OREPREFS tag in regions.dfn now uses [sectionName] of ore type from skills.dfn instead of actual name of the ore
	OREPREFS tag in regions.dfn now uses comma as separator instead of space. New syntax: OREPREFS=[oreType,oreChance]
	Added chance of getting different ore sizes when mining
	Added functionality to combine and transform larger ores into smaller ores by double-clicking some ore and targeting other ore instead of a forge
	Added functionality to return different amount of ingots when smelting ore, based on the size of ore being melted
	Fixed a bug introduced in 0.99.3 that would set invalid values for certain properties on newly created items and NPCs if the tag for that property in the DFNs accepted random values, but only supplied one value. Example: Amount=1, vs Amount=10 20. As part of the fix for this, added sanity checking for all item and character DFN tags that accept two values.
	Fixed weapon damage not appearing in status gump
	Fixed a spidermonkey compilation issue with xcode 12.0.1/Apple clang v 12.0.0 (clang-1200.0.32.2) (punt)
	Updated JS item properties MORE, MOREX, MOREY, MOREZ and SERIAL, and character property SERIAL, to pass values to JS scripts using JS_NewNumberValue() instead of INT_TO_JSVAL if the property value cannot fit inside JSVAL (checked with INT_FITS_IN_JSVAL)
	Added support in CResponse.cpp for client trigger word for securing containers in houses - TW_HOUSESECURE
	Updated CMulHandler::CheckStaticFlag() to match with statics that cover/extend across the specified Z coordinate, not just ones that have the same base Z level
	Updated CMulHandler::DoesMapBlock() to not deem map tiles as blocking if they are more than 16 Z (height of a character) higher than the specified Z coordinate to check
	Exposed method for finding corners of a multi to JS engine:
		.GetMultiCorner( cornerID ) - Gets coordinates for specified corner of multi (0 = NW, 1 = NE, 2 = SW, 3 = SE)
	Exposed various functions related to map, statics and multis to JS engine:
		CalcMultiFromSer( serial ) - Find a multi from a provided serial
		GetMapElevation( x, y, z, world) - Returns the map elevation at specified coordinates
		IsInBuilding( x, y, z, world, instance, checkHeight ) - Returns true if the specified location is inside a static building (underneath static items), or if player is inside a multi. If the checkHeight argument is true, player is only deemed inside a multi if there are multi-items above the player's head. If player is in a courtyard/on a rooftop, they will be deemed to be NOT in the building. checkHeight is not used for the static part of the function.
		CheckStaticFlag( x, y, z, world, tileFlagID ) - Checks to see if any statics at given coordinates has specified tile flag
		DoesStaticBlock( x, y, z, world, checkWater ) - Checks if statics at/above given location blocks characters
		DoesDynamicBlock( x, y, z, world, instance, checkWater, waterWalk ) - Checks if dynamics at/above given location blocks characters
		DoesMapBlock( x, y, z, world, checkWater, waterWalk ) - Checks if map tile at/above given location blocks characters
	Fixed an issue with validation of DFN tags for items and NPCs being loaded from scripts
	Fixed UOX3 not writing out names of item/NPC DFN sections with invalid data in tags
	Fixed an issue where non-GM characters could not open their own backpacks or take items from other containers or corpses due to some flawed comparisons of worldnumber/instanceID between character and items
	Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i
	Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc
	Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc
	When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to
	Added tracking of new, persistent properties for houses via cMultiObj.cpp/h:
		lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps
	Added a multitude of  new methods in cMultiObj.cpp/h to assist in improving the functionality of houses
	Added new tags for houses in house.dfn (default values applied if tag not specified):
		MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi
		MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi
		MAXVENDORS=10 - Max amount of vendors allowed in a multi
		MAXBANS=50 - Max amount of bans in a multi's ban list
		MAXFRIENDS=50 - Max amount of friends in a multi's friend list
		MAXGUESTS=50 - Max amount of guests in a multi's guest list
		MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list
		MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi
		SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi
		FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses!
		INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses.
		BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead
		BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead
	Added JS Event:
		onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi.
	Updated JS Events:
		onEntrance() - can now trigger both for multi being entered and/or object entering
		onLeaving() - can now trigger both for multi being left and/or object entering
		onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled
	Added JS Multi methods:
		.IsBoat() - Returns whether the item (or multi) is a boat
		.IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi
		.IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi
		.IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi
		.IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi
		.IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi
		.AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi
		.RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi
		.AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi
		.RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi
		.ClearOwnerList() - Clears all entries from a multi's (co-)owner list
		.ClearFriendList() - Clears all entries from a multi's friend list
		.ClearGuestList() - Clears all entries from a multi's guest list
		.ClearBanList() - Clears all entries from a multi's ban list
		.SecureContainer( itemToSecure ) - Secures a container in a multi
		.UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi
		.IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi
		.LockDownItem( itemToLockDown) - Locks down an item in a multi
		.ReleaseItem( itemToRelease ) - Releases a locked down item in a multi
		.KillKeys() - Deletes ALL keys associated with a multi
		.AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers
		.RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers
	Added JS Item (Multi only) properties:
		.lockdowns - Get the number of lockdowns in a multi
		.maxLockdowns - Get/Set the max number of lockdowns allowed in a multi
		.secureContainers - Get the number of secure containers in a multi
		.maxSecureContainers - Get/Set the max number of secure containers allowed in a multi
		.trashContainers - Get the number of trash containers in a multi
		.maxTrashContainers - Get/Set the max number of trash containers allowed in a multi
		.friends - Get the number of friends in a multi's friend list
		.maxFriends - Get/Set the max number of friends allowed in a multi's friend list
		.guests - Get the number of guests in a multi's guest list
		.maxGuests - Get/Set the max number of guests allowed in a multi's guest list
		.owners - Get the number of owners in a multi's owner list
		.maxOwners - Get/Set the max number of owners allowed in a multi's owner list
		.bans - Get the number of banned players in a multi's ban list
		.maxBans - Get/Set the max number of banned players allowed in a multi's ban list
		.vendors - Get the number of player vendors in a multi
		.maxVendors - Get the max number of player vendors allowed in a multi
		.deed - Get the item sectionID for deed used to place multi
		.isPublic - Get/Set the private/public state of a multi
		.buildTimestamp - Get the timestamp for when the house was originally placed
		.tradeTimestamp - Get the timestamp for when the house was last traded to another player
		.banX - Get/Set the ban location X offset for the multi
		.banY - Get/Set the ban location Y offset for the multi
	Added JS Character properties:
		.multi = Get/Set the multi object the character is in
		.accountNum = Get the account number the character belongs to
		.housesOwned = Get a count of houses owned by the character
		.housesCoOwned = Get a count of houses co-owned by the character
	Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis
	Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through:
		"default" or no parameter - all characters inside the multi
		"owner" - players on multi's owner list
		"friend" - players on multi's friend list
		"guest" - players on multi's guest list
		"banned" - players on multi's ban list
	Added new INI tags to a new section of uox.ini called [houses]
		DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses
		PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0)
		TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0)
		MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked
		MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character
		CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time
		COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners
	Added new INI tags in [settings] section of uox.ini:
		ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default.
		MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125.
	Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable:
		All house-related menus now fully handled through JS
		All house commands and other functionality now fully handled through JS
		Removed redundant hard-coded house functionality
		Implemented Co-owners, friends, guests for houses, with access rules in place for entry, lockdowns, house commands, etc.
		Implemented Private and Public houses
		Implemented Secure Containers and Trash Barrels
		Definable max lockdowns, secure containers, player vendors, bans, friends, guests, owners, trash containers and more - per house type
		JS scripts can now be attached directly to houses
		Doors in houses can be marked as front doors or interior doors, and will be treated differently with regards to private and public houses
		Fixed an issue with house doors being left behind after demolishing houses while their doors were open
		Fixed an issue where GMs could be banned from player houses
		Added Line of Sight checks to speech, to give players some privacy in their own homes
		Updated house placement code to more accurately check for other multis, dynamic and static objects when placing houses; now requires free space around each house that cannot be blocked by other houses or items that can block player movement, and disallows placement of houses on roads
		Updated house placement code to move characters blocking house placement to SE corner of the house
		Updated house placement code to disallow placing houses in guarded regions, or in dungeons
		Added new DFN tag for regions to enable/disable player houses in specific regions: HOUSING=0/1
		Added new JS property to Regions that can be used to determine or change state of player housing in a region: .canPlaceHouse()
		Updated rules for usage of dye tubs to dye locked down items; now only house owners or co-owners may dye locked down items
		Updated rules for usage of the following locked down items in a house, which are now only usable by house owners and co-owners
			Dyes, Guildstone Deeds, Recall Runes (renaming), Rename Deeds, Townstone Deeds, House Deeds, Boat Models, Player Vendor Deeds, Ore, Hair Dye
		Updated rules for usage of the following locked down items in a house, which are now only usable by house owners, co-owners	and friends:
			Keys, Dye Tubs, Magic Scrolls, Fireworks Wands, Magic Wands, Smithing Tools, Mining Tools, Fishing Poles
		Updated item lockdown rules to allow locking down (and releasing) items in a container as long as the container is locked down, and to only allow releasing a locked down container if it's empty of locked down items
		Updated item lockdown rules to only allow locking down movement-blocking items further than 2 tiles away from doors
		Updated rules for releasing items in houses - now the house owner can release any locked down items, co-owners can release items locked down by themselves or by friends, while friends can release only items locked down by themselves
		Added some feedback to player about why their attempted house placement failed
		Items added by GMs directly into multis will now decay based on the house-specific decay timer instead of the regular one
		Fixed an issue that could cause items to almost instantly decay after being released from lockdown in a house
		Placing house add-ons now properly takes into account SPACEX and SPACEY values when checking if they can fit in selected area of houses
		House add-ons can now be converted back into house add-on deeds by chopping them with an axe
		Added new item type - IT_HOUSEADDON (201) - used by house add-ons placed in player houses
		Fixed a bug where keys would stop working after being added to a keyring, and would turn into blank keys upon release from the keyring
		Added visitor count for public player houses, which keeps track of how many visits a public house has received, with each player counted max 1 time every 24 hours
		Fixed an issue with FindPlayersInOldVisrange() where it didn't take into account that players could see buildings further away than the standard update range. This could cause players to see ghost images of buildings if they were at the "right" distance when the building was being demolished
	Fixed a bug when checking if dynamic items were blocking valid spawn locations for NPCs, some function arguments were in the wrong order!
	Improved code that finds valid spawn locations for items and NPCs spawned via spawn regions. As server gradually builds up lists of valid spawn locations per region over time, it will start using these lists more often, rather than always look for brand new spawn locations.
	Fixed a bug with CMulHandler::CheckStaticFlag() that prevented NPCs from spawning inside buildings with no static floors!
	Exposed character property .accountNum to JS engine
	Extended CDataList class to include a Clear() method for clearing lists
	Updated JS File method .Open() to support an optional, third argument - subFolderName - that defines in which sub-folder of UOX3/shared/ to store/look for a file. If no third argument is supplied, UOX3 will default to using the shared folder itself.
	Updated JS File method .Length() to return a value of -1 for files that don't exist
	Added new code function, exposed to JS engine with same parameters, which simply checks if a given tile ID has a specific flag
		bool CheckTileFlag( UI16 itemID, TILEFLAG flagToCheck )
	Added JS function used to find the root container of an item (if any)
		FindRootContainer( itemSerial )
		FindRootContainer( item )
	Added new JS function that allows deleting files from UOX3/shared/ folder or subfolders of shared folder. If no subFolderName is provided, looks for file directly in shared folder itself. Restrictions on file- and folder-names apply.
		bool DeleteFile( fileName, subFolderName )
	Added new JS functions for checking if a specific client or server feature is enabled. See documentation for full list of client/server features.
		GetClientFeature( bitNum ) // Returns true if specified client feature is enabled on server
		GetServerFeature( bitNum ) // Returns true if specified server feature is enabled on server
	Added new JS function for returning the value of almost any server setting from UOX.INI
		GetServerSetting( settingNameInDoubleQuotes )
	Updated JS function DoesDynamicBlock() with two new parameters - checkOnlyMultis and checkOnlyNonMultis
	Updated JS function DoesMapBlock() with two new parameters - checkMultiPlacement and checkForRoad
	Fixed an issue where a LoS check would prevent players from accessing containers in their own backpack
	Added new functions in findfuncs.cpp to make it easier to find items near another object or location:
		findNearbyItems( object, distance )
		findNearbyItems( x, y, worldNumber, instanceID, distance )
	Added new Item property - maxItems - used by containers to determine their max item capacity
	Added new Item property - totalItemCount - used to get total item count in a container (including sub-containers)
	Added check for max item capacity when creating new items that are added to a character's backpack - items will be created below character's feet if backpack is full!
	Added new DFN tag for items, used by containers to determine item capacity for a given container:
		MAXITEMS=# // 125 is the default for all containers if not set
	Added new JS Item properties:
		.maxItems // gets/sets item capacity for a given container
		.totalItemCount // gets total item count in a container, including sub-containers
	Updated item tooltips for containers to show accurate total item count, as well as to display max item capacity
	Fixed a bug where picking up items from a non-locked down pile of items on the floor inside a multi could cause the remaining pile to be seen as no longer inside the multi, disallowing locking it back down and causing it to decay based on regular decay timer instead of house-specific one
	Updated various JS scripts and hardcoded targeting functions to disallow the targeting of locked down resources using skills and tools
	Updated JS Method TextMessage() to support three extra, optional parameters. Note that if one optional parameter is included, all preceding optional parameters are also required!
		speechTarget - What kind of target is this message intended for?
			0 - Only visible for sender and receiver of message
			1 - Visible to all players in range
			2 - Visible to all NPCs and players in range
			3 - Visible to all PCs everywhere + NPCs in range
			4 - Visible to all PCs everywhere (broadcast)
			5 - Only visible for the receiver of the message
		speechTargetSerial - The serial of the receiver of the message, used if speechTarget is 0 or 5
		speechFontType - The type of font to display the text in. Defaults to normal.
		    0 - Bold
		    1 - Normal with shadow
		    2 - Bold with shadow
		    3 - Normal
		    4 - Gothic
		    5 - Italic
		    6 - Small, dark
		    7 - Colourful
		    8 - Runic (only works with CAPS)
		    9 - Small, light
	Added timestamp to worldsaves in console, to make it easier to see when a particular world-save was done
	Added info about compiler/environment displayed at the top of the UOX3 console during startup
	Fixed some a couple of issues with compiling on Linux.
	Fixed an issue with tradetimestamp for houses
	Updated JS command set to support setting language for player characters directly instead of getting it from UO client - though it will still attempt to do this if selected language is ZERO. Useful for testing multiple languages, and also opens up for possibility of letting players/GMs choose a language manually!
	Fixed a server crash caused by container tooltip updates being attempted sent to invalid sockets in PlaceItem() function of items.cpp
	Fixed an issue with books where server could get stuck in an infinite loop if number of lines per page was higher than 8. Now capped at 8 lines per page.
	Renamed item type enum IT_READABLEBOOK to IT_BOOK, since it's the item type used by both readable and writeable books.
	Changed ANIMALATTACKCHANCE to use a scale of 1 to 1000 instead of 1 to 100, for additional granularity in setting the chance for animals to get attacked by monsters. An INI value of 15 now translates as 1.5% chance (per NPC AI cycle!) instead of the previous 15%
	Removed new GetEnvironment() function and expanded on the use of the existing OS_STR define in Config.h
	Updated fireworks wand (IT_FIREWORKSWAND) so effects no longer play permanently in ClassicUO client
	Removed some unused item types that have been marked as candidates for deletion for over 15 years (IT_CHAOSGATEOPENER, IT_CHAOSGATE, IT_GUILLOTINEANIM, IT_TRAININGDUMMYANIM)!
	Fixed an issue with advanced pathfinding where NPCs in some cases would stop 1 tile before reaching the target location
	Fixed an issue where no crafting resources would ever be lost if failing to craft an item that only required 1 of a given crafting resource
	Fixed an issue with pathfinding that could cause NPCs to queue up in long rows when attempting to reach the same target in combat when advanced pathfinding was disabled
	Added functionality to allow guild masters to move guildstones by transforming these into portable stones that can be used to place the guildstones in new locations
	Updated timestamp for packet logs to include milliseconds for greater granularity
	Another attempt at fixing a crash on shutdowns caused by encountering fatal errors

JScript Changes/Fixes:
	js/server/house/house.js (15000) - handles detection of house commands and characters entering/leaving houses
	js/server/house/houseSign.js (15001) - contains and handles all house-related gumps/menus and what is shown when players interact with house sign
	js/server/house/houseCommands.js (15002) - handles functionality of house commands and other functionality such as transfer of ownership, demolishing house, etc.
	js/server/house/houseDeed.js (15003) - handles initial rules that allow/disallow placement of additional houses for players
	Added new JS script (js/items/trashbarrel.js) with trash barrel functionality for houses. Trash barrels that are marked as secure containers are only accessible by owners, co-owners and friends of the house. Various options available at top of script.
	Updated js/items/axe.js to support chopping up trash barrels and house add-ons in houses owned by the player
	Implemented strongboxes (js/server/house/strongbox.js) for co-owners of a house, which can be placed with the house command "i wish to place a strongbox". Max capacity is 25 items
	Updated 'REMOVE command to take an optional parameter - itemID. If supplied, the command will remove all items with this itemID from a targeted container
	Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client
	Updated JS command set to allow setting poison-level on items ('set poison #) and hunger-level on characters ('set hunger #)
	Fixed an issue with js/item/food.js that prevented poisoned food from poisoning characters when eaten
	Fixed an issue with js/skill/poisoning.js that prevented players from poisoning food!
	Committed missing js files for houses to repository!
	Fixed an issue with 'teleport and 'telestuff commands that could cause character to end up outside of map when using ClassicUO client
	Updated a bunch of .js files to use the proper .language socket property instead of the erroneous .Language!
	Fixed an issue with converting a house from public to private while there were player vendors in the house
	Ported player vendor deeds and placement of player vendors to JS (UOX3/js/server/house/playerVendorDeed.js) and added checks to make sure player is in a house they own, that can hold more player vendors, and that they are trying to add the vendor in a location that's not blocking any doors.
	Partially ported guildstone deed functionality to JS (UOX3/js/item/guildstone.js) and added various additional checks to make sure player is in a house they own, they're not already in a guild, no other guildstones exist in the house and they're not trying to place it in a location that blocks any doors. Main guild creation code is still hardcoded, though.
	Added missing guildstone.js and playerVendorDeed.js
	Updated version number and release changelog

DFN Changes/Fixes:
	Added default ORECHANCE values for each ore type in skills.dfn, based on estimated chance of finding these ore types around the era of Publish 15/16 in Official UO
	Added missing layer tag to fishing pole items in DFNs (dragon slayer)
	Added missing item definitions for wooden kite shields (0x1b78 and 0x1b79) based on coloured ingots
	Added house addon deeds for bear rugs (dragon slayer)
	Gave NPCs [f_murderer-archmage] and [m_murderer-archmage] some dexterity
	Added new item to dfndata/items/containers/misc.dfn - [trashbarrel]
	Added new region (247) that covers path to Valley of Eodon in Felucca
	Added new region (248) that covers Valley of Eodon in Ter-Mur, with player housing disabled
	Added new region (249) that covers entire T2A lands, with player housing disabled
	Updated SPACEX and SPACEY values for all houses in dfndata/house/house.dfn to match updated house placement code
	Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons
	Added NODECAY tag to all signs and doors in dfndata/house/house.dfn
	Added FRONTDOOR or INTERIORDOOR (as appropriate) to all doors in dfndata/house/house.dfn
	Added BANX and BANY to specify ban location for some houses in dfndata/house/house.dfn instead of relying on finding SE corner automatically

Misc Changes/Fixes:
	Updated dictionary files with various new strings related to mining
	Updated dictionary files with new messages primarily related to housing
	Updated UOX3 documentation with complete list of item types, and item layers, in addition to other small additions.
	Updated JS Documentation

-==============================-
-= 16/09/2020 - UOX3 0.99.3a  =-
-==============================-
Contributors: Xuri

Source Changes/Fixes:
	Refined build notes
	Updated Debug Information Format for Debug x64 platform in VS project properties to Program Database for Edit and Continue
	Minor fix for a half-broken system (automatic adding of items to add-menu) that needs to be revamped or removed
	Commented out some thread-locking code that was causing UOX3 to crash under certain circumstances
	Fixed a few cases of threads sleeping for microseconds instead of milliseconds
	Replaced all calls to UOXSleep with direct call to std::this_thread::sleep_for(), and removed UOXSleep function from funcdecl.h
	Fixed an issue where crafting skills might consume the wrong resource if additional resources of the same ID but different color were present in player's backpack
	Improved AmbientFootsteps feature so footstep sounds are played more in tune with character movement
	AmbientFootsteps now also play for NPC movement
	Changed how code handles randomizing between MINTIME and MAXTIME values from region spawners; now multiplies values by 60 (to get seconds) before randomizing, instead of after, to make use of full range of seconds between the values (which are in minutes)
	Added a DEBUGMOVEMULTIPLIER define in cChar.cpp used to multiply NPC movement delays by the specified value (1.75 by default) when running UOX3 in debug mode, due to reduced server performance in debug mode

DFN Changes/Fixes:
	Fixed an issue with "Gold" ore/ingot type, which was mislabelled as "Golden" in the ORE_LIST section of skills.dfn

Misc Changes/Fixes:
	Undid dictionary rename from ENG to ENU and FRE to FRA; these are not actual language codes, but groups of language codes - ENU covers all English language codes, FRA covers all French ones.
	Adjusted default global NPC movement speeds in [speedup} section of uox.ini to use less extreme values
	Documentation updates:
		Added section on DFN tags for Character, Item, Region, SpawnRegion and Weather DFNs.
		Added Feature documentation for Mining and customizable ores
		Added More details in feature documentation for Spawn Regions
		Updated feature documentation for Dictionaries
		Added more details in UOX3 history section

-==============================-
-= 10/09/2020 - UOX3 0.99.3   =-
-==============================-
Contributors: Xuri, punt, Tuan H Truong

Source Changes/Fixes:
	Updated CMakeSettings.json to include options for 64-bit Debug/Release builds
	Updated build notes in documentation and readme
	Added version info and other details to uox3.rc
	Minor updates to JS docs and UOX3DFNTags
	Renamed FRE and ENG dictionary file extensions to FRA and ENU
	Updated VS Solutions/Projects for UOX3 and SpiderMonkey to support compiling 64-bit version of UOX3 for Windows 8/10
	Fixed an issue in cConsole.cpp that prevented compiling 64bit version of UOX3 for Windows
	Fixed grammar mistake in automake.sh that prevented compiling SpiderMonkey on MacOS
	Updated readme with extended compiling details in spoiler tags
	Undid static cast in jsapi.h
	Fixed issue with two different versions of cPlayerAction.cpp with different case in name causing issues
	The UOX3/shared/ directory will now be created automatically on startup if it doesn't already exist
	Updated README.md and UOX3 documentation with improved instructions for installing necessary build tools on Linux and how to copy files to working directory after compiling.
	Moved automake.sh from source directory to project root, and made it copy binary to project root directory after compiling
	Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS
	Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows
	Updated SpiderMonkey from v1.6.0 to v1.7.0
	Added optimization flag -O2 for release build in CMakeLists.txt in project root
	Added StringUtility file with general common string manipulation functions
	Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function.
	Overall code cleanup to remove/replace platform-dependent code
	Replaced potentially unsafe usage of C string stuff like sprintf, vsprintf, vsnprintf, strncat, strcpy and strlen throughout the code with calls to a format() function containing only a single, safe use of vsnprintf, ensuring there's a single place of failure if there's anything to fix and and making it easy to potentially replace this with std::format from C++20 when the time comes.
	Replaced usage of char in many places with std::string
	Started process of replacing UString usage with functions provided through StringUtility instead
	Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem
	Replaced platform specific time handling by using cross-platform chrono library
	Removed UOX namespace to reduce complexity
	Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process
	Removed ODBC support; it hasn't been touched since the initial implementation in 2008, and there is a lack of someone to maintain the code.
	Removed some platform specific files like uoxlinux.h, which is no longer required
	Removed legacy crash protection code, and removed support for cluox
	Removed legacy "support" for Borland compiler
	Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported
	Removed legacy BUILD folder with outdated compilation instructions
	Removed old Changelog file (merged into Changelog.txt)
	Fixed a pointer bug for items in multis on world load
	Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS
	Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS
	Paths in uox.ini should now load properly on all platforms regardless of whether those paths use slashes or backslashes, and whether or not they end in a slash/backslash
	Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h
	Replaced parsing of UOX.INI tags with a system that's more easily maintainable
	Misc code cleanup to reduce amount of warnings and increase cross-platform compatibility
	Removed Platform.h from project, select portions moved to Config.h
	Improvements to handling of UOP format; now takes a cleaner approach, loads files faster
	All references in code and scripts to "midi" changed to "music", to reflect fact that modern clients don't actually even have midi files. This change covers both GM commands, DFN tags in regions.dfn and JS methods/properties.
	Added new socket property for storing temporary int in JS - tempInt2
	Added new socket property for storing temporary object in JS - tempObj2
	Fixed an issue that prevented characters from vanishing from the the sight of players when teleporting to a different instance
	Added support for ClassicUO client's WorldMap tracking packet (0xf0) for guildmembers/partymembers. This is the same packet as Razor uses for feature negotiation, so merged the handling of those two packets together into CPIKrriosClientSpecial, which can also be extended to handle other uses of this packet.
	Added new UOX.INI setting  whether shard should respond to ClassicUO client's WorldMap tracking packets for guildmembers/partymembers
		CLASSICUOMAPTRACKER=0
	Added support (UOPInterface.cpp/hpp) for loading map files in UOP format, allowing UOX3 to use map files from clients up to at least v7.0.86.2 without requiring files to be converted to mul format first. Loading of UOP files is slower than for equivalent mul files, but after startup, the performance of lookups remains the same for both
	Updated TWEAK, INFO in code and ISTATS, CSTATS in gumps.js to display 4-digit hex-ids for IDs consistently in the format of 0x####
	Fixed issue that would disconnect ClassicUO users if they used WorldMap feature in the client, via CPIKrriosClientSpecial() handler in CPacketReceive.cpp/h, which will handle all things packet 0xF0. As of yet it doesn't respond correctly to the WorldMap-related version of the packet, but at least it no longer disconnects this client from the server.
	Fixed an issue with CPSendGumpMenu::AddText() that caused guildstones and townstones to crash server when used
	Fixed an issue with CTownRegion::DisplayTownMenu() that prevented players from joining a town when interacting with a townstone for the first time
	Replaced platform specific ways of looking up and loading DFN files in cServerDefinitions.cpp with a common, cross-platform method using std::filesystem. This also fixes an issue with loading of map0.mul on Linux when maps.4xclients.old is present in dfndata/maps/ directory
	Misc changes to address errors and warnings when compiling on 64bit Linux
		%li changed to %i
		%lu changed to %u
		Some (SERIAL) changed to (UI64)
		Some size_t changed to UI32
	Embraced the usage of R32, R64, SI16, UI16, SI32, UI32, SI64 and UI64 typedef aliases as replacement for built-in types throughout the sourcecode:
		typedef float				R32;
		typedef double				R64;
		typedef signed char			SI08;
		typedef unsigned char		UI08;
		typedef signed short int	SI16;
		typedef unsigned short int	UI16;
		typedef signed int			SI32;
		typedef unsigned int		UI32;
		typedef signed long long	SI64;
		typedef unsigned long long	UI64;
	As part of this process, UI32 was redefined from unsigned long int to unsigned int, and SI32 from signed long int to signed int to ensure the size of variables using these remain the same (32bit) across both Windows, Linux and MacOS for both 32bit and 64bit platforms
	Replaced instances of toLong() with toInt(), and toULong() to toUInt()
	Replaced instances of "long" and "int" with SI32 where possible
	Replaced instances of "unsigned long" and "unsigned int" with UI32 where possible
	Replaced instances of "float" with R32 where possible
	Fixed an issue with void CSpawnRegion::SetNPCList() and void CSpawnRegion::SetItemList() that could cause compilation to fail on Linux
	Added an FX playing for successful uses of the parrying skill
	Successfully parrying an attack will send a sysmessage to the player informing them of their feat, if DISPLAYHITMSG is enabled in UOX.INI
	Fixed placing a house addon teleporting player to the location of the addon
	Added support for TELEPORT tag to regions.dfn. If set to 0, use of the Teleport spell is not allowed in a given region. Defaults to 1 if not specified.
	Exposed canTeleport JS property for regions
	Added missing UOX.INI settings for feature negotation, as mentioned in previous commit!
	Added support for feature negotiation with Razor, AssistUO and other assistant tools that support this feature via new UOX.INI settings:
		ASSISTANTNEGOTIATION=0 		// If enabled (1), sends a request (packet 0xF0) to negotiate features with assistant tools upon login. Defaults to (0)
		KICKONASSISTANTSILENCE=0 	// If enabled (1), disconnects clients that don't respond (with packet 0xF0) to request via assistant tool within 30 seconds. Defaults to (0)
	Added new section at bottom of UOX.INI to allow shard admins to control which assistant features get disabled:
		[disabled assistant features]
		{
		AF_FILTERWEATHER=0 		// Weather Filter
		AF_FILTERLIGHT=0 		// Light Filter
		AF_SMARTTARGET=0 		// Smart Last Target
		AF_RANGEDTARGET=0 		// Range Check Last Target
		AF_AUTOOPENDOORS=0 		// Automatically Open Doors
		AF_DEQUIPONCAST=0 		// Unequip Weapon on spell cast
		AF_AUTOPOTIONEQUIP=0 	// Un/Re-equip weapon on potion use
		AF_POISONEDCHECKS=0 	// Block heal If poisoned/Macro IIf Poisoned condition/Heal or Cure self
		AF_LOOPEDMACROS=0 		// Disallow Looping macros, For loops, and macros that call other macros
		AF_USEONCEAGENT=0 		// The use once agent
		AF_RESTOCKAGENT=0 		// The restock agent
		AF_SELLAGENT=0 			// The sell agent
		AF_BUYAGENT=0 			// The buy agent
		AF_POTIONHOTKEYS=0 		// All potion hotkeys
		AF_RANDOMTARGETS=0 		// All random target hotkeys (Not target next, last target, target self)
		AF_CLOSESTTARGETS=0 	// All closest target hotkeys
		AF_OVERHEADHEALTH=0 	// Health and Mana/Stam messages shown over player's heads
		AF_AUTOLOOTAGENT=0 		// (AssistUO only) The autoloot agent
		AF_BONECUTTERAGENT=0 	// (AssistUO only) The bone cutter agent
		AF_JSCRIPTMACROS=0 		// (AssistUO only) Javascript macro engine
		AF_AUTOREMOUNT=0 		// (AssistUO only) Auto remount after dismount
		AF_ALL=0 				// All features
		}
	Misc code and documentation cleanup:
		Updated and standardized function comment blocks throughout entire codebase
		Grouped getters and setters together in pairs and documented them as one
		Removed empty and/or non-useful information from comment blocks
		Removed unused function from cItem.cpp/h - IncID() - formerly used to change IDs for doors
	Added new feature - Instances
		Objects (characters, items, multis, spawnregions) can now make use of a 5th parameter to determine their location in the game world. In addition to the traditional X, Y, Z and WORLDNUMBER parameters, a new one has been added - INSTANCEID - that allows objects to exist at the same coordinates in the same world, but in different "dimensions". Code has been updated in multiple places to support this, and a default instanceID of 0 is assumed if nothing else is specified.
	Added support for new DFN tag in town regions, spawn regions and locations - INSTANCEID (defaults to 0 if not present)
	Added support for another start location parameter after worldNum in UOX.INI representing instanceID (defaults to 0 if not present)
	Updated TWEAK menu to include WorldNumber and instanceID
	Fixed BaseWeight option in TWEAK menu
	Updated CBase_Teleport - now takes an optional 5th parameter instanceID
	Updated SE_SpawnNPC now takes an optional 5th parameter - instanceID
	Updated SE_FindMulti now takes an optional 5th parameter - instanceID
	Updated SE_GetItem now takes an optional 5th parameter - instanceID
	Updated SE_FindItem now takes an optional 6th parameter - instanceID
	Added new JS property for Items, Characters, Regions: .instanceID
	Added JS property for Regions: .members - returns comma-separated list of town member serials
	Exposed SpawnRegions to JS engine, and updated JS docs with details:
		SpawnRegion JS Functions
			IterateOverSpawnRegions()
			GetSpawnRegion( spawnRegNum )
			GetSpawnRegionCount()
		SpawnRegion JS Properties
			name
			regionNum
			itemList
			npcList
			item
			npc
			maxItems
			maxNpcs
			itemCount
			npcCount
			onlyOutside
			prefZ
			x1
			y1
			x2
			y2
			world
			instanceID
			minTime
			maxTime
			call
	Updated CGump_AddToolTip() gump method - now accepts up to 10 optional cliloc arguments to go with specified cliloc. Can also be used to display custom tooltip text if used with a cliloc like 1114778. Cliloc arguments and custom tooltips only work in client version 7.0.16.0 or above.
	Updated CPSendGumpMenu::AddCommand() to use the safer vsnprintf instead of vsprintf, and increased msg buffer size from 512 to 1024
	Updated CPIUpdateRangeChange::Handle() to include additional client definitions: CV_HS2D and CV_HS3D
	Added new pack types in PackTypes enum:
		PT_GAME_BACKGAMMON, PT_GAME_CHESS, PT_MAILBOX1, PT_MAILBOX2, PT_MAILBOX3, PT_MAILBOX4, PT_MAILBOX5, PT_MAILBOX6, PT_MAILBOX7, PT_MAILBOX8, PT_MAILBOX9, PT_WALLSAFE, PT_SAFE
	Updated getPackType() with additional container definitions for the following pack types:
		PT_RBASKET - winnoning basket (0x1882)
		PT_GCHEST - gargoyle chests (0x4025, 0x4026), metal chests (0xA304, 0xA305), rusty metal chests (0xA306, 0xA307), gold chests (0xA308, 0xA309), barnacle metal chests (0xA30A, 0xA30B)
		PT_GAME_BACKGAMMON - backgammon boards (0x0E1C, 0x0FAD)
		PT_GAME_CHESS - chess board (0x0FA6)
		PT_MAILBOX1 - dolphin mailbox (0xA202, 0xA203, 0xA204, 0xA205)
		PT_MAILBOX2 - squirrel mailbox (0xA206, 0xA207, 0xA208, 0xA209)
		PT_MAILBOX3 - barrel mailbox (0xA1F5, 0xA1F6, 0xA1F7, 0xA1F8)
		PT_MAILBOX4 - light mailbox (0xA268, 0xA269, 0xA26A, 0xA26B, 0xA26C, 0xA26D, 0xA26E, 0xA26F)
		PT_MAILBOX5 - sitting kitten mailbox (0xA3EB, 0xA3EC, 0xA3ED, 0xA3EE)
		PT_MAILBOX6 - standing kitten mailbox (0xA3EF, 0xA3F0, 0xA3F1, 0xA3F2)
		PT_MAILBOX7 - scarecrow mailbox (0xA3F3, 0xA3F4, 0xA3F5, 0xA3F6)
		PT_MAILBOX8 - lion mailbox (0xA3F7, 0xA3F8, 0xA3F9, 0xA3FA)
		PT_MAILBOX9 - square gray mailbox (0x4141, 0x4142, 0x4143, 0x4144)
		PT_WALLSAFE - wall safe (0x8B8F, 0x8B90)
		PT_SAFE - safe (0x9C18, 0x9C19)
	Updated CItem::IsShieldType() to include shield IDs from SA expansion
	Added IL_TALISMAN (0x09) and IL_FACE (0x0F) to ItemLayers enum to allow equipping talismans and faces in clients that support this
	Updated getWeaponType() (in both code and JS) with additional weapon definitions:
		ONEHND_LG_SWORDS - anquique sword 1 (0xA33B, 0xA33C), antique sword 2 (0xA33D, 0xA33E), antique sword 3 (0xA33F, 0xA340), skull sword (0xA341, 0xA342), gargoyle skull sword (0xA345, 0xA346)
		LG_MACES - skull staff (0xA343, 0xA344), gargoyle skull staff (0xA347, 0xA348)
	Added new JS Gump Methods:
		AddPicInPic( x, y, gumpID, width, height, spriteX, spriteY ) // Add sprite image in dialogs, requires client v7.0.80.0 or above
		AddImageProperty( serial ) // Add properties(?) of a specific item
	Fixed a server crash related to world saves, where items being cleaned up were not being removed properly from the 	MapRegions they were in, resulting in a crash when attempting to save non-existent items out to the worldfiles.
	Fixed an issue that could cause GMs to become permanently squelched
	Fixed an issue where the newStatus parameter for the onFlagChange JS event was overwritten with oldStatus, and oldStatus parameter was never set
	Updated onDeath JS Event to include a second parameter - iCorpse:
		onDeath( pDeath, iCorpse ) // iCorpse is a reference to the newly created corpse of pDead
	Disabled detailed logging of spells loaded from spells.dfn on startup - was causing unnecessary slowdown
	Removed void Wiping( CSocket *s ) from cmdtable.cpp - unused and unreferenced function without a definition
	Removed handling of IT_KEY doubleclicking in code, as this is now handled in JS
	Removed bool isDoorBlocked( CItem *door ) from cPlayerAction.cpp - unused and unreferenced function without a definition
	Removed void CorpseTarget( CSocket *s ) from targeting.cpp - now handled in JS
	Removed broken cannon loading and spelldamage code - this should be done in JS instead
	Items that initiate a target cursor on use are now stored in tempObj property of player's socket, and distance to these items are checked again after player targets something
	House and boat deeds must now be in the player's inventory in order to successfully place a house or boat
	Updated AddButton and AddPageButton JS Methods (and Docs) to include an optional argument for ID of button when pressed. If the extra argument is not provided, the methods behave like before, using buttonImage + 1 for the pressed button:
		void AddButton( topHeight, topLeft, buttonImage, (buttonPressedImage) unk1, unk2, unk3 )
		void AddPageButton( topHeight, topLeft, buttonImage, (buttonPressedImage), pageNum )
	Fixed an issue where hair and beard values for characters created prior to 0.99.2j were never stored properly, by updating these values upon login
	Added additional ClientVersion enum values to start implementing support for clients above 7.0.24.0. Ini settings disabled by default.
	Updated packet 0x78 to always send item colour for clients above 7.0.33.1, which also fixes rendering of items on paperdoll for these clients
	Client requests sent by the Bandage Self macro (packet 0xBF, subcommand 0x2C) can now be handled in the JS engine via the onUseBandageMacro( socket, targetChar, bandageItem ) JS event (JS Docs updated with details).
	Removed a restriction on speech that prevented onSpeech JS event from triggering based on speech from dead player characters
	Fixed hairs and beards not being restored properly on player characters after dying and being resurrected (and then relogging)
	Updated vcx project files
	Added UOX3 CMake build system for Windows
	Updated repository readme to include build instructions for CMake
	Preparation for dragging UOX3 kicking and screaming into the 64bit Century
	Filepaths to spidermonkey in MSVC project are now relative to source folder
	Default language standard in MSVC project set to stdcpp17
	Added a check for compiler to fix 64bit Linux compiling
	Cleaned up some warnings
	Added c++17 flag to configure.ac
	CPU neutral fix
	Die parser rewritten and fuzzed, replaced with cxx17 features
	Fixed an Z-movement issue where NPCs could fall through upper-story floors of buildings and start walking at ground level instead
	Movement speed of pets and other NPCs following the player out of combat increased by 1.5 to make it easier for them to keep up
	Pets will now teleport to keep up with their owners if pathfinding fails
	NPCs with EVIL flag set, who highlight in red, will no longer highlight in grey if they are flagged as a criminal
	Criminal timer (and murder count decay) now keeps ticking even while a player is dead
	Fixed a spelling error in console.cpp
	Made Earthquake spell resistable
	Restored some code in magic.cpp that caused errors when casting spells
	Fixed an issue that prevented VALUE tags from being loaded properly from worldfiles, which broke persistent NPC vendors on server restart

JScript Changes/Fixes:
	Added some new commands to js/commands/custom/misc-cmd.js
		cont		// Targeted item will be made a container, set to nondecay and movable 2
		endfight	// Targeted character (and character being fought) will stop fighting
		getmulti	// Get multiObject for targeted item
		finditem	// Find item at layer X
		movespeed	// Set movement speed of target player (0x0 Normal, 0x1 Mounted, 0x2 Slow (walk only), 0x3 Hybrid ("jog"?), 0x4 Frozen)
	Fixed a issue in JS/COMMANDS/TARGETING/add.js that would display 'undefined' in system message when adding raw/base items
	Updated default jail time in JS/COMMANDS/TARGETING/jail.js (and in code) from 100000 seconds to 86400 seconds (24 hours)
	Expanded XGO command in JS/COMMANDS/TARGETING/x.js to support optional world and instance parameters
	Updated healing.js to disallow usage of healing skill if target is in a house/multi not owned by either healer or healee
	Updated JS scripts making use of the above-mentioned JS Methods/Functions
	Updates keys.js with some distance checks
	Fixed superfluous arugment passed to switchGobletID function in js/server/resource/pitchers.js
	Removed some duplicate/unused local variables in js/commands/custom/misc-cmd.js
	Removed an unused local variable in js/commands/targeting/dupe.js
	Fixed an issue with setting item type through the SET command
	Fixed an issue where the number of arrows or bolts in player's inventory was potentially miscalculated in js/item/archerybutte.js
	Fixed issue where pickpocket-dummy item visuals potentially didn't get updated properly in js/item/pickpocketdip.js
	Fixed an unreachable return statement in js/npc/ai/stablemaster.js
	Fixed incorrect ID for gargish maul in js/server/data/weapontypes.js
	Added some missing variable declarations in js/commands/custom/repeatingcmds.js, js/commands/delid.js, js/commands/targeting/hide.js, js/item/food.js, js/item/key.js, js/npc/ai/stablemaster.js

DFN Changes/Fixes:
	Updated regions.dfn to disable usage of Teleport spell within level 3 of the Wisp dungeon
	Updated regions.dfn to enable usage of RECALL spell in city/dungeon of Wind (so players can recall out of there)

Misc Changes/Fixes:
	Added new HTML based documentation in docs folder, and removed many old legacy docs that are either incorporated into this document already or no longer relevant for the current UOX3 version
	Fixed broken starting locations in UOX.INI
	Updated dictionary files with new entry about blocking attacks using parrying skill
	Updated dictionaries with new tweak menu entry texts
	Misc updates to JS Docs

-==============================-
-= 24/11/2019 - UOX3 0.99.2h  =-
-==============================-
Contributors: Xuri, Kitiara

Source Changes/Fixes:
	CustomTags (DFN and JS) now supports negative int values
	Fixed an issue introduced with starting locations that would dump new characters in the middle of the ocean
	Added new uox.ini flag for choosing a random starting location for new players (from list in uox.ini)
		RANDOMSTARTINGLOCATION=0	// 0 to disable (default), 1 to enable
	Corrected name of spell JS property AGRESSIVESPELL to AGGRESSIVESPELL
	Some more code cleanup
	Documented temp effect cases in code
	Additional function parameters passed as const references
	Changed RuntimeLibrary in Debug configuration in VS project file from MultiThreadedDebugDLL to MultiThreadedDebug to fix issues with unreadable characters in strings while debugging
	Fixed potential issue with checking for number of arguments in CFile_Pos()
	Merged fix for a crash issue related to the 'HOWTO command from Kitiara/UOX3
	Fixed support-messages from players not being stored and displayed in GM/Counselor queues
	Added more descriptive error messages in code and JavaScript when trying to set spawner-related object properties on non-spawner objects
	Fixed possible null pointer dereference
	Converted some C-style pointer casting to C++ style
	Added override specifier to some virtual methods that override base class virtual methods
	Some function parameters are now passed as const references as they're not being modified in the called function
	Resolved an issue with uninitialized struct members
	Removed some redundant conditional checks
	Made the boolean part of JS function RegisterSkill( <skillnum>, <bool> ) actually work; can now be used to disable/enable JS-implemented skills
	Fixed a bug with cHTMLTemplate::Process() where the same expression was used for both branches of a ternary operator
	Various minor cleanups; removed some unused variables, addressed some potential portability issues
	Fixed an issue with potentially undefined behaviour, where sprintf was being used with a single variable as both parameter and destination.
	Disabled SAFESEH linker option for debug build to enable "Edit and Continue" mode in Visual Studio
	Disabled loading of PRIV tag from regions.wsc, as it is currently unused (meant for townstones) and prevents loading certain updates to regions.dfn file
	Added support for SAFEZONE tag to regions.dfn. No hostile actions are allowed within zones where this tag is set to 1
	Added combat, spellcasting, stealing and snooping checks for safe zone
	Added safe zone check to damage portion of explosion potion
	Exposed isSafeZone JS property for characters

JScript Changes/Fixes:
	Updated clumsy.js and level1targ.js with corrected names for aggressiveSpell and canCastAggressive JS properties, and added checks for isSafeZone region JS property
	Added SETAMMOEFFECT, SETAMMOTYPE, GETAMMOEFFECT, GETAMMOTYPE, REGIONINFO and XREGIONINFO commands to misc-cmd.js
	Fixed pUser/pSock reference error in misc-cmd.js for command_BROWSE (Kitiara)
	Moved Create Food spell out to JavaScript
	Updated potion.js, provocation.js and enticement.js to check for safe zones

DFN Changes/Fixes:
	Updated spells in spells.dfn to include aggressive and resistable flags

Misc Changes/Fixes:
	Updated dictionaries with safezone message

-==============================-
-= 13/09/2018 - UOX3 0.99.2d  =-
-==============================-
Contributors: Xuri

Source Changes/Fixes:
	Fixed a server crash when start locations in uox.ini is empty; defaults to hardcoded location (Sweet Dreams Inn, Britain) if no start locations found
	Fixed tooltips on containers not updating when adding/removing items
	Added new UOX.INI setting for defining the amount of stamina lost when using the fishing skill
		FISHINGSTAMINALOSS=2	// The amount of stamina lost when using the fishing skill
	Fixed some issues in CHandleCombat::CastSpell() and level1targ.js that stopped NPCs from casting Heal on themselves
	Added new UOX.INI settings to make hardcoded damage to armor and weapons in combat more customizable:
		WEAPONDAMAGECHANCE=17 	// Chance of weapons taking damage when attacking
		WEAPONDAMAGEMIN=0		// Minimum amount of damage a weapon takes if damaged in combat
		WEAPONDAMAGEMAX=1		// Maximum amount of damage a weapon takes if damaged in combat
		ARMORDAMAGECHANCE=25	// Chance of armor taking damage when defending
		ARMORDAMAGEMIN=0		// Minimum amount of damage armor can take if damaged in combat
		ARMORDAMAGEMAX=1		// Maximum amount of damage armor can take if damaged in combat
	Added new UOX.INI settings for adjusting combat-speed on a global scale:
		GLOBALATTACKSPEED=1 	// for adjusting speed of melee and ranged attacks globally for all chars
		NPCSPELLCASTSPEED=1 	// for adjusting the overall speed of spellcasts for NPCs (base spellcast speed determined by SPADELAY tag in NPC dfns)
	Increased the chance of NPCs attempting to cast spells instead of doing regular attacks in combat-rounds
	Fixed issue where DISPLAYDAMAGENUMBERS and ATTACKSPEEDFROMSTAMINA settings in UOX.INI were overwriting the DISPLAYHITMSG setting instead of their own respective settings
	Fixed a server crash in CMulHandler::CheckStaticFlag() which could crash the server when using a client-version below 7.0.9.0
	Fixed a potential server crash in cSkills::FishTarget(), which would possibly crash the server when using a client-version below 7.0.9.0

-==============================-
-= 10/11/2013 - UOX3 0.99.2c  =-
-==============================-
Contributors: Xuri

Source Changes/Fixes:
	Fixed some issues in CHandleCombat::CastSpell() and level1targ.js that stopped NPCs from casting Heal on themselves
	Added new UOX.INI settings to make hardcoded damage to armor and weapons in combat more customizable:
		WEAPONDAMAGECHANCE=17 	// Chance of weapons taking damage when attacking
		WEAPONDAMAGEMIN=0		// Minimum amount of damage a weapon takes if damaged in combat
		WEAPONDAMAGEMAX=1		// Maximum amount of damage a weapon takes if damaged in combat
		ARMORDAMAGECHANCE=25	// Chance of armor taking damage when defending
		ARMORDAMAGEMIN=0		// Minimum amount of damage armor can take if damaged in combat
		ARMORDAMAGEMAX=1		// Maximum amount of damage armor can take if damaged in combat
	Added new UOX.INI settings for adjusting combat-speed on a global scale:
		GLOBALATTACKSPEED=1 	// for adjusting speed of melee and ranged attacks globally for all chars
		NPCSPELLCASTSPEED=1 	// for adjusting the overall speed of spellcasts for NPCs (base spellcast speed determined by SPADELAY tag in NPC dfns)
	Increased the chance of NPCs attempting to cast spells instead of doing regular attacks in combat-rounds

-==============================-
-= 04/11/2012 - UOX3 0.99.2b  =-
-==============================-
Contributors: Xuri

Source Changes/Fixes:
	Fixed issue introduced in previous version where any character-specific tags starting with the letter 'B' would not be loaded correctly from the worldfiles.

-==============================-
-= 03/11/2012 - UOX3 0.99.2   =-
-==============================-
Contributors: Xuri, dragon slayer

Source Changes/Fixes:
	Added several new JS Gump Methods:
		AddGumpColor( left, top, gumpID, hue ) // Adds a gump-image to the gumpstream, with a hue
		AddPictureColor( left, top, artID, hue ) // Adds a tile-picture to the gumpstream, with a hue
		AddToolTip( clilocID ) // Adds a tooltip to the previous gump-element that was added.
		AddTextEntryLimited( left, top, width, height, hue, relay, initialTextIndex, actualText, size ) // Add a text-entry gump with restriction on entry-length
		AddButtonTileArt( tL, tR, gumpIDnorm, gumpIDpush, buttonType, pageNum, buttonID, tileID, hue, tileX, tileY ) // Add a tile-picture as a part of a gump-button.
		AddXMFHTMLTok( left, top, width, height, border, scrollbar, hue, clilocnumber, clilocArgs... ); //
	Fixed an AND vs OR issue in CMulHandler::DoesStaticBlock() that caused an if-statement to behave incorrectly
	Updated LineOfSight() function with a new boolean parameter that allows LoS-checks based from the Z-level at a character's feet instead of at his head
	Added LineOfSight-checks for players (does not affect GMs) picking up/dropping items from/onto the ground, to stop an exploit with CircleOfTransparency
	When dropping an item into an invalid location, and the player is out of range of the original location where the item was picked up, it will now be dropped on the ground
	Players should now be able to use boat-planks and house-signs even while dead
	Fixed an issue introduced with the updated LoS-checks in the previous commit
	Added support for randomizing the direction an NPC will face in when spawned. To do so, use "RND" as the specified direction in their DFNs.
	A pet being ordered to attack its owner (player), or another pet under the same ownership, should no longer result in criminal charges against the player in question.
	Fixed an issue where locked down items could get removed from the multi when bouncing back on pickup-attempts
	Fixed an issue where NPCs would never leave combat with targets that were unreachable on a different floor of a building than them.
	Items with visibility value of 3 (Permanent Hidden/GM Hidden) will now not show up to players in containers
	Members of the same party should no longer become criminals from attacking one another
	Expanded the maximum amount of available regions in regions.dfn from 255 to 65535
	Minor cleanup done in various parts of the source
	OnCollide JS event can now be triggered from character scripts. NOTE: If both item and character have scripts attached, item script takes precedence.
	Fixed an issue where some LineofSight-checks (for double-clicking items, for instance) would erroneously fail to succeed
	Added support for optional amount-values behind LOOT DFN-tag, and expanded PACKITEM DFN-tag to support amount for non-stackable items as well.
		Updated supported syntax goes as follows, with optional parameters shown in paranthesis:
			LOOT=lootlist
			LOOT=lootlist,amount
			LOOT=lootlist,minamount maxamount
			PACKITEM=itemid
			PACKITEM=itemid,amount
			PACKITEM=itemid,minamount maxamount
			PACKITEM=listobject
			PACKITEM=listobject,amount
			PACKITEM=listobject,minamount maxamount
	Added support for randomization in the AMOUNT DFN tag for items.
		Updated supported syntax:
			AMOUNT=amount
			AMOUNT=minamount maxamount
	Fixed an issue with corpses not having a maximum weight capacity defined; it is now set to 500 stones.
	Fixed an issue with hairs and beards not being set correctly on corpses
	UOX3 will no longer attempt to spawn items from lootlist/itemlist-entries titled "blank". These entries can be used to add some randomization.
	Fixed an issue with containers and weight, with the help of a new semi-permanent "baseWeight" property which is based on the initial weight of a spawned item.
	Added support for viewing (ISTATS-menu) and tweaking (TWEAK-menu) the new baseWeight item property
	Added new property for JS Item objects: baseWeight - should rarely if ever need to change, primarily used to fetch base weight of containers
	Updated the 'INFO command with more detailed data about flags on the targeted tile
	Potentially fixed a segmentation fault in Linux by replacing JS_NewString with JS_NewStringCopyN in JSBool CBase_GetTag()
	The MINECHECK uox.ini setting now defaults to 1 (mountains/caves/rocks only)

JScript Changes/Fixes:
	Added some script-crash protection in JS/ITEM/bedroll.js
	Lumberjacking will now check if user is in range of target both at start and end of the chopping-process (previously start only)
	Fixed an incorrectly named variable in js/server/resources/bananas.js (dragon slayer)
	Fixed a bug in js/skill/healing.js that would stop players from being able to use skills after trying to cure poisoned characters with bandages
	Updated timers for curing and healing in js/skill/healing.js - should now take longer to heal/cure oneself with bandages than to do the same with others
	Added new JS command: 'FIXCONTWEIGHT - will iterate through all in-game containers and update their baseWeight (forced), weight (if empty and not already set) and weightMax (if not already set) properties

DFN Changes/Fixes:
	Added missing script=5021 tag to the bedroll in DFNDATA/ITEMS/GEAR/provisions.dfn
	Added missing NPC entries: gazerlarva (dragon slayer)
	Updated dfndata/regions/regions.dfn to disallow Mark/Recall/Gate-spells in Felucca dungeons, and added some missing brackets (dragon slayer)
	Corrected weight of iron ingots in dfndata/items/skills/resources/smithing.dfn - they should now weigh 1 stone (weight=100) each.
	Fixed some incorrect values for WEIGHT-tags in dfndata/items/gear/armor/base_armor.dfn
	Potentially fixed an issue with the Stone Walls/Stone Walls 2-sections of the add-menu, which could cause lengthy stalls when opened across network connections

Misc Changes/Fixes:

-==============================-
-= 21/03/2012 - UOX3 0.99.1   =-
-==============================-
Contributors: Xuri, dragon slayer

Source Changes/Fixes:
	Fixed weight showing up incorrectly in item-tooltips for stacks of items
	Fixed a weight-related issue by clearing the CSocket variable pSpot (pickupspot) after dropping items
	Fixed a weight-related issue by clearing the CSocket variable pSpot (pickupspot) after bouncing back items on non-valid item-pickup attempts
	Added new function void PickupBounce() in cPlayerAction.cpp to avoid having to repeat some shared code all over CPIGetItem::Handle()
	Added CSocket::SetCursorItem() and CSocket:GetCursorItem() to be used for storing temporary pointers to items held by players on the mouse-cursor
	Fixed an issue where items picked up off the ground and held on the mouse-cursor while disconnecting/being disconnected would make said items vanish permanently
	Fixed MaxWeight-value in status-gump for clients v5+ - will now reflect the actual MaxWeight calculated based on UOX.INI setting WEIGHTPERSTR
	Fixed issue where UOX3 would always try to read from mapfiles as if they were v7.0.24+ UOP-wrapped mapfiles, even in earlier clients with non-UOP-wrapped mapfiles
	Futureproofed map-loading/reading code to support both UOP-wrapped and regular maps on a map-per-map basis. May not never need to, but still.
	Added new DFN-tag for creatures - "HUMAN". This now replaces the hard-coded list of "human" body IDs that is checked when playing animations, sounds, etc.
	Added support for specifying the amount of items to add (only works for stackable items) to a container using the PACKITEM tag. Syntax: PACKITEM=itemid,amount

JScript Changes/Fixes:
	Updated JS/ITEM/axe.js to use CreateDFNItem instead of CreateBlankItem to create new logs

DFN Changes/Fixes:
	Added "HUMAN" DFN-tag to DFNDATA/CREATURES/creatures.dfn for all male/female player bodies, the GM body and all Savage human bodies
	Added NEWBIE-tag to items in DFNDATA/ITEMS/GMMENU/gm_skins.dfn (dragon slayer)
	Added MOUNTID=0x3EC6 to CREATURE 0x2cb (Boura) in DFNDATA/CREATURES/creatures.dfn (dragon slayer)
	Added an equippable boura mount-item (for NPCs) to DFNDATA/ITEMS/MISC/equippable-mounts.dfn
	Added some more missing regions to DFNDATA/REGIONS/regions.dfn (dragon slayer)
	Added new item to DFNDATA/ITEMS/MAGIC/reagents.dfn: bagofreagents - a bag containing 30 of each basic reagent.
	Added bagofreagents-item to Magic->Reagents portion of Add-menu in DFNDATA/ITEMS/ItemMenu.bulk.dfn
	Replaced PACKITEM-lines specifically for reagents for magery in newbie.dfn with PACKITEM=bagofreagents

Misc Changes/Fixes:
	Submitted some updates to some DFN/JS-files that had somehow not been committed to the CVS properly

-==============================-
-= 19/03/2012 - UOX3 0.99     =-
-==============================-
Contributors: Xuri, giwo, Ghostwolf, dragon slayer, xantier, Eolirin, puck, spddmn, Shudderz, Jediman

Source Changes/Fixes:
	Fixed a crash caused by clicking on the Virtue Gump icon in the paperdoll
	Added some checking before sending a status window to ensure the character is visible and in range
	Added some checks to prevent one from inviting themselves to a party
	Fixed a bug with the JS Method Char.CastSpell() where it never returned a value to the calling script.
	Fixed an issue causing smelted iron ore to combine with colored ore already in a players pack.
	Fixed a bug making it impossible to accept or deny a recruit into a guild.
	Added functionality to automatically turn on the Guild title display of all members when a guild aligns with Chaos/Order.
	Added onDropItemOnItem( iDropped, cDropper, iDroppedOn ) JS Event to handle dropping an item on another item.
	Added onVirtueGumpPress( pUser, cTarg, buttonNum ) JS Event to handle clicking the Virtue gump icon (and subsequent menus).
	Automatic worldsaves can now be disabled by setting SAVESTIMER in UOX.INI to 0
	Pets are removed from petlist when their stabled flag is set to true, and added again when set to false
	Players will no longer have to shove through characters that are permanently hidden
	Fixed travelling by recall spell or magic gate between worlds
	Fixed Jailing and Releasing players in worlds other than world 0
	Fixed client/server synch-issue with boats by changing prSend( 1 ) to prSend( 0 ) in boat movement code (Jediman)
	Added support for LOOT and PACKITEM dfn tags in item-defintions, for pre-adding items to containers (Shudderz)
	Added system messages confirming when items have been locked down or released in a house
	Fixed a bug where targeting a non-valid object would crash UOX3 when trying to release locked down items
	Fixed a servercrash that occured when server tried to regrown wool on shorn sheep that were dead
	Fixed an issue that caused NPC shopkeepers to get overloaded by the weight of items in their shop-layers
	System-message rapporting how many ingots player gets when smelting player-made items should now rapport correct amount
	Crafting system can now handle MAXRANK values up to 255
	Fixed an issue where NPCs could spawn at Z -128
	Fixed an issue with regional spawns and type 69 spawners which would cause NPCs to be spawned in blocked locations
	Fixed an issue with type 62 spawners which would cause NPCs to spawn at Z 0 (Shudderz)
	Fixed an issue with open doors in player houses that could cause them to decay if they were open during decay-check
	Fixed an issue with locked down items decaying (despite being inside houses)
	A system message should now be displayed when locking down items, showing how many lockdowns remain
	Added JS Item property: multi - A read-only Object-reference to the multi a specific item is inside
	Items of objType OT_SPAWNER with amount set higher than 1 should no longer be duped when picked up off the ground
	Added new UOX.INI settings:
		GLOBALITEMDECAY - Toggles on/off item decay on a global scale. Note that it does not remove the decay-status from items, it just
						resets the decay-timer when it reaches 0
		SCRIPTITEMSDECAYABLE - Toggles whether DFN-items will decay by default or not. Can be overriden by DECAY tag in item-DFNs
		BASEITEMSDECAYABLE - Toggles whether base-items will decay by default or not. Can be overriden by DECAY tag in harditems.dfn
		ITEMDECAYINHOUSES - Toggles default decay of non-locked down items inside multis (houses and boats)
	Fixed an issue causing errors when compiling in VS 2008 Express and newer (giwo)
	Added some exception-handling to cScript::DoCallback() in cScript.cpp (spdddmn)
	Added NPCWANDER-type 5 (WT_FROZEN) - which will stop NPCs from moving. Useful for reapers and corpsers and such.
	Added support for six new JS events:
		onBuy( socket, objVendor ) - triggers for vendor before tradegump is opened. Can be used to restrict vendor access.
		onSell( socket, objVendor ) - triggers for vendor before tradegump is opened. Can be used to restrict vendor access.
		onBuyFromVendor(socket, objVendor, objBought ) - triggers for item while item is being bought from an NPC vendor; return false in script to block sale, defaults to true
		onBoughtFromVendor( socket, objVendor, objBought ) - triggers on item after purchase has gone through and item has reached the player's backpack
		onSellToVendor( socket, objVendor, objSold ) - triggers for item while item is being sold to an NPC vendor; return false in script to block sale, defaults to true
		onSoldToVendor( socket, objVendor, objSold ) - triggers on item after sale has gone through and item has reached the vendor's boughtpack
	Included CJSMapping.h and cScript.h in vendor.cpp to support new JS events
	Added a NULL-check in CJSEngine::AquireObject() in CJSEngine.cpp (spdddmn)
	Added an extra check to CPISellItem to make sure the character trying to sell items still owns those items when accepting trade
	Added a temporary workaround for NPC pathfinding with long queues of NPCs trying to reach the same target
	Added new DFN tags for ranged weapons, defining ammunition id required (color optional) and missile-effect id played (color/rendermode optional):
		AMMO=id (color)
		AMMOFX=id (color rendermode)
	Added support for Fukiya blowguns as an Archery weapon in code
	Added new item DFN tag (and JS item property) to define maximum amount of stones (weight) a container can hold (replaces hardcoded value):
		WEIGHTMAX=# (defaults to 40000 - or 400.00 stones - for all containers)
	Added container-capactity information to item tooltip
	Added "Locked Down" text to item tooltips for locked down items. Refresh seems funky though.
	Fixed an issue where tooltips would display the current weight of and amount of items being spawned by container-spawners
	Fixed a server crash caused by the Item Identification-skill when used on items of type 15 - IT_MAGICWAND
	Fixed item-tooltip that describes remaining charges on an item of type 15 - IT_MAGICWAND.
	Fixed an issue with the JS Method Open for File Objects where it wouldn't allow opening files for appending or writing, only reading
	Fixed some confusion with how vendor buy/sell backpacks were handled internally in code
	Changed MAX_NAME to a 128 byte limit to support long item names.
	Changed some items spawned through code to use CreateScriptItem (DFN based) instead of CreateItem (Tiledata-based):
		Leftover arrows and crossbow-bolts that appear on ground during combat
		All cases where gold coins are spawned (newbie gold, random fishing, gravedigging, result of trading, NPC escort reward, etc)
		Ingots created from smelting items
		Resurrection robes (DFN entry added to DFNDATA/ITEMS/GEAR/CLOTHING/clothing.dfn for potential tweaking)
	Made spawners of type IT_AREASPAWNER (69) use the MORE value ('set more 0x0000XXYY) to determine offset area to spawn in
	Corrected hit sounds for bows and crossbows, were using dart sound
	Changed miss-sound for bows and crossbows to make them different from melee weapon misses
	Randomized impact-sounds for melee weapons
	Randomized get-hit sounds for male and female human characters
	Revamped spell-damage and magic-resist systems:
		Added new function in magic.cpp to calculate spell-damage after magic-resist and eval-int vs resist-check:
			SI16 CalcSpellDamageMod( CChar *caster, CChar *target, SI16 baseDamage, bool spellResisted )
		Updated cMagic::CheckResist() with magic resistance formulas based on pre-AoS information
		Added BASEDMG tag to a number of spells in DFNDATA/SPELLS/spells.dfn.
			For damage-spells, it's the maximum potential basedamage done before bonuses (or penalties) based on target resist, caster eval int and item resistances.
			For healing spells, it's the maximum potential basehealing done before potential bonuses
		Damage-spells updated to use new methods for calculating damage and magic resistances, both of which should now be close to pre-AoS implementation
		Changed Chain Lightning and Meteor Swarm spells to split the total damage done between all targets
		Mind Blast changes:
			Mind Blast will now never exceed 60% of target max-health, nor above 120% of BASEDMG
			If target's Int stat makes out a larger percentage of his/her total stats (Sum of Str, Dex, Int) than the caster's, spell backfires onto caster
		Debuff-spells like Clumsy, Feeblemind, Weaken and Curse can no longer be fully resisted. Resisting will halve the effect-duration instead.
		Spells will now only do double damaga against non-human NPCs (monsters and animals)
		Exposed CombatExplodeDelay to UOX.INI, and changed the default delay between targeting and damage for the Explosion spell from 0 to 2 seconds
		Updated JS/MAGIC/level1targ.js with new magic damage and resist system, and added noNeedReags check on caster to potentially skip reagent checks
		Fixed (visual-only) issue where damage-numbers would display over head of caster twice if caster was also target
		Added JS Spell property "name" - can be used to get the name of a spell as defined in the dictionary-files (entries 593-662)
	Added support (but no functionality) for Spellweaving, Imbuing, Mysticism and Throwing skills in code and skills.dfn
	Added container-gump support for container items like bones and various SE/SA-related containers
	Corrected sound-effect played when dropping items into baskets of various kinds
	Fixed a bug where NPCs would continue following and attacking characters that turned invisible/hidden
	Players who turn invisible will now stop swinging at nearby targets in combat
	Fixed a bug where players could equip both one-hander and two-hander weapons at the same time
	Fixed a bug where newly created characters could end with two conflicting weapons equipped at the same time
	Added fix to properly set the mounted-state for NPCs that spawn with a mount-item pre-equipped
	Fixed issue where there was no distance-check on Field-spells. They now use CombatMaxSpellRange setting from UOX.INI like other spells
	Fixed issue where the wrong GFX would be displayed for Field-spells aligned north/south
	Fixed issue where NPCs without fencing or swordsmanship would not be allowed to poison anyone in combat. Tough luck, spiders!
	Fixed issue with some NPCs using invalid values for POISONSTRENGTH. The valid range of poisons goes from 1 (weak) to 4 (deadly).
	Fixed an issue where containers with specific MORE values were interpreted as being trapped. Trapped containers now use MOREZ instead of MORE.
	Fixed some issues with boat-movement (drifting/turning left/right, in particular) being blocked in cases where it shouldn't be
	Fixed an issue where boat-commands to drift left/right could be spammed to move boat at high speeds. Now limited to normal boat speed multiplied by 1.5
	Fixed an issue where static water tiles would block placement of boats
	Fixed Tillerman-location on large ships turned southwards
	Nearby pets will now teleport along with their owner into/onto houses/boats when those are placed
	Reduced chance of creature-sounds playing slightly. The more creatures, the higher the chance a sound will play.
	Parts of movement code rewritten to solve Z-related issues (xantier)
	Fixed various other issues with the walking-code
	Removed hacky workaround for bug with NPC pathfinding leading to queues of NPCs all lined up, replaced by proper pathfinding
	Made some tweaks to various parts of the NPC pathfinding code
		Reduced default maxSteps variable in advanced pathfinding routine from 1000 steps to 500 steps for performance reasons
			The maxSteps variable will also increase/decrease depending on the type of movement the pathfinding is for
		Added a safeguard against NPCs repeatedly failing at advanced pathfinding and slowing down the server as a result. Now resets their NPCWANDERMODE on critical failures.
		Added an internal counter for NPCs called "failPath", which increases whenever the NPC is blocked from moving when server thinks it has a valid path.
			Once it reaches a certain threshold, NPC can push past a blocking character, or alternatively stop whatever it's doing (fleeing, following, etc).
		Advanced Pathfinding will now take into account characters blocking the way when generating valid paths - no more queued up NPCs in long lines!
		Enabled pathfinding in water for water-walking creatures
		NPCs that fail to pathfind while fleeing will abort fleeing and re-engage their opponent in combat
		NPCs that fail to pathfind while in combat will abort combat and enter a state of "evasion" for a short time, during which
			...Other characters wont block their movement
			...They can't be attacked
			...They won't attack anyone
			...They'll try to move back to their bounding box, if they have one
	Added some randomization in how NPCs pick their targets in combat, so not all NPCs pick the same target at the same time
	MAX_VISRANGE and DEFSOCK_RANGE increased from 15 to 18 to better deal with item-updates in higher-resolution clients
	JS events OnDeathBlow and OnDispel can now be used to override death and/or dispelling of summoned creatures (and magical fields), by returning false from the script
		Note that for OnDeathBlow overriding code means that things like fame/karma-calculations and criminal/murderer-flags and timers need to be manually set in the script
	Improvements to LineOfSight-code:
		LoS no longer checks against a hardcoded list of items, but instead uses tiledata-flags (missing flags can be overriden through tiles.dfn)
		LoS-checks will no longer be done for NPCs against targets that have visible status VT_PERMHIDDEN or VT_GHOSTHIDDED
		LoS-checks should now work more consistently - no more NPCs aggroing players through walls! (Eolirin)
			Note that this also has a benefit for server performance, as less aggroing NPCs mean less unneccesary attempts at NPC pathfinding!
	Added support for INVISIBLE tag for house-items in DFNDATA\HOUSE\house.dfn. Allows adding invisible items to houses.
	Updated methods for detecting client-versions for incoming connections, and how these are stored on the socket object
	Added support for Stygian Abyss clients (classic version only, from v6.0.14.2 to 7.0.8.2)
	Added support for High Seas clients (classic version only, from v7.0.9.0 to 7.0.15.1?)
	Added support for creation of SA-specific Gargoyle-characters if client and server support this through CLIENTFEATURES and SERVERFEATURES bits
		NOTE: Gargoyle-specific features and/or special-cases are not yet implemented! Highly experimental.
	Added support for extended itemIDs (0x3FFF to 0xFFFF) used in SA and HS clients. Maximum supported depends on size of tiledata run on the server.
	Added support for reading new versions of tiledata.mul and multi.mul. No settings needed, version-handling taken care of automatically.
	Added support for New Object Information packet (0xF3) via CPNewObjectInfo packet class.
		This replaces packet 0x1A in client-versions 7.0+, and enables displaying items and multis with IDs extending beyond 0x3FFF
	Added support for packet 0xD7, SubCommand 0x28 - Guild button on paperdoll, which gives access to guild-functions if character belongs to a guild.
		Can be enabled/disabled through UOX.INI setting PAPERDOLLGUILDBUTTON=0/1. Defaults to 0.
	Updated packet 0x88 to properly show combat-status of character in paperdoll
	Updated packet 0xBA (Tracking Arrow) for HS clients - from 6 bytes to 10 bytes, to include target serial.
	Updated packet 0x99 (Multi Placement) for HS clients - from 26 to 30 bytes, to include multi hues.
	Added new NPCAI for passive NPCs who can be attacked, but will never attack back: AI_PASSIVE = 7
	Updated Wall of Stone-spell to no longer place walls on the same tiles as where characters are standing
	Added brute-force updating of character's total weight when main backpack is opened, as a quick-fix for broken character weights
	Updated packet 0xA9 (Character List/Starting Locations) with UO:SA and UO:HS-specific handling.
	Updated packet 0x24 (Draw Container, from 7 to 9 bytes) to support Container Type-flag in UO:HS clients, to ensure that containers, spellbooks and vendors continue working.
	Changed the upper limit for the amount of stamina that can contribute to faster attack-speeds (for NPCs only) from 100 to 300
		This increases their maximum theoretical attack-speed from attacking every 1.5 seconds to roughly every 0.75 seconds
	Earthquake-spells will no longer affect mounted targets, animation-wise
	Added new UOX.INI option to determine whether attack-speed bonuses are gained from Stamina (default) or Dexterity: ATTACKSPEEDFROMSTAMINA=1/0
	Added new UOX.INI option to control the displaying of damage-numbers in combat (previously used DISPLAYHITMSG for numbers too): DISPLAYDAMAGENUMBERS=1/0
	Implemented better support for Yell (1.5 * normal speech distance) and Whisper (1 tile distance for players, 3 for GMs)
	Whispering will no longer take hidden players out of hiding
	Normal players can no longer see regular speech from permanently hidden GMs or Counselors
	Normal players can see whispers from permanently hidden GMs or Counselors, if they're within distance (3 tiles)
	Added a new section to UOX.INI - [clientsupport] - along with the following settings to determine approved client-versions for the server:
		CLIENTSUPPORT4000=0/1
		CLIENTSUPPORT5000=0/1
		CLIENTSUPPORT6000=0/1
		CLIENTSUPPORT6050=0/1
		CLIENTSUPPORT7000=0/1
		CLIENTSUPPORT7090=0/1
		CLIENTSUPPORT70160=0/1
		CLIENTSUPPORT70240=0/1
		NOTE: Each of these settings represent a range of clients, not just the individual versions mentioned. This means that CLIENTSUPPORT4000, for instance,
		 will allow or disallow connections from clients 4.0.0 to 4.0.11f. Also note that while it is possible to enable support for all clients at the same time,
		 it highly recommended to restrict support for client versions that match up to what the server is running.
	Fixed various issues with the skill-gump (crashes) and skill-locks (not working/showing weird gumps instead of arrows/lock)
	Added new UOX.INI option: EXTENDEDSTARTINGSTATS=0/1
		If enabled, makes new characters start with 90 statpoints (selectable in clients 7.0.16.0+ only, lower versions only get 90 if using templates) instead of 80.
	Added new UOX.INI option: EXTENDEDSTARTINGSKILLS=0/1
		If enabled, allows for four starting skills (selectable in clients 7.0.16.0+ only, lower versions only get 4th skill if using templates) instead of three
	Added (very) experimental support for UO:Enhanced clients v4.0.23.1+
	Did some minor code-cleanup stuff, including but not limited to:
		Reduced scope of some local variables to where they are actually needed/used
		Changed some const std::strings function parameters to references instead of values
		Changed some "stuff.size() == 0"-checks to "stuff.empty()"
		Changed some "stuff.size() != 0"-checks to "!stuff.empty()"
		Removed some variables that were initialized but never used
	Increased world-loading speeds by ~35-40%, and saving by ~30-35% (your mileage may vary, this was tested on Windows 7, on an SSD)
	Included <climits> in mapstuff.h and <stdlib.h> in cDice.cpp to fix a compiling issue in Linux
	Made the WIPEABLE bit a member of cBaseObj instead of cItem, so it can be used by both items, spawners, characters and multis - though only works for items and spawners atm
	Implemented support for automatically renaming books when the book titles are updated by players
	Fixed broken Bulletin Boards - should no longer freeze the client, and can actually be used for posting messages again
	Disabled MsgBoardMaintenance() in CWorldMain::CheckAutoTimers() until someone can figure out why they break bulletin boards
	Added code to shut down UOX3 (instead of crashing later on) if it fails to load any regions from region DFN scripts
	Added support for reading map#LegacyMUL.uop files (regular map#.mul files with a uop header) in clients 7.0.24+
	Fixed an issue where an NPC knowing too many skills could crash UOX3 if when listing them in response to a player
	Players can now train skills from NPCs using the "train <skill>" phrases.
	Moved reloading of JS/teleport.scp from the already slow DFN-reload (console option 7) to the much faster Regions-reload (console option 4)
	Fixed an issue where some creatures with ANTIBLINK tag set in UOX3/DFNDATA/CREATURES/creatures.dfn would play get-hit animations as attack-animations

JScript Changes/Fixes:
	Moved the magic scroll handling from cPlayerAction.cpp out to JavaScript (items/magicscroll.js)
	Fixed an error in tailoring.js where invalid socket and character objects were referenced
	Removed a debug-message from taming.js
	Pen and Ink-items will now work similar to using the inscription skill directly
	Updated trainingdummy.js and pickpocketdip.js with code that will auto-fix them should their timers ever break
	Fixed issue with the 'ADD command that would put items in your backpack instead of target's backpack
	Removed a TriggerEvent from go.js that should not have been there
	Corrected scripttrigger for newly created bankchecks in banker.js
	Added stablemaster JS-script and assigned it to the animal-trainer vendors (Xuri)
 		Available commands: claim (list|pet-name), stable
	Added support for bamboo flute in musicianship/enticement/peacemaking JS-scripts (dragon slayer)
	Added new JS-script for bolas - JS/ITEM/bola.js (dragon slayer)
	Added entry for bola in jse_objectassociations.dfn (Xuri)
	Added bamboo flute to GM-menu under music instruments, and entries in jse_objectassociations.dfn (Xuri)
	Added definition of 0x1EB9 as a Tinker Tool in jse_objectassociations.scp
	Fixed an issue with sword.js which stopped you from carving shafts/kindling from a single wooden log
	Added missing pickpocket-dummy entries to jse_objectassociations.scp
	Added decayable = false to freeze command in misc-cmd.js
	Did some tweaks to some tailoring js-files to make spinning wheels stop breaking if global onCreateDFN script is present
	Minor fix to JS/COMMANDS/TARGETING/add.js which ensures that the script won't break under some very specific circumstances
	Added script for Dice and Cup-item, which lets players use said item to...(drumroll, please)...roll dice!
	The duping command (dupe.js) should now be able to dupe spawner-objects properly
	Added missing Tinker Tools and Fletching Tools to jse_objectassociations.scp (Puck)
	Removed lines from add.js that set decayable as true or false (except for spawners), default decay now handled by ini-settings
	Added DIR values to all .js files in JS/SERVER/LIGHT/ folder, enabling players to turn on/off lightsources
	Added onBoughtFromVendor JS events to pet-statue scripts in JS/NPC/PETS/ to automagically turn statues into live pets immediately after being bought
	Fixed some incorrect scriptIDs for lightsources in jse_fileassociations.scp and jse_objectassociations.scp
	Fixed 'SETRACE command, no longer tries to use non-existing method to set character's race (JS/COMMANDS/setrace.js)
	Fixed an issue where onCreate JS scripts would not run for duped items
	Changed JS scripts for lights to save DIR to MOREX when turning light off, and load DIR from MOREX when turning on. Sets default DIR if no MOREX value can be found.
	The empty bottles that appear after using a potion will now be DFN based (JS/ITEM/potion.js)
	Fixed an error in JS/ITEM/diceandcup.js (dragon slayer)
	Fixed various errors in JS/MAGIC/level1targ.js
	Updated kindling.js and added bedroll.js (original by dragon slayer, rewritten by Xuri) to support secure logouts from camping
	Updated JS/ITEM/food.js so bowls, plates, etc will be left behind instead of eaten along with the food (dragon slayer)
	Added item and character-direction to ISTATS and CSTATS commands in JS/COMMANDS/TARGETING/gumps.js
	Fixed an issue with JS/NPC/AI/stablemaster.js where, in specific circumstances, claiming stabled pets by name didn't work
	Fixed some cases in JS/MAGIC/clumsy.js where it tried to send sysmessages through sockets, to NPCs - who have no such thing
	Moved TurnTorward() method in JS/ITEM/axe.js to after the area resource-check, so player only turns if there is chopping to be done
	Updated some JS Console Methods in JS/COMMANDS/consoletest.js
	Added ML-era weapons to JS/SERVER/DATA/weapontypes.js (dragon slayer)
	Added code-support for SA-era weapons, and added them to JS/SERVER/DATA/weapontypes.js and JS/jse_objectassociations.scp
	Updated JS/ITEM/sword.js to use CreateDFNItem instead of CreateBlankItem for raw fish steaks and kindling (dragon slayer)
	Added cutting hides into leather through JS/SKILL/TAILORING/scissors.js (dragon slayer)
	Disabled detection of keypress "0" in JS/CONSOLE/console.js so UOX3 will actually reload all scripts when pressing 0
	Updated the 'WIPE command to not delete non-wipeable items and spawners
	Fixed a crash-bug in JS/COMMANDS/gumps.js where the 'ISTATS command could crash the server if used on a spawner-object with no spawnsection set
	Fixed an issue in JS/SKILL/TAILORING/scissors.js where the script was referencing socket, but should have referenced pSock (dragon slayer)
	Updated JS/teleport.scp with teleport-locations for new maps (dragon slayer)
	Updated JS/teleport.scp with fixes for a whole bunch of old locations, and added some missing ones

DFN Changes/Fixes:
	Added blank scrolls and empty books to ScribeShopping SHOPLIST
	Added new vendor NPCs using ScribeShopping shoplist: m_scribe and f_scribe
	Added new scribe-spawner item, and added it to GM-menu
	Sorted male and female NPCs and vendors alphabetically in the NPCs-menu
	Fixed some issues in shoplist.dfn
	Fixed teleport entries from Serpent's Hold to Fire dungeon (Ghostwolf)
	Added new midilist section (23) for dungeon music (Ghostwolf)
	Added MIDILIST=23 entry in region 29 (dungeons)
	Added missing Meteor Storm Scroll to DFNDATA/ITEMS/MAGIC/scrolls.dfn (Ghostwolf)
	Added a new DFN (DFNDATA\NPC\lbrraces.dfn) with Meer and Juka NPCs  (Ghostwolf)
	Added Meer and Juka races to races.dfn (Ghostwolf)
	Added Meer and Juka NPCs to GM-menu under Humanoid NPCs (Xuri)
	Fixed messed up smithing gump (Ghostwolf)
	Added Jhelom fighting pit to regions.dfn and renumbered the regions (Ghostwolf)
	Added other regions included dungeons, guard outpost, etc (Ghostwolf)
	Added regions in Trammel, Ilshenar, Malas and the Map of Tokuno Note (Ghostwolf)
	Updated instalog-section with Trammel and Ilshenar inns (Ghostwolf)
	Changed Bucc's Den regions to not guarded (Ghostwolf)
	Added two new NPCs - [shade] and [armeddaemon] to DFNDATA/NPC/undead.dfn and DFNDATA/NPC/daemons.dfn(Ghostwolf)
	Tweaked ID of existing [daemon] to that of the unarmed one (Xuri)
	Added Shade and Armed Daemon entries to GM menu (Xuri)
	Added entries for bamboo flutes in DFNDATA/ITEMS/SKILLS/MISC/music_instruments.dfn (Xuri)
	Added entry for bola in a new DFN file: DFNDATA/ITEMS/GEAR/WEAPONS/missile_weapons.dfn (Xuri)
	Fixed an incorrect entry in namelists.dfn
	Re-ordered IDs listed under METAL in DFNDATA/CREATE/resources.dfn to make UOX3 give same ingot-types when smelting
		player-crafted items as when smelting raw ore.
	Moved buckler-entry in smithing.dfn from item 1 to item 367 as it doesn't seem possible to craft item number 1
	Removed erroneous DEF values from leather.dfn, studded_leather.dfn and bone.dfn - should use values from base_armor.dfn
	Added DEF values to standard clothing, footwear and headwear
	Made GetScriptItemSettings look for "x" instead of "0x" in harditems.dfn, fixes some stacking issues with ingots
	Corrected IDs for gold coins and kindling in harditems.dfn by removing leading 0s in the IDs
	Added movable=2 and weight=50000 to Base_spawner-definition to make it impossible for players to steal them
	Fixed an incorrect name-entry in namelists.dfn (Puck)
	Made skulls dropped as loot by Bonemages movable
	Fixed several issues with spawners.dfn, including incorrect names and spawnobject-entries (Puck)
	Added default ID to base_spawner item in DFNDATA/ITEMS/GMMENU/spawners.dfn to make it spawnable without invalid gfx
	Fixed an incorrect ID for Iron Ore in DFNDATA/HARDITEMS/harditems.dfn and DFNDATA/ITEMS/SKILL/RESOURCES/mining.dfn
	Fixed a bug that stopped UOX3 from reading and applying DIR values from item-DFNs correctly
	Added DIR values to all lightsources in DFNDATA/ITEMS/BUILDING/lighting.dfn
	Added AMMO and AMMOFX tags to ranged weapons in archery.dfn, aos_weapons.dfn, se_weapons.dfn and baseitem.dfn
	Fixed name in addmenu for item 0x0F64 (unused torch)
	Fixed TrainerShopping list in DFNDATA/ITEMS/shoplist.dfn - now refers to actual animal-statue items in DFNs
	Fixed DIR values for various wall sconces (DFNDATA/ITEMS/lighting.dfn) and heating stands (DFNDATA/SKILLS/TOOLS/alchemy.dfn)
	Fixed broken smithing of agapite items due to duplicate item-numbers between agapite and gold crafting DFNs (DFNDATA/CREATE/smithing_agapite.dfn)
	Made cut-up-leather and furs pileable in DFNDATA/ITEMS/SKILLS/RESOURCES/leatherworking.dfn (dragon slayer)
	Added additional lootlists for tinkerparts, instruments, tools, vegetables, clothing, reagents and potions in DFNDATA/ITEMS/lootlists.dfn (dragon slayer)
	Added empty wooden bowls to DFNDATA/ITEMS/BUILDING/DECS/kitchen.dfn
	Updated DFNDATA/MAPS/tiles.dfn with proper height-override values for rope ladders - should be 22 not 10
	Added additional deed/boat-model IDs to "modelmulti"-list in DFNDATA/ITEMS/itemtypes.dfn to make these usable as house/boat-deeds
	Added three new sections to DFNDATA/NEWBIE/newbie.dfn - [DEFAULT ELF MALE], [DEFAULT ELF FEMALE] and [DEFAULT ALL]
	Added torches to ProvisionerShopping shoplist in DFNDATA/ITEMS/shoplist.dfn
	Fixed incorrect offset on upstairs door in 2-story villa in DFNDATA/HOUSE/house.dfn
	Added house-deed for Farmer's Cabin, and added this to the house-deeds itemmenu (DFNDATA\HOUSE\house.dfn and DFNDATA\ITEMS\ItemMenu.bulk.dfn)
	Added invisible wooden floor tile in second floor of 2 Story Log Cabin house to fix moving up rope ladder (DFNDATA\HOUSE\house.dfn)
	Fixed sign-placement for 2 Story Log Cabin house (DFNDATA\HOUSE\house.dfn)
	Added support for the SA-specific map (map5.mul - Termur) to DFNDATA/MAPS/maps.dfn
	Fixed incorrect Meditation skill-entry for lich NPCs (DFNDATA\NPC\undead.dfn) - was set to max 9500 (950.0), should have been 950 (95.0)
	Fixed read-only books (setup through DFNDATA/MISC/books.dfn) by updating the MORE dfn-tags in DFNDATA/ITEMS/MISC/books.dfn
	Added a new NPCLIST (escorts) to DFNDATA/NPC/npclists.dfn, and an NPC escort spawner to DFNDATA/ITEMS/GMMENU/spawners.dfn (dragon slayer)
	Added Ter'Mur Map Area (REGION 250) to DFNDATA/REGIONS/regions.dfn
	Changed all references to MAP in DFNDATA/REGIONS/regions.dfn to WORLD (which unlike MAP is actually read by UOX3 in this file)
	Added layers to DFNDATA/ITEMS/MISC/jewelry.dfn (dragon slayer)
	Updated House-gump in DFNDATA/MISC/gumps.dfn (dragon slayer/Blue Dragon)
	Added MAPUOPWRAP tag to DFNDATA/MAPS/maps.dfn - only used by clients 7.0.24+
	Added numerous creatures to DFNDATA/CREATURES/creatures.dfn, though some only have placeholder icons and sounds.
	Corrected coordinates for REGION 75 (Destard)

Misc Changes/Fixes:
	Did some minor updates to the JavaScript Documentation
	Updated dictionary-files with some more messages, including a missing systemmessage used to inform of remaining amount of lockdowns in houses
	Updated dictionary-files with new system messages related to the camping-skill
	Updated various UOX3 documentation (installation, configuration, server-settings, JavaScript docs)


-==============================-
-= 17/01/2009 - UOX3 0.98-4.0 =-
-==============================-
Contributors: grimson, Xuri, giwo, maarc, Cavalier, supermoleet
(For a detailed list of who updated what and when, check the CVS changelog)

Source Changes/Fixes:
	Fixed an issue causing JS gumps to interfere with eachother.
	Fixed an issue causing serial numbers in the istats gump to display improperly.
	Fixed an issue with CPFightOccurring packet which would cause the client to lockup.
	Made use of the CPFightOccurring packet during combat.
	Fixed an issue when a monster attacked a player who was not in combat UOX3
	 would not inform the client of a new target.
	Added a flag to CChar::PushDirection() allowing us to push to the front or back of the pathToFollow list.
	Changed CChar::mNPC::pathToFollow to a deque for more robust functionality.
	Fixed an issue with the A* Pathfinding routine causing creatures to path in reverse.
	Added some debugging information to A* Pathfinding (when running in Debug mode).
	Fixed a possible issue with TextEntry in JS gumps.
	Fixed an issue with the following JS events:
		OnSnooped
		OnSpellGain
		OnSpellLoss
		OnCommand
		OnPacketReceive
	Fixed several MingW32 compiler warnings.
	Fixed a Flagging issue with Racial enemies.
	Added uox.ini flag to disable/enable the A* Pathfinding routine: ADVANCEDPATHFINDING=0/1
	Fixed an issue causing errors when compiling under *nix.
	Fixed an issue causing monsters to constantly attempt to pathfind to a target they can't reach.
	Made onResurrect trigger before a resurrection instead of after, added option to override hard code by returning false
	Fixed an issue making it impossible to place items on tables.
	Fixed an issue with the uox.ini entry for log resource respawn area.
	Simplified many entries in uox.ini, making them easier to read.
	Fixed a crash when attempting to place a house item outside a house.
	Fixed the location check when placing house items to allow them to be placed inside houses.
	Added a check on house items to only allow them to be placed in your house (Or anywhere by GM's).
	Bumped up the limit on items in create.dfn from 999 to 32,766.
	Removed FOREIGN and MINAMOUNT tags from ore entries in skills.dfn as they were superfluous
	Fixed CHANCEFORBIGORE tag handling from regions.dfn to give a % chance out of 100 to get a pile of 5 rather than 1 ore.
	Modified the order of the arguments in the RESOURCE tag in create-DFNs to fit the following:
		RESOURCE=ID AMOUNT COLOUR (AMOUNT and COLOUR are optional)
	Changed item limit in create dfn down to 4,999 to fix a bug in gump handling.
	Fixed several issues with the UseResource JS Method
	UseResource JS Method can now be used with both items (containers) and characters
	Added CPIAOSCommand packet including logging
	Changed CPISubcommands::Receive so that it doesn't log multiple times
	Updated party packet details
	Added basic party implementation.  Adding, removal and kicking works, speech does not
	Added sent packets CPPartyMemberList, CPPartyMemberRemove and CPPartyInvitation
	Updated dragging contents out of packs so that pet friends should be able to do so
	Added CPPartyTell packet
	Promoted Party::SendPacket to public method
	Added speech (individual and group) to party methods
	Added commentary to some of the party classes headers
	Updated AddMember() and RemoveMember() to return a bool as to it's success
	Updated Leader() change code so that the leader is always first on the list
	Added isNPC property to the Party class to help us with how our code will go
	CChar now has an InParty() method, which is currently unused - will be used for fast lookups of party presence later.  This is NOT to be saved, as it disappears on server shutdown.
	Exposed the new party classes to the JS Engine
		var partyObject = CreateParty( leader );	// Returns NULL if the party failed to be made

		Party Class
			Methods
				bool Remove( memberToRemove );
				bool Add( memberToAdd );		// If it's a PC, then it will send an INVITE ONLY  It is up to the PC to accept/decline
				obj  GetMember( index );		// Returns a character object for the member at that index
			Properties
				leader					// Character object that is the leader, can return null - EDITABLE
				memberCount				// Returns the number of characters in the group - READONLY
				isNPC					// Returns true if it's an NPC party, false if not - EDITABLE

		Character Class
			Properties
				party					// Returns a party object that is the party associated, or null - READONLY (use party management for this!)
				partyLootable				// Boolean that dictates whether the character is lootable by the party - EDITABLE - Note that if you are not in a party, this does nothing!
	Fixed the spawning of NPCs in CSpawnRegion::RegionSpawnChar() so that they are put into the correct world.
	Updated UOX3_Official.dsp to contain the files from the party system.
	Change cMagic::SelectSpell() to first check for reagents and then for skill.
	Added more details to the weapon tooltips.
	Fixed %tstamp output in the HTML templates.
	Fixed a compiler warning with the Party System
	Fixed an issue causing weight not to be added when grabbing items from a bank box.
	Moved BankBox creation to Player creation, addressing a situation where the first
		time a player opened his bank it would close immediately or crash the client.
	Added FindRootContainer() to simplify finding the top-most item containing other items.
	Fixed an issue causing it to be "snooping" to open a pack in a trade window.
	Added support for the OnPickup() JS Hook, note a return value of false will bounce the item.
	Fixed an issue with TriggerEvent() that can cause a script to stop functioning if the triggered event did not return true
	Moved dynamic parts of [worldlight] section from uox.ini to their own output file in the /shared/ directory
	Exported telltime function along with the clock item and 'time command handling to JS.
	Fix a bug where items, that have a script but no onPickup event, get always bounced.
	Allow party members to remove themselfes from the party, even if they aren't the leader.
	Update the CPWalkOK Packet (0x22), the second byte contains the notoriety value (flag color) and make use of it.
	Added a new target type to the speech system, SPTRG_ONLYRECEIVER which sends the message
	 only to the receiver and doesn't display it on the sender.
	Use the new target type in CSocket::objMessage() and CSocket::ShowCharName() to display
	 the player name and serial only to the char requesting the information.
	Fix the format of the pingIP field in the CPGameServerList::AddServer() function. Now the
	 client shows, after a moment, latency and packet loss information for the servers. It still
	 doesn't work all the time.
	Small rewrite of the weather system. Calculate snow, rain and storm intensitys only every
	 server hour and use their values for the amount of weather effects on the screen.
	Committed some linux build error fixes on behalf of Cavalier
	Allowed customization of supported client features via uox.ini
		CLIENTFEATURES
		SERVERFEATURES
		Note that these are bit-settings similar to the way STARTPRIV works.
		One will need knowledge of how to set individual bits in a value,
		or an editor to customize these features.
	Removed CLIENTSUPPORT from the uox.ini
	Fix the onCreate JS script functions, they used the same event id. So if one didn't exist the other was also marked as not existing.
	Changed CPICreateCharacter::Handle(), if the start location for the new PC isn't send
	 by the client it now uses the first start location from the uox.ini instead of the fixed
	 location in britain.
	Use an enum for the states of the skill locks, makes reading the code a bit easier.
	Fixed cSkills::HandleSkillChange(), the re-ordering of the atrophy created doubles
	 and dropped entrys.
	Rewrote cSkills::AdvanceStats() so that the statlocks are actually used.
	Fixed cMagic::CheckBook(), it was calculating wrong numbers for the spells.
	Let chars randomly fall forward or backward when they die.
	The DISPLAYHITMSG setting from the uox.ini now also controls the damage display.
	Fixed the position of the coprse item when the char died falling forward.
	Corpses should now display the hair and beard of the char they where created from.
	Modified CItem::SetCont() so that it checks against the item layer instead of fixed
	 IDs to see if an item is hair or a beard.
	Fixed a bug where we dropped the hair and beard items, from corpses, on the ground.
	Added a new setting to the uox.ini, LOOTINGISCRIME. If you set it to 0 looting
	 corpses of innocent chars is not taken as a crime.
	Fixed and changed parts of the walking code. If NPCs have the RUNS tag set they
	 will really run when they attack, instead of just showing the running animation.
	Tamed chars will now run, if the char they follow is running, this should reduce
	 the warping effect of them a bit.
	Remove some not needed code and slow fleeing NPCs a bit down, so that other chars
	 can still catch up with them.
	Make sure we check for scripts envoked by type or id before we use the global script.
	Added JavaScript function "Moon( moonNum, newVal )" which will get and set the server moon values.
	Modified JavaScript Item.decaytime and Item.tempTimer to calculate the new value as a future time in seconds (unless a 0 is passed).
	Fixed a couple crashes caused by targeting non-PC's in the PartySystem.
	Modified cMovement::NpcMovement() and cMovement::HandleNPCWander() so that NPCs
	 only run while they still have stamina left.
	Added two new settings to the uox.ini, NPCRUNNINGSPEED and NPCFLEEINGSPEED, they
	 work the same way as NPCMOVEMENTSPEED.
	Added three new DFN tags for NPCs. WALKINGSPEED, RUNNINGSPEED and FLEEINGSPEED
	 they also work the same way as the uox.ini settings, and will override those if present.
	Allow faster attacks on fleeing NPCs, so they won't be chased without an end.
	Allow following NPCs to run if their target went to far away, so they can catch up on it.
	Fix reading of the new SPEED DFN tags for NPCs.
	Added the JavaScript CSocket methods FirstTriggerWord(), NextTriggerWord(), FinishedTriggerWords() to allow handling trigger words sent from the client during speech.
	Added support for updated UOKR packets.
	Added a new setting to the uox.ini: BASICTOOLTIPSONLY. If this is set to 1 the
	 tooltips will only contain basic information, like the name and the weight of an item.
	Use an enum for racial relations, should help with reading the code.
	Fix a bug where racial allys would attack each other.
	Added new JS property for items: "speed" this can be used to get and set the speed of weapons.
	Added new setting to spawn.dfn: "ONLYOUTSIDE" set this to one so that items and chars
	 will only spawn outside of buildings in that area.
	Modified the spawn code for spawnregions so that NPCs with wandermode 3 (box) and 4 (circle)
	 keep within the spawnarea boundaries.
	Send NPCs that left their wander area for some reasons back there.
	Force the wandermode of NPCs spawned by spawnregions to 3 (box), so they can travel the whole spawnregion.
	Properly initialize the wander area when the location of an NPC changes.
	Use the old OSI way of calculating hit chances.
	Properly initialize the wander area when the wandermode of an NPC changes.
	Use stamina instead of dexterity when calculating the attack delay to match up with the old OSI combat calculations.
	Split onUse into onUseChecked and onUseUnChecked.
	Made magical shortbows and elven composite bows fire arrows instead of crossbolts
	Added support for Visual Studio 2008
	Fixed an issue causing a player to be poisoned when a JS call to SetPoisoned(0,0) was made.
	Fixed several issues with tracking.
	Fixed a crash caused by passing an invalid object to the JS Method TurnToward
	Modified UString to function without crashing under VS2008
	Fixed a bug in CItem::RemoveFromSight() causing items inside containers on the ground not to properly notify nearby players when removed.
	Fixed a bug in CPIDropItem() when the compiler does not automatically instantiate booleans to false
	Fixed an infinite loop crash caused by a DFN entry calling itself with GET
	Added JS Character Propery "poisonStrength" to set the strength of the poison a character will inflict on his foe during combat.
	Implemented supermoleet's fix for the black screen after logging in to a different world
	Added error handling to prevent a crash if GetByte/GetWord/GetDWord were passed an invalid offset
	Changed the tweakItem and tweakChar handlers to use command level rather than the "IsGM" flag.
	Defaulted the starting serial to 0x1 rather than 0x0, as some UO packets don't recognize 0x0 as a valid serial.
	Modified the JSMethod CBase_GetTag to avoid a possible crash.
	Removed the following variables from CWorldMain cmem, imem, nextCharSerial, nextItemSerial as this functionality is handled by the ObjectFactory
	Changed the system message being displayed when fatigued due to being overloaded
	Added system message for when character becomes overloaded after picking up item
	The math for calculating max carrying capactity for players matches OSI values more closely
	Default WeightPerStr changed from 5 to 3.5, to closer match the values used by OSI
	Animal taming no longer checks for the "ANIMAL"-tag in creatures.dfn
	Converted WeightPerStr from UI08 to R32, so it can support decimal values
	The onFall JS event will now work if characters fall further than 20 Z tiles (CChar.cpp)
	TWEAK now works for any admin character, no matter their commandlevel (gumps.cpp)
	The onPickup JS-event should now work
	Entry for ScriptID added to 'CSTATS, 'ISTATS and 'TWEAK menu
	Fixed an update-issue with race-gates
	Increased MAX_Z_LEVITATE from 10 to 15 to better deal with moving on uneven terrain (like in T2A)
	It should now be possible to walk through secret entrances made up of walk-through-able grass/mountain tiles
	#ifdef'd ODBCManager implementation.  You will need to enable through Config.h, and add 2 files to project.
	Accounts load and save from a database, falling back to read/write if connection doesn't exist
	Both logins are logged into SQL database
	ODBCManager exposed to JS Engine - note, columns MUST be fetched in ascending numeric starting from 0
	Long strings printed to the console will now wrap in a friendly fashion
	Unknown INI file tags will now print out at startup
	Bug fix on GetColumn JS implementation
	Error checking on statement indexes in GetColumn() in ODBCManager
	Fixed a bug that prevented players from picking up/moving items in their own backpacks
	Implemented 0xBD CPClientVersion packet to request the version from the client.
	Possible fix for clients > 6.0.5.0.
	Fixed the handling for the UOX ini tags OVERLOADPACKETS and DARKLEVEL

JScript Changes/Fixes:
	Added new command (rndtile.js) that allows tiling random items of a specific hue at a specific height
		Syntax: 'RNDTILE <startID> <endID> <hue> <Z>(optional) <movable true/false>(optional)
	Added "ARMOUR" as an alternate spelling used along with the 'SET command
	Found and fixed a total of 19 missing semicolons in 15 different JavaScripts
	Modified sword.js and axe.js so bladed weapons can be used as magic weapons (of TYPE 15)
	Minor modifications to several JavaScript files
	Items with wipable status set to 0 should no longer be removed when using the 'WIPE command
	Added support in doors.js for linked double-doors that will both open at the same time
	Added new command - 'LINKDOORS - used to link doubledoors together, and 'UNLINKDOORS to unlink them
	Added new script (bankers.js) that replaces hardcoded banker-AI and adds CHECK and DEPOSIT # / <target> commands
	Added new script (bankcheck.js) that handles the functionality of bank-checks
	Assigned script 3201 to bankers, and removed NPCAI=8
	Added teleport locations for Malas and Tokuno to moongate.js, and added configuration values at top of script
	Fixed door.js allowing a locked door without an associated key to always be openable.
	Fixed multiple JS-scripts that would not work correctly with negative Z values (Used GetSByte instead of GetByte)
	Fixed a few "You can't think of a way to use that item"-messages appearing when using certain JS-based items
	Removed rawfish.js and the script entries for it, no longer used.
	Added new JS script for moonstones, used to create gates between felucca & trammel
	Added new JS script for spyglasses, used to see the phases of the moons
	Added new DFN item: [moonstone], uses new moonstone JS script
	Drinking healing potions will no longer also give the user night-sight
	Cure-potions should be working again (stranf)
	Drinking a poison-potion will now poison one's character
	A timer now stops players from using multiple potions rapidly
	Fixed some errors in jail.js that could mess up jailing/releasing characters
	Added new function (getCombatSkill) to weapontypes.js for returning skill used by equipped weapon as a string
	Removed entry 104 (rawfish.js) from jse_fileassociations.scp as it was no longer in use
	Archerybuttes work again, and should have a "machine-gun"-issue fixed
	Scripts that used onUse() now use onUseChecked()
	Added a check to the 'POLY command to prevent characters from polymorphing into an invalid, client-crashing id (0x20)

DFN Changes/Fixes:
	Added smithing DFNs for coloured ingots (Armor and shields only, no weapons).
	Added a commented out MOUNTID for the polar bear in creatures.dfn. Uncomment for ridable polar bears.
	Corrected SPACEX/SPACEY (clear space necessary to place the house) values for all houses.
	Updated skills.dfn with changes mentioned by giwo about FOREIGN and MINAMOUNT tags.
	Remove remains of the time command from command.dfn.
	Added elven hair styles to the dfns.
	Changed mapdefinitions (maps.dfn) for Trammel to map1.mul, statics1.mul and staidx1.mul
	Removed duplicate spyglass entries in item-DFNs, and added script tag for new spyglass JS script
	Fixed hex-id of turnips in foods2.dfn, these turnips should now be stackable
	Fixed hex-id of studded sleeves in studded_leather.dfn, previously used hex-id for gloves
	Tweaked the region surrounding Buccaneer's Den so it extends around all buildings in the town
	Modified books.dfn to use the standard TAG=DATA format. Each line in a PAGE section is now preceded with LINE=
	Modified motdtips.dfn to use the standard TAG=DATA format. Each line in a TIP or MOTD section is now preceded with LINE=

Misc Changes/Fixes:
	Updated JavaScript Documentation to 0.44, and added missing commands to command list
	Updated UOX3_changelog.txt in the Docs-folder to include updates up to 0.98.3-7
	Updated dictionary files with two new system messages
	Updated onFall JS Event in Javascript Documentation
	Updated onPickup JS Event in Javascript Documentation
	Fixed an erroneous example in JavaScript Docs

-==============================-
-= 08/04/2006 - UOX3 0.98-3.7 =-
-==============================-
Contributors: giwo, Grimson, Xuri

Source Changes/Fixes:
	Fixed saving of the last used IP in the account files, and corrected the naming
	 	for the	contact field when saving the account files. (grimson)
	Don't add the amount of items to the item name in buy/sell gumps, as it is already
	 	shown in the gump. (grimson)
	Don't let items decay when they are inside a multi, so if a player places decorations
	 	or furniture in his house it stays there. (grimson)
	Removed the last change that should prevent items from decaying inside multis, as
	 	this is already done in a different part of the code. (grimson)
	Forced CItem::DecayTime to reset when decayable was set to true. (giwo)
	Fixed an issue causing keys not to function on planks. (giwo)
	Added JS socket methods GetSByte(), GetSWord(), GetSDWord(), to allow pulling negative numbers
		from the socket buffer. (giwo)
	Added weapon type classifications for all weapons from mondain's legacy expansion (Xuri)
	Modified names in the AITypes enum to fit naming conventions. (giwo)
	Minor optimizations in ai.cpp. (giwo)
	Removed an unused worldsave tag handler from CBaseObject. (giwo)
	Modified names in the CommandLevels enum to fit naming conventions. (giwo)
	Modified FLAGS and SOUNDFX DFN tags in spells.dfn to allow for a full integer as well as the current split format. (giwo)
	Simplified some functions in CPacketStream. (giwo)
	Changed MAX_NAME back down to 30 characters as all character name packets sent to the client max out at 30 bytes. (giwo)
	Made more use of IsWeightedContainer() in weight.cpp to streamline layer handling. (giwo)
	Updated the Makefile.am. (giwo)
	Fixed an issue causing items to duplicate when moving around stacks larger than 32,767. (giwo)
	Fixed an issue causing timers not to be properly reset by the JS engine. (giwo)
	Fixed a DFN issue causing item values to be loaded improperly. (giwo)
	Fixed a few places where looking into a pack from a player vendor would have been snooping. (grimson)
	Added price and description information to the item tooltips of player vendors.	(grimson)
	Added the "view", "status" and "dismiss" commands for player vendors (updated dictionaries). (grimson)
	Allow pet friends to mount the pet.	(grimson)
	Don't add the weight entry to the tooltip of items that weight nothing. (grimson)
	The "collect" command now also works when using the name of the vendor. (grimson)
	Fixed an issue causing a crash if a null socket was passed to JS CreateBlankItem() or CreateDFNItem(). (giwo)
	Fixed an issue causing houses not to be able to be placed in many valid locations. (giwo)
	Reduced the checking area when placing a house around small houses in house.dfn (giwo)
	Fixed an issue causing boats to always be placed at z -5 regardless of the water level.	 (giwo)
	Don't let normal players put items into the backpack of a player vendor they don't own. (grimson)
	Changed checkPetOfflineTimeout() to ignore player vendors. (grimson)
	Remove tempeffect number 44 as it is no longer used. (grimson)
	Changed the way the owner of an object is stored to use the serial of the owner. (grimson)
	Fixed two bugs in doLight() where we were sending the wrong light level to players. (grimson)
	Characters no longer turn criminal from attacking their own pets/summoned creatures (Xuri)
	Fixed the output of the time command, it was confusing midnight and noon. (grimson)
	Fixed loading of tempeffects when there is more than one effect saved. (grimson)
	Increased the damage values of summoned creatures a bit. (grimson)
	Fixed magic field effects. (grimson)
	Fixed an issue causing not every instance of skill gain to use the amountToGain specified in skills.dfn. (giwo)
	Changed MAX_NAME back to a 60 byte limit (note some Character packets only support 30 bytes). (giwo)
	Moved CChar::lockstate and atrophy into PlayerValues_st (giwo)
	Cleaned up CSkills::Atrophy and renamed it to HandleSkillChange() to better reflect it's functionality. (giwo)
	Changed cMagic::SummonMonster() so that it creates summoned from DFN entrys to make it easier to customize them. (grimson)
	Allow the body id to reach 0x3E2, so that the "dupre" body can be used without a problem. (grimson)
	Let chars run if they follow a running char. (grimson)
	Fixed a bug that caused the offline HTML files not to be written in some cases. (grimson)
	Catch Serverlist entrys with less than 3 sections, these caused a crash when parsing the ini. (grimson)
	Added %24time and %tstamp to HTML templates, %24time return the current time in the 24 hour
	 	format, %tstamp returns a unix timestamp. (grimson)
	Added new tag "MOUNTID" to creatures DFN, if this is set to the ID of a mount item the creature will be mountable. (grimson)
	Removed CChar::IsValidMount( void ) as it is no longer of any use. (grimson)
	Removed door.cpp from the project. (giwo)
	Modified the JS UseDoor() function to call the JS Event onUse() based upon the type of the item passed in. (giwo)
	Fixed an issue causing AreaCharacterFunction and AreaItemFunction to return the number of objects they encountered
		rather than the number of times the function returns a "true" value. (giwo)
	Modified TriggeNPCrEvent() to return true or false based upon the return value of the function. (giwo)
	Fixed an issue causing several item values not to be saved. (giwo)
	NPCs can now walk through player ghosts. (grimson)
	Player ghosts are only visible when they are in war mode and they will enter war mode when they speak. (grimson)
	Combined CChar:: emote(), emoteAll(), talk(), and talkAll() into a single function TextMessage(). (giwo)
	Renamed CItem itemTalk() to TextMessage() and modified it so passing a NULL socket sends the message to nearby players. (giwo)
	Added two new optional parameters to JS method TextMessage(). allHear (defaulting to true) and txtHue. (giwo)
	Ghosts will no longer re-enter combat-mode if they speak while already in combat-mode (Xuri)
	Removed CombatWalk flag sent to ghosts when they talk, as player ghosts have no combat animations (Xuri)
	PLAYERPERSECUTION in uox.ini (allows ghosts to drain mana from other players) set to 0 by default
		(Must be updated manually if using old uox.ini) (Xuri)
	Modified damage output of summoned creatures in magicsummon.dfn, as they were too powerful (Xuri)
	The owner of two pets/summoned creatures will no longer become a criminal if the two pets/creatures fight (Xuri)
	Summoned creatures (and normal ones) will no longer cast Blade Spirit/Energy Vortex, as they caused flagging errors (Xuri)

JScript Changes/Fixes:
	Items added using the RADD command in repeatingcmds.js will no longer decay by default (Xuri)
	Fixed the ever-swinging training dummies (Xuri)
	Added LODAMAGE, HIDAMAGE and WEIGHT item properties to 'SET command (Xuri)
	Fixed several bugs with the JS-scripted clumsy, heal, feeblemind and magic-arrow spells: (Xuri)
		Could cast while having weapons equipped
		Could cast while jailed
		Could cast without consuming any reagents
		SoundEffects weren't working properly
		Healing would (by design) subtract health from the caster
		Debugmessages weren't commented out
	Fixed the 'STAMINA command in stats.js. Had ".isChar" misspelled as ".isCHar" (Xuri)
	Added new JS-script: oilcloth.js - Functional oil cloths, used for cleaning poison off of weapons (Xuri)
	Character can no longer use locked down potions or food	 (Xuri)
	Added an entry to jse_fileassociations.scp for the new oilcloth.js script. (grimson)
	New "AI"-Script: Cows may now (randomly) defend themselves from doubleclicks by falling over. (Xuri)
	Corrected various errors with liquid-containers (pitchers, bottles, goblets, etc.) (Xuri)
	Moved doors out to JS. (giwo)
	Updated doors.js to not display the "blocked" message if the door ID isn't recognized. (giwo)
	Added scripted version of keys (now used instead of hardcoded ones), plus working keyrings (Xuri)
	Updated doors-script to make use of new scripted keys/keyrings as well as the new TextMessage arguments (Xuri)

DFN Changes/Fixes:
	Added GOOD tags to buyable items, so it's easier for an admin to use the advanced trade system. (grimson)
	Fixed the guardzone for Ocllo, X2 and Y2 were mixed up (Xuri)
	Fixed the guardzone for Delucia, was previously set to the graveyard north of the town (Xuri)
	Fixed wrong item being added when crafting fishing poles (Xuri)
	Fixed the "Large Dragon Boat" deed. (grimson)
	Fixed a DFN issue causing one to be able to create a board from a board. (giwo)
	Added a player vendor deed to misc_deeds.dfn. (grimson)
	Put the player vendor deed into the add menu. (grimson)
	Changed the player vendor entry in the malevendors.dfn so that they are no longer flagged as normal shoopkeepers. (grimson)
	Updated spells.dfn with correct reagent requirements (Xuri)
	Updated fishinglist.dfn with generic loot (paintins, weapons, gems, various flotsam) (Xuri)
	Updated create/tailoring.dfn, items/gear/provisions.dfn and items/itemmenu.bulk.dfn with new oil cloth (Xuri)
	Added magicsummon.dfn to the npc section, it contains the dfn entrys for the creatures that can be summoned. (grimson)
	Updated creatures.dfn to make use of the MOUNTID tag. (grimson)
	Added script=5013 (key.js) to [base_key] in dfndata\items\misc\keys.dfn (Xuri)
	Modified damage output of summoned creatures in magicsummon.dfn, as they were too powerful (Xuri)

-==============================-
-= 07/04/2006 - UOX3 0.98-3.6b =-
-==============================-
Source Changes/Fixes:
	Changed the use of the HP DFN tag for items so you can specify a range for a random value. (grimson)
	Fixed a rather substantial issue causing some character values to save incorrectly. (giwo)
	Fixed a sign mismatch with GuildFealty. (giwo)
	Catch some more client crashes with speak, that's in the wrong colour. (grimson)
	Update the reputation flags of a NPC when the NPCFlag get's loaded. (grimson)
	Fixed an issue with accounts causing the FLAGS value not to function properly. (giwo)
	Consolidated some code in CAccountsClass. (giwo)
	Fixed some signed/unsigned mismatches in CAccountsClass. (giwo)
	Modified Combat DEF calculations to remove superfluous code. (giwo)

JScript Changes/Fixes:
	Updated potion.js, so heal potions work again. (grimson)

DFN Changes/Fixes:
	Updated the stats for all weapons to fit the pre-AOS values. Pushed up the damage values
	of AOS and SE weapons so that they are in the same area as the other weapons. (grimson)
	Pushed up the damage values of most NPCs. (grimson)

-==============================-
-= 05/04/2006 - UOX3 0.98-3.6 =-
-==============================-
Source Changes/Fixes:
	Began rewriting .mul file handling. (giwo)
	Fixed an issue causing a possible crash with malformed JS scripts. (giwo)
	Removed several superfluous functions from UOXFile class. (giwo)
	Updated CTile and CLand to properly read in tiledata.mul (giwo)
	Modified .mul file structures to meet struct naming standards. (giwo)
	Changed static tile reading code to allow a variable number of statics. (giwo)
	Fixed several issues with mapdiff and staticdiff handling. (giwo)
	Added A* Pathfinding routine (note that it is not used in current code, (giwo)
		as there are known compatability issues).
	Fixed a crash when using ClilocMessage(). (giwo)
	Fixed an issue when climbing stairs. (giwo)
	Fixed some issues with TriggerWord handling (more work needs to be done on this). (giwo)
	Modified A* Pathfinding to work properly with our NPC's PathToFollow queue. (giwo)
	Added two sysmessage when feeding a pet. (Grimson)
	Modified CMapStuff SeekLand() and SeekTile() to return a reference rather than force one to pass an object to set. (giwo)
	Modified CMapStuff SeekMulti() to return the length rather than force one to pass a value to set. (giwo)
	Removed MapStaticIterator::GetTile() as it was superfluous. (giwo)
	Removed CMapStuff IsTileWet(), DoesTileBlock(), and IsTileSurface() as they were superfluous. (giwo)
	Removed CMapStuff TileMem and MultisMem, replacing them with functions to return the same data. (giwo)
	Changed MultiItemsIndex lz and hz to SI08 values. (giwo)
	Changed MapStaticIterator GetPos() to return an SI32. (giwo)
	Removed MapStaticIterator tileid as it was superfluous. (giwo)
	Modified UOXFile::eof() to return a bool rather than an int. (giwo)
	Miscellaneous minor changes and cleanups. (giwo)
	Don't save the weight in cChar.cpp, it's already saved in cBaseobject.cpp. (grimson)
	Fixed a bug where items without a layer didn't add to the chars weight. (grimson)
	Fixed a bug in CWeight::calcCharWeight() that added the weight of the backpack
	twice. (grimson)
	Changed CMapHandler::Load() so that PostLoadProcessing of chars is done after (grimson)
	PostLoadProcessing of items, or else the forced recalculation of the chars
	weight doesn't work. (grimson
	Added a version number to chars, it is defined in DEFCHAR_CHARVERSION and use it in
	CChar::DoVersionUpdates() to allow forced updates. Used this to force a weight recalculation
	on possibly bugged chars. (grimson)
	Removed version number for chars. (grimson)
	Added .tempWeight JS property to chars, so you can safely modify the weight of chars in scripts. (grimson)
	Added calcLowDamage() and calcHighDamage() functions to combat.cpp and use them in
	CPStatWindow::SetCharacter() to set the DamageMin and DamageMax values. (grimson)
	Added in first versions of fire, cold, energy and poison resistance, it's currently used
	in cMagic::MagicDamage() and cMagic::PoisonDamage(). You can set the resistance for npcs
	using a new DFN tag:
		DAMAGERESIST=# # # # 	Where the first number is fire, the second cold, the third energy
					and the last number poison resistance.
	The resistance for a damage type will rise everytime you get hit by this damage type, but the
	higher your resistance already is the slower it will rise. (grimson)
	Added new ini setting: (grimson)
		USECHARRESISTANCE=# If this is set to 0 the chars resistance won't increase by itself.
	Slowed the increase of resistance quite a bit down. (grimson)
	Fixed a bug where buying the whole stock of an item deleted that item from the vendors container. (grimson)
	Removed CChar::TempWeight() as it was superfluous. (giwo)
	Fixed an issue causing Trade Windows to add weight to characters. (giwo)
	Fixed some minor issues with weight calculations. (giwo)
	Removed CChar:: bools2 and made more use of the bools value. (giwo)
	Renamed CMapStuff to CMulHandler to better describe its function. (giwo)
	Renamed MapStaticIterator to CStaticIterator to meet class naming standards. (giwo)
	Renamed MultiItemsIndex to MultiItemsIndex_st to meet structure naming standards. (giwo)
	Removed MapData_st fileSize as it was superfluous. (giwo)
	Fixed an issue causing items with no layer to not change the weight of a character. (giwo)
	Fixed an issue causing spells that require a targeted location not to function. (giwo)
	Fixed an issue allowing one to build a house or boat far from their location. (giwo)
	Fixed an issue allowing one to build a multi directly on top of another multi. (giwo)
	Changed some id >= 0x4000 comparisons to CanBeObjType( OT_MULTI ), for clarity (Maarc)
	Fixed a bug with applying NPC sections where if you specified ALCHEMY values, it would fail to apply correctly (Maarc)
	Removed CMulHandler::AverageMapElevation() as it was superfluous. (giwo)
	Removed CTileUni height in favor of top, to reduce calc_walk() calculations. (giwo)
	Removed CTileUni id as its use was unnecesarry. (giwo)
	Rewrote CMovement::calc_walk() to improve overall readability and speed. (giwo)
	Merged CMovement::calc_WaterWalk() with calc_walk(). (giwo)
	Removed higher() as UOX_MAX() does the same thing. (giwo)
	Removed CMovement::validNPCMove() as it was superfluous. (giwo)
	Modified house placement to make it impossible to place a house on the ocean. (giwo)
	Removed DamageTypes enum and added POISON to WeatherTypes. (grimson)
	Renamed DamageResist functions into ElementResist and moved them to cBaseobject.cpp. (grimson)
	Renamed DFN tag DAMAGERESIST to ELEMENTRESIST and use it also for items. (grimson)
	Added DFN tag POISONDAMAGE to items so that they can also do poison damage on attacks. (grimson)
	Added functions calcElementDef(), getElementDef() and checkElementDef() to combat.cpp
	to calculate the resistance against elements similiar to the def value of armor. (grimson)
	Changed AdjustRaceDamage() to also take into account the elemental resistance of the target. (grimson)
	Use calcElementDef() in MagicDamage() similiar to calcDef() in calcDamage() to take the
	elemental resistance into account. (grimson)
	Added element resistance calculation to weather damage. (grimson)
	Fixed calcElementDef() and getElementDef() so that the chars basic element resistance
	is always added. (grimson)
	Changed MagicDamage() so that we always do at least a little bit of damage. (grimson)
	Changed the z value for various LineOfSight() calls so that we actually check whether
	we can see the face of the targeted char instead of his feets. (grimson)
	Changed CPICreateCharacter::newbieItems() so that the default items aren't placed inside
	the players backpack until they have their final ID, to prevent the adding of wrong weight
	values. (grimson)
	Altered the CBO resistances code to use an array rather than a number of variables (Maarc)
	Note that we're still only saving out a subset of these resistances, because only a subset ever get checked at the moment
	This could easily change in future, with people wanting to use other elemental stuff
	Adjusted CItem::CopyData() so that it copies all the WeatherDamage values instead of only a couple (Maarc)
	Upgraded the container size on weatherBools, as the number of weather entries has moved beyond a UI08 size (Maarc)
	Changed CBaseObject::SetWeight() and CBaseObject::SetID() so they also update the weight
	of the container the item is in, when it is an item and when it is within a container. (grimson)
	Converted Numeric DFN's to a Signed Long rather than unsigned by default for *nix compatability. (giwo)
	Merged jr's fixes for cygwin compatability and fixing some minor gameplay issues. (giwo)
	Modified ModelBoat() to automatically move you off the boat (if near land). (giwo)
	Fixed a crash bug involving boats. (giwo)
	Changed several calls checking against type IT_PLANK to CanBeObjType( OT_BOAT ). (giwo)
	Fixed an issue causing boat holds to "explode" when opening them. (giwo)
	Fixed an issue causing containers inside containers on the ground to be "too far away". (giwo)
	Fixed item IDs for human corpses in newCarveTarget(). (grimson)
	Added PHYSICAL to WeatherType enum, so we can also use it represent physical damage. (grimson)
	Changed CChar::Damage() to handle armor and resistance effects, it also handles the repsys,
	peace breaking, elemental weakness, displays the damage, creates a reaction if an attacker
	is given and calls CChar::Die() if the hp drop below 1. It takes the following values: (grimson)
		SI16 damageValue	- The amount of damage to be done.
		CChar *attacker		- The char that caused the damage.
		bool doRepsys		- Do reputation handling (criminal, murderer, karma and fame).
		WeatherType damageType	- The type of damage, use NONE to ignore armor/resistance, use
					  PHYSICAL to use normal armor, anything above is elemental damage.
		SI08 hitLoc		- The hit location, use 0 for the complete body or -1 to randomly
					  calculate the hit location.
		UI08 fightSkill		- The skill used to create the damage.
		bool doArmorDamage	- Damage the armor part that has been hit.
	The JS function .damage can also take all of these values.
	Changed CChar::Die() to handle the death of chars, it takes two values: (grimson)
		CChar *attacker		- The char that caused the death.
		bool doRepsys		- Do reputation handling (murderer, karma and fame).
	Updated the usage of CChar::Damage() in most areas to reflect the changes and removed reputation
	and death handling in those areas as this is now taken care of by CChar::Damage(). (grimson)
	Fixed a combat issue allowing enemies to fight if on the exact same location but a different Z. (giwo)
	Modified guard handling so when guards are globally deactivated any existing guards will not teleport. (giwo)
	Fixed an issue causing NPC's to be invisible. (giwo)
	Fixed some issues causing items behind a door to be within a characters LoS. (giwo)
	Added a LineOfSight() check to prevent opening containers on the other side of walls. (giwo)
	Modified the inMulti() routine to take into account tile height. (giwo)
	Simplified newCarveTarget() a bit. (giwo)
	Fixed a possible issue when calculating multi tile heights. (giwo)
	Fixed an issue causing Characters to "fall" immediately after being placed on their new boat. (giwo)
	Further cleanups and rewrites to CMulHandler and its related structures. (giwo)
	Fixed a server crash caused by my recent changes to Location-Targeting spells. (giwo)
	Fixed an issue causing pet guarding on items in a house not to function. (giwo)
	Fixed an issue causing boat items not to get added to the multi. (giwo)
	Cleaned up CPIDoubleClick::Handle() routine. (giwo)
	Fixed an issue allowing players to place their items in invalid locations. (giwo)
	Fixed a possible issue causing doors to block LoS to themselves. (giwo)
	Updated playDeathSound to simplify some of the code for males/females (Maarc)
	Updated code so that we don't use MFLAGGET/MFLAGSET - apparently we have a std::bitset class that we
	 can use!  Also makes it somewhat more readable as well.  Cheers Punt for the suggestion. (Maarc)
	Renamed __ACCOUNTSADM_BLOCK__ to CAccountBlock (Maarc)
 	Removed dead code from accounts (stuff that was just never called at all) (Maarc)
	Removed Get/Set Word/Bit/BitRange from CBO, as it's not being used (Maarc)
	Removed genericDWords from CBO, as they're not being used, and are largely superfluous with custom int/string tags in JS (Maarc)
	Fixed an issue with AdvancedPathFinding() causing NPC's to flee constantly. (giwo)
	Fixed an issue with NPC fleeing that checked against Strength rather than MaxHP. (giwo)
	Defaulted weather damage to every 60 seconds (rather than every second) (giwo)
	Fixed an issue causing a message to display damage taken by weather when no damage was taken. (giwo)
	Fixed an issue with CRace causing a race with no elemental damage types to have most/all elemental damage types. (giwo)
	Fixed a server crash in magic. (giwo)
	Fixed an issue causing items in a paperdoll to not be targetable. (giwo)
	Fixed an issue with LoS causing items to not block on a diagonal plane. (giwo)
	Fixed an issue causing multi's not to block LoS. (giwo)
	Minor fixes, cleanups, and optimizations to LineOfSight. (giwo)
	Modified DoubleClick() so a character inside a multi can open an item outside a multi (as long as he can see it). (giwo)
	Changed CPICreateCharacter::newbieItems() so that it uses the newbie.dfn entrys [DEFAULT MALE] and
	[DEFAULT FEMALE] to add the basic clothing to new chars, and added those entrys to newbie.dfn. (grimson)
	Changed newCarveTarget() so that it uses the new [CARVE HUMAN] entry from carve.dfn to create the
	body parts, and added this entry to carve.dfn. Note: the second value used on the ADDITEM tags
	in the [CARVE HUMAN] entry is not an amount, it's the dictionary entry used for naming the body
	part. (grimson)
	Changed the INI loading code so that it uses a Script rather than custom code (Maarc)
	Moved defense modifications into CHandleCombat::ApplyDefenseModifiers(). (grimson)
	Moved damage bonuses into CHandleCombat::ApplyDamageBonuses(). (grimson)
	Moved the calculation of the hit location from CHandleCombat::DoHitMessage()
	into CHandleCombat::CalculateHitLoc(). (grimson)
	Added ReactOnDamage() to CCHar, currently it only makes the char attack the
	char that inflicted the damage. (grimson)
	Reduced CChar::Damage() to show, the damage, apply the damage, handle the
	reputation effect, the peace breaking effect and the chars death. (grimson)
	New JS functions:  (grimson)
		damage = ApplyDamageBonuses( damageType, attacker, defender, fightSkill, hitLoc, baseDamage );
			Note: Attacker and defender need to be valid chars.
		damage = ApplyDefenseModifiers( damageType, attacker, defender, fightSkill, hitLoc, baseDamage, doArmorDamage );
			Note: Attacker can be NULL, fightSkill will then be ignored.
	New char function: (grimson)
		mChar.ReactOnDamage( damageType, attacker );
			Note: damageType is currently unused.
	Changed char function: (grimson)
		mChar.Damage( amount, attacker, doRepsys );
	Catch negative damage values in cMagic::MagicDamage() and apply 1 damage in that case. (grimson)
	Modified Gates so they are decayable by default, and will only decay if decayable. (giwo)
	Fixed LoS checks on the Z plane in multis. (giwo)
	Fixed an issue causing GM broadcasting (! then space) not to function. (giwo)
	Removed some superfluous speech code. (giwo)
	Changed the command YELLALL to YELL (giwo)
	Removed several old DFN tags that were no longer used. (giwo)
	Changed AdjustRaceDamage() to also use the new ApplyDefenseModifiers() function. (grimson)
	cScript::OnEquip() and cScript::OnUnequip() were adding the parameters in the wrong order. (grimson)
	Changed ApplyDefenseModifiers() and ApplyDamageBonuses() to make shure they return ints. (grimson)
	Changed SE_ApplyDamageBonuses() and SE_ApplyDefenseModifiers() to fix invalid damage values
	when a script sends float values. (grimson)
	Changed criminal() so it also takes the murderer state into account, as this overrides the
	criminal flag. (grimson)
	I only added part of the ApplyDefenseModifiers() and ApplyDamageBonuses() changes to CVS,
	fixed it now. (grimson)
	Adjusted SE_ApplyDamageBonuses and SE_ApplyDefenseModifiers as they were using the same parameter
	 for attacker and defender (Maarc)
	Removed some unused properties/methods of the console that have never been used (Maarc)
	Begun construction of some placeholder code for party related works, not committing the factory code
	 until some testing can occur first (Maarc)
	Essentially, this just updates the handling for it which currently does nothing, and gives an insight into how it would
	 be done (Maarc)
	Changed CChar::Damage() to also display the damage to the owner of the attacker, so a
	player can also see the damage his pet does. (grimson)
	Another change to CChar::Damage(), if the attacker becomes criminal make the owner of it
	criminal too. (grimson)
	Changed CHandleCombat::ApplyDamageBonuses() so that elemental damage is doubled when the
	race is weak to that element, also double magic damage only on NPCs. (grimson)
	Changed CHandleCombat::Kill() so that only not tamed animals eat their victims. (grimson)
	Fixed CHandleCombat::calcDamage() I was submitting the base damage to the defense calculation. (grimson)
	Fixed an issue causing GM yell messages with trigger words in them not to be broadcast. (giwo)
	Added and made use of a WanderTypes enum throughout the source. (giwo)
	Optimized NPC walking a bit, and moved NPCWander handling into its own function. (giwo)
	Further updated and modified calc_walk() and AdvancedPathFinding() to handle the Z plane. (giwo)
	Removed CMovement::HandleRegionStuffAfterMove() as it was superfluous. (giwo)
	Rewrote CMovement::OutputShoveMessage() to fix several minor issues. (giwo)
	Updated CMovement::MoveCharForDirection() to reduce extra function calls and make use of CMapHandler::ChangeRegion() (giwo)
	Moved create menu structs to skills.h as they don't need to be in global scope. (giwo)
	Fixed several issues with pack horse handling (giwo)
	Modified DropOnNPC so GM's can drop items directly on an NPC to be placed in their pack. (giwo)
	Modified response handling and removed some superfluous code. (giwo)
	Fixed a crash when UOX3 shut down due to an invalid directory entry. (giwo)
	Locally declared vector3D line2D and line3D as they are only used in lineofsight.cpp (giwo)
	Fixed water NPC's swimming under statics (bridges). (giwo)
	Fixed some false positives that were being generated by point3::Mag3D() by using a larger storage container. (giwo)
	Renamed Get/SetElementResist() to Get/SetResist as we now handle all resistance types in it. (grimson)
	Removed SetDef(), GetDef() and the def variable from CBaseobject.cpp and store armor values
	as physical resistance together with the other resistance values. (grimson)
	Removed calcElementDef(), getElementDef and checkElementDef from combat.cpp and handle all
	defence calculations in calcDef(), getArmorDef() and checkDef(). (grimson)
	Removed JS char property .armour and item property .def, added a new method for chars and
	items .Resist(). That method takes either one value, the resistance type and returns the
	resistance value of that char/item, or two values, the resistance type and the amount the
	resistance value should be set to. (grimson)
	Current resistance types are:
		1 - Armor
		2 - Light
		3 - Water
		4 - Cold
		5 - Heat
		6 - Energy
		7 - Poison
	The JS item property .devinelock was sent as INT though it is a bool. (grimson)
	Some small fixes to the tweak menu for items, this still had parts for a non existant MoreB
	value in it which shiftet some parts off, this also includes updated dictionaries. (grimson)
	Fixed an issue with CPExtendedStats causing statlocks not to display in the stat window. (giwo)
	Modified CChar::skilllocks and atrophy to save stat values to the worldfile. (giwo)
	Fixed an issue with CChar::skill value causing possible data corruption. (giwo)
	Fixed an issue causing the Backpack entry on a popup menu to display as selectable when the character
		should not have a pack (IE a non-pack animal). (giwo)
	Made CBaseObject::SetWeight() a virtual function and overloaded it in CChar and CItem. (giwo)
	Modified CChar::SetWeight() to automatically Dirty our object for a statwindow update. (giwo)
	Simplified some DropItem() handling. (giwo)
	Moved CBaseObject updateTypes to CChar as there is only one type of item update, and added
		a ClearUpdate() function to reduce superfluous packet sends. (giwo)
	Fixed a glitch in the CPExtendedStats packet. (giwo)
	Modified CPIPopupMenuSelect to prevent opening the paperdoll of a non-human. (giwo)
	A small fix to ApplyDamageBonuses(), the race damage of a weapon was applied to the final
	damage instead of the weapons base damage. (grimson)
	Call the OnHungerChange JS event in the SetHunger() function of chars instead of calling
	it in every part of the code the where the hunger gets changed. (grimson)
	Added a new JS event: (grimson)
	onCombatDamageCalc( attacker, defender, getFightSkill )
		This event is called everytime combat damage is calculated. You can do your own damage
		calculation and return the damage to override the engine damage calculation, or return
		a negative damage value to use the engine damage calculation.
	Changed the return value of OnCombatDamageCalc() to a SI16, I accidentially declared it to be a SI32. (grimson)
	Replaced the JS Char property .defense with the new JS Char Method: (grimson)
		mChar.Defense( hitLoc, damageType, doArmorDamage );
	so you can get all the different defense values for a char.
	Removed the code to raise your resistance value upon elemental damage, this can be done better in JS. (grimson)
	Modified  CBaseObject::DumpBody() and CBaseObject::HandleLine() so that all resistance values get saved
	and loaded in/from the worldfiles. (grimson)
	Added a new JS event: (grimson)
		onDamage( damaged, attacker, damageValue )
		This will be fired everytime the char "damaged" gets damaged, the attacker can be a char or NULL.
	Small fix to ApplyDamageBonuses() caused by my previous commit. (grimson)
	Fixed a bug with the JS override for the combat damage calculation that caused 0
	damage to be applied when the attacker has no script attached and the global script
	doesn't exist eigther. (grimson)
	Minor changes to cSkills::Fish(). (giwo)
	Fixed an issue making it impossible to open Elven NPC paperdolls. (giwo)
	Removed some typedefs that were no longer used. (giwo)
	Moved CChar values townpriv and townvote to PlayerValues_st (giwo)
	Moved CChar values foodList, hungerWildChance and hungerRate to NPCValues_st (giwo)
	Removed CChar::inBuilding in favor of using a bools flag. (giwo)
	Removed handling code for several unused Character values. (giwo)
	Removed unused level value passed with Console.Warning() and Console.Error(). (giwo)
	Removed JS Console prop .level (giwo)
	Modified JS Console Methods Warning() and Error() to remove the unused level value. (giwo)
	Fixed several issues with mapdiff and staticdiff handling. (giwo)
	Fixed a bug causing a crash when calling JS Event onGumpInput. (giwo)
	Merged CMultiObject vectors ownerList and banList into a single map housePrivList, to allow multiple owner/banned levels
		and ensure there are no duplicate characters on the lists. (giwo)
	Removed many superfluous uses of CChar::Dirty( UT_STATWINDOW ). (giwo)

JScript Changes/Fixes:
	Added NEWBIE option to JS SET command. (giwo)
	Updated JS scripts to use the new .Resist() method instead of .def/.armour (grimson)
	Updated MagicDamage() in level1targ.js, it now uses the new functions and should be
	 equal to the source version of MagicDamage(). (grimson)

DFN Changes/Fixes:
	Fixed two nearly 8 year old UOX3 bugs (one slightly more serious than the other): (Xuri, thanks to Maarc)
		GINSENG was incorrectly spelled as GINSING in spells.dfn
		Some Z coords in locations.dfn used values higher than 127 instead of negative values
	Moved foodlists.dfn into the itemlists folder, and replaced the FOOD= tags in the same file with FOODLIST= tags (Xuri)
	Correct items now added when studded sleeves/gloves are selected in the 'ADD menu (Xuri)
	Adjusted erroneous Z values in house.dfn (Causing outer doors to not be part of the multi). (giwo)
	Updated GM and Counsellor privs in commands.dfn, also placed a bit guide for the PRIVS value. (giwo)
	Removed default PRIV=0 tag from baseitem.dfn, as it would unset decayable value. (giwo)
	Changed PRIV1= tag to PRIV= in npc.dfn. (giwo)
	Added housekeys.dfn to dfndata/items/ and made house creation rely on the script entries therein. (giwo)

JS Documentation Changes:
   	Updated documentation somewhat (Maarc)
	Updated style sheet (Maarc)
	Reordered character methods so that it matches their declaration in code (Maarc)
	Added placeholder entries for a number of character methods (Maarc)
	Added a couple of methods to characters (Maarc)
	Removed character methods that did not exist any more (Maarc)
	Updated the character methods page under the hood so that it's more readable, and takes better advantage of style sheets (Maarc)

-==============================-
-= 08/03/2006 - UOX3 0.98-3.5 =-
-==============================-
Source Changes/Fixes:
	Corrected an issue causing Create menu's to double up when reloading the DFN's. (giwo)
	Added a check to ensure a character has a backpack when coloring the "Pack" option in the popup menu. (giwo)
	Fixed an issue causing character paperdolls to have incorrect spacing. (giwo)
	JS Method .SetTag() now accepts boolean values (true/false). (giwo)
	Added AssocScript tag to effect saving (to make JS timers persistant). (giwo)
	Updated JS .SetPoisoned() to take one value for changing a poison value without setting a new timer. (giwo)
	Updated healing.js and made it function entirely in JS. (giwo)
	Removed tempeffects case 14, 22, 23, and 24, as they are handled by JS now. (giwo)
	Made items created with JS CreateBlankItem() decayable by default. (giwo)
	Fixed some issues with axe.js, put tree-chopping on a timer with a skill delay. (giwo)
	Fixed several issues where items were not decayable that should be. (giwo)
	Defaulted JS CreateBlankItem() to set items to decayable. (giwo)
	Do an immediate update of the charflag and the char upon taming and un-taming. (grimson)
	First part of the rewrote hunger system: (grimson)
		Moved hunger calculations and immediate effects to CChar::DoHunger( )

		You can now set hunger dependend on races, this uses a new tag in races.dfn:
			HUNGER=#,# the first value is the hunger rate the second the hunger damage.
				   Note for players char the settings from the uox.ini apply if
				   there are no settings specified for the race.

		Re-activated the pet-hunger system. Pets will now become hungry and upon starving
		there is a configurable chance that they may become wild again. Note: Pets won't
		die from hunger and their hunger value is reset after becoming wild again. The
		hunger rate and the chance to become wild again can be configured by a new tag:
			TAMEDHUNGER=# # the first value is the hunger rate, the second the chance in %
					of the pet becoming wild again. Note: The values are seperated
					with a space instead of a comma on this tag.
		To feed a pet just drag some food on it, currently all types of food work.

		There is also another new DFN tag:
			WILLHUNGER=# if this is set to 0 the NPC will not suffer from any type of hunger.
				     Note: You can also change that value for specific chars by using
				     the already existing .willhunger JS property.
	Changed cCharStuff::addRandomLoot() to look for the lootlist inside the items folder because it is there. (grimson)
	Second part of the rewrote hunger system: (grimson)
		Added a new DFN tag for tamed pets:
			FOOD=abc   This sets the name of the foodlist for the tamed item.
		Added a new list type for items:
			FOODLIST   Defines a list of item IDs a tamed char will accept as food.

	Third part of the rewrote hunger system: (grimson)
		Added a new AI type "aiANIMAL" with the number 6. This AI does nothing until the hunger level
		reaches a value of 4, then it looks for other animals, that don't have the aiANIMAL, and attacks
		them. If the hunger level goes below 2 it will attack everything in range, even player chars.
		If the animal kills it's target it's hunger level will be set to 6 again.

		Added 3 new JS propertys for chars:
			.tamedHungerRate returns or sets the rate the char hungers when it is tamed.
			.hungerWildChance returns or sets the chance of the char becoming wild if it's starving.
			.foodList returns or sets the name of the foodlist for the char.

	Changed JS function CBase_Teleport() to prevent player chars from being teleport into a invalid world
	which rendered the player char useless as the client cannot login using that char afterwards. (grimson)
	Changed CheckCharInsideBuilding() to prevent a harmless error message when mounting a mount. (grimson)
	Tweaks to the new hunger system: (grimson)
		Tamed chars only hunger while the player that tamed them is online.
		Tamed mounts don't hunger when they are mounted by a player.
	Fixed a bug in CBase_Teleport() introduced by my earlier changes that caused teleports to other worlds
	to fail with big x and/or y coordinates. (grimson)
	Added three new ini settings: (grimson)
		PETHUNGEROFFLINE=0/1 	Sets whether pets should hunger while the player is offline or not.
		PETOFFLINETIMEOUT=#  	Sets the offline time of a player in days after that a pet becomes
					wild again.
		PETOFFLINECHECKTIMER=#	Sets the intervall in seconds between checks for the player offline
					time.

	Added 2 new NPC values to CChar to state whether the char has been mounted or stabled and check those
	in the DoHunger() and the new checkPetOfflineTimeout() functions. And made them available to the JS
	engine as the 2 new propertys: (grimson)
		.mounted	Can be used to get or set the mounted status
		.stabled	Can be used to get or set the stabled status
	Prevent spamming of weather packets when riding a boat. (grimson)
	Added a quick fix to the inMulti() function to make boats workable again. (grimson)
	Changed the HP and HPMAX tags so that you can set a minimum and maximum value. (grimson)
	Removed the IsMounted() function and replaced all it's calls with the GetMounted function. (grimson)
	Allow a food list to contain a link to another foodlist. (grimson)
	Changed TurnStuff() in boats.cpp to fix players getting stuck when turning the boat. (grimson)
	Added a Dirty( UT_LOCATION ) to HandleDeath() in pcmanage.cpp to make shure the player gets
	properly updated when he dies. (grimson)
	Fixed an issue causing players to not disembark boats properly. (giwo)
	Fixed an issue causing boat holds not to be made part of the multi. (giwo)
	Updated the INI loading code to make it more verbose. (giwo)
	Removed "Golden" health until we know when (if ever) OSI uses it. (giwo)
	Created a new class, CJSEngine along with the files CJSEngine.cpp/.h (giwo)
	Created a new class, CJSRuntime to allow multiple runtimes (for threading purposes). (giwo)
	Moved JSObject creation and handling into CJSRuntime. (giwo)
	Moved global JS Context and Runtimes into CJSRuntime. (giwo)
	Moved JS Engine loading code into CJSEngine. (giwo)
	Modified cScript so all JS Scripts on a runtime share a single context. (giwo)
	Removed global.cpp from the project. (giwo)
	Fixed some issues with Multi and Static height calculations. (giwo)
	Moved Definition of global JS classes into CJSRuntime. (giwo)
	Locked the JS Class prototypes for Garbage Collection purposes. (giwo)
	Fixed a crash when shutting down the server. (giwo)
	Updated bitmask setting/getting code for CChar, making it a bit more friendly and less error prone (Maarc)
	Modified OnIterate() to de-allocate any JSObject it uses to free wasted memory. (giwo)
	Merged all boolean values in cServerData to a single UI32 using bitmasking. (giwo)
	Changed the default of totame to 0x7FFF and allowed taming of NPCs with a value of 0. (grimson)
	Changed DFN tags MANA and STAMINA so you can set a minimum and maximum value. (grimson)
	Added new DFN tags: (grimson)
		MANAMAX, STAMINAMAX  They work equal to the HPMAX tag.
		TOPROV, TOPEACE	     They set the minimum skill amount to provocate or peace a NPC.
	Added new JS propertys: (grimson)
		.skillToProv  Can be used to get/set the amount of skill needed to provocate a NPC.
		.skillToPeace Can be used to get/set the amount of skill needed to peace a NPC.
	changed JS propertys: (grimson)
		.maxstamina and . maxmana now work equal to the .maxhp property.
	Added the new JS propertys to the set command. (grimson)
	Fixed a bug that allowed health regeneration while the char was starving. (grimson)
	Moved the bools for the fixed maxHP, maxMana, maxStamina into a bitmask. (grimson)
	Changed CChar::WearItem() to not fire the onEquip event on world loads. (grimson)
	Modified the TOPEACE tag so it can take a second value that sets the chance gain to recover
	from peacemaking upon hits. (grimson)
	Modified cMagic::MagicDamage() and CHandleCombat::HandleCombat() to recover from peacemaking
	by calculating a chance using the chance gain set on TOPEACE and the number of hits. (grimson)
	Added two new JS propertys for chars: (grimson)
		.canAttack  Set this to 0 to prevent a char from attacking.
		.brkPeaceChance  Gets and Sets the chance gain to recover from peacemaking.
	Modified the .skillToProv and .skillToPeace propertys so they return the value of the corresponding
	skill for player chars. (grimson)
	Changed CHandleCombat::HandleNPCSpellAttack() to prevent NPCs from using spells when they
	are not allowed to attack. (grimson)
	Changed cMagic::SelectSpell() to prevent PCs from using spells when they are not allowed
	to attack. Note: This doesn't effect JS implemented spells, use the .canAttack property
	in them to prevent the use of these spells. (grimson)
	Output a sysmessage to PCs informing them that they can not attack. (updated Dictionaries) (grimson)
	Added another new JS property for chars: (grimson)
		.setPeace=#  This handle the whole peacemaking effect, it will stop the char from attacking
			     and prevent him from attacking again until the given time is over or he got
			     enough damage.
	Output a sysmessage to PCs informing them of the end of the peace effect. (Dictionarys again) (grimson)
	Added a line of sight check to the isValidAttackTarget() function in ai.cpp so NPCs won't attack
	targets they can not see. (grimson)
	Modified cCharStuff::addRandomLoot() so that loot lists can contain links to other loot lists. (grimson)
	Added some example usages of ClilocMessage(). (giwo)
	Added support for packet 0xC1, sending cliloc messages. (giwo)
	Added two ClilocMessage() functions, one for direct-to-socket (system) messages, and one
		for object-speech (to a socket or to all sockets in range). (giwo)
	Fixed some areas that could possibly cause MapRegion corruption. (giwo)
	Fixed a VC 2005 Compiler warning. (giwo)
	Defaulted CreateItem() to set decayable to true. (giwo)
	Added functions IsStaticSurface() and IsTileSurface() to mapstuff.cpp and use them in
	CanMonsterMoveHere() to prevent spawnregions from spawning NPCs in places where they
	can not move or shouldn't be able to move to, like display cases. (grimson)
	Updated code that uses |= and &= to use MFLAGSET and MFLAGGET instead, promoting them to a higher public level.  Down to
	 only a very few number of references like that now (Maarc)
	Updated the race code because it was getting out of sync with the WeatherTypes.  The two were bound together in a number
	 of ways, and it's now more generic and tied closer (Maarc)
	Added archery/spell breakage on PC movement.  If a player successfully moves, then the spell they are casting fails,
	 or their archery shoot timer is reset. (Maarc)
	Replaced the WATERCREATURE tag from creatures.npc with a new tag: (grimson)
		MOVEMENT=WATER for creatures that can only move in water.
		MOVEMENT=LAND  for creatures that can only move on land.
		MOVEMENT=BOTH  for creatures that can move on land and in water.
	Added calc_WaterWalk() function to movement.cpp and changed the calc_move() function so that
	it uses it for water creatures and amphibians. (grimson)
	Added IsStaticWet() and CanSeaMonsterMoveHere() functions to mapstuff.cpp. (grimson)
	Added FindCharSpotToSpawn() to cSpawnRegion.cpp and use it when spawning NPCs, renamed
	FindSpotToSpawn() to FindItemSpotToSpawn() and use it when spawning items.(grimson)
	Updated cCharStuff::FindSpotForNPC() to also allow spawning of water and amphibian NPCs. (giwo)
	Modified the JS Object creation to reduce memory waste. (giwo)
	Made some minor modifications to CUSTOMSTRINGTAG and CUSTOMINTTAG handling. (giwo)
	Added some additional debug messages to Region handling. (giwo)
	Fixed a crash involving weather. (giwo)
	Fixed an issue that would cause invalid objects to be left in mapregions. (giwo)
	Fixed some issues caused by my previous changes to objects in mapregions. (giwo)
	Fixed some issues when setting containers. (giwo)
	Fixed an issue causing targeting cursors to sometimes target a character when the target should be invalid. (giwo)
	Fixed an issue causing JS Gumps not to function. (giwo)
	Added detailed packet logging to CPITargetCursor. (giwo)
	Added two vectors to spawnregions to store valid locations. (grimson)
	You can define valid locations using the new DFN tags:
		VALIDLANDPOS=#,#,#
		VALIDWATERPOS=#,#,#
	Changed FindCharSpotToSpawn() and FindItemSpotToSpawn() so that they first check
	agains the list to see whether a location is valid. If the location is not in the
	list but valid it will be added to the list. If no valid location has been found
	it tries to get a random one from the list of already stored locations. (grimson)
	Added two maps to spawnregions to make checking for valid locations easier. (grimson)
	Check if the z value of stored locations still match the dynamic z value of the
	current locations to track whether dynamics have changed. (grimson)
	It's better to recalculate and check the whole z coordinate of a stored
	location to make shure nothing has changed since we stored it. (grimson)
	Removed the IsSurface check of dynamic tiles from cMapStuff::CanMonsterMoveHere(),
	as many landscape tiles don't have the surface flag set. So it prevented valid spawns. (grimson)
	Added a new ini setting: (grimson)
	COMBATARCHERRANGE=#  This defines the range at which archers stop charging
			     the target in combat. (Default is 7)
	Changed cMovement::SendWalkToPlayer() so that the sequenz number fits the description
	in CPacketReceive.cpp. (grimson)
	Changed CPIResyncReq::Handle() so that it actually does resend everything around
	the player. (grimson)
	Added the Script # to the JS Error Reporter to make debugging easier. (giwo)
	Fixed an issue causing JS scripts to give useless error messages on server startup. (giwo)
	Modified the region debug code to not default to on in debug mode. (giwo)
	Updated loading code so that it displays a more accurate percentage during loading (Maarc)
	Minor changes to the JS Handling. (giwo)
	Modified UOXCFile handling to remove all props and added .EOF(), .Pos(), and Length() methods. (giwo)
	Fixed an issue causing items not to dissapear when 'removed (giwo)
	Fixed an issue causing characters to randomly dissapear around NPC's (giwo)
	Fixed an issue causing items and characters to be updated when out of range. (giwo)
	Fixed a VC2005 Compile issue. (giwo)
	Included a default VC 2005 Project/Solution file. (giwo)
	Fixed LineOfSight() not working when you stand directly next to the target. (grimson)
	Changed checkItemLineOfSight() so that it checks whether you can see the base or
	the top of the target item. (grimson)
	Fixed CPIAllNames3D::Handle() so that SHIFT+CTRL actually shows the names of NPCs. (grimson)
	Fixed a possible issue caused by passing float values to JS func RandomNumber() (giwo)

JScript Changes/Fixes:
	Added carpentry, tinker, leather repair, bow repair, bandage, sewing kit, mortar, and archery butte ID's to
	 js_objectassociations.scp (giwo)
	Fixed a bug causing sources for resource-harvesting not to get properly initialized (Xuri)
	Defined respawn delay and maximum resources as easily editable global variables	(Xuri)
	Made items added using 'ADD <hex-id> and 'ADD SPAWNER <hex-id> not decay by default (Xuri)
	Updated creatures.dfn to use the new MOVEMENT tag. (grimson)
	Updated tiles.dfn to set a water tile to wet that was missing that flag. (grimson)
	Fixed a minor issue with axe.js (giwo)
	Updated the peacemaking.js to use the new property and to prevent peacemaking from affecting the
	char using it. (grimson)

DFN Changes/Fixes:
	Fixed a bug with rugs_carpets.dfn where a closing bracket was missing for object 0x1e41	(Maarc)
	Replaced HP tag with HPMAX for all appropriate NPCs (Xuri)
	Updated TOPROV, TOPEACE and TOTAME tags for all NPCs (Xuri)
	Added the HUNGER=#,# description to the header of races.dfn. (grimson)
	Added the TAMEDHUNGER tag to mounts.dfn with a hunger rate of 600 and a chance to become
	 wild of 30%. (grimson)
	Added a new file foodlists.dfn to the items folder containing an example list for horses. (grimson)
	Added the horse foodlist to mounts.dfn. (grimson)
	Added TAMEDHUNGER and FOOD tags to all appropriate NPCs (Xuri)
	Added Squirrel and Ferret NPCs to animals.dfn, and added them to the NPC addmenu (Xuri)
	Fixed a misspelled skillname for a gargoyle NPC (Xuri)
	Added id 0x122a to harditems.dfn with DECAY=1, so blood puddles added when carving corpses actually decay (Xuri)
	Changed animals.dfn, added NPCAI=6 to all animals belonging to the race Predator. (grimson)
	Changed races.dfn, all members of the race Predator change their hunger level every 300 seconds
	 and get damaged for 5 points when starving. (grimson)
	Fixed a bug with rugs_carpets.dfn where a closing bracket was missing for object 0x1e41 (Maarc)
	Changed the the numbers in the LOOT tags of NPCs to random lootlist entrys. (grimson)
	Fixed some GET tags in the armor dfns that were pointing to non existant items. (grimson)

-==============================-
-= 20/02/2006 - UOX3 0.98-3.4 =-
-==============================-
Source Changes/Fixes:
	Updated the CPUpdateStat function to use the GetMaxHP, GetMaxStam and GetMaxMana
	 for sending the respective values instead of sending the strenght, dexterity and
	 intelligence values. (Grimson)
	The current HP and (if present) the fixed maxHP will now be saved on worldsaves. (Grimson)
	Added two new DFN tags for NPCs and Items: CUSTOMSTRINGTAG and CUSTOMINTTAG with
	 them you can specify custom tags inside the DFNs and use them in JS scripts. (Grimson)
	Added two new JS functions:
	FindItem( x, y, z, world, id) - returns the item with the "id" that is on the "z"
	 level and closest to the coordinates of x and y. Or NULL if no item is found. (Grimson)
	GetItem( x, y, z, world) - returns the item that is on the given coordinates or NULL if there is no item. (Grimson)
	Fixed an issue causing Large Dragon Ship deeds to not function. (giwo)
	Stopped CChar from saving HP as CBaseObject handles saving hitpoints. (giwo)
	Modified getItem() and findItem() a bit and renamed them to GetItemAtXYZ() and FindItemAtXYZ() (giwo)
	Fixed some minor cooking issues, and removed cSkills::HandleCooking() as JS now handles cooking. (giwo)
	Fixed an issue causing stats to almost never increase. (giwo)
	Added an additional option to SKILLPOINT to specify for each level how much skill to gain on success. (giwo)
	Removed EngraveAction() as it did not function and custom skills can be added in JavaScript. (giwo)
	Moved Meditation skill out to JS. (giwo)
	Moved Inscription skill out to JS. (giwo)
	Moved MAKESHOP command out to JS. (giwo)
	Moved Lockpicking skill out to JS. (giwo)
	Moved Skills::TinkerAxle out to JS. (giwo)
	Moved Skills::TinkerAwg out to JS. (giwo)
	Moved Skills::TinkerClock out to JS. (giwo)
	Moved TinkerSextant functionality out to JS. (giwo)
	Made shure to start world timers on server startup. (Grimson)
	Changed startChar() to do a checkRegion() directly after a login. (Grimson)
	Changed CWorldMain::doWorldLight to actually take the current time into account when calculating the light level. (Grimson)
	Added the dungeons to the regions.dfn, so LIGHTDUNGEONLEVEL from the ini is correctly applied to them. (Grimson)
	Removed checkRegion() from startChar() as it isn't needed. (Grimson)
	Fixed the release time check in JailCell::PeriodicCheck(). (Grimson)
	Changed CWorldMain::doWorldLight again, so the light level will actually reach
	 the LIGHTBRIGHTLEVEL and LIGHTDARKLEVEL values. (Grimson)
	Changed the checkRegion() function to prevent useless guard messages when you go from one unguarded region to
	 another unguarded region. (Grimson)
	Changed the getlight command, so it returns the correct value when the region has a weather system. (Grimson)
	Added a rounding function for numbers and use it in the doLight(), command_getlight() and
	 doWorlLight() functions. (Grimson)
	Moved WillResultInCriminal() from combat.cpp to uox3.cpp as it is not limited to combat situations. (Grimson)
	Changed cMagic::MagicDamage() so that attackers can become criminal and murderers. (Grimson)
	Changed CHandleCombat::StartAttack() so that attacking NPCs can become criminal. (Grimson)
	Fixed an issue causing newbie clothing to be dropped on the ground if the character had scripted starting armor. (giwo)
	Added Multiple-ID resource handling for create.dfn. (giwo)
	Fixed 3D client crashes with CChar::talkAll() and  CChar::talk(), when the text color is 0x0000 it will
	 be set to the default of 0x5A. (Grimson)
	Changed cMagic::MagicDamage() again, so that the murder count is increased when needed and NPCs fight back
	 when they get attacked with a spell. (Grimson)
	Fixed the text message of the evaluating intelligence skill. (Grimson)
	Removed resource counts before launching create menu's, as the create menu handles that. (giwo)
	Marked StringToNum(), NumToString(), NumToHexString() for later deletion, please use built-in JS
	 method .toString() and function parseInt() in their place. (giwo)
	Implemented JS props .stone and .master for Guilds. (giwo)
	Removed the following JS functions as they are superfluous. (giwo)
		IsRegionGuarded
		CanMarkInRegion
		CanRecallInRegion
		CanGateInRegion
		GetGuildType
		GetGuildName
		SetGuildType
		SetGuildName
		SetGuildMaster
		GetNumGuildMembers
		GetGuildStone
		GetTownMayor
		GetTownRace
		SetTownRace
		GetTownTax
		GetTownTaxResource
		SetTownTax
		SetTownTaxResource
	Committed some fixes to giwo's last commit (missed some changes in cScript.cpp that was blocking people
	 from compiling) (Maarc)
	Removed a lot of commented stuff.  Dead code that's not used any more and things like that have been reduced (Maarc)
	Begun damage/healing tracking support.  All places in C++ code should be covered (will need to update JS engine). Healing
	 and damage is now tracked per character, so that they can find out who has damaged/healed them the most.  If healing/damage
	 hasn't occurred in the past 5 minutes, they get taken off the list (Maarc)
	An offshoot of the damage tracking stuff is a change to combat.  Fame/karma/kills has been moved into CBaseObject,
	 because in future, we'll look at tracking fame/karma/kills updates for weapons and armour (so if you kill repeatedly with a
	 sword, the sword's kill count increases) (Maarc)
	Much of the fame/karma/kills stuff isn't done, and currently, we don't take advantage of the damage tracking. Future
	progressive updates will help with karma/fame parcelling on death, and to help NPCs make smarter decisions in combat
	Broke out packet 0xBF into a CPI class of it's own. Rather than making it a huge monolithic class, it internally hands
	 it off to other packet handling classes (Maarc)
	Fixed VC6 build errors (thanks to giwo). (Grimson)
	Rewrote parts of the weather system: (Grimson)
		Added weather type storm.
		Heat wave and cold snap are calculated once per uo day and set the temperature to a fixed value
	    	between MAXTEMP and HEATINTENSITY resp. COLDINTENSITY and MINTEMP.
	    	Storm, Snow and Rain are calculated oncer per uo hour.
	    	Rewrote doWeatherEffect() to better seperate the different weather effects and to change the way they are calculated.
	Added new settings to races.dfn: (Grimson)
		HEATLEVEL - Sets the minimum heat at which the race get's damaged.
		COLDLEVEL - Sets the minimum cold at which the race get's damaged.
		STORMAFFECT - Defines if the race is affected by a storm
		STORMDAMAGE - Defines the damage a race takes from storm
		STORMSECS - Defines the interval at which the races takes damage from a storm.
	Added cMapStuff::inBuilding() function to determine wheter a given set of coordinates is inside a building.
	 It does this by checking whether there is a static or multi above the coordinates. (Grimson)
	Added inBuilding() and SetInBuilding() functions to CChar and set it on movement and teleport. (Grimson)
	Use the new inBuilding() function to stop/start weather effects as soon as a player enters or
	 leaves a building. (Grimson)
	Send the light level and weather status directly after a player log's in. (Grimson)
	Fixed some bugs in calculating the heat/cold damage in doWeatherEffect(). (Grimson)
	Rain now lowers the current temperature by 5, a storm by 10. (Grimson)
	Moved the sending of the light level and weather status from startChar() into
	 cChar::Teleport() by adding a force forceUpdateLight option to checkRegion(). (Grimson)
	Rewrote the doLightEffect() function, it now uses the current light level to scale the light damage,
	 it also respects the LIGHTLEVEL setting from races.dfn and it will stop doing light damage if you
	 are inside a building. (Grimson)
	Added a the possibility that a char gets hit by a lightning during a storm, this is controlled by the
	 LIGHTNINGAFFECT, LIGHTNINGDAMAGE and LIGHTNINGCHANCE settings in races.dfn. (Grimson)
	Added storm to the IsRaceWeakToWeather() JS function. (Grimson)
	Light and weather effects now also work on NPCs. (Grimson)
	Added 3 new JS events: (Grimson)
		onLightChange( mChar, lightLevel )
		onWeatherChange( mChar, weatherId )
		onTempChange( mChar, temperature )
		These events also work on the global script id and get called for players and NPCs.
	Removed several item types from itemtypes.dfn as they are now handled by JS. (giwo)
	Fixed an issue causing the Snooping skill not to function. (giwo)
	Fixed an issue causing GM Polymorph Menu not to function correctly. (giwo)
	Fixed an issue causing Doors not to be added to the house they were part of. (giwo)
	Moved the Multi check to containers specifically rather than on any item use, to enable use of house signs
	 and doors from outside. (giwo)
	Stopped saving the weather type in regions.wsc, this prevented changes from regions.dfn to apply. (Grimson)
	Make use of the SNOWINTENSITY, RAININTENSITY and STORMINTENSITY from weatherab.dfn, they are now
	 used in calculating the damage a char takes from these elements. The damage is scaled by calculating
	 a random number between 0 and the intensity, this number is then used as a percent value against
	 the damage value in races.dfn. (Grimson)
	Fixed a small bug that prevent a storm from ending. (Grimson)
	Updated the SkillCheck in HandleCombat() to be based upon the defenders tactics skill. (giwo)
	Updated Skills::SkillCheck() to have a chance of success based upon the maximum skill + 100, rather than 1000. (giwo)
	Fixed several issues causing spellbooks not to display properly. (giwo)
	Fixed an issue causing Strength, Dexterity, and Intelligence to permanently drop when they are temporarily lowered. (giwo)
	Added two new shield ID's to CItem::IsShieldType(). (giwo)
	Added spacing after fame titles to fix a paperdoll display issue. (giwo)
	Fixed multiple issues in LineOfSight() that caused miscalculations of the coordinates that should be checked. (Grimson)
	Added line of sight checks to CPIPopupMenuRequest::Handle(), CBaseVendorResponse::CBaseVendorResponse() and
	 CPIDblClick::Handle() to prevent people from using items and vendors through walls. (Grimson)
	Changed HandleWeatherChanges() so it updates the weather values of NPCs too. (Grimson)
	Changed reading the SNOWINTENSITY, RAININTENSITY and STORMINTENSITY in weatherab.dfn so that
	 you can set a min and max value for the damage percent. See the examples in the updated weatherab.dfn. (Grimson)
	Added two new values to weatherab.dfn: (Grimson)
		STORMTEMPDROP this sets the amount the temperature drops when there is a storm
		RAINTEMPDROP this sets the amount the temperature drops when it is raining.
	Renamed HandleWeatherChanges() to CheckCharInsideBuilding() as it is more apropriate. (Grimson)
	Stopped weather effects affecting ghosts of death players. (Grimson)
	Partially rewrote cMovement::SendWalkToOtherPlayers to correctly send chars and remove them from sight. (Grimson)
	Changed CPExtMove::CopyData() so the running state of player chars is correctly send. (Grimson)
	cMovement::SendWalkToOtherPlayers() didn't check if the chars are in the same world, added this now. (Grimson)
	Added ability to xgate to a specific x, y, z. and worldnumber (giwo)
	Updated TeleportLocations to teleport any players pets that are inrange with them. (giwo)
	Fixed a minor issue with Moongates teleporting Pets. (giwo)
	Fixed a compiler error in VC 2003 caused by fabs(). Note that using fabs() should only be used with floats & doubles. (giwo)
	Modified HandleCombat() so the target has a chance to gain Tactics when hit. (giwo)
	Gave armor a 50% chance not to be damaged when successfully hit. (giwo)
	Reduced armor damage to 0-1 points (rather than 0-2) when hit. (giwo)
	Updated Towns to be escort regions by default in regions.dfn (giwo)
	Added two functions to the JS engine for characters, Heal() and Damage() (Maarc)
		void Damage( amtDamaged, [attacker] );
		void Heal( amtHealed, [healer] );
	The second parameters are optional, but basically it ensures that any change through here is tracked
	Fixed an issue causing possible account corruption. (giwo)

JScript Changes/Fixes:
	Renamed moongate.js to teleporter.js (Xuri)
	Added gump-driven moongate system to new moongate.js file (optional, not currently in use) (Xuri)
	Added new moongate.js to jse_fileassociations.scp and changed old moongate.js to teleporter.js (Xuri)
	Fixed some issues with pitcher.js (giwo)
	Updated all JS files to use toString() and parseInt(). (giwo)
	Fixed a minor issue with teleporter.js. (giwo)

DFN Changes/Fixes:
	Added dex penalty to Samurai Plate armor (same as for normal plate armor) (Xuri)
	Fixed the GM Locations menu in travelmenu.dfn so you can travel to the jail cells again. (Grimson)
	Made a few changes to regions.dfn. (Grimson)
	Fixed some create.dfn items that had overlapping numbers. (giwo)
	Changed create.dfn handling so ID's of 0 (default) display nothing on the gump. (giwo)
	Updated create.dfn menu's with "Previous Menu" entries. (giwo)
	Modified skills.dfn SKILLPOINT to use ,'s for seperators. (giwo)
	Added LEATHER resource type for create.dfn (giwo)
	Added cloth ID's to CLOTH resource type. (giwo)
	Wrote all available race settings into the header of races.dfn and documented a few of them. (Grimson)
	Updated skills.dfn a bit to improve skill gain between levels 0.00 and 1.00 (giwo)
	Fixed a minor issue with regions.dfn causing Yew not to be considered a town. (giwo)
	Updated the grizzly and polar bear entries in creatures.dfn to have the proper sounds. (giwo)

-==============================-
-= 12/02/2006 - UOX3 0.98-3.3 =-
-==============================-
Source Changes/Fixes:
	Encapsulated JS class name retrieval into JSEncapsulate and switched over to using that everywhere (Maarc)
	Fixed a potential bug (or at least, a naughtiness) with CBase_Teleport, with premature casting (Maarc)
	Fixed a bug where if ApplySection() was called with an empty string, it wouldn't abort correctly (JS Engine) (Maarc)
	Fixed a possible issue with Karma(), where we reset on caps, but don't update our calculations (Maarc)
	Added necromancy, focus, chivalry, bushido and ninjitsu to skills in JS engine (Maarc)
	Fixed several issues with CPOpenBuyWindow fixing an issue causing items in buy windows to display improperly. (giwo)
	Fixed an alignment issue with CPItemsInContainer logging. (giwo)
	Removed CItem::Sort() as it is now superfluous. (giwo)
	Moved CItem::WalkXY() to CBaseObject. (giwo)
	Minor updates to cSkills::RandomSteal(). (giwo)
	Removed JS items[]. access. (giwo)
	Added missing hairstyle (spiked) for female elves (Xuri)
	Fixed an issue causing multi's to contain themselves (giwo)
	Added some error checking to ensure a multi cannot be placed inside another multi. (giwo)
	Fixed an issue causing items and characters on boats to move multiple spaces. (giwo)
	Fixed an issue causing boats to lock the client. (giwo)
	Fixed an issue causing boat commands to crash the 3D client. (giwo)
	Fixed an issue causing the server to randomly crash when sailing for prolonged periods of time. (giwo)
	Removed an extra RemoveFromSight() packet sent upon item deletion. (giwo)
	Removed items from the MapRegion upon deletion. (giwo)
	Added CMapHandler::ChangeRegion() to automatically change an objects region when location changes. (giwo)
	Changed a call to _hypot, as it wasn't portable.  hypotf is the portable ANSI C, but it didn't work, so rolled our own (simple sqrt of the sum of two squares) (Maarc)
	Made some changes to the enumeration JSObjectType, because gcc 3.3.5 was chucking a wobbly over some code  (Maarc)
	Changed a call to _strnicmp to strnicmp to deal with a linux compile error - note, we probably don't want to use such things anyway ... convert both strings to a UString, lower() them, and compare the subsets requested? (Maarc)
	Fixed an issue causing the statwindow not to update properly (thus not showing the proper weight/gold values). (giwo)
	Continued to break LineOfSight() into smaller manageable functions. (giwo)
	Removed superfluous Add()/Remove() functions from CMapHandler. (giwo)
	Rewrote trade windows so they now function properly (Note that if you log out with a trade window open, the client will crash). (giwo)
	Disabled the LoginThread as it was causing crashes and other issues. (giwo)
	Minor changes to const correctness in skills.cpp (giwo)
	Modified packet logging to slim down file size and make it more readable. (giwo)
	Fixed an issue causing logged out characters be visible to those around them. (giwo)
	Fixed an issue causing multis to calculate their size incorrectly (causing boats to drag objects not aboard). (giwo)
	Updated mapstuff.cpp to fix some signed/unsigned mismatches. (giwo)
	Rewrote killTrades() so it would function properly and called it when a player Logs out. (giwo)
	Disallowed GM's to drop items directly on logged out players (note they can still place items in packs), as it was causing other bugs in the client. (giwo)
	Documented trade.cpp (giwo)
	Fixed a possible exploit with secure trading. (giwo)
	Fixed an issue causing it to be impossible to remove characters from a house ban list. (giwo)
	Fixed a server crash caused by transfering house ownership. (giwo)
	Updated the NPC Pathfinding code to fix some issues. (giwo)
	Added a check to ensure boat items are only moved once when boats sail. (giwo)
	Moved maps_def Disposal to the end of CMapStuff::Load() (Maarc)
	Added the ability to override tiledata info for real tiles (not land) (Maarc)
	Bit of const correctness (CTile.Name( const char *newVal )) (Maarc)
	Added some error checking to the INFO command to ensure it is not used on characters. (giwo)
	Fixed an issue causing deeds (and other items) not to display their custom names. (giwo)
	JS Changes:
		Added character props .orgID and .orgSkin (giwo)
		Changed the behavior of character props .id and .skin not to set their org* equivalents automatically. (giwo)
	Replaced CTEffectContainer with a call to CDataList. (giwo)
	Fixed multiple issues causing temporary effects to randomly never expire. (giwo)
	Fixed an issue causing mana never to regenerate completely in certain circumstances. (giwo)
	Minor const correctness and signed/unsigned mismatch changes. (giwo)
	Removed MOVETYPE= world tag from boats, as they should always start sitting still. (giwo)
	Added a check to ensure a boat stops moving if all characters onboard leave a moving boat. (giwo)
	Added spawn.dfn tag PREFZ=, this sets the maximum Z influence dynamic and static items can have on spawning. (giwo)
	Incorporated Grimsons fixes to CSpawnRegion to allow NPC's to spawn at the proper Z based on the static and dynamic items at their location. (Grimson)
	Fixed a minor issue with saving tempeffects. (giwo)
	Fixed an issue causing objects not to default to script ID 0 (global script). (giwo)
	Added onDeathBlow( pKilled, pKiller ) JS event. (giwo)
	Minor code cleanups. (giwo)
	Fixed wholist so that the stats link now works from it (Maarc)
	Fixed an issue causing ID and Type-based JS scripts not to run if an object had a script associated with it. (giwo)
	Fixed an issue with SetTag() causing 0 and null values not to unset the tag. (giwo)
	Fixed some wierdness when using the Delete() property in JS. (giwo)
	Minor updates to autoStack(). (giwo)
	Fixed some issues with dropping items on other items in packs. (giwo)
	Overhauled the character flagging system: (giwo)
		Added FlagColors enum.
		Renamed setcharflag() to UpdateFlag().
		Rewrote FlagColour() to make use of an enum and made it part of CChar.
		Made use of CChar::FlagColour() in several areas where we were doing the work manually.
		Added CChar SetNPCFlag() and GetNPCFlag() alond with cNPC_FLAG enum.
		Removed CChar IsNeutral() and SetNeutralFlag().
		Fixed an issue causing CChar Flagging functions not to return proper values.
		Replaced Dfn tag NEUTRAL with FLAG= the options for which are NEUTRAL, INNOCENT and EVIL.
		Replaced JS character property neutral with npcFlag, for which the values are 0 = NEUTRAL, 1 = INNOCENT, 2 = EVIL.
	Broke DropOnItem() into several smaller functions. (giwo)
	NPCFlag now saves to the worldfile. (giwo)
	Fixed an issue causing neutral animcals to never appear innocent when in town. (giwo)
	Fixed an issue causing tamed animals to not carry their owners flag. (giwo)
	Added support for invulnerable (yellow) flagging. (giwo)
   	Re-added IsNeutral() Character flag as well as .neutral JS character property. (giwo)
   	Fixed an issue causing items to "bounce" when being dropped on the same character they were picked up from. (giwo)
   	Fixed an issue causing Ghosts to be bugged after a server restart. (giwo)
	Modified newbie item creation so scripted items take precedence over default clothing. (giwo)
	Added JS property .isShop to transform an NPC into (and back from) a shopkeeper. (Grimson)
	Fixed some issues causing flagging not to be updated after setting flags in JS. (giwo)
	Added error-checking when an invalid script entry is called with the GET tag. (giwo)
	Modified AR statwindow reporting to give larger numbers. (giwo)
	Removed teffect.cpp from the VC6 workspace, as it no longer exists. (Grimson)
	Modified the flags of display cases via the tiles.dfn to prevent NPCs from walking on them. (Grimson)
	Added fixed maximum HP for chars. You can set it by a new dfn tag "HPMAX" or by the
	.maxhp JS property. Setting a negative value via the .maxhp JS property will reset the fixed value. (Grimson)
	Updated the set command to make use of the .maxhp JS property. (Grimson)
	Modified 'setscptrig so it accepts 0 as a value even if no script 0 exists. (giwo)

JScript Changes/Fixes:
	Illogical operator sequence in skin.js fixed, all skincolors should now work, as opposed to only every second one (Xuri)
	Modified the stealth skill spam to conform to OSI messages. (giwo)
	Fixed an issue causing the POLY command to change ones skin color. (giwo)
	Added TEMPSTR/TEMPSTRENGTH TEMPDEX/TEMPDEXTERITY and TEMPINT/TEMPINTELLIGENCE options to the SET command. (giwo)
	Added 'set DEF (items), ARMOR (chars), and LAYER (items) commands. (giwo)

DFN Changes/Fixes:
	Added leather cap to base_armor.dfn, and added right facing leather cap to leather_armor.dfn (Xuri)
	Added missing values and proper movable tag to a few tables sold by the carpenter vendor. (Xuri)
	Added tiles.dfn in uox3\dfndata\maps\ to support overriding tiledata info (Maarc)
	Changed the stat-modifier of the wizard's hat to conform with official UO (-5 STR, +5 INT) (Xuri)
	Renamed some magical reagents to their proper names (Xuri)
	Added paladin spellbook and necromancer spellbook to misc_magic.dfn (Xuri)
	Added book of ninjitsu and book of bushido to dfndata\items\misc\books.dfn (Xuri)
	Added [base_hat] to headwear.dfn for common headwear properties (Xuri)
	Added necromancer-specific leather armor to leather_armor.dfn (only thing different is color) (Xuri)
	Added clothing from SE to uox3\dfndata\items\gear\clothing\se_clothing.dfn (Xuri)
	Added headwear from SE to uox3\dfndata\items\gear\clothing\se_headwear.dfn (Xuri)
	Added footwear from SE to uox3\dfndata\items\gear\clothing\se_footwear.dfn (Xuri)
	Updated all instances of NEUTRAL in the dfn's to FLAG=NEUTRAL (giwo)
	Added some FLAG=EVIL, FLAG=INNOCENT, and FLAG=NEUTRAL tags to appropriate NPC's (giwo)
	Updated some DFN armor defense ratings in items/gear/armor/ (giwo)
	Added Ninja armor uox3\dfndata\items\gear\armor\leather_armor\ninja_leather.dfn (Xuri)
	Added Samurai armors to samurai_leather.dfn, samurai_studded_leather.dfn and samurai_plate.dfn (Xuri)
	(NOTE: DEF values need heavy tweaking!)
	Added starting equipment for Necromancy, Chivalry, Ninjitsu and Bushido (Xuri)
	Added TEMPSTR/TEMPSTRENGTH TEMPDEX/TEMPDEXTERITY and TEMPINT/TEMPINTELLIGENCE options to the SET command. (giwo)
	Updated all instances of NEUTRAL in the dfn's to FLAG=NEUTRAL (giwo)
	Added some FLAG=EVIL, FLAG=INNOCENT, and FLAG=NEUTRAL tags to appropriate NPC's (giwo)
	Updated DEF values to reflect the UO:R style combat system. (giwo)
	Moved main entries for samurai plate armor, leather armor, studded leather and ninja leather to base_armor.dfn (Xuri)
	Moved samurai plate armor definitions to iron_armor.dfn, and removed samurai_plate.dfn (Xuri)
	Added samurai empire armors to the add-menu, and tweaked some layer values (Xuri)

-==============================-
-= 29/01/2006 - UOX3 0.98-3.2 =-
-==============================-
Source Changes/Fixes:
	Updated some areas of the code to conform to const correctness.. (giwo)
	Fixed an issue causing vendor "Buy" windows to display improperly. (giwo)
	Added some more error-checking to the ClearTrades() function. (giwo)
	Removed JS CChar_Freeze() and CChar_Unfreeze() as the .frozen property does the same thing. (giwo)
	Removed JS CItem_SetPoison() as the .poison property does the same thing. (giwo)
	Added a JS Packet Class, usage: (giwo)
		var myPacket = new Packet;
		myPacket.WriteByte( pos, byte );
		myPacket.WriteShort( pos, short );
		myPacket.WriteLong( pos, long );
		myPacket.WriteString( pos, string, len );
		socket.Send( myPacket );
		myPacket.Free();
	Fixed a logic error in handling the RefreshIP code (Grimson).
	Fixed an issue causing players to apper gray rather than dissapear when hiding. (giwo)
	Fixed a login crash caused by the Updates scroll. (giwo)
	Fixed several issues with Writable book handling. (giwo)
	Modified .bok handling code (note that this will cause any old .bok files to be invalid). (giwo)
	Added support for the 0xD4 (New Book Header) packet. (giwo)
	Fixed some issues in /books/books.dfn causing pre-defined books not to be displayed. (giwo)
	Fixed some issues in items/misc/books.dfn causing pre-defined books not to open. (giwo)
	Removed CSocket authorbuffer, pagebuffer, and titlebuffer. (giwo)
	Fixed an issue causing Spells not to function. (giwo)
	Added JS Packet method .ReserveSize( len ); for optimization purposes. (giwo)
	Added new doors from ML-client, expanded DoorNewLocation-function to cover all doors (Xuri)
	Added CPPopupMenu allowing for easier customization of popup menu's. (giwo)
	Removed cScript::spellRegistration, commandRegistration, skillRegistration in favor of (giwo)
	cScript::ScriptRegistration( string skillType ) IE ScriptRegistration( Skill ). (giwo)
	Added the ability to overload Packets in the JS. (giwo)
	Removed xFTP Server code as UOX3 should be a game server, not an FTP server. (giwo)
	Moved spawnregions and regions into CWorldMain. (renaming them to spawnRegions and townRegions). (giwo)
	Modified spawnRegions and townRegions to load in based upon the number assigned for them in the scripts. (giwo)
	Added a socket variable to PlayerValues_st to remove the need to loop through online sockets looking for a characters socket. (giwo)
	Fixed some minor issues with CTEffectContainer. (giwo)
	Fixed an issue that could cause a characters murder decay timer to stop counting. (giwo)
	Added MURDERTIME to the worldsave to make murder decay time persistent. (giwo)
	Fixed some minor compiler warnings. (giwo)
	Added support for compiling under Visual Studio Express 2005 (giwo)
	Changes to uox.ini: (giwo)
		Removed USEFACETSAVES, MAP0, MAP1, MAP2, MAP3, USERMAP, FTPDENABLED,
		FTPDUSER, FTPDUSERLIMIT, FTPDBIND, FTPDROOT, FTPCENABLED, FTPCHOST,
		FTPCPORT, FTPCUSER, FTPCULFLAGS, and MAPCOUNT as they were unused.
		Added OVERLOADPACKETS option to uox.ini to toggle JS packet handling.
	JS Changes: (giwo)
		Re-ordered jse_fileassociations.scp a bit to make more logical sense.
		Added PACKET_SCRIPTS to jse_fileassociations.scp
		Added event onPacketReceive( socket, packetNum, subCommand )
		Added function RegisterPacket( packetNum, subCommand ) // Note that subcommands are not yet supported.
	Removed cSkills::TrackingDirection() as cMovement::Direction() does the same thing. (giwo)
	Fixed a crash caused by canceling the tracking menu. (giwo)
	Fixed an issue causing not all animals to be trackable with the tracking menu. (giwo)
	Added support for clicking on the Tracking Arrow to stop it from displaying. (giwo)
	Modified packet overloading so one cannot run both the overload and the default packet handling, as it would cause a socket error. (giwo)
	Added support for selecting popup menu entries. (giwo)
	Fixed a possible issue with doubled up entries in spawn.dfn and regions.dfn. (giwo)
	Fixed an issue causing UOX3 to hang forever on character creation. (giwo)
	Added file and function documentation to books.cpp and msgboard.cpp (giwo)
	Fixed a bug where skillgain could happen by attempting to craft without having enough resources available (Xuri)
	Updated AreaCharacterFunction, AreaItemFunction and AreaObjFunc to accept both character and item objects are source-object (Xuri)
	Fixed an error generating a warning about bad length in multi's (giwo)
	Made all items default to the unused (0x0000) tile (giwo)
	Changed SeekTile() to return a value indicating if it found a valid tile
	Further update to HowTo, making sure it works through both paths (Maarc)
	GumpInfo type 7 should ignore name, only deal with stringValue.  Code updated to reflect this (fixes AddData( str, str, int )) (Maarc)
	Howto should be fixed so it won't crash on target based commands (Maarc)
	Howto should also support JS commands now, at least in so far as it displays the txt file, if one exists  (Maarc)
	Couple of sections of code updated for real multi checks.  Rather than check if the ID > 0x4000, we actually do a CanBeObjType( OT_MULTI ) instead  (Maarc)
	Auto correct bad multis when encountered (setting to generic house / generic boat)  (Maarc)
	Updated CDictionary.cpp to be const correct, as well as adding some error checking to prevent data corruption. (giwo)
	Removed CACHEMULS from the uox.ini as it is no longer used. (giwo)
	Changed uox.ini entry SHOWHIDDENNPCS to SHOWOFFLINEPCS to better reflect its function. (giwo)
	Fixed an issue with SHOWOFFLINEPCS causing offline pc's to display even if it was set to 0. (giwo)
	Fixed a minor bug with HTML output when the UOX3.exe was not in the base UOX directory. (giwo)
	Fixed a couple of entries in teleport.scp that would cause you to be stuck in britain sewers. (giwo)
	Updated items.cpp and npc.cpp to be const correct. (giwo)
	Fixed an issue with context menus causing one to attempt to "snoop" their own pack. (giwo)
	Fixed a crash when attempting a random steal on a character with no items. (giwo)
	Fixed an issue causing the 'time command to have incorrect spacing. (giwo)
	Yumi-bows should now use arrows instead of crossbow bolts. (Xuri)
	Fixed an Alignment issue in dumping out CPCharAndStartLoc (converting tabs to explicit spaces) (Maarc)
	Turned out last byte of the packet as a real number, rather than a UI08 which is interpreting as a char (Maarc)
	Updated some packet notes from what I could scrounge through the net (Maarc)
	Added basic CPIMetrics class to read in the 0xD9 packet that gets sent (Maarc)
	Fixed a logging issue with CPCharAndStartLoc that wasn't taking the extra characters into account (Maarc)
	Fixed a logging issue with CPCharAndStartLoc that was trying to dump out location details as ASCII codes, not as strings (Maarc)
	Added a feature to packet logging so that it will fill a line of less than 8 bytes to 8 bytes, to even out it's display (Maarc)
	CPISecondLogin logging claimed to be packet 0x80, when in reality, it's 0x91 (Maarc)
	Unknown byte in CPIFirstLogin now displayed numerically, rather than as a dodgy ASCII char (Maarc)
	Changed Seed IP of CPRelay to 0xFFFFFFFF (Maarc)
	Moved pSplit() and PackShort() from CPacketSend.cpp to CPacketReceive.cpp, given that's the only place that it is even used (Maarc)
	Removed some unnecessary dead code (Maarc)
	Added a P_TIMESTAMP define to Config.h, for timestamping packet logs (through the use of RealTime) (Maarc)
	Removed unnecessary defines from Config.h (Maarc)
	Fixed a typo or two (Maarc)
	Removed some debug code I committed by accident (Maarc)
	Our packet logs were generating 7 column data, not 8! (Maarc)
	Updated some packet notes + code (0xA9 and 0xB9 packets) to deal with elves stuff (based on http://www.uox3.org/forum/viewtopic.php?t=748&highlight= ) (Maarc)
	Updated CPCharAndStartLoc to log a few more flags (Maarc)
	Added a detailed Log routine to CPEnableClientFeatures (Maarc)
	Moved Capped() in pcmanage.cpp to higher upwards (Maarc)
	Changed CPICreateCharacter::Log to dump out hex values for body/skin colours (Maarc)
	Added some preliminary support for elvish bodies (Maarc)
	Needs doing: Adding random names list 3 (elf male) and 4 (elf female) for incognito (Maarc)
	Updated gender IDs 0 == human male, 1 == human female (as before).  2 == elf male, 3 == elf female, 0xFF == unknown.  Potentially has JS impacts! (Gender property) (Maarc)
	Note: Need to experiment with gender values with CPStatWindow (see code notes)
	Note: isHuman() doesn't even evaluate current dead bodies, what is the impact?
	Renamed validHair() to validHairStyle() because we want to validate colour as well (Maarc)
	Added a CanSee() routine to JS based socket and character objects.  Syntax is as follows (Maarc)
		sourceObject.CanSee( otherObject );
		sourceObject.CanSee( targX, targY, targZ );
		otherObject can be either a character, item or socket.  If they're not on the same world or the target item is in a container, line of sight fails.
	Proper validation of hair style on creation of elvish characters (Maarc)
	Added new JS event: onCharDoubleClick( pUser, targChar) - allows overriding doubleclicking of characters
	Added new JS event: onSkillGump( socket ) - allows overriding the client's request to open the default skillgump
	Added new JS event: onCombatStart( currChar, targChar ) - allows overriding combat completely
	Added new JS event: onCombatEnd( currChar, targChar ) - allows overriding what happens when combat ends
	JS Event space in cScript expanded from 64 to 96 (Maarc)
	Moved checkkey(), processkey() and cl_getch() from uox3.cpp into CConsole methods (Maarc)
	Added a key/command handler console exposure to the JS environment (involves a secondary runtime because of threading!) (Maarc)
	Note: Creating/editing world objects through this environment is not thread safe, and may cause errors
	Modified Console.PrintDone() and Console.PrintFailed() to take an optional boolean parameter as to whether it is printed instantly, or queued up (Maarc)
	Added functions Console.BeginShutdown() and Console.Reload( intVal ) (Maarc)
		BeginShutdown() takes no parameters
		Reload() takes a single parameter, with the values of
			0	Reload INI
			1	Reload Accounts
			2	Reload Regions
			3	Reload Spawn Regions
			4	Reload Spells
			5	Reload Commands
			6	Reload Definition Files
			7	Reload JS
			8	Reload HTML
	Couple of prettying up with the loading code and what it displays (Maarc)
	Fixed an error with validation of skin and hair colours with human races (my mistake!) (Maarc)
	Fixed a dyed underwear issue with newly created players (Xuri)
	Fixed a bug with clumsy JS (visibility not resetting properly) (Maarc)
	Added JS implementation for heal and feeblemind (Maarc)
	Added JS implementation for magic arrow, but it relies on MagicDamage(), which is not completely implementable (missing Karma, Fame and CPDisplayDamage) (Maarc)
	Added a ValidateObject() function to the JS engine, that behaves the same as it does in the C++ code (Maarc)
	Updated 'set command to support setting of health (via health or hp) (Maarc)
	NOTE: Tweak seems to be broken (the buttons don't fire anything), and I have no idea why (Maarc)
	NOTE: Heal is currently a vampiric heal (some health is subtracted from the caster to heal the target).  This is *not* a new behaviour. (Maarc)
	NOTE: Tweaked up magic arrow damage (a GM mage was doing less than 4 damage every time).   (Maarc)
	Old magic arrow formula
		baseDamage	= 2 + Random( 0, 1 )
		mageryMult	= (Magery / 2000) + 1 (maximum multiplier, 1.5)
		Damage Dealt	= baseDamage * mageryMult - EvalIntCheck
	New magic arrow formula (JS Only!)
		baseDamage	= 2 + Random( 0, 5 )
		mageryMult	= (Magery / 2000) + 1
		DamageDealt	= baseDamage * mageryMult - EvalIntCheck
	The EvalInt check has changed, as well (with the JS code, not the C++ code.  All non-JS spells still adhere to this old standard). (Maarc)
	Previously, a successful check would always draw off a fixed amount of damage ( 10% of your skill level ) (Maarc)
	Adjusted the JS socket property for characters, so that it returns an explicit NULL object if there is no socket attached (Maarc)
	NOTE: Researching into JSExtendedClass instead of JSClass, so that we can implement equality testing (like, attacker != caster sorts of things) (Maarc)
	Hungercheck for players should now be working again (Grimson)
	OnHungerChange JS event will now execute both for hunger level increase as well as decrease, and will also work as global script (Grimson)
	Some fixes for the onHungerChange code to ensure UOX3 doesn't crash when no global script is defined (Grimson)
	Added isAnimal and isHuman as JS character properties. (Maarc)
	Minor code change in tempeffects(). (giwo)
	Updated the version number to reflect recent changes by Maarc and Xuri. (giwo)
	Fixed an issue causing JS Skills not to function if a character had a script assigned to him. (giwo)
	Fixed some minor issues with LineOfSight(). (giwo)
	Began to break LineOfSight() into smaller manageable functions. (giwo)
	Renamed SeekMap0() to SeekMap() to better represent it's ability to seek any map file. (giwo)
	More fixes for const correctness. (giwo)

JScript Changes/Fixes:
	Added feedback message for the dupe-command (Xuri)
	Added feedback on whether or not an item/npc was successfully created (through add.js) (Xuri)
	Added commands: reloadalljs, reloadregions, reloadspawnregions, reloadspells, reloadcommands, reloadhtml, reloadall (Xuri)
	Added commands to repeatedcmds.js: rtele - for repeated teleports, and raddnpc - for repeated npc adds (Xuri)
	Fixed out-of-date radditem command. (Xuri)
	Cleaned up misc-cmd.js and repeatingcmds.js (Xuri)
	Made use of isHuman and isAnimal in animallore.js, begging.js, healing.js and taming.js (Xuri)
	Made sure elven bodies (and ghosts) can be healed with bandages (Xuri)
	Fixed a minor bug in healing.js (giwo)
	Made us of the JS Method CanSee() for LoS checks in JS magic functions. (giwo)

DFN Changes/Fixes:
	Duplicate itemmenu 5022 in npcmenu.bulk.dfn containing champion-NPCs changed to 5023 (longshot)
	Changed DEF values of all NPCs to an average of 10 (some a little weaker, some a little stronger) (Xuri)
	Boneaxeman-stats lowered to that of a skeleton, has been moved to weakundeadlist (Xuri)
	Mummy has been moved to strongundeadlist (Xuri)
	Removed gazer and wisp from strongundeadlist (Xuri)
	Moved common tags in malevendors.dfn and femalevendors.dfn to new NPC; basevendor (Xuri)
	Moved common tags in malehuman.dfn and femalehuman.dfn to new NPC; basehuman (Xuri)
	Fixed several teleport locations (Xuri)
	Fixed missing = in locations.dfn (Fish)
	Included an example script that takes the old 1->9 keys and implements them through the new JS routines (Maarc)
	Included an example script that takes the old shutdown keys and implements them through the JS routines (Maarc)

-==============================-
-= 22/10/2005 - UOX3 0.98-3.1 =-
-==============================-
Source Changes/Fixes: (giwo)
	Modified MapRegions to allow handling of a variable number of words.
	Added maps.dfn to allow customizing UOX3's map handling.
	Added MAPCOUNT to the uox.ini to specify the number of maps UOX3 uses.
	Several major internal changes to the packet handling classes.
	Fixed several integral problems with the account system causing data corruption.
	Fixed some issues causing client crashes in the 5.0.x clients.
	Fixed an issue causing a crash when attempting to add an invalid script item.
	Fixed an issue causing wierdness for players who log in as a Ghost.
	Fixed an issue causing a character to continue firing a ranged weapon when out of ammunition.
	Fixed a possible issue causing monsters to constantly attack animals.
	Modified character flagging so anything that is not a Human or Animal will never show up as blue.
	Modified the "isHuman" check to consider a GM body as human.
	Fixed an issue causing character privledges not to save properly.
	Modified CSocket pagebuffer, titlebuffer, and authorbuffer to be const correct.
	Greatly reduced the size of resource.bin (please ensure you delete your old /shared/resource.bin file).
	Made some minor modifications to reduce the worldfile size:
	(Note UOX3 is backwards compatible with previous worldfiles and will make these changes automatically)
		BEARDCOLOUR and BEARDSTYLE is now BEARD=STYLE,COLOUR and is stored in hex.
		HAIRCOLOUR and HAIRSTYLE is now HAIR=STYLE,COLOUR and is stored in hex.
		ORIGINALBODYID and ORIGINALSKINID is now ORIGINALID=BODY,SKIN and is stored in hex.
		SPLIT and SPLITCHANCE is now SPLIT=SPLIT,SPLITCHANCE.
		QUESTORIGINALREGION and QUESTDESTINATIONREGION is now QUESTREGIONS=ORIGINAL,DESTINATION.
		NPCWANDER and XNPCWANDER is now NPCWANDER=NPCWANDER,XNPCWANDER.
		SPATTACK and SpecialAttackDelay is now SPATTACK=SPATTACK,DELAY.
		PACKITEM, ROBESERIAL, TOWNVOTE, PRIVILEGES, and GUILDFEALTY are all stored in hex.
	Fixed an issue causing RESOURCELOGSRESPAWNTIMER to always use default setting.
	Moved cSkills::resources into CMapWorlds() allowing it support for multiple worlds.
	Fixed an issue with SetTempVar() when setting in parts.
	Made skillnames scriptable via skills.dfn
	Fixed a crash caused by increasing the total number of skills then loading a previous world.
	Added support for BUSHIDO and NINJITSU skills (note these are not implemented yet).
	Enabled support for NECROMANCY, FOCUS, and CHIVALRY (note these are not implemented yet).
	Removed some superfluous code in uoxstruct.h
	Added First/Next/Finished wrappers for iterating through lists of Script files.
	Optimizations to the weather.dfn loading code
	Optimizations to the skills.dfn loading code.
	Optimizations to the spells.dfn loading code.
	Modified loading of creatures.dfn to load entries beyond 2048.
	Added 5 tags to creatures.dfn in place of BASESOUND and SOUNDFLAGS
		SOUND_IDLE 		- The sound the creature makes while standing around
		SOUND_STARTATTACK 	- The sound the creature makes when it enters combat
		SOUND_ATTACK 		- The sound the creature makes when attacking
		SOUND_DEFEND 		- The sound the creature makes when defending
		SOUND_DIE 		- THe sound the creature makes upon death
	Moved Sword use functionality out to JS (for carving kindling, corpses, etc )
	Moved Axe use functionality out to JS (for chopping trees, carving corpses, etc )
	Added JS item property "carveSection" and method Carve().
	Added JS Functions ResourceArea(), ResourceTime(), ResourceAmount() and ResourceRegion()
		The first 3 can be used to Get/Set system settings, using the options "LOGS" or "ORE"
		ResourceRegion() returns a resource object allowing JS to modify resource data.
	Exposed the resource data to the JS engine for modification, props are:
		logAmount
		logTime
		oreAmount
		oreTime
	Fixed a minor issue with resource regions.
	Removed cSkills::BowCraft() as it was unused.
	Moved largeBuffer and largePackBuffer from local declares into CSocket.
	Updated sword.js and axe.js to work properly with 5.0.x clients.
	Added support for MapDiffs/StaticDiffs
	Added mapdiff entries to maps.dfn to allow customizing filenames.
	Added CPEnableMapDiffs to advise the clients of MapDiffs.
	Updated go.js to support passing a world number
	Greatly reduced the memory taken by NPC's and Players.
	Fixed an issue causing ORE_LISTs not to load in properly.
	Fixed a possible crash bug in clearTrades().
	Moved some more variables from Base Characters to Players.
	Organized an documented many functions in CChar.
	Changed itemLayers array to a std::map.
	Removed an unneeded variable from characters.
	Changed JS prop murtertime to tempTime (note tempTime is currently used for spawn items and murder times).
	Made struct GumpInfo a private member of GumpDisplay.
	Changed CItem::layer to make use of the ItemLayers enum.
	Removed global const MAXLAYERS.
	Merged CTownRegion goodsell[], goodbuy[], goodrnd1[], and goodrnd2[] into a struct with a map.
	Removed RUNNING and STEP from the worldfile, as they were unnecesarry.
	Minor cleanups and fixes.
	Moved kills, fame, and karma from CBaseObject to CChar to save wasted memory on items.
	Fixed several warnings when compiling under gcc.
	Fixed a possible issue when duplicating a character.
	Removed several unrefrenced parameters.
	Removed several unused ENUM values.
	Fixed an issue in the CChar constructor causing linux builds to not compile.
	Removed CHANCECOLOURORE and MINCOLOURSKILL from regions.dfn
	Modified cSkills::Mining() to REQUIRE ore entries for proper ore creation.
	Modified CHANCEBIGORE in regions.dfn to give a chance to get more than 1 ore at a time.
	Added a message to advise a player when his skill level is too low to mine coloured ore.
	Improved the MapResource handling code.
	Improved the MapRegion handling code, reducing waste.
	Fixed a possible issue causing invalid data in the refreshQueue and deletionQueue.
	Altered AreaCharFunc code in cScript to also support Items (Maarc)
	Added "AreaItemFunction" as an equivalent to AreaCharacterFunction - perhaps break this
	 into something a little more specific?  eg Items / Multis? (Maarc)
	Added JS StaticAt function - takes 4 parameters - x, y, world, [tileID] (tileID is optional - if
	 not specified, ANY static at that location will match) (Maarc)
	Added JS StaticInRange function - takes 5 parameters - x, y, world, radius, tileID (Maarc)
	Fixed superfluous empty spaces after reputation titles and race names in paperdolls. (Xuri)
	Removed [murderer] appearing behind the character names hovering over the head of characters. (Xuri)
	Check to see if animals have NPCAI 2 before guarding them in town when COMBATANIMALSGUARDED=1 in uox.ini (Xuri)
	Fixed an error in a debug message that would stop UOX3 from compiling if DEBUG_WALKING was enabled. (Xuri)
	Fixed; UOX3 didn't retrieve the correct FY2 value for spawned NPCs using wandermode 3 (shopkeepers, for instance). (Xuri)
	Added JS InitWanderArea function - allows wanderareas to be dynamically reset through JS. (Xuri)
	Added support for new mounts: giant fire beetle, hiryu, chimera, cu sidhe, mondain's steed (Xuri)

JScript Changes/Fixes: (Xuri)
	Added InitWanderArea to ADD NPC command so the FX1, FY1, FX2, FY2 and FZ1 values from DFNs are used for
	 manually spawned NPCs.
	New files added: item/sword.js, item/axe.js (giwo), sheepshearing.js (Xuri)
	Sheepshearing functionality merged from scissors.js and sword.js to server/resource/sheepshearing.js

DFN Changes/Fixes: (Xuri)
	Added customizable list of ores to skills.dfn
	Added champion NPCs in champions.dfn (VERY experimental stats, no special abilities yet) and in add-menu.
	Added new NPCs: ophidian zealot, ophidian justicar, whipping vine, quagmire, bog thing, bogling, silver wolf,
				shadow wisp, evil mage, evil mage lord, giant black widow, energy vortex,
				shadow fiend
	Added new mounts: giant fire beetle, hiryu, chimera, cu sidhe, mondain's steed
	Added items/misc/equippable-mounts.dfn which contains items used to make mounted NPCs possible
	Modified many body-ids for various creatures to make them appear properly in 3D client.
	NEUTRAL flags added to all monsters and aggressive animals; they will now highlight grey after spawning.
	Updated creatures.dfn with all valid body-ids in the UO client, added data for new sound-tags.
	Human NPCs will now have proper skincolors - updated colorlist 16 in colors.dfn.
	Changed a spawnobj in spawners.dfn from invalid "giantscorpion"  to valid "scorpion".
	Changed banker-spawner (spawners.dfn) to only spawn 2 bankers instead of 100!
	Fixed erroneous item-ids in digginglist.dfn.
	Corrected the layer values of various dresses, robes and shrouds.
	Bulletin Board-ids added to harditems.dfn (giwo)
	New file added; maps/maps.dfn (giwo)

-==============================-
-= 14/08/2005 - UOX3 0.98-3.0g 	=-
-==============================-
Source Changes/Fixes: (giwo)
	Added automatic removal of messageboard files when the board item is removed.
	Added in the MessageBoardMaintenance routine to automatically clean out deleted posts.
	Incorporated Grimsons fixes to call guards when a player attacks an NPC.
	Incorporated Grimsons changes to allow NPC's to become criminal and murderers.
	Fixed some possible issues in speech.cpp, hopefully correcting the elusive Speech crash bug.
	Fixed an issue causing creatures and a few other scripts not to be properly updated when reloading DFN's.
	Added a very simple Dispose() feature to CServerDefinitions, allowing for automatic cleanup of unused DFN's.
	Fixed an issue causing doors to never close if a player or ghost was standing in them.
	Fixed some possibile issues with item visibility.
	Added the ability to specify an amount with ADDITEM in create.dfn (example ADDITEM=0x1E43,15).

JScript Changes/Fixes: (Xuri)
	Added two more cloth-ids as valid tailoring resources in tailoring.js, though this in reality has no effect yet
	since the actual crafting code only accepts one id as valid resource (as specified in crafting DFNs).

DFN Changes/Fixes: (Xuri)
	Added the Samurai Empire weapons to the add-menu
	Added many AoS and SE-weapons to the blacksmithing-menu
	Added composite bow, repeating crossbow and yumi to the bowcraft-menu
	Selecting a shaft in the skills/resources/fletching add-menu will now produce an arrow shaft instead of a feather
	Crafting 5, 20 and 50 arrow shafts, crossbow bolts and arrows should now work.

-==============================-
-= 07/08/2005 - UOX3 0.98-3.0f 	=-
-==============================-
Source Changes/Fixes: (giwo)
	Fixed an issue causing improper reporting on the state of a stream in UString. (punt)
	Fixed an issue causing messageboards not to display on an empty world.
	Fixed an issue causing UOX3 to lock up when posting a reply with the 3D client.
	Modified the post removal function to delete any replies to the post.
	Modified CChar::PostType to stop it from being saved (this should be on a per-session basis).

-==============================-
-= 05/08/2005 - UOX3 0.98-3.0e 	=-
-==============================-
Source Changes/Fixes: (giwo)
	Several character/item properties and one item-method added to JS (check JS Docs, 0.42) (Maarc)
	Finished the rewrite to the messageboard system. Currently it should be fully functional with
		the exception of a maintenance routine to clean up the files which will be added later.
	Incorporated Grimson's Automatic-IP Updating feature.
	Added a few fixes for NPC's staying in combat after the death of their opponent. (Grimson)
	Incorporated lingo's rewrite to the CMapstuff code, this seems to have fixed the
		bug causing players to fall through the floor of their house.
	Fixed an issue causing dyed items to appear undyed when dropped on the ground.
	Fixed a possible issue with BoatSpeech.
	Fixed an issue causing quest regions not to function properly.
	Fixed some issues causing items and characters to leave "ghosts" behind.

JScript Changes/Fixes: (giwo)
	teleport.scp has received a facelift, no functional changes.
	jse_typeassociations.scp now includes 234=5008, to enable using kindling by it's type.
	Logs are no longer an invalid carpentry resource.
	Removed debug-code & redundant lines from combatanims.js.
	Counselors can no longer use the areacommand, only GMs with commandlevel 2 or above.
	Minor fixes to pitchers.js to avoid potential crashes with the spidermonkey dll.
	Minor fixes to repeatingcmds.js to avoid potential crashes with the spidermonkey dll.

DFN Changes/Fixes:
	Fixed some errenous item-ids in bowcraft.dfn which caused an error while fletching (Xuri)
	Added new npclists to npclists.dfn; poorfolk, richfolk, alltownfolk, articlist (Grimson)
	Added two new NPCs; m_townthief and f_townthief. Thief NPCs with no AI.  (Grimson)
	Removed duplicate smith hammers from dfndata/items/skills/tools/blacksmithy.dfn (giwo)
	Players are now protected by "the town guards" instead of "The Town guards" ;) (Sydius)

-==============================-
-= 16/07/2005 - UOX3 0.98-3.0d 	=-
-==============================-
Source Changes/Fixes: (giwo)
	Continued work on a complete rewrite of the Messageboard system
	Removed some unnecessary debug code from Walking functions.

-==============================-
-= 15/07/2005 - UOX3 0.98-3.0c 	=-
-==============================-
Source Changes/Fixes:
	Moved Poisoning skill out to JS.
	Fixed an issue causing "eternal" gold from a vendor.
	Included a fix for Trade Windows locking the client (ShadowBranch).
	Minor cleanups in trade.cpp
	Included a possible fix for an issue causing NPC's not to exit combat properly.
	Fixed an issue causing items with an amount to be created as 1 item in some situations.
	Began rewriting messageboards, meanwhile fixing a few issues causing them not to function.

JScript Changes/Fixes:
	Added 'XSAY command for remote speech.
	Fixed 'SET SPAWNSECTION in set.js

DFN Changes/Fixes:
	Added correct crafting sounds. (dfndata\create\*.dfn)
	Reagents now use get=base_reagent instead of get=base_item. Fixes various issues with reagents.
	Added new shoplist; TavernKeepShopping (ShadowBranch)
	Added two new vendors: m_tavernkeeper and f_tavernkeeper (ShadowBranch)

-==============================-
-= 17/06/2005 - UOX3 0.98-3.0b =-
-==============================-
Source Changes/Fixes:
	Added new NPCAI (5) for NPC fighters. Same as guard-ai (attacks monsters/criminals), only without the extra guard-functions.(Xuri)
	Added support for multiple TriggerWords in a string of speech. (giwo)
	Fixed JS event inRange() so it will function as expected. (giwo)
	Fixed a minor issue that caused the wrong code to be executed when updating nearby objects. (giwo/ShadowBranch)

JScript Changes/Fixes:
	Edited fletching.js to include support for fletching tools.
	Updated jse_objectassociations.scp with ID's for fletching tools.

DFN Changes/Fixes: (Xuri)
	Changed NPCAI of male and female fighters from 4 (guard ai) to 5 (new fighter ai). Also gave them boots.
	Beefed up the guards a bit, and gave them a powerful newbiefied halberd ([guardhalberd] in staves_polearms.dfn).
	Fixed ID of leather cap in uox3/dfndat/create/tailoring.dfn
	Made fletcher tools movable.

-==============================-
-= 16/06/2005 - UOX3 0.98-3.0a =-
-==============================-
Source Changes/Fixes: (giwo)
	Fixed server crash when clicking on server status button in help menu. (Xuri)
	Fixed an issue causing characters to ghost after being teleported off screen.
	Fixed an issue causing mounts and other various items to add weight to characters.
	Fixed an issue causing display distortion on the Server Status gump.
	Fixed an issue causing JS onCollide event not to function for characters.
	Fixed an issue causing corpses not to decay.
	Fixed an issue causing spells not to function when a global JS script (0) was in place.
	Minor code cleanups.

JScript Changes/Fixes: (Xuri)
	Changed kindling script to allow igniting kindling on the ground.
	Added missing triggers for kindling to jse_objectassociations.scp
	Fixed skill\cooking\dough.js, now possible to make bread-dough from sacks of flour and pitchers of water.

DFN Changes/Fixes: (Xuri)
	Removed NPCAI 2 from NPC thieves, allowing them to spawn in towns without getting guard-whacked.

-==============================-
-= 12/06/2005 - UOX3 0.98-3.0 =-
-==============================-
Source Changes/Fixes:
	Fix in void CSpawnRegion::doRegionSpawn() to spawn the correct number of NPCs as per defined in spawn.dfn (Grimson)
	Adjusted NPCSpeed from 1.0 to 0.7 to increase their speed (Xuri)
	Fixed a bug causing items not to be able to be picked up (giwo)
	Changed the hardcoded default starting location from 1000, 1000, 0 to 1495, 1629, 10 - which is
	 the Sweet Dreams Inn in Britain. (ShadowBranch)
	Changed font-type and colour displayed for item-based TextMessages. (Xuri)
	Fixed an issue causing objects not to be properly removed from their spawnregion on deletion. (giwo)

JScript Changes/Fixes: (Xuri)
	Added DECAY and NODECAY commands (misc-cmd.js)
	Added NPCACTION command, changed ACTION to target self (effects.js)
	Added Training Dummy-script (5005=item/trainingdummy.js)
	Added Pickpocket Dip(dummy)-script (5006=item/pickpocketdip.js)
	Added Archery Butte-script, complete with scoring system (5007=item/archerybutte.js)
	Added generic script for determining weapon-type (2500=server/data/weapontypes.js)
	Added generic script for determining combat-anim (2501=server/data/combatanims.js)
	Updated jse_fileassociations.scp, jse_objectassociations.scp and jse_typeassociations.scp

DFN Changes/Fixes:
	(gargoyles.dfn) Added some missing starting brackets { for many of the npc sections
	(reptiles.dfn) Corrected spelling of [icenake] to [icesnake] (Grimson)
	(npclists.dfn)
		Updated barnlist & farmlist (Grimson)
		Changed "giantscorpion" to "scorpion". (Grimson)
		New sections: insects, fails, poorfolk, richfolk, alltownfolk, destard1, covetous2, wrong2, hyth1, hyth2,
		hyth3, hyth4, shame1, shame2, shame3, shame5 (Grimson)
	(malehumans.dfn) Fixed so the NPCs will actually move around (Grimson)

Documentation Changes:
	Added installation.html, client-config.html, server-settings.html, as well as an updated commandlist.html.

-===============================-
-= 21/05/2005 - UOX3 0.98-2.8h =-
-===============================-
Source Fixes: (giwo)
	Fixed an issue breaking teleport locations in Debug mode.
	Fixed an exploit allowing one to equip items from great distances.
	Caused houses to boot non-owners who log out inside.
	Fixed several issues with create menus.
	Modified BODYCOLOUR in commands.dfn to not change the color if it is set to 0.
	Added STRIPHAIR and STRIPITEMS in place of STRIPOFF in the commands.dfn.
	Caused SetName() to call Dirty() in order to update an object.

JScript Fixes: (giwo)
	Fixed a minor issue with SET commands.
	Added SET command MOREXYZ.

DFN Fixes: (Xuri)
	(itemmenu.bulk.dfn) Cleaned up the item-menu slightly in some places. (Skills -> resources / tools )
	(itemmenu.bulk.dfn) Removed item sections 0x1022 -> 0x1025 from ADD-menu (skills -> resources -> fletching) as they
	 are not in reality fletching resources.
	(itemmenu.bulk.dfn) Moved the All-Spell-scroll to the top of the Scrolls-menu.
	(commands.dfn) Changed BODYCOLOUR value of [PLAYER] section to 0x83ea, to give chars a human skin colour when
	 made player.
	(commands.dfn) Changed the BODYCOLOUR value of new GMs (under [GM] section) to 0x8021, i.e. red, instead of
	 default grey.
	(commands.dfn) Added STRIPITEMS and STRIPHAIR to [GM] section
	(axes.dfn) Added type=216 to all axes, so lumberjacking will work again.
	(fletching.dfn) Added item sections 0x1BD4-5, 0x1BD4-20, 0x1BD4-50 as fletching resource-items to fix creation of multiple
	 arrow shafts at once.
	(bowcraft.dfn) Fixed creation of 5, 20 and 50 arrow shafts + crossbow bolts.
	(harditems.dfn) Added Kindling (0x0de1) to make it pileable upon creation. Also gave weight, decay & value tags.
	(newbie.dfn) Changed newbie ingot ID to 0x1bf2, which is the one used in smithing/tinkering.

-=======================-
-= 16/04/2005 - UOX3 0.98-2.8g =-
-=======================-
Source Fixes: (giwo)
	Fixed an issue causing envoke (object and type associations) not to function after a JS Reload.
	Fixed an issue causing accounts to erroneously report that it is already in use.
	Fixed a possible issue caused by dropping a pilable item directly onto another pilable item.
	Fixed an issue allowing a ghost to snoop the pack of a pack animal.
	Fixed an issue causing Ghosts to "collide" with other players.
	Fixed an issue causing smelted ingots to not be stackable.
	Changed JS event onCreate() to onCreateTile() and onCreateDFN()
		Note that onCreateDFN() will be the default, only items added directly
		from the tile will use onCreateTile(). These scripts can be either scriptID 0
		or specified in harditems.dfn.

JScript Fixes: (giwo)
	Fixed an issue causing exploding potions to not function properly.

DFN Fixes: (Xuri)
	Instead of 21 location-dfn files, we now have only one; location.dfn.
	Added ingots and gold to harditems.dfn to safeguard against stacking issues.


-=======================-
-= 15/04/2005 - UOX3 0.98-2.8f =-
-=======================-
Source Fixes: (giwo)
	Fixed an issue causing banks to add to the characters total weight.
	Fixed an issue causing SpawnRegions to not spawn anything under certain conditions.
	Fixed an issue causing '0' to be an invalid JS ScriptID.
	Fixed an issue causing item prop "owner" to not function properly.
	Fixed some possible issues with member variables not being initialized.
	Updated titles.dfn to read in much the same way the rest of the scripts do (tag=data).

JScript Fixes: (Xuri)
	(set.js) SET OWNER command no longer requires additional arguments. (Target owner, target object to be owned.)
	(set.js) Fixed a spelling error which caused SET NPCWANDER # to have no effect.
	(healing.js) Added 0x0192 and 0x0193 (ghosts) as valid targets for healing with bandages.
	(travel.js) Added a new command, 'TRAVEL, as a shortcut to itemmenu 6000 - which is the GM Travel-menu.
	(jse_fileassociations.scp) Added 400=commands/custom/travel.js
	(jse_objectassociations.scp) Added 0xf6b=509 to make the second unlit torch work.
	(server/light/*.js) Fixed sound-effects for lighting various lightsources.

DFN Fixes: (Xuri)
	(titles.dfn) Now follows the tag=data pattern that the other dfns uses.