Another year, another UOX3 release. This version comes packed with additional stability and performance upgrades, new gameplay features, enhancements to the scripting engine, enhanced player support tools and more! Read the highlights below, or dive deep into full changelog for all the juicy details!
Performance Improvements
New
Added Adaptive Performance System (APS) that dynamically adjusts how often NPC AI/movement is checked based on overall shard performance. If performance drops below defined threshold, UOX3 gradually slows down (temporarily) how often these are checked to prioritize player movement/speech/command responsiveness. Configurable in uox.ini!
Update
Performance improvements for out-of-combat NPC pathfinding
Update
Further improvements to world loading speed (~20% faster)
Update
Further improvements to world save speed (~50% faster)
Update
Networking performance for shards on Windows now much improved
Improved Server Stability
Fix
Fixes for server crashes related to GM add-menu, music, spawnkill command, moving items from corpses to ground, carving up corpses, AreaCharacterFunction JS function, invalid item prices for items on player vendors, items being unequipped from characters no longer strong enough to equip them, onNameRequest/onTooltip JS Events, clients disconnecting while running server in debug mode
Fix
Fixes for client crashes related to selling items to NPC vendors, logging in under certain circumstances involving older UO client versions
Fix
Fixed client freeze for sub-7.x clients caused by an unsupported animation packet
Fix
Fixed client freeze on login when only T2A client/server features are enabled, due to an incorrectly sized Stat Window Info packet
Fix
Fixed a potential memory leak related to world saves
Fix
Fixed an issue where UOX3 would fail to load pre-HS multi.mul files
Gameplay Improvements
New
Added first version of Young Player System, which protects players on new/young accounts from being targeted by other players with hostile spells and actions, and also provides some protection versus monsters in the overworld. This is a system that spans across many sub-features of UOX3!
New
Added initial setup for Trammel PvP ruleset, which can be applied to and customized for (any) facet
New
Added (easily expandable) script for NPC Guilds, with one guild setup by default - Thieves Guild - which if joined grants players the ability to steal from other players and buy Disguise Kits. Membership also comes with discount/premium prices when buying/selling goods to NPCs from the same guild!
New
UOX3 now tracks playtime per individual character and in total per account, accessible to players using the command 'playtime, and to scripts via new character/account properties
New
Added support for (small) Bulk Order Deeds - for Blacksmithing skill. Includes special pre-aos BOD item rewards like mining gloves, functional runic hammers, etc.
New
Added monster speech script that handles speech for Orcs, Ratmen, Lizardmen and Wisps in combat
New
Added scripted special abilities for NPCs:
Savage Shaman - Chance to start tribal dance when being hit, which can link up with other shamans to heal nearby savages, or cast chain lightning or mass poison at nearby enemies
Savage Warrior/Rider - Bonus damage against various large tamed creatures
New
Added Power Generators that spawn in certain locations in Ilshenar facet, with random puzzles that reward players with diamonds/arcane gems/shadow iron ore when solved
New
Added new NPC AIs:
AI_CASTER (10) - Same as AI_FIGHTER (5), but will try to stay at casting range
AI_EVIL_CASTER (11) - Same as AI_EVIL (2), but will try to stay at casting range
AI_ANIMAL_SCARED (12) - Runs away from players if they get too close. Applied to hind, rabbits, squirrels, ferrets and various birds by default
New
Added missing AI scripts for summoned Blade Spirits and Energy Vortexes
New
Added new character state - passive combat mode - used by players when they tab out of combat. While in this state they will not retaliate towards omeone they're already engaged in combat with
New
Added "keyless" option for interacting with locked doors of player-owned houses, letting owners/co-owners/friends/guests of a house use locked doors without requiring a key in their backpack, if this option is enabled in uox.ini
New
Added functionality for crafting and using potion kegs, which can be used to store potions at a fraction of their original weight
New
Added ability to create trophy house addons using Taxidermy Kits
New
Added JS-based help/player support menu accessible via character paperdoll, with modernized style, UI and functionality
Update
Stealing skill moved from code to script, and revamped entirely in the process, with updated rules on stealing, bugfixes and additions like town rare stealing, monster stealing, tracking of stolen items, some optional features from AoS, etc. Many aspects of the skill now also configurable in the script.
Update
Snooping skill moved from code to script, with some fixes to rules for who can snoop what, where, when - and with which consequences. Also, the deeper inside a bag someone is snooping, the harder it becomes to succeed!
Update
Mini-revamp of notoriety flagging, now with aggressor tracking, permagrey tracking, stealing flags, etc. on a per-target basis
Update
NPCs can now temporarily ignore unreachable targets in combat, and might enter evade state and try to move away from those targets if needed
Update
Updated how pets and followers are tracked for players to a more robust system, and exposed this to scripting engine
Update
NPC Escort quests will now only pick target locations within the same facet as the NPC
Update
NPC Shopkeepers now respond in priority of distance to the player - the nearest NPCs will respond first
Update
Added hair/beard dyes to some NPC vendors (like alchemists), and moved functionality from code to script
Update
Updated NPC animation setup in creatures.dfn to play idle/fidget animations from time to time, and to play casting animations when using magic spells
Update
Updated behaviour of planks on boats; should now be more robust, secure and more in line with player expectations based on original UO experience
Update
Updated behaviour of Magic Lock/Unlock spells; should now be more in line with player expectations based on original UO experience
Fix
Fixed an issue of vanishing houses/boats due to data not being correctly saved
Fix
Fixed a bug that caused skill checks to fail at a much higher rate than expected
Fix
Animal Lore is now used instead of Anatomy as supplementary skill for Veterinary
Fix
Fixed some issues with boats where they could be incorrectly prevented from moving, or incorrectly allowed to move through blocking tiles
Fix
Murderous brigand NPCs will no longer teach players skills
Fix
Fixed a number of cases where players would incorrectly remain in frozen state, or incorrectly be released from frozen state, in relation to spellcasting
Fix
Earthquake spell will no longer cause caster to become criminal when there are no targets nearby, nor will they be affected by the spell themselves
Fix
Fixed an issue with NPC evasion pathfinding where the direction wasn't always set correctly
Fix
Fixed several issues with NPCs that would never stop fleeing, or get stuck in flee/don't flee loop
Fix
Fixed an issue where NPCs could attempt to attack targets in other world/instances
Fix
Fixed some issues with weight calculation of stackable items and partial pickups of item piles
Fix
Pets should now teleport along with owner properly when within range
Fix
Fixed known issues with placement of items (including especially tall items) on ground/floor/in houses, and with stacking of items
Fix
Fixed an issue where UOX3 could lose track of locked down items in houses on server restart
Fix
Fixed a bug where players dying onboard boats would prevent those boats from being packed up later, even after corpse decayed
Fix
Fixed issues with NPC spellcasters killing themselves when casting Mind Blast, or killing members of their own species/race with AoE spells
Fix
Fixed issue where tamed pets would not recognize certain items as food when fed
Fix
Fixed players being able to dispel Admins and GMs o_O
Fix
Fixed numerous issues related to guildstones that could leave guilds leaderless, blank out guild name/abbreviation/titles/charter, cause guild titles to show up incorrectly, etc.
Fix
Fixed misc issues related to runebooks
Fix
Fixed misc issues with player vendors
Enhancements for Shard Admins
New
Added script with packet hook for packet 0xA4 to support CUOWeb client's user info/secret key feature, which can be used to restrict modified clients from connecting to the shard
Added optional Item/NPC tags that can be used to inherit properties from other Items/NPCs depending on chosen era in CORESHARDERA uox.ini setting (GETUO, GETT2A, GETTD, GETUOR, GETLBR, GETAOS, GETSE, GETML, GETSA, GETTOL). Works same way as GET tag.
New
New INI settings added:
[settings]
ALLOWAWAKENPCS=0/1 - If enabled, NPCs marked as awake are kept active even if the region they are in have no players
CASTSPELLSWHILEMOVING=0/1 - If enabled, players can cast spells while moving, without having to stop
CRAFTCOLOUREDWEAPONS=0/1 - If enabled, players can craft coloured weapons from colored ingots. Defaults to disabled.
DISPLAYMAKERSMARK=1/0 - Controls if maker's marks on crafted items are shown on a global level
GLOBALRESTOCKMULTIPLIER=1/0 - Global multiplier applied to RESTOCK property of items when loaded from DFNs
MAXPLAYERPACKWEIGHT=40000 // Control max weight player backpack can hold, defaults to 400.00 stones
MAXPLAYERBANKWEIGHT=160000 // Control max weight player bankbox can hold, defaults to 1600.00 stones
MAXSAFETELEPORTSPERDAY=1/0 // Max safe teleports per day for stuck players via help menu
TELEPORTNEARESTSAFELOC=1/0 // Teleports player to nearest safe location (1) or random safe location (0) when using stuck feature in help menu
SHOWGUILDINFOINTOOLTIP=1/0 - If enabled, shows player's guild info in tooltip. Defaults to 1
SHOWINVULNERABLETAGOVERHEAD=0/1 - Controls whether invulnerable tags are shown overhead
SHOWITEMRESISTSTATS=0/1 - If enabled, shows item resistance stats in item tooltip. Defaults to 0
SHOWNPCTITLESINTOOLTIPS=1/0 - If enabled, shows NPC titles in tooltip. Defaults to 1
SHOWNPCTITLESOVERHEAD=1/0 - Controls whether NPC titles are shown over their heads
SHOWRACEINPAPERDOLL=1/0 - If enabled, shows a character's race in the paperdoll. Defaults to 1
SHOWRACEWITHNAME=1/0 - If enabled, shows a character's race along with their name. Defaults to 1
SHOWREPUTATIONTITLEINTOOLTIP=1/0 - If enabled, shows player's reputation title in tooltip. Defaults to 1
SHOWWEAPONDAMAGETYPES=1/0 - If enabled, shows weapon damage types in item tooltip. Defaults to 1
[combat]
PETCOMBATTRAINING=1/0 - Controls whether pets can gain skills/stats from combat
HIRELINGCOMBATTRAINING=1/0 - Controls whether hirelings can gain skills/stats from combat
NPCCOMBATTRAINING=1/0 - Controls whether NPCs in general can gain skills/stats from combat
[expansion settings]
CORESHARDERA=lbr
Defines the "core" era of the shard. Defaults to lbr (Publish 15).
any - determines which Item/NPC DFNs gets loaded, based on tags like GETT2A, GETPUB15
uor or later - enables bonus hit chance for archery via ARCHERYHITBONUS setting
lbr or earlier - final combat damage value reduced by half
ARMORCALCULATION=core
Defines era to base armor calculations on
lbr or earlier - different armor pieces contribute different percentage of the total Armor Rating
aos or later - each armor piece contribute to sum total of Physical Resistance, and other elemental resistance stats
STRENGTHDAMAGEBONUS=core
Defines era to base strength damage bonus on
uor or earlier - 20% damage bonus based on strength, capped at 200 strength
td or later - 35% damage bonus based on strength if 100 strength or more, otherwise 30% damage bonus
TACTICSDAMAGEBONUS=core
Defines era to base tactics damage bonus on
lbr or earlier - bonus = Tactics skill + 50
aos or later - 68.75% damage bonus if GM Tactics, 62.5% bonus if below
ANATOMYDAMAGEBONUS=core
Defines era to base anatomy damage bonus on
uor or earlier - bonus = Anatomy / 5 vs NPCs, Anatomy / 2.5 vs Players
td or later - 30% damage bonus at GM anatomy, up to 20% below GM
ml or later - 50% + 5 damage bonus at GM anatomy, up to 50% below GM
LUMBERJACKDAMAGEBONUS=core
Defines era to base lumberjacking damage bonus on
uor or earlier - 35% damage bonus at GM skill, up to 25% below GM
td or later - 30% damage bonus at GM skill, up to 20% below GM
hs or later - 10% chance of 100% damage bonus
[expansion settings]
SAFECOOWNERLOGOUT=1 - Allow co-owners to safely and instantly log out inside house
SAFEFRIENDLOGOUT=1 - Allow friends to safely and instantly log out inside house
SAFEGUESTLOGOUT=1 - Allow guests to safely and instantly log out inside house
KEYLESSOWNERACCESS=1 - Allow owner of house to use locked doors in house without key in pack
KEYLESSCOOWNERACCESS=1 - Allow co-owners of house to use locked doors in house without key in pack
KEYLESSFRIENDACCESS=1 - Allow friends of house to use locked doors in house without key in pack
KEYLESSGUESTACCESS=0 - Allow guests of house to use locked doors in house without key in pack
Update
Replaced script for responding to ConnectUO (dead) server poll request, with one that works with the 'standard' freeshard server poll request instead
Update
Enhanced GM 'add menu to allow clicking directly on images of items/NPCs to add them
Update
Admin Welcome gump now includes decoration and spawn options for Trammel and Ilshenar (in addition to Felucca), and admin can choose between optional "addon" decorations per facet, depending on what fits for their client/shard era
Update
Starter items for new players added via PACKITEM and EQUIPITEM tags in newbie.dfn can now be given a flag in said file that will override the newbie-property for said items without having to modify their base item definitions
Update
The 'go command can now be used to teleport to specifically named locations from locations.dfn. Example: 'go CastleBritish or 'go DestardLevel2
Update
Updated locations definitions with numerous new entries accessible with 'goplace # command for teleporting to key locations in Ilshenar, Malas, Tokuno Islands and Ter Mur facets, and added these to travel-menu portion of GM menu
Update
Spawn Regions now support spawning NPCs from NPCLISTS with weighted entries for better control of what kind of NPCs will spawn more/less commonly
Update
Updated default HTML templates for server status page, showing shard name more prominently, hiding shard staff from regular player list, hiding UOX3 version from players, and more
Update
Updated NETWORKLOG uox.ini setting to always log network traffic for connected clients if enabled, without needing to specifically enable it for individual sockets
Fix
Fixed a bug where 'make admin/gm/cns would not properly keep track of a targeted character's physical appearance, which is now restored upon using 'make player command
Fix
Removing locked down items in a house using 'remove or 'rremove will now correctly update the lockdown count of the house
Fix
Fixed an issue with travel-commands in GM menu which handled travelling between facets incorrectly
Era-based Customization Options
New
Added new INI settings under [expansion settings] section to help shard admins customize some key behaviours of their shards, based on their preferred "era" of UO. Defaults to LBR. See Additional INI Settings section above for details
New
Added (optional) new Item/NPC DFN tags to help determine which properties to load from DFNs, based on chosen era in CORESHARDERA INI setting: GETUO, GETT2A, GETTD, GETUOR, GETLBR, GETAOS, GETSE, GETML, GETSA, GETTOL. These tags work similar to the existing GET tag, and inherits the properties of the specified sectionID.
JS Engine Updates
New
Exposed numerous additional object properties to JS engine, and to get/set/tweak GM commands
New
Added new JS Events:
onCarveCorpse() - Triggers for iCorpse when being carved by pUser
onCreatePlayer() - Triggers in global script for newly created characters (in place of onCreateDFN, which is now exclusive to NPCs/Items)
onDamageDeal() - Triggers for character about to deal damage in combat
onDyeTarget() - Triggers for dyeTub when player tries dying an item
onFacetChange() - Triggers for character when moving between facets
onMultiLogout() - Triggers when players log out inside multis, and can override certain relatd behaviors
onNameRequest() - Triggers when name of object is being requested, can be used to return custom text. Source of request also provided
onScrollingGumpPress() - override default gump menu when pressing Help button in paperdoll
onSpellTargetSelect() - Triggers for character selecting a target with a spell
New
Added new JS Functions:
CreateBaseMulti() - Create base multis based on raw multi IDs
CreateHouse() - Create houses from house.dfn based on house section ID
DoesCharacterBlock() - Can check if a character exists at given coordinates
DoesEventExist() - Can check for the existence of a JS event in another script
EraStringToNum() - Can convert an era string to int value representing said era
GetCharacterCount() - Gets number of characters on server
GetItemCount() - Gets number of items on server
GetMultiCount() - Gets number of multis on server
GetServerVersionString() - Gets server version as a string
GetStartTime() - Returns timestamp for when server started up
New
Added new JS Object Methods:
.GetOrePrefs() - Returns ore preference data for town region associated with Region object
.GetOreChance() - Returns base chance of finding any ore in town region associated with Region object
.GetFollowerList() - Get list of followers Character has
.AddFollower() - Add an NPC as follower of Character
.RemoveFollower() - Remove an NPC as follower of Character
.IsAtPeace() - Returns true if Guild is at peace and not at war with any other guilds
.GetTagMap() - Gets list of persistent custom tags associated with object
.GetTempTagMap() - Gets list of temporary custom tags associated with object
.SetRandomName() - Apply a random name from a namelist to Character
.FindItemSection() - Search player's backpack for an item with specified sectionID
.OpenContainer() - Opens specified container for Socket
.GetJSTimer() - Gets expiry time for a specific timer from a script on object
.SetJSTimer() - Sets expiry time for a specific timer in a script on object
.KillJSTimer() - Kill a specific timer in a script on object
.HasScriptTrigger() - Returns true if script with scriptID is present on object
.AddAggressorFlag() - Adds aggressor flag for character towards target character
.RemoveAggressorFlag() - Removes character's aggressor flag towards target character
.CheckAggressorFlag() - Check if character has an aggressor flag towards target character
.UpdateAggressorFlagTimestamp() - Updates the expiry timestamp of character's aggressor flag towards target character
.IsAggressor() - Returns true/false depending on whether character has any active aggressor flags
.ClearAggressorFlags() - Clears all the character's aggressor flags towards other characters
.AddPermaGreyFlag() - Adds permagrey flag for character towards target character
.RemovePermaGreyFlag() - Removes character's permagrey flag towards target character
.CheckPermaGreyFlag() - Check if character has an active permagrey flag towards target character
.UpdatePermaGreyFlagTimestamp() - Updates the expiry timestamp of character's permagrey flag towards target character
.IsPermaGrey() - Returns true/false depending on whether character has any active permagrey flags
.ClearPermaGreyFlags() - Clears all the character's aggressor flags towards other characters
Update
Updated numerous JS Events, Functions/Methods with fixes and additional options
Update
Improved error-reporting for scripting engine
Update
SpiderMonkey upgraded from 1.7 to 1.8.0-RC1, which adds support for Array.reduce() and reduceRight(), expression closures, and generator expressions
Fix
Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {}
Misc Code/Script Changes
New
Added new Item DFN tag which specifies which spells a spellbook starts with (see DFN Tag Overview -> Item DFN Tags for more details!): SPELLS=0x00000000,0x00000000,0x00000000
New
Added a "permanently awake" option for NPCs, which causes UOX3 to always check them for AI/movement/script updates regardless of whether they're in "dormant" areas of the world with no player activity. Can be set via NPC DFN tag AWAKE=0/1, or Character JS property .isAwake
New
Added FreeBSD build support for SpiderMonkey, zlib and UOX3
New
Added support for adding scripts in ore definitions, which is automatically applied to any ore of those types that's mined
New
Added new property for Items and NPCs loaded from DFNs: sectionID (keeps track of [sectionID] an item or NPC originated from)
New
Added all-in-one solution and project files for VS2022 that compiles both UOX3, Spidermonkey and zlib
Update
Moved Taste ID skill implementation from hard code to JS
Update
Moved Mining/Gravedigging skill implementation from hard code to JS
Update
MAXRANGE item property can now be used to define max combat range for melee weapons as well (not just ranged ones)
Update
Build system revamp across all supported platforms, with streamlined process and reorganization of build files. Cmake project now compiles static version of Spidermonkey, same as VS
Update
Cleanup and standardization of style and naming conventions in code and scripts
Update
Misc code fixes, modernization and improvements
Fix
Fixed many compile-time warnings across different compilers
Fix
Fixed issues with idle/fidget animation setup that could cause some NPCs to blink out of existence randomly
Misc DFN Changes
New
Added Item DFN entries for spellbook pre-filled with circles 1 to 4, and for spellbook pre-filled with all spells, and added these to GM 'add menu (dfndata/items/magic/misc_magic.dfn)
New
Added region spawners for dungeons, towns and overworld in Ilshenar facet
New
Added additional NPC definitions related to Ilshenar facet
New
Added region definitions for Sea Market, Blackthorn Dungeon and Lakeshire
New
Added spawn regions for missing banker NPCs in Serpent's Hold
Revamp of default spawn region setup, should be more accurate to the UO experience
Update
Updated region definitions of several regions with incorrect coordinates
Misc minor DFN fixes and improvements
Grab your copy of UOX3 0.99.6 for your preferred platform - Windows, Linux or macOS - while it's still hot!
Monday, January 24, 2022
UOX3 v0.99.5a Released!
This update to 0.99.5 is on the smaller side, but contains some important fixes and performance improvements, in addition to several gameplay and JS engine improvements!
Additional Performance Improvements
NPC Pathfinding performance improvements (up to 60% more efficient)
Optimized system for activating NPCs in map regions around online players; instead of all 9 map regions surrounding a player being active, now only 3 to 6 will be active, based on the player's position within these regions - leading to fewer overall NPC pathfinding request
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
Reloading spawn regions will now "unload" already spawned NPCs and items as part of the reload process
Fixed an issue where information on newly spawned characters would get sent twice to each nearby player
Adjusted default values for some INI speed/timers settings for improved server performance
JS Engine Updates
Extended the amount of JS events supported by UOX3's JS engine from 96 to 192
Added new JS Events:
onHelpGump() - override default gump menu when pressing Help button in paperdoll
onWarModeToggle() - return false to prevent war mode toggling
onAICombatTarget() - return true to select current target, or false to skip and look for another
Updated JS Events and Methods:
onDamage() - can now return false to override and prevent damage dealt to a character. Must return true to allow damage
onSwing() - also works for characters with no weapons equipped
.KillTimers() - now also works for Characters (previously Items only)
Gameplay Improvements
NPCs can now engage other NPCs in combat if setup as racial enemies. Ophidians vs Terathans have been setup as an example of this.
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 some issues with itemlists pointing to non-existing items (a turnip and 10 of each magical reagent)
Updated Provocation skill to disallow directing provoked creatures at targets with the custom tag provImmune present
Added script that allows Tinkerers to craft golem followers via Clockwork Assembly items
Misc fixes to DFN entries for Bascinet, Helmet, Sai weapon, Wands
Reduced the default amount of town folk, poor folk and rich folk NPCs spawning in Britain
Misc fixes to JS scripts (NPC speech, moongates)
Players can no longer gain Anatomy skill from targeting themselves
Misc Other Stuff
Added reusable scripts that renders characters immune to either physical or magical damage
Added pre-defined book: A Welcome, by Blackthorn
Added definitions (and scripted special abilities) for additional NPCs:
Orc Brute - throws orc lords at nearby targets
Orc Chopper - basic attacks deal AoE damage
Betrayer - Colossal blow, AoE poison
Golem - Colossal blow
Golem Controller
Crafted Golem - Tinker-crafted version of golem
Exodus Overseer - magical shield that makes NPC immune to physical damage
Exodus Minion Lord - magical shield that makes NPC immune to physical damage
Skill titles no longer show in paperdolls of characters turned into Counselors and GMs
Default titles of Counselors, GMs and Admins can now be customized via commands.dfn
Fixed a client crash on first login caused by issues with the admin welcome gump
Minor console cleanup
Grab your copy of UOX3 0.99.5a for your preferred platform - Windows, Linux or macOS - while it's still hot!
Monday, January 12, 2022
UOX3 v0.99.5 Released!
This update has been a year in the making, and contains many new features, some serious performance improvements under the hood and bugfixes galore. Check out the highlights below, or dive deep into the full changelog for all the juicy details!
Massive Performance Improvements
Substantial reduction in server startup time for large worlds due to updated handling of multi initialization
Worldfiles now load ~73% faster than before on startup!
Previously: ~206 seconds to load 1 million items. Now: ~56 seconds. Tested on Windows, results may vary.
Worldfiles now save ~11% to ~99% faster than before!
Actual time depends on amount of changes since previous world save. If no changes have taken place, world saves will be instant. Note that first save after startup is a full save.
Performance improvements for seeking in map, statics and multis
Several improvements to NPC pathfinding to address functionality and performance
Regional spawning system improved and optimized, with much higher success-rate for finding valid spawn locations on both land and water (also self-improves over repeated spawn cycles)
Improved Server Stability
Several server crashes fixed, including some deep-rooted, hard-to-debug issues with JS timers, temp effects, object handling in regions, etc.
Hardened server against worldfile corruption by adding some measures to prevent UOX3 from being shut down/closed in the middle of a world save
Object Refresh/Update Improvements
Fixed long-standing (20+ years old) issues with objects not updating/refreshing properly, where those objects would vanish from view and appear to have "gone missing"
Fixed issues with objects moving between different worlds/instances not updating properly
JS Scripting Engine Improvements
JS engine is now more robust, after a ton of fixes, improvements and additions
Support added for attaching multiple scripts to individual objects, which makes it much easier to do modular (and third party/custom) scripts
Lots of new JS events, functions and object properties have been added to increase the flexibility of the JS engine
Many existing JS events updated to support return values from script
Revamped JS Docs with updated syntax, examples, search function
TriggerEvent JS function updated to support returning a value (int, string, bool, array) or object from the called upon script
Exposed crafting system to JS engine to give scripters access to entries in create DFN files and associated properties
Added support for specifying custom target cursors as neutral, harmful or helpful
Temporary custom tags can now be set on objects via JS; these tags are not saved along with other object properties, and only last until server is restarted (for NPCs/items) or until a player logs out (for Player characters)
Revamped, searchable JS Documentation with up-to-date details and examples for each Event, Function, Method and Property in UOX3
Modernization and Cleanup of Code Base
Many parts of the source code modernized to make use of c++11/17 features, especially with regards to string handling, conversion between strings and numbers, usage of standard filesystem, null pointer handling and more
Cleanup of several areas of code to reduce complexity, fix logic errors and improve readability
Addressed numerous compiler warnings on all supported platforms
Fixes to long-standing issue with UOX3 console not resetting terminal properly after shutdown on Linux
Easier Shard Setup Process
The setup process for new UOX3 shard has been simplified; the serverlist in ini file has been done away with, and UOX3 now automatically accepts and responds to connections on both local and LAN IPs, with a new optional setting to specify a shard's external IP
A new welcome gump now displays for fresh shard admins, allowing them to choose between starting with a blank slate or to load world templates and/or enable spawn regions for specific (or all) facets, for a smoother first-time-user-experience
World Templates
A new command ('decorate) allows saving/loading of world templates, text files that contain the bare minimum amount of details needed to decorate an entire game world, facet or specific area of a facet.
These world templates can be saved and loaded on the fly without impacting existing data on a shard.
A default set of such world templates with decorations (doors, signs, basic decorations) for Felucca, Trammel and Ilshenar - with associated dungeons - are bundled with UOX3
An additional feature of this command is the ability to save, load and unload event-specific decorations - for instance for Christmas, Halloween or shard-specific events - based on a new item property (.event) that can be used to associate items with such events
Doubling down on Dictionaries
UOX3 has doubled down on its custom dictionary system, and every system message in the game has now been converted from raw strings to dictionary entries which can be displayed in different languages
A new ini setting has been added allowing shard admins to specify a default language for their server, which will determine the language of dictionary messages sent to connected clients, instead of the default option, which is to use the client's specified language
Due to improvements for UTF8 character handling in the dictionary system, UOX3 now comes bundled with language support and dictionary files for the following languages: English (default), Czech, French, German, Italian, Polish, Portuguese and Spanish
Customizable Network Budgets
Shard admins can now assign a "network budget" to connected clients via UOX.INI, specifying the max amount of traffic each client is allowed to send/request from the server, with temporary account bans for players who exceed these limits repeatedly in the same session.
Revamp of Boats
Greatly improved handling of boats, with all known bugs fixed and some previously missing features implemented (like collision with other boats and dynamic items). Note that the boat implementation is based on the ~Publish 15 era of UO
All classic boat commands implemented (including aliases, as it's based on triggerwords from client)
Fish as Server-Tracked Resource
Fish has been setup as an additional server-tracked resource, in addition to the existing ore and logs, with new ini settings to allow specifying the amount of fish resources per resource-region, and how often this resource "respawns"
Revamp of Fishing Skill
Fishing skill has been moved out of code and into JS, and updated to support all functionality present in ~Publish 15 (LBR/pre-AoS era), including things like shallow vs deep water fishing, magic fish, big fish, sea serpents, special fishing nets, messages in a bottle/SOS and shipwreck treasures - with valid shipwreck locations being definable in a new, special regions.dfn section
Revamp of Taming skill and Pets
Animal Taming skill updated to match functionality and ruleset of ~Publish 15 era of UO, with some additional options that go beyond that era
Pet ownership now works as players expect it to, with fully functional pet commands, ownership restrictions, controlslots, friend-lists, secure pet trading, pet loyalty and "orneriness" and a ton of bugfixes
Taming restrictions have been put in place for certain creatures like Unicorns, Ki-Rins and Cu Sidhe
Revamp of Cooking Skill
Cooking skill has received an overhaul to ensure players can cook all food-items available in ~Publish 15 era of UO
Flour mills are now animated, and take a few seconds to grind wheat into flour
Revamp of Crafting Skills
Crafting menus have been revamped and "modernized" via JS for skills like Alchemy, Blacksmithing, Carpentry, Cooking, Fletching, Tailoring and Tinkering - with new features such as resource-requirements, crafting chances, and more
Create DFNs updated with additional craftable items, including house-addons
Crafting tools now come with limited amount of uses per tool (optional feature, enabled by default)
Other Improvements to Skills
Skill delay can now be specified per skill, which overrides the global skill delay from uox.ini, and the delay for all skills have been updated to match ~Publish 15 (LBR/pre-AoS) era of UO
Enhancements/fixes to several skills, with implementation now being closer to pre-AoS era: Animal Lore, Animal Taming, Cooking, Healing, Tailoring, Tracking
Item Identification skill has been ported from code to JS, and received some updates
Remove Trap skill has been implemented in JS, and allows players with appropriate skills to remove traps from containers, depending on skill vs difficulty of trap
Herding skill has been implemented in JS, and allows players with a Shepherd's Crook and appropriate skills to herd non-tamed animals
Players can now heal various humanoid monsters with bandages using the Healing skill
UOX3 has a system that allows a player's stats to affect the chance of success when performing a skill check. This system is no longer in effect by default, but has turned into an uox.ini setting for those who wish to use it
Enhanced Context Menu Support
Support for context menus has been greatly improved, with ~publish 15-era (pre-AoS) context menu functionality fully implemented for players, NPC bankers, pets, hirelings, stablemasters, escort NPCs, NPC trainers
New ini setting added for enabling/disabling context menus
Improvements to Magic Systems
Delay between casting a spell and damage/effects being applied can now be specified per spell in spells.dfn, replacing a similar global setting from uox.ini, and all relevant spells have been updated with appropriate delay timings based on ~Publish 15 (LBR/pre-AoS) era of UO
Recovery time from casting a spell until being able to cast another can now be defined per spell in spells.dfn
New ini setting toggles whether player spellcasting gets interrupted upon equipping/picking up items. Defaults to enabled
Overhauled rules for spellcasting, so reagent checks and skill-checks take place at appropriate times
Overhauled casting times, SFX and VFX for all spells
Fixes for several spells (Magic Trap/Untrap, Magic Lock/Unlock, Telekinesis, Summon Creature, Dispel, Mass Dispel, Reveal, Earthquake, Field spells)
NPC spellcasters now make more informed decisions on what type of spells to cast in combat, based on the situation
Updated Combat Mechanics
Various combat mechanics (parrying, damage calculations) have been updated to be in line with ~Publish 15 (LBR/pre-AoS) era of UO
A new optional combat system has been added allowing shard admins to define armor classes and have specific weapons be more effective against some armor classes than others
Damage tracker that keeps track of damage being dealt to a given creature/player now also tracks the type of damage being applied, and this information has been exposed to the JS engine. Damage() method and onDamage() event have also been updated to provided an optional parameter to specify the type of damage being done.
Special JS-based AI behaviour (like fire breath, damage auras, spell reflection, basic pack behaviour) have been added to numerous monsters
Based on research from UO patch notes, an accuracy bonus has been implemented for the Archery skill, which can be defined (or disabled) via a new ini setting
Archers now have to stop and stand still for a minimum amount of time before they can fire their ranged weapon. This delay has been added as a new ini setting
Pre-AoS Magic Items
A new JS script has been created which can generate magic items (weapons, armor, wands/staffs, rings) of the pre-AoS variety as loot for NPCs with the script attached, or created on demand with GM commands
The quality of the magic items generated depend on the fame of the NPC, with higher fame resulting in improved chances of magic loot, as well as higher quality of said loot
The type of magic properties that can be generated for a given magic item match up with those that could be found in the pre-AoS era of UO. Examples:
supremely accurate katana of vanquishing
substantial silver spear
durable ringmail tunic of guarding
Magic items can also receive spell enchantments, which come with a limited number of charges that activate on successful hits in combat for weapons, on equip for armors and on use for jewlery/wands/staffs. Examples:
surpassingly accurate dagger of power and Wounding
substantial axe of force and daemon's breath
platemail arms of protection
wand of identification
ring of teleportation
A new ini setting allows controlling whether item stats for unidentified magic items are hidden (default) or always shown
Upgraded Add/Item-menus
The GM add-menu has received some updates to increase usability and flexibility while adding items. GMs can now choose from various settings such as adding items at a location instead of in backpack, automatically reopen the last menu that was open, enabling "repeat add" to add same item over and over, and adjust the default decay/movable state of items added, overriding whatever values they might have in the DFNs
House-Addon Extravaganza
Improvements have been made to how house-addons are added, to prevent scenarios like multi-item addons extending beyond the allowed space in a multi
Additional house-addons have been implemented and are available from the GM add-menu, or crafted by players:
Loom (south)
Small Forge
Large Forge (north/south/east/west)
Anvil (south/east)
Spinning Wheel (north/south/east/west
Small Bed variant 1 (south/east)
Small Bed variant 2 (south/east)
Large Bed variant 1 (south/east)
Large Bed variant 2 (south/east)
Training Dummy (south/east)
Pickpocket Dip (south/east)
Abattoir
Flour Mill (south/east)
Sandstone Oven (south/east)
Brick Oven (south/east)
Misc Updates to DFNs
All NPCs (including townsfolk, shopkeepers, monsters and animals) in UOX3 have had their stats, skills, loot and other settings updated to match the state of these according to the official LBR guide (~Publish 15/pre-AoS) in combination with data from the stratics network from around the same time
New itemlists and lootlists have been added, and existing ones have been updated with more variety and more randomness
Item and NPC DFN sections can now inherit a random parent, if more than one parent is defined when using the GET tag
Named aliases have been added for all definitions of weapons, armors and clothes, to allow adding items with GM commands using the names of these items
Definitions for weapons and armors added from AoS to ToL UO expansion added, with stats balanced for Pub15
Races can now be setup with functional combat damage modifications based on weapon skills, so different races can have bonuses/penalties with different weapon types
Races can now be setup with equipment restrictions, either as whitelists or blacklists, that can allow/prevent certain races from equipping certain gear
Spawn Containers and Dungeon Chests
Spawn containers can now spawn more than one item per container - in fact, by default they now spawn every item in a specified itemlist in a given container
Default spawn files provided with UOX3 spawns locked and trapped chests and containers in dungeons on a regular basis. The contents of these chests varies (4 levels), as does the skill required to unlock and/or remove the traps associated with the chests.
Various Hard-Coded Functionality Ported to Scripts
Tweak command has been ported to JS, and has been overhauled with a new UI, improved usability, support for additional properties for Characters, Accounts, Skills, Items, Multis and Regions
The ability to split in combat now exists as a stand-alone JS script that can be attached to any NPC, and is thus no longer the exclusive domain of slimes
Implementation of sextants moved from code to JS, and updated to return proper longitude and latitude coordinates
Various skills ported to JS: Fishing, Item ID
Many Additional Improvements
Hireling AI! A variety of NPCs can now be hired with gold and commanded like pets via commands or context menu options
Thirst system added to complement the existing hunger system
Blood splatter effects now spawn in combat!
Improvements to spawn containers and traps on containers in general
Accounts now have a firstLogin timestamp property that is set the first time a player logs in to their account. This property is accessible via JS.
Player characters now have a createdOn timestamp property that is set when a character is created. This property is accessible via JS.
Added interior decorator tool for houses, hairstyle deeds
Tents can be demolished and converted back to deeds by chopping the tent chest with an axe
Dictionary files can now be reloaded with a new command ('reloaddictionaries)
Fixes for Line-of-Sight code to address issues with LoS checks between different floors of buildings, through terrain, etc
Improvements to skill training from NPCs (now triggerword based)
Improvements to interactions with banker NPCs (now triggerword based)
Fully functional Runebook script has now been integrated into UOX3
Several human NPCs added to DFNs, npclists and spawners for more variety in the type of NPCs that spawn in towns when using something like the community-based spawn files
Fixes for feature negotiation system to ensure the options work as intended, and to avoid players being disconnected without delay before assistant tool had a chance to respond to negotiation request
Items are now layered in containers by the order in which they are added, with latest added items shown on top of older items
Support added for responding to server polls from UO shard portals
Custom tag support added for multis, which can be set with in-game commands or via DFNs
Support added for New Character Animation packet, for improved character animations in client v7.0.x and beyond
Better client compatibility with both regular UO client and open-source clients
Improvements to teleport.scp, both with regards to content and organization; entries no longer required to be sorted in file!
All known issues with in-game bulletin boards resolved, and players can now view, post and reply to messages properly. Bulletin board maintenance has been re-enabled to clear out deleted player messages and/or NPC escort quest entries.
Quick-access to any object property using 'get [propertyName] command
Playable chess and checkers-boards (with enforced rules and turn-handling!)
Numerous fixes to healthbar updates and character flagging
Improved object tooltip support, with UOX3 responding to new client requests for object information, support for custom object tooltips via JS, and more
Exposed additional Region/Townregion properties to JS
Exposed account system and account properties to JS engine, allowing server admins to view and/or modify account properties of players from in-game
Improved accounts system to support time-limited or permanent account bans
Improved handling of NPC AIs in combat; NPCs will now look for new targets nearby if they are unable to reach their current target
Support for "sub-regions" that can be used to override which music is playing in a given area (useful for locations like taverns)
Pets will now teleport along with the player when moongates, recall spells, object-based or hard-defined teleporters are used.
Grab your copy of UOX3 0.99.5 for your preferred platform - Windows, Linux or macOS - while it's still hot!