v0.99.7a
The original Ultima Online server emulator (Est. 1997)
UOX3 News
UOX3 v0.99.7a - Hotfix
This hotfix has been release to address a server crash/timer issue that could prevent shards from being able to load worldfiles properly. The changes:
Fixes
- FixTimer Related Crash: Fixed a crash during loading of worldfiles caused by an issue with how certain timers (summon/peacemake) were saved and loaded
- FixTimer inconsistency:Fixed an issue where murder decay rate was not loaded properly for characters
- FixBonus fix:Fixed an issue where summoned creatures with "scared animal" AI would try to escape from their summoner
Grab your copy of UOX3 0.99.7a for your preferred platform - Windows, Linux or macOS
UOX3 v0.99.7 - Unchained!
Development of UOX3 continues at a steady pace (join our Discord to stay informed!), and now its time for another proper version release - UOX3 v0.99.7 - ahead of some big changes coming soon™️ that start with 'A' and ends with 'e', with the middle part being "wesome upgrades to SpiderMonkey JS Engin".
But before we go down that road, let's focus on this release, which as usual comes a long list of additions, updates and improvements. Read the highlights below, or dive deep into full changelog for all the juicy details!
New Content and Features
- NewPet Bonding System: A pet bonding system has been added. Tamed pets that maintain loyalty for a set duration (default: 7 days) will become "bonded." Bonded pets don't get deleted upon death, but instead enter a ghost state and can be resurrected by their owner.
- NewCombat Abilities: Added 12 combat special moves for AoS era, which can be activated via the special move book in paperdoll:
Armor Ignore, Bleed Attack, Crushing Blow, Concussion Blow, Disarm, Dismount, Double Strike, Infectious Strike, Mortal Strike, Paralyzing Blow, Shadow Strike and Whirlwind Attack - NewTreasure Hunting: A treasure map system has been implemented, allowing players to find and decode maps to locate hidden treasure chests.
- NewNew Crafting Skill: Players can now engage in glassblowing, with a new crafting menu, tools, and items to create.
- NewCrafting and Bulk Order Deeds (BODs):
- New Crafting Skill:Players can now engage in glassblowing, with a new crafting menu, tools, and items to create.
- Rank SystemThe crafting rank system has been fixed to properly apply stat modifiers to crafted items, scaling from 60% at Rank 1 to 105% at Rank 10.
- Tailoring BODsThe BOD system has been fixed and expanded to support Tailoring deeds in addition to Blacksmithing.
- NewFarms and Vegetables: Added additional resource-harvesting scripts and spawn regions for numerous vegetables on farms all over Britannia/Lost Lands
- NewHalloween Decorations:
- Added worldtemplates for Halloween event decorations that can be spawned for the event and despawned again with the flip of a switch
- Added numerous DFN entries for Halloween-related items and Halloween-related scripts to go with them
Core Gameplay Systems
- NewAoS Item Properties: Support has been added for numerous (optional) AOS-style item properties, including:
HITCHANCEandDEFENSECHANCEDAMAGEINCREASEHEALTHLEECH,STAMINALEECH, andMANALEECHSWINGSPEEDINCREASELOWERSTATREQ- Bonuses to stats (
HEALTHBONUS,MANABONUS,STAMINABONUS) and regeneration. - Caps for some of these properties are configurable in uox.ini.
- UpdateNPC Behavior and Pathfinding:
- NPC pathfinding heuristic updated from Manhattan (4-way) to Octile (8-way) for improved accuracy and performance with diagonal movement.
- Logic for NPCs following a moving target has been optimized to reduce redundant pathfinding calculations.
- Fixed some issues with pathfinding and turning that resulting in inaccurate paths and NPCs not ending up where they were trying to get to
- Partial pathfinding enabled for fleeing NPCs (to increase their chances of escaping) and for NPCs in water (to let them get as close as possible to their opponents in combat)
- Fixed some issues that would cause NPCs to stop and wait after successful pathfinding calculation, when they should have started/continued to move
- A new
MAXNPCAGGRORANGEsetting in uox.ini controls the maximum range at which NPCs can initiate attacks.
- UpdatePoison Systems:
- Applying poison to a weapon now adds a finite number of "poison charges," which are consumed when the weapon applies poison in combat.
- An optional "corrosion" system can be enabled via uox.ini (
POISONCORROSIONSYSTEM), which causes poisoned weapons to lose durability when applying poison in combat.
- UpdateHealing Skill Revamp:
- Overhaul of Healing skill with many fixes and improved support for different UO eras, with options to override era-specific behavior in the skill script
- Healing skill actions are now difficulty based
- UpdateWorld Population: Hundreds of new spawn regions have been added to populate dungeons, overworld areas, and oceans in Britannia and the Lost Lands. This includes a fully populated Khaldun dungeon with new NPCs and scripted puzzles, more vibrant and alive forests and jungles, more lifeless and undead graveyards and abandoned ruins, additional wandering healers, missing shopkeepers in towns, etc.
- UpdateTeleporters: Added support for specifying min/max era value pairs for scripted teleport locations, to allow more control of which eras specific teleporters are activated for.
- UpdateSpawn Regions: Spawn regions will now avoid spawning items in the exact same spot as other spawned items.
Other Key Fixes and Quality of Life Improvements
- UpdateTimer System Upgrade: All internal timers have been upgraded from 32-bit to 64-bit integers, resolving the long-standing timer overflow issue that could cause problems on servers with high uptime.
- UpdateBackup System: The server backup feature has been revamped to correctly and reliably archive the full world state.
- UpdatePerformance: The number of line-of-sight checks performed by NPC characters has been significantly reduced, improving performance, especially in combat scenarios.
- UpdateNPC Immersion:
- NPCs will now play a fidgeting animation if they remain motionless for 3 seconds or more while not in a pathfinding state.
- Monsters equipped with weapons (e.g., Ophidian Enforcers) will now use appropriate combat sound effects for that weapon type.
- FixContainer Decay: An issue causing non-corpse containers such as treasure chests to decay and spill their contents has been resolved.
- FixLogout Visibility: Players who qualify for instant logout will now vanish from view immediately, fixing a client-server desync issue.
- FixAccount/Character Fixes: Whitespace is now trimmed from account names on login, and individual skill caps are correctly initialized on character creation.
- FixMap Wrapping: The "map wrapping" feature when sailing off the edge of the world in Felucca or Trammel has been fixed, and boats now correctly teleport to the other side of the world in these cases.
- FixSystem Logic Fixes:
- Fixed an issue where monsters would not retaliate against player pets attacking them, addressing a kiting exploit.
- Field spells (e.g., Wall of Stone) now correctly respect blocking items and can no longer be cast through house walls.
- Fixed an edge case where a character would retain the poison strength granted by a poisoned weapon after it was destroyed by corrosion.
- Corrected the logic around
BUYTHRESHOLDini setting for buying/selling to NPC shopkeepers.
- FixPlayer-Specific Fixes:
- All "skill in use" flags are now properly reset upon a character's death, preventing them from getting stuck in a "busy" state.
- Fixed a bug that prevented players from using the Hiding skill after targeting themselves with a spell.
- Bard skills will now automatically attempt to use the last instrument the player played.
- "Young" players will no longer see warnings about being attacked when non-hostile NPCs perform a routine target validation check.
- Fixed issues with movement and Z-axis calculation when climbing ladders, including on the rope ladder in the two-story log cabin.
- FixMisc Fixes:
- Fixed an issue with NPC/Player characters instantly dropping one hunger level upon first login
- Fixed an issue where NPCs could aggro other NPCs in situations where neither NPC could reach the other
- Fixed an issue where mana/reagents were consumed and skillcheck performed before all spellcast-validations had succeeded, resulting in the occasional loss of reagents/mana when spellcasting was disallowed
- Fixed a War/Peace-mode desync between client and server by having server always notify client (using war-toggle packet) when the "at war" flag is toggled for player character
- Fixed some issues with Line-of-Sight checking code that returned incorrect results, which amongst other things affected spellcasting in areas with uneven terrain
- Fixed some server crashes
- Fixed misc errors that caused scripts to stop working
- Fixed numerous other small bugs and issues
Server Administration and Scripting
- NewNew Admin Tools:
- JS-based commands have been added for managing players (
'wholist), NPCs ('npcadmin), and spawn objects ('spawnadmin), providing filtering, sorting, and easy access to actions like tweak/teleport/etc. - Remote NPC control commands (
'xwalk,'xrun) to allow GMs to dictate where NPCs should move have been added.
- JS-based commands have been added for managing players (
- NewEnhanced Spawn Region Control:
- Spawn regions now support new DFN tags for greater control:
EXCLUDEAREA: Defines one or more sub-regions where objects should not spawn.ERAS: Makes a spawn region active only for specified eras, if they match up to the CORESHARDERA ini setting.GET: Allows one spawn region to inherit some base properties from another.
- Spawn regions now support new DFN tags for greater control:
- NewDefined Role for Seers and Adjusted Command Levels:
- Added new command level specific to the Seer role, while adjusting existing command levels to make room for additional optional custom roles
- Seer and Counselor privileges can now be set at the account-level, with all new characters on accounts flagged with these automatically getting the related character privileges
- NewCustom Object Tooltip Sorting:
- Added default sort order for all tooltip entries for Characters/Items. See Object Tooltips section of UOX3 Documentation for list of default values.
- Added support for defining custom sort order for custom tooltips in JS
- NewNew uox.ini Settings:
MOONGATEFACETS: Bitmask to control public moongate travel availability per facet.AUTOUNEQUIPPEDCASTING: If enabled, equipped items in hands are automatically unequipped when casting spells.LOOTDECAYSWITHPLAYERCORPSE/LOOTDECAYSWITHNPCCORPSE: Separate controls for item decay on player and NPC corpses.KARMALOCKING: Enables/disables the Karma Locking system.MAXNPCAGGRORANGE: Sets max range at which NPCs can initiate attacks on players/NPCs. The old MAXRANGE setting now only applies to players initiating attacks.POISONCORROSIONSYSTEM: Enables/disables the weapon corrosion system for poisoned weapons.- Stat & Skill Caps:
SKILLCAPSINGLE,SWINGSPEEDINCREASECAP,DAMAGEINCREASECAP,DEFENSECHANCEINCREASECAP,PHYSICALRESISTCAP,FIRERESISTCAP,COLDRESISTCAP,POISONRESISTCAP,ENGERYRESISTCAP - Stat Regen Control:
HEALTHREGENMODE,STAMINAREGENMODE,MANAREGENMODE, and their associated capsHEALTHREGENCAP,STAMINAREGENCAP,MANAREGENCAP. See UOX3 Documentation for full details on how these work. - Default Race Bonuses: A new section for default race bonuses for things like stat regen and max weight:
HUMANHEALTHREGENBONUS,HUMANSTAMINAREGENBONUS,HUMANMANAREGENBONUS,ELFHEALTHREGENBONUS,ELFSTAMINAREGENBONUS,ELFMANAREGENBONUS,GARGOYLEHEALTHREGENBONUS,GARGOYLESTAMINAREGENBONUS,GARGOYLEMANAREGENBONUS,HUMANMAXWEIGHTBONUS,ELFMAXWEIGHTBONUS,GARGOYLEMAXWEIGHTBONUS. See UOX3 Documentation for full details on how these work.
- UpdateExpanded JS Engine Support:
- JS timers and Temp Effects now support 64-bit values, removing the previous ~49-day limit.
- The JS engine has been updated with many new events, functions, methods and properties:
- NewNew JavaScript Events:
onContextMenuRequest( socket, targetObject )onContextMenuSelect( socket, targetObject, entryTag )onDismount( pUser, npcMount )onReleasePet( pTamer, pPet )onProfileRequest( socket, profileOwnerChar )onProfileUpdate( socket, updatedText )- Note: Several existing events like
onAttack,onDefense,onBoatTurnandonSkillCheckhave been updated with additional parameters for more scripting options. See UOX3 JavaScript Docs for details on each new/updated event!
- NewNew Standalone JavaScript Functions:
GetTownRegionFromXY( x, y, world, instanceId )CheckInstaLog( x, y, worldnumber, instanceId )CheckTimeSinceLastCombat( mChar, timeInSeconds )
- NewNew JavaScript Object Methods & Properties:
- Combat & Stat Properties:
.healthBonus,.manaBonus,.staminaBonus,.hitChance,.defenseChance,.speedIncrease,.damageIncrease,.healthLeech,.staminaLeech,.manaLeech,.lowerstatreq,.artifactRarity,.durabilityhpbonus,.luck,.poisonCharges,.poisonedBy. - Effect & Timer Control:
.PauseTempEffect(),.ResumeTempEffect(),.GetTempEffect(),.ReverseTempEffect(),.PauseJSTimer(),.ResumeJSTimer(). - Character & Skill Control:
.skillCaps(property),.AddSkill(),.lastOn/.lastOnSecs(properties). - Movement & Pathfinding:
.pathTargX/.pathTargY(properties),.WalkTo()and.RunTo()(updated with new parameters). - Boat Control:
.moveType(property),.TurnBoat(),.GetTiller(). - General Utility:
.SetRandomName()(for items),.SetRandomColor(),.Refresh()(updated with optional socket).
- Combat & Stat Properties:
Grab your copy of UOX3 0.99.7 for your preferred platform - Windows, Linux or macOS - while it's still hot!
UOX3 v0.99.6 - Unleashed!
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
- NewAdded 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!
- UpdatePerformance improvements for out-of-combat NPC pathfinding
- UpdateFurther improvements to world loading speed (~20% faster)
- UpdateFurther improvements to world save speed (~50% faster)
- UpdateNetworking performance for shards on Windows now much improved
Improved Server Stability
- FixFixes 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
- FixFixes for client crashes related to selling items to NPC vendors, logging in under certain circumstances involving older UO client versions
- FixFixed client freeze for sub-7.x clients caused by an unsupported animation packet
- FixFixed client freeze on login when only T2A client/server features are enabled, due to an incorrectly sized Stat Window Info packet
- FixFixed a potential memory leak related to world saves
- FixFixed an issue where UOX3 would fail to load pre-HS multi.mul files
Gameplay Improvements
- NewAdded 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!
- NewAdded initial setup for Trammel PvP ruleset, which can be applied to and customized for (any) facet
- NewAdded (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!
- NewUOX3 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
- NewAdded support for (small) Bulk Order Deeds - for Blacksmithing skill. Includes special pre-aos BOD item rewards like mining gloves, functional runic hammers, etc.
- NewAdded monster speech script that handles speech for Orcs, Ratmen, Lizardmen and Wisps in combat
- NewAdded 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
- NewAdded 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
- NewAdded 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
- NewAdded missing AI scripts for summoned Blade Spirits and Energy Vortexes
- NewAdded 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
- NewAdded "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
- NewAdded functionality for crafting and using potion kegs, which can be used to store potions at a fraction of their original weight
- NewAdded ability to create trophy house addons using Taxidermy Kits
- NewAdded JS-based help/player support menu accessible via character paperdoll, with modernized style, UI and functionality
- UpdateStealing 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.
- UpdateSnooping 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!
- UpdateMini-revamp of notoriety flagging, now with aggressor tracking, permagrey tracking, stealing flags, etc. on a per-target basis
- UpdateNPCs can now temporarily ignore unreachable targets in combat, and might enter evade state and try to move away from those targets if needed
- UpdateUpdated how pets and followers are tracked for players to a more robust system, and exposed this to scripting engine
- UpdateNPC Escort quests will now only pick target locations within the same facet as the NPC
- UpdateNPC Shopkeepers now respond in priority of distance to the player - the nearest NPCs will respond first
- UpdateAdded hair/beard dyes to some NPC vendors (like alchemists), and moved functionality from code to script
- UpdateUpdated NPC animation setup in creatures.dfn to play idle/fidget animations from time to time, and to play casting animations when using magic spells
- UpdateUpdated behaviour of planks on boats; should now be more robust, secure and more in line with player expectations based on original UO experience
- UpdateUpdated behaviour of Magic Lock/Unlock spells; should now be more in line with player expectations based on original UO experience
- FixFixed an issue of vanishing houses/boats due to data not being correctly saved
- FixFixed a bug that caused skill checks to fail at a much higher rate than expected
- FixAnimal Lore is now used instead of Anatomy as supplementary skill for Veterinary
- FixFixed some issues with boats where they could be incorrectly prevented from moving, or incorrectly allowed to move through blocking tiles
- FixMurderous brigand NPCs will no longer teach players skills
- FixFixed a number of cases where players would incorrectly remain in frozen state, or incorrectly be released from frozen state, in relation to spellcasting
- FixEarthquake spell will no longer cause caster to become criminal when there are no targets nearby, nor will they be affected by the spell themselves
- FixFixed an issue with NPC evasion pathfinding where the direction wasn't always set correctly
- FixFixed several issues with NPCs that would never stop fleeing, or get stuck in flee/don't flee loop
- FixFixed an issue where NPCs could attempt to attack targets in other world/instances
- FixFixed some issues with weight calculation of stackable items and partial pickups of item piles
- FixPets should now teleport along with owner properly when within range
- FixFixed known issues with placement of items (including especially tall items) on ground/floor/in houses, and with stacking of items
- FixFixed an issue where UOX3 could lose track of locked down items in houses on server restart
- FixFixed a bug where players dying onboard boats would prevent those boats from being packed up later, even after corpse decayed
- FixFixed issues with NPC spellcasters killing themselves when casting Mind Blast, or killing members of their own species/race with AoE spells
- FixFixed issue where tamed pets would not recognize certain items as food when fed
- FixFixed players being able to dispel Admins and GMs o_O
- FixFixed 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.
- FixFixed misc issues related to runebooks
- FixFixed misc issues with player vendors
Enhancements for Shard Admins
- NewAdded 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
- NewAdded new GM commands: rmovable, rnodecay, listpets, listfollowers, gettagmap, gettemptagmap, useitem, addhouse, addmulti, getjstimer, setjstimer, killjstimer
- NewAdded 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.
- NewNew 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
- CORESHARDERA=lbr
- [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
- [settings]
- UpdateReplaced script for responding to ConnectUO (dead) server poll request, with one that works with the 'standard' freeshard server poll request instead
- UpdateEnhanced GM 'add menu to allow clicking directly on images of items/NPCs to add them
- UpdateAdmin 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
- UpdateStarter 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
- UpdateThe 'go command can now be used to teleport to specifically named locations from locations.dfn. Example: 'go CastleBritish or 'go DestardLevel2
- UpdateUpdated 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
- UpdateSpawn Regions now support spawning NPCs from NPCLISTS with weighted entries for better control of what kind of NPCs will spawn more/less commonly
- UpdateUpdated 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
- UpdateUpdated NETWORKLOG uox.ini setting to always log network traffic for connected clients if enabled, without needing to specifically enable it for individual sockets
- FixFixed 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
- FixRemoving locked down items in a house using 'remove or 'rremove will now correctly update the lockdown count of the house
- FixFixed an issue with travel-commands in GM menu which handled travelling between facets incorrectly
Era-based Customization Options
- NewAdded 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
- NewAdded (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
- NewExposed numerous additional object properties to JS engine, and to get/set/tweak GM commands
- NewAdded 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
- NewAdded 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
- NewAdded 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
- UpdateUpdated numerous JS Events, Functions/Methods with fixes and additional options
- UpdateImproved error-reporting for scripting engine
- UpdateSpiderMonkey upgraded from 1.7 to 1.8.0-RC1, which adds support for Array.reduce() and reduceRight(), expression closures, and generator expressions
- FixFixed 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
- NewAdded 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
- NewAdded 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
- NewAdded FreeBSD build support for SpiderMonkey, zlib and UOX3
- NewAdded support for adding scripts in ore definitions, which is automatically applied to any ore of those types that's mined
- NewAdded new property for Items and NPCs loaded from DFNs: sectionID (keeps track of [sectionID] an item or NPC originated from)
- NewAdded all-in-one solution and project files for VS2022 that compiles both UOX3, Spidermonkey and zlib
- UpdateMoved Taste ID skill implementation from hard code to JS
- UpdateMoved Mining/Gravedigging skill implementation from hard code to JS
- UpdateMAXRANGE item property can now be used to define max combat range for melee weapons as well (not just ranged ones)
- UpdateBuild 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
- UpdateCleanup and standardization of style and naming conventions in code and scripts
- UpdateMisc code fixes, modernization and improvements
- FixFixed many compile-time warnings across different compilers
- FixFixed issues with idle/fidget animation setup that could cause some NPCs to blink out of existence randomly
Misc DFN Changes
- NewAdded 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)
- NewAdded region spawners for dungeons, towns and overworld in Ilshenar facet
- NewAdded additional NPC definitions related to Ilshenar facet
- NewAdded region definitions for Sea Market, Blackthorn Dungeon and Lakeshire
- NewAdded spawn regions for missing banker NPCs in Serpent's Hold
- NewAdded new NPC definitions for: f_executioner, f_chaosdragoon, f_chaosdragoonelite, f_gypsybanker, f_gypsymaiden, f_gypsyanimaltrainer, f_gypsyfortuneteller, f_vagabond, f_ironworker, m_executioner, m_chaosdragoon, m_chaosdragoonelite, m_gypsybanker, m_gypsyanimaltrainer, m_vagabond, m_ironworker, darkwisp, ancientlich, savageshaman, m_savagewarrior, f_savagewarrior, savagerider
- UpdateRevamp of default spawn region setup, should be more accurate to the UO experience
- UpdateUpdated 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!
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
- Exodus Minion - magical shield (like above), periodic AoE burst
- 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!
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!
Links
Xuri's UOX3 Guide offers step-by-step guidance to setting up, running and administering an UOX3 shard. It contains a myriad of tips, tricks and advice for shard admins and GMs, as well as lists of various data such as IDs, light-settings, etc. Recommended read for both novices and veterans.
Ultima Online - Latest Official Client
You can find the latest client on the official UO page.
Ultima Online - Mondain's Legacy client
Grab a copy of Ultima Online: Mondain's Legacy from CNET
Ultima Online Clients at Archive.org
Discover images/installers for other UO client versions at archive.org
ClassicUO is an open source UO client that improves on the regular UO client in almost every conceivable way; resizable gameplay window, zoom control, smooth movement and high FPS, world map, and much much more. Highly recommended. Note that it still relies on the data files of the original UO client.
Razor CE (Community Edition) is the open-source continuation of the previously abandoned Razor project, and is an "assistant" program (similar to UOAssist of old) for player-run Ultima Online shards. Aside from a whole host of quality of life improvements to the client, it also includes the ability to bypass encryption in the regular UO client, and used to be a requirement to be able to connect to UO shards before the introduction of open source UO clients that partially removed this need.
Razor Enhanced is an alternate variant of Razor that comes with an advanced scripting engine and many other improvements and tweaks.
The spiritual heir and replacement to InsideUO, UOFiddler is based on Ultima SDK, and is a tool to view and alter almost every 2D client file. Coded in C# with .net 4.0
GumpStudio is a tool originally written by Bradley Uffner which lets you easily create good-looking custom gumps through a graphical user-interface, and then export those to scripts of various formats (RunUO, POL, Sphere, Wolfpack, etc) based on the available plugins.
NOTE: To be able to export your custom gumps to UOX3's JavaScript format, download the UOX3 GumpStudio Plugin (outdated, might not work properly with latest GumpStudio version) and unzip it to your GumpStudio\Plugins folder. Then enable the plug-in through the Plug-Ins Manager and export your gumps to UOX3's format using the 'Misc' menu.
Quoted from the site: "WorldMaker is a suite of tools that allow a user to create and edit totally custom maps and structures, all from the perspective of how it will appear in the game. The tools are designed to interact with each other, offering the user a seamless experience. less time is spent on fighting the limitations of the tool, and more on the pressing job of designing."
Archive of useful tools for UO, including CentrED (a client/server-based map-editor whose homepage no longer exists)
Shard Portal is a UO Toplist where shard admins can advertise for their UO shards and attract new players to their shards.
UOGateway is a UO Toplist where shard admins can advertise for their UO shards and attract new players to their shards. The name of the toplist and the domain used are a nod back to the UOG client of old that was a combined shard list and client patcher/launcher, but has no other relation to said software than that.
Another nice (German) website focusing on providing custom artwork for UO shards. Amongst other things, it has some very nice animated item artwork (including a moving water-mill).
German website with free custom artwork for UO shards. New cloaks, new hairstyles, new wall styles, new armor types - and more!
Yet another German website with free custom artwork for UO shards. New chests, pillars, equipment, armor, decorative items - and more!
Ultima Online Graphics by Rubra
A site with free (mainly) paperdoll/gump graphics for new equipment, freely usable by any UO shard.
An incredible resource for those looking to designing and decorating houses in UO.
Ryandor.com is the homepage of Ryandor, a true artist when it comes to map-making for UO. His forums are crawling with map-makers from all corners of the world, and if you have a question about map-editing that you cannot get an answer for on these forums - there is no answer ;)
(Legacy link, out of date) The OpenUO project at Sourceforge is an opensource community for the development of Ultima Online emulators, primarily focusing on UOX3.
(Legacy link, out of date) The UOX3 project at Sourceforge.net contains both recent UOX3 releases as well as an archive of older UOX3 versions, and has been a home for the UOX3 code since 2002.
Lonewolf is an UO server-emulator with roots from UOX3 of old, through Wolfpack v12.6.
Heptazane's Stump is the new home of the guy formerly known as Alazane, creator of InsideUO, UO Screensaver, UO Hue Editor and Character Viewer. All useful utilities, but InsideUO in particular was a godsend to every GM on free shards when it appeared. Might not work properly with most recent client versions.
About UOX3 - Frequently Asked Questions
UOX3 stands for Ultima Offline eXperiment 3, and can basically be described as an Ultima Online server-emulator.
It allows anyone and everyone to run their own private Ultima Online shard (either offline or online) which they may then connect to using either the official UO Client or a custom one.
One of UOX3's goals is to emulate the functionality of official Ultima Online servers and allow anyone to run a UO server of their own.
At the same time, we aim to enable shard creators to tweak all aspects of their shard, and to create new functionality altogether - whether through UOX3's scripting engine or through UOX3's open-source code.
Each UO server emulator have their own pros and cons; some are easier to setup out of the box, some are better at emulating current day UO, some are better at giving shard admins the tools to create their own unique shards. Some of UOX3's strengths:
- Quick to get up and running with only a few easy to follow steps - see the UOX3 Quick Start Guide
- High-quality documentation that improves with every update
- Open Source (C/C++)
- 64-bit cross-platform support across Windows, Linux and macOS
- Easy-to-learn JavaScript-based Scripting Engine
- DFN Files - easily editable textfiles that act as blueprints for items, NPCs, regions, skills and more
- Dynamic reloading of scripts and DFNs at any time in seconds for faster iteration
- Custom object tags that can persist across server restarts
- UO client support from 4.x to the latest 7.0.x series
- Custom language dictionary system that supports English, Czech, French, German, Italian, Polish, Portuguese and Spanish
- Extensive Log System - UOX3 comes with an extensive log system that tracks server errors, warnings, network packets sent and received for each client, commands used, spells cast, combat events, player speech and more.
For a more complete feature list that includes customization options and gameplay features, check out the Feature Highlights in the UOX3 Docs.
Nothing! UOX3 is free to download and/or modify, and anyone who wants to can run their own UOX3 shard.
Some shards accept donations to help keep the lights on and server costs under control, but there's always a risk that the involvement of real-world money might bring very real lawyers into play, and what the individual shard owner does after downloading UOX3 is not under our control.
Yes. UOX3 is Open-Source. Anyone can download, modify & re-distribute it at will, as long as they follow the terms of the GNU General Public License AND the specific addition for UOX3 saying:
"In addition to that license, if you are running this program or modified versions of it on a public system you HAVE TO make the complete source of the version used by you available or provide people with a location to download it."
Technically, yes. According to the UOX3-specific portion of the GPL license we use, if you're operating a UOX3 shard on a public system, you are obligated to make the source (and scripts required to run your version of it) available for the public to download. If you run a private shard that is not available to the public, this does not apply.
The reason for UOX3's amendment to GPL license is to encourage shard owners to share their specific enhancements, fixes and innovations with the wider UOX3 community, so we can all grow together. Of course, this being an open-source project ran by volunteers, we cannot force anyone to abide by the license. In the end, it comes down to each shard owner's own morals and ethics.
UOX was the first ever UO server emulator, and was created by Jaegermeister (Denny Zuko). However, it was short-lived, and Cironian aka Marcus Rating rewrote it from scratch and released it as UOX2.
Later on he rewrote UOX2 completely and released UOX3 - which he eventually also open-sourced. That is essentially still the same version we're using now, though quite a lot has changed, and a lot of people have contributed to the project in the decades that have passed since then!
If you need any help with UOX3, you have several options:
- You can peruse the UOX3 Documentation and help files (also available in your local UOX3/docs folder).
- You can post your problem on the UOX3 forums, or look up the solutions to similar problems experienced by other users.
- You can come visit us in our Discord server and talk with users and developers of UOX3 directly.
- You can check out Xuri's UOX3 Guide, which contains information on how to use many of the features available in UOX3.
UOX3 History and News Archive
The original background story for the UOX3 project - tells the story about why you wake up in a new world with a clean slate when installing and/or playing on an UOX3 shard for the first time! A MUST read :)
The History of UOX3 section of the UOX3 documentation contains a breakdown of virtually all UOX3 versions that have been released since the first public release of UOX3.
An unofficial list of people who have contributed to UOX3 codewise over the years. If you have done any coding for UOX3 that has ever been in the "official" UOX3 releases and your name is not on this list, let me know!
A general timeline of all known (to me) UO Emulators/Servers, including who started each one, and when. (Text-only version here)
Contains all source-changes made from version 0.37 to 0.70.02
Updates from 0.70.03 to 0.70.03.24b
Contains all source-changes made from v0.70.03 to v0.70.03.24b, which was the last released version of UOX3 before the JavaScript-Engine was implemented.
Updates from 0.95.00 to 0.97.00
Contains all source-changes made from v0.95.00 to v0.97.00
Updates from Feb 2003 until present day
Contains all source-changes made from February 2003 to present day. UOX3 version number uncertain, but estimated version at start of this file is around 0.97.06.1j.
Archived news from July 2005 to May 2006
Archived news from February 2005 to July 2005
Archived news from September 2003 to January 2005
Archived news from May to August 2003
Archived news from January to April 2003
Archived news from September to December 2002
UOX3 Quick Start Guide
First, download and install the UO client, as well as either ClassicUO (open source client) or Razor (assistant tool with encryption removal), or both if you want to use them together (setup instructions here).
Note: While ClassicUO is available for Linux and macOS platforms, the UO client's data files are still needed. Try installing UO using Wine, or bring over the files from an existing install on Windows.
Next, if you haven't already done so, go ahead and download UOX3:
Adjust UOX.INI Settings
Extract the downloaded UOX3 package, then open UOX.INI and modify the following settings:
- SERVERNAME - Name of your shard
- EXTERNALIP - Your shard's Internet IP (if any)
- CLIENTSUPPORT# - Client ranges allowed on your shard. Keep as specific as possible.
- DATADIRECTORY - Path to UO Client folder, or UO data files
Setup Admin Account
Next, open UOX3/accounts/accounts.adm and change the default NAME (username) and PASS (password) of account 0 to something other than admin/admin, and save the file.

Start your shard by double-clicking UOX3.exe (Windows) or running terminal command ./uox3 (Linux/macOS).
UO + ClassicUO
Start ClassicUO, add a new profile with your shard's IP, path to UO client, etc. Save and hit "BACK", then select newly added profile and start UO!

UO + Razor
Right-click on Razor.exe, choose Properties > Compatibility tab > Run this program in compatibility mode for Windows XP (Service Pack 3). Apply and close file properties, then start Razor.exe. Load the default profile, then enter your shard's details (name, IP, port), the path to your UO folder. Hit "Launch UO" to start UO!

Logging in to your shard
Finally, with the client open, enter the username and password you set in accounts.adm, login and create your first character!
Additional resources to look at to get you going with your shard administration:
- First Five Minutes - Short guided tour of UOX3 found in the UOX3 Documentation (Recommended)
- UOX3 Command List - List of commands usable by Admins/GMs
- Feature Documentation - Section of UOX3 Docs that provide details about the various features supported by UOX3
- Community Forums - Browse thousands of posts by other users for inspiration, extensions and support
- Discord - Connect with other UOX3 users (and devs) in the UOX3 Discord server
General UO Emulator Timeline
(Go here for a text-only version of the timeline)
Here follows a quick timeline of UO emulators, based on facts, fiction and wild guesses, numbered from first to last. I've included any dates I've been able to dig up, as well as the current (when I checked) homepages that exist for the various emus. Feel free to point out any flaws by contacting me at xuri@uox3.org.
(1)UOX -> (2)UOX2 -> (4)UOX3 -> | |->(10)UOXGold | |->(11)AUOX -> (12)AUOXCON | |->(14)Wolfpack | | | |-> (15)Sunshine/Sushix | | | |-> (17)NOX-Wizard | | | | |-> (26)Revelation | | | | | |-> (37)equinox | | | | | |-> (32)Hypnos | | | |-> (18)Lonewolf | | | | | |-> (21)UO-Inside Out | | | | |-> (22)Method | | | | |-> (41)Werewolf | | | |-> (19)Shard Emulator | |->(13)UOX-pi | |->(14)LoC | |->(20)UOX Classic | | | |-> (30)UOX:NG | |->(25)Middle-Earth Custom UOX | |->(29)UOX3 "Unofficial" | |->(44)uoOS (3)Fuse | |-> CFuse | |-> Thayland's Fuse | |-> FuseX (5)UOR (6)NWO/UOAWEUnnamed (7)Grayworld -> TUS -> SphereServer |-> 56d (Main branch) | |-> Sphereserver X | |-> 1.0 (Dead end) (8)UOOS |-> (Swords, never finished?) (9)POL (10)Trespasser -> Hellfire -> Hybrid (16)Epsilon (23)Atum (24)Tupi (27)RunUO | |->(37) RunUO-RE (later renamed RuOSI) | |->(39) SunUO | | | |-> (??) GeNova Project | |->(44) ForkUO (later renamed ServUO) | |->(47) JustUOa> | |->(48) XRunUO | |->(50) ModernUO | |->(51) ServUOX | |->(52) CorexUO (28)SteamEngine (31)MyUO (33)Psychotropic (34)AUOE (35)Athena (36)Canera-Project (40)Ultima Online: Shattered Legacy Server (42)UO:98 (43)JUOServer (46)JPhex Server (49)UltimaPHP (53)Yewoh (54)Prima
1997
1.) Jaegermeister (Denny Zuko) creates the first version of UOX (Ultima Offline eXperiment) for the pre-alpha UO client. According to Wintermute on the Exult forums, Jaegermeister originally got the decryption key for the client from some friends at OSI and worked from there. The project was then abandoned in light of the upcoming beta/release version of the client.
2.) Marcus Rating / Cironian creates UOX2, rewriting UOX from scratch
3.) Fallo (Erik McClenney?) creates FUSE, a server expandable by user-made DLL-addons, such as CFuse, Thayland's DLL, and FuseX (by Craz).
4.) Cironian redoes UOX2, and the first public UOX3 version (0.37) is released Oct 22. 1997.
5.) UOR - Ultima Online Revisited, by Marc A. Pelletier / Coren. A newsgroup message from Feb 27, 1998 (archived on Google Groups) indicated the author had at that point been working on UOR for three months, i.e. started at the tail-end of 1997. UOR ran on UNIX, but was written with portability in mind. Like UOX3, the intention was to allow connections to UOR with official UO accounts.
1998/99
6.) A bunch of other UO servers that never really took off generally come to a halt when Cironian releases source for UOX3, including; New World Order, UOAWE - started Feb 9, 1998, by Gabriel, and An unnamed UO Server by Erwin S. Andreasen.
7.) Menace creates Grayworld early in 1998. It eventually evolves into TUS (The Ultimate Server), which again evolves into Sphere (aka SphereServer) around April 2000). A fork (SphereServer X) has been maintained alongside the main branch since 2016. For a more in-depth look at the history of Sphere, check out History of Sphere by Soulless!
8.) Sheppard creates UOOS - the first object oriented UO emu, or something.
9.) Eric N. Swanson, aka Syzygy, creates POL in the summer of 1998.
10.) What was later to become Hybrid was started sometime in 1998, around the time when the source for FUSE was released, and back then it went under the name Trespasser. Later it changed name to Hellfire, before being renamed as Hybrid.
11.) Armageddon makes his own version of UOX3, named AUOX, causing the first "branching" of any UO emu to occur :P
Some other people start working on another branch of UOX3, which they call "UOXGold".
12.) SpaceDog continues Armageddon's AUOX through "AUOXCon"(tinued)
2000
13.) Lord Binary does his own version of UOX3, called UOX-pi - later to be merged into Wolfpack.
14.) Ripper's customized UOX3 code grows into Wolfpack, while Chaos's customizations become Legions of Chaos
15.) Sunshine, a derivate work of an early Wolfpack version, is started by M. Strobl sometime in 2000. In 2003, version 3 of Sunshine is reforked from Wolfpack, because of memory restraints/unreadable codebase in the original fork. The successor of Sunshine, Sushix, is never officially released.
2001
16.) Epsilon is started by Kair in May 2001
17.) NOX-Wizard is created by xan using Wolfpack as base (25. June 2001)
18.) Wolfpack development splits in three (see below) as some WP devs pack up and start Lonewolf on November 9th, 2001.
19.) Shard Emulator, a Wolfpack v12.6 based emu, is started at the same time as Lonewolf.
20.) As the main UOX3 codebase drops the trigger-system and goes to a javascripting engine, spearheaded by Matthew Randall (EviLDeD) and Daniel Stratton (Abaddon), Sargo decides to continue the trigger-based UOX3-source under the fitting UOX Classic-name, on Nov. 17, 2001.
2002
21.) UO-Inside Out, a Lonewolf derivate started by Skyfire?, releases it's first version in early January.
22.) Method, a project derived from Lonewolf, is started by Malchir (Lloyd Dilley) in early February 2002.
23.) Atum, a russian developed UO Emu, has it's first release in February 2002. It's closed source, and has no released packages.
24.) Version 0.1 of Tupi, a server written in Java, is released on the 4th of February 2002 by speka/dalzhim.
25.) Middle-Earth Custom UOX, a fork of UOX3 by Sargo, sees its first release on February 11th, 2002.
26.) Revelation, based on NOX-Wizard, enters the scene, on Aug 21st, 2002.
27.) Krrios reveals RunUO in early september 2002 - the first UO emu written in C#. Official development ended in August 2014, after nearly 12 years.
28.) Shadowlord starts working on SteamEngine, an open-source UO emu mimicing Sphereserver's functionality, on Sept. 29th, 2002.
2003
29.) punt starts up UOX3 "Unofficial" on the first day of 2003, intending to rewrite the "JS"UOX3-version.
30.) UOX:NG - derivate work of UOX-Classic, started with big-endian 64 bit machines in mind, by Generic Player
31.) MyUO is created by Fabrizio Montesi, in October 2003.
32) Hypnos: UO Server Emulator, a fork of NOX-Wizard by Diego Elio Pettenò (Flameeyes), has its first CVS commit on 28th of December, 2003. Goals: To combine the power of UOX and the ease-of-use of Sphere, with a dynamically loaded, python-based scripting engine.
33.) Psychotropic - A successor project to Hybrid, is started in December 2003 by Ian McNealy
2004
34.) The initial revision of the source for AUOE (Advanced Ultima Online Emulator) is submitted to SourceForge on the 2nd of March, 2004, by f0xfire
35.) Athena - started March 10, 2004 by Kair
36.) Canera-Project - closed source project started 03-15-2004 by Sargo
37.) equinox - spin-off from NoxWizard makes it appearance on SourceForge on the 19th of September 2004
38.) Initial version of RunUO-RE (Russian Edition) is released to the public on New Year's Eve in 2004 by Wyatt, as a fork based off of 3rd party decompiled sources for the then closed-source RunUO, though it was later migrated over to the open-source version of RunUO. Eventually, from version 1.5.0 (with UO:SA support), it was renamed to RUOSI. Supports enhanced client and all expansions.
2005
39.) Max Kellermann forks SunUO from RunUO on February 5th, 2005. It runs on Mono 1.1 (Linux, FreeBSD) out of the box.
40.) First release of Ultima Online: Shattered Legacy Server occurs on May 30th, 2005, by Maximilian Scherr (Max), though it had been under development on/off since summer 2002, and included a rewrite from scratch in 2003. It's intended for the Alpha version of the Ultima Online client.
41.) Zagyg starts Werewolf - based on Lonewolf - on December 7th, 2005.
2008
??.) GeNova Project receives first commit on Google Code on January 8th, 2008, by souzaemarcal. It's a Brazilian SunUO/RunUO fork with focus on UO:KR support, Mysql databases and more. Last commit on November 12th, 2008.
2011
42.) UO:98 is released on December 7th 2011, by Batlin. It is a port of the UO Demo server into a fully functional multiplayer UO server.
2012
43.) JUOServer makes its appearance on SourceForge on January 22nd 201, as a Java-based Ultima Online server.
44.) uoOS (uo Old School?), puts up the first public version of its source-code, which is a branch off of UOX3 0.9x
45.) ForkUO (Originally called WalkUO?) is forked from RunUO at Google Code on September 5th 2012 and then later moved to Assembla. On March 19th 2013 the project was renamed to ServUO
2013
46.) JPhex Server - a combined server and client emulator for Ultima Online: Shattered Legacy (UO Pre-Alpha version) - was created and committed to Google Code on Oct 13th, 2013, by Folke Will. Can now also be found on GitHub.
2014
47.) JustUO, a fork of RunUO by Dian, is uploaded to github on October 17th, 2014
2015
48.) XRunUO - Forked from RunUO by Pedro Pardal (ppardalj/Semerkhet) in late 2005 and originally developed for the UO Legends shard with expressed intention of having full support for Stygian Abyss expansion. Source released to the public on July 22nd, 2015.
49.) UltimaPHP - an open-source UO Server written in PHP 7 - has its first code committed to github on Aug 8th, 2015, by João Escribano
2017
50.) ModernUO -a fork of RunUO by Kamron makes it debut in 2017. The goal of the fork was performance, the elimination of classical "world saves" and support for millions of objects and thousands of players.
2020
51.) ServUOX - a fork of RunUO by Frazurbluu and Malroth, receives its first commit on GitHub on March 26th, 2020
52.) CorexUO - a fork of RunUO by Merix that aims to update server code with new tech, improve performance and support more customization. Receives its first commit on GitHub on Sep 27th, 2020
2022
53.) Yewoh - an Ultima Online protocol library & server by Ricky Taylor, written in Rust, with bevy - first appears on GitHub on Sep 8, 2022
2025
54.) Prima - a modern, high-performance implementation of an Ultima Online server built with C# and .NET, with JavaScript-scripting - first appeared on github on April 28th, 2025, by Tom aka tgiachi
Servers not placed in timeline as of yet(any info about these will be appreciated!):
?.) LCUOSE, based on UOX3, lives a short life and decays quickly.
?.) LOP makes a short entrance, but doesn't stay for long.
?.) UO:Genius
?.) UO Free
?.) Orb
?.) Ethereal Void was a project to create a server for the pre-alpha version of UO. Information about how successful this was is lacking.
?.) RUOSI - a Russian-based fork from RunUO.
?.) UWE - Ultima Worlds Emulator, scripting module in python, active around March-April 2001? Jeff Gass/Cyborstinger?
?.) BK-UOX/Quetzal16 - Offshot from UOX3, customized for the Italian shard Britannia Kingdom. Eventually evolved into Quetzal16, then replaced with Quetzal32 (non-UOX based). https://web.archive.org/web/20060510120052/http://quetzal.igz.it/main_it.html
UOX3 - 22.Oct 1997 - by Cironian (Markus Rating)
Grayworld - Early 98 - by Menace
UOAWE - Monday Feb 9, 1998 - by Gabriel
POL - Summer 1998 - by Syzygy
Hybrid - 1998 - by McNealy, Sean Rose and Cycline3
UOX-pi - 8th Jan 2000 - by LB
Epsilon - May 2001 - by Kair
NoX-Wizard - 25.June 2001 - by xan
Revelation - August 21st 2001 - by ???
Lonewolf - 9th November 2001 - by LB & ???
Shard Emulator - 9th November 2001 - by frazurbluu
UOX-Classic - Nov. 17, 2001 - by Sargo
Method - February 10th 2002 - by Malchir (Lloyd Dilley)
Atum - February 2002 - by Ramsess
Tupi - February 4th 2002 - by Guilherme Lanius (speka)/Gabriel Abut-Lussier(dalzhim)
RunUO - September 2002 - by Krrios
SteamEngine - 29. September 2002 - by Shadowlord
UOX3 "Unofficial" - 1st January 2003 - by punt
UOX:NG - September 2003 - by Generic Player
MyUO - October 2003 - by Luxor (Fabrizio Montesi)
Hypnos: UO Server Emulator - December 28th 2003 - by Diego Elio Pettenò
Psychotropic - December 2003 - Ian McNealy
AUOE - March 2nd 2004 - f0xfire
Athena - March 10th 2004 - by Kair
Canera-Project - March 15th 2004 - by Sargo
equinox - September 19th 2004 - by prisonernumber7
RunUO-RE/RUOSI - December 31st 2004 - by Wyatt
SunUO - February 5th 2005 - by Max Kellermann
Ultima Online: Shattered Legacy Server - May 30th 2005 - by Maximilian Scherr (Max)
Werewolf - December 7th 2005 - by Zagyg
UO:98 - December 7th 2011 - by Batlin
JUOServer - January 22 2012 - by daneel_olivaw
uoOS - July 11th 2012 - by Xantier
ForkUO - September 5th 2012 - by AugmentedInsanity. Renamed to ServUO on March 19th, 2013
JPhex Server - October 13th 2013 - by Folke Will
JustUO - October 17th 2014 - by Dian
XRunUO - July 22nd 2015 - Pedro Pardal
UltimaPHP - Aug 8th 2015 - by João Escribano
ModernUO - 2017 - by Kamron
ServUOX - March 26th 2020 - by Frazurbluu and Malroth
CorexUO - September 27th 2020 - by Merix
Prima - April 28th 2025 - by Tom aka tgiachi
UOX3 Downloads
Clone the develop branch of UOX3's GitHub repository to get the source, or download it from this mirror in zipped form.
NB! Remember to check out the UOX3 Docs, which can be found online or locally in your UOX3's docs folder!
The The JScript Vault is a section of the UOX3 Community Forums dedicated to sharing JS scripts with other UOX3 users. Here you can find many interesting and useful scripts, any of which you can download and use for your own UOX3 shard.
The The DFN Vault is a section of the UOX3 Community Forums dedicated to sharing DFN files (blueprints/templates for items/NPCs/other content) with other UOX3 users. Here you can find many interesting and useful DFN files, any of which you can download and use for your own UOX3 shard.
Xuri's WorldBuilder
v0.23 - July 20th, 2008
Xuri's WorldBuilder is a combined GM-Tool and worldbuilding utility for both UOX3 and UOXClassic, with limited functionality for Lonewolf.
SectionSyntaxChecker
Created by Charles Kerr on 7/6/21
A command line tool that can scan section-based files such as DFN and INI files in UOX3, and check for syntax errors such as misplaced/missing brackets and braces. Check included readme.txt for details on available command line parameters and examples.
Freeze
Created by Charles Kerr on 9/22/20
A command line tool that can freeze items (and multis) with TYPE=255 from UOX3's 0.99.x .wsc worldfiles into staidx#/statics#.mul files based on the worldnumber of the items in question. At the same time, it will remove affected items from the wsc files. Updated files are saved with .frozen file extension, and original files are not modified.
Other Downloads
Mapsize
Created by Charles Kerr on 9/20/20
A command line tool that can adjust the size of any map#.mul and staidx#.mul files to a user-specified new size - smaller or larger. Resized files are saved with .resized file extension, and original files are not modified.
RadMap WorldForge (Mirror)
(RadStar Edition of WorldForge)
RadStar's Edition of WF builds on the below versions and includes support for maps 0 through 5, an UNDO function(!), new fast-move overview map, 64-bit support, performance improvements and many other quality of life changes.
WorldForge
(v6.4r4 - Aeon Edition/grimson Edition)
Same as above, except grimson has added support for map-sizes of 7168x4096, and has also included some small fixes to the overview map.
WorldForge
(v6.4r4 - Aeon Edition/Pol Build)
WorldForge is a tool originally written by Ridcully(Jan Luëbbe), and it's main purpose is to help you edit the three UO Client files MAP0.MUL, STATICS0.MUL and STAIDX0.MUL. Through a map-editor and some other useful tools you can change every aspect of how the UO client's mapfiles appear ingame.
After Ridcully put the WF source on the shelf, he open-sourced it resulting in a number of improvements through additional releases from various people (6.0 Xuri/Kasreyn, 6.1-6.2 Infymus, 6.3-6.4 Welf, 6.4r4 Shinigami/Birdy), and even some other custom versions. The mapeditor now features extras like... zooming, different "brush"-sizes (+ ability to set up your own brushes; there are for instance some helpful brushes for cave entrances!), tons of random draw modes(+ ability to set up own random draw modes), can use ALL texture ids(including swamps!) copy parts of one map-file from/to locations within the same map-file or to a different map-file, overview-map for speedily moving about, selecting texture id from map by right-clicking, random-altitude option, altitude-color-map, generate OSI-Diff-files, and more! (View update-log)
(Replaced by in-game world template system and default world templates that ship with UOX3!)
Default UOX3 Worldfiles v0.16 (11/03/2012)
Currently contains basic decorations, doors and signs for all mainland Britannia towns, plus Nujel'm, Moonglow, Serpents Hold, Magincia, Ocllo, Jhelom, Papua, Delucia and Buccaneers Den. To use, download and unzip to the UOX3/SHARED/ folder, overwriting any existing files there.
Note that this will also overwrite any existing worldfiles you may have, including characters and any items placed in your world either manually or by a spawner.
Linux/MacOS users: When downloading this zip file, be sure to run the files within the zip through a quick "dos2unix *" to convert line breaks in the files to the proper format for your platform, or UOX3 might not be able to load the worldfiles properly on startup. This only applies when downloading the zip file, if you got these through cloning the UOX3 repo on GitHub this should be handled automatically.
Note that you can also find this in the UOX3 Resources GitHub repository!
(Now bundled with UOX3, but disabled by default, with ini settings controlling whether to spawn objects from spawn regions or nott!)
Community-made Spawn.dfn v2.0 (10/07/2005)
This community-made spawn.dfn file was originally created by Grimson, and was then based on Ripper's World for Lonewolf. Since then it has received several updates from both Grimson and other people, and now offers a world filled with all kinds of NPCs (monsters, animals, shopkeepers, townfolk) as well as reagent spawns.
Linux/MacOS users: When downloading this zip file, be sure to run the files within the zip through a quick "dos2unix *" to convert line breaks in the files to the proper format for your platform, or UOX3 might not be able to load the spawn-files properly on startup. This only applies when downloading the zip file, if you got these through cloning the UOX3 repo on GitHub this should be handled automatically.
Note that you can also find this in the UOX3 Resources GitHub repository!
(Works with UOX3 0.99.x, but might be unstable - use at own risk!)
PkgInstaller
v0.02 - March 12th, 2006
PkgInstaller is a utility created to make it easier to share and/or install custom script packages (JS, DFN or both).
- Takes a zip file and installs the JS/DFN details appropriately
- Will display a readme.txt if it is included in the JS file
- Ability to peruse the contents of the package before installing it
NOTE: PkgInstaller requires .NET Framework 2.0 to work.
(Works with UOX3 0.99.x, but might be unstable - use at own risk!)
UOX3 Account Manager
v0.4 - May 6th, 2007
Account Manager is a utility built specifically for UOX3 to help shard admins easily add, remove, and manipulate Accounts entries from Accounts.adm.
NOTE: UOX3 Account Manager requires .NET Framework 2.0 to work.
(Works with UOX3 0.99.x, but might be unstable - use at own risk!)
UOX3 Character Viewer
v0.7 - Aug 1st, 2006
UOX3 Character Viewer is a .NET utility that lets you load UOX3 worldfiles, view all Characters in those worldfiles, and then export said characters (and their belongings) to an external file, which can later be imported back into a different set of worldfiles (for instance). Features include:
- Load UOX3 Worldfiles, Displaying any Characters (and the items they contain).
- Save UOX3 worldfiles as a single file, which UOX3 will load.
- Export Selected character, with optional items, to an export file.
- Import character files checking for valid Serial numbers to a loaded worldfile.
NOTE: UOX3 Character Viewer requires .NET Framework 2.0 to work.
(Not compatible with UOX3 0.99 and above)
UOX3 INI Editor
v0.3 - May 4th, 2007
INI Editor is a utility built specifically for UOX3 to help shard admins do the following:
- Load UOX3-generated UOX.ini files
- Easily modify all the various ini file settings
- Save modified ini files in a format readable by UOX3
NOTE: UOX3 INI Editor requires .NET Framework 2.0 to work.
(Not compatible with UOX3 0.99.3 and above)
This is a Windows-GUI Wrapper for UOX3 originally created by knoxos. It lets you minimize UOX3 to the sys-tray, and gives Win9x users a scrollbar in the console (Win2k/XP has this by default). It also contains a "watchdog"-feature, which can check at specified intervals to see if the UOX3 server is still running properly, and will automatically restart the UOX3 server if not. By default it looks for "uox3.exe", so if you're using UOX-Classic or a version with a different filename, either rename the EXE-file or change the default filename in the cluox-sourcecode yourself.
Updates in versions 1.3 & 1.4 were done by ShadowBranch.
This is a (probably outdated) plugin (.dll) for GumpStudio which enables the exporting of gumps from this tool to UOX3's JavaScript format. It's not included in the default download of GumpStudio.
A mapeditor in full 3D! View and edit your landscapes (and to a limited extent, your statics) from a 3D perspective! Though it can be slightly buggy if you're unlucky - it's a damn impressive program nevertheless. The sourcecode is fully available, and it's in C++ - so there's no reason why someone couldn't pick it up & continue the work of the original author... A good mapeditor that has a lot of potential if someone dedicate themselves to improving it...
19/07/2025 - Xuri (0.99.7)
Bumped up version number
Added workflow file (github-releases-to-discord.yml) that will publish UOX3 GitHub releases to Discord
Updated UOX3Build.yml workflow file to ignore pushes with "-release" version tags
Updated CMakeLists.txt to include installation rules for creating release packages
Updated readme.md with some up-to-date details and fix for broken build-status badges
09/07/2025 - Xuri
Added [Tame] and [Bonded] to character tooltips of tame/bonded animals and updated Dictionary files
Updated .AddRadio() and .AddCheckbox() Gump Methods to support 32-bit unsigned int for the buttonID
05/07/2025 - Dragon Slayer
Updated Addmenu with all the missing npcs (Ratmen/lizardman/Se Npcs/Vet)
Fixed PoisonedBy missing on world save tags.
Fixed Spiders Icons in Addmenu.
Added Vet Spawns thru out the worlds.
Fixed Sound on Shadow fiend ( creatures.dfn )
04/07/2025 - Xuri
Fixed an issue with poison damage in combat where the poison resist of the attacker was checked instead of that of the defender
Fixed an issue where the poison details in tooltip of an item would only be visible when equipped, and not visible when kept in backpack
Fixed an issue where if a weapon was destroyed due to corrosion damage, it would not unset the poison strength on the character who wielded it
Added new Character/Item property to track the source (serial) of poison applied to an object. This is available as a JS Char/Item property:
.poisonedBy // serial of character who applied poison to an object. Set to 0xFFFFFFFF/SE_INVALIDSERIAL() to clear
Updated all code and scripts related to setting/unsetting poison effect on objects to also update the .poisonedBy property
Serial of character who poisoned a character who died while poisoned is now stored on the corpse
Added third optional parameter to Character JS Method .SetPoisoned() that can be used to specify source char of applied poison. New syntax:
.SetPoisoned( poisonLevel, wearOffTime[, poisonSourceChar ])
Updated calculations of magic and/or poison resistance to also include magic and/or poison resistance from races
Excluded player pets from MONSTERSVSANIMALS/ANIMALATTACKCHANCE ini settings; player pets are now always valid targets in combat for NPCs (unless player is a Young character)
02/07/2025 - Xuri
Updated UOX3 & JS documentation
Added new JS command: 'seeryell [text] // broadcast message to all with seer privs or higher privs
Added new privilege flag for characters:
0x20000 - Seer (Character is a Seer)
Fixed an issue where Young players could not direct hirelings to attack valid targets (js/npc/ai/hireling.js)
When buying items from NPC shopkeepers worth more than the BUYTHRESHOLD in uox.ini, the player's backpack is first checked for the required amount of gold, before their bankbox is checked. A new message is displayed about any gold withdrawn from player's bank.
When selling items to NPC shopkeepers that are worth more than the BUYTHRESHOLD in uox.ini, the gold is now deposited directly into the player's bankbox, instead of to their backpack. A new message is displayed about any gold deposited to the player's bank.
Fixed an issue with Shopkeeper AI (js/npc/ai/shopkeeper.js) where the NPC would incorrectly assume player was member of the same NPC guild as them, and provide them with an unwarranted bonus to trade prices as a result
Fixed an issue that prevented players from being able to apply poison to weapons (js/skill/poisoning.js)
Fixed incorrect NPC spawn entry in Khaldun spawn region DFNs: spectralarmour -> spectralarmor
Added entries for Orc Caves/Khaldun to GM travel menu (dfndata/items/travelmenu.dfn and travelmenu.bulk.dfn)
Fixed an issue that sometimes prevented admin characters from seeing offline GMs
Added support for reading SKILLCAPSINGLE ini setting with GetServerSetting() JS function
Fixed issue where animal trainers would give players a random ostard when buying a desert ostard (js/npc/pets/static_ostard.js and dfndata/items/misc/mount-statues.dfn)
Added DFN entries for additional ostard-mount-statues (not sold by animal trainer) that can give user a random ostard, forest ostard or frenzied ostard respectively (dfndata/items/misc/mount-statues.dfn)
Player pets are no longer safe from being attacked from monsters. This also addresses an issue with tamed pets being able to freely attack monsters if player gets the monster's attention first and then kites the monster around while pet kills it. Now monster will properly re-focus to nearest attacker (including pets) if original target is too far away
Fixed incorrect command-levels for GMs for hard-coded commands listed in commands.dfn
Added support for specifying minEra,maxEra value pair for teleport locations in js/teleport.scp. These can be used to define the minimum and maximum era a given teleport entry should be active for. The values for these default to -1, unless otherwise specified. Updated teleport entry format:
sourceX, sourceY, sourceZ, targX, targY, targZ, [sourceWorld, targWorld[, minEra, maxEra]]
Updated teleport entries for Yew <-> Heartwood to only be active for ML era shards and above (js/teleport.scp)
Updated regions for Moonglow and Skara Brae to properly cover dock areas (dfndata/regions/regions.dfn)
Added missing dictionary entries related to poison/corrosion update
Added some missing details for poisoning skill (js/skill/poisoning.js) and arms lore skill (js/skill/armslore.js)
Added missing details for 'tweak (js/commands/targeting/tweak.js), 'get and 'set (js/commands/targeting/get.js and set.js) commands related to poison charges and poison strength on items
Updated poison strength of poison elementals [poisonele] from 4 to 5 (dfndata/npc/elementals.dfn)
Fixed an issue with Spawner Object Editor where state of "Use Spawnlist" checkbox would not be read correctly if no "Spawner Type" radio buttons were selected (js/server/misc/spawner_editor.js)
28/06/2025 - Xuri (0.99.6d)
Cleaned up an issue with last commit where wrong npclists were used in some spawn regions
Made a few additional adjustments to the new spawn regions in Lost Lands/New Haven
Included more changes related to poison updates that should've been in previous commit (like the complete UOX.INI support for POISONCORROSIONSYSTEM setting)
Adjusted region setup for New Haven to set the individual "building" regions within as a sub-region of the main town (regions.dfn)
Fixed an issue where the displayed HP of an equipped item would not update correctly
Further updates to convert timers 32-bit to 64-bit. This affects and addresses some potential issues with: Character creation/NPC guild-join timestamps, NPC movement, combat timers, idle timeouts, item decay, spellcasting
Added support for new JS Events that can trigger from global script, and can be used to store persistent custom entries in players' paperdoll profiles:
onProfileRequest( socket, profileOwnerChar ) - Triggers when client requests data for a paperdoll profile
onProfileUpdate( socket, updatedText ) - Triggers when client sends updated data from paperdoll profile
Added two new helper functions in code that allows faster (but very slightly less accurate) distance checks between two points:
GetApproxDist( Point3_st a, Point3_st b )
GetApproxDist( CBaseObject *a, CBaseObject *b )
Improved pathfinding for NPCs attempting to follow another character, by adopting a system of weighted variables to help the NPC determine when to recalculate the path vs when to stick with the old, combined with faster distance checks via GetApproxDist(). The end result of this is faster, smarter and more responsive NPC followers and NPC opponents in combat. The variables influencing this include: how far the target has moved from last pathfind target location, whether NPC is heading in the overall right direction or not, time since last path calculation and some small randomization to avoid edge case jitters.
Updated default command levels in commands.dfn, code and scripts to support the Seer role and make space for some custom roles. These are the new defaults as listed in commands.dfn, which should not be changed as they are linked to specific enums in code. Do take note that this might invalidate command levels for existing GMs/Seers/Counselors, who might need another round of 'make gm/seer/cns from an admin:
ADMIN - command level 10
GM - command level 9
SEER - command level 7
CNS - command level 4
PLAYER - command level 0
Updated how UOX3 makes use of the account-level flags 0x2000 (Seer) and 0x4000 (Counselor). If either of these flags are set on an account, all new characters created on the accounts will automatically receive the relevant command privileges.
Fixed an issue with 'wholist command that prevented admin characters from seeing characters with lower privilege levels in the list (js/commands/wholist.js)
Fixed an issue with hiding/GM hide that prevented admin characters from seeing hidden characters with lower privilege levels in the world
UOX3 now includes the cross-platform, header-only utf8cpp library found at https://github.com/nemtrif/utfcpp and freely available under Boost Software License v1.0. The immediate use-case for this is in code right now is to better handle strings related to custom paperdoll profiles, but will also look to make more heavy use of this in future updates
27/06/2025 - Xuri (0.99.6c)
Fixed an issue with an internal movement check that prevented characters from moving in valid map areas in Felucca/Trammel from X 6144 to X 7168
Fixed an issue where .instanceID property was misspelled in 'xgo GM command script, causing characters to be teleported to an out of bounds area where they would no longer be saved (js/commands/targeting/x.js)
Added some additional error-checking to .Teleport()/.SetLocation() JS Method to prevent script-accidents from sending characters out of bounds.
Updated Poisoning skill to add poison-charges to weapons being poisoned. Charges are consumed when applying poison in combat (js/skill/poisoning.js)
Updated combat code to consume poison-charges if a poisoned weapon is used to poison an opponent
Updated shoplists for Blacksmiths and Weaponsmiths - they now buy/sell longswords (dfndata/items/shoplist.dfn)
Updated MageShopping shoplist for mage vendors - they now buy/sell mass curse scrolls (dfndata/items/shoplist.dfn)
Added new Spawn Region DFN tag that can specify which era or eras of UO (Multiple comma-separated entries supported) a given spawn region is valid for. Spawn region not valid for core shard era will be ignored. Syntax:
ERAS=UO,T2A,UOR,LBR,AOS,SE,ML,SA,HS,TOL
Added new Spawn Region DFN tag that allows using another spawn region as a "parent". All properties of this parent will be inherited except for these, which are ignored: ERAS, NPCLIST, ITEMLIST, NPC and ITEM. Syntax for new tag:
GET=# // Inherit a specified spawn region
Added spawn region for animal trainer vendor in Vesper stable
Added spawn region for fur trader/tanner vendors in The Best Hides of Britain
Added spawn region for spinner vendor in The Lord's Clothier's and The Right Fit shops in Britain
Added spawn region for tanner NPC to Nujel'm Tannery (and fixed leatherworker spawn region for same area)
Added spawn regions for banker NPCs in East Bank of Britain, First Bank of Moonglow, Jhelom Bank and Jeweler, Bank of Skara Brae
Added spawn regions for stables, tailor and blacksmith inside Castle British
Added spawn regions for mage shops, mage guilds and farm houses in Moonglow
Added spawn regions for misc vendors and townfolk in multiple cities
Added spawn regions for Fire Island
Updated spawn regions for Dagger Isle/Ice Island
Added spawn regions for forests and jungles in southern Britannia and on various islands including Bucc's Den, Moonglow, Serpent's Hold, and misc unpopulated islands
Added spawn regions for area east of Skara Brae, around Hedge Maze and south of Britain
Added spawn regions for wandering healers outside every dungeon entrance in Britannia and Lost Lands
Re-integrated ocean spawn regions for ocean creatures (dolphin, walrus, water elemental, sea serpent) from the original community-based spawn file
Added reagent spawns in overworld spawn regions in Britannia/Lost Lands
Added special reagent spawns in swamp areas
Added additional overworld spawn regions in Britannia/Lost Lands
Added spawn regions for Khaldun dungeon that spawn some new and some old NPCs:
Old: Zombies, skeletons, skeletal mages, skeletal knights, ancient liches
New: Cursed (and named) NPCs, shadowfiends, zealots of khaldun (knights/summoners), tentacles of the harrower
Updated size and positions of some existing overworld spawn regions
Fixed incorrect spawn region size for small island south of Trinsic
Added switch/door puzzle functionality in Khaldun dungeon using new switch/door combo script (js/item/dungeons/switch_door_combo.js)
Added "smart objects" in Khaldun dungeon that activate when you come close enough (js/item/dungeons/smart_activate_item.js)
Added teleport locations within Khaldun dungeon (js/teleport.scp)
Added custom AIs to existing NPC spawning in Khaldun dungeon:
Ancient Lich (summons other undead, and can turn into one of them for disguise)
Added DFN entries for new NPCs spawning in Khaldun dungeon, some with custom AIs:
[tentacles_of_the_harrower] -> Tentacles of the Harrower (life steal)
[shadowfiend] -> Shadowfiends (seek out and reveal hidden players)
[zealot_knight]/[zealot_summoner] -> Zealots of Khaldun (turn into undead on death, male/female variants)
[cursed] -> Cursed (male/female variants)
[spectralarmor] -> Spectral Armor
Added DFN entries for new (named) NPCs spawning in Khaldun dungeon:
[lysander_gathenwale] -> Lysander Gathenwale
[grimmoch_drummel] -> Grimmoch Drummel
[morg_bergen] -> Morg Bergen
[tavara_sewel] -> Tavara Sewel
Added new NPC DFN entries:
[leatherworker] -> alias for male/female leatherworker vendors
[mapmaker] -> alias for male/female mapmaker vendors
Added new Race DFN entries:
[RACE 29] -> Cursed (enemies of RACE 30)
[RACE 30] -> Zealots (enemies of RACE 29)
Added new book DFN entries for Khaldun journals of Lysander, Tavara and Grimmoch - available as loot from the respective NPCs (dfndata/misc/books.dfn and dfndata/items/misc/books.dfn)
Added 25% chance for hit-animations and hit-SFX to play for targets in combat, instead of playing every time - can get very spammy
Monsters with actual weapons equipped (like Ophidian Enforcer with Halberd/Bardiche) will now get appropriate combat SFX for hitting with that weapon
Updated Healing skill to base cure/resurrection skill requirements on the calculated skill, rather than base skill (js/skill/healing.js)
Fixed an issue where healing with bandages and dying in the process would not properly reset the healing-related tags and skills used
Updated healing script to show a resurrection confirmation menu for players targeted with bandages for resurrect (js/skill/healing.js)
All skill usage states now reset on death, to prevent cases of players being "busy" while trying to use skills that got stuck due to script bugs.
The 'regspawn GM command now supports a new parameter called "max". Updated command syntax:
'regspawn # // perform a single respawn cycle in a specific spawn region
'regspawn all // perform a single respawn cycle across all spawn regions
'regspawn max // respawn ALL spawn regions to MAX capacity in one go
Added new UOX.INI setting that determines the maximum range at which NPCs can initiate attacks on players/NPCs (the old MAXRANGE=10 setting now instead defines max range at which players can initiate attacks on players/NPCs):
MAXNPCAGGRORANGE=10
Optimized performance by significantly reducing the number of line-of-sight checks performed by characters, especially in combat scenarios, or when evaluating potential targets for NPC AIs. The amount of checks done is also affected by the new ini setting for max aggro range.
Fixed an issue where both NPC and player characters would instantly drop one hunger level (from 6 to 5) upon creation since hungerrate was not initialized until after first hunger-event
Updated character priv property from UI16 to UI32, and added a new flag that determines if fame/karma title is hidden for character:
HIDEFAMEKARMATITLE (0x10000)
NPCs will no longer aggro other NPCs if the Z difference between them is greater or equal to 20 (i.e. they're on different floors), unless both are using ranged weapons and both are in range
Fixed an issue where players could get discounts from shopkeepers even though neither player nor shopkeeper were members of a NPC guild (js/npc/ai/shopkeeper.js)
Fixed an issue where the "premium" a player would get when selling items to a shopkeeper in the same NPC guild as them would be 110% extra on top of the item's value, instead of the intended 10% (js/npc/ai/shopkeeper.js) (Thanks, cobrag0318!)
Added missing tall straw hat to tailoring crafting scripts (Thanks, Dragon Slayer!)
Improved error reporting during compilation of individual scripts being reloaded - will now show more context and line number
onCombatEnd JS Event now also triggers when NPCs ignore their target and/or evade during combat
Updated 'decorate command to support saving/loading custom tags on items for world templates. These are stored after a @ symbol in the world template, each custom tag separated by a | symbol, and with each custom tag saved using this syntax: key$type$value
Updated resource-harvesting scripts to use script-specific global (const) variables, to avoid interference between different scripts (js/server/resource/*)
Added new resource-harvesting scripts and added spawn regions for these in fields on farms all over Britannia/Lost Lands
cabbages (js/server/resource/cabbages.js)
canteloupes (js/server/resource/canteloupes.js)
carrots (js/server/resource/carrots.js)
garlic (js/server/resource/garlic.js)
gourds (js/server/resource/gourds.js)
honeydew melons (js/server/resource/honeydewmelon.js)
onions (js/server/resource/onions.js)
pumpkins (js/server/resource/pumpkins.js)
squashes (js/server/resource/squashes.js)
turnips (js/server/resource/turnips.js)
watermelons (js/server/resource/watermelon.js)
Updated CSpawnRegion::FindItemSpotToSpawn() function in cSpawnRegion.cpp to prevent duplicate spawning of exact same item in exact same location
Updated sectionid of all potion and scroll aliases to match main item, so they'll get correctly picked up by NPC shopkeepers (dfndata/items/magic/potions.dfn and scrolls.dfn)
Specified sectionid for backpacks, so it also gets applied to packs added using the alias [backpack] (dfndata/items/misc/provisions.dfn)
Fixed a code issue that prevented players from selling empty containers to NPC shopkeepers willing to buy such containers
Fixed an issue where field-spells (wall of stone, poison field, etc) would ignore dynamic/static items that should block these
Fixed an issue where field-spells could be cast into houses from the outside by standing next to a wall and targeting self
Fixed a War/Peace-mode desync between client and server by having server always notify client (using war-toggle packet) when the "at war" flag is toggled for player character
Fixed an issue with hiding skill that wouldn't allow player to hide after having acquired self as target in combat (through spellcasting, for instance) (Thanks, Dragon Slayer!)
Fixed an issue where mana/reagents were consumed and skillcheck performed before all spellcast-validations had succeeded, resulting in the occasional loss of reagents/mana when spellcasting was disallowed (code and js/magic/clumsy.js and level1targ.js)
Fixed an issue with lack of criminal-flagging for casting of hostile spells scripted in JS (clumsy, magic arrow, feeblemind) vs blue targets (js/magic/clumsy.js and level1targ.js)
Fixed some issues with Line-of-Sight checking code that returned incorrect results, which amongst other things affected spellcasting in areas with uneven terrain
Fixed some issues with movement code and climbing of ladders, in particular the rope ladder in the 2-story log cabin. Code now sets a "is climbing" flag when character steps onto a rope ladder, and uses that to help resolve some edge cases, and then unsets it when they step off.
Renamed section headers of some map-items in DFNs from "locationname" to "locationnamemap" for clarity (example: "britain" to "britainmap")
Fixed broken "map wrapping" when sailing to edges of map in Felucca or Trammel
Fixed a server crash related to attempts at reading data from invalid map tiles
Updated 'rremove repeated command to automatically release/unsecure locked down/secure items before removing them (js/commands/custom/repeatingcmds.js)
Added GM commands to force a temporary weather change until next time weather updates automatically (js/commands/custom/misc-cmd.js):
'rain
'snow
'clearweather
Updated 'settag and 'settemptag GM commands to support string-values with commas (js/commands/custom/misc_cmd.js)
Updated 'where GM command to also show region ID in addition to coordinates and region-name (js/commands/where.js)
Fixed an issue with potion usage (js/item/potion.js) where both hands needed to be free instead of just one (thanks, cobrag0318!)
Applying poison to weapons will now set those weapons up with a set number of poison charges, which will be consumed when the weapon is used to apply poison in combat (code + js/skill/poisoning.js)
The level of poison and amount of poison charges applied to a weapon are now visible to the person holding the weapon
Added new JS Item property:
.poisonCharges // the amount of poison charges remaining on the weapon
Added new UOX.INI setting, enabled by default:
POISONCORROSIONSYSTEM=0/1 // enables or disables the corrosion system for poison
Applying poison to weapons will now cause them to corrode if corrosion system is enabled in uox.ini, which causes the weapon's HP to drop when used in combat. Corrosion can be cleaned up with oil cloths (code + js/skill/poisoning.js)
Fixed an issue with item decay timers not working correctly after upgrade from 32-bit to 64-bit timers
Characters can now resist specific levels of poison being applied to them depending on their poison resistance stat
02/06/2025 - Xuri
Fixed an issue where UOX3 would not save/load the pauseTime of effects correctly, causing JS-timers and tempeffect timers in general to break on server restart. Manual fix for already affected effects: open effects.wcs and set all pauseTime values with ridiculously high values to 0, then save file.
31/05/2025 - Xuri
Got rid of the Overflow() function, which no longer serves a purpose after timers have been upgraded from uint32_t to uint64_t
Unified usage of TIMERVAL (UI64) and TVAL (also UI64) across code base; now only TIMERVAL is used
Updated BuildTimeValue() function parameter from R32 to R64
Updated casting of values passed into BuildTimeValue() across source base
Updated JS Timers and Temp Effects to support starting, saving and loading very long term effect timers; no more 49 days upper limit
Ninja fix for new items added to a container appearing underneath other items in the container instead of over
29/05/2025 - Xuri
Fixed misc edge-case-issues with handling of timestamps via GetCurrentClock() in various scripts, especially those stored in custom object tags. In cases of timestamps supposed to persist for a long time (and across server restarts), this is now handled via Date.now() instead.
27/05/2025 - Maarc
Bump the types for the timer from the uint32_t to uint64_t and encapsulate behind a TVAL type definition.
According to the C++ reference, chrono should support at least 45 bits of accuracy for milliseconds.
This gives a 1115 year wraparound.
18/05/2025 - Dragon Slayer
Added support for pet bonding system similar to OSI mechanics
Pets now track bonding status using 'isBondedPet' tag
Bonding begins when player tames a tameable pet that meets taming skill requirements,
Pets become bonded after 7 days (604800000 ms) of loyalty to their owner,
Bonded pets no longer delete on death, but enter ghost state,
Added packet 'SendNpcGhostMode( pSock, unknownFlag, serial, ghostFlag )' to trigger bonded ghost appearance,
New JS event hook: onReleasePet( pTamer, pPet )
Triggered when a player releases a controlled pet,
Can be used to reset bonded status or perform cleanup.
14/05/2025 - Xuri
Fixed an issue where integer division and rounding of values could lead to skill gains not being visible to player
Fixed an issue where intelligence stat would not contribute to skill points based on skills.dfn setup the same way as dex/str
12/05/2025 - Xuri
Updated global script (js/server/global.js) to make use of onUseBandageMacro() to enable usage of bandage macros in client
Overhaul of Healing skill (js/skill/healing.js and js/skill/healing_slip.js) with fixes and improved era support. Script now includes some options that can be modified at top of script to override era-specific behavior. Summary of changes:
Healing actions are now difficulty based:
Resurrect chance scales from 25% (min 80.0 primary/secondary skill) to 65% at avg 100.0 skill to 100% at avg 120.0 skill
Cure chance scales from 80% (min 60.0 primary/secondary skill) to 92% at avg 100.0 skill and 100% at avg 120.0 skill, and is reduced by 10% per level of poison on target
Upper difficulty for Healing skill checks now changes based on % loss of health on target and based on its maxhp, so to continue gaining skills from healing, one needs to heal targets with higher and higher % of their health lost
For T2A core shard era, healing can only bring player to ~65.0 skill, curing can bring player from 60.0 to ~85.0 skill, and resurrection can bring player from 80.0 to 100+ skill.
For UOR and beyond, healing damage can bring player all the way to GM skill and beyond, without need to cure/resurrect
Base amount of damage healed with bandages in SE era and beyond adjusted to 36-60, compared to 43-80 for AoS and below
In HS era and beyond, min 80.0 primary and 80.0 secondary healing skill will now trigger attempt at curing poison/bleed at half normal heal duration (but with lower chance of success). If it succeeds, amount of health healed is reduced proportional to strength of poison cured. If it fails, another cure attempt is made after the heal.
Mortal Strike now blocks heal attempts on a target, but not attempts to cure poison/bleed
Fingers slipping due to being attacked while bandaging now has a higher threshold to take place for SE era and beyond, and scales further based on dexterity in HS era and beyond - while AOS era and below has a very low threshold for this
Updated .CheckSkill() Character JS Method to support another parameter which can force the result of a skillcheck (-1 = failure, 0 = use skillcheck result, 1 = success):
.CheckSkill( skillNum, minSkill, maxSkill[, isCraftSkill, forceResult ] )
Updated onSkillCheck() JS Event with another parameter, with the value of the optional forceResult parameter in CheckSkill()
onSkillCheck( pUser, skillID, lowSkill, highSkill, forceResult )
Fixed an issue where skill caps for player characters were not correctly initialized, resulting in unpredictable behavior
Fixed an issue with mana regen timer for MANAREGENMODE=1 (LBR and below) where timer was never adjusted
Fix for pets getting stuck staring at potential targets in combat while simultaneously ignoring them
The damage of a weapon can now also be modified via the 'set damage # command. Supported syntax:
'set damage # // sets both lodamage and hidamage to value of #
'set damage # # // sets lowdamage to first value, hidamage to second value
Added two new Admin commands to help address issues with player characters. Use sparingly!
'resetskillcaps // Resets ALL individual skillcaps for ALL player characters back to default
'resetskillusage // Resets skill usage status of all skills for ALL player characters to false, to unblock their use
08/05/2025 - Xuri
Added new JS Event that triggers when dismounting
onDismount( pUser, npcMount )
Added four new JS Methods for Characters/Items:
.PauseTempEffect( tempEffectID ) // pauses selected temp effect indefinitely until resumed/killed
.ResumeTempEffect( tempEffectID ) // resumes selected temp effect, if paused, and extends original effect timer to account for paused time
.PauseJSTimer( timerID, scriptID ) // pauses JS timer based on provided timerID and scriptID
.ResumeJSTimer( timerID, scriptID ) // resumes JS timer based on provided timerID and scriptID
Renamed previously added JS Method RevertEffect to RevertTempEffect (code change only, script was always the latter)
Fixed issue that prevented 'xrun command from working (js/commands/targeting/xwalk.js)
Fixed an exception related to loading in data from jails.wsc on startup
Fixed an exception related to periodic check/release of prisoners from jail
05/05/2025 - Xuri
Updated target-based 'wipe command to also affect valid NPCs (non-invulnerable, non-pets) (js/commands/wipe.js)
NPC admin gump (js/commands/wholist.js) will now force-refresh on next open after NPCs have been removed via the remove button in the menu
Spawn Object admin gump (js/commands/spawnadmin.js) will now force-refresh on next open after spawn objects have been removed via the remove button in the menu
Added three new GM commands (js/commands/targeting/xwalk.js) that can be used to control NPCs remotely:
'xwalk // Makes targeted NPC pathfind and walk to target location
'xrun // Makes targeted NPC pathfind and run to target location
'xturn // Makes targeted NPC turn towards target location
Updated AdvancedPathfinding() in movement.cpp to include two optional parameters
allowPartial // if true, move even if calculated path is blocked, until blocked (defaults to false)
ignoreDoors // if true, ignore doors during pathfinding calculations and calculate the path is if the door was not there (defaults to false)
Updated .WalkTo() and .RunTo() JS Character Methods to support the two additional pathfinding parameters, and also to support maxSteps values beyond 255
Updated pathfinding heuristic from Manhattan (4-way) to Octile (8-way) distance for improved pathfinding accuracy and increased performance with diagonal movement
In some situations, UOX3 will now calculate a new partial path for NPCs who failed to follow their assigned path, to get them closer to their final destination
Optimized pathfinding logic for NPCs following a target (like pets/hirelings, or NPCs in combat), to reduce the amount of pathfinding calculations required when target is moving. The NPCs will now keep track of the general direction towards their target, and if the NPCs are already heading in the right direction, they'll keep going as long as they have a path left to follow or until direction towards target has changed. This also eliminates a problem where NPCs would stick to their path until they reach the end, even if target has gone in a different direction.
Updated logic for how NPCs turn during pathfinding. Instead of adding an extra "push" for direction into the calculated path itself to ensure NPC will both turn and move in that direction, which allowed some inaccuracies to creep into the calculated paths, that extra push is now handled while NPC is executing the path instead, whenever direction changes are needed
Partial pathfinding is now enabled for fleeing NPCs by default, to increase their chances of getting further away from their opponent in combat
Partial pathfinding is now enabled for NPCs in water by default, to allow them to get as close as possible to their opponent in combat
Fixed an issue where NPC movement speeds would misbehave at certain speeds where the calculated movement time would get rounded down to zero
NPCs will now play a fidgeting animation if they've remained motionless for 3 seconds or more while not in a state of actively trying to move/pathfind
Increased max pathfinding steps for NPCs in combat from 50 to 75
Fixed an issue where NPCs would stop and wait when they should have been moving, after successful pathfinding calculation
Fixed an issue where NPCs that ignore a target and enter evade state would not leave combat
Added two new JS Character properties that can be used to evaluate pathfinding success (for instance in combination with onPathFindEnd Event), and/or opens for manipulating pathfinding target locations via scripts:
.pathTargX // Current NPC pathfinding target, X coordinate
.pathTargY // Current NPC pathfinding target, Y coordinate
Added colorlists for frenzied and forest ostards, and applied these to their NPC definitions
04/05/2025 - Xuri
Fixed an error on shutdown when running UOX3 in debug mode in VS due to CCommands constructor attempting to unnecessarily clear CommandMap, TargetMap and JSCommandMaps
Fixed an issue in Portuguese dictionary where a commented line was lacking a forward slash
Fixed some soft exceptions related to loading of dictionary files
Fixed soft exceptions related to checking file sizes of potentially non-existing worldfiles on startup
Fixed some soft exceptions related to loading of regions from DFNs and townregions from WSC
Fixed misordered datatype entries in dfnDataTypes for DFNTAG_DYEHAIR and DFNTAG_DEFENSECHANCE
Fixed double "GET" entry in strToDFNTag mapping. One of them should've been "GETUO"
Fixed strToDFNTag mapping error for "LOYALTY" DFN tag, which was being incorrectly mapped to DFNTAG_MAXLOYALTY
Added missing strToDFNTag entry for WILLTHIRST DFN tag
Removed unknown and unused DFN tag/mapping named SKILLVAR
Fixed misordered DFNTAG_SWINGSPEEDINCREASE entry in DFNTAGS enum, which caused tags following it to be associated with incorrect datatypes
Fixed some crash/slowdown issues with reloading of all JS scripts (console menu option 8), especially noticable in VS debug mode
Fixed an issue where shopkeepers would sometimes fail to recognize items they should want to buy from players due to section ID case sensitivity
Fixed an issue where help gump could be opened multiple times in regular UO client (js/server/misc/helpgump.js)
Admin welcome gump will now trigger a worldsave to save spawning option selections to ini file (js/server/admin_welcome.js)
03/05/2025 - Xuri
Fixed an issue where creatures with a taming requirement of 0 could not be tamed (js/skill/taming.js)
Fixed a server crash related to attempts to tame non-NPC characters (js/skill/taming.js)
Young players will no longer see warnings about being attacked when non-hostile NPCs perform a routine target validation check
Playing an instrument will now store it as the player's last played instrument (js/item/musicianship.js)
Bard-skills will now always use the last instrument a player played, if any (js/skill/provocation.js/enticement.js/peacemaking.js)
Added Line-of-Sight checks to Bard-skills (js/skill/provocation.js/enticement.js/peacemaking.js), though this can be disabled via setting at top of each script
Provocation now uses player's provocation skillcap value as max skill check for LBR-era shards and below
Provocation is now difficulty-based by default for AoS-era shards and beyond, controllable by setting at top of provocation script. This means, difficulty of provoking a target on another target is based on the average provocation difficulty between them, with a -25.0 (lowest chance of success) and +25.0 (max skill check beyond which success is guaranteed and no more skill-gains are possible) window
Updated hunger settings of "predator" animal race from races.dfn from HUNGER=300,5 to HUNGER=3000,2 so they don't grow hungry and die from starvation so fast
Revamped broken backup feature to actually work (with additional error-checking and logging), and to include full world state; now backs up _everything_ inside /shared directory, plus /accounts, /books and /msgboards directories.
01/05/2025 - Xuri
Fixed some issues that prevented NPCLISTS containing other NPCLISTS and/or weighted NPCLISTS from working correctly
Updated spawn regions and NPCLISTS used for Yew/Cove orc forts to provide a better mix of weak/strong orcs, and fewer ettins
Fixed an issue where Yew/Skara brigand camp used a duplicate spawnregion ID, causing no NPCs to spawn
Added humanoids_t2a.dfn, with T2A-specific definitions for orcs, ratmen and lizardmen, with some stat adjustments
Updated NPC definitions for orcs, ratmen and lizardmen with placeholder GET tags for different eras, pointing to nearest available era definition
Updated NPC definitions for [kappa], [yomotsuelder], [yomotsupriest] and [yomotsuwarrior] with placeholder GET tags for different eras, all pointing to SE definition for now
Updated NPC definitions for [yamadon], [rajiu], [bakekitsune] with placeholder GET tags for different eras, all pointing to SE definition for now
30/04/2025 - Dragon Slayer
Fixed: Dropping gold on NPCs flagged as guildmasters or BOD handlers will now correctly allow skill training unless the player is explicitly attempting to join a guild or turn in a BOD.
Fixed issue where pumpkins.js and provocation.js scripts tried to look up "YoungPlayerStatus" server setting instead of "YoungPlayerSystem"
29/04/2025 - Xuri
Revamped 'wholist GM command entirely in JS, now comes with filters for names, online/offline status, sorting by name or last online date, quick-buttons to tweak/teleport/inspect, etc. Updated syntax:
'wholist [on]
'wholist off
'wholist force
Also available under alias 'playeradmin, with the same parameters
Added new JS command for GMs to assist managing NPCs, using updated wholist menu as basis: 'npcadmin
Added new JS command for GMs to assist managing object-based Spawners, using updated wholist menu as basis: 'spawnadmin
Exposed the following character properties to JS engine:
.lastOn // String-formatted timestamp of last time character was oniline
.lastOnSecs // Timestamp of last time character was online, expressed as seconds since Unix epoch
Added some validation (and re-synching) of lastOn vs lastOnSecs player character properties - only active when running in debug mode
Updated onBoatTurn JS Event to support a 4th parameter - a reference to the boat's tillerman:
onBoatTurn( iBoat, oldDir, newDir, iTiller )
Added (missing from last commit) JS Method for boats to fetch tillerman reference: .GetTiller()
Updated JS Docs with details about onBoatTurn JS event, .GetTiller() method and .lastOn/.lastOnSecs properties
Added some console output with details about time taken for each regionspawn cycle
Added some new tiledata override entries for some tiles (stairs/platforms) missing NoShoot flag in some older clients (dfndata/maps/tiles.dfn)
Fixes for updated wholist/spawnadmin menu crashing under certain circumstances using regular UO client
Updated logging of CPCharAndStartLoc packet to account for both old and new version of packet
Reloading Spawn Regions via 'reloadspawnregions JS command will now do a full reload from the DFN files (previously needed manual DFN reload before spawn region reload)
Reloading DFNs via 'reloaddfns JS command will now also reload creatures.dfn, titles.dfn, location.dfn
Reloading ALL via 'reloadall JS command will now also reload teleport.scp, creatures.dfn, titles.dfn, location.dfn
23/04/2025 - Xuri
Fixed an issue where onUseUnchecked JS event in envoked scripts (via object ID or type) would never trigger because hard-coded checks would run before envoking script
Added function _restorecontext_() {} to archerybutte.js script (Thanks, DS)
Added support for MAXWEIGHTBONUS DFN tag for races, to allow increasing weight that can be carried by specific race, and a new GetWeightMax() code function to do the necessary calculations on demand
Updated [default race bonuses] UOX.INI section with the following new settings for the 3 default playable races (only used if nothing else specified in races.dfn):
HUMANMAXWEIGHTBONUS=0
ELFMAXWEIGHTBONUS=0
GARGOYLEMAXWEIGHTBONUS=0
Added support for ALLSKILLSG and ALLSKILLSL DFN tags for races, which allow defining skill bonus or loss across all skills for a given race
Added new Character JS Method for adding skill points without triggering skillchange JS Events:
.AddSkill( skillID, skillAmt, triggerEvents[true/false] )
Added new Boat JS Property to allow getting/setting movement types for Boats via scripts:
.moveType // See UOX3 JS Engine Docs > JS Object Properties > Multi Properties for a detailed list of all supported movement types
Added new Boat JS Methods to allow turning boats via scripts, and fetching reference to tillerman:
.TurnBoat( turnDir ) // 0 = straight (no turning), 1 = turn left, 2 = turn right, 3 = flip around
.GetTiller() // returns item reference to boat's tillerman
Updated IterateOver/OnIterate JS Function/Event to support passing in optional socket parameter. New syntax:
IterateOver( objectType[, socket ]);
.OnIterate( sourceObject, targetObject, socket )
Added a fourth parameter to onTurnBoat() JS Event - an item reference to the tillerman.
Updated Character/Item JS Method .Refresh() to support an optional socket argument, to specify which player to refresh the object for. New syntax:
.Refresh( [socket] )
Added support for new region setting that can define a region as disabled/enabled via DFN (tag) or script (JS property). Disabled regions will be ignored by UOX3:
DISABLED=0/1 // Region DFN tag
.isDisabled // Region JS Property
Fixed issue where JS tags and temporary JS tags would not be copied over when duplicating a character or item
Removed strength requirements from base shield definitions - stats like these are handled per era (dfndata/items/gear/armor/base_armor.dfn)
Fixed an issue where necromancer newbie armor would incorrectly inherit base versions of leather armor without stats (dfndata/items/gear/armor/leather_armor/leather.dfn)
Fixed an issue where players would not correctly leave combat after hiding (js/skill/hiding.js)
Fixed an issue with Healing skill where skill-checks for healing/veterinary would fail due to a misspelled variable (js/skill/healing.js)
Updated smart-turn furniture script to prevent players from being able to turn furnitures that are occupied by characters (js/server/misc/furniture_smartturn.js)
Updated Buff-bar script to only add buffs for client versions higher than 5.0.2, the client patch where this feature was added (js/server/network/0xDF_buffBar.js)
Updated Vendor BDO Dispenser script to add alternative reward-table for AoS era (js/npc/ai/vendor_bdo_dispenser.js)
Updated UOX3 documentation with details on various settings and features
Removed UOX.INI setting ACCOUNTISOLATION, and references to this in documentation - as it did nothing
Cleaned up some code (spaces to tabs, indentation, spacing)
22/04/2025 - Xuri
Tooltip entries for Characters/Items now have a sorting order associated with them, defined in code via a "sortOrder" parameter in the ToolTipEntry
For custom tooltips in scripts, sort order can be set via the temporary tag. Example:
iUsed.SetTempTag( "tooltipSortOrder", 1 ); // sort tooltip after name (sortOrder 0), but before maker's mark (sortOrder 5).
Information on sorting of Character/Item tooltips and a list of the default hard-coded sort order can be found in the updated UOX3 Documentation, under Features > Object Tooltips
20/04/2025 - Dragon Slayer/Xuri
Updated code calculating passive health, stamina and mana regeneration for characters, based on new UOX.INI settings and bonuses from characters/items/races
Added three new Character/Item/Race DFN tags to grant bonus health/stamina/mana regeneration:
HEALTHREGENBONUS=# // 10 bonus points equates to 0.01 extra hp regen per second, independent of era
STAMINAREGENBONUS=# // 10 bonus points equates to 0.05 extra stamina regen per second
MANAREGENBONUS=# // 10 bonus point equates to 0.1 extra mana regen per second
...also available as JS Properties:
.healthRegenBonus
.staminaRegenBonus
.manaRegenBonus
Updated get/set JS commands to allow getting/setting regen bonuses for health, stamina and mana
Updated races.dfn to include default +2 health regen bonus for humans, and +2 mana regen bonus for gargoyles.
Added new UOX.INI settings under [Skills and Stats] section:
HEALTHREGENMODE=1 // 0 = no passive health regen, 1 = default passive health regen
STAMINAREGENMODE=1 // 0 = no passive stamina regen, 1 = default passive stamina regen (LBR or below), 2 = AoS or beyond, 3 = SA and beyond
MANAREGENMODE=1 // 0 = no passive mana regen, 1 = default passive mana regen (LBR or below), 2 = AoS (Pub17), 3 = AoS/SE (Pub18 and beyond), 4 = ML, 5 = KR, 6 = SA and beyond
HEALTHREGENCAP=# // Max cap for Health Regeneration Bonus stat per character
STAMINAREGENCAP=# // Max cap for Stamina Regeneration Bonus stat per character
MANAREGENCAP=# // Max cap for Mana Regeneration Bonus stat per character
Added new UOX.INI section ([default race bonuses]) with the following new settings for the 3 default playable races (only used if nothing else specified in races.dfn):
HUMANHEALTHREGENBONUS=0 // default health regen bonus for human race (2 from ML expansion onwards)
HUMANSTAMINAREGENBONUS=0 // default stamina regen bonus for human race
HUMANMANAREGENBONUS=0 // default mana regen bonus for human race
ELFHEALTHREGENBONUS=0 // default health regen bonus for elf race
ELFSTAMINAREGENBONUS=0 // default stamina regen bonus for elf race
ELFMANAREGENBONUS=0 // default mana regen bonus for elf race
GARGOYLEHEALTHREGENBONUS=0 // default health regen bonus for gargoyle race
GARGOYLESTAMINAREGENBONUS=0 // default stamina regen bonus for gargoyle race
GARGOYLEMANAREGENBONUS=0 // default mana regen bonus for gargoyle race (2 from SA expansion onwards)
Updated UOX3 Documentation with new feature section on Stat Regeneration with details on stat regeneration rules and recommended settings per UO era
Added support for Medable armors (have no effect on meditation skill and/or passive regen of mana when worn) and Mage Armors (can turn non-medable armor into medable armor)
These properties are defined per armor piece using the first and second bits of the MORE property:
MORE=0x1 0x0 0x0 0x0 // Medable Armor
MORE=0x0 0x1 0x0 0x0 // Mage Armor
The following armor types have been marked as medable by default:
leather armor, leather ninja armor, leather samurai armor, leaf armor, gargish cloth armor, gargish leather armor and all hats and masks
Updated JS Method .Defense() to support optional fourth and fifth parameters - excludeMedableArmor (true/false) and includeShield (true/false)
Updated CalfDef function to support including shields in the calculations, and updated mana regen code to include shields when checking for equipped armor
Updated Meditation skill JS script to exclude medable armor from armor check, include shields, and apply different rules for active meditation depending on mana regen mode
Updated stat window to include defensive rating of shields (based on Parrying skill) and/or elemental resistances (if enabled in ini)
Added a new property to CRace class, which is automatically set and incremented as UOX3 loads in races from races.dfn: raceID
Added new Getters/Setters for CRace class to retrieve ID of a specific Race object
Updated JS property .id for Race JS Object to return new race ID instead of iterating through list of races to compare race object and return index
Reloading DFNs now also reloads Races
22/03/2025 - Dragon Slayer
Added new NPC definitions for lesser hiryu mount, lady of the snow, fan dancer, oni, crane, gaman, revenant lion from UO SE.
15/03/2025 - Dragon Slayer
Fixed an issue where timestamps for system timers could be set in the past due to float-to-UI32 casting precision loss. ( Thanks Xuri )
09/03/2025 - Dragon Slayer
Added new DFN tags for Spells:
BATWING, DAEMONBLOOD, GRAVEDUST, NOXCRYSTAL, PIGIRON
These are also available as JS Engine object properties for spells: .batwing, .daemonBlood, .graveDust, .noxCrystal, .pigIron
08/03/2025 - Dragon Slayer
Added new DFN tag for Items:
LUCK=# // Luck stacks across all items that a character has equipped to make up their Luck score for better AOS Magic Loot. Currently no AOS Magic Loot system in place.
These is also available as JS Engine object property: .luck
07/03/2025 - Dragon Slayer
Added new DFN tag for Spells:
TITHING=# // This makes it so spells require tithing to cast.
Also added new property to Players for tithing so it shows up in status bar and also says the amount of tithing the char set/get.
These are also available as JS Engine object property for players/spells: .tithing
02/03/2025 - Dragon Slayer
Renamed spawnergump.js to spawner_editor.js.
Added spawner_editor.js text to dictionaries.
Various enhancements to spawner editor gump, including support for another spawner type - area spawner (type 69)
27/02/2025 - Dragon Slayer
Updated JS Gump Methods .AddButton() and .AddButtonTileArt() to support larger values for buttonId and tileId parameters. (Thanks Xuri)
Updated formatting of several gump command strings from JS Methods to ensure unsigned integers are correctly converted to string. (Thanks Xuri)
23/02/2025 - Dragon Slayer
Added new DFN tag for Items/Npcs:
DAMAGEINCREASE=# // This adds extra damage percent to the total base damage.
This is also available as JS Engine object property: .damageIncrease
Added New INI settings: DAMAGEINCREASECAP, Set the default cap in percent the damage of a char/item can increase.
22/02/2025 - Dragon Slayer
Added UOKr Extended Status bar gump packets.
Added New INI settings: PHYSICALRESISTCAP, FIRERESISTCAP, COLDRESISTCAP, POISONRESISTCAP, ENGERYRESISTCAP, DEFENSECHANCEINCREASECAP. Set the default caps for resists and defense chance increase.
21/02/2025 - Dragon Slayer
Added new save/load tags: ExtPropCombat, ExtPropDefense,ExtPropStats, ExtPropMisc, ExtPropCommon for the AOS properties that are being added.
16/02/2025 - Dragon Slayer
Characters will now play an impact-animation when they get hit in combat.
Removed onCombatHit JS Event, as it's redundant after updates to onAttack
Increased animation speed of missiles fired by ranged attacks - they now arrive at their target faster!
15/02/2025 - Dragon Slayer
Added new JS Character property .skillCaps that allows getting/setting individual skill caps per character
Updated JS Documentation with details on JS Character property .skillCaps
Introduced a default INI setting (SKILLCAPSINGLE) with a skill cap of 1000.
Updated skill-checks across source and scripts to refer to relevant skill caps where appropriate
14/02/2025 - Dragon Slayer
Updated get/set commands (js/commands/targeting/get.js and set.js) to support all the new AOS properties that have been added
Fixed misspelling in JS Documentation for GetTimer/SetTimer. (Thanks Xuri)
08/02/2025 - Dragon Slayer
Updated UOX3 Docs with details on Item DFN tags: artifactrarity, durabilityhpbonus, defensechance, event, healthleech, healthbonus, hitchance, lowerstatreq, manaleech, manabonus, maxitems, maxrange, maxuses, more0, more1, more2, resistfire, resistcold, resistlighting, resistpoison, swingspeedincrease, stealable, staminaleech, staminabonus, usesleft
06/02/2025 - Dragon Slayer
Added new JS Character/Item Method for fetching the remaining time of a specific temp-effect, or 0 if effect does not exist on object (Thanks Xuri)
.GetTempEffect( tempEffectId )
Added new JS Character/Item Method for force-reverting specific temp-effects on object based on specified temp-effect ID (Thanks Xuri)
.ReverseTempEffect( tempEffectId )
01/02/2025 - Dragon Slayer
Fixed an issue where UOX3 would unnecessarily update a given player's status window repeatedly multiple times per server cycle (Thanks Xuri)
Fixed Young Status not being properly removed from characters (Thanks Xuri)
Fixed wrong order of DFN tags in DFNTAG enum in ssection.h (Thanks Xuri)
30/1/2025 - Dragon Slayer
Updated JS Method .ResourceCount() to be usable for both characters and items (Thanks Xuri)
Updated documentation for JS Methods .ResourceCount() and .UseResource() to reflect what code shows.
22/01/2025 - Dragon Slayer
Added region definitions for New Haven in Trammel, with new player quest training areas, appropriate music for New Haven, etc. (regions.dfn)
Moved Old Haven region to dfndata/regions/regions_old_haven_only.bak
Updated music in Britain's regions (regions.dfn)
22/01/2025 - Dragon Slayer
Fixed an issue that prevented onUnequip JS event from triggering on items being unequipped
Minor cleanup of skill_boosting_equipment.js script
21/01/2025 - Dragon Slayer
Fixed damage dealt in combat being incorrectly modified while applying defense modifiers. (combat.cpp)
15/12/2024 - Dragon Slayer
Added Resurrect Penalty Script (js/player/death/resurrectpenalty.js) that controls any type of penalty you want on the char after resurrecting via shrines
8/12/2024 - Dragon Slayer
Added Karma Locking LBR Feature, which can be enabled/disabled for individual characters via JS Character property .karmaLock, or globally via new UOX.INI setting:
KARMALOCKING=1/0 // If 1 the system is enabled will lock karma if player goes negative.
07/12/2024 - Dragon Slayer
Updated the packet 0xf1 to reflect the current CUO Web Ping while maintaining backward compatibility with older ping statuses. (0xf1_freeshardServerPoll.js) (Thanks Karasho and Xuri)
20/11/2024 - Dragon Slayer
Added SE NPCs AI to the following NPCs: Bake kitsune, kappa, raiju, yamandon, yomotsu_warrior.
Added new NPCs to dfndata/npc/agressiveanimals.dfn: bakekitsune_se (available for SE era only)
Added new NPCs to dfndata/npc/elementals.dfn: raiju_se (available for SE era only)
Added new NPCs to dfndata/npc/humanoids.dfn: yomotsu_warrior_se, yomotsu_elder_se, yomotsu_priest_se, kappa_se (available for SE era only)
Added new NPCs to dfndata/npc/reptiles.dfn: yamandon_se (available for SE era only)
31/10/2024 - Dragon Slayer
Fixed Z calculation in some scripts when targeting dynamic items. (Thanks Xuri)
27/10/2024 - Dragon Slayer
Corrected a misspelling of IsBoat in js/commands/targeting/magic.js
Added support for iterating through items in boats using FirstItem(), NextItem() and FinishedItems() methods
20/10/2024 - Dragon Slayer
Added new JS Character/Item Method that can apply a random color from a specific colorlist (Thanks, Xuri):
.SetRandomColor( "#" )
14/10/2024 - Dragon Slayer
Added new JS Function that checks if a character has engaged in combat within a given time span:
CheckTimeSinceLastCombat( mChar, timeInSeconds )
14/10/2024 - Dragon Slayer
Added new JS Function that checks if a specific location is within an instant logout zone (thanks, Xuri):
CheckInstaLog( x, y, worldnumber, instanceId )
12/10/2024 - Dragon Slayer
Added Mini-House Addons from AOS Expansion (dfndata/items/deeds/minihouseaddon_deeds.dfn
11/10/2024 - Dragon Slayer
Added ML House Addons (dfndata/items/deeds/houseaddon_deeds_ml.dfn)
10/09/2024 - Dragon Slayer
Added base functionality for Khaldun Puzzle Chests, which can be unlocked by solving a puzzle, with bonus hints for the solution given based on player's lockpicking skill
13/08/2024 - Dragon Slayer/Xuri
The onAttack/onDefense JS Events have been updated with three new parameters (hitStatus, hitLocation, damage) and will now also trigger when attacks miss.
12/08/2024 - Dragon Slayer
Fixed an issue where Imbuing and Mysticism skills were listed in wrong order in skills.dfn and enums.h
05/08/2024 - Dragon Slayer Update
Resolved an issue with cooking functionality.
Fixed a duplicated dictionary number.
Corrected the required items for crafting sweet dough and regular dough.
04/08/2024 - Dragon Slayer
Added Run a skillcheck for NPC to give them a chance to gain skill - if that option is enabled in ini (xuri)
16/07/2024 - Dragon Slayer
Added fallback in 'add menu for older clients that don't support buttontileart (Thanks Xuri)(gumps.cpp)
07/07/2024 - Dragon Slayer
Added requirement to drink potions where hand has to be free. This can be disabled within the potion.js file by switching the reqFreeHands to false. (js/item/potion.js)
04/07/2024 - Dragon Slayer
Fixed Cleaver ID missing in the jse_objectassociations.scp for carving corpses
18/06/2024 - Dragon Slayer
Added three new AOS Item Properties available as DFN tags:
HEALTHLEECH=# // It gives an attacker the ability to leech health from his opponent every time he successfully delivers a hit adds it to himself.
STAMINALEECH=# // It gives an attacker the ability to leech Stamina from his opponent every time he successfully delivers a hit adds it to himself.
MANALEECH=# // It gives an attacker the ability to leech Mana from his opponent every time he successfully delivers a hit adds it to himself.
These are also available as JS Engine object properties: .healthLeech, .staminaLeech and .manaLeech
Added js/combat/leechstats.js file that controls combat application of health/stamina/mana-leech properties
To add this script to a weapon, add this to its DFN entry: SCRIPT=7003, HEALTHLEECH=# or STAMINALEECH=# or MANALEECH=# it can also be all three on the weapon.
16/06/2024 - Dragon Slayer/Xuri
Added new AOS Property for Items and Chars, available as DFN tag:
SPEEDINCREASE=# // item and char property that increases base weapon swing speed by the specified percentage
This is also available as JS Engine object property: .speedIncrease
Added INI Setting:
SWINGSPEEDINCREASECAP=# // Max cap for for swing speed increase a char can have.
Combat code updated with era-specific weapon swing speed calculations for different eras (LBR or earlier/AoS/ML onwards).
Note that speeds are still defined with flat values in DFNs regardless of era, but for ML and beyond speed will be displayed as swing delay in seconds in item tooltip.
14/06/2024 - Dragon Slayer
Added two new AOS Item Properties available via these Item DFN tags:
HITCHANCE=# // Increases the player's chance to hit a target with wrestling, melee and ranged weapons.
DEFENSECHANCE=# // Increases the wearer's chance that his opponents' swings (or arrows/bolts) will miss.
These are also available as JS Engine object properties: .hitChance, .defenseChance
13/06/2024 - Dragon Slayer
Added three more AOS Item Properties available via these Item DFN tags:
HEALTHBONUS=#
MANABONUS=#
STAMINABONUS=#
Add these properties to any weapon/armor/jewlery to give the player more hp/mana/stam while equipped, based on number you add with it
These are also available as JS Engine object properties: .healthBonus, .staminaBonus, .manaBonus
06/06/2024 - Dragon Slayer
Fixed issue that prevented NPC shopkeepers from accepting BODs with core shard eras set to AoS or later
29/05/2024 - Dragon Slayer
House add-on deeds are now returned when an add-on is present in the house on demolish.
27/05/2024 - Dragon Slayer
Added Missing Wand IDs to combat weapon type in core and in js.
25/05/2024 - Dragon Slayer
Added special_moves.js There is 12 special aos moves you can find on uoguide.com.
Added js/combat/blockequip.js script that can block players from instantly reequipping weapons if Disarmed
Thanks to Xuri for making onUnequipAttempt JS Event work for chars and not just items.
Added onCombatHit JS Event that triggers for character with event attached when someone has taken damage.
13/05/2024 - Dragon Slayer
Added New Shield Type 107 so shield IDs no longer have to be in hard code for shields to work properly
11/05/2024 - Dragon Slayer/Xuri/Maarc
Added Support for new AOS property tag for items that adds durability bonus as percentage multiplier to item HP:
DURABILITYHPBONUS=# (DFN)
.durabilityhpbonus (JS)
11/05/2024 - Dragon Slayer
Updated 'get command (js/commands/targeting/get.js) to use correct object reference when getting resist values for items, and added support for getting resist values for chars
09/05/2024 - Dragon Slayer
Added ArtifactRarity AOS Property for items
ARTIFACTRARITY=# (DFN)
.artifactRarity (JS)
Artifact Rarity is an item property that is visible on some artifacts and meant to give players an idea of how rare the item is. Items with rarity 1 are supposed to be common while rarity 12 are extremely scarce.
05/05/2024 - Dragon Slayer
Added Spawner Gump script (js/server/misc/spawner_editor.js) and attached it to [base_spawner] item definition, just another option for making editing spawners without using commands.
Just double click any spawner created from the addmenu or added from spawners.dfn file, and gump will appear. If creating a spawner with commands the script needs to be attached to the spawner manually.
01/05/2024 - Dragon Slayer/Xuri
Fixed AutoUnequipAttempt function in clumsy.js, createfood.js level1target.js, will no longer fail on casting and return to hardcode.
Fixed createfood to check for reagents on cast.
Fixed many places missing proper null checks and refresh checks in magic js scripts.
30/04/2024 - Dragon Slayer/Xuri/Maarc
Added Support for new AOS property tag:
LOWERSTATREQ - Lowers the strength requirements to wear an object.
27/04/2024 - Dragon Slayer/Xuri
Fixed an issue where non-corpse containers - including treasure chests in dungeons - would decay and leave all their contents on the ground.
Converted LOOTDECAYSWITHCORPSE ini setting to two new settings, one for player corpses, one for NPC corpses:
LOOTDECAYSWITHPLAYERCORPSE=1/0 // If 1, items on Player corpses decay along with the corpse, if 0 they drop to the ground
LOOTDECAYSWITHNPCCORPSE=1/0 // If 1, items on NPC corpses decay along with the corpse, if 0 they drop to the ground
20/04/2024 - Dragon Slayer/Xuri
Fixed misspelling in shopkeepers AI (js/npc/ai/shopkeeper.js)
Added shopkeeper AI script to basevendor definition to support bonuses/penalties for guild members
Introduced a new INI setting, AutoUnequippedCasting, enhancing customization and control for users.
18/04/2024 - Dragon Slayer
Added AoS-specific Focus skill bonus to Stamina/Mana-regen code in uox3.cpp
15/04/2024 - Dragon Slayer
Fixed Dupe command message when targeting something other then a item or npc. (js/commands/targeting/dupe.js)
06/04/2024 - Dragon Slayer
Fixed Runebook Cooldown:
The Runebook now uses GetCurrentClock() instead of a timer, ensuring accurate checks for a 7-second delay using the system clock of the server. (js/item/runebook.js)
Teleport Helper Name Correction:
The incorrect name in jse_fileassociations.scp for the Teleport Helper has been fixed.
Updated Bola to use GetCurrentClock() instead of a timer for delay (js/item/bola.js)
Added checks for flying and grounded states related to the Bola (js/item/bola.js)
Introduced two new dictionary messages for flying and grounded states in all supported languages.
Added Bola missile weapon alias for in-game use with the command 'add item bola (dfndata/items/gear/weapons/missile_weapons.dfn)
Updated Ball of pet Summoning to use GetCurrentClock() instead of a timer for delay (js/item/ballofpetsummoning.js)
Fixed misspelled socket variable in onSpeechInput function in ball of pet summoning script (js/item/ballofpetsummoning.js)
Added Item refresh so stats update correctly on use (js/item/ballofpetsummoning.js)
Fixed incorrect object in parameter for .InRange() function in js/magic/helper/teleport_helper.js
30/03/2024 - Dragon Slayer/Xuri
Fixed a bug where crafted items were not selling properly. Now, players can successfully sell their crafted gear at vendors.
Added origin property for some LBR-era item definitions
Included the missing scriptID for glassblowing (js/jse_fileassociation.scp)
Fixed the Charges_Left_tooltip tag issue (js/server/misc/charges_left_tooltip.js)
Updated Animal Lore Skill (animallore.js)
Fixed skills display on gump when systems are enabled or disabled
Corrected names to be in camelCase
Ensured proper display of Foodlist on NPCs
Adjusted starting skill check to 1000 (from 1100)
22/03/2024 - Dragon Slayer/Xuri
Leading/trailing whitespace is now trimmed from account names during login.
21/03/2024 - Dragon Slayer/Xuri
Fixed an issue with onHunger and onThirst event crashing if the npc was not loaded yet.
18/02/2024 - Dragon Slayer/Xuri
Updated set and get commands (set.js, get.js) with additional ways to set/get resistance types on objects using the syntax 'set/set [type] #. Available resistance types:
resistarmor, resistlight, resistwater, resistcold, resistfire, resistenergy, resistpoison
20/12/2023 - Dragon Slayer
Added Elixiers of Ingot Conversions (js/item/elixirofingots.js)
19/12/2023 - Dragon Slayer
Added Powder of translocation (js/item/powderoftranslocation.js)
17/12/2023 - Dragon Slayer
Added new JS Events: onContextMenuRequest and onContextMenuSelect. (Thanks Xuri)
16/12/2023 - Dragon Slayer
Added Crystal ball that says random msgs (js/item/crystalball.js)
Added Crystal Ball of Pet Summoning (js/item/ballofpetsummoning.js)
10/12/2023 - Dragon Slayer
Implemented helper functions for magic in js/magic/helper/check_travel_restriction.js and check_regeants.js
Added new JS Function GetTownRegionFromXY() that returns region associated with location (Thanks Xuri).
Enhanced Runebook functionality with triggerevent for the new js files.
Updated Moongate.js to incorporate the new check teleport logic.
Optimized clumsy.js to utilize the new reagent checking helper function
3/12/2023 - Dragon Slayer
Fixed Magic Weapons setting damage correctly when they are generated (js/item/magic_items.js)
30/11/2023 - Dragon Slayer
Added support for new DFN tag in spawn regions that allows defining one or more exclusion areas per spawn region to prevent spawning of objects within said regions:
EXCLUDEAREA=x1,y1,x2,y2 // Area within defined boundary will be excluded as valid spawn area (Special, Thanks to Xuri)
Added new UOX.INI setting to control for which facets public moongate travel is available (defaults to Felucca, Trammel and Ilshenar):
MOONGATEFACETS=# // # is a bitmask that determines which facets to allow public moongate travel to. 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.
Added new Admin commands to enable/disable public moongate travel in specific facets:
'enablemoongates
'disablemoongates
28/11/2023 - Dragon Slayer
Adjusted the Default values for MaxClientBytesIn and MaxClientBytesOut by double.
26/11/2023 - Dragon Slayer
Added Glassblowing Crafting System (js/skill/craft/glassblowing.js)
Introducing a new crafting menu for glassblowing, allowing players to create unique glass items.
New crafting tools, including a glassblowing pipe and glass items.
26/11/2023 - Dragon Slayer
Fixed a potential server crash issue related to keeping track of which players have opened which containers (Xuri)
Resolved an issue with validation in treasuredigging.js, thanks to the efforts of (Xuri)
Welcomed the addition of treasuredirt.js, featuring the exhilarating killtreasureevent functionality.
Enhanced the precision of the treasure dig timer, bringing it more in line with the standards of Uo Live Servers.
21/11/2023 - Danny S.
Renamed bod_rewards.dfn to bod_rewards_blacksmith.dfn.
Added bod_rewards_tailor.dfn with the following items:
clothing_bless_deed
base_runic_sewing_kit
spined_runic_sewing_kit*
horned_runic_sewing_kit*
barbed_runic_sewing_kit*
*Currently function as normal sewing kits
Added GOOD DFN tag to item JS Objects. (UOXJSPropertyFuncs.cpp)
Added script for handling clothing bless deed usage. (js/item/clothing_bless_deed.js)
Enabled clothing bless deeds and runic sewing kits as tailoring BOD rewards (js/npc/vendor_bdo_dispenser.js)
19/11/2023 - Dragon Slayer
Fixed an issue where players qualifying for instant logout would not immediately vanish from view upon logout (Xuri)
18/11/2023 - Xuri
Enhance the calculation of the average 'z' for movement.
15/11/2023 - Dragon Slayer
Added Christmas Items from different years (dfndata/items/christmas.dfn)
Added Christmas Npcs from different years (dfndata/npc/christmascreatures.dfn)
Moved Halloween and christmas js files into a folder called holidays
Added Holiday Potted Plant Gump (js/item/holidays/holidaypottedplant.js)
Updated Candy js file with new msgs and toothachs (js/item/holidays/candy.js)
Added Addon Deed Gump js It will display a gump with the addon in it to place (js/item/holidays/addondeedgump.js)
Added ReDeed Addon Gump js for redeeding new addons VIA Gump (js/item/holidays/redeedaddon.js)
Added snowpile js Now you can smash your enemys face with snow (js/item/holidays/snowpile.js)
Updated axe.js with new redeed gump (js/item/axe.js)
Added Paralyzing Blow, Crushing Blow, and Concussion Blow (js/item/equip_effects/weapon_abilities.js)
14/11/2023 - Warden
Fixed crafting rank sytem modifiers.
Items crafted at Rank 1 will now have their stats multiplied by 60% of the DFN values for the following stats:
Damage (both Lo and Hi), Resist (Physical), HP (and MaxHP), Buy Value, Max Uses
For each rank above 1, the stat multiplier is increased by 5%, meaning a Rank 10 crafted item will have 105% DFN value for the above stats
13/11/2023 - Warden
Fixed an issue in which the timer callback for spinning wool, flax, and thread lost context, causing the spinning wheel to spin endlessly.
13/11/2023 - Dragon Slayer
Added treasure hunting system; NPCs can now drop level 1-5 treasure maps which players can decode and dig up for epic loot.
11/11/2023 - Danny S.
Implemented tailoring BODs.
Blacksmiths, armorers, weaponsmiths, and ironworkers have had their bodType custom tag value changed to 1. (malevendors.dfn, femalevendors.dfn)
Tailors are now associated to the vendor_bdo_dispenser.js script and have a bodType custom tag with a value of 2. (malevendors.dfn, femalevendors.dfn)
A new custom tag, bodSubtype, has been added with different values depending on the vendor DFN (malevendors.dfn, femalevendors.dfn):
Weaponsmith - 1
Armorer - 2
Blacksmith - 3
Ironworker - 3
Tailor - 1
The item DFN smallbod has been renamed to smallbod_blacksmith and it has a new bodType custom tag with a value of 1. (misc_deeds.dfn)
Added a new item DFN, smallbod_tailor, having a bodType custom tag with a value of 2. (misc_deeds.dfn)
The smallbod script has been updated to handle creation and initialization of either type of BOD. (smallbod.js)
The vendor BOD script has been updated to handle interactions for either type of BOD. (vendor_bdo_dispenser.js)
Fixed an issue making it impossible for BODs to require exceptional items. (vendor_bdo_dispenser.js)
Fixed an issue where the BOD reward dispensing cooldown timer was not actually being set. (vendor bdo_dispenser.js)
Fixed an issue where the vendor BOD script's onSpeech callback would trigger to completion for all BOD dispensing NPCs within the player's radius. (vendor_bdo_dispenser.js)
Removed AOS era BOD reward items, as the item DFNs do not yet exist. (vendor_bdo_dispenser.js)
Removed maximum reward penalty for small BODs, as large BODs do not yet exist. (vendor_bdo_dispenser.js)
10/11/2023 - Danny S.
Fixed an issue in the vendor BOD script that prevented vendors from accepting BODs. (vendor_bdo_dispenser.js)
Fixed an issue in the vendor BOD script that caused an error to be thrown when attempting to dispense a sturdy shovel reward. (vendor_bdo_dispenser.js)
Changed skill boosting equipment script to modify effective skills instead of base skills. (skill_boosting_equipment.js)
Fixed an issue in the BOD item GUMP that prevented adding multiple items in a row. (smallbod.js)
Changed the BOD item GUMP to no longer close in between clicking "Combine..." and targeting an item. (smallbod.js)
Changed the BOD item targeting cursor to automatically stop targeting after the BOD's item requirements are met. (smallbod.js)
Fixed an issue where an error would be thrown when clicking empty space with a BOD item targeting cursor. (smallbod.js)
10/11/2023 - Dragon Slayer
Added IDs for stocking items to cItem::GetPackType() in items.cpp, so they can be used as containers
09/11/2023 - Dragon Slayer, Xuri
Fixed Smelting items with 0 hp (js/skill/craft/blacksmithing.js)
Fixed Unraveling items with 0 hp (js/skill/craft/tailoring.js)
Added Tongs, Scissors, Tinkering Tools to material types (js/server/data/material_types.js)
Updated ApplyRank to set hp,maxhp and maxuses to 1. (cpp skills)
29/10/2023 - Dragon Slayer, Xuri
Added DFN entry for first aid belt. (dfndata/item/gear/tol_clothing.dfn)
Added First Aid Belt ID to backpack type. (items.cpp)
Added bandage healing bonus to healing skill. (js/skill/healing.js)
Added tooltip JS script to show bandage healing bonus (js/item/equip_effects/bandagehealingbonus.js)
28/10/2023 - Dragon Slayer (0.99.6a)
Added DFN entries for hallow pumpkins, jack o lanterns and halloween decorations. (dfn item/misc/halloween)
Added DFN entrie for killerpumpkin in daemons.dfn. (dfn daemons)
Added JS script for pumpkins: js/item/holidays/pumpkins.js
Added JS script for candy: js/item/holidays/candy.js
Added JS script for jack o lanterns: js/item/holidays/jackolanterns.js
Added JS script for head on spike: js/item/holidays/headonspike.js
Added JS script for pumpkin carving kit: js/item/holidays/pumpkincarvingkit.js
Updated js/item/lights.js with halloween pumpkins
Updated jse_objectassociations.scp with pumpkin ids
Fixed an issue in js/item/runebook.js missing function _restorecontext_ {}.
Fixed an issue in js/item/potion.js misspelled server setting YoungPlayerStatus to YoungPlayerSystem.
Updated Warning log for movement.cpp to include World Number and also changed it to read out like this NPC/Player
Move SetRandomName from Char to Base. (strattond/Maarc)
Add NAMELIST tag support for items. (strattond/Maarc)
Update JS function to allow SetRandomName for an item. (strattond/Maarc)
Updated DFN Addmenus with new Halloween items Under Misc/Holidays. (dfndata/items/itemMenu.dfn and itemMenu.bulk.dfn)
Added Halloween Event Decoration file (js/jsdata/worldtemplates/event_halloween.jsdata)
14/10/2023 - Xuri (0.99.6)
Updated version number :)
Fixed an issue where the "female" flag was not set correctly in CPExtMove() and CPDrawGamePlayer() packets for characters with female Gargoyle (or Savage) body IDs
14/10/2023 - Xuri (0.99.6-RC6x)
Added dummy context restore function to additional scripts
Updated 'go command to support specifying location to teleport to by name, mapped to locations from locations.dfn (Thanks Dragon Slayer!)
Updated Smart Turn script for furniture (js/server/misc/furniture_smartturn.js) with more optimized code (Humility)
Fixed latitude/longitude output of GetMapCoordinates helper function (js/server/data/map_coordinates.js), and updated scripts that relied on it
Fixed an issue where trying to craft fletching tools would produce hatchets instead (js/skill/craft/fletching.js)
Updated js/item/bankcheck.js to display value of checks using onTooltip JS Event, or onNameRequest JS Event if tooltips are disabled
Fixed a couple of DFN formatting issues (thanks, punt)
Fixed an issue where blank deeds (and bank checks) would be pileable if dropped on the same container (dfndata/items/tools/inscription.dfn)
Added dedicated [bankcheck] DFN item (dfndata/items/misc/money.dfn)
Updated Banker AI script (js/npc/ai/banker.js) to use dedicated [bankcheck] item instead of blank deeds as base for bank checks, and to have banker NPCs pause and turn towards player when talked to
Fixed an issue with script for Healing/Veterinary (js/skill/healing.js) which incorrectly used Anatomy as supplementary skill for Veterinary instead of Animal Lore, and which checked dex of wrong character when calculating healing slips
Added two missing tile flags to tileflag enum that threw order of such flags added with HS expansion out of order (thanks, punt)
Fixed an issue with travel-commands in GM menu which handled travelling between facets incorrectly
Added region spawners for dungeons, towns and overworld in Ilshenar facet
Enabled Trammel and Ilshenar facet decorations/spawns by default in admin welcome script (js/server/misc/admin_welcome.js)
Reworked portions of admin welcome gump to display optional "addon" decorations per facet, which might be client/era-specific (js/server/misc/admin_welcome.js)
Added new NPCs to dfndata/npc/femalehuman.dfn: f_executioner, f_chaosdragoon, f_chaosdragoonelite, f_gypsybanker
Added new NPCs to dfndata/npc/femalevendors.dfn: f_gypsymaiden, f_gypsyanimaltrainer, f_gypsyfortuneteller, f_vagabond, f_ironworker
Added new NPCs to dfndata/npc/malehuman.dfn: m_executioner, m_chaosdragoon, m_chaosdragoonelite, m_gypsybanker
Added new NPCs to dfndata/npc/malevendors.dfn: m_gypsyanimaltrainer, m_vagabond, m_ironworker
Added new NPC to dfndata/npc/miscmonsters.dfn: darkwisp
Added new NPC to dfndata/npc/undead.dfn: ancientlich
Added new Item DFNs for "camps" that when spawned will create a camp with specific decorations ([ilsh_orc_camp], [ilsh_healer_camp], [ilsh_mage_camp], [ilsh_banker_camp])
Added scripts for camps (js/item/camps/ilsh_banker_camp.js, js/item/camps/ilsh_healer_camp.js, js/item/camps/ilsh_mage_camp.js, js/item/camps/ilsh_orc_camp.js)
Added new colorlist to dfndata/colors/colors.dfn: [RANDOMCOLOR 33] (Bright Primary Colors)
Fixed an issue with gargish cloth chest DFN which prevented LBR version from working properly (dfndata/items/gear/armor/gargish_armor/gargish_cloth.dfn)
Added a bunch of new NPCLISTS in various npclist DFN files to support regional spawns in Ilshenar
Added missing BACKPACK tag to [golem] NPC DFN (dfndata/npc/clockwork.dfn)
Fixed misspelled section header for Fire Elemental NPC - from firele to fireele (dfndata/npc/elementals.dfn)
Murderous brigand NPCs are no longer willing to teach players skills (dfndata/npc/femalehuman.dfn, dfndata/npc/malehuman.dfn)
Corrected coordinates of Rock Dungeon region (dfndata/regions/regions.dfn)
Added regions for Sea Market (Felucca/Trammel), Blackthorn Dungeon (Felucca/Trammel) and Lakeshire (Ilshenar) (dfndata/regions/regions.dfn)
Fixed an issue with 'radditem and 'raddspawner GM commands which would not correctly set the Z of the added item/spawner to match target location (js/commands/custom/repeatingcmds.js)
Added two new repeating commands (js/commands/custom/repeatingcmds.js):
'rmovable # // Repeats bringing up targeting cursor to set movable property on multiple objects
'rnodecay // Repeats bringing up targeting cursor to set decayable property to false on multiple objects
Added new areacommand (js/commands/targeting/areacommand.js):
'areacommand name [string] // Sets name of all objects within targeted area to [string]
Updated 'decorate command script to better handle flags passed in via admin welcome script for things like facet addons (js/commands/decorate.js)
Updated fire breath script (js/npc/special/fire_breath.js) to get fire breath info per NPC based on their sectionID rather than their base body ID
Updated facet ruleset script (js/server/misc/facetRuleset.js) with an override for GMs trying to snoop players even in places where snooping is disallowed
Updated facet ruleset script (js/server/misc/facetRuleset.js) to allow damage that's not coming from a player/NPC source even in Trammel/Ilshenar
Added teleport locations for entering/leaving Blackthorn Dungeon in Felucca/Trammel (js/teleport.scp)
Updated 'remove and 'rremove commands to release any targeted objects from potential multis they are locked in to properly update lockdown count (js/commands/targeting/remove.js, js/commands/custom/repeatingcmds.js)
Updated felucca/ilshenar world templates with decorations (js/jsdata/worldtemplates/felucca_*/ilshenar_*)
Added world templates with decorations for Trammel (js/jsdata/worldtemplates/trammel_*)
Added DFN entry for Power Generators, and spawn entries for these in Ilshenar (dfndata/item/puzzles/puzzles.dfn, dfndata/spawn/ilshenar/spawn_ilshenar_world_general.dfn)
Added script for Power Generators, which initializes random puzzles on creation and rewards player with diamonds/arcane gems/shadow iron ore when solved, or lightning when failing to solve (js/item/power_generator.js)
Added support for overriding newbie-state of items added to players via dfndata/newbie/newbie.dfn. Supported syntax:
PACKITEM=sectionID[, amount[, newbieFlag]] // To use newbieFlag with PACKITEM, amount must also be specified. Flag can be 0/1
EQUIPITEM=sectionID[, itemHue[, newbieFlag] // To use newbieFlag with EQUIPITEM, itemHue must also be specified. Flag can be 0/1
Casting the Earthquake spell will no longer affect the caster, or cause them to become criminal when cast out of town with no impacted targets
Fixed a bug where caster would remain frozen after finishing casting targetless spells like Earthquake
Fixed a bug where caster would remain frozen if spellcast was cancelled half-ways through by picking up or equipping an item
Fixed a bug where caster would remain frozen if spellcast was interrupted by losing concentration from taking melee damage in combat
Fixed a bug where a paralyzed player would remain frozen even if taking magic or poison damage, which releases them from paralyzis
Fixed a bug where target of Paralyze spell would not visually be shown as frozen in target's client
Fixed a bug where a caster frozen while casting a spell could become unfrozen mid-cast because of incoming magic damage
Address overflow issue in MultiMul.cpp (punt)
Address various cast issues (punt)
Corrected jscript project, to not include two files that where for stand alone programs (and resulted in main being added twice in the library (and once was incorrect all ready). (punt)
Replaced RoundNumber with std::round (punt)
The original physical appearance of characters targeted by 'make admin/gm/cns is now kept track of, and restored upon being targeted by 'make player
Fixed an issue where the .HasSpell JS Method was off by 1 when looking for specific spells in player's spellbook, due to 0-based array indexing in code vs 1-based indexing for Spells in DFNs
28/08/2023 - punt
Replaced all routine calls with a specific type of stream ifstream/ofstream to the generic istream/ostream for flexibility
Modernized region resource loading/saving code
24/08/2023 - punt
Fixed a memory leak with regions.cpp, related to worldsaves
14/08/2023 - Maarc/ldilley
Upgraded from SpiderMonkey 1.7 to 1.8.0-RC1, which adds support for Array.reduce() and reduceRight(), expression closures, and generator expressions
07/07/2023 - Xuri
Fixed an issue which could cause lamp posts to turn into tall candelabras when light levels change
05/07/2023 - Xuri
Fixed an issue with script context restoration while getting Char JS Properties that would also modify the return value for that property
04/07/2023 - Xuri
Applied fix to keep script context intact when getting certain Char JS Properties (like name); as before, requires dummy function to be present in script
Fixed an issue with 'tweak command not working properly alongside presence of onNameRequest JS events in other scripts on character (js/commands/targeting/tweak.js)
Fixed issue where character's stats (str, dex, int) could return value lower than 1 due to temporary debuffs, causing issues in status gump
02/07/2023 - Xuri
Cleaned up a couple of warnings highlighted by static code analysis
Fixed an issue with NPC evasion pathfinding where the direction wasn't always set correctly
Fixed an issue with onNameRequest JS Event where the size of param jsval (2) didn't match actual number of parameters provided (3)
Removed setting uoxTimeout.tv_usec to 1 in CNetworkStuff::CheckLoginMessage() to address slower core loop iterations on Windows, due to differences in timer resolutions supported by WinSock2 function select() on different platforms - tv_usec 1 is treated as 1 microsecond on Linux/macOS, but as 1 millisecond on Windows
01/07/2023 - Xuri (0.99.6-RC6)
Removed arbitrary and hidden restrictions on refreshing list of online players shown with 'wholist command
Fixed an issue where player ghosts that get teleported would not see themselves get updated to new location
Fixed a server crash from clients disconnecting while running server in debug mode
Improved how container updates are sent to players; now only sends to clients that have actually opened the container, and who are still within range
Added more information about UO data files being loaded during server startup
Enhanced the GM 'add menu to allow clicking directly on images of items/npcs to add them, and adjusted size of menus to accommodate this
Fixed an issue with fleeing NPCs that could cause them to attempt to flee across time and space, regardless of distance to target/attacker in combat
Added NPC AI that runs away from players if they get too close (even outside combat). Applied to hind, rabbits, squirrels, ferrets and various birds by default:
AI_ANIMAL_SCARED (aitype 12)
Fixed issues with NPCs fleeing forever, or getting stuck in flee/don't flee loop, by introducing max fleeing distance (50 tiles) and cooldown (30 sec) on fleeing
Updated onNameRequest JS Event to include third parameter with origin of name request, so script responses can be tailored appropriately:
onNameRequest( myObj, requestedBy, requestSource )
Potential values for requestSource:
0 - Speech/System Messages
1 - Guild Menus
2 - Stat Window (self)
3 - Stat Window (other)
4 - Tooltip
5 - Paperdoll Journal
6 - Paperdoll
7 - Single Click / All-Names
8 - System
9 - Secure Trade Window
Added Adaptive Performance System (APS) that dynamically adjust how often NPC AI/movement is checked based on overall shard performance. If performance drops below defined threshold, UOX3 gradually slows down checks for NPC AI/movement to prioritize player movement/speech/command responsiveness. If performance climbs back up above threshold, slowdowns are gradually removed. The following UOX.INI options have been added under [system] category to support this system:
APSPERFTHRESHOLD=50 // Performance threshold (measured in simulation cycles/sec) below which the APS kicks in
APSINTERVAL=100 // How often (in milliseconds) the APS checks performance and makes adjustments (if needed) to balance out shard performance
APSDELAYSTEP=50 // How much the delay timer is modified by (in milliseconds) each time APS makes adjustments
APSDELAYMAXCAP=2000 // Max amount of of delay APS can introduce for NPC AI/movement handling when attempting to restore shard performance
Added new JS script with packet hook for packet 0xA4 as sent by CUOWeb client, which includes information about CUOWeb user and potentially secret key required for connecting to shard
Added new UOX.INI setting where a secret shard key can be defined, which can be used as a way to restrict which clients can connect to the shard:
SECRETSHARDKEY=None // None by default
Added new JS Methods for Region objects:
.GetOrePref( oreType ) // Get ore preference data for ore type found in town region. Returned as an array containing the following data:
orePrefData -> [
oreName, // name of ore
color, // color of ore
minskill, // min skill to mine ore
ingotName, // name of ingot created from ore
makemenu, // makemenu entry for crafting something from ingot
oreChance, // default global chance of finding this ore type
scriptID // script attached to mined ore
],
orePrefChance // Chance of finding this ore type in given town region
.GetOreChance() // Get base chance of finding any ore in town region
Moved Mining skill plus gravedigging feature from hard code to scripts (js/skill/mining.js) to make it easier to maintain and/or customize, and removed hard coded variants
Gravedigging now relies on the ore resource system behind the scenes to restrict how often graves in a given area can be dug up
Fixed some incorrect references to .worldNumber Character property in misc scripts (should be .worldnumber)
Made some "hard-scripted" system messages in misc scripts use dictionary system instead
Added spawn region for banker NPCs in Serpent's Hold (dfndata/spawn/felucca/spawn_town_serpents_hold.dfn, dfndata/spawn/trammel/spawn_town_serpents_hold.dfn)
Fixed region definition of Ocllo to actually cover the entire town (dfndata/regions/regions.dfn)
Added numerous additional locations accessible with 'goplace # command, for key locations in Ilshenar, Malas, Tokuno Islands and Ter Mur (dfndata/location/location.dfn)
Revised travel-menu portion of GM menu (shortcut: 'travel) to include more travel options based on new locations (dfndata/items/travelmenu.dfn and travelmenu.bulk.dfn)
Fixed an issue where NPCs could attempt to attack targets in other worlds/instances
Added new JS Event that triggers for characters who are about to deal damage in combat. Complimentary to onDamage, which triggers for chars receiving damage:
onDamageDeal( dmgDealer, dmgReceiver, damageValue, damageType )
Added new JS Event that can trigger in global script upon creation of new player chars. Note that this will trigger in place of onCreateDFN event for player characters:
onCreatePlayer( pChar )
Added new JS Event that triggers for characters selecting a target with a spell. Complimentary to onSpellTarget, which triggers for targets selected with a spell:
onSpellTargetSelect( caster, target, spellNum )
Updated onCombatStart and onCombatEnd JS Events to also trigger for the other party in combat
Updated onPickup JS Event to include a third parameter - the potential container item was picked up from. Event now also triggers event in scripts attached to said containers:
onPickup( iPickedUp, pChar, iCont )
Added tracking of total playtime per individual character, and per account across all characters, and exposed these properties to JS engine:
.totalPlayTime // Account property, total playtime across all chars
.playTime // Character property, total playtime on given character only
Added new player-accessible command ('playtime) to spit out the playtime of current character/account as a whole (js/commands/playtime.js)
Implemented first version of Young Player System:
Replaced the UNUSED9 account flag with YOUNG, to be used by Young/New Player System
Added new JS Account property that gets/sets whether player account is considered Young:
.isYoung
Added new Char timers:
TIMER_YOUNGHEAL // Restricts how often Young players are healed by NPC healers
TIMER_YOUNGMESSAGE // Restricts how often Young players are warned about dangerous looking monsters in overworld
Updated GM commands 'get and 'set to get/set .isYoung property of player's account (js/commands/targeting/get.js and set.js)
Added new UOX.INI setting to enable/disable Young Player System (enabled by default):
YOUNGPLAYERSYSTEM=1
If Young Player System is enabled, all newly created player accounts are automatically marked with Young flag
Added new script to handle various restrictions and functions related to Young characters (js/player/young_player.js):
Young characters will have [Young] displayed over their head
Young characters will have their Young status checked and verified on every login + every stat/skill gain, to revoke the Young status if any of the following is true:
Account has a total playtime of more than 40 hours
Any character has more than 350 total (base) skill points
Any character has more than 70 skill points in a single skill
Any character has more than 150 total stat points
Any character has more than 80 stat points in a single stat
Young characters can renounce their Young status manually by saying the words "I renounce my young player status"
Young characters get an additional item upon creation:
a new player ticket, which can be combined with any other players new player ticket for both players to get a reward:
a sextant (shows Young players directions to nearest moongate/bank regardless of where they are, as long as outdoors)
a hair restyling deed
a ranger armor set (if coreShardEra is T2A or lower)
a spellbook with 1st to 4th circle spells (if CoreShardEra is UOR or higher)
a fireworks wand
a spyglass
a dye tub and dyes
Young characters cannot target other player characters with hostile spells or skills
Young characters cannot be the target of other player characters' hostile spells or skills
Young characters can only cast beneficial spells upon themselves or other Young characters
Young characters can only be the target of beneficial spells from other Young players
Young players (and their pets/followers) cannot attack or harm any other players (or their pets/followers), nor themselves be attacked or harmed by any other players (or their pets/followers), whether from combat, spells, skills or items
Young players don't lose any of their items on death, and are teleported to the nearest healer upon death with all their items intact
Young players receive a warning upon entering dungeons that monsters there will be hostile
Updated global script (js/server/global.js) to:
Check/Verify Young status of players upon login
Attach young player script on login/creation for players on Young accounts
Give specific items to Young players upon creation
Added new script (js/item/corpse.js) that is assigned to all freshly created corpses. This script handles restrictions related to Young players interactions with corpses, and the interactions of other players with corpses of Young players
Updated JS Method .Carve() to return true/false depending on whether carving a corpse was successful
Updated Healer AI in code to heal nearby injured Young players
Updated Evil AI and Evil Caster AI in code to avoid selecting Young players as targets in combat outside of dungeons
Added a new section to UOX.INI - [young start locations] - that can be used to define starting locations for Young players. If only one such location is provided, all players start there. Otherwise, it matches the same starting location setup as the regular one - with one entry per town in Britannia.
Restricted transferring and/or friending of pets (code) and hirelings (hirelings.js) between Young and non-Young players
Restricted Young players from recalling or gating to Felucca facet
Young players can instantly logout from anywhere, at any time
Added new Item DFN tag - SPELLS - which specifies which spells a spellbook starts with, using the following syntax: SPELLS=0x00000000,0x00000000,0x00000000
The existence of a spell from within each circle have specific values (0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80), and a combined value of 0xff if all spells in said circle are present.
The first comma-separated value in the SPELLS tag represents spell values for circles 1 to 4, while the second comma-separated value represents the spell values for circles 5 to 8. The third comma-separated value is currently unused.
The last two digits (0x000000##) of the first value in the SPELLS tag represent the combined value of spells from the first circle, the 5th and 6th digits (0x0000##00) spells from second circle, the 3rd and 4th from third circle (0x00##0000), and the 1st and 2nd from fourth circle (0x##000000). Repeat for the second value in the tag, with fifth (last two digits) to eight (first two digits) circle spells.
Examples:
spellbook with only 1st circle spells: SPELLS=0x000000ff,0x0,0x0
spellbook with only 2nd circle spells: SPELLS=0x0000ff00,0x0,0x0
spellbook with 1st - 2nd circle spells: SPELLS=0x0000ffff,0x0,0x0
spellbook with only 2nd and 5th circle spells: SPELLS=0x0000ff00,0x000000ff,0x0
spellbook with only 4th and 8th circle spells: SPELLS=0xff000000,0xff000000,0x0
spellbook with all spells, from all eight circles: SPELLS=0xffffffff,0xffffffff,0x0
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)
Fixed an incorrect character reference in Spyglass script (js/item/spyglass.js)
Added Item DFN entry for a fireworks wand with 50 charges (dfndata/items/gear/magic_items.dfn)
Added script for new player ticket (js/item/consumables/new_player_ticket.js)
27/06/2023 - Xuri
Updated guildmaster script to properly check and set timestamp for when a player joins an NPC guild (js/npc/ai/guildmaster.js)
Updated GM command 'get to show values of .npcGuildJoined player property
Updated GM command 'set to also accept true/false to set boolean flags, not just 1/0 (js/commands/targeting/set.js)
20/06/2023 - Xuri (0.99.6-RC5)
Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits
Added two new UOX.INI settings for NPC Guilds, which will give players discounts when buying or premium prices when selling items from/to NPCs that are members of the same NPC guilds as the player:
ENABLENPCGUILDDISCOUNTS=1
ENABLENPCGUILDPREMIUMS=1
Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet):
m_thief_guildmaster (dfndata/npc/male_human.dfn)
f_thief_guildmaster (dfndata/npc/female_Human.dfn)
Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties:
.npcGuild // ID of NPC guild, as defined in script
.npcGuildJoined // Timestamp for when player joined NPC guild
Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players.
Added two new character properties:
.isDisguised // true/false flag for character being disguised
.origName // used to store character's original name before disguise went into effect
Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include:
New features:
Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container
When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles
Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing
Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed
Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed
Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above)
Optional AoS feature to steal special consumable items from monsters
Updated default stealing rules:
Updated calculations to determine chance of success when stealing
Players cannot steal while engaged in combat
Players are revealed if hidden as soon as they use the stealing skill
Players can no longer steal items in the secure trade window
Players can no longer steal items from NPC shopkeepers
Both hands must be free to steal
Stealing now checks line of sight to target player/object
Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies
Players can no longer steal from NPC guards by default
Players can no longer steal from the same NPC monster more than once
Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher
Players can no longer steal items held on cursor by other players
Orcish masks now eplode if player steals from orcs while wearing it
If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player
Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged
Stealing script options:
Allow stealing entire containers (off by default pre-AoS)
Return stolen items on thief death (off by default)
Temporarily make stolen items immovable in thief's backpack (on by default post-AoS)
Temporarily protect traded items (on by default)
Let dexterity affect chance for successful theft (off by default)
Let light level affect chance for successful theft (off by default)
Allow stealing from NPC Guards (off by default)
Allow stealing special loot from monsters (on by default post-ml)
Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes:
Players cannot snoop pack animals from inside a house, if the animal is outside
The deeper inside main backpack a container sits, the harder it becomes to snoop inside it
Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time.
Players have a chance to stay hidden while snooping, based on their Hiding skill
Karma is now lowered by snooping regardless of success or failure
Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes
Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies.
Player combat targets and war mode are now cleared on logout
Added new Character JS Methods:
.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
Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat
Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button
Fixed an issue that could cause swimming NPCs to swim on land
NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone.
SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer:
[NPCLIST example]
{
75|NPCLIST=allorc
25|ratman
}
Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez
Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property.
Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up
Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped
Added new JS Function to check if any characters at specified location potentially block movement:
DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
11/06/2023 - Xuri
Fixed an issue with the Clumsy spell script (js/magic/clumsy.js) where an attempt could be made to send a system message to the non-existent sockets of NPCs casting the spell
Fixed an issue where [golem] NPCs were trying to GET crafted_golem instead of craftedgolem (dfndata/npc/clockwork.dfn)
Fixed an issue where [golem] and [craftedgolem] NPCs were setup to use colossal blow special ability, but ability script didn't allow for it (js/ai/special/colossal_blow.js)
Removed some debug messages from gate opener script (js/item/gate_opener.js)
Added some comments to musiclists in regions.dfn, and added a few missing music entries to a few regions (dfndata/regions/regions.dfn)
Added function _restorecontext_() {} to another bunch of scripts:
js/npc/ai/monster/ethereal_warrior.js
js/commands/zerokills.js
js/commands/killall.js
js/commands/fixcont.js
js/commands/delid.js
js/commands/cleanup.js
js/commands/areacommand.js
js/item/guildstone.js
js/item/gate_opener.js
js/item/bedroll.js
js/item/potion.js
js/item/kindling.js
js/item/doors.js
js/item/dungeons/switch_puzzle_covetous.js
js/skill/peacemaking.js
js/skill/detecthidden.js
js/skill/craft/cooking.js
js/skill/craft/blacksmithing.js
js/skill/cooking/wheat.js
js/skill/cooking/flourmill.js
js/npc/ai/pack_ai.js
js/npc/ai/monster/savage_shaman.js
js/npc/ai/monster/orc_chopper.js
js/npc/ai/monster/orc_brute.js
js/npc/ai/exodus_clockwork.js
js/npc/special/life_drain_aura.js
js/npc/special/dull_copper_elemental.js
js/npc/special/damage_aura.js
js/npc/speech/speech_monster.js
js/server/misc/dungeon_trap.js
js/server/house/playerVendorDeed.js
js/server/house/houseCommands.js
09/06/2023 - Xuri
Fixed client freeze after login for sub-7.x clients, caused by sending an unsupported animation packet; FORCENEWANIMATIONPACKET will now not be enabled if support for client versions below 7.x is enabled
Added function _restorecontext_() {} to a couple more scripts:
js/commands/targeting/set.js
js/commands/decorate.js
js/commands/go.js
Fixed an issue with 'xgo command that would prevent it from working properly (js/commands/targeting/x.js)
Fixed an issue with teleport function in help gump which prevented pets from teleporting with player (js/server/misc/helpgump.js)
Fixed an issue with players in some cases getting toggled out of combat mode visually on other clients even though they were still in combat mode (when target dies, resurrection of ghost in combat mode, etc)
Players no longer see a message above their character's head about their own character attacking other characters
05/06/2023 - Xuri
Fixed an issue with patrolling-portion of hireling script - was incorrectly using Z coordinate as a parameter of WalkTo - should be maxSteps (js/npc/ai/hireling.js)
Added error checking to .WalkTo() and .RunTo() JS Methods that cancels pathfinding attempt if maxSteps provided is zero
Swapped around order of arguments in ScriptError() function in cScript.cpp, so the const char used by va_start() is now the last named argument (thanks ldilley!)
Fixed a socket error with 'move command alias in js/commands/targeting/tele.js (thanks Dragon Slayer!)
Fixed a server crash caused by an attempt to fetch the serial of a nullptr!
02/06/2023 - Xuri
Added new protected property for CChar class to track a player's currently controlled pets/followers/summons, and renamed the on tracking all pets owned:
GenericList activeFollowers
GenericList petsControlled -> petsOwned
Added new JS Character Methods to view/manipulate follower list:
GetFollowerList()
AddFollower( npcObject )
RemoveFollower( npcObject )
Added new JS Character Property to fetch current count of followers character has:
.followerCount
Added new GM commands for spitting out information on all pets/followers a player has, in the following format: Name: %s | ID: %i | Serial: %i | x: %i | y: %i | z: %i | world: %i | instanceID: %i
'listpets
'listfollowers
Replaced most instances of GetPetList in code and scripts with GetFollowerList, as that's what we actually care about for the most part
Updated code and relevant scripts to make use of AddFollower and RemoveFollower functions where appropriate
Modified code for restoring pet loyalty upon feeding pet; by default it now restores 10/100 loyalty per time pet is fed, while if CoreShardEra setting in UOX.INI is set to AoS expansion or higher, loyalty is instantly restored to max when pet is fed (regardless of amount)
Updated AreaCharacterFunction and AreaItemFunction JS Functions to still work if third parameter (socket) is provided as null
Modified code and relevant scripts that teleport pets/followers along with player to only do so for pets/followers using the "follow" wandermode with player as follow target
Updated some instances of code and script that checked for both controlSlot AND maxFollowers requirements - now only checks maxFollowers if controlSlots is set to 0 in ini
Added function _restorecontext_() {} to a couple more scripts:
js/commands/targeting/tele.js
Updated error message shown when attempts are made to add deleted objects to refreshQueue, to include name, ID and serial of the object in question
30/05/2023 - Xuri (0.99.6-RC4)
Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers
Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js)
Fixed an issue where UOX3 would fail to load pre-HS multi.mul files
Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn)
Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js)
When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride
Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong
Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function
MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile
MAXRANGE item property can now be used to define max combat range for melee weapons
Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors
Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn)
Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js)
Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead
Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer)
Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8
Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9
Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory
Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses
Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer)
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_() {}
Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer)
Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object:
.GetTagMap() // Gets list of persistent custom tags associated with object
.GetTempTagMap() // Gets list of temporary custom tags associated with object
Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js)
Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js)
Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js)
Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js)
Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js)
Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js)
Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js)
Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js)
Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly
Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn
Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax:
.SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE
Added new Character JS Methods:
.SetRandomName( nameListID ) // apply a random name from specified namelist to character
.FindItemSection( sectionID ) // find item in player's backpack with specified sectionID
Added new Socket JS Method:
.OpenContainer() // Opens specified container for socket
Fixed status window sex flag not being correctly sent for player characters of a Gargoyle nature (Dragon Slayer)
Fixed some issues with static pet scripts (js/npc/pets/*) that would allow players to exceed max number of followers and/or controlslots when buying animals from animal trainer
Updated OnBuyFromVendor, onBoughtFromVendor, onSellToVendor and onSoldToVendor JS Events to include a fourth parameter - iAmount - the number of items bought/sold
Fixed some issues with stabling and claiming pets from animal trainer NPCs (js/npc/ai/stablemaster.js)
Fixed an issue with 'remove and 'rremove commands where they would not reduce petCount/controlSlotsUsed for owners of characters removed (js/commands/targeting/remove.js and js/commands/custom/repeatingcmds.js)
21/05/2023 - Dragon Slayer, Xuri
Added initial pass for supporting Trammel PvP ruleset, which can be applied to and/or customized per facet and optionally overridden per region via js/server/misc/facetRulset.js (Dragon Slayer)
Misc script cleanup and extension of pvp ruleset script to include target handling for Blade Spirits/Energy Vortex, as well as the Provoke barding skill (Xuri)
Added custom AI scripts for summoned Blade Spirits (js/npc/ai/summon/blade_spirit.js) and Energy Vortexes (js/npc/ai/summon/energy_vortex.js) with updated target selection rules (based on target stats) and checks for active pvp ruleset (Xuri)
Added JS Function to check for existence of a JS event in another file (Xuri):
DoesEventExist( scriptID, eventToCheck )
Updated scripted magic spells to check for facet ruleset before allowing casting hostile and/or beneficial spells on other players (Xuri)
Added new JS Method for Guilds to check if they are "at peace", i.e. NOT at war with any other guilds (Xuri):
.IsAtPeace() // Returns true if guild is at peace, and not at war with any other guilds
Added support for triggering onPickup JS event for Characters, and not just items (Xuri)
17/03/2023 - Dragon Slayer, Xuri
Created framework, gumps, initial system for Bulk Order Deeds (Dragon Slayer)
Expanded BOD system to include gold, fame and special item rewards (Xuri)
Added optional support for triggering BOD offers from shopkeepers via context menus (Xuri)
Added new UOX.INI section with settings for Bulk Order System: (Xuri)
OFFERBODSFROMITEMSALES=1 // If enabled, shopkeepers might offer BODs when players sell items to them
OFFERBODSFROMCONTEXTMENU=0 // If enabled, shopkeepers might offer BODs via context menu option
BODSFROMCRAFTEDITEMSONLY=0 // If enabled, only selling of crafted items will trigger BOD offers
BODGOLDREWARDMULTIPLIER=1 // Reward multiplier for Gold given for completing a BODs - defaults to 1.0
BODFAMEREWARDMULTIPLIER=1 // Reward multiplier for Fame given for completing a BOD - defaults to 1.0
Updated smithing-related create DFNs (dfndata/create/*) with proper names for entries (Xuri)
Added special BOD item rewards: (Xuri)
Sturdy Pickaxe - More uses than normal pickaxes
Sturdy Shovel - More uses than normal shovels
Mining Gloves +1/+3/+5 - Boosts mining skill when equipped
Runic Hammers - Adds bonuses to crafted weapons and armors, applied after crafting the items (js/skill/craft/crafting_complete.js)
Colored Anvils - No unique property other than color, but can be added to houses as decoration/functional anvils
Ancient Smithy Hammers +10/+15/+30/+60 - Boosts blacksmithy skill when equipped
(Not fully implemented, AoS feature) Gargoyle's Pickaxe
(Not fully implemented, AoS feature) Prospector's Tool
(Not fully implemented, AoS feature) Powder of Temperament
(Not fully implemented, AoS feature) Blacksmith Power Scrolls +5/+10/+15/+20
Updated onMakeItem() JS event to always include the create entry ID as a parameter, even when crafting an item failed (Xuri)
17/03/2023 - Xuri
Fixed an issue where casting Wall of Stone inside a multi would lead to the wall of stone never expiring, because it was not correctly marked as a field spell
Reduced combat message spam; attacking messages now only appear when attacking targets who are not already fighting the attacker
Added a new character state - "passive combat mode" - primarily used by players when they tab out of combat. Tabbing out of combat will prevent the character from retaliating in combat if they're already fighting someone
Fixed several issues with dropping items through floors, tables and generally not being placed correctly when dropped inside multis
Hard-defined the Z-level at which some jewellers in Britain spawn to deny them rooftop access (spawn_felucca_town_britain.dfn and spawn_trammel_town_britain.dfn)
Added system messages informing shard staff with elevated command privileges why they are getting 100% skill check success, and no spellcast delay
10/03/2023 - Xuri
Fixed an issue where EraStringToNum JS Function would return incorrect values and lead to unexpected behaviour
Added some safeguards against server crashes in onNameRequest() and onTooltip() JS Events
08/03/2023 - Xuri
Fixed an issue where houses could lose track of locked down items on server restart
Fixed an issue where items could be accidentally dropped through the floor of houses/boats
04/03/2023 - Xuri (0.99.6-RC3)
Updated Item DFNs with ORIGIN and SECTIONID tags for relevant items
Added JS Function to make comparing eras (based on object origin or server settings) easier:
EraStringToNum( eraString ) // Takes an era string (uo, t2a, uor, td, lbr, aos, etc) and returns an int
Updated some JS scripts to use EraStringToNum() for era comparisons (potionkeg.js)
Default CORESHARDERA setting is now LBR
Removed PUB15 as a separate "era" - it's identical to late stage LBR anyway:
Removed support for GETPUB15 tag
Added support for GETUO tag for items/NPCs:
GETUO= // Inherit DFN section if core shard era is Ultima Online (original release, before T2A)
Rewrote portions of MsgBoardQuestEscortCreate() function in msgboard.cpp to ensure only escort regions within same world as NPC can be selected as destinations
Increased maximum number of possible escort regions that can exist from 255 to 65535
Added region definitions for all shrines in Britannia (Fel & Trammel), and marked them as valid destinations for NPC escorts (uox3/regions/regions.dfn)
Moved bankers from vendor to human DFN files, and made them inherit basehuman instead of basevendor - since they are not vendors
To address an issue with escorted NPCs not timing out and vanishing if they are left in a "dormant" area of the world with no player activity, the NPCs are marked as "always awake" the moment they arrive at their destination. Note that the uox.ini setting ALLOWAWAKENPCS needs to be enabled for this to work.
Fixed an issue where spawnsection of spawners did not show up correctly in tweak menu
Fixed an issue where the generic Orc AI script didn't have a return true at end of onDamage() event, which prevented all orcs from taking damage in combat (js/npc/ai/monster/orc.js)
Moved Anatomy skill-check in healing script (js/skill/healing.js) from onCallback1() function to onTimer() to prevent the skill-check from being spammable
Added mount ID for Frost Mite in creatures.dfn, allowing it to be used as mount
Exposed the following character properties to JS engine, which can be used to view/adjust the permanent hair/beard options for a character:
.hairStyle
.hairColour
.beardStyle
.beardColour
Updated 'kill hair, 'shavehair, 'shavebeard and 'remove commands to clear permanent hair/beard colour and style properties in addition to removing the item itself
Added a GM override to let GMs place as many houses as they want (js/server/house/houseDeed.js)
Fixed an issue where attempting to sell items to NPC shopkeepers could result in client crashing
Added a new JS Event:
onMultiLogout( iMulti, cPlayer ) // Handles players logging out while inside multis
Updated house script (js/server/house/house.js) with onMultiLogout event, which allows owners (always) and co-owners/friends/guests (if option enabled in uox.ini) to safely log out inside the house (without getting booted).
Added a "keyless" option for interacting with locked doors (js/item/doors.js) of player-owned houses, which lets owners/co-owners/friends/guests of a house use locked doors in the house without requiring a key in their backpack, if the options for that are enabled in UOX.INI. Enabled for owners/co-owners and friends by default (but not for guests)
Note that if option to safely log out is enabled, but keyless option is NOT enabled, then the server will check if the player has a key to the house in their backpack, and eject them from the house upon logging out if not. This is to make sure players don't get stuck inside a house they can't get out of because they lack the rights to open doors etc.
Added new UOX.INI options, under the [houses] section:
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
Fixed NOHAIR tag from races.dfn not being loaded correctly
31/12/2022 - Xuri
Extended GetSpawnRegion JS Function to fetch spawn region reference based on a set of coordinates. Supported syntax are now:
GetSpawnRegion( spawnRegionID )
GetSpawnRegion( x, y, worldNum, instanceID )
Added new DFN tags for Items and NPC:
SECTIONID // Override which [sectionID] is stored for an object
ORIGIN // Store reference to which expansion/era of UO an item/NPC originated in
Added new Item/Character JS property:
.origin // Get reference to expansion/era of UO an item/NPC originated in
Fixed an issue with IsInBuilding JS Function which could only handled a limited subset of instance ID values
Corrected name of tag used to attach scripts to ore types - from SCRIPTID to SCRIPT
24/12/2022 - Xuri, punt, ldilley (0.99.6-RC2)
CMake is now default build system on Linux/FreeBSD, and an alternative for Windows/macOS-users instead of VS/XCode, though the old GCC/Make build process is still intact (for now)
Resource files (uox3.rc and uox3.ico) have been moved from UOX3/source to UOX3/assets
Build/project-related files have been moved to /make/[buildsystem] sub-directories, for both UOX3 and sub-projects:
UOX3/make/cmake
UOX3/make/VS2017
UOX3/make/VS2022
UOX3/make/XCode
spidermonkey/make/cmake
spidermonkey/make/VS2017
spidermonkey/make/VS2022
spidermonkey/make/XCode
zlib/make/cmake
zlib/make/VS2017
zlib/make/VS2022
zlib/make/XCode
CMake, VS2022 and XCode will compile sub-projects automatically when UOX3 is compiled, while VS2017 requires compiling sub-projects prior to UOX3
automake.sh script (still in root of repository) now uses CMake instead of GCC/Make, and supports optional arguments for creating debug/clean builds
Updated instructions on compiling UOX3 can be found on GitHub and/or in the UOX3 documentation
Some redundant files have been deleted from the repository (like DLL folder and file)
Code style guide added to UOX3/docs directory (styleguide.html)
Updated GitHub workflows to use cmake for Linux and to ignore changes to .txt/.html/.sln/.vcxproj files for both Linux & Windows workflows
17/12/2022 - Xuri
When a player says "vendor buy" or "vendor sell", NPC shopkeepers (and related JS events) will now respond in priority of distance to the player
11/12/2022 - Xuri
Added support for a SCRIPT tag in ore definitions in dfndata/skills/skills.dfn, which will be applied to any ore of that type that's mined
08/12/2022 - Dragon Slayer
Replaced orc Spawns with Savages in T2A orc fort. this would bring the spawns up to date with LBR.
03/12/2022 - Xuri
Updated .ResourceCount() and .UseResource() JS Object Methods to include optional parameter for sectionId. New supported syntax:
int ResourceCount( realId, colour )
int ResourceCount( realId, colour, moreVal )
int ResourceCount( realId, colour, moreVal, sectionId )
int UseResource( amount, realItemId )
int UseResource( amount, realItemId, colour )
int UseResource( amount, realItemId, colour, moreVal )
int UseResource( amount, realItemId, colour, moreVal, sectionId )
Fixed an issue where the bit flag for the HirelingCombatTraining setting was not set properly
Fixed an issue in SpiderMonkey VS project that prevented compiling a x64 debug build (thanks, punt!)
Some minor cleanup
03/12/2022 - Dragon Slayer
GM and Counselors can now go though the wind teleporter
03/12/2022 - ldilley
Comment line in jsconfig.mk that attempts to cat a non-existent Version file. This causes an error otherwise during the SpiderMonkey build.
Initialize totalPlayerGold in vendor.cpp.
Flag unused variable in gumps.cpp.
Update README.md to include references to FreeBSD and also alter the command (libtool instead of ar) used to generate the JavaScript library on macOS.
Improve automake.sh.
29/11/2022 - Xuri
Added some validation checks for attacker object in onDamage JS event in several scripts
Enabled onSellToVendor, onSoldToVendor, onBuyFromVendor and onBoughtFromVendor JS events to also run if attached to NPCs
Disabled location check for 'addmulti command
29/11/2022 - ldilley
Fixed many compile-time warnings (closes Fix compile warnings #131).
Clang and GCC builds were both successful and completely clean using -Wall, -Wextra, and -Werror. The following various problems were corrected:
Fix reasonable warnings reported by MSVC using /W4 /W3 /D_CRT_SECURE_NO_WARNINGS.
Returning final without virtual
Comparison of values with differing signedness
Assignment order
memset() expecting a multiple of a data type
A plethora of unused variables (commented or voided)
Comparisons always resulting in true
Failure to initialize missing members
Static methods (inlined)
Instances of case fallthrough (denoted)
Incompatible casts
Mismatching macros/methods requiring variable number of arguments
Bit shifting in bool contexts
Inappropriate pointer use
Potentially incorrect initialization of class/struct instances using memcpy()/memset()
Removed some instances of extraneous spaces/tabs.
27/11/2022 - Dragon Slayer, Xuri
Implemented potion kegs; these can be crafted by carpenters/tinkerers, and can be used to store potions at a fraction of their original weight (Dragon Slayer)
Only the owner (if locked down), the current holder (if in backpack) or someone who have previously taste identified a potion keg may add additional potions to it (Xuri)
Potions dropped from monsters and bought from stores are unidentified by default, but can be identified by players using the taste identification skill. (Xuri)
Potions crafted by players are identified by default for all to see (Xuri)
Releasing locked down items in houses now set the items as movable (1) instead of client default (0) (Xuri)
Added socket as another parameter to the onToolTip JS event
15/11/2022 - Dragon Slayer
Added special hair dyes
Updated item menu in dfndata/items/ItemMenu.bulk.dfn with dyes (Xuri)
Added hairstylist NPC alias to dfndata/npc/vendors.dfn (Xuri)
13/11/2022 - Xuri
When buying items from NPC shopkeepers where the total cost is higher than the buy threshold set in uox.ini, UOX3 will now check the player's bankbox for gold first, then their backpack second, instead of just failing outright if bank didn't have the required amount
Minor cleanup of some UO era-specific code for better maintainability
Adjusted default light-settings in UOX.INI:
DUNGEONLEVEL changed from 3 to 15
DARKLEVEL changed from 5 to 12
12/11/2022 - Dragon Slayer
Added hair-only and beard-only variants of hair dyes
Added hair stylist vendors that sell all types of dye
09/11/2022 - Dragon Slayer/ldilley
Added item definition (in misc/consumables.dfn), JS script (item/bearddye.js) and dictionary entries for hair dye
Combined hair and beard dye scripts into one, since they shared most code (Xuri)
Added dyes to alchemist shoplist (items/shoplist.dfn) (Xuri)
Removed old hair dye menu from legacy gump DFN (dfndata/misc/gumps.dfn) (Xuri)
Selling items to NPC shopkeepers now relies on sectionID of items instead of their ID/Type/Morex values (Xuri)
Tinkerers can now craft Fletching Tools (Dragon Slayer)
08/11/2022 - Dragon Slayer/ldilley
Added item definition (misc/consumables.dfn), JS script (item/hairdye.js) and dictionary entries for hair dye
Added hair dyes (and tribal paint) to new consumables menu in add-menu (Xuri)
Cleaned up hair dye script based on style guidelines, addressed a few issues (Xuri)
Removed hard-coded hairdye functionality (Xuri)
06/11/2022 - Dragon Slayer/Xuri
Implemented Taxidermy Kits for creating trophy house addons (Dragon Slayer)
Fixed an issue related to open doors in houses that would prevent the placement of house-addons because of an incorrect distance check (Xuri)
Fixed an issue with placement of house addons that would allow them to be placed in locations blocked either by other items or by parts of the multi itself (such as walls) (Xuri)
1/11/2022 - Dragon Slayer
Updated spawn regions in Yew with NPCs for Empath Abbey
1/11/2022 - Xuri
Base multis created with CreateBaseMulti() JS function or BuildBaseMulti() C++ function no longer require valid 'house/boat' locations to spawn
Fixed an issue where no reagents were consumed when casting recall/gate spells via spell icons in runebooks (js/item/runebook.js)
Spawn Regions will now more accurately spawn objects near desired heights supplied via PREFZ tags. Using PREFZ=20 will attempt to spawn NPCs on the second floor of a building with ground level at Z 0, for instance.
Added a new DFN tag usable in Spawn Regions to define a definite Z level at which to attempt to spawn objects (skips some steps in the process and assumes the defined Z is a valid Z):
DEFZ=# // Defines a definite Z level to attempt to spawn an object at
Updated banker AI script (js/npc/ai/banker.js) with some extra validation checks, system messages and to take max weight capacity of bankbox into account
The sectionID property of NPCs are now transferred to their corpses upon death, to make it easier to identify in scripts from which NPC a corpse really originated
30/10/2022 - Xuri
Player vendors in existing houses no longer teleport to new houses placed by owner nearby
Fixed script issue with demolishing house with player vendors in them
Fixed an issue where setting prices for items on player vendors would permanently overwrite the buy-value of the item. Player vendor prices are now stored as a separate property (but saved as part of the VALUE tag), also accessible by the following JS Item property:
.vendorPrice
Item description and vendor price are now cleared from items bought from player vendors
Tooltips for items with new descriptions or vendor prices in player vendor backpacks are now correctly updated
Only books, keyrings and unlocked containers can now be marked 'Not for Sale' in a player vendor's main/root backpack
Any items on player vendors can now be marked as 'Not for Sale' if placed within a container that has a price tag
Added additional feedback messages to players for various interactions with player vendors
Fixed a bug where player vendors would lose loyalty and 'go wild' like pets when not fed regularly
Split up some of the longer item lists in the 'add menu to prevent freezes on original 2D client
27/10/2022 - Xuri
Added some code to assist with preventing/debugging houses potentially decaying
Fixed an issue with freeshard server poll script, which attempted to fetch wrong ini setting
Fixed a server crash related to applying invalid prices for player vendor items
Neglecting to give item in player vendor pack a description now defaults to item name
Items in player vendor packs are now refreshed properly when players update price and name
Players can no longer issue pet control commands to player vendors via context menus
27/10/2022 - DragonSlayer
Added aliases in item definitions for containers
Consolidated all light item scripts into one, with options for auto-lights (lampposts) based on environment brightness level and more
Removed old light scripts (Xuri)
Updated consolidated lights.js script to handle custom dir values on lights, modified source of sound effects when turning lights on/off and made a few other minor adjustments (Xuri)
Revamped region spawn system
27/10/2022 - Xuri
Fixed an issue with onDyeTarget event where the dyetub and target object parameters were not set properly
Fixed some incorrect casting animation-related variable assignments for AI_HEALER and AI_EVIL_HEALER
Fixed an issue with pets not going wild from lack of loyalty to their owners when at zero loyalty
Addressed issues with idle/fidget animation setup that could cause NPCs to blink out of existence
Removed stray semicolon behind control statement related to triggering of OnFacetChange JS event
Fixed an issue with Bless spell when cast from item
Some minor code cleanup
24/10/2022 - Xuri (0.99.6-RC1)
Misc cleanup and standardization of style and naming conventions in code and scripts
Added comments for all dictionary-based system messages in code for maintainability reasons
Fixed an issue where line of sight checks for dynamic items would fail
Fixed an issue where items being picked up by a player would not be added to the correct mapregion if bouncing back to its original location when dropped
Fixed an issue where NPC spellcasters would damage/kill themselves by attempting to cast Mind Blast at their target. Now they'll only cast this if they're actually smarter than their target
Fixed an issue where NPC spellcasters would damage and kill members of their own species/ai/race via AoE spells
Fixed an issue where the max spellcast range defined in UOX.INI was off for NPCs by 1 tile
Added spoken words of power for spells cast by human NPCs
Fixed an exploit with the Dispel Field spell
Admins and GMs are no longer dispellable...
Fixed a bug where spell effects would get stuck on caster if they cast a spell with a moving effect at themselves
Added two new NPC AI types that can be used for NPCs that are primarily casters:
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
Changed the NPCAI tags of some NPCs from 5 to 10 and from 2 to 11
Added some visual flair to let NPCs play idle/fidget animations from time to time
Added some visual flair to let NPCs play casting animations when using magic spells
Added support for new tags in creatures.dfn to define some animation behaviour for non-player creatures in combat (ANTIBLINK tag no longer needed):
ANIM_CASTAREA=#,frameCount // Animation to use when casting area-targeted spells
ANIM_CASTTARGET=#,frameCount // Animation to use when casting target-based spells
ANIM_ATTACK1=#,frameCount // First attack animation
ANIM_ATTACK2=#,frameCount // (optional) Second attack animation
ANIM_ATTACK3=#,frameCount // (optional) Third attack animation
Updated creatures.dfn with entries for all known creatures in the UO client, as well as icons, sounds and combat/casting animations for all of those.
Fixed an issue with creature DFN setup for Elf ghosts which prevented paperdoll context menu from working
Added new JS Events:
onCarveCorpse( pUser, iCorpse ) // Triggers for iCorpse when being carved by pUser
onFacetChange( mChar, oldFacet, newFacet ) // Triggers for character when moving between facets
onDyeTarget( pUser, dyeTub, targItem ) // Triggers for dyeTub when player tries dying an item
Added new JS Functions to create houses (from house.dfn) and base multis (using raw multi IDs):
CreateHouse( houseID, x, y, z, worldNum, instanceID );
CreateBaseMulti( multiID, x, y, z, worldNum, instanceID );
Added new JS Character/Item Method:
.HasScriptTrigger( scriptID ) // Returns true if script with scriptID is present on object
Added new JS commands for GMs in js/commands/custom/misc-cmd.js
'addhouse houseID // Add house from house.dfn at target location
'addmulti multiID // Add base multi from client multi files at target location
Added new INI settings:
SHOWRACEWITHNAME=1 // If enabled, shows a character's race along with their name. Defaults to 1
SHOWITEMRESISTSTATS=0/1 // If enabled, shows item resistance stats in item tooltip. Defaults to 0
SHOWWEAPONDAMAGETYPES=1/0 // If enabled, shows weapon damage types in item tooltip. Defaults to 1
CASTSPELLSWHILEMOVING=0/1 // If enabled, players can cast spells while moving, without having to stop
SHOWREPUTATIONTITLEINTOOLTIP=1/0 // If enabled, shows player's reputation title in tooltip. Defaults to 1
SHOWGUILDINFOINTOOLTIP=1/0 // If enabled, shows player's guild info in tooltip. Defaults to 1
SHOWRACEINPAPERDOLL=1/0 // If enabled, shows a character's race in the paperdoll. Defaults to 1
SHOWNPCTITLESINTOOLTIPS=1/0 // If enabled, shows NPC titles in tooltip. Defaults to 1
Renamed 0xf1_connectUOServerPoll.js to 0xf1_freeshardServerPoll.js, and updated script to respond to the "standard" freeshard server poll request rather than the more specific (and now dead) ConnectUO one.
Renamed INI setting CUOENABLED to FREESHARDSERVERPOLL
Added new INI settings under [expansion settings] section to help shard admins customize some key behaviours of their shard, based on their preferred "era" of UO. Note that a value of "core" means the setting inherits the chosen era from the CORESHARDERA setting:
CORESHARDERA=lbr
Defines the "core" era of the shard. Defaults to pub15 (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
RACIALDAMAGEBONUS=core
Defines era to base racial damage bonus on
sa or later - Gargoyles gain +15% damage bonus per each 20 HP lost
DAMAGEBONUSCAP=core
Defines era to base damage bonus cap on
lbr or earlier - No cap on damage bonus multiplier
aos or later - Total damage bonus multiplier capped at 300% higher than base damage
SHIELDPARRY=core
Defines era to base shield parry calculations on
t2a - chance to block is parryskill / 2. shield absorbs damage equivalent of AR/2 for melee, or equivalent of AR for archery
uor to lbr - higher AR equals lower block chance, but more damage absorbed.
aos or later - chance to block dependent on parry skill vs bushido skill, with dex modifier
WEAPONPARRY=core
Defines era to base weapon parry calculations on
aos or later - chance to parry with weapon based on parry skill and bushido skill, with a dex modifier, 16.6% chance weapon will take damage from parrying
ml or later - chance to parry with weapon based on parry skill and bushido skill, with a dex modifier, 5% chance weapon will take damage from parrying, or 75% if opponent has mace
WRESTLINGPARRY=core
Defines era to base wrestling parry calculations on
tol or later - From 12.5% chance (at GM wrestling, increases with higher skill) that an NPC will parry an attack
COMBATHITCHANCE=core
Defines era to base combat hit chance calculations on
t2a to lbr - hit chance based on attacker's skill vs defender's skill. No minimum chance to hit
uor to lbr - Additional bonus hit chance for archery
aos to tol - hit chance based on attacker's skill (and hit chance increase) vs defender's skill (and defense chance increase). Minimum 2% chance to hit
Supported era values:
uo, t2a, uor, td, lbr, aos, se, ml, sa, hs, tol and core (inherits era defined in CORESHARDERA)
Added (optional) new Item/NPC DFN tags to help determine which variants of Items/NPCs to load from DFNs, based on chosen era in CORESHARDERA setting:
GETUO= // Inherit DFN section if core shard era is Ultima Online (original release, before T2A)
GETT2A= // Inherit DFN section if core shard era is The Second Age
GETTD= // Inherit DFN section if core shard era is Third Dawn
GETUOR= // Inherit DFN section if core shard era is UO Renaissance
GETLBR= // Inherit DFN section if core shard era is Lord Blackthorn's Revenge
GETAOS= // Inherit DFN section if core shard era is Age of Shadows
GETSE= // Inherit DFN section if core shard era is Samurai Empire
GETML= // Inherit DFN section if core shard era is Mondain's Legacy
GETSA= // Inherit DFN section if core shard era is Stygian Abyss
GETTOL= // Inherit DFN section if core shard era is Time of Legends
Added new Item/Character DFN tags that provide defensive bonuses on top of existing DEF/ELEMENTALRESIST values:
DEFBONUS=minVal [maxVal] // Def/Physical resistance bonus (maxVal optional)
ERBONUS=heat cold energy poison // Elemental resistance bonus
Crafted armor made from coloured ingots now provide additional defensive bonuses based on color of ingots (for AoS/ToL variant of items)
Fixed a bug where players not a member of a guild could still interact with the guildstone of said guild
Guild masters can no longer dismiss themselves from their own guild; if they want to leave they'll have to resign
Fixed a bug where cancelling text input for various guild functions could blank out the guild name, abbreviation, guildmaster title, charter or website
Fixed a bug where guild abbreviations (and titles) would show when turned off, and would not show when turned on
Added guild master ability to grant guild titles to targeted guild members
Added system message feedback various guild interactions, including: inviting players to join, swearing fealty, declaring war, entering alliances, granting titles
Added support for showing guild titles and guild names in character tooltips
Guild titles, names and abbreviations are now hidden for players who are incognito
Players invited to join a guild by the Guild Master directly will now automatically be accepted into the guild
Fixed a potential null-reference exception related to moving Townstones
Fixed a bug where adding or removing friends for a pet would not properly inform the involved players
Traps in dungeons will now only trigger for player characters, and will ignore all NPCs
Tweaked HTML templates for server status pages; shard name shown more prominently, names of GMs/Counselors hidden from regular player list, information on UOX3 build version hidden in player-facing pages, and a few other small adjustments
Fixed an issue with archery butte script (js/item/archerybutte.js) where chance of hitting a bullseye was not calculated correctly
UOX3 now responds correctly to logout requests from the client
Fixed reagent requirements for inscribing Explosion spell (thanks, Azzerhoden Razeri)
Removed redundant VALUE tags from JewlerShopping shoplist (thanks, Azzerhoden Razeri)
Reduced combat hit message spam by increasing the lower damage threshold for when they can show up
Added NPC definitions for savage shaman, savage warrior (male and female) and savage rider in dfndata/npc/savages.dfn.
Added special AI scripts for savages and savage shamans, to handle their special abilities
Added tribal paint consumable item (dfndata/items/misc/consumables.dfn)
Added ability to cook tribal paint via flour and tribal berries (js/skill/cooking/flour.js)
Added some helper scripts for magic:
js/magic/helper/check_resist.js (6000) // Test target's resist versus caster and spell circle
js/magic/helper/calc_final_spell_damage.js (6001) // Calculate spell damage from provided base damage
Added a timer-related script that can be used to keep track of long-term timers (up to 49 days) on objects, and which will remove itself from the object when there are no more active timers left. Currently used to keep track of tribal paint applied to players:
js/server/timer/long_term_timers.js (3)
Fixed an issue where player backpacks did not have a max weight set, which could cause issues for scripts that relied on checking max weight of backpack to work
Added new UOX.INI settings to let shard admins control the maximum weight that player backpacks and bankboxes can hold:
MAXPLAYERPACKWEIGHT=40000 // 400.00 stones by default
MAXPLAYERBANKWEIGHT=160000 // 1600.00 stones by default
Fixed an issue where spells setup in JS did not correctly consume reagents when cast (thanks, Azzerhoden Razeri)
Fixed a bug where casting spells would sometimes leave the player in a "frozen" state client-side
Fixed a bug where RECALL=1 was missing from town of Vesper in regions.dfn
Fixed an issue where runebooks did not keep correct count of runes added/dropped (thanks, Azzerhoden Razeri, Dragon Slayer
Fixed an issue where the runebook script would crash because of a misspelled object variable (thanks, Azzerhoden Razeri)
Added missing spell scrolls to the MageShopping shoplist
Added new property for Items and NPCs loaded from DFNs (also available as a JS object property):
sectionID // Keeps track of the [sectionID] an item or NPC originated from
Added support for getting/setting new sectionID property via 'get and 'set commands
Exposed Character properties to JS engine:
.fleeAt // Percentage health threshold for NPC fleeing in combat
.reAttackAt // Percentage health threshold for NPC re-attacking in combat if fleeing
Added new character timer (also available in JS engine) for time between each time a character plays an idle animation
Added 'move as an alias command for 'telestuff (js/commands/targeting/tele.js)
Fixed missing socket reference in bankcheck.js
Added missing tribal paint (js/item/tribal_paint.js), spear (js/item/tribal_spear.js) and bola (js/npc/special/bola_ability.js) scripts
Updated js/item/oilcloth.js to support wiping away tribal paint from the player
Updated js/npc/ai/monster/orc.js AI script to make sure owners of pets attacking the orc will get their orcish kin masks destroyed
Players can no longer use Polymorph spell while incognitoed, or while under effect of tribal paint
Players can no longer use Incognito spell while polymorphed, or while under effect of tribal paint
Facial hair is now removed from players who are under the effects of Incognito spell that changes their gender for female
Expanded the amount of possible house entries in dfndata/house/house.dfn from 255 to 65535
24/10/2022 - ldilley
Fixed cPlayerAction.cpp case in source/CMakeLists.txt (was cplayeraction.cpp).
Added FreeBSD build support for SpiderMonkey, zlib, and UOX3.
Updated README.md with FreeBSD build instructions.
Fixed a compile error due to NULL being defined as nullptr (non-int type) and not 0 (zero)
26/08/2022 - Xuri (0.99.5b-7)
Fixed a missing definition for GetStartTime JS function which would cause an error in the help menu script
Tweaked some messages output to the UOX3 console during startup for improved clarity
25/08/2022 - Xuri (0.99.5b-6)
Increased world load speed by almost 20% by reducing how often loading progress is written to the console
Increased world save speed by almost 50% through the use of binary mode and buffer tweaks for ofstream combined with a cached newline char and std::to_string instead of static_cast
Fixed a server crash involving killing NPCs of a specific spawn region using the 'spawnkill # command
Fixed a server crash involving moving items from decaying corpses to the ground
Fixed a server crash involving carving up human corpses
Fixed a server crash related to AreaCharacterFunction JS function, which could trigger for any script that potentially kills any NPC this function iterates over (like explosion potions)
Fixed a server crash related to GMs attempting to add items from add-menu while having no backpack
Fixed a client crash issue caused by attempting to sell house deeds back to architect NPCs
Fixed an issue where players would get incorrect amounts of gold for selling house deeds back to architect NPCs
Fixed an issue with characters dying onboard boats which prevented players from packing up the boats later
Added new item property in code (via bools bitset) that can be used to enable/disable maker's mark on crafted items. This property can be set to true for items crafted at exceptional quality by GM craftsmen
Exposed the new item property to JS engine:
.isMarkedByMaker // If true, maker's mark will be displayed
Updated default item tooltip to display " of exceptional quality" for items crafted with exceptional quality
Updated default item tooltip to display "[Crafted] by [Crafter's Name]" for exceptional quality items crafted by GM craftsmen. The [Crafted] text comes from the MADEWORD defined in dfndata/skills/skills.dfn for the primary skill used to craft the item
Updated old-school single-click names for items (when AoS bit is disabled in client/server features) to display exceptional status and/or maker's mark for appropriate items
Fixed an issue with the display of titles for NPCs that used dictionary lookups for their title
Added new UOX.INI settings under the [settings] section:
DISPLAYMAKERSMARK=1/0 // Controls if maker's marks on crafted items are shown on a global level
SHOWNPCTITLESOVERHEAD=1/0 // Controls whether NPC titles are shown over their heads
SHOWINVULNERABLETAGOVERHEAD=0/1 // Controls whether invulnerable tags are shown overhead
GLOBALRESTOCKMULTIPLIER=1.0 // Global multiplier applied to RESTOCK property of items when loaded from DFNs
Added new UOX.INI settings under the [combat] section:
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=0/1 // Controls whether NPCs in general can gain skills/stats from combat
Fixed an issue where a player meeting the exact minimum requirements for crafting an item would always fail
Fixed a bug with teleporting off boats to valid nearby locations when double-clicking boat planks while standing on it
Updated behaviour of planks on boats:
Boat key can unlock plank, but won't automatically open it
Boat key used on an open, unlocked plank will lock and automatically close the plank
Boat key used on an open, locked plank will unlock the plank and leave it open
Player using an unlocked plank now opens it
Player using an open plank will disembark (if onboard) or embark (if not) the boat
Player can always open a locked plank if they're on the boat, even with no key, to allow disembarking the boat.
Planks that are open, but locked cannot be accessed from outside the boat, and will close automatically after five of seconds
Updated behaviour of Magic Lock/Unlock spells:
Magic Lock cannot be used on objects inside a multi
Magic Lock applies difficulty to lock based on caster's Magery skill
Magic Lock effect will last between 7 to 50 seconds (depending on caster's Magery skill)
Any object that can be locked via Magic Lock spell can also be unlocked via Magic Unlock spell, if caster has high enough Magery skill
Fixed a bug where certain JS Functions, Methods and Properties would occasionally pass incorrect values to scripts that called upon them. Scripts that rely on the GetCurrentClock() Function, the .GetTimer() Method, .decayTime, .logTime, .oreTime and .fishTime Properties might need to be updated to account for the fix, which causes larger values to be passed in than before.
Fixed a bug related to GetCurrentClock() that caused decay and respawning of dungeon chests from working properly
Fixed a bug related to GetCurrentClock() and .logTime/.fishTime that prevented consumption and regeneration of log/fish resources from working properly
Added a new JS Function:
GetStartTime() // Returns a timestamp for when server started up
Fixed a bug related to GetCurrentClock() where server uptime stats in help menu was showing up incorrectly
Fixed a bug related to GetCurrentClock() and purging of registrations of visitors in public houses so their visits can be counted again later
Fixed a bug related to GetCurrentClock() that caused monster speech to not work properly
Fixed a Z-related issue that sometimes prevented players from fishing when standing on the shoreline next to the sea
Fixed an issue with Animal Lore skill that would always return a pet's loyalty level as "Wild"
Increased max range pets can be from their owner in order to still be included in moongate/teleporter travel from 12 to 24 tiles
Fixed an issue where the alchemy bonus damage for explosion potions was off by an order of magnitude
Fixed an issue where food IDs from foodlists referenced by other foodlists was not detected as valid food for tamed pets or NPCs
Fixed an issue where Alchemy crafting skill did not properly check for the existence of the crafting tool before proceeding with the crafting process
Fixed an issue that prevented the Teleport spell from working as intended
Fixed an issue where players would still get 1 gold even if STARTGOLD in uox.ini was set to 0
Fixed an issue with mount restrictions script that prevented players from mounting Unicorns, Ki-rins and Cu Sidhes
Fixed an issue where aggressive creatures wouldn't stop attacking player after being tamed (js/skill/taming.js)
Added a system message to inform the player when they've dropped out of stealth due to taking too many steps
Fixed an issue where hunger level of NPCs instantly dropped upon spawning because hunger timer was not active yet
Fixed a bug where character corpses would appear with a [unidentified] tag attached
Fixed an issue where the [unidentified] tag did not show up for unidentified magic items
Added ANIMAL tag to a small bunch of creature definitions (dfndata/creatures/creatures.dfn)
Fixed an issue with Bowcraft skill where player could not gain enough skill from crafting bows to reach min requirement for crossbows, and similiarly could not reach min requirement for heavy crossbows from crossbows
Updated default value of MURDERDECAYTIMER INI setting from 60 seconds to 28800 seconds (8 hours), to match the amount of time it would take for one (short term) murder count to decay on LBR-era OSI shards.
10/08/2022 - Xuri (0.99.5b-5)
Fixed an issue involving player deaths and moving items from backpacks to corpses
Fixed NPC Carpenters not selling carpentry tools
Fixed an issue with trashbarrel script (js/server/house/trashbarrel.js) that prevented it from working on stand-alone containers not in a house
Fixed a logic issue that resulted in some crafted items not having full item details show up in tooltips
Fixed an issue where reloading ini file would keep loading in the same starting locations over and over without ever clearing the list, making it grow in size with every reload
15/07/2022 - Xuri
Added new JS Methods for Characters and Items, for getting/setting expiry time for a specific timer belonging to a specific script attached to an object, or to kill said timer completely:
.GetJSTimer( timerID, scriptID )
.SetJSTimer( timerID, timeInMilliseconds, scriptID )
.KillJSTimer( timerID, scriptID )
Added new JS commands:
'getjstimer timerID,scriptID // Spits out remaining time before timer expires
'setjstimer timerID,timeInMilliseconds,scriptID // Updates expiry time for specified timer
'killjstimer timerID,scriptID // Kills specific timer completely
Updated JS Docs with info on the new JS timer-related methods
Updated dictionaries with new lines used by new JS timer-related commands
11/07/2022 - Xuri (0.99.5b-4)
Fixed an issue with incorrect sized Stat Window Info packet (0x11) being sent for clients when only T2A client/server features are enabled, which could cause client to freeze on login
05/07/2022 - Xuri (0.99.5b-3)
Fixed an issue where multis could vanish because multi data was not always correctly saved out to house.wsc; now multi data is saved to the same wsc files as other items instead. UOX3 still reads house.wsc content on world load, but will delete the file on the first world save, as it's no longer needed.
05/07/2022 - punt
Fix for invalid uo directory causing crash
Address an error in the using the error prone generic list (push/pop). Had an additional push, without a corresponding pop
05/07/2022 - Xuri
Wrapped some debug messages related to sockets in debug defines
Adjusted fix for mining to be more flexible with name of tiles
Fixed an issue that caused double saves on shutdown, with second shutdown wiping out some objects because they'd already been unloaded from system after first save
04/07/2022 - Xuri
Fixed an issue with mining that allowed mining on non-valid static tiles
Fixed an issue that prevented boats from moving
Fixed an issue that prevented boats from being blocked by blocking tiles
Fixed an issue where salute and bow emotes got reversed
12/06/2022 (on or about) - punt
Modernized and replaced all mul handling
Changed dynamic allocation of basic classes to static
Perhaps speed improvement
03/06/2022 - punt
Modernized ObjectFactory and replaced external hash with use of unordered_map
31/05/2022 - Xuri
Fixed an issue with the provocation skill (skill/js/provocation.js) that prevented successfully provoked creatures from attacking one another
28/05/2022 - Xuri
Fixed issue in js/server/house/houseCommands.js that caused any attempts to create secure containers in houses to fail (thanks Hughesbuddy!)
23/05/2022 - Xuri
Fix for logic error that prevented stamina loss when shoving past other characters
22/05/2022 - Xuri
Exposed the NPC wander properties FX1, FY1, FX2, FY2 and FZ to the JS engine, and updated get, set and tweak JS commands to handle these
Updated dictionary files with tweak-menu specific messages for NPC wander properties
Fixed an issue with weight calculation when picking up partial piles of items - now uses weight of the specific amount of items picked up on cursor, and not the weight of the full pile
Fixed an issue with weight calculation of bank box contents, which didn't take into account the amount of items in item piles
21/05/2022 - Xuri
The TOOLUSELIMIT and TOOLUSEBREAK ini settings now also properly affect mining tools when enabled
12/05/2022 - Xuri
Fixed an issue where slips counted while using the Healing skill (js/skill/healing_slip.js) would never be reset (thanks Hughesbuddy!)
Adjusted fishing script (js/skill/fishing.js) to reduce the chance of fishing up sea serpents on failure in shallow and deep waters, and also added a chance for players to fish up deep sea serpents while in deep waters
Adjusted scissors script (js/skill/tailoring/scissors.js) to stop preventing use of scissors while the system thinks the player is running, but just show the associated message without any other impact
08/05/2022 - Xuri
Fixed an issue where non-mounted NPCs didn't get proper default values set for mounted walking, running and fleeing speeds
03/04/2022 - Xuri
Fixed a bug with skill check code that resulted in much lower than expected success rate at using skills (non-crafting ones in particular)
Updated code for how the minimum 50% success-rate is calculated for crafters who meet all minimum skill requirements for crafting an item, which previously incorrectly gave crafters a much higher chance of success!
Tweaked how rank is calculated for crafted items to modify the final rank based on base chance of success at crafting item. This brings the chance of crafting exceptional (10/10 rank) items more in line with how difficult this was in LBR era on official shards
Adjusted how estimated chance for crafting exceptional items is calculated in crafting script (js/skill/craft/itemdetailgump.js) to be more in line with what actually takes place in code
22/03/2022 - Xuri
Reverted from using strncpy_s to strncpy due to some unforeseen side effects that could cause script errors and crashes. Additional work might be required in order to safely convert to strncpy_s
Updated 'radd command to provide better feedback when using incorrect syntax. Also added redirects to 'radditem and 'raddnpc commands when "item" or "npc" is detected as a parameter of this command
07/03/2022 - punt
Added all-in-one solution and project files for VS2022 that compiles both UOX3, Spidermonkey and zlib at the same time
Updated cmake project to compile static version of Spidermonkey library
Various source changes made to address warnings
Updated project files and filters to be more consistent between VS2017 and VS2022 solutions (Xuri)
02/03/2022 - Xuri (0.99.5b-2)
Added a new feature that allows shard admins/scripters to mark specific NPCs as "permanently awake", in order to keep UOX3 running scripts, timers and updates for these NPCs even if they are in regions that are "asleep" because of no nearby online players.
A new UOX.INI setting has been added which can turn this feature on/off:
ALLOWAWAKENPCS=0/1 // If disabled, NPCs marked as awake are treated as regular NPCs
New NPC DFN tag added to mark an NPC as awake or not:
AWAKE=0/1 // 0 = disabled (default), 1 = enabled
New Character JS Property added to toggle an NPC's awake state via JS:
.isAwake // 0 = disabled (default), 1 = enabled
'get and 'set commands updated with the new awake property:
'get awake
'set awake 0/1
IP of shard in shard list is now sent to client in little endian instead of big endian, which should correct the ping displayed in shard list, which previously showed a timeout (punt)
28/02/2022 - Xuri
Updated UOX.INI setting NETWORKLOG to actually control logging of network traffic for all connected clients, without needing each socket to have logging enabled via the manual console command 'Z'. This console command can still be used, however, to override a disabled INI setting and enable network traffic logging for connected clients.
Updated 'get and 'set commands to support getting/setting a range of socket properties for a targeted (online) player:
tempInt // int (temporary value)
tempInt2 // int (temporary value)
xText // string (temporary string)
clickX // int (x coordinate of where player clicked with targeting cursor)
clickY // int (y coordinate of where player clicked with targeting cursor)
clickZ // int (z coordinate of where player clicked with targeting cursor)
walkSequence // int (movement sequence number, between 0 and 255)
currentSpellType // int (current spell being cast by a player)
logging // bool (enable to override disabled NETWORKLOG setting)
pickupX // int (x coordinate of where player picked up an item from)
pickupY // int (y coordinate of where player picked up an item from)
pickupZ // int (z coordinate of where player picked up an item from)
pickupSpot // int (0 = nowhere, 1 = ground, 2 = ownpack, 3 = otherpack, 4 = paperdoll, 5 = bank)
language // string (language code)
Fixed an issue where CUSTOMINTTAG in NPC DFNs would not get read properly, but would instead print an (incorrect) warning about how the tag was formatted
27/02/2022 - Xuri
Fixed a server crash related to attempting to play music for non-existent sockets
26/02/2022 - Xuri
Fixed a server crash caused by a couple of items in "stone walls 4" section of add-menu that were missing their ID in ItemMenu.bulk.dfn (thanks, Humility)
Fixed an issue where items added to house (multi) definition would not be attached to the house if their coordinates were not within the boundaries of the house. This prevented the usage of house foundation multis with custom stairs, for instance.
26/02/2022 - Dragon Slayer
Added JS-based help menu accessible via character paperdoll, with modernized style and UI, ability for players to change their password
Minor cleanup and addition of a few extra features to help menu, like a safe teleport option for players who are potentially stuck, updated server info details and integration with UOX3's existing GM paging system as support options (Xuri)
Added new JS functions to retrieve server data used for server stats in help menu:
GetItemCount() // Gets number of items on server
GetMultiCount() // Gets number of multis on server
GetCharacterCount() // Gets number of characters on server
GetServerVersionString() // Gets server version as a string
Added new UOX.INI settings to control safe teleport for stuck players via the Help menu in Paperdoll:
MAXSAFETELEPORTSPERDAY=1 // Max teleports per day, defaults to 1
TELEPORTNEARESTSAFELOC=1 // Teleport player to nearest safe location (1) or random safe location (0)
Added 'res as an alias of 'resurrect command
Added alias names for items in misc_magic.dfn, potions.dfn, reagents.dfn and scrolls.dfn, to allow adding these items using 'add item bloodmoss, or 'add item lesserexplosionpotion
26/02/2022 - punt
Added some error checking for sockets
25/02/2022 - punt
Timing instrumentation added to allow obtaining information to aid in analyzing performance issues
25/02/2022 - Xuri (0.99.5b-1)
Fixed an issue with monster speech script that prevented orcs, lizardmen, ratmen and wisps from taking damage in combat
Fixed an issue where the body ID for Shadow Lords (0x2c0) was missing the 0x prefix in its Creature DFN entry, causing UOX3 to overwrite the data (primarily sounds) for the Ettin (0x2) entry
Fixed an issue where the [longpants] definition (dfndata/items/gear/clothes/clothes.dfn) did use the get= tag correctly (Dragon Slayer)
Fixed an issue with the 'addpack command where it would try to add a pack/items to user of command instead of targeted character
Extended the .PlaceInPack() Item JS Method to support an optional boolean argument. If true, UOX3 will attempt to automatically stack the item in question with similar items in the item's current container. New syntax:
.PlaceInPack( autoStackFlag ) // autoStackFlag can be true/false
Reduced the default maxSteps properties of advanced NPC pathfinding to improve server performance. As a result, pathfinding calculations for NPCs that are out of combat will now take ~90% less time than before, though this still takes more time than is ideal. For NPCs in combat, the improvements are not as dramatic.
13/02/2022 - Xuri (0.99.5b)
Fixed an issue where karma titles would inadvertently have the space behind the title trimmed before being displayed in paperdoll, resulting in erroneous display of title + name there
Fixed an issue with a cooking script (js/skill/cooking/cooking.js) where sweet dough would not get consumed properly on cooking (Dragon Slayer)
Updated C++ function calcRegionFromXY to work with CBaseObject instead of CChar, so it also works for Items
Items now have current town region stored as an object property during runtime. This is calculated on load, when container property is updated, and when an item is picked up or dropped. The region is also accessible via the (read-only) JS Item property .region
Added new JS Event to allow capturing button presses from the old-school gump displayed by client via packet 0x76, which was originally used by the old-school crafting menus in T2A. The requirement for this to work is that the gump in question must have a gumpID between 0x4000 and 0xffff (which can be set when manually creating a packet with this ID via JS), and the Event itself must be in the global script:
onScrollingGumpPress( pSock, gumpID, buttonID )
Added new JS Event to allow better control over which names UOX3 sends to the client for characters:
onNameRequest( myObj, requestedBy ) // return custom string, or return empty string/nothing/true/false to use default name
Updated JS Events to also work for Items (previously only worked for Characters)
onLightChange( myObj, lightLevel )
onTempChange( myObj, temp )
onWeatherChange( myObj, weatherType )
Adjusted default temperature for town regions with no weather systems defined from 0 to 20 degrees Celsius
Updated some JS scripts (fishing.js, baking.js and cooking.js) to make use of GetTempTag/SetTempTag rather than GetTag/SetTag
Added cancel-checks to targeting functions in command script for add-commands (js/commands/targeting/add.js)
Updated get command script (js/commands/targeting/get.js) to allow retrieving region ID and name using 'get region
Updated misc command script (js/commands/custom/misc-cmd.js) to add 'gettemptag and 'settemptag commands, used to retrieve/set temporary custom tags from/on objects
Fixed a bug where Spirit Speak skill would be checked for race languages even if the race had LANGUAGEMIN defined as 0 (or not defined at all)
Fixed an issue where players using regular UO client would get stuck in a black void after teleporting between worlds, by adding an additional character refresh after the teleport
Fixed an issue where crafting tools for Blacksmithing and Carpentry would attempt to fetch the value of an incorrectly named INI setting to handle durability loss for the tools
Added new setting under [settings] section of UOX.INI to control whether it should be possible to craft weapons from coloured ingots or not:
CRAFTCOLOUREDWEAPONS=0/1 // If enabled(1), players can craft coloured weapons. Defaults to disabled(0)
Fixed an issue where the correct ingots were not consumed when attempting to craft items using colored ingots
Fixed a rogue debug message leftover in the scissor script
Missing the type to work with the hammer and tongs to use new menu (Dragon Slayer)
Added aliases for getting/setting colour via 'set hue # and 'get hue # (Dragon Slayer)
30/01/2022 - Dragon Slayer, Xuri
Added speech scripts for Wisps, Orcs, Lizardmen and Ratmen (Dragon Slayer)
Merged monster speech scripts into one common script (Xuri)
Extended monster speech script to allow monsters to respond to specific keywords (Xuri)
Extended monster speech script to allow monster speech to trigger from them being damaged, dying or performing a killing blow (Xuri)
Adjusted monster speech script's sentence building to allow wisps to have more than one-letter words, and also include word-enders such as exclamation marks, full stops, question marks (Xuri)
Added monster speech script (ID 3001) to all orc, lizardmen, ratmen and wisps in DFNs (Xuri)
Implemented Taste ID skill in JS (Dragon Slayer)
Extended Taste ID skill to provide some extra messages for potion-testing (Xuri)
Fixes for Animal Lore skill, with updates to dictionaries (Xuri)
24/01/2022 - Xuri (0.99.5a)
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 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 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
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 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
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)
Updated Provocation skill to disallow directing provoked creatures at targets with the custom tag provImmune present
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)
Fixed an issue where information on newly spawned characters would get sent twice to each nearby player
Changed default value of ACCOUNTFLUSH ini setting from 0.0 to 5.0 seconds
Misc minor cleanup of console messages during startup and shutdown
19/01/2022 - punt
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).
17/01/2022 - punt
Updated .gitignore, and removed redundant jaspi.h (use the one in spider monkey, no need to duplicate the header).
15/01/2022 - Xuri
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)
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)
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
Fixed a client crash caused by the admin welcome gump being too large!
Adjusted values of _ITERATOR_DEBUG_LEVEL and _HAS_ITERATOR_DEBUGGING in ConfigOS.h to better support debug mode in VS2022
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
12/01/2022 - Xuri (0.99.5)
Implemented Herding skill in JS (js/skill/herding.js) (Dragon Slayer)
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)
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)
Included new and revamped JS docs, and removed old, out-of-date legacy JS docs
10/01/2022 - Xuri (0.99.5[RC4])
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
Updated UOX3 documentation
08/01/2022 - Xuri (0.99.5[RC3])
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
Some minor updates to crafting related scripts
06/01/2022 - Xuri (0.99.5[RC2])
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
Added new crafting menu and create DFN entries for Cooking skill
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
01/01/2022 - Xuri (0.99.5[RC1])
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!
Updated getWeaponType() server script to support getting weapon type directly by ID instead of looking for item equipped by character
01/01/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)
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
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
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 )
19/12/2021 - Xuri
Fixed an issue where Socket JS Property .account did not properly return an object reference to the account associated with the socket
Added sound-effect for when lockpicks break (js/skill/lockpicking.js)
Cleaned up door-section of add-menu so only doors in their closed state remain (dfndata/items/building/doors.dfn)
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)
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
29/11/2021 - Xuri
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
27/11/2021 - Xuri
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
Added some missing dictionary entries
26/11/2021 - Xuri (0.99.4z+++)
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 Remove Trap script (js/skill/removetrap.js) to make use of GetMoreVar() and SetMoreVar methods
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 )
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 dungeon traps to 'add menu, under Buildings > Decs > Dungeon Traps
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.
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
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
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]
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
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
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
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)
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
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
02/11/2021 - Xuri (0.99.4z++)
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.
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.
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
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
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
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...)
31/10/2021 - Xuri (0.99.4z+)
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
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
Fixed issue where some iron ore in GM add menu was showing up and being added as a brazier instead
Added baseRange and maxRange to 'tweak menu (js/command/targeting/tweak.js)
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
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 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
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
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 dictionary files
28/10/2021 - Xuri
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 Healing script (js/skills/healing.js) would break because Math.Round() was used instead of Math.round() (Thanks, HeyYaNITO!)
Fixed an issue where players would experience higher than expected delays for firing ranged weapons after moving
26/10/2021 - Xuri (0.99.4z)
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
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
24/10/2021 - Xuri
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
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
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"
Fixed an issue where NPCs would be stuck not moving if they ended up trying to flee from non-existent targets
18/10/2021 - Xuri (0.99.4y)
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.
Added new Admin commands to enable/disable spawn regions in specific facets (note that this does not affect already spawned objects):
'enablespawns
'disablespawns
Updated CSpawnRegion::doRegionSpawn() function to only spawn objects in spawn region if world associated with spawn region is enabled in SPAWNREGIONSFACET uox.ini setting
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
17/10/2021 - Xuri
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
Updated JS Docs
12/10/2021 - Dragon Slayer
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
30/09/2021 - 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
Added a bunch of additional door IDs to js/item/doors.js and dfndata/harditems/harditems.dfn
Fixed a few issues with various dictionary files
27/09/2021 - Dragon Slayer
Split food2.dfn into new dfn files: cooking.dfn, vegetables.dfn, meats.dfn, fruits.dfn
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)
Updated dictionaries with cooking-specific messages (Xuri)
Finalized implementation of GetTempTag and SetTempTag (Xuri)
24/09/2021 - Xuri
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
Updated documentation with most recent changes to UOX.INI settings
Increased MAXBUFFER size for socket operations from 2560 to 4096
Minor code cleanup
22/09/2021 - Xuri
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 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)
Fixed two broken timer references in JS: Timer.SPELLRECOVERYTIME and Timer.LOYALTYTIME
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
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
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
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
21/09/2021 - Xuri (0.99.4x+)
Updated entry for Wisp in creatures.dfn to mark them as animals to stop monsters from attacking them (and dying)
Removed some debug messages from pixie_death.js
Fixed some lines of text in new 'add menu that would display incorrectly in regular UO client
Disabled tooltips for admin welcome gump; too much for regular UO client to handle
20/09/2021 - Xuri (0.99.4x)
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
Updated 'tweak and 'set commands to refresh item being modified if movable state of item changes, so the change is reflected in nearby clients
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
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 an issue with CustomTarget where the target message would not be displayed if the cursorType parameter was provided
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
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
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
Update stats, skills and loot for all currently implemented NPCs
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
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)
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 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)
Updated words of power for Meteor Swarm spell to follow the same logic as other spells using Kal (Summon): Kal Des Flam Ylem
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!
20/09/2021 - Xuri
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
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
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!
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 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.
Updated Item DFN entry for sextants to include script=5033 tag
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
}
Using bladed weapons on stacks of fish will now cut the entire stack at once, instead of one fish at a time
Updated DFN entries for various sea creatures (dfndata/npc/seacreatures.dfn) to adjust color of NPCs, loot and NPC AI
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
02/08/2021 - Dragon Slayer
Moved fishing skill out of code and into js for more user friendly control
Added js/item/magicfish.js for the magic fish food
08/08/2021 - Xuri
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
08/08/2021 - Xuri (0.99.4w)
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 various JS scripts to use the new Timer.TIMERNAME with .GetTimer()/.SetTimer() JS Methods for Characters and Sockets
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.
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
Reagent checks and skill-check now take place AFTER the spellcast animation, not before!
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
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
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
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
01/08/2021 - Xuri
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
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
01/08/2021 - 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.
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
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
01/08/2021 - Xuri
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)
Fixed an issue with NPC titles in paperdolls
31/07/2021 - Xuri
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.
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 type - IT_RUNEBOOK (49)
Added new item definition for Runebook ([runebook]) to dfndata/items/magic/misc_magic.dfn
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
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
Updated various JS item scripts to unhide characters when the items are used (Dragon Slayer)
29/07/2021 - Dragon Slayer
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
29/07/2021 - Xuri
Fixed some issues with whispers and yells (both server and client-sent ones)
Fixed an issue with EmoteMessage JS Method that didn't work with anything other than 5 arguments
Fixed a couple of incorrect client type comparisons (thanks, punt!)
Addressed issue from previous commit on trying to pass a String type on a vardiac function (punt)
Fixed a couple of other minor issues
Renamed Remove Trap skill in various locations in source and scripts from "removetraps" to "removetrap"
Fixed a bug where players logging out in locations other than "INSTALOG" areas from regions.dfn (Inns, basically) and other than the player's own house, were still able to logout and vanish instantly. Logout timer was not being set correctly
Players who are flagged as criminals or who are at war with someone else are now unable to logout instantly even in "INSTALOG" areas, and will remain visible to other players for the full duration specified in the LOGINTIMEOUT setting in UOX.INI
28/07/2021 - Xuri (0.99.4v)
Added JS command to reload dictionaries
'reloaddictionaries
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
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
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
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
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
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 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
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 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 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 OMNIVORE food list and assigned it to [basehuman] DFN section
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
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 NPC DFNs with default CONTROLSLOT=# tags
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
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
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
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
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 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
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 default dictionaries for the following languages: German, Spanish, Portuguese, Italian, Czech (note that translations have been provided by automatic services and will contain inaccuracies!)
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)
06/07/2021 - Xuri
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 )
Updated JS docs with some missing Functions/Methods
04/07/2021 - Xuri (0.99.4u)
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
04/07/2021 - Xuri
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
02/07/2021 - Xuri
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
30/06/2021 - Xuri
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=#
29/06/2021 - Xuri (0.99.4t)
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
27/06/2021 - Dragon Slayer
Added [hairrestyledeed] item that lets (human) players restyle their hair
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)
27/06/2021 - Xuri
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
23/06/2021 - Dragon Slayer
Added [interiordecorator] tool (dfndata/items/misc/uor_misc.dfn) that can be used to raise, lower or rotate locked down items in houses
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 system messages to dictionary files (Xuri)
Added interior decorator tool to Architect shoplists (Xuri)
23/06/2021 - Xuri
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
22/06/2021 - Xuri (0.99.4s)
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()
Updated GM command 'dupe to work with characters as well as items
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
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
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)
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.
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
20/06/2021 - Xuri
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)
17/06/2021 - Xuri
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
16/06/2021 - Xuri (0.99.4r)
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
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
Fixed an issue that snuck in with regards to fetching server setting for BLOODEFFECTCHANCE in JS engine
15/06/2021 - Xuri
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
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
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
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
13/06/2021 - Xuri
Some fixes to IP4Address code and output to console of which type of IP being listened (punt)
13/06/2021 - Xuri
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 missing world template file (js/jsdata/worldtemplates/felucca_containers.jsdata)
Fixed an issue with how UOX3 lists out IP addresses it's actively listening to (punt)
12/06/2021 - 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
12/06/2021 - Xuri
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
12/06/2021 - Xuri
Updated decorate command to support two additional object categories - containers and spawners - and the properties needed by these to function
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)
11/06/2021 - Xuri (0.99.4q)
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 )
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 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
11/06/2021 - Xuri
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?
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
Fixed an issue with getTileName() in uox3.cpp that could cause a server crash when fetching the names of certain items
11/06/2021 - Dragon Slayer
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
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)
04/06/2021 - Xuri (0.99.4p)
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)
04/06/2021 - Xuri
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)
04/06/2021 - Xuri
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)
03/06/2021 - Xuri
Cleaned up some warnings caused by 64 bit/32 bit difference between macOS and Windows (punt)
03/06/2021 - Xuri
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 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 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
01/06/2021 - Xuri
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
01/06/2021 - Xuri (0.99.4o)
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
Updated default DATADIRECTORY path in uox.ini to match current day default installation path of UO (thanks, dragonslayer!)
30/05/2021 - Xuri (0.99.4n)
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
28/05/2021 - Xuri
Unified duplicate tile/multi seeking code for HS/non-HS versions of tiledata & multis (punt)
Updated MsgBoardMaintenance() to use standard filesystem directory listing (punt)
27/05/2021 - Xuri
Replaced UOX_MIN and UOX_MAX with std::min and std::max (punt)
Moved StringUtility functions into a new namespace: strutil (punt)
25/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
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)
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
Updated JS docs with updated return value details for events
Updated UOX3 docs to latest version
07/05/2021 - Xuri (0.99.4l)
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)
Updated dfndata/house/house.dfn to include default MAXITEMS (125 items) and WEIGHTMAX (400 stones) values for boats
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.
07/05/2021 - 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
04/05/2021 - giwo
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)
03/05/2021 - Xuri
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
03/05/2021 - Xuri (0.99.4k)
Added layer=1 to spellbooks in dfndata/items/magic/misc_magic.dfn to allow NPCs to equip them (dragon slayer)
Fixed issue with wipe command (js/commands/targeting/wipe.js) not working because script was referencing wrong name for socket
Randomized initial position of items added inside containers via DFN tag PACKITEM
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
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.
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
Added additional teleport locations in teleport.scp for Dragon Turtle Spawn area, Khaldun, Terathan Keep, Valley of Eodon, Minax Fortress, Stygian Abyss, Underworld
Some minor fixes to regions.dfn - Name of Covetous dungeon, a set of coordinates for Ice Dungeon
28/04/2021 - Xuri
Reorganized teleport.scp file with logical groupings by map and area for easier maintenance
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)
27/04/2021 - Xuri (0.99.4j)
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)
27/04/2021 - Xuri
Fixed some missing icons in dfndata/creatures/creatures.dfn
Updated server status HTML template page (dfndata/html/online.htf) to match other templates
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)
26/04/2021 - Xuri
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)
26/04/2021 - Xuri
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 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)
25/04/2021 - Xuri
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)
24/04/2021 - Xuri
More UString instances replaced by std::string and associates (punt)
23/04/2021 - Xuri (0.99.4i)
Fixed an error in tweak command (js/commands/targeting/tweak.js) when attempting to use it on characters with no backpacks
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)
23/04/2021 - Xuri (0.99.4h)
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
Updated 'get command to allow retrieving a character's hungerRate property
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 )
Fixed invalid ID for items [0x0174] and [0x0175] in dfndata/items/building/walls/stone_walls.dfn
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)
19/04/2021 - Xuri (0.99.4g)
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!
17/04/2021 - Xuri
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
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 dictionary files with additional messages used in relation to banning/unbanning players
16/04/2021 - Xuri
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 '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 AI for AI_HEALER_G and AI_HEALER_E to check for multi-ownership and line of sight before resurrecting dead players
14/04/2021 - Xuri
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
13/04/2021 - Xuri (0.99.4f)
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)
08/04/2021 - Xuri (0.99.4e)
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
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
Fixed an issue where moving items around within a container at max item capacity was not allowed
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]
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
Added HP DFN tag to guard NPCs to prevent them from spawning with half health
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 );
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)
26/03/2021 - Xuri
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 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
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
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
Added optional Alchemy skill bonus damage modifier for explosion potions, defaults to 1 additional damage per 5 skillpoints
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
24/03/2021 - Xuri
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.
23/03/2021 - Xuri (0.99.4d)
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
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
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
19/11/2020 - Xuri (0.99.4c)
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
When marking recall runes, they will now get a hue reflecting the facet they were marked in (UOX3/js/commands/targeting/magic.js)
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
16/11/2020 - Xuri
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
15/11/2020 - Xuri
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
15/11/2020 - Xuri (0.99.4b)
Fixed an issue with NPC trainers where they would list incorrectly the available skills players could train
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)
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
Added a new command - 'cure - that can cure a targeted character of any poisons (UOX3/js/commands/targeting/stats.js)
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
14/11/2020 - Xuri (0.99.4a)
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
13/11/2020 - Xuri
Fixed an edge case with 'time command that would not display time correctly (UOX3/js/commands/time.js)
Updated UseDoor() JS function - now called UseItem() instead, and now supports both socket and character as first argument, to allow NPC use.
08/11/2020 - Xuri (0.99.4)
Updated version number and release changelog
08/11/2020 - Xuri (0.99.4[RC5])
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
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.
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)!
Updated UOX3 documentation with complete list of item types, and item layers, in addition to other small additions.
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
Added missing guildstone.js and playerVendorDeed.js
Another attempt at fixing a crash on shutdowns caused by encountering fatal errors
Updated JS Documentation
05/11/2020 - Xuri (0.99.4[RC4])
Fixed a server crash caused by container tooltip updates being attempted sent to invalid sockets in PlaceItem() function of items.cpp
04/11/2020 - Xuri (0.99.4[RC3])
Fixed an issue with tradetimestamp for houses
Fixed an issue with 'teleport and 'telestuff commands that could cause character to end up outside of map when using ClassicUO client
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!
Updated a bunch of .js files to use the proper .language socket property instead of the erroneous .Language!
04/11/2020 - Xuri (0.99.4[RC2])
Fixed some a couple of issues with compiling on Linux.
Committed missing js files for houses to repository!
04/11/2020 - Xuri (0.99.4[RC])
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= 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= 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= - 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:
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
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
Added new item to dfndata/items/containers/misc.dfn - [trashbarrel]
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
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 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
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
Re-added SPACEX and SPACEY values for Pentagram and Loom house add-ons
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
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
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 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!
Fixed an issue with repeating commands that prevented GMs from being able to cancel them when using the ClassicUO client
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 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!
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
Updated dictionary files with new messages primarily related to housing
19/10/2020 - Xuri
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
14/10/2020 - Xuri
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
Gave NPCs [f_murderer-archmage] and [m_murderer-archmage] some dexterity
05/10/2020 - Xuri
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
05/10/2020 - Xuri
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%
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
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)
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)
Updated dictionary files with various new strings related to mining
16/09/2020 - Xuri (0.99.3a)
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.
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 with "Gold" ore/ingot type, which was mislabelled as "Golden" in the ORE_LIST section of skills.dfn
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)
Adjusted default global NPC movement speeds in [speedup} section of uox.ini to use less extreme values
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
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 - Xuri (0.99.3)
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
09/09/2020 - Xuri (0.99.3-RC3)
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
08/09/2020 - Xuri (0.99.3-RC2)
Fixed grammar mistake in automake.sh that prevented compiling SpiderMonkey on MacOS (Xuri)
Updated readme with extended compiling details in spoiler tags (Xuri)
Undid static cast in jsapi.h (Xuri)
Fixed issue with two different versions of cPlayerAction.cpp with different case in name causing issues (Xuri)
The UOX3/shared/ directory will now be created automatically on startup if it doesn't already exist (punt)
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. (Xuri)
Moved automake.sh from source directory to project root, and made it copy binary to project root directory after compiling (Xuri)
07/09/2020 - Xuri (0.99.3-RC1)
Added new Makefile that handles compiling UOX3 and Spidermonkey on both Linux and MacOS (punt)
Added VS solution (SpiderMonkey.sln) and VC++ project files for compiling SpiderMonkey on Windows (Xuri)
Updated SpiderMonkey from v1.6.0 to v1.7.0
Added optimization flag -O2 for release build in CMakeLists.txt in project root (Xuri)
Added StringUtility file with general common string manipulation functions (punt)
Updated RandomNum function to use a "seedless" random number generator from C++11 instead of the old C rand() function. (punt)
Overall code cleanup to remove/replace platform-dependent code (punt)
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. (punt)
Replaced usage of char in many places with std::string (punt)
Started process of replacing UString usage with functions provided through StringUtility instead (punt)
Replaced platform specific fileIO handling in Windows/Linux with cross-platform C++17 standard std::filesystem (punt)
Replaced platform specific time handling by using cross-platform chrono library (punt)
Removed UOX namespace to reduce complexity (punt)
Elimitated template code approach to singletons for more modern c++ constructs, removing dependices in the process (punt)
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. (punt)
Removed some platform specific files like uoxlinux.h, which is no longer required (punt)
Removed legacy crash protection code, and removed support for cluox (punt)
Removed legacy "support" for Borland compiler (punt)
Removed legacy VC++ 6 Workspace/Project files, VS2005 Solution/Project files, as these are no longer supported (Xuri)
Removed legacy BUILD folder with outdated compilation instructions (Xuri)
Removed old Changelog file (merged into Changelog.txt) (Xuri)
Fixed a pointer bug for items in multis on world load (punt)
Fixed a dictionary related issue that caused segmentation faults on Linux/MacOS (punt)
Fixed an issue with callbacks to JS scripts that caused segmentation faults on Linux/MacOS (punt)
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. (punt)
Moved to c++17 style of threading, and got rid of threadsafeobject.cpp/h (punt)
Replaced parsing of UOX.INI tags with a system that's more easily maintainable (punt)
Added some new commands to js/commands/custom/misc-cmd.js (Xuri)
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)
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 (Xuri)
26/08/2020 - Xuri
Misc code cleanup to reduce amount of warnings and increase cross-platform compatibility
Removed Platform.h from project, select portions moved to Config.h
24/08/2020 - Xuri (0.99.2p)
Improvements to handling of UOP format; now takes a cleaner approach, loads files faster (punt)
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)
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
Expanded XGO command in JS/COMMANDS/TARGETING/x.js to support optional world and instance parameters
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
21/08/2020 - Xuri (0.99.2o)
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 (punt)
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.
15/08/2020 - Xuri
Updated healing.js to disallow usage of healing skill if target is in a house/multi not owned by either healer or healee
Fixed broken starting locations in UOX.INI
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
14/08/2020 - Xuri (0.99.2n)
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 (thanks, punt!)
13/08/2020 - Xuri
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
12/08/2020 - Xuri
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
11/08/2020 - Xuri
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
Updated dictionary files with new entry about blocking attacks using parrying skill
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
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)
Added missing UOX.INI settings for feature negotation, as mentioned in previous commit!
11/08/2020 - Xuri
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
}
08/08/2020 - Xuri (0.99.2m)
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
Updated JS scripts making use of the above-mentioned JS Methods/Functions
Updated dictionaries with new tweak menu entry texts
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
05/08/2020 - Xuri (0.99.2l)
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)
Updates keys.js with some distance checks
Misc updates to JS Docs
06/07/2020 - Xuri (0.99.2k)
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
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
16/06/2020 - Xuri
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 )
13/06/2020 - Xuri
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
02/06/2020 - Xuri (0.99.2j)
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)
26/04/2020 - Xuri
Updated vcx project files
Added UOX3 CMake build system for Windows (tuanhtrng)
Updated repository readme to include build instructions for CMake
20/04/2020 - Xuri
Preparation for dragging UOX3 kicking and screaming into the 64bit Century (punt)
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 (punt)
Cleaned up some warnings (punt)
18/04/2020 - Xuri
Added c++17 flag to configure.ac
17/04/2020 - Tuan H Truong
CPU neutral fix
Die parser rewritten and fuzzed, replaced with cxx17 features
12/04/2020 - Xuri (0.99.2i)
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
07/04/2020 - Xuri
Fixed an issue that prevented VALUE tags from being loaded properly from worldfiles, which broke persistent NPC vendors on server restart
24/11/2019 - Xuri (0.99.2h)
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
23/09/2018 - Xuri (0.99.2g)
Corrected name of spell JS property AGRESSIVESPELL to AGGRESSIVESPELL
Updated clumsy.js and level1targ.js with corrected names for aggressiveSpell and canCastAggressive JS properties, and added checks for isSafeZone region JS property
Commented out hardcoded versions of spells that have been ported to JS
22/09/2018 - Xuri (0.99.2f)
Some more code cleanup
Documented temp effect cases in code
Added SETAMMOEFFECT, SETAMMOTYPE, GETAMMOEFFECT, GETAMMOTYPE, REGIONINFO and XREGIONINFO commands to misc-cmd.js
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 pUser/pSock reference error in misc-cmd.js for command_BROWSE (Kitiara)
Moved Create Food spell out to JavaScript
21/09/2018 - Xuri
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
20/09/2018 - Xuri
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
19/09/2018 - Xuri
Resolved an issue with uninitialized struct members
Removed some redundant conditional checks
Made the boolean part of JS function RegisterSkill( , ) 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
18/09/2018 - Xuri
Fixed an issue with potentially undefined behaviour, where sprintf was being used with a single variable as both parameter and destination.
17/09/2018 - Xuri (0.99.2e)
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
Updated potion.js, provocation.js and enticement.js to check for safe zones
Updated spells in spells.dfn to include aggressive and resistable flags
Updated dictionaries with safezone message
13/09/2018 - Xuri (0.99.2d)
Updated version number to 0.99.2d
12/09/2018 - Xuri
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
07/09/2018 - Xuri
Fixed tooltips on containers not updating when adding/removing items
12/09/2015 - Xuri
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
10/11/2013 - Xuri (0.99.2c)
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
14/11/2012 - Xuri (0.99.2b+)
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
04/11/2012 - Xuri (0.99.2b)
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 - Xuri (0.99.2)
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
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 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 some incorrect values for WEIGHT-tags in dfndata/items/gear/armor/base_armor.dfn
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
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
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()
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
The MINECHECK uox.ini setting now defaults to 1 (mountains/caves/rocks only)
25/10/2012 - Xuri
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
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)
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)
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
Corrected weight of iron ingots in dfndata/items/skills/resources/smithing.dfn - they should now weigh 1 stone (weight=100) each.
31/03/2012 - Xuri
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
24/03/2012 - Xuri
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... ); //
Added missing script=5021 tag to the bedroll in DFNDATA/ITEMS/GEAR/provisions.dfn
Added some script-crash protection in JS/ITEM/bedroll.js
21/03/2012 - Xuri (0.99.1)
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 "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 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
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
Updated JS/ITEM/axe.js to use CreateDFNItem instead of CreateBlankItem to create new logs
Submitted some updates to some DFN/JS-files that had somehow not been committed to the CVS properly
20/03/2012 - Xuri
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
19/03/2012 - Xuri (0.99)
Fixed various errors in JS/MAGIC/level1targ.js
Added support (but no functionality) for Spellweaving, Imbuing, Mysticism and Throwing skills in code and skills.dfn)
Updated kindling.js and added bedroll.js (original by dragon slayer, rewritten by Xuri) to support secure logouts from camping
Updated dictionary-files with new system messages related to the camping-skill
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
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)
Updated JS/ITEM/food.js so bowls, plates, etc will be left behind instead of eaten along with the food (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
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 additional deed/boat-model IDs to "modelmulti"-list in DFNDATA/ITEMS/itemtypes.dfn to make these usable as house/boat-deeds
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).
Added three new sections to DFNDATA/NEWBIE/newbie.dfn - [DEFAULT ELF MALE], [DEFAULT ELF FEMALE] and [DEFAULT ALL]
Added item and character-direction to ISTATS and CSTATS commands in JS/COMMANDS/TARGETING/gumps.js
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
Fixed an issue with JS/NPC/AI/stablemaster.js where, in specific circumstances, claiming stabled pets by name didn't work
Nearby pets will now teleport along with their owner into/onto houses/boats when those are placed
Fixed some cases in JS/MAGIC/clumsy.js where it tried to send sysmessages through sockets, to NPCs - who have no such thing
Added torches to ProvisionerShopping shoplist in DFNDATA/ITEMS/shoplist.dfn
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
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!
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 support for INVISIBLE tag for house-items in DFNDATA\HOUSE\house.dfn. Allows adding invisible items to houses.
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)
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 the SA-specific map (map5.mul - Termur) to DFNDATA/MAPS/maps.dfn
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
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)
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 in mapstuff.h and in cDice.cpp to fix a compiling issue in Linux
Updated some JS Console Methods in JS/COMMANDS/consoletest.js
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
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 read-only books (setup through DFNDATA/MISC/books.dfn) by updating the MORE dfn-tags in DFNDATA/ITEMS/MISC/books.dfn
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 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
Added code to shut down UOX3 (instead of crashing later on) if it fails to load any regions from region DFN scripts
Changed all references to MAP in DFNDATA/REGIONS/regions.dfn to WORLD (which unlike MAP is actually read by UOX3 in this file)
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
Added layers to DFNDATA/ITEMS/MISC/jewelry.dfn (dragon slayer)
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 House-gump in DFNDATA/MISC/gumps.dfn (dragon slayer/Blue Dragon)
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)
Added MAPUOPWRAP tag to DFNDATA/MAPS/maps.dfn - only used by clients 7.0.24+
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 " phrases.
Corrected coordinates for REGION 75 (Destard)
Disabled detection of keypress "0" in JS/CONSOLE/console.js so UOX3 will actually reload all scripts when pressing 0
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
Added numerous creatures to DFNDATA/CREATURES/creatures.dfn, though some only have placeholder icons and sounds.
Updated various UOX3 documentation (installation, configuration, server-settings, JavaScript docs)
14/12/2011 - Xuri (0.98-4.0i)
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 onBoughtFromVendor JS events to pet-statue scripts in JS/NPC/PETS/ to automagically turn statues into live pets immediately after being bought
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 AMMO and AMMOFX tags to ranged weapons in archery.dfn, aos_weapons.dfn, se_weapons.dfn and baseitem.dfn
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 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 some incorrect scriptIDs for lightsources in jse_fileassociations.scp and jse_objectassociations.scp
Fixed broken smithing of agapite items due to duplicate item-numbers between agapite and gold crafting DFNs (DFNDATA/CREATE/smithing_agapite.dfn)
Fixed 'SETRACE command, no longer tries to use non-existing method to set character's race (JS/COMMANDS/setrace.js)
Fixed some confusion with how vendor buy/sell backpacks were handled internally in code
Fixed an issue where onCreate JS scripts would not run for duped items
Updated dictionary-files with some more messages, including a missing systemmessage used to inform of remaining amount of lockdowns in houses
Changed MAX_NAME to a 128 byte limit to support long item names.
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.
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)
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)
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)
2/7/2010 - Xuri (0.98-4.0h)
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)
Removed lines from add.js that set decayable as true or false (except for spawners), default decay now handled by ini-settings
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 DIR values to all .js files in JS/SERVER/LIGHT/ folder, enabling players to turn on/off lightsources
2/3/2010 - Xuri
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)
Fixed an incorrect name-entry in namelists.dfn (Puck)
2/1/2010 - Xuri (0.98-4.0g)
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 movable=2 and weight=50000 to Base_spawner-definition to make it impossible for players to steal them
2/1/2010 - Xuri (0.98-4.0f)
Added script for Dice and Cup-item, which lets players use said item to...(drumroll, please)...roll dice!
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)
1/31/2010 - Xuri (0.98-4.0e)
Added DEF values to standard clothing, footwear and headwear
Minor fix to JS/COMMANDS/TARGETING/add.js which ensures that the script won't break under some very specific circumstances
System-message rapporting how many ingots player gets when smelting player-made items should now rapport correct amount
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
Crafting system can now handle MAXRANK values up to 255
1/30/2010 - Xuri
Fixed an issue with sword.js which stopped you from carving shafts/kindling from a single wooden log
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
Added missing pickpocket-dummy entries to jse_objectassociations.scp
Added decayable = false to freeze command in misc-cmd.js
Did some minor updates to the JavaScript Documentation
Did some tweaks to some tailoring js-files to make spinning wheels stop breaking if global onCreateDFN script is present
Removed erroneous DEF values from leather.dfn, studded_leather.dfn and bone.dfn - should use values from base_armor.dfn
1/29/2010 - Xuri
Fixed an issue that caused NPC shopkeepers to get overloaded by the weight of items in their shop-layers
Fixed an incorrect entry in namelists.dfn
1/28/2010 - Xuri (0.98-4.0d)
Fixed a servercrash that occured when server tried to regrown wool on shorn sheep that were dead
1/24/2010 - Xuri
Added definition of 0x1EB9 as a Tinker Tool in jse_objectassociations.scp
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
11/08/2009 - Xuri
Added support for LOOT and PACKITEM dfn tags in item-defintions, for pre-adding items to containers (Shudderz)
5/11/2009 - Xuri
Fixed client/server synch-issue with boats by changing prSend( 1 ) to prSend( 0 ) in boat movement code (Jediman)
Added stablemaster JS-script and assigned it to the animal-trainer vendors (Xuri)
Available commands: claim (list|pet-name), stable
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 support for bamboo flute in musicianship/enticement/peacemaking JS-scripts (dragon slayer)
Added entries for bamboo flutes in DFNDATA/ITEMS/SKILLS/MISC/music_instruments.dfn (Xuri)
Added bamboo flute to GM-menu under music instruments, and entries in jse_objectassociations.dfn (Xuri)
Added new JS-script for bolas - JS/ITEM/bola.js (dragon slayer)
Added entry for bola in a new DFN file: DFNDATA/ITEMS/GEAR/WEAPONS/missile_weapons.dfn (Xuri)
Added entry for bola in jse_objectassociations.dfn (Xuri)
3/22/2009 - Xuri (0.98-4.0c)
Fixed travelling by recall spell or magic gate between worlds
Fixed Jailing and Releasing players in worlds other than world 0
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
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)
2/01/2009 - Xuri
Updated trainingdummy.js and pickpocketdip.js with code that will auto-fix them should their timers ever break
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
1/19/2009 - Xuri
Automatic worldsaves can now be disabled by setting SAVESTIMER in UOX.INI to 0
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 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
1/19/2009 - giwo (0.98-4.0b)
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).
1/18/2009 - giwo
Moved the magic scroll handling from cPlayerAction.cpp out to JavaScript (items/magicscroll.js)
Fixed a bug with the JS Method Char.CastSpell() where it never returned a value to the calling script.
1/18/2009 - giwo (0.98-4.0a)
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
1/17/2009 - giwo
Fixed the handling for the UOX ini tags OVERLOADPACKETS and DARKLEVEL
1/17/2009 - giwo
Possible fix for clients > 6.0.5.0.
1/16/2009 - giwo (0.98-3.7v)
Implemented 0xBD CPClientVersion packet to request the version from the client.
12/16/2008 - Xuri
Fixed a bug that prevented players from picking up/moving items in their own backpacks
Oct 12, 2008 - Maarc
Bug fix on GetColumn JS implementation
Error checking on statement indexes in GetColumn() in ODBCManager
Oct 12, 2008 - Maarc
#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
7/27/2008 - Xuri
Entry for ScriptID added to 'CSTATS, 'ISTATS and 'TWEAK menu
Fixed an erroneous example in JavaScript Docs
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
7/16/2008 - Xuri
TWEAK now works for any admin character, no matter their commandlevel (gumps.cpp)
The onPickup JS-event should now work
Updated onPickup JS Event in Javascript Documentation
7/03/2008 - Xuri
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)
Updated onFall JS Event in Javascript Documentation
7/02/2008 - Xuri
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
Updated dictionary files with two new system messages
Added a check to the 'POLY command to prevent characters from polymorphing into an invalid, client-crashing id (0x20)
6/22/2008 - giwo
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=
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
6/22/2008 - giwo (0.98-3.7t)
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.
6/22/2008 - Xuri
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
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()
Updated UOX3_changelog.txt in the Docs-folder to include updates up to 0.98.3-7
6/21/2008 - giwo
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
6/21/2008 - giwo (0.98-3.7s)
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
6/21/2008 - giwo
Fixed several issues with tracking.
Fixed a crash caused by passing an invalid object to the JS Method TurnToward
6/20/2008 - giwo (0.98-3.7r)
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.
02/16/2008 - Xuri
Made magical shortbows and elven composite bows fire arrows instead of crossbolts
10/27/2007 - grimson
Split onUse into onUseChecked and onUseUnChecked.
10/09/2007 - Xuri
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
9/08/2007 - grimson
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.
9/07/2007 - grimson
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.
8/26/2007 - grimson
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.
8/12/2007 - grimson
Use an enum for racial relations, should help with reading the code.
Fix a bug where racial allys would attack each other.
7/28/2007 - grimson
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.
7/23/2007 - giwo (0.98-3.7q)
Added support for updated UOKR packets.
7/17/2007 - Xuri
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
Removed duplicate spyglass entries in item-DFNs, and added script tag for new spyglass 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
6/12/2007 - giwo (0.98-3.7p)
Added the JavaScript CSocket methods FirstTriggerWord(), NextTriggerWord(), FinishedTriggerWords() to allow handling trigger words sent from the client during speech.
6/10/2007 - grimson
Fix reading of the new SPEED DFN tags for NPCs.
6/10/2007 - grimson
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.
6/10/2007 - grimson
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.
6/08/2007 - Xuri
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.
5/26/2007 - giwo (0.98-3.7o)
Fixed a couple crashes caused by targeting non-PC's in the PartySystem.
5/25/2007 - giwo (0.98-3.7n)
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 door.js allowing a locked door without an associated key to always be openable.
5/20/2007 - Xuri
Added teleport locations for Malas and Tokuno to moongate.js, and added configuration values at top of script
5/19/2007 - Xuri
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 # / commands
Added new script (bankcheck.js) that handles the functionality of bank-checks
Assigned script 3201 to bankers, and removed NPCAI=8
Changed mapdefinitions (maps.dfn) for Trammel to map1.mul, statics1.mul and staidx1.mul
5/18/2007 - grimson
Make sure we check for scripts envoked by type or id before we use the global script.
4/09/2007 - grimson
Remove some not needed code and slow fleeing NPCs a bit down, so that other chars
can still catch up with them.
4/09/2007 - grimson (0.98-3.7m)
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.
4/08/2007 - grimson
Fixed a bug where we dropped the hair and beard items, from corpses, on the ground.
3/31/2007 - grimson
Added elven hair styles to the dfns.
3/30/2007 - grimson
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.
3/30/2007 - grimson
Fixed the position of the coprse item when the char died falling forward.
3/30/2007 - grimson
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.
3/26/2007 - grimson
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.
3/24/2007 - grimson
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.
3/3/2007 - giwo (0.98-3.7l)
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
2/21/2007 - giwo
Committed some linux build error fixes on behalf of Cavalier
2/11/2007 - grimson
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.
2/11/2007 - grimson
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.
2/10/2007 - grimson
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.
2/10/2007 - grimson
Update the CPWalkOK Packet (0x22), the second byte contains the notoriety value (flag
color) and make use of it.
2/08/2007 - grimson
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.
2/01/2007 - grimson
Remove remains of the time command from command.dfn.
1/28/2007 - giwo (0.98-3.7k)
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.
1/25/2007 - giwo (0.98-3.7j)
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.
1/25/2007 - giwo (0.98-3.7i)
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.
10/29/2006 - grimson
Fixed %tstamp output in the HTML templates.
10/14/2006 - grimson
Added more details to the weapon tooltips.
9/28/2006 - grimson
Change cMagic::SelectSpell() to first check for reagents and then for skill.
9/27/2006 - grimson
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.
21st September, 2006 - Maarc
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!
20th September, 2006 - Maarc
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
9/10/2006 - Xuri
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
8/29/2006 - Xuri
Fixed several issues with the UseResource JS Method (maarc)
UseResource JS Method can now be used with both items (containers) and characters (maarc)
8/12/2006 - giwo (0.98-3.7g [3.8 BETA])
Changed item limit in create dfn down to 4,999 to fix a bug in gump handling.
8/12/2006 - Xuri
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)
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.
8/11/2006 - giwo (0.98-3.7f [3.8 BETA])
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.
7/24/2006 - giwo (0.98-3.7e [3.8 BETA])
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.
7/19/2006 - Xuri
Made onResurrect trigger before a resurrection instead of after, added option to override hard code by returning false
Updated JavaScript Documentation to 0.44, and added missing commands to command list
Added "ARMOUR" as an alternate spelling used along with the 'SET command
7/18/2006 - giwo (0.98-3.7d [3.8 BETA])
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.
7/17/2006 - Xuri
Added new command (rndtile.js) that allows tiling random items of a specific hue at a specific height
Syntax: 'RNDTILE (optional) (optional)
7/15/2006 - giwo (0.98-3.7c [3.8 BETA])
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).
7/10/2006 - giwo (0.98-3.7b [3.8 BETA])
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.
7/09/2006 - giwo (0.98-3.7a [3.8 BETA])
Fixed an issue causing JS gumps to interfere with eachother.
Fixed an issue causing serial numbers in the istats gump to display improperly.
7/08/2006 - giwo (0.98-3.7)
Updated version to 0.98-3.7
7/07/2006 - Xuri
Modified damage output of summoned creatures in magicsummon.dfn, as they were too powerful
The owner of two pets/summoned creatures will no longer become a criminal if the two pets/creatures fight
Summoned creatures (and normal ones) will no longer cast Blade Spirit/Energy Vortex, as they caused flagging errors
7/07/2006 - Xuri (0.98-3.6j) [3.7 RC2]
Added scripted version of keys (now used instead of hardcoded ones), plus working keyrings
Updated doors-script to make use of new scripted keys/keyrings as well as the new TextMessage arguments
Added script=5013 (key.js) to [base_key] in dfndata\items\misc\keys.dfn
Ghosts will no longer re-enter combat-mode if they speak while already in combat-mode
Removed CombatWalk flag sent to ghosts when they talk, as player ghosts have no combat animations
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)
7/06/2006 - giwo (0.98-3.6i) [3.7 RC]
Combined CChar:: emote(), emoteAll(), talk(), and talkAll() into a single function TextMessage().
Renamed CItem itemTalk() to TextMessage() and modified it so passing a NULL socket sends the message to nearby players.
Added two new optional parameters to JS method TextMessage(). allHear (defaulting to true) and txtHue.
7/05/2006 - grimson
NPCs can now walk through player ghosts.
Player ghosts are only visible when they are in war mode and they will enter war mode
when they speak.
7/02/2006 - giwo
Fixed an issue causing several item values not to be saved.
Updated doors.js to not display the "blocked" message if the door ID isn't recognized.
7/02/2006 - giwo (0.98-3.6h) [3.7 RC]
Removed door.cpp from the project.
Modified the JS UseDoor() function to call the JS Event onUse() based upon the type of the item passed in.
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.
Modified TriggerEvent() to return true or false based upon the return value of the function.
Moved doors out to JS.
7/01/2006 - Xuri
New "AI"-Script: Cows may now (randomly) defend themselves from doubleclicks by falling over.
Corrected various errors with liquid-containers (pitchers, bottles, goblets, etc.)
7/01/2006 - grimson
Added new tag "MOUNTID" to creatures DFN, if this is set to the ID of a mount item the creature will
be mountable.
Updated creatures.dfn to make use of the MOUNTID tag.
Removed CChar::IsValidMount( void ) as it is no longer of any use.
6/30/2006 - grimson
Fixed a bug that caused the offline HTML files not to be written in some cases.
Catch Serverlist entrys with less than 3 sections, these caused a crash when parsing the ini.
Added %24time and %tstamp to HTML templates, %24time return the current time in the 24 hour
format, %tstamp returns a unix timestamp.
6/29/2006 - grimson
Let chars run if they follow a running char.
6/27/2006 - grimson
Allow the body id to reach 0x3E2, so that the "dupre" body can be used without a problem.
6/27/2006 - grimson
Changed cMagic::SummonMonster() so that it creates summoned from DFN entrys to make it easier to
customize them.
Added magicsummon.dfn to the npc section, it contains the dfn entrys for the creatures that can
be summoned.
6/26/2006 - grimson
Added an entry to jse_fileassociations.scp for the new oilcloth.js script.
6/26/2006 - giwo (0.98-3.6g) [3.7 RC]
Fixed an issue causing not every instance of skill gain to use the amountToGain specified in skills.dfn.
Changed MAX_NAME back to a 60 byte limit (note some Character packets only support 30 bytes).
Moved CChar::lockstate and atrophy into PlayerValues_st
Cleaned up CSkills::Atrophy and renamed it to HandleSkillChange() to better reflect it's functionality.
6/25/2006 - Xuri
Updated fishinglist.dfn with generic loot (paintins, weapons, gems, various flotsam)
Updated create/tailoring.dfn, items/gear/provisions.dfn and items/itemmenu.bulk.dfn with new oil cloth
Fixed the 'STAMINA command in stats.js. Had ".isChar" misspelled as ".isCHar"
Added new JS-script: oilcloth.js - Functional oil cloths, used for cleaning poison off of weapons
Character can no longer use locked down potions or food
6/25/2006 - grimson
Fixed loading of tempeffects when there is more than one effect saved.
Increased the damage values of summoned creatures a bit.
Fixed magic field effects.
6/25/2006 - grimson
Fixed the output of the time command, it was confusing midnight and noon.
6/25/2006 - Xuri
Characters no longer turn criminal from attacking their own pets/summoned creatures
DFN: Updated spells.dfn with correct reagent requirements
Fixed several bugs with the JS-scripted clumsy, heal, feeblemind and magic-arrow spells:
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
6/24/2006 - grimson
Fixed two bugs in doLight() where we were sending the wrong light level to players.
6/23/2006 - grimson
Changed the way the owner of an object is stored to use the serial of the owner.
6/23/2006 - grimson
Changed checkPetOfflineTimeout() to ignore player vendors.
Remove tempeffect number 44 as it is no longer used.
6/23/2006 - grimson
Don't let normal players put items into the backpack of a player vendor they don't own.
6/22/2006 - giwo (0.98-3.6f)
Fixed an issue causing a crash if a null socket was passed to JS CreateBlankItem() or CreateDFNItem().
Fixed an issue causing houses not to be able to be placed in many valid locations.
Reduced the checking area when placing a house around small houses in house.dfn
Fixed an issue causing boats to always be placed at z -5 regardless of the water level.
6/22/2006 - grimson
Don't add the weight entry to the tooltip of items that weight nothing.
The "collect" command now also works when using the name of the vendor.
6/22/2006 - grimson
Added the "view", "status" and "dismiss" commands for player vendors (updated dictionaries).
Allow pet friends to mount the pet.
6/22/2006 - grimson
Fixed a few places where looking into a pack from a player vendor would have been snooping.
Added price and description information to the item tooltips of player vendors.
DFN changes:
Added a player vendor deed to misc_deeds.dfn.
Put the player vendor deed into the add menu.
Changed the player vendor entry in the malevendors.dfn so that they are no longer
flagged as normal shoopkeepers.
6/20/2006 - giwo (0.98-3.6e)
Updated the Makefile.am.
Fixed an issue causing items to duplicate when moving around stacks larger than 32,767.
Fixed an issue causing timers not to be properly reset by the JS engine.
Fixed a DFN issue causing one to be able to create a board from a board.
Fixed a DFN issue causing item values to be loaded improperly.
6/15/2006 - giwo (0.98-3.6d)
Modified names in the AITypes enum to fit naming conventions.
Minor optimizations in ai.cpp.
Removed an unused worldsave tag handler from CBaseObject.
Modified names in the CommandLevels enum to fit naming conventions.
Modified FLAGS and SOUNDFX DFN tags in spells.dfn to allow for a full integer as well as the current split format.
Simplified some functions in CPacketStream.
Changed MAX_NAME back down to 30 characters as all character name packets sent to the client max out at 30 bytes.
Made more use of IsWeightedContainer() in weight.cpp to streamline layer handling.
5/22/2006 - Xuri
Added weapon type classifications for all weapons from the mondain's legacy expansion
5/14/2006 - grimson
Fixed the "Large Dragon Boat" deed.
5/07/2006 - giwo (0.98-3.6c)
Forced CItem::DecayTime to reset when decayable was set to true.
Fixed an issue causing keys not to function on planks.
Added JS socket methods GetSByte(), GetSWord(), GetSDWord(), to allow pulling negative numbers
from the socket buffer.
5/02/2006 - Xuri
Fixed the ever-swinging training dummies
Fixed wrong item being added when crafting fishing poles
4/22/2006 - Xuri
Fixed the guardzone for Delucia, was previously set to the graveyard north of the town
4/18/2006 - Xuri
Items added using the RADD command in repeatingcmds.js will no longer decay by default
Fixed the guardzone for Ocllo, X2 and Y2 were mixed up
4/07/2006 - 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.
4/07/2006 - grimson
Don't add the amount of items to the item name in buy/sell gumps, as it is already
shown in the gump.
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.
DFN Changes:
Added GOOD tags to buyable items, so it's easier for an admin to use the
advanced trade system.
4/06/2006 - grimson
Fixed saving of the last used IP in the account files, and corrected the naming
for the contact field when saving the account files.
4/06/2006 - giwo (0.98-3.6b)
Fixed an issue with accounts causing the FLAGS value not to function properly.
Consolidated some code in CAccountsClass.
Fixed some signed/unsigned mismatches in CAccountsClass.
Modified Combat DEF calculations to remove superfluous code.
4/06/2006 - grimson
Updated potion.js, so heal potions work again.
4/06/2006 - grimson
Catch some more client crashes with speak, that's in the wrong colour.
Update the reputation flags of a NPC when the NPCFlag get's loaded.
DFN Changes:
Pushed up the damage values of most NPCs.
4/06/2006 - giwo (0.98-3.6a)
Fixed a rather substantial issue causing some character values to save incorrectly.
Fixed a sign mismatch with GuildFealty.
4/05/2006 - grimson
Changed the use of the HP DFN tag for items so you can specify a range for a random value.
DFN Changes:
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.
4/04/2006 - giwo (0.98-3.6)
Removed unused level value passed with Console.Warning() and Console.Error().
Removed JS Console prop .level
Modified JS Console Methods Warning() and Error() to remove the unused level value.
Fixed several issues with mapdiff and staticdiff handling.
Fixed a bug causing a crash when calling JS Event onGumpInput.
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.
Removed many superfluous uses of CChar::Dirty( UT_STATWINDOW ).
3/23/2006 - giwo (0.98-3.5o [3.6 RC])
Minor changes to cSkills::Fish().
Fixed an issue making it impossible to open Elven NPC paperdolls.
Removed some typedefs that were no longer used.
Moved CChar values townpriv and townvote to PlayerValues_st
Moved CChar values foodList, hungerWildChance and hungerRate to NPCValues_st
Removed CChar::inBuilding in favor of using a bools flag.
Removed handling code for several unused Character values.
3/23/2006 - 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.
3/22/2006 - grimson
Small fix to ApplyDamageBonuses() caused by my previous commit.
3/22/2006 - grimson
Removed the code to raise your resistance value upon elemental damage, this can be done better in JS.
Modified CBaseObject::DumpBody() and CBaseObject::HandleLine() so that all resistance values get saved
and loaded in/from the worldfiles.
Added a new JS event:
onDamage( damaged, attacker, damageValue )
This will be fired everytime the char "damaged" gets damaged, the attacker can be a char or NULL.
3/21/2006 - grimson
Changed the return value of OnCombatDamageCalc() to a SI16, I accidentially declared it to
be a SI32.
Replaced the JS Char property .defense with the new JS Char Method:
mChar.Defense( hitLoc, damageType, doArmorDamage );
so you can get all the different defense values for a char.
3/21/2006 - 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.
Added a new JS event:
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.
3/21/2006 - grimson
A small fix to ApplyDamageBonuses(), the race damage of a weapon was applied to the final
damage instead of the weapons base damage.
3/20/2006 - giwo
Fixed a glitch in the CPExtendedStats packet.
Modified CPIPopupMenuSelect to prevent opening the paperdoll of a non-human.
3/20/2006 - giwo (0.98-3.5n [3.6 RC])
Fixed an issue with CPExtendedStats causing statlocks not to display in the stat window.
Modified CChar::skilllocks and atrophy to save stat values to the worldfile.
Fixed an issue with CChar::skill value causing possible data corruption.
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).
Made CBaseObject::SetWeight() a virtual function and overloaded it in CChar and CItem.
Modified CChar::SetWeight() to automatically Dirty our object for a statwindow update.
Simplified some DropItem() handling.
Moved CBaseObject updateTypes to CChar as there is only one type of item update, and added
a ClearUpdate() function to reduce superfluous packet sends.
3/20/2006 - grimson
The JS item property .devinelock was sent as INT though it is a bool.
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.
3/19/2006 - grimson
Renamed Get/SetElementResist() to Get/SetResist as we now handle all resistance types in it.
Removed SetDef(), GetDef() and the def variable from CBaseobject.cpp and store armor values
as physical resistance together with the other resistance values.
Removed calcElementDef(), getElementDef and checkElementDef from combat.cpp and handle all
defence calculations in calcDef(), getArmorDef() and checkDef().
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.
JS changes:
Updated JS scripts to use the new .Resist() method instead of .def/.armour
Current resistance types are:
1 - Armor
2 - Light
3 - Water
4 - Cold
5 - Heat
6 - Energy
7 - Poison
3/19/2006 - giwo (0.98-3.5m [3.6 RC])
Moved create menu structs to skills.h as they don't need to be in global scope.
Fixed several issues with pack horse handling
Modified DropOnNPC so GM's can drop items directly on an NPC to be placed in their pack.
Modified response handling and removed some superfluous code.
Fixed a crash when UOX3 shut down due to an invalid directory entry.
Locally declared vector3D line2D and line3D as they are only used in lineofsight.cpp
Fixed water NPC's swimming under statics (bridges).
Fixed some false positives that were being generated by point3::Mag3D() by using a larger storage container.
3/18/2006 - giwo (0.98-3.5l [3.6 BETA])
Fixed an issue causing GM yell messages with trigger words in them not to be broadcast.
Added and made use of a WanderTypes enum throughout the source.
Added housekeys.dfn to dfndata/items/ and made house creation rely on the script entries therein.
Optimized NPC walking a bit, and moved NPCWander handling into its own function.
Further updated and modified calc_walk() and AdvancedPathFinding() to handle the Z plane.
Removed CMovement::HandleRegionStuffAfterMove() as it was superfluous.
Rewrote CMovement::OutputShoveMessage() to fix several minor issues.
Updated CMovement::MoveCharForDirection() to reduce extra function calls and make use of CMapHandler::ChangeRegion()
Added NEWBIE option to JS SET command.
3/18/2006 - grimson
Fixed CHandleCombat::calcDamage() I was submitting the base damage to the defense calculation.
3/18/2006 - grimson
Another change to CChar::Damage(), if the attacker becomes criminal make the owner of it
criminal too.
Changed CHandleCombat::ApplyDamageBonuses() so that elemental damage is doubled when the
race is weak to that element, also double magic damage only on NPCs.
Changed CHandleCombat::Kill() so that only not tamed animals eat their victims.
3/18/2006 - grimson
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.
18th March, 2006 - Maarc
Removed some unused properties/methods of the console that have never been used
Begun construction of some placeholder code for party related works, not committing the factory code until some testing can occur first
Essentially, this just updates the handling for it which currently does nothing, and gives an insight into how it would be done
18th March, 2006 - Maarc
Adjusted SE_ApplyDamageBonuses and SE_ApplyDefenseModifiers as they were using the same parameter for attacker and defender
Updated documentation somewhat
3/18/2006 - grimson
I only added part of the ApplyDefenseModifiers() and ApplyDamageBonuses() changes to CVS,
fixed it now.
3/18/2006 - grimson
Changed ApplyDefenseModifiers() and ApplyDamageBonuses() to make shure they return ints.
Changed SE_ApplyDamageBonuses() and SE_ApplyDefenseModifiers() to fix invalid damage values
when a script sends float values.
Changed criminal() so it also takes the murderer state into account, as this overrides the
criminal flag.
JS:
Updated MagicDamage() in level1targ.js, it now uses the new functions and should be
equal to the source version of MagicDamage().
3/18/2006 - grimson
cScript::OnEquip() and cScript::OnUnequip() were adding the parameters in the wrong order.
3/17/2006 - grimson
Changed AdjustRaceDamage() to also use the new ApplyDefenseModifiers() function.
3/17/2006 - giwo (0.98-3.5k [3.6 BETA])
Modified Gates so they are decayable by default, and will only decay if decayable.
Updated GM and Counsellor privs in commands.dfn, also placed a bit guide for the PRIVS value.
Fixed LoS checks on the Z plane in multis.
Fixed an issue causing GM broadcasting (! then space) not to function.
Removed some superfluous speech code.
Changed the command YELLALL to YELL
Removed several old DFN tags that were no longer used.
Removed default PRIV=0 tag from baseitem.dfn, as it would unset decayable value.
Changed PRIV1= tag to PRIV= in npc.dfn.
3/17/2006 - grimson
Catch negative damage values in cMagic::MagicDamage() and apply 1 damage in that case.
3/17/2006 - grimson
Moved defense modifications into CHandleCombat::ApplyDefenseModifiers().
Moved damage bonuses into CHandleCombat::ApplyDamageBonuses().
Moved the calculation of the hit location from CHandleCombat::DoHitMessage()
into CHandleCombat::CalculateHitLoc().
Added ReactOnDamage() to CCHar, currently it only makes the char attack the
char that inflicted the damage.
Reduced CChar::Damage() to show, the damage, apply the damage, handle the
reputation effect, the peace breaking effect and the chars death.
JS changes:
New JS functions:
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:
mChar.ReactOnDamage( damageType, attacker );
Note: damageType is currently unused.
Changed char function:
mChar.Damage( amount, attacker, doRepsys );
17th March, 2006 - Maarc
Changed the INI loading code so that it uses a Script rather than custom code
3/17/2006 - grimson
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.
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.
3/16/2006 - giwo (0.98-3.5j [3.6 BETA])
Fixed an issue with AdvancedPathFinding() causing NPC's to flee constantly.
Fixed an issue with NPC fleeing that checked against Strength rather than MaxHP.
Defaulted weather damage to every 60 seconds (rather than every second)
Fixed an issue causing a message to display damage taken by weather when no damage was taken.
Fixed an issue with CRace causing a race with no elemental damage types to have most/all elemental damage types.
Fixed a server crash in magic.
Fixed an issue causing items in a paperdoll to not be targetable.
Fixed an issue with LoS causing items to not block on a diagonal plane.
Fixed an issue causing multi's not to block LoS.
Minor fixes, cleanups, and optimizations to LineOfSight.
Modified DoubleClick() so a character inside a multi can open an item outside a multi (as long as he can see it).
16th March, 2006 - Maarc
Updated playDeathSound to simplify some of the code for males/females
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.
Renamed __ACCOUNTSADM_BLOCK__ to CAccountBlock
Removed dead code from accounts (stuff that was just never called at all)
Removed Get/Set Word/Bit/BitRange from CBO, as it's not being used
Removed genericDWords from CBO, as they're not being used, and are largely superfluous with custom int/string tags in JS
3/15/2006 - giwo (0.98-3.5i [3.6 BETA])
Fixed an issue causing pet guarding on items in a house not to function.
Fixed an issue causing boat items not to get added to the multi.
Cleaned up CPIDoubleClick::Handle() routine.
Fixed an issue allowing players to place their items in invalid locations.
Fixed a possible issue causing doors to block LoS to themselves.
3/14/2006 - giwo
Fixed a server crash caused by my recent changes to Location-Targeting spells.
3/14/2006 - giwo (0.98-3.5h [3.6 BETA])
Fixed a combat issue allowing enemies to fight if on the exact same location but a different Z.
Modified guard handling so when guards are globally deactivated any existing guards will not teleport.
Fixed an issue causing NPC's to be invisible.
Fixed some issues causing items behind a door to be within a characters LoS.
Adjusted erroneous Z values in house.dfn (Causing outer doors to not be part of the multi).
Added a LineOfSight() check to prevent opening containers on the other side of walls.
Modified the inMulti() routine to take into account tile height.
Simplified newCarveTarget() a bit.
Fixed a possible issue when calculating multi tile heights.
Fixed an issue causing Characters to "fall" immediately after being placed on their new boat.
Further cleanups and rewrites to CMulHandler and its related structures.
3/15/2006 - grimson
Added PHYSICAL to WeatherType enum, so we can also use it represent physical damage.
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:
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:
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().
3/14/2006 - grimson
Fixed item IDs for human corpses in newCarveTarget().
3/13/2006 - giwo (0.98-3.5g [3.6 BETA])
Converted Numeric DFN's to a Signed Long rather than unsigned by default for *nix compatability.
Merged jr's fixes for cygwin compatability and fixing some minor gameplay issues.
Modified ModelBoat() to automatically move you off the boat (if near land).
Fixed a crash bug involving boats.
Changed several calls checking against type IT_PLANK to CanBeObjType( OT_BOAT ).
Fixed an issue causing boat holds to "explode" when opening them.
Fixed an issue causing containers inside containers on the ground to be "too far away".
3/13/2006 - grimson
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.
13th March, 2006 - Maarc
Altered the CBO resistances code to use an array rather than a number of variables
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
Upgraded the container size on weatherBools, as the number of weather entries has moved beyond a UI08 size
3/13/2006 - 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.
3/12/2006 - 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.
3/12/2006 - grimson
Added element resistance calculation to weather damage.
Fixed calcElementDef() and getElementDef() so that the chars basic element resistance
is always added.
Changed MagicDamage() so that we always do at least a little bit of damage.
3/12/2006 - grimson
Removed DamageTypes enum and added POISON to WeatherTypes.
Renamed DamageResist functions into ElementResist and moved them to cBaseobject.cpp.
Renamed DFN tag DAMAGERESIST to ELEMENTRESIST and use it also for items.
Added DFN tag POISONDAMAGE to items so that they can also do poison damage on attacks.
Added functions calcElementDef(), getElementDef() and checkElementDef() to combat.cpp
to calculate the resistance against elements similiar to the def value of armor.
Changed AdjustRaceDamage() to also take into account the elemental resistance of the target.
Use calcElementDef() in MagicDamage() similiar to calcDef() in calcDamage() to take the
elemental resistance into account.
3/12/2006 - giwo (0.98-3.5f [3.6 BETA])
Removed CMulHandler::AverageMapElevation() as it was superfluous.
Removed CTileUni height in favor of top, to reduce calc_walk() calculations.
Removed CTileUni id as its use was unnecesarry.
Rewrote CMovement::calc_walk() to improve overall readability and speed.
Merged CMovement::calc_WaterWalk() with calc_walk().
Removed higher() as UOX_MAX() does the same thing.
Removed CMovement::validNPCMove() as it was superfluous.
Modified house placement to make it impossible to place a house on the ocean.
12th March, 2006 - Maarc
Changed some id >= 0x4000 comparisons to CanBeObjType( OT_MULTI ), for clarity
Fixed a bug with applying NPC sections where if you specified ALCHEMY values, it would fail to apply correctly
3/11/2006 - giwo (0.98-3.5e [3.6 BETA])
Fixed an issue causing items with no layer to not change the weight of a character.
Fixed an issue causing spells that require a targeted location not to function.
Fixed an issue allowing one to build a house or boat far from their location.
Fixed an issue allowing one to build a multi directly on top of another multi.
3/11/2006 - giwo (0.98-3.5d [3.6 BETA])
Removed CChar::TempWeight() as it was superfluous.
Fixed an issue causing Trade Windows to add weight to characters.
Fixed some minor issues with weight calculations.
Removed CChar:: bools2 and made more use of the bools value.
Renamed CMapStuff to CMulHandler to better describe its function.
Renamed MapStaticIterator to CStaticIterator to meet class naming standards.
Renamed MultiItemsIndex to MultiItemsIndex_st to meet structure naming standards.
Removed MapData_st fileSize as it was superfluous.
3/11/2006 - grimson
Fixed a bug where buying the whole stock of an item deleted that item from the vendors container.
3/11/2006 - grimson
Added new ini setting:
USECHARRESISTANCE=# If this is set to 0 the chars resistance won't increase by itself.
Slowed the increase of resistance quite a bit down.
3/11/2006 - 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.
3/11/2006 - grimson
Removed version number for chars.
Added .tempWeight JS property to chars, so you can safely modify the weight of chars in scripts.
Added calcLowDamage() and calcHighDamage() functions to combat.cpp and use them in
CPStatWindow::SetCharacter() to set the DamageMin and DamageMax values.
3/11/2006 - grimson (0.98-3.5d [3.6 BETA])
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.
3/11/2006 - grimson
Don't save the weight in cChar.cpp, it's already saved in cBaseobject.cpp.
Fixed a bug where items without a layer didn't add to the chars weight.
Fixed a bug in CWeight::calcCharWeight() that added the weight of the backpack
twice.
Changed CMapHandler::Load() so that PostLoadProcessing of chars is done after
PostLoadProcessing of items, or else the forced recalculation of the chars
weight doesn't work.
3/10/2006 - giwo (0.98-3.5c [3.6 BETA])
Modified CMapStuff SeekLand() and SeekTile() to return a reference rather than force one to pass an object to set.
Modified CMapStuff SeekMulti() to return the length rather than force one to pass a value to set.
Removed MapStaticIterator::GetTile() as it was superfluous.
Removed CMapStuff IsTileWet(), DoesTileBlock(), and IsTileSurface() as they were superfluous.
Removed CMapStuff TileMem and MultisMem, replacing them with functions to return the same data.
Changed MultiItemsIndex lz and hz to SI08 values.
Changed MapStaticIterator GetPos() to return an SI32.
Removed MapStaticIterator tileid as it was superfluous.
Modified UOXFile::eof() to return a bool rather than an int.
Miscellaneous minor changes and cleanups.
3/10/2006 - grimson
Added two sysmessage when feeding a pet.
3/09/2006 - giwo (0.98-3.5b [3.6 BETA])
Fixed a crash when using ClilocMessage().
Fixed an issue when climbing stairs.
Fixed some issues with TriggerWord handling (more work needs to be done on this).
Modified A* Pathfinding to work properly with our NPC's PathToFollow queue.
3/08/2006 - giwo (0.98-3.5a [3.6 BETA])
Began rewriting .mul file handling.
Fixed an issue causing a possible crash with malformed JS scripts.
Removed several superfluous functions from UOXFile class.
Updated CTile and CLand to properly read in tiledata.mul
Modified .mul file structures to meet struct naming standards.
Changed static tile reading code to allow a variable number of statics.
Fixed several issues with mapdiff and staticdiff handling.
Added A* Pathfinding routine (note that it is not used in current code,
as there are known compatability issues).
3/08/2006 - giwo (0.98-3.5)
Fixed a possible issue caused by passing float values to JS func RandomNumber()
3/08/2006 - grimson
Fixed CPIAllNames3D::Handle() so that SHIFT+CTRL actually shows the names of NPCs.
3/07/2006 - grimson
Fixed LineOfSight() not working when you stand directly next to the target.
Changed checkItemLineOfSight() so that it checks whether you can see the base or
the top of the target item.
3/05/2006 - giwo (0.98-3.4w [3.5 RC])
Minor changes to the JS Handling.
Modified UOXCFile handling to remove all props and added .EOF(), .Pos(), and Length() methods.
Fixed an issue causing items not to dissapear when 'removed
Fixed an issue causing characters to randomly dissapear around NPC's
Fixed an issue causing items and characters to be updated when out of range.
Fixed a VC2005 Compile issue.
Included a default VC 2005 Project/Solution file.
5th March, 2006 - Maarc
Updated loading code so that it displays a more accurate percentage during loading
3/05/2006 - giwo (0.98-3.4v [3.5 BETA])
Added the Script # to the JS Error Reporter to make debugging easier.
Fixed an issue causing JS scripts to give useless error messages on server startup.
Modified the region debug code to not default to on in debug mode.
3/04/2006 - grimson
Changed cMovement::SendWalkToPlayer() so that the sequenz number fits the description
in CPacketReceive.cpp.
Changed CPIResyncReq::Handle() so that it actually does resend everything around
the player.
3/04/2006 - grimson
Added a new ini setting:
COMBATARCHERRANGE=# This defines the range at which archers stop charging
the target in combat. (Default is 7)
3/03/2006 - 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.
3/03/2006 - 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.
3/02/2006 - grimson
Added two maps to spawnregions to make checking for valid locations easier.
Check if the z value of stored locations still match the dynamic z value of the
current locations to track whether dynamics have changed.
3/02/2006 - grimson
Added two vectors to spawnregions to store valid locations.
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.
3/01/2006 - giwo (0.98-3.4u [3.5 BETA])
Fixed some issues caused by my previous changes to objects in mapregions.
Fixed some issues when setting containers.
Fixed an issue causing targeting cursors to sometimes target a character when the target should be invalid.
Fixed an issue causing JS Gumps not to function.
Added detailed packet logging to CPITargetCursor.
Fixed a minor issue with axe.js
2/28/2006 - giwo (0.98-3.4t [3.5 BETA])
Added some additional debug messages to Region handling.
Fixed a crash involving weather.
Fixed an issue that would cause invalid objects to be left in mapregions.
2/28/2006 - giwo (0.98-3.4s [3.5 BETA])
Modified the JS Object creation to reduce memory waste.
Made some minor modifications to CUSTOMSTRINGTAG and CUSTOMINTTAG handling.
2/28/2006 - grimson
Updated cCharStuff::FindSpotForNPC() to also allow spawning of water and amphibian NPCs.
2/28/2006 - grimson (0.98-3.4r [3.5 BETA])
Replaced the WATERCREATURE tag from creatures.npc with a new tag:
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.
Added IsStaticWet() and CanSeaMonsterMoveHere() functions to mapstuff.cpp.
Added FindCharSpotToSpawn() to cSpawnRegion.cpp and use it when spawning NPCs, renamed
FindSpotToSpawn() to FindItemSpotToSpawn() and use it when spawning items.
DFN changes:
Updated creatures.dfn to use the new MOVEMENT tag.
Updated tiles.dfn to set a water tile to wet that was missing that flag.
28th February, 2006 - 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.
27th February, 2006 - Maarc
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
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
2/26/2006 - grimson
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.
2/26/2006 - giwo (0.98-3.4q [3.5 BETA])
Fixed some areas that could possibly cause MapRegion corruption.
Fixed a VC 2005 Compiler warning.
Defaulted CreateItem() to set decayable to true.
2/25/2006 - giwo (0.98-3.4p [3.5 BETA])
Added some example usages of ClilocMessage().
Added support for packet 0xC1, sending cliloc messages.
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).
2/26/2006 - grimson
Modified cCharStuff::addRandomLoot() so that loot lists can contain links to other loot lists.
DFN changes:
Changed the the numbers in the LOOT tags of NPCs to random lootlist entrys.
Fixed some GET tags in the armor dfns that were pointing to non existant items.
2/26/2006 - grimson
Added a line of sight check to the isValidAttackTarget() function in ai.cpp so NPCs won't attack
targets they can not see.
2/25/2006 - grimson (0.98-3.4o [3.5 BETA])
Added another new JS property for chars:
.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.
Updated the peacemaking.js to use the new property and to prevent peacemaking from affecting the
char using it.
Output a sysmessage to PCs informing them of the end of the peace effect. (Dictionarys again)
2/25/2006 - grimson
Changed CHandleCombat::HandleNPCSpellAttack() to prevent NPCs from using spells when they
are not allowed to attack.
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.
Output a sysmessage to PCs informing them that they can not attack. (updated Dictionaries)
2/25/2006 - grimson (0.98-3.4n [3.5 BETA])
Changed CChar::WearItem() to not fire the onEquip event on world loads.
Modified the TOPEACE tag so it can take a second value that sets the chance gain to recover
from peacemaking upon hits.
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.
Added two new JS propertys for chars:
.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.
2/25/2006 - grimson
Fixed a bug that allowed health regeneration while the char was starving.
Moved the bools for the fixed maxHP, maxMana, maxStamina into a bitmask.
2/25/2006 - grimson (0.98-3.4m [3.5 BETA])
Changed the default of totame to 0x7FFF and allowed taming of NPCs with a value of 0.
Changed DFN tags MANA and STAMINA so you can set a minimum and maximum value.
Added new DFN tags:
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:
.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:
.maxstamina and . maxmana now work equal to the .maxhp property.
Added the new JS propertys to the set command.
2/24/2006 - giwo (0.98-3.4l [3.5 BETA])
Modified OnIterate() to de-allocate any JSObject it uses to free wasted memory.
Merged all boolean values in cServerData to a single UI32 using bitmasking.
24th February, 2006 - Maarc
Updated bitmask setting/getting code for CChar, making it a bit more friendly and less error prone
Fixed a bug with rugs_carpets.dfn where a closing bracket was missing for object 0x1e41
2/23/2006 - giwo (0.98-3.4k [3.5 BETA])
Fixed a crash when shutting down the server.
2/23/2006 - giwo (0.98-3.4j [3.5 BETA])
Fixed some issues with Multi and Static height calculations.
Moved Definition of global JS classes into CJSRuntime.
Locked the JS Class prototypes for Garbage Collection purposes.
2/23/2006 - giwo (0.98-3.4i [3.5 BETA])
Fixed an issue causing players to not disembark boats properly.
Fixed an issue causing boat holds not to be made part of the multi.
Updated the INI loading code to make it more verbose.
Removed "Golden" health until we know when (if ever) OSI uses it.
Created a new class, CJSEngine along with the files CJSEngine.cpp/.h
Created a new class, CJSRuntime to allow multiple runtimes (for threading purposes).
Moved JSObject creation and handling into CJSRuntime.
Moved global JS Context and Runtimes into CJSRuntime.
Moved JS Engine loading code into CJSEngine.
Modified cScript so all JS Scripts on a runtime share a single context.
Removed global.cpp from the project.
2/23/2006 - grimson
Added a Dirty( UT_LOCATION ) to HandleDeath() in pcmanage.cpp to make shure the player gets
properly updated when he dies.
2/23/2006 - grimson
Changed TurnStuff() in boats.cpp to fix players getting stuck when turning the boat.
2/23/2006 - grimson (0.98-3.4h [3.5 BETA])
Prevent spamming of weather packets when riding a boat.
Added a quick fix to the inMulti() function to make boats workable again.
Changed the HP and HPMAX tags so that you can set a minimum and maximum value.
Removed the IsMounted() function and replaced all it's calls with the GetMounted function.
Allow a food list to contain a link to another foodlist.
2/23/2006 - grimson (0.98-3.4g [3.5 BETA])
Added three new ini settings:
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:
.mounted Can be used to get or set the mounted status
.stabled Can be used to get or set the stabled status
2/22/2006 - grimson
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.
2/21/2006 - grimson (0.98-3.4f [3.5 BETA])
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.
Changed CheckCharInsideBuilding() to prevent a harmless error message when mounting a mount.
Tweaks to the new hunger system:
Tamed chars only hunger while the player that tamed them is online.
Tamed mounts don't hunger when they are mounted by a player.
2/21/2006 - grimson (0.98-3.4e [3.5 BETA])
Third part of the rewrote hunger system:
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.
DFN Changes:
Changed animals.dfn, added NPCAI=6 to all animals belonging to the race Predator.
Changed races.dfn, all members of the race Predator change their hunger level every 300 seconds
and get damaged for 5 points when starving.
2/21/2006 - grimson (0.98-3.4d [3.5 BETA])
Changed cCharStuff::addRandomLoot() to look for the lootlist inside the items folder because it is there.
Second part of the rewrote hunger system:
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.
DFN Changes:
Added a new file foodlists.dfn to the items folder containing an example list for horses.
Added the horse foodlist to mounts.dfn.
2/21/2006 - grimson (0.98-3.4c [3.5 BETA])
Do an immediate update of the charflag and the char upon taming and un-taming.
First part of the rewrote hunger system:
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.
DFN Changes:
Added the HUNGER=#,# description to the header of races.dfn.
Added the TAMEDHUNGER tag to mounts.dfn with a hunger rate of 600 and a chance to become
wild of 30%.
2/21/2006 - giwo (0.98-3.4b [3.5 BETA])
Added AssocScript tag to effect saving (to make JS timers persistant).
Updated JS .SetPoisoned() to take one value for changing a poison value without setting a new timer.
Updated healing.js and made it function entirely in JS.
Removed tempeffects case 14, 22, 23, and 24, as they are handled by JS now.
Made items created with JS CreateBlankItem() decayable by default.
Fixed some issues with axe.js, put tree-chopping on a timer with a skill delay.
Fixed several issues where items were not decayable that should be.
Defaulted JS CreateBlankItem() to set items to decayable.
2/20/2006 - giwo (0.98-3.4a [3.5 BETA])
Added carpentry, tinker, leather repair, bow repair, bandage, sewing kit, mortar, and archery butte ID's to js_objectassociations.scp
Corrected an issue causing Create menu's to double up when reloading the DFN's.
Added a check to ensure a character has a backpack when coloring the "Pack" option in the popup menu.
Fixed an issue causing character paperdolls to have incorrect spacing.
JS Method .SetTag() now accepts boolean values (true/false).
2/20/2006 - giwo (0.98-3.4)
Fixed an issue causing possible account corruption.
20th February, 2006 - Maarc
Added two functions to the JS engine for characters, Heal() and Damage()
void Damage( amtDamaged, [attacker] );
void Heal( amtHealed, [healer] );
The second parameters are optional, but basically it ensures that any change through here is tracked
2/19/2006 - giwo (0.98-3.3v [3.4 RC])
Fixed a minor issue with regions.dfn causing Yew not to be considered a town.
Added ability to xgate to a specific x, y, z. and worldnumber
Fixed a minor issue with teleporter.js.
Updated TeleportLocations to teleport any players pets that are inrange with them.
Fixed a minor issue with Moongates teleporting Pets.
Fixed a compiler error in VC 2003 caused by fabs(). Note that using fabs() should only be used with floats & doubles.
Updated the grizzly and polar bear entries in creatures.dfn to have the proper sounds.
Modified HandleCombat() so the target has a chance to gain Tactics when hit.
Gave armor a 50% chance not to be damaged when successfully hit.
Reduced armor damage to 0-1 points (rather than 0-2) when hit.
Updated Towns to be escort regions by default in regions.dfn
2/20/2006 - grimson
cMovement::SendWalkToOtherPlayers() didn't check if the chars are in the same world, added
this now.
2/19/2006 - grimson (0.98-3.3u [3.4 RC])
Renamed HandleWeatherChanges() to CheckCharInsideBuilding() as it is more apropriate.
Stopped weather effects affecting ghosts of death players.
Partially rewrote cMovement::SendWalkToOtherPlayers to correctly send chars and remove
them from sight.
Changed CPExtMove::CopyData() so the running state of player chars is correctly send.
2/19/2006 - grimson (0.98-3.3t [3.4 RC])
Changed HandleWeatherChanges() so it updates the weather values of NPCs too.
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.
Added two new values to weatherab.dfn:
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.
2/19/2006 - grimson (0.98-3.3s [3.4 RC])
Fixed multiple issues in LineOfSight() that caused miscalculations of the coordinates that should be checked.
Added line of sight checks to CPIPopupMenuRequest::Handle(), CBaseVendorResponse::CBaseVendorResponse() and
CPIDblClick::Handle() to prevent people from using items and vendors through walls.
2/18/2006 - giwo (0.98-3.3r [3.4 RC])
Updated the SkillCheck in HandleCombat() to be based upon the defenders tactics skill.
Updated Skills::SkillCheck() to have a chance of success based upon the maximum skill + 100, rather than 1000.
Fixed several issues causing spellbooks not to display properly.
Fixed an issue causing Strength, Dexterity, and Intelligence to permanently drop when they are temporarily lowered.
Updated skills.dfn a bit to improve skill gain between levels 0.00 and 1.00
Added two new shield ID's to CItem::IsShieldType().
Added spacing after fame titles to fix a paperdoll display issue.
2/18/2006 - grimson
Fixed a small bug that prevent a storm from ending.
2/18/2006 - grimson (0.98-3.3q [3.4 BETA])
Stopped saving the weather type in regions.wsc, this prevented changes from regions.dfn to apply.
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.
2/17/2006 - giwo (0.98-3.3p [3.4 BETA])
Fixed an issue causing the Snooping skill not to function.
Fixed an issue causing GM Polymorph Menu not to function correctly.
Fixed an issue causing Doors not to be added to the house they were part of.
Moved the Multi check to containers specifically rather than on any item use, to enable use of house signs and doors from outside.
2/17/2006 - giwo (0.98-3.3o [3.4 BETA])
Fixed an issue causing characters to randomly fall through house floors.
Added a check to ensure a character cannot open a container unless he is in the same house it is.
Removed JS Function RaceGate() as CChar property .race does the same thing.
Removed JS Function SubStringSearch() as .match() does the same thing.
Removed JS Function ConsoleMessage() as Console.Print() does the same thing.
Removed JS Function ScriptPrintNumber() as Console.Print( number.toString() ) does the same thing.
Removed JS Functions GetCommand() and GetCommandSize() as they were superfluous.
Removed JS Functions CreateBuffer() DestroyBuffer() and SendBuffer() as the new Packet class handles that.
Removed JS Item & Character property .raceID as .race does the same thing.
Removed JS Item & Character property .privateword.
Added a blank deed to items.dfn.
2/17/2006 - giwo (0.98-3.3n [3.4 BETA])
Moved Skills::TinkerAxle out to JS.
Moved Skills::TinkerAwg out to JS.
Moved Skills::TinkerClock out to JS.
Moved TinkerSextant functionality out to JS.
Removed several item types from itemtypes.dfn as they are now handled by JS.
2/17/2006 - grimson (0.98-3.3m [3.4 BETA])
Light and weather effects now also work on NPCs.
Added 3 new JS events:
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.
2/17/2006 - grimson (0.98-3.3l [3.4 BETA])
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.
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.
Added storm to the IsRaceWeakToWeather() JS function.
2/17/2006 - grimson
Fixed some bugs in calculating the heat/cold damage in doWeatherEffect().
Rain now lowers the current temperature by 5, a storm by 10.
Moved the sending of the light level and weather status from startChar() into
CChar::Teleport() by adding a force forceUpdateLight option to checkRegion().
2/17/2006 - grimson (0.98-3.3k [3.4 BETA])
Added cMapStuff::inBuilding() function to determine wheter a given set of coordinates
is inside a building. I does this by checking whether there is a static or multi above
the coordinates.
Added inBuilding() and SetInBuilding() functions to CChar and set it on movement and
teleport.
Use the new inBuilding() function to stop/start weather effects as soon as a player
enters or leaves a building.
Send the light level and weather status directly after a player log's in.
2/16/2006 - grimson
Changed cWeatherAb::DoPlayerStuff() to reset weather effect timers if needed.
2/16/2006 - grimson (0.98-3.3j [3.4 BETA])
Fixed VC6 build errors (thanks to giwo).
Wrote all available race settings into the header of races.dfn and documented a few of them.
Rewrote parts of the weather system:
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:
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.
16th February, 2006 - Maarc (0.98-3.3i [3.4 BETA])
Committed some fixes to giwo's last commit (missed some changes in cScript.cpp that was blocking people from compiling)
Removed a lot of commented stuff. Dead code that's not used any more and things like that have been reduced
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
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)
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
2/15/2006 - giwo (0.98-3.3h [3.4 BETA])
Marked StringToNum(), NumToString(), NumToHexString() for later deletion, please use built-in JS method .toString() and function parseInt() in their place.
Updated all JS files to use toString() and parseInt().
Implemented JS props .stone and .master for Guilds.
Removed the following JS functions as they are superfluous.
IsRegionGuarded
CanMarkInRegion
CanRecallInRegion
CanGateInRegion
GetGuildType
GetGuildName
SetGuildType
SetGuildName
SetGuildMaster
GetNumGuildMembers
GetGuildStone
GetTownMayor
GetTownRace
SetTownRace
GetTownTax
GetTownTaxResource
SetTownTax
SetTownTaxResource
2/15/2006 - giwo (0.98-3.3g [3.4 BETA])
Changed create.dfn handling so ID's of 0 (default) display nothing on the gump.
Updated create.dfn menu's with "Previous Menu" entries.
Removed resource counts before launching create menu's, as the create menu handles that.
Added LEATHER resource type for create.dfn
Added cloth ID's to CLOTH resource type.
2/15/2006 - grimson
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.
Changed cMagic::MagicDamage() again, so that the murder count is increased when needed
and NPCs fight back when they get attacked with a spell.
Fixed the text message of the evaluating intelligence skill.
2/15/2006 - giwo (0.98-3.3f [3.4 BETA])
Moved Lockpicking skill out to JS.
Fixed an issue causing newbie clothing to be dropped on the ground if the character had scripted starting armor.
Added Multiple-ID resource handling for create.dfn.
Fixed some create.dfn items that had overlapping numbers.
2/14/2006 - grimson (0.98-3.3e [3.4 BETA])
Added a rounding function for numbers and use it in the doLight(), command_getlight() and
doWorlLight() functions.
Moved WillResultInCriminal() from combat.cpp to uox3.cpp as it is not limited to combat situations.
Changed cMagic::MagicDamage() so that attackers can become criminal and murderers.
Changed CHandleCombat::StartAttack() so that attacking NPCs can become criminal.
2/14/2006 - grimson
Changed the number for British weather because it was the same as the Southern Montain.
2/14/2006 - grimson
Changed the checkRegion() function to prevent useless guard messages when you
go from one unguarded region to another unguarded region.
Made a few changes to regions.dfn.
Changed the getlight command, so it returns the correct value when the region
has a weather system.
2/14/2006 - grimson
Changed CWorldMain::doWorldLight again, so the light level will actually reach
the LIGHTBRIGHTLEVEL and LIGHTDARKLEVEL values.
2/14/2006 - grimson
Removed checkRegion() from startChar() as it isn't needed.
Fixed the GM Locations menu in travelmenu.dfn so you can travel to the jail cells again.
Fixed the release time check in JailCell::PeriodicCheck().
2/13/2006 - grimson (0.98-3.3d [3.4 BETA])
Made shure to start world timers on server startup.
Changed startChar() to do a checkRegion() directly after a login.
Changed CWorldMain::doWorldLight to actually take the current time into account
when calculating the light level.
2/14/2006 - grimson
Added the dungeons to the regions.dfn, so LIGHTDUNGEONLEVEL from the ini is correctly
applied to them.
2/13/2006 - giwo (0.98-3.3c [3.4 BETA])
Fixed an issue causing stats to almost never increase.
Modified skills.dfn SKILLPOINT to use ,'s for seperators.
Added an additional option to SKILLPOINT to specify for each level how much skill to gain on success.
Moved Meditation skill out to JS.
Moved Inscription skill out to JS.
Removed EngraveAction() as it did not function and custom skills can be added in JavaScript.
Moved MAKESHOP command out to JS.
2/12/2006 - giwo (0.98-3.3b [3.4 BETA])
Modified DFN reloading so it reloads teleport.scp as well.
Modified CheckSkill() so GM's can now gain skills by using them. (Note they will still never fail).
Added NPCMOVEMENTSPEED to the UOX.ini to allow customization of NPC movement speeds.
Changed CORPSEDECAYTIMER to default to 900 seconds, and made use of it in CreateCorpseItem().
Removed CServerData::PlayerCorpseDecayMultiplier() as it had no matching uox.ini entry.
Added JS character property .attackFirst
Moved Peacemaking skill out to JS.
Moved Musicianship skill out to JS.
Moved Enticement skill out to JS (Note that OSI seems to have replaced this with Discordance).
Moved Provocation skill out to JS.
2/12/2006 - giwo (0.98-3.3a [3.4 BETA])
Fixed an issue causing Large Dragon Ship deeds to not function.
Stopped CChar from saving HP as CBaseObject handles saving hitpoints.
Removed GetItems() as it could cause data corruption.
Modified getItem() and findItem() a bit and renamed them to GetItemAtXYZ() and FindItemAtXYZ()
Fixed some issues with pitcher.js
Fixed some minor cooking issues, and removed cSkills::HandleCooking() as JS now handles cooking.
2/12/2006 - grimson
Added another JS function:
GetItems( x, y, z, world, range) - returns a list containing all items withing
"range" of the given coordinates in the given world. You can go through the list
by using the FirstItem()/NextItem()/FinishedItems() syntax.
2/12/2006 - 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.
GetItem( x, y, z, world) - returns the item that is on the given coordinates or
NULL if there is no item.
2/12/2006 - grimson
The current HP and (if present) the fixed maxHP will now be saved on worldsaves.
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.
2/11/2006 - grimson
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.
2/11/2006 - giwo (0.98-3.3)
Added 'set DEF (items), ARMOR (chars), and LAYER (items) commands.
Modified 'setscptrig so it accepts 0 as a value even if no script 0 exists.
2/11/2006 - grimson (0.98-3.2r [3.3 RC])
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.
Updated the set command to make use of the .maxhp JS property.
2/11/2006 - grimson
Removed teffect.cpp from the VC6 workspace, as it no longer exists.
Modified the flags of display cases via the tiles.dfn to prevent NPCs from walking on them.
2/11/2006 - giwo (0.98-3.2q [3.3 RC])
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.
Added error-checking when an invalid script entry is called with the GET tag.
Modified AR statwindow reporting to give larger numbers.
Updated some DFN armor defense ratings in items/gear/armor/
11th February, 2006 - Grimson (committed by Maarc)
Fixed a bug with IsNeutral/SetFlagNeutral not comparing against the same flag type
Fixed a bug where the wrong flag number is sent to the client for Neutrals
2/10/2006 - giwo (0.98-3.2p [3.3 RC])
Re-added IsNeutral() Character flag as well as .neutral JS character property.
Fixed an issue causing items to "bounce" when being dropped on the same character they were picked up from.
Fixed an issue causing Ghosts to be bugged after a server restart.
Modified newbie item creation so scripted items take precedence over default clothing.
2/09/2006 - giwo (0.98-3.2o [3.3 RC])
NPCFlag now saves to the worldfile.
Fixed an issue causing neutral animcals to never appear innocent when in town.
Fixed an issue causing tamed animals to not carry their owners flag.
Added support for invulnerable (yellow) flagging.
2/09/2006 - giwo (0.98-3.2n [3.3 RC])
Overhauled the character flagging system:
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.
Updated all instances of NEUTRAL in the dfn's to FLAG=NEUTRAL
Added some FLAG=EVIL, FLAG=INNOCENT, and FLAG=NEUTRAL tags to appropriate NPC's
2/08/2006 - giwo (0.98-3.2m [3.3 RC])
Fixed an issue causing ID and Type-based JS scripts not to run if an object had a script associated with it.
Fixed an issue with SetTag() causing 0 and null values not to unset the tag.
Fixed some wierdness when using the Delete() property in JS.
Minor updates to autoStack().
Fixed some issues with dropping items on other items in packs.
8th February, 2006 - Maarc
Fixed wholist so that the stats link now works from it
2/08/2006 - giwo (0.98-3.2l [3.3 RC])
Fixed a minor issue with saving tempeffects.
Fixed an issue causing objects not to default to script ID 0 (global script).
Added onDeathBlow( pKilled, pKiller ) JS event.
Minor code cleanups.
2/07/2006 - giwo (0.98-3.2k [3.3 RC])
Added spawn.dfn tag PREFZ=, this sets the maximum Z influence dynamic and static items can have on spawning.
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.
2/07/2006 - giwo (0.98-3.2j [3.3 RC])
Replaced CTEffectContainer with a call to CDataList.
Fixed multiple issues causing temporary effects to randomly never expire.
Fixed an issue causing mana never to regenerate completely in certain circumstances.
Minor const correctness and signed/unsigned mismatch changes.
Removed MOVETYPE= world tag from boats, as they should always start sitting still.
Added a check to ensure a boat stops moving if all characters onboard leave a moving boat.
Added TEMPSTR/TEMPSTRENGTH TEMPDEX/TEMPDEXTERITY and TEMPINT/TEMPINTELLIGENCE options to the SET command.
2/06/2006 - giwo (0.98-3.2i [3.3 BETA])
Added some error checking to the INFO command to ensure it is not used on characters.
Fixed an issue causing deeds (and other items) not to display their custom names.
Modified the stealth skill spam to conform to OSI messages.
Fixed an issue causing the POLY command to change ones skin color.
JS Changes:
Added character props .orgID and .orgSkin
Changed the behavior of character props .id and .skin not to set their org* equivalents automatically.
6th February, 2006 - Maarc
Moved maps_def Disposal to the end of CMapStuff::Load()
Added the ability to override tiledata info for real tiles (not land)
Bit of const correctness (CTile.Name( const char *newVal ))
2/05/2006 - giwo (0.98-3.2h [3.3 BETA])
Fixed a possible exploit with secure trading.
Fixed an issue causing it to be impossible to remove characters from a house ban list.
Fixed a server crash caused by transfering house ownership.
Updated the NPC Pathfinding code to fix some issues.
Added a check to ensure boat items are only moved once when boats sail.
2/04/2006 - giwo (0.98-3.2g [3.3 BETA])
Fixed an issue causing multis to calculate their size incorrectly (causing boats to drag objects not aboard).
Updated mapstuff.cpp to fix some signed/unsigned mismatches.
Rewrote killTrades() so it would function properly and called it when a player Logs out.
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.
Documented trade.cpp
2/03/2006 - giwo (0.98-3.2f [3.3 BETA])
Rewrote trade windows so they now function properly (Note that if you log out with a trade window open, the client will crash).
Disabled the LoginThread as it was causing crashes and other issues.
Minor changes to const correctness in skills.cpp
Modified packet logging to slim down file size and make it more readable.
Fixed an issue causing logged out characters be visible to those around them.
2/02/2006 - giwo (0.98-3.2e [3.3 BETA])
Fixed an issue causing the statwindow not to update properly (thus not showing the proper weight/gold values).
Continued to break LineOfSight() into smaller manageable functions.
Removed superfluous Add()/Remove() functions from CMapHandler.
2nd February, 2006 - Maarc
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)
Made some changes to the enumeration JSObjectType, because gcc 3.3.5 was chucking a wobbly over some code
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?
2/01/2006 - giwo (0.98-3.2d [3.3 BETA])
Fixed an issue causing the server to randomly crash when sailing for prolonged periods of time.
Removed an extra RemoveFromSight() packet sent upon item deletion.
Removed items from the MapRegion upon deletion.
Added CMapHandler::ChangeRegion() to automatically change an objects region when location changes.
1/31/2006 - giwo (0.98-3.2c [3.3 BETA])
Fixed an issue causing boat commands to crash the 3D client.
1/30/2006 - giwo (0.98-3.2b [3.3 BETA])
Fixed an issue causing multi's to contain themselves
Added some error checking to ensure a multi cannot be placed inside another multi.
Fixed an issue causing items and characters on boats to move multiple spaces.
Fixed an issue causing boats to lock the client.
1/30/2006 - Xuri
Added missing hairstyle (spiked) for female elves
1/29/2006 - giwo (0.98-3.2a [3.3 BETA])
Fixed several issues with CPOpenBuyWindow fixing an issue causing items in buy windows to display improperly.
Fixed an alignment issue with CPItemsInContainer logging.
Removed CItem::Sort() as it is now superfluous.
Moved CItem::WalkXY() to CBaseObject.
Minor updates to cSkills::RandomSteal().
Removed JS items[]. access.
29th January, 2006 - Maarc
Encapsulated JS class name retrieval into JSEncapsulate and switched over to using that everywhere
Fixed a potential bug (or at least, a naughtiness) with CBase_Teleport, with premature casting
Fixed a bug where if ApplySection() was called with an empty string, it wouldn't abort correctly (JS Engine)
Fixed a possible issue with Karma(), where we reset on caps, but don't update our calculations
Added necromancy, focus, chivalry, bushido and ninjitsu to skills in JS engine
1/28/2006 - giwo (0.98-3.1i [3.2 RC])
Fixed some minor issues with LineOfSight().
Began to break LineOfSight() into smaller manageable functions.
Renamed SeekMap0() to SeekMap() to better represent it's ability to seek any map file.
More fixes for const correctness.
1/28/2006 - giwo (0.98-3.1h [3.2 RC])
Fixed a minor bug in healing.js
Made use of the JS Method CanSee() for LoS checks in JS magic functions.
Minor code change in tempeffects().
Updated the version number to reflect recent changes by Maarc and Xuri.
Fixed an issue causing JS Skills not to function if a character had a script assigned to him.
1/28/2006 - Xuri
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)
Fix in Line of Sight-code makes line of sight-checks more reliable (giwo)
1/27/2006 - Xuri
OnHungerChange JS event will now execute both for hunger level increase as well as decrease, and will also work as global script (Grimson)
1/26/2006 - Xuri
Hungercheck for players should now be working again (Grimson)
26th January, 2006 - Maarc
Fixed a bug with clumsy JS (visibility not resetting properly)
Added JS implementation for heal and feeblemind
Added JS implementation for magic arrow, but it relies on MagicDamage(), which is not completely implementable (missing Karma, Fame and CPDisplayDamage)
Added a ValidateObject() function to the JS engine, that behaves the same as it does in the C++ code
Updated 'set command to support setting of health (via health or hp)
NOTE: Tweak seems to be broken (the buttons don't fire anything), and I have no idea why
NOTE: Heal is currently a vampiric heal (some health is subtracted from the caster to heal the target). This is *not* a new behaviour.
NOTE: Tweaked up magic arrow damage (a GM mage was doing less than 4 damage every time).
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).
Previously, a successful check would always draw off a fixed amount of damage ( 10% of your skill level )
Adjusted the JS socket property for characters, so that it returns an explicit NULL object if there is no socket attached
NOTE: Researching into JSExtendedClass instead of JSClass, so that we can implement equality testing (like, attacker != caster sorts of things)
25th January, 2006 - Maarc
Moved checkkey(), processkey() and cl_getch() from uox3.cpp into CConsole methods
Added a key/command handler console exposure to the JS environment (involves a secondary runtime because of threading!)
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
Added functions Console.BeginShutdown() and Console.Reload( intVal )
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
Included an example script that takes the old 1->9 keys and implements them through the new JS routines
Included an example script that takes the old shutdown keys and implements them through the JS routines
Couple of prettying up with the loading code and what it displays
Fixed an error with validation of skin and hair colours with human races (my mistake!)
Fixed a dyed underwear issue with newly created players (Xuri)
1/23/2006 - Xuri
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)
22nd January, 2006 - Maarc
Added a P_TIMESTAMP define to Config.h, for timestamping packet logs (through the use of RealTime)
Removed unnecessary defines from Config.h
Fixed a typo or two
Removed some debug code I committed by accident
Our packet logs were generating 7 column data, not 8!
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= )
Updated CPCharAndStartLoc to log a few more flags
Added a detailed Log routine to CPEnableClientFeatures
Moved Capped() in pcmanage.cpp to higher upwards
Changed CPICreateCharacter::Log to dump out hex values for body/skin colours
Added some preliminary support for elvish bodies
Needs doing: Adding random names list 3 (elf male) and 4 (elf female) for incognito
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)
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
Added a CanSee() routine to JS based socket and character objects. Syntax is as follows
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
21st January, 2006 - Maarc
Fixed an Alignment issue in dumping out CPCharAndStartLoc (converting tabs to explicit spaces)
Turned out last byte of the packet as a real number, rather than a UI08 which is interpreting as a char
Updated some packet notes from what I could scrounge through the net
Added basic CPIMetrics class to read in the 0xD9 packet that gets sent
Fixed a logging issue with CPCharAndStartLoc that wasn't taking the extra characters into account
Fixed a logging issue with CPCharAndStartLoc that was trying to dump out location details as ASCII codes, not as strings
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
CPISecondLogin logging claimed to be packet 0x80, when in reality, it's 0x91
Unknown byte in CPIFirstLogin now displayed numerically, rather than as a dodgy ASCII char
Changed Seed IP of CPRelay to 0xFFFFFFFF
Moved pSplit() and PackShort() from CPacketSend.cpp to CPacketReceive.cpp, given that's the only place that it is even used
Removed some unnecessary dead code
1/20/2006 - Xuri
Yumi-bows should now use arrows instead of crossbow bolts.
12/16/2005 - giwo (0.98-3.1g [3.2 RC])
Fixed an issue with context menus causing one to attempt to "snoop" their own pack.
Fixed a crash when attempting a random steal on a character with no items.
Fixed an issue causing the 'time command to have incorrect spacing.
12/13/2005 - giwo (0.98-3.1f [3.2 RC])
Updated CDictionary.cpp to be const correct, as well as adding some error checking to prevent data corruption.
Removed CACHEMULS from the uox.ini as it is no longer used.
Changed uox.ini entry SHOWHIDDENNPCS to SHOWOFFLINEPCS to better reflect its function.
Fixed an issue with SHOWOFFLINEPCS causing offline pc's to display even if it was set to 0.
Fixed a minor bug with HTML output when the UOX3.exe was not in the base UOX directory.
Fixed a couple of entries in teleport.scp that would cause you to be stuck in britain sewers.
Updated items.cpp and npc.cpp to be const correct.
12th December, 2005 - Maarc
Further update to HowTo, making sure it works through both paths
11th December, 2005 - Maarc
GumpInfo type 7 should ignore name, only deal with stringValue. Code updated to reflect this (fixes AddData( str, str, int ))
9th December, 2005 - Maarc
Howto should be fixed so it won't crash on target based commands
Howto should also support JS commands now, at least in so far as it displays the txt file, if one exists
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
Auto correct bad multis when encountered (setting to generic house / generic boat)
***note this is untested*** Insufficient time to install the UO client, and needs to be verified by Xuri or Giwo
12/07/2005 - 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 (giwo)
12/04/2005 - Xuri
Fixed a bug where skillgain could happen by attempting to craft without having enough resources available
Updated AreaCharacterFunction, AreaItemFunction and AreaObjFunc to accept both character and item objects as source-object
11/23/2005 - giwo (0.98-3.1e [3.2 BETA])
Removed cSkills::TrackingDirection() as cMovement::Direction() does the same thing.
Fixed a crash caused by canceling the tracking menu.
Fixed an issue causing not all animals to be trackable with the tracking menu.
Added support for clicking on the Tracking Arrow to stop it from displaying.
Modified packet overloading so one cannot run both the overload and the default packet handling, as it would cause a socket error.
Added support for selecting popup menu entries.
Fixed a possible issue with doubled up entries in spawn.dfn and regions.dfn.
Fixed an issue causing UOX3 to hang forever on character creation.
Added file and function documentation to books.cpp and msgboard.cpp
11/20/2005 - giwo (0.98-3.1d [3.2 BETA])
Added CPPopupMenu allowing for easier customization of popup menu's.
Removed cScript::spellRegistration, commandRegistration, skillRegistration in favor of
cScript::ScriptRegistration( string skillType ) IE ScriptRegistration( Skill ).
Added the ability to overload Packets in the JS.
Removed xFTP Server code as UOX3 should be a game server, not an FTP server.
Moved spawnregions and regions into CWorldMain. (renaming them to spawnRegions and townRegions).
Modified spawnRegions and townRegions to load in based upon the number assigned for them in the scripts.
Added a socket variable to PlayerValues_st to remove the need to loop through online sockets looking for a characters socket.
Fixed some minor issues with CTEffectContainer.
Fixed an issue that could cause a characters murder decay timer to stop counting.
Added MURDERTIME to the worldsave to make murder decay time persistent.
Fixed some minor compiler warnings.
Added support for compiling under Visual Studio Express 2005
Changes to uox.ini:
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:
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.
11/19/2005 - Xuri
Added new doors from ML-client, expanded DoorNewLocation-function to cover all doors
11/5/2005 - giwo (0.98-3.1c [3.2 BETA])
Fixed several issues with Writable book handling.
Modified .bok handling code (note that this will cause any old .bok files to be invalid).
Added support for the 0xD4 (New Book Header) packet.
Fixed some issues in /books/books.dfn causing pre-defined books not to be displayed.
Fixed some issues in items/misc/books.dfn causing pre-defined books not to open.
Removed CSocket authorbuffer, pagebuffer, and titlebuffer.
Fixed an issue causing Spells not to function.
Added JS Packet method .ReserveSize( len ); for optimization purposes.
11/3/2005 - giwo (0.98-3.1b [3.2 BETA])
Added a JS Packet Class, usage:
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.
Fixed a login crash caused by the Updates scroll.
11/1/2005 - giwo (0.98-3.1a [3.2 BETA])
Updated some areas of the code to conform to const correctness.
Fixed an issue causing vendor "Buy" windows to display improperly.
Added some more error-checking to the ClearTrades() function.
Removed JS CChar_Freeze() and CChar_Unfreeze() as the .frozen property does the same thing.
Removed JS CItem_SetPoison() as the .poison property does the same thing.
10/17/2005 - giwo (0.98-3.0q [3.1 RC])
Improved the MapResource handling code.
Improved the MapRegion handling code, reducing waste.
Fixed a possible issue causing invalid data in the refreshQueue and deletionQueue.
10/15/2005 - giwo (0.98-3.0p [3.1 RC])
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.
10/5/2005 - giwo (0.98-3.0o [3.1 BETA])
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.
9/29/2005 - giwo (0.98-3.0n [3.1 BETA])
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.
9/27/2005 - giwo (0.98-3.0m [3.1 BETA])
Moved some more variables from Base Characters to Players.
Organized and documented many functions in CChar.
Changed itemLayers array to a std::map.
9/27/2005 - giwo (0.98-3.0l [3.1 BETA])
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().
9/23/2005 - giwo (0.98-3.0k [3.1 BETA])
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
9/20/2005 - giwo (0.98-3.0j [3.1 BETA])
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.
9/18/2005 - giwo (0.98-3.0i [3.1 BETA])
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
9/13/2005 - giwo (0.98-3.0h [3.1 BETA])
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.
9/07/2005 - Xuri
Added support for new mounts: giant fire beetle, hiryu, chimera, cu sidhe, mondain's steed
9/07/2005 - Xuri
Fixed an error in a debug message that would stop UOX3 from compiling if DEBUG_WALKING was enabled.
Fixed; UOX3 didn't retrieve the correct FY2 value for spawned NPCs using wandermode 3 (shopkeepers, for instance).
Added JS InitWanderArea function - allows wanderareas to be dynamically reset through JS.
9/06/2005 - Xuri
Check to see if animals have NPCAI 2 before guarding them in town when COMBATANIMALSGUARDED=1 in uox.ini
9/05/2005 - Xuri
Fixed superfluous empty spaces after reputation titles and race names in paperdolls.
Removed [murderer] appearing behind the character names hovering over the head of characters.
August 17 2005 - Maarc
Altered AreaCharFunc code in cScript to also support Items
Added "AreaItemFunction" as an equivalent to AreaCharacterFunction - perhaps break this into something a little more specific? eg Items / Multis?
Added JS StaticAt function - takes 4 parameters - x, y, world, [tileID] (tileID is optional - if not specified, ANY static at that location will match)
Added JS StaticInRange function - takes 5 parameters - x, y, world, radius, tileID
8/13/2005 - giwo (0.98-3.0g)
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).
8/7/2005 - giwo (0.98-3.0f)
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).
8/4/2005 - giwo (0.98-3.0e)
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.
7/29/2005 - Maarc
Several character/item properties and one item-method added to JS (check JS Docs, 0.42)
7/16/2005 - giwo (0.98-3.0d)
Continued work on a complete rewrite of the Messageboard system.
Removed some unnecesarry debug code from Walking functions.
7/14/2005 - giwo (0.98-3.0c)
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.
6/16/2005 - giwo (0.98-3.0b)
Added support for multiple TriggerWords in a string of speech.
Fixed JS event inRange() so it will function as expected.
Fixed a minor issue that caused the wrong code to be executed when updating nearby objects.
6/16/2005 - Xuri
Added new NPCAI (5) for NPC fighters. Same as guard-ai (attacks monsters/criminals), only without the extra guard-functions.
6/14/2005 - giwo (0.98-3.0a)
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.
6/14/2005 - Xuri
Fixed server crash when clicking on server status button in help menu.
6/12/2005 - giwo (0.98-3.0)
Fixed an issue causing objects not to be properly removed from their spawnregion on deletion.
6/12/2005 - Xuri
Changed font-type and colour displayed for item-based TextMessages.
6/11/2005 - ShadowBranch
Changed the hardcoded default starting location from 1000, 1000, 0 to 1495, 1629, 10 - which is the Sweet Dreams Inn in Britain.
6/9/2005 - giwo
Fixed a bug causing items not to be able to be picked up
6/8/2005 - Xuri
Adjusted NPCSpeed from 1.0 to 0.7 to increase their speed.
6/7/2005 - Grimson
Fix in void CSpawnRegion::doRegionSpawn() to spawn the correct number of NPCs as per defined in spawn.dfn
4/22/2005 - giwo (0.98-2.8h)
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.
Fixed a minor issue with SET commands.
Added SET command MOREXYZ.
4/16/2005 - giwo (0.98-2.8g)
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 exploding potions to not function properly.
Fixed an issue causing smelted ingots to not be stackable.
Added ingots and gold to harditems.dfn to safeguard against stacking issues.
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.
4/14/2005 - giwo (0.98-2.8f)
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).
4/2/2005 - giwo (0.98-2.8e)
Moved Begging skill out to JS.
Moved Detecting Hidden skill out to JS.
Fixed an issue causing JS Character method SetSkillByName() to always return false.
Fixed an issue causing AreaCharacterFunction() to invalidate any characters and sockets in the function that called it.
Fixed a similar issue causing IterateOver() to invalidate any characters and items in the function that called it.
Fixed an issue that would set FD_SETSIZE to a much lower value than it should be on some *nix systems. (punt)
Replaced instances of strupr and strlwr with their UString counterparts. (punt)
Fixed an issue causing NPC's to hunger (and die quite quickly).
Removed many superfluous entries from uox.ini (BEGGINGTIMER, HUNGERDAMAGERATE, HUNGERTHRESHOLD, BEGGINGRANGE).
Modified the enum cSD_TID in CServerData.h to standardize naming habits.
Moved many timers from individual entries in CServerData into the serverTimers[] array.
3/11/2005 - giwo (0.98-2.8d)
Included jr's fixes for cygwin compatability.
Began work on allowing UOX to compile under MinGW.
Many minor gcc warning fixes.
3/5/2005 - giwo (0.98-2.8c)
Fixed a couple memory leaks.
Fixed a couple areas where we were attempting to free memory that had already been freed.
Bumped the rate of stamina loss on an overweight player to 5 per-step (This should be configurable in the future).
March 4 2005 - Maarc
Updated 'validcmd so that it dumps out information about JS based commands as well
3/1/2005 - Xuri (giwo)
Fixed a bug in HandleGuardAI() causing guards to kill cute, innocent "grey" kittens (and other animals) after taking care of any real criminals present
2/28/2005 - giwo (0.98-2.8b)
Removed some duplication in the callGuards() routine.
Fixed a possible issue that could cause Timer events to crash after reloading the JS engine.
Fixed a possible issue that could cause Magic scripts to crash after reloading the JS engine.
Fixed an issue causing some newbie clothing to be destroyed in combat.
Fixed an issue on loading teleport.scp causing some locations to not function properly.
Added the ability to reload entire sections of the JS Scripts.
JS Commands will now properly reload when reloading the Commands.
JS Commands will now properly register when reloading the JS Scripts.
2/27/2005 - giwo (0.98-2.8a)
Fixed an issue causing 'GO PLACE to reach an invalid location after about 140.
Fixed an issue causing teleport locations to not function properly.
Fixed characters attempting to mount a creature when already on a mount.
Fixed an issue causing dropping a stack of scrolls onto a spellbook to delete all of them.
Fixed an issue causing items equipped to an NPC on creation or newbie at creation to be deleted.
2/26/2005 - giwo (0.98-2.8)
Added support for "EQUIPITEM" tag in newbie.dfn.
Added JS Character Prop skillToTame.
Added JS Item Prop murdertime.
Moved the following skill functionality out to JavaScript:
Animal Taming
Anatomy
Arms Lore
Forensics
2/18/2005 - giwo (0.98-2.7d)
Changed all the miscellaneous #ifdef DEBUG statements to #if defined( UOX_DEBUG_MODE ) for uniformity.
Fixed a few minor issues in cScript.cpp.
Removed cScript::RemoveFromRoot().
Fixed some areas where structures were not initializing variables with default values.
Fixed an issue with a couple of the JS Scripts:
commands/misc/repeatingcmds.js and server/resource/pitchers.js using "var" keyword
for initializing a global variables, was causing a crash with the newer js32.dll's.
2/15/2005 - giwo (0.98-2.7c)
Made some structures private members of their only calling class.
Removed unused InUseEntry2()
Moved Spirit Speak skill out to JS.
Moved Animal Lore skill out to JS, and re-wrote it to use a gump interface.
2/10/2005 - giwo (0.98-2.7b)
Moved Hiding Skill out to JS.
Moved Stealth Skill out to JS.
Moved Evaluate Intelligence skill out to JS.
Added RegisterSkill() JS Function.
Added .steath prop to JS Characters.
Fixed an issue with .attacker prop causing it to return the Characters target.
2/8/2005 - giwo (0.98-2.7a)
Added the ability to reload a single JS file to CJSMapping.
Added SE Function ReloadJSFile, along with a new command in js, RELOADJSFILE
2/7/2005 - giwo (0.98-2.7)
Replaced trigger.cpp/.h with CJSMapping.cpp/.h Fixing several issues with JS Scripts.
Added .desc prop to JS Items
2/6/2005 - giwo
Fixed an issue causing JS commands to not function or crash the server
Fixed an issue causing findMulti() to return items that were not Multis.
February 5 2005 - Maarc
Probable fix for Polymorph not returning to the right body (can't test)
The newbie dagger is no longer made on new character creation - use newbie.dfn people! (Not entirely complete, as not all references to EXTRA3 were removed)
SaveStatistics() added to CWorldMain, which only really writes out the total of characters and items, but using it to help with a fix for WorldBuilder
2/3/2005 - EviLDeD
Fixed a small problem with VC6 not liking the initializer list for the TAGMAPOBJECT structure.
2/3/2005 - EviLDeD
Fixed the Crash on save bug after reloading the JS.
Moved the TAGMAP system from jsval to TAGMAPOBJECT(See source)
Removed some of the console spam used for testing purposes
1/30/2005 - EviLDeD (Contrib: Rynet)
Corrected a display problem with boats. This has been commented out due to being a work around for teh SetZ/SetDispZ bug which has been fixed I believe
Corrected some copy/referance issues in cSocket
1/28/2005 - EviLDeD
Removed CTriggerScript class as it was redundant. Moved functionality into CTrigger class
Improved the command load process by having CommandRegistration() send in the contextID responsible for command RegisterCommand()
Increased amount of console spam looking for the full JS reload IE: console '8' that will crash the server on the next world save
NOTE: Currently the console '6' Reload commands appears to operate correctly with no crash upon save. At this point it is recomended that any object/item/char script changes that are NOT magic or command related be done while the server is shut down until a solution can be found for this.
NOTE: When solutio is found all console spam and comments will be removed internally.
1/16/2005 - EviLDeD
Increased the JS global context stack size to 32kb from 8kb just to be safer
Added cCommand::UnRegister(string,cScript*) function to facilitate removal of named command objects. Currently not in use.
Added some console spam to help diagnose the AddMenu/PolyMorph gump issues not displaying correctly
Fixed(Partially) the JS Command reloading. Now commands are correctly loaded, however side effect is that the server will
crash at save time. Once this last issue is sorted out then this bug will be fixed.
January 15 2005 - Maarc
Removed saving/loading of ObjectType property - reduces load time by 40 seconds (420 down from 460) on a 70k item / 2k char world converted from old system
Explicitly setting some pointers NULL after they have been destroyed
Removed call to StoreRandomItemValue() in CMultiObj::LoadRemnants() - not really necessary, and the function call needs to be after world load, not during (ie candidate for PostLoad, if any)
1/12/2005 - giwo
Moved Alchemy functionality out to JS.
Moved the following use functionality out to JS.
Scissors
Potions
Moongates
Spun Fabric
Unspun Fabric
Cotton Plant
Removed unused XGM code from the source.
1/9/2005 - giwo
Moved the following Skill Functions to JS.
RepairBow
RepairLeather
Tinkering
Tailoring
Fletching
Carpentry
Moved Food consumption functionality out to JS
Moved teleport rune functionality out to JS.
JS Changes
Changed CChar_MakeMenu to CMisc_MakeMenu to allow access to sockets.
Modified CMisc_MakeMenu to allow passing the skill number.
Removed old style MakeMenu() function.
Added CChar_FindItemType( itemType ) to allow searching for items by type.
1/8/2005 - giwo
Fixed some minor issues with the new jse_typeassociations.scp handling.
Included skills/healing.js in a first step toward putting skills in JS.
Removed Skills::HealingSkillTarget
1/7/2005 - giwo
Made some adjustments to the Client update range.
Converted many functions to use references rather than pointers.
Fixed Mark, Recall, and Gate Spells and Commands to handle different worlds.
Added js/jse_typeassociations.scp
Added CEnvoke to handle all envoke functions.
Added CTriggerScripts to simplify script handling in CTrigger class.
Renamed the class Triggers to CTrigger to conform to proper class naming standards.
1/2/2005 - EviLDeD
Fixed the issue of client crash on the 3D client when access the 'add menu
1/1/2005 - giwo
Fixed an issue causing corpses to not display to their "owner".
Changed how we play the Death Animation to stop corpses from "moving".
Altered corpses update to send a few less unneeded QueryToolTip packets.
12/31/2004 - giwo
More cleanups in CPacketSend.cpp
Renamed doDeathStuff() to HandleDeath() and moved it into pcmanage.cpp.
Cleaned up the code a bit in HandleDeath() and its sub-functions.
Fixed an issue causing starting skin color to disregard the players selection.
Brought down the range at which items in containers were sent to other players.
Added a GM check before updating a buy, sell, or bought layer to a character.
Fixed an issue causing GOLD tag on NPC's not to be read in properly.
JS Fixes
Fixed an issue causing 'deletechar not to function (thanks Xuri).
Fixed an issue causing 'wholist off not to function properly.
12/31/2004 - EviLDeD
Updated the version to 0.98-2.5b
Added, and fixed all the doors. Now they all should work properly including the new expansion
Added all door ID's to harditems.dfn to ensure that all doors get type=12 including the new doors.
12/30/2004 - EviLDeD
Updated the version to 0.98-2.5a this includes the changes that Giwo has commited. Remember to increment the version please.
Fixed a small bug with accounts allowing more than one client to log in under a single account and manipulate the character.
Fixed some logistics with the new doors, they all should work now, as long as they are set to type 12.
12/30/2004 - Xuri
Added support for the new Samurai Empire weapons, and added three new WeaponTypes, DUAL_SWORD, DUAL_FENCING_STAB and
DUAL_FENCING_SLASH, to get more fitting combat animations for some of those weapons.
12/29/2004 - giwo
Removed CChar::dispz as it served no purpose.
Fixed an issue causing the Buy Window to not display prices and display items only after scrolling.
Fixed an issue causing the server to send extra unnecesarry QueryToolTip packets.
Fixed packet issues causing Dir and Z not to function properly on Items.
Fixed a packet issue causing combat targets not to remaing highlighted.
Fixed a crash on login casued by FindPlayersInVisrange().
Minor cleanups in CPacketSend.cpp
12/27/2004 - evilded
Added code for until now unsupported doors, including new SE doors (experimental!).
Uncommented PORT functionality in source. This is the port in which UOX3 will listen on, it is wrong to assume that the port
listed on the first server list line in the ini file is correct. In almost ALL cases they would be the same however what if
they are not, and there are multiple servers listed that do not share the same listening port 2593.
11/24/2004 - giwo
Removed unnecesarry Constructors/Destructors and did some minor updates.
11/21/2004 - giwo
Fixed an issue causing the first item in a list not to be deleted when the list was cleared.
8/22/2004 - giwo
Began enforcing stricter class naming rules in an effort to standardize the code (IE CSocket not cSocket).
Removed some unneeded global variables.
Rewrote ShowSkillTarget().
Sized down CTownRegion::midilist to a UI16.
Sized down some variables in the CSpawnRegion class.
Fixed an issue causing all characters to be created with at least 1.0 base skill level.
Minor cleanups.
Moved 'wipe' and 'iwipe' out to JS.
JS Changes:
Fixed an issue with CChar_SetSkillByName().
Added Character prop .tamed.
8/20/2004 - giwo
More use of const_iterators where applicable.
Changed some vector.size() comparisons to vector.empty().
Minor fixes with a couple packets.
Moved 'areacommand' out to JS.
8/13/2004 - giwo
Converted a few areas of code to using refrences rather than pointers.
Consolidated some code in cWeather.cpp and cRaces.cpp.
Fixed a couple areas where an ACCOUNTSBLOCK was being copied and altered, but not set back on the object it was copied from.
Implemented a temporary fix for multiple users on one account and other related issues.
Modified CChar::petsControlled to make use of CDataList.
Made use of const_iterators in place of iterators in many places.
Modified a few more instances of CDataList to be handled by an accessor that would return a pointer.
Removed MOREB (MORE2) from CItem.
Modified Monster Gates (polymorph gates) to make use of items description tag in order to use string-type script entries.
Minor fixes and updates.
JS Changes:
commands/targeting/set.js: Fixed an issue causing 'set owner to not function properly.
8/6/2004 - giwo
Fixed an issue causing extra invalid servers to appear in the server list.
Added CPSellList to handle sending the vendor "sell" gump.
Fixed weight adding twice every time a player picked an item up.
Merged in some linux warning fixes.
Removed some superfluous includes.
Moved 'where' command out to JS.
8/4/2004 - giwo
Fixed some Level 4 Warnings.
JS Changes:
CChar_Gate now supports passing a locations.dfn entry number (IE mChar.Gate( 1 ); ).
CBase_Teleport now supports passing a locations.dfn entry number (IE mchar.SetLocation( 1 ); ).
Added CSocket_SendAddMenu( menuNum ).
Command Updates:
Moved 'addx' out to JS.
Moved 'add' out to JS.
Moved 'xgo' out to JS.
Combined 'xgoplace' with 'xgo'.
Moved 'xgate' out to JS.
Moved 'go' out to JS.
Moved 'itemmenu' out to JS.
8/3/2004 - giwo
JS Changes:
Modified SoundEffect() as it was playing a sound one less than specified.
Updated CChar_SetSkillByName() to return true if it successfully set, false otherwise.
Updated many of the JS commands to fix some minor issues and improve output.
Added GetSocketFromIndex()
Command Updates:
Moved 'fix' out to JS.
Moved 'tele' out to JS.
Moved 'xteleport' out to JS.
8/1/2004 - giwo
Changed some variable sizes in order to reduce type mismatches and memory waste.
Created a new class, CDataList, this is basically a safe wrapper for deque, where one can specify what they are storing.
This allows us to consolidate quite a bit of code from several different classes by simply making our lists CDataList< objtype * >
rather than using DCHARLIST or DITEMLIST, etc.
Old style listings:
------------------
private:
DCHARLIST chars;
DITEMLIST items;
DCHARLIST_ITERATOR charsIter;
DITEMLIST_ITERATOR itemsIter;
public:
FirstChar();
NextChar();
FinishedChars();
NumChars();
FirstItem();
NextItem();
FinishedItems();
NumItems();
AddChar();
RemoveChar();
AddItem();
RemoveItem();
------------------
New Style:
------------------
public:
CDataList< CChar * > chars;
CDataList< CItem * > items;
------------------
Everything else is handled internally (and thus any bugs that arise can be fixed in one place, not half a dozen).
JS Changes:
New character prop: magicReflect, sets and returns if they have magic reflect on
New character methods:
SpellMoveEffect( target, spell )
SpellStaticEffect( spell )
BreakConcentration( [socket] )
Wrote clumsy.js, the first UOX3 spell to be put in JS. This script is mostly working, but there are
some issues that need to be worked out before the entire spell system is put out to the JS engine.
Currently known issues:
No way to cause one target to attack another in JS.
No Line of Sight checks in JS.
August 2 2004
Changed __unix__ references to UOX_PLATFORM != PLATFORM_WIN32
July 31 2004
Increased JS context stack size from 0x2000 to 0x4000 (we may need the extra space)
Updated JSEncapsulate for delayed initialisation (useful for optional parameters to methods)
Implemented Console object in JS
Methods
Print 1 (text to print, include \n at the end unless you're sending multiple mesesages)
Log 1 (text to print, same as above. Optional second parameter is the name of the file to log it into)
Error 2 (error level, text to print)
Warning 2 (warning level, text to print)
PrintSectionBegin 0
TurnYellow 0
TurnRed 0
TurnGreen 0
TurnBlue 0
TurnNormal 0
TurnBrightWhite 0
PrintDone 0
PrintFailed 0
PrintPassed 0
ClearScreen 0
PrintBasedOnVal 1 (pass true or false, it will say pass/fail based on this)
MoveTo 2 (x coord, y coord - if you want the same line, y == -1)
PrintSpecial 2 (colour of text, text to print)
Properties (most of these can be ignored, as they do very little eg boundaries)
left left (always 0)
top top (always 0)
height height (always 0)
width width (always 0)
filter filter setting
mode filter mode
level filter level, integer
logEcho boolean - determines if log calls get echo'd to screen
Wrote a console test driver script (command consoletest)
Posix compliance fix from xir
Added MSVC7.1 project files
July 29 2004
Note: We need to change references to __unix__ to something more like UOX_PLATFORM != PLATFORM_WINDOWS or UOX_PLATFORM == PLATFORM_LINUX
Some of che's fixes were not fixes (ie commenting out the throws) or improperly done (platform specific decls don't go in uox3.h)
7/28/2004 - giwo
Minor fixes, cleanups
Included che's linux fixes
July 28 2004 - Maarc
Possible crash in _add avoided
GetAmount() returns a UI16 and we were comparing to 0xFFFF, no longer needed
Three possible crashes in ShowCName stepped around
Called GetWord rather than GetDWord for magic targeting
Possible crash in addRandomColor avoided (only if colorlist didn't exist)
Possible crash in LoadFromScript (townregions) avoided
Fixed an issue that VC7.1 finds. We clear() a list, and then reference the first item, in processing the INI, which crashes
Modified some changes from che
Fixed some typo declarations
Moved stdexcept into UOXStdHeaders, so that exceptions can be used wherever needed
for loop problem declaration (using var outside loop)
7/25/2004 - giwo
Removed several vtables from classes that were not subclassed
Added struct GoPlace_st and CWorldMain::goPlaces map to replace re-reading entries every time we use GoPlace.
Removed MakePlace()
Removed cSocket::AddX & AddY and renamed AddZ to ClickZ
Fixed an issue causing invalid entries to exist in the ObjectFactory (causing a crash on WIPE ALL)
Once again merged deletionIQueue and deletionCQueue back together as a QUEUEMAP (as ObjectFactory fixed the original problem).
Combined CBO::Visible(), CChar::Hidden(), and CChar::PermHidden() into a single CBO::Visible() using enum VisibleTypes
0 = Visible
1 = Temporary Hidden (Skill, Item visible to owner)
2 = Invisible (Magic Invis)
3 = Permanent Hidden (GM Hide)
Moved all of the remaining targeting functions out of cTargets and removed the class along with targeting.h
Converted CWM::creatures[] into a map and creat_st into class CCreatures.
Converted TeleLocationEntry into class CTeleLocationEntry.
Fixed an issue with UString::number() causing it to only return decimal values.
JS Updates:
Changed SetSecondsPerUOMinute() to SecondsPerUOMinute() used to Set and Return the value.
Converted ReadBytes( socket, offset ) to CSocket_ReadBytes( offset )
Converted Get DWord/String( socket, offset ) to CSocket_Get DWord/String( offset )
Converted Set Byte/Word/DWord/String( socket, offset, newVal ) to CSocket_Set Byte/Word/DWord/String( offset, newVal )
Renamed CChar_WanderBox() to Wander() and allowed it to handle a circle (3 values) or box (4 vals).
Modified Get/Set Timer() to work for both Sockets and Characers (Perhaps need this for Items as well).
Added CItem_Dupe() to allow duping of items in JS.
Added CChar_Jail( numSecs ) and CChar_Release() to Jail and Release characters
Added IterateOver( objectType ) and onIterate( object ) to allow looping through world objects.
Added CChar_Kill() method to kill a character.
Added SendStaticStats() to build an info gump for statics and map tiles.
Added Gump.AddPageButton() to allow Next/Last page buttons.
Added NumToHexString() to allow converting a number to a hex string.
Added SetSkillByName() method to CChar to simplify setting skill by name.
Added a map to map strings to objectTypes;
Currently this is used in CreateBlankItem(), CreateDFNItem() and IterateOver()
"BASEOBJ" = OT_CBO
"CHARACTER" = OT_CHAR
"ITEM" = OT_ITEM
"SPAWNER" = OT_SPAWNER
"MULTI = OT_MULTI
"BOAT" = OT_BOAT
Properties:
Characters:
Added isJailed prop to check if a character is in jail
Added squelch prop to toggle Characters squelched status.
Added spattack prop to set NPC's Spell Attack value.
Added spdelay prop to set NPC's Spell Delay value.
Added aitype prop to set NPC's AI Type.
Added split prop to set amount of NPC's to split into on hit.
Added splitchance prop to set NPC's chance of splitting on hit.
Added trainer prop to toggle NPC's ability to train skills.
Items:
Added corpse prop to toggle whether or not an item is a corpse.
Added strength prop to set items str-to-wear value.
Added wipable prop to toggle items ability to be wiped.
Added buyvalue and sellvalue props to set items value.
Added restock prop to set amount of items to restock in a shop.
Added devinelock prop to set items Devinely Locked property.
Spawners:
Added spawnsection prop to set script section for spawner to pull from.
Added sectionalist prop to toggle whether or not the above section is a list.
Added mininterval and maxinterval to set how many of an item to respawn per call.
Misc:
Renamed CSocket_addz to CSocket_clickZ
Added weight prop to Characters and Items to get and set the weight value.
Added isSpawner prop to Characters and Items to identify a SpawnItem.
Added allskills prop to Skills class to set all skills at once.
Command Updates:
Moved RESURRECT out to JS.
Moved NACCT out to JS.
Moved GUMPMENU out to JS.
Moved JAIL and RELEASE out to JS.
Moved HIDE and UNHIDE out to JS.
Moved SECONDSPERUOMINUTE out to JS.
Moved NPCBOUND to JS and Split it into NPCRECT & NPCCIRCLE.
Moved SQUELCH and MUTE out to JS.
Moved DUPE out to JS.
Moved SHOWDETAIL out to JS.
Moved KILLALL out to JS.
Moved DELID out to JS.
Moved CLEANUP out to JS.
Moved ZEROKILLS out to JS.
Moved TELESTUFF out to JS.
Moved KICK out to JS.
Moved DELETECHAR out to JS.
Moved KILL out to JS.
Moved ISTATS out to JS.
Moved CSTATS out to JS.
Moved SET out to JS.
Moved INCX, INCY, and INCZ out to JS.
Removed WF
7/22/2004 - giwo
Added JS access to sockets xtext (string) property.
7/20/2004 - giwo
Fixed an issue causing a crash on shutting down the server.
Modified UOX to disallow loading one script whilst another is loading.
Fixed an issue causing newer clients to lockup when using a boat.
Fixed an issue causing PostLoadProcessing() to never be called for Multis.
7/18/2004 - giwo
Fixed an issue causing items and characters not to be properly removed from sight.
Fixed a minor problem causing statwindows to not update properly.
Fixed an issue causing item and characters to not be distinguished properly when doing a calcFromSer().
Fixed an issue causing client to lag permanently shortly after logging in.
Fixed an issue causing UOX to bail out when setting the container of an item in JS.
Consolidated some code in cSocket.cpp
Began moving commands out to js:
ACTION
ALLMOVE
BOLT
BRIGHTLIGHT
BUY
CY (Now cnsyell)
DARKLIGHT
DUNGEONLIGHT
FULLSTATS
GATE
GLOW
GMOPEN (Now openlayer)
GY (Now gmyell)
SGY (Now adminyell)
SHOWTIME
HEAL
HOUSEICONS
MANA
MARK
MIDI
MOVETOBAG
NPCTARGET (Now follow)
READINI (Now reloadini)
RECALL
RELOADACCOUNTS
RELOADDEFS
REMOVE
REMOVESHOP
RESEND
SELL
SETPOISONED
SETRACE
SFX
SKIN
STAMINA
UNGLOW
WHOLIST
XBANK (Now openbank)
Added the following functions to the JS engine:
Yell( socket, toYell, commandLevel )
GetDictionaryEntry( entryNum, [language] )
RaceGate( socket, character, raceNum )
WorldDarkLevel() to set and return cSD:WorldLightDarkLevel().
WorldDungeonLevel() to set and return cSD:DungeonLightLevel()
Added the following character props & methods:
(bool) allmove
(bool) houseicons
OpenLayer()
Added the following item methods:
UnGlow()
PlaceInPack()
Added the following cSocket props & methods
(object) tempObj
WhoList()
Modified:
Reload(), Now accepts case 9, reload accounts.
GetWorldBrightLevel() renamed to WorldBrightLevel(), now sets and returns cSD::WorldLightBrightLevel()
14 July 2004 - Maarc
------------
Integrated Xuri's dir property for JS items
Bug fix on command_darklight (Xuri)
Altered the ACCOUNTSBLOCK code so that it uses proper constructor rather than assignment (double assignment, essentially)
Removed some unused properties of accounts (bPackPacket)
7/12/2004 - giwo
Added 'FIXSPAWN command to update all item spawners in the world to work with CSpawnItem.
Minor changes.
7/11/2004 - giwo
Fully implemented CSpawnItem, removing remnants of old spawners.
(Note this will break any current spawn items you have in your world, sorry for the inconvenience).
Broke cBaseObject::Dupe() into two functions, Dupe() and CopyData() to allow carrying over cBO settings
to the Duped item and make way for future sub-classes of CItem and CChar.
Modified townregions to now store an npclist to pull guards from and the total amount of guards to spawn.
Updated the CommandList docs with the latest changes to the command list.
Minor consolidations and modifications to the scripts.
Removed /tracking/ and /polymorph/ moving their scripts into /menus/.
Removed /digging/ and /fishing/ moving their scripts into /items/itemlists/.
Fixed up /items/gmmenu/spawners.dfn to function with CSpawnItem changes.
Modified regions.dfn to match up with changes to TownRegions.
Fixed an issue causing advance.dfn to not read in properly.
Fixed an issue causing nested itemlists and npcslists to not function properly.
Added a few more dictionary entries.
09 July 2004 - Maarc
------------
Completely switched over to ObjectFactory code, getting rid of the other stuff - think its best for debugging
Fixed a bug with 'make gm, we were trying to sprintf a std::string
Removed periodic trigger code, as it never has a chance to load or activate, and needs a rethink (more like commands or spells?)
08 July 2004 - Maarc
------------
Changed the saving of Damage property, we read it in as lo,hi and write it as hi,lo - now consistent
Found the non-disappearing horse bug on mounting.... Teleport() does a RemoveFromSight, but by THAT time, we've already... gone :)
2 possible fixes
1) Store the old location so it can be used on RemoveFromSight
2) Tell *everyone* about it
For the moment, I have elected the former until we can decide on a better strategy, as the implementation does get a bit hairy
Implementation was missing for Delete() for CItem and CChar under ObjectFactory mode - by implementing this, wipe works again, amongst other things.
7/7/2004 - giwo
Consolidated all the more's in CItem into a single tempVars[] array.
Once again implemented deques in SubRegions and fixed some issues with list corruption.
Implemented deques in CItem to avoid corruption in Containers
Added CObjectHandler class to replace need for hash tables to map serials to indexes.
Fixed some possible issues with cSpawnRegions.
Fixed an issue causing some crashes involving speech.
Further implementation of CSpawnItem.
Fixed many areas where a hex value did not have the 0x infront of it.
Modified CreateDFNItem() and CreateBlankItem(), now accepts specification of the objecttype (defaults to normal item).
Modified a few of the targeting functions to make way for adding spawner items.
07 July 2004 - Maarc
------------
JS related fixes
"scrollLow" property of Spell objects was set as an index... it's not that, it's an individual value
skillsused is now like baseskills and skills for characters (previously unaccessible)
Removed GetGuildMaster function as it referred to old chars[] array
Converted CalcTargetedChar function to be similar to CalcTargetedItem so it returns a real object
onCallback%i will now set targeted to a NULL object if the object clicked on is not valid, or not an object (eg a tile)
Added the following properties to the JS Character object
townpriv
guildtitle
fonttype
saycolor
emotecolor
attacker
racegate
skillLock
deaths
nextAct
petCount read only
ownedItemsCount read only
cell
Added the following methods to the JS Character Object
GetTimer( timerID );
SetTimer( timerID, numMilliseconds );
Valid values for timerID are:
0 // tCHAR_TIMEOUT
1 // tCHAR_INVIS
2 // tCHAR_HUNGER
3 // tCHAR_POISONTIME
4 // tCHAR_POISONTEXT
5 // tCHAR_POISONWEAROFF
6 // tCHAR_SPELLTIME
7 // tCHAR_ANTISPAM
8 // tCHAR_CRIMFLAG
9 // tCHAR_MURDERRATE
// NPC Timers
10 // tNPC_MOVETIME
11 // tNPC_SPATIMER
12 // tNPC_SUMMONTIME
// PC Timers
13 // tPC_LOGOUT
Updated CItem::SetCont so that it doesn't try and do things it shouldn't during world load
NOTE: We have an issue... we can't validly set all the weight stuff until the world's loaded
OKAY, the base default world now loads with the new object factory, and it's all fun and games.
06 July 2004 - Maarc
------------
JS related fixes
Reenabled the ability to set poison and magic resistance on a race object
All setProperty routines now use JSEncapsulated, should be *much* more tolerant now
Any attempt to do something like mSock.currentChar = pUser; would fail, replacing pUser with the actual current char. It should now behave properly
It is now possible to set a socket's tempInt property
05 July 2004 - Maarc
------------
Fixed a problem where it would crash on reloading JS scripts (via magic and commands)
Removed commented out code that was never used (including tempeffectsoff and tempeffectson)
Added some methods to help with deletion issues in the temp effects queues
These fixed an issue where creating a timer on a just elapsed timer would cause a crash
CCP_TARGET can now be set - char.target = npc;
More support for floats in the use of properties for characters - dex (x2), int (x2), str (x2), mana, stamina, health
Note that it will throw an exception if you do not pass a parameter of the right type
We need a longer term solution to this particular problem. One idea - create a class JSEncapsulate that takes the JSVal and context, and stores the data internally, with methods that allow it to be casted back to a "proper" value
As certainly we will need this for more than just the character class
04 July 2004 - Maarc
------------
nspawnsp and ncspawnsp rolled into CItem class. Only items can be spawners (not NPCs), and all references to those objects now are done within the CItem class, or through FirstSpawn/NextSpawn/FinishedSpawn
Updated documents to not use CHARACTER or ITEM unless where it is actually used, to aid in finding where CHARACTER and ITEM references are that need to be ported to CChar * / CItem *
Updated ObjectFactory with a CountOfObjects method, which allows us to discretely count (if we wish) the number of objects for each type we have
I believe we've just about covered everything in ObjectFactory that is required to encapsulate chars[] and items[]
Removed an unused method in WhoList (GrabSerial)
From what I can see, all references to CHARACTER and ITEM are now done by deletion queues or the char/item handlers
Added Singleton.h from OGRE, and adapted ObjectFactory to be one. We can create and delete this in a local context, and use ObjectFactory::getSingleton() everywhere else we might need it.
Spelling fixes
Begun the integration of the ObjectFactory which is #ifdef'd at the moment. The ObjectFactory integration does NOT compile, and error messages are left in place for what needs to be done.
Some of the stuff we need to be able to do with the ObjectFactory is essentially, a for every char/item in the world... so what we need to do is support FUNCTORS, I think that would be the most useful
The question becomes... what sort of functors? something of the variety of:
bool MyFunction( cBaseObject *working, UI32 &counter, void *extraData );
As this will solve almost everything we want to do (reset kills, remove keys and so on), and allow us to bail out early if needed (via the bool, return true if continue, false if not)
A few functions are implemented thusly (including world load postloadprocessing)
03 July 2004 - Maarc
------------
Fixed an accidental bug where it would constantly process legacy accounts
More use of upper() caching
Added Config.h, Platform.h, Prerequisites.h and UOXStdHeaders.h
Thrown *everything* into the UOX namespace
Predeclared most of your classes (not packets, and not a few other minor ones) in Prerequisites.h
Begun an implementation of an object factory for creation, destruction and recycling of objects. This is not hooked into the main code pipeline, because some of it still relies on ITEM or CHARACTER types, which we want to eliminate (no more global chars or items!)
Removed some SE functions (not JS object functions) that relied on chars[]/items[] and hence would fail miserably
GetLightLevel
SetPrivateBitRange
GetPrivateBitRange
SetPrivateWord
GetPrivateWord
SetPrivateBit
GetPrivateBit
SetSkillUse
SkillBeingUsed
GetGuild
CompareGuild
RemoveFromGuild
AddToGuild
AttackTarget
Attack
IsMemberOfTown
CalcRank
UseReagants
UseReagant
FindItemOnLayer
RaceCompare
GetCharPack
SetSerial
SetDecayTime
GetDecayTime
chars[] and items[] are now really only referenced in a few small places (less than 10 by array on both, less than 50 by member funcs eg calling Count)
----------------
Discussion Ideas
----------------
OgreConfig - Compile time configuration options
OgrePlatform - Platform / compiler compatibility file - includes OgreConfig
OgrePrequesites - Includes OgrePlatform. Disables any compiler warnings, stl compliance (eg HashMap) and some typedefs (eg uchar). Also includes OgreStdHeaders and forward declares any classes needed.
Should lift off the Singleton class, as it would help with some of our data and initialisation
Useful classes as Singleton (some possibly lifted from OGRE)
LogManager
Other potential useful classes
template <> FactoryObj
ResourceManager
Other possibilities
Asynchronous network! Esp under windows, where it can callback at any time - inject events into a queue for the PC
Consider using a multimap or hash_multimap for storing our object types... given that hash_multimap is like standard, multimap may be a better bet
However, there are differences: multimaps are sorted, ergo inserts/deletes are logarithmic - hash_maps are not, only hashed, so constant time. In theory, hash will be better, but given we do little in the way of insert/deletes, multimap would be agood start
7/2/2004 - giwo
Made use of OnDrop() JS function.
Cleaned up some areas where we were calling UString::upper() far too many times for a single string.
Removed unneeded cBO::Load overloads in CItem, CChar, CMultiObj and others.
Initial implementation of CSpawnItem in order to break CItem up into smaller classes.
02 July 2004 - Maarc
------------
Fixed display issue with saving packet logs (hex values a->f weren't displayed right)
Fixed an issue with the add menu that was relying on gumps that didn't exist in older clients
Fixed CTEffect constructor so it inits the assocScript
Fixed an issue with StartTimer - it would never call back into another script properly
Fixed an issue with the action property of spells in JS - it was wrongly declared as an index, not a static param!
Added ClientCanReceive to CPNewSpellbook so it can fallback on pre-4.x clients to the old method
Added CCP_SPELLCAST/"spellCast" property to JS Character objects
Added CCP_ISCASTING/"isCasting" property to JS Character objects
Added SetJSCasting/IsJSCasting to CChar but this is a *temporary* measure only. When all spells are outsourced to the JS scripts, it can be removed, so that other code doesn't misbehave (ie the code currently will call CastSpell if you're in casting mode and the timer has elapsed... which won't happen under JS!)
onSpellCast for JS spells has been changed to:
onSpellCast( socket, character, directCast, spellNum );
This allows for multiple spells registered in a single file (eg think all the summon ones, for instance)
StartTimer now looks like
BaseObject.StartTime( numMillis, TimerID[, optVal] );
optVal can either be a boolean (call back into this script, so we don't have to know it's number... this solves non-item/npc scripts so magic can work right) or an integer (the script number to call back into)
A very basic workflow script exists for clumsy - it does not take everything into account, nor does it actually do the clumsy part, it's just an example.
01 July 2004 - Maarc
------------
Fixed a bug with newaccounts.adm and parsing
Converted ImportAccounts to use std::string and UStrings
Removed the ability to pass "+add:user,pass,email" and "+import:filename.import" arguments to the binary. This *cannot* be done at this stage, as the accounts haven't been initialised and loaded, so conflict resolution cannot occur.
Removed typedef of CLPSTR as no variables use it
Removed some strlwr's in favour of using a UString with lower()
Substring search now uses UStrings rather than allocating and deallocating char * arrays
Added character6 to the account property object for JS
Added a #define CHARACTERCOUNT to cAccountClass to help centralise any changes
Removed old jsMagicTable_st data
Added spell equivalents to the JS command registration
RegisterSpell( spellNumber, isEnabled );
DisableSpell( spellNumber );
EnableSpell( spellNumber );
Spell JS files can be registered by adding entries like this:
FILE=path/file.js
into [MAGIC_SCRIPTS]
Note that it automatically prepends the path to the JS scripts before it, so you only need to put in a relative path (ie same as command scripts)
onSpellCast( socket, character, directCast );
socket is the character's socket (not guaranteed to exist, only if PC is casting)
character is the character casting
directCast is a boolean
true if
an NPC
false if
a PC selecting from a spellbook, wand or scroll
a PC who has casted from a JS script depending on param (ie char.CastSpell( spellNum, true/false ) (if true))
// It is the responsibility of the JS script to call the proper events (ie onSpellSuccess and so forth)
// They deal with their own mana subtraction and all sorts of things
// They also deal with valid regions and what not. s is *not* guaranteed to be valid (ie it could be an NPC)
// Suggested script workflow:
// * Check if already casting, if so, stop and dump out
// * Check if frozen, if so, can't cast spell
// * Check if enabled
// * Check if scroll, wand or normal cast (scroll reduce requirements, wand do straight away)
// * Check requirements (min int, dex, str)
// * Check for reagants
// * Check if can cast in this area
// * Determine if the cast "succeeded"
// * If so, fire onSpellSuccess, otherwise fire onSpellFailure. If failed, speak and return
// * Set the player as "casting" and freeze
// * Create timer for when the spell will be complete
// * Wait for timer to elapse
// * Upon timer elapsing,
// * Unfreeze player
// * Send target identifier if any (based on timer) and wait for callback
// * If not target, do action (if any)
// * If target, create onCallback function
// * On callback, do stuff
// * NOTE * For area affect spells, use an AreaCharacterFunction
Note to self - Want to update TriggerEvent so that you don't just pass a script number (though it's possible) but also a variant where you pass a character/socket/item, so that it can use the script associated with that
The spell JS file also has to include a SpellRegistration command
function SpellRegistration()
{
RegisterSpell( 1, true ); // say, clumsy, same as in the spells.dfn file
}
As it stands, only 1 spell per file, unlike the JS commands, which I should probably fix up by adding a spell ID to onSpellCast and passing it all in (would make life much easier for area effect versions of single spells)
6/27/2004 - giwo
Broke packets.cpp/.h into CPacketSend.cpp/.h and CPacketReceive.cpp/.h
Implemented some debug code to hopefully clear up some crash issues with region loops.
Modified the deltionQueue in order to ensure proper deletion of objects.
Fixed an issue causing characters to never switch targets in combat until their target died.
Fixed a minor issue with Packet Logging.
Fixed an issue causing a crash on creation of a new character.
Fixed issue causing many regions to not be recognized.
Added display of characters region to 'cstats command.
Implemented support for new Popup ToolTip displays.
Implemented support for new Spellbook packets via CPNewSpellBook packet class.
Implemented support for OSI displaying damage above victims head via CPDisplayDamage packet class.
6/25/2004 - giwo
Fixed a small bug causing things to crash intermitently and appearingly random(Thanks Abaddon!)
There was ONE sName[32] still left in the code, and he found it! This is only an upate
pactch.
6/19/2004 - giwo
Fixed several issues with boats, should function normally again.
Fixed an issue causing "bad multi setting" error message.
Fixed create menus coming up as blank gumps (note they seem to have other issues though).
Removed deques from SubRegions, as they seemed to be causing some crashes.
Upped the limit on a characters Name and Name2 attribute to 50 characters.
Fixed items with a SpawnObjList setting in the DFN's, should now properly spawn NPC's.
Fixed 'wipe and 'iwipe commands, should now properly wipe all items in(or out of) selection.
6/13/2004 - giwo
Fixed an issue causing characters without fame/karma titles to display as "The Name".
Fixed an issue where characters with Grandmaster status would not have a prowess title.
Fixed a flagging problem causing offline characters not to appear "greyed" out.
6/12/2004 - giwo
Corrected some small logic errors with the new account slot. Should work well now.
Modified command handling so strings of text would not be converted to all caps.
Added missing "Name" entry into 'set (IE 'set name blah).
Fixed an issue causing JS gumps not to respond when a button was pressed.
Fixed an issue causing 'set movable # not to work.
Updated allmove and houseicons commands to automatically update the client.
6/11/2004 - giwo
Fixed a small bug with the offline html output overwriting the online file.
Added server side support for 6 character slots. (Currently disabled still)
Adder server side support to allow player to select paladin, or necromancer at char creation
More support for cBoatObj made it into this commit to the cvs as well.
6/7/2004 - giwo
Made use of deques in place of vectors in SubRegions to allow faster memory recovery.
Fixed an issue where an object in a multi was not being removed from the multi container.
Modified CreateItem() routines so items created directly by ID are not decayable by default.
Fixed 'add to pull directly from .mul files, not the scripts.
6/06/2004 - giwo
Many changes have been made. Specifically dealing with structure, and STL conformity. Other changes include dynamic gm menu item
fetching, a very large bug preventing valid world files from being saved to disk correctly or at all.
Added a new GM Menu gump design with new functionality. Documentation to come, but you can now tag items directly from the DFN blocks and assign them to a itemmenu group dynamically at runtime.
fixed some spacing and other whitespace related issues.
6/5/2004 - giwo
Fixed a crash caused by placing a house.
Fixed certain entries in the Help gump not functioning.
Fixed a crash caused by invalid objects in the tempeffects queue.
Fixed a crash caused by 'dupeing items on the ground
Changed 'add tile to 'add
Documented Weight.cpp
Documented ai.cpp
12/30/2003 - giwo
Rewrote much of the combat code, renamed cCombat to CHandleCombat.
Fixed a problem causing characters accounts not to be properly set.
Fixed an issue causing monsters to not play any sounds.
Changed NPCLIST and ITEMLIST behavior to allow nesting lists (for instance, if you want all
orcs on another list, add npclist=allorc rather than manually adding each NPC entry).
Updated spawnregion NPCLIST and ITEMLIST loading to handle the above changes.
Many optimizations done to checkauto(), checkNPC(), checkPC, and genericCHeck().
Moved checkauto() to CWorldMain class and renamed it CheckAutoTimers().
Fixed Polymorph spell and tracking skill, unifying the code a bit for easier maintenance.
Moved Polymorph Duration out of polymorph.dfn and into uox.ini to remove needless re-loading.
Broke CheckAI() out into several smaller functions simplifying things a bit.
Tweaked checkItem() cleaning up RespawnItem() and DecayItem() and optimizing things a bit.
Fixed display of clothing on corpses.
Made more use of RefreshQueue, now is used for updateStats, Thus SetStrength/SetHP and other Stat-modifying mutators use Dirty().
Updated Dirty() to allow passing of a var (matched to an enum) that is then used to determine the type of refresh.
Created virtual functions of many pre-existent functions in CChar to allow setting of Dirty() var for updateStats().
Changed most object pointers in CChar to serials, this is less speedy, but safer (we were getting item objects passed back as character objects, etc).
Fixed many scenarios causing crashes due to a bad socket pointer in tempeffects.
Fixed several bad socket crashes in magic.cpp.
Fixed several instances where invalid objects would be left around causing later issues/crashes.
Updated / fixed-up Spawnregions to improve functionality, speed, and all-around usability.
Fixed SetSpawn() when object is spawned by a spawnregion, was forcing the region num down to a UI08 (which we handle them as a UI16),
also this allows us to calculate our spawnregion (and thus not need to search through all of them in Cleanup()).
Commands:
Removed many commands updating other commands to take their place.
Fixed command "regspawn" and gave it capability to pass "ALL" rather than region number to allow removal of "regspawnall"
Removed regspawnmax
Removed wipenpcs, moving its functionality to wipe (usage "wipe NPCS", "wipe ITEMS", "wipe ALL")
Made wiping commands default to Admin-Only.
Fixed an issue causing many commands not to function properly, if at all.
Fixed display of (# items, # stones) on containers.
Added SetDecayable( true ) to cItem::CreateBaseItem() to default items to decayable.
12/7/2003 - giwo
Optimized and cleaned up walking code a great deal.
Removed calcSocketObjFromChar() in favor of passing along a socket wherever possible.
Added cMapRegion::PopulateList() to simplify region loops.
Made CChar and CItem SendToSocket public members and made use of them in some areas.
Removed cBoat class and locally declared the few functions it contained where needed.
Fixed a minor bug with triggerwords.
Fixed house creation and broke buildHouse() into several smaller functions.
Fixed door and sign deletion upon re-deeding houses.
11/29/2003
Made extensive use of iterators for iterating through vectors.
Made use of .erase() and .push_back() to simplify our vector handling.
Rewrote our command table to simplify it a bit and remove the need for two structs.
Extensive fixes/changes to HTMLTemplates and HTMLTemplate classes.
Fixed an issue when using CChar::SetLocation() where Dirty() was not called.
Removed Dictionary.h from global scope.
Moved several structs and typedefs into private members of their only calling class.
Made use of UString::replaceSlash() in place of our current PathFix() functions.
Removed vtables from a few more functions that had no need of virtual functions.
Rewrote JailSystem::WriteData() to make use of an ofstream, and moved out the code specific to
a Jail Cell into its own WriteData() function.
Changed insta-log code so only house owners are logged out in their house, saving us some time searching for a matching house key.
Removed Network::kr and faul as they performed the same function as cWmWorldState::KeepRun() and Error().
Fixed an issue in loading mapregions where Items and Characters would not be properly deleted if they failed to load.
Took our main classes out of global scope, now only files that include their headers will have access to them.
Added CServerProfile class to remove our profiling variables from global scope.
Simplified a bit of the handling in targeting.cpp, allowing the removal of many functions.
Tinkered with lineofsight.cpp a bit allowing the removal of itemids and loscache from cItem class.
Moved doorbase[] out of global scope and into door.cpp.
Made use of cSkillClass in cPlayerAction.cpp BestSkill().
11/22/2003
Fixed bug causing NPC's not to be created.
Fixed a server crash upon login (caused by checking an invalid region).
Simplified much of gumps.cpp, removing cGump in the process.
Removed several members of cCommands and moved them to their only usage in cmdtable.cpp.
Added packet classes CPIGumpInput, CPIHelpRequest, CPITradeMessage and CPIDyeWindow.
Fixed a few instances where UString::sprintf() was causing a server crash (unknown as to why).
Removed some repetitious code.
Removed unneeded overloads of cSocket::target and cSocket::mtarget
Combined cSocket::ShowCharName() and cSocket::textFlags.
Made more use of strings and UString.
11/17/2003
Added CResponse.cpp & CResponse.h
Moved the bulk of cSpeech::Response() into CResponse() classes.
cSpeech Changes:
Changed genericTalking into CPTalkRequest::Handle().
Combined sysbroadcast and consolebroadcast to sysBroadcast.
Removed checkForVendorResponse() and responsevendor().
Removed cSpeech class, locally declared its remaining functions.
Removed cSpeech.cpp/.h from the project.
Fixed up packet logging, making use of an ofstream.
Added support for OSI TriggerWords rather than doing our own string searches.
Made use of ofstream in several areas where we currently used fopen().
Made RealTime inline and used it in place of duplicate code in CConsole.cpp.
11/10/2003 - giwo
Added script creatures.dfn to store (and allow easy modification of) our creature data.
Removed CWorldMain::initCreatures().
Reduced redundant code.
Fixed some minor issues.
11/7/2003 - giwo
Implemented Object deletion queue.
Made use of VALIDATESOCKET(s) in skills.cpp and cmdtable.cpp.
Changed itemQueue and npcQueue to a single refreshQueue.
Converted spawnregion[] to a cSpawnRegion vector spawnregions.
Fixed up many classes to avoid using virtual functions unless necesarry (IE they have derived classes).
Added ValidateObject() to take the place of NULL checks on pointers to cBO and its derivatives.
Added CItem::Cleanup(), CChar::Cleanup() & cBO::Cleanup().
Added cBO::Delete(), and IsDeleted();
Added CItem::Spells() to take the place of MoreXYZ in Spellbook handling
Removed CItem::Dirty() and CChar::Dirty().
Removed cItem::DeleItem() and cCharStuff::DeleteChar().
Removed cWM::TotalTownRegions() and TotalSpawnRegions().
Removed CChar::SpellAction().
Removed CItem::Doordir().
Oct 31 2003 - giwo
Added struct ProwessTitle to allow more customization when dealing with prowess titles in titles.dfn.
Added vector prowessTitles to CWorldMain.
Added map idToItemType in cPlayerAction.cpp to remove redundant doubleclick item handling based on both ID and Type.
Added scriptability (itemtypes.dfn in /items/ dir) for automatically associating an items ID to an item type.
Added cSocket::TempObj() in place of addmitem and overuse of AddID.
Changed cSocket AddX() and AddY() to SI16, made more use of TempInt().
LoadSkills() now sets a skills madeword to "made" by default.
Updated several areas where we loaded in scripts to make use of UString.
UOX now reads in a skills madeword from skills.dfn rather than setting them manually in ResetVars().
Converted skill[].madeword into a string.
Combined skillTitle() & prowessTitle() into getSkillProwessTitle() to reduce wasted cycles in PaperDoll().
Moved npcAct() to cTargets and renamed it to DoActionTarget().
Changed command SETID to require only one value (IE 'setid 0x0191 rather than 0x01 0x91)
Implimented Character update queue.
Renamed fameTitle() to getFameTitle().
Removed handleDoubleClickIDs().
Removed npcAction() as cEffects::PlayCharacterAnimation() did the same thing.
Removed std::string prowess from titles_st.
Removed some unneeded typedefs and defines.
Removed ResetVars() as it was no longer needed.
Removed SleepNiceness() and CServerData::niceness as there was no need for it any longer.
Changes to cBaseObject and its derived classes:
Added CItem::ItemDecayed() to simplify CItem::Save().
Removed CItem::enhanced, making use of priv variable instead.
Removed CChar SkillItem() and Trainer().
Removed some unused functions.
Removed CChar may_levitate, willHunger, casting, and med variables, making use of the bools variable instead.
Moved CChar::GetBestSkill() to cPlayerAction.cpp as BestSkill().
Changed CChar fx1, fx2, and fy1, fy2, to fx[2], fy[2] to simplify handling.
Changed CChar::petguarding to a cBaseObject.
Changed CChar::ftarg, targ, trainer, and trackingtarget to a CChar pointer.
Changed CChar::trackingtargets to a CHARLIST.
Changed CChar::skillitem, speechItem to a CItem pointer.
Changed CItem::Refresh() to CItem::Update() and added a pure virtual cBaseObject::Update().
Updated CChar::Update() to accept a single socket to update to.
Made CChar::SendToSocket() private and removed a superfluous CChar refrence.
Added cBaseObject::LocationChanged() for npc updating (if location changes, uses CChar::Teleport(), otherwise CChar::Update() ).
Made those functions which were only used inside the class private
Updated cBO::PostLoadProcessing() to use the proper function based upon the object type.
Made some members of cBaseObject pure virtuals, also changed some functions that didn't need to be virtual.
Changes to cEffects:
Renamed action() to PlayCharacterAnimation() and changed it to accept a CChar rather than a cSocket.
Renamed impaction() to PlaySpellCastingAnimation() and changed it to accept a CChar rather than a cSocket.
Renamed movingeffect() to PlayMovingAnimation().
Renamed staticeffect() to PlayStaticAnimation().
Script Changes:
itemtypes.dfn - Allows players to define how items of a certain ID will be handled on doubleclick
(IE: "forge=0x0FB1,0x1982,0x197A,0x197E" causes all items with those ID's to behave as a forge when double-clicked, unless they are given a type)
skills.dfn - Added MADEWORD= entries to those skills which have a madeword other than "made"
titles.dfn - Updated [PROWESS] to: minReqSkill=ProwessTitle type entries
Oct 19 2003 - giwo
Changes to CWorldMain class:
Added worldTimers[] Get/Set Timer(), and enum CWM_TID to group all timer values together
Removed Get/Set NextNPCAITime, NextFieldEffectTime, HungerDamageTimer, LightTime, ShopRestock
Removed erroredLayers.
Removed ShowLayer().
Removed ItemCount & CharCount.
Removed IncIMem() as it was not used.
Removed ExecuteBatch as no good use for it could be found.
Renamed ItemCount2() to NextItemSerial().
Renamed CharCount2() to NextCharSerial().
Moved creatures[] from uox3.h.
Moved initCreatures() from cFileIO class.
Moved weightPerSTR to CServerData class.
Moved secondsperuominute to CServerData class.
Added enum ItemTypes to simplify handling of items by their type.
Added First(), Next() and Finished() functions to cItemHandle and cCharHandle inplace of our Item / Char Count() loops.
Added CPICreateCharacter, CPIDeleteCharacter, and CPIPlayCharacter packet classes.
Added WEIGHTPERSTR= value to uox.ini.
Added a cItem constructor and destructor to handle creating and deleting loscache[] and itemids[].
Added ADVOBJ, DYEHAIR, DYEBEARD, KILLHAIR, KILLBEARD, KILLPACK, and POLY to DFNTAGS enum to support advance.dfn
Removed a good number of function declarations from funcdecl.h and declared them locally in the files that used them.
Removed some includes that no longer seem to be used.
Removed index reference from PostLoadProcessing()
Removed cFileIO->LoadNewWorld() as all the defaults set there were set by the CWorldMain constructor.
Removed class cFileIO as most of its functions were called only by uox3.cpp.
Removed cNetworkStuff::BatchCheck().
Moved creation of initial player items from createChar() to newbieItems().
Updated advanceObj() to take advantage of our DFNTAGS enum
Changed CItem::Get/Set Type() to use enum ItemTypes.
Fixed up some functions in movement.cpp and commented out those that are unused.
Reorganized globals.cpp to better match with uox3.h
Moved spells[] to CMagic class.
Moved itemids[] and loscache[] to cItem class.
Oct 13 2003 - giwo
Changed CWorldMain::logout to a vector logoutLocs.
Moved some structs from CWorldMain.h to uoxstruct.h.
Changed CWorldMain::escortRegions to a vector.
Removed cFileIO::LoadPreDefSpawnRegions() and moved its contents to the one refrence of it.
Removed cWorldMain::ResetDefaults() and allowed the constructor to do the work itself.
Removed calcSocketObjFromSock() and used Network->GetSockPtr() in its' place.
Added cSpawnRegion:: WorldNumber(), IncCurrentCharAmt(), and IncCurrentItemAmt().
Removed handlers.h from global scope, included it in those files which used it
Made Combat::WillResultInCriminal() public and made use of it throughout the source
Removed VialTargetItem() and VialTargetChar(), tweaked them a bit, and made them a part of vialtarget()
Made VialTarget() a part of cTargets class, and MakeNecroReg() a part of cSkills class.
Removed necro.cpp from the project
cItem changes:
Added: CreateMulti(), CreateBaseItem(), CreateBaseScriptItem(), PlaceItem(), CreateRandomItem()
Removed: SpawnItem(), SpawnItemToPack(), SpawnMulti(), SpawnRandomItem()
Rewrote: CreateItem(), CreateScriptItem(), CreateRandomItem()
cCharStuff changes:
Added: CreateNPC() (and an overload), CreateBaseNPC(), CreateNPCxyz()
Removed: AddNPC(), AddNPCxyz(), SpawnNPC(), CreateScriptNpc(), SpawnRandomMonster()
Rewrote: AddRandomNPC(), PostSpawnUpdate().
cTownRegion Changes:
Updated CChar->GetRegion() and calcRegionFromXY to return a cTownRegion pointer.
Moved locations from CWorldMain class to cTownRegion and made it a vector.
Changed how we load in regions.dfn and handle regions.wsc to avoid having unneeded extra TownRegions.
Updated cTownRegion::Save() to use std::ofstream to match with the rest of our save routines.
Script Changes:
Changed all UNDEADLIST to NPCLIST entries in digging.dfn.
Oct 04 2003 - giwo
Removed some superfluous #includes and moved others to more appropriate places.
Removed jail.h from global scope and included it only where it was needed.
Added CPIGumpChoice, CPIBuyItem, and CPISellItem to handle those packets.
Removed some functions from funcdecl.h which did not need to be in the global scope.
Replaced getRootPack() and getPackOwner() with FindItemOwner() and an overload to simplify it.
Removed getPack() in favor of using CItem::GetPackItem(), also made GetPackItem() a bit more useful.
Replaced cItem::PackType with cItem::getPackType(), created enum PackTypes to simplify it, and made it more useful.
Added some #ifndef's in header files which were missing it.
Moved openPack() and openBank() into cSocket class.
Moved batchcheck() into cNetworkStuff class, since that was its only usage.
Made several members of cNetworkStuff private, as they had no reason to be public.28 Sep 2003
Removed CItem::FirstItem() and NextItem() as they were no longer used.
Renamed CItem::FirstItemObj() and NextItemObj() to FirstItem() and NextItem().
Simplified setting and evaluating default values for cSocket, CChar, CItem, CMultiObj, and CBoatObj classes.
Made wider usage of COLOUR typedef.
Changed GENDER typedef to a UI08.
Updated function documentation in quantityfuncs.cpp.
27 Sep 2003 - Maarc
Removed some uox.ini options that don't have code backing
NPCTILECHECK
ANTILAGSAVESPERLOOP
MAINTHREADSLEEP
STATDELAY
EXTERNALACCOUNTCREATION
ENGRAVEENABLED
SPEEDCHECKNPCS
MSGBOARDKEEPMESSAGES
MSGBOARDMAXMESSAGESALLOWED
MSGBOARDMAXMSGSRESPONSE
LIGHTMOON1UPDATE
LIGHTMOON2UPDATE
COMBATWRESTLINGSPEED
COMBATMAXMELEEDAMAGE
COMBATMAXSPELLDAMAGE
COMBATMAXPOISONINGDISTANCE
COMBATMAXHUMANABSORBTION
COMBATMAXNONHUMANABSORBTION
Note that these INI options have been removed from all code, except they will still be parsed (just ignored)
Heavily documented each option in cServerData
onCreate wasn't executing for PCs if HTML status was disabled
Simplified some function naming within CServerData, as the lines were getting very long when using them
Removed parsing of unused tags ripped out earlier
26 Sep 2003 - giwo
Changed CChar's trackingtargets from a fixed size to a std::vector and used the maximum number of tracking targets specified in the INI
Collapsed the CChar's timers to use an array based on the timer enums
Removed some unused functions from CChar
Fixed bug where CChar's PoisonStrength attribute was not being saved/loaded
Note: Character's FlySteps property is saved/loaded, but never used - removed
25 Sep 2003 - Maarc
cServerData renamed to CServerData, in a beginning attempt to get a consistent class naming scheme
Removed an excess print message at startup
Consolidation of some CServerData members into arrays, reducing number of get/set functions required
24 Sep 2003 - Maarc
Fixed resurrecting not logged in PC character, we were making a bad assumption about NPCs and sockets
Updated console code to get the width/height properly under windows
Added help/commands directory to data directory, and put an ACTION.txt in there
Fix to ScriptSection::MoveTo
22 Sep 2003 - Maarc
Killed some warnings
Couple of linux compilation fixes
21 Sep 2003 - Maarc
Fixed crash bug with CPBookPage
Modification of these submissions from giwo
Moved statwindow() into the cSocket class
Removed sendItem(), sendPackItem(), and openCorpse()
Replaced the aforementioned functions with an improved cItem::Refresh(), cItem::SendToSocket(), and cItem::SendPackItemToSocket().
Added cItem::RemoveFromSight() to better handle usage of the CPRemoveItem() packet class
Added cPlayerAction.cpp and cPlayerAction.h to move many functions out of global scope.
Removed cClick.cpp as the aforementioned file holds its functions now.
Moved updateskill() into the cSocket class
The modifications
No cPlayerAction.h
Many of the functions moved into cPlayerAction are put into Handle() routines of the right packets
19 Sep 2003 - Maarc
Crash fixes
Fixes to getTileName to work better with strings and plurality
banlist.ini/firewall.ini now structured much like a DFN. It expects all entries to be in the form of:
[BANNED]
{
IP=x.x.x.x
}
The [BANNED] is non-specific, it will search through all the sections in that file
Template banlist.ini is updated as well
teleport.scp has been reengineered to be like a DFN style. See example in the CVS, as it has been updated
Updated jse_fileassociations.scp to a DFN style syntax
Updated jse_objectassociations.scp to a DFN style syntax
CVS versions of jse_*.scp have been updated to new style
Reduced number of fopen() calls required by using FileIO->FileExists more
cVersionClass converted so that most of it's methods are now static, as we don't adjust versioning at runtime
It also means we don't actually have to create a cVersionClass object
Console and Magic log routines now take strings instead of char *
Dictionaries updated to use DFN style syntaxing
18 Sep 2003 - Maarc
As a guess... more strings!
Fixed a few minor issues here and there
cStringTools used even less
Contemplating replaced cMagic::Log and Command::Log with a templated log function
Considering use of XML type of output for server logs
17 Sep 2003 - Maarc
More strings!
Fixed a bug with telltime
Updated dictionaries
More functions take strings than char * now
Fixes to tellmessage
Fixed bug in DictionarySpeech
16 Sep 2003 - Maarc
More char * stuff replaced with std::string and UString
Few minor cleanups to code, increasing readability
Replaced CapIt and CapColour with a templated Capped function, which takes a min/max value
Removed BuildFilePath from mapstuff.h and used UString in its place, to fix some path issues
15 Sep 2003 - Maarc
More internal class members are now either UStrings or std::strings
More functions updated to use std::string
Updated HTML template stuff to use UString more
Almost completely removed all instances of cStringTools::makeString in favour of UString functionality
Fixed some parsing problems introduced in recent updates
Fixed single clicking with 3D clients
Stripped out more unnecessary / unused code
CharBySerial behaves the same as ItemBySerial in lookups (JS funcs)
Area commands now use UStrings, need testing
Use of cStringTools down to less than 100 references
14 Sep 2003 - Maarc
UString classed used in many more places
Script/ScriptSection updated to use an ifstream rather than a FILE *
Code reduction through use of UString and ifstreams
Reordered some logic in functions
Fixed a bug where PARENTRACE wouldn't work
Fixed some bugs dealing with polymorph script reading
Due to VC6 issues, the strToDFN table in ssection.cpp is now a series of assignments instead. Functionally the same, just something VC6 will handle
Binary saves ripped out in it's entirety, as there were bugs dealing with it, and a future implementation is planned
cPBuffer renamed to CPBaseBuffer
cPUOXBuffer and cPXGMBuffer subclassed from cPBaseBuffer - cPBaseBuffer's old Pack() routine now belongs in cPUOXBuffer
Enables possible future encryption of xGM seperate from normal UOX packing
12 Sep 2003 - Maarc
cStringTools is no longer created and instantiated. It's methods are now static, as it makes clearer sense that way
Stripped out some functions that weren't called but were transitionary from 0.7x
Removed cAccountClass::atol as cStringTools offers methods to do that
Fixed up logic dealing with std::string and the find method
Few more error checks
More warning fixes
Unified timer code, presenting a consistent interface across both Windows and Linux
Updates to use std::string instead of char *, to make the logic look simpler
Added a UString class that supports stripping of whitespace, comments and other commonly used functions on strings
Implemented some use of UString already, simplifying some of our string parsing
VALIDATESOCKET macro added into targeting.cpp to help with the validation of socket pointers in most functions
Added operator overloading for basic UI/SI 08,16,32 bit and std::string types for cPBuffer, to allow in future for serialisation potentials
11 Sep 2003 - Maarc
Few more warning fixes
Many, many, many changes to try and fix the size comparison issues that VC7.1 pops up with. This should also make it more portable from 32/64 bit.
The command 'cachestats now has a basic implementation
Identified a problem with privileges and binary saves
Made RandomNum a templated function
Fixed possible bug with converting strings to dice, wasn't working correctly
10 Sep 2003 - Maarc
Improved VC compatability with std::min/max
Cleaned up quite a few warnings and size issues, as revealed by VC7.1
This means a lot of changes to using size_t where possible
08 Sep 2003 - Maarc
Some sign issues fixed
Used std::min / std::max better. VC6 issue, unsure about higher versions. VC6 doesn't define min/max in std:: space, but _MIN/_MAX instead.
Consequently, non VC compilers have std::min/std::max remapped to std::_MIN and std::_MAX. Not nice, but it works
Dead functions removed, cleanup of some logic, removed instances where comparisons were always true
Fixed warnings associated with the running changes implemented last night
Removed some files that aren't actually used
07 Sep 2003 - Maarc
Fixed an issue with WalkTo/RunTo, it was aborting incorrectly with wrong number of arguments
WalkTo/RunTo also flush the existing walk path before calling PathFind, to ensure that the new walk path is executed
Fixed a lack of type with a const value in cScript module
Fixed some iterator problems, increasing compatability
Changed a #ifdef compare to __unix__ to a !defined _MSC_VER, helping out mingw compatability
Fixed some non-msvc compile issues
Updated some places that were doing a Refresh, which should have done a Dirty
Slight tweaks to picking up/dropping
Updated packet logging to help with more useful dumps
Updated some more x++ to ++x type of code
CMapChange renamed to CPMapChange, to reflect better naming style
cPCharLocBody renamed to CPCharLocBody, to reflect better naming style
Debug message in WalkTo/RunTo when in debug compile
Fixed a MethodError problem with WalkTo/RunTo occurring when it shouldn't
Following packets now have log routines:
CPMapChange
CPCharAndStartLoc
CPCharLocBody
CPOpenGump
Updated CPOpenGump so that it's no longer a fragmented packet class, requiring FlushBuffer
Removed a dead function (itemmenu) that's never used
Removed dead SE function RunTo, as it's now a character method
Fixed WalkTo/RunTo as methods - the pathfinding was never doing anything. Used new npc wander mode of 6, which will purely follow the path
Those NPCs that are supposed to be running really will be now
06 Sep 2003 - Maarc
The bounce routine flags the bouncing object as dirty
---- After preprune tag
Removed heartbeat and wilderness tags from uox.ini
Removed partmsg from uox.ini as joinmsg sets the same value
Removed uoxbot from uox.ini
Removed lagfix from uox.ini
Removed checkmem from uox.ini
Removed combatallowcriticals from uox.ini
Removed fixedlightlevel from uox.ini as it is unused (also removing the 'light command, as it was the only thing that used it. Set, but never read)
Removed scriptsectionheader from uox.ini - it was transitionary only, if you haven't changed over by now, you never will
Removed an extra startgold entry from uox.ini code
No longer parse old 0.7x server.scp types
Fixed Bug: Seconds per UO minute used, but never actually read from the INI file. Now read/written from/to file.
Added Console support to dump ini file lookup offsets without running the server.
Updated console 'V' command to reflect the upcomming pruning of the unused INI tags.
Fixed a crash bug with onDropItemOnNPC, stupid typo problem
Updated some setcont code to deal better with layer 0 items, should help with secure trade better
Change to onAISliver JS event - if js returns true, then server doesn't do normal AI check. if js returns false, server goes through it's normal routine
Added some more #ifdef code for some basic boost use - trouble with filesystem currently
Lots of whitespace updates
Allowed scripts to be attached to regions, not just items/characters - use SCRIPT tag in the DFN for the region. Currently supports onEnterRegion and onLeaveRegion (same params as the character version)
Minor rework of some of the logic in trade code, may or may not help
Playervendor deed altered to spawn [playervendor] rather than [2117]
Removed excess PathFix function in cServerDefinitions
Should be able to browse player vendor packs without a snooping check
Minor issue with loading multis, was erroneously reporting DeedName as an unknown tag
Removed some unused dead code dealing with gumps
Added atWar property to JS characters
Hid most of cSocket's members
Added BytesSent/BytesReceived methods to cSocket
Implemented WalkTo and RunTo as character methods. Takes 2 (object + maxsteps) or 3 (x, y and maxsteps) parameters
Included the js32.h, and js32.lib files to the source tree. TO help ease *nix users
30 Aug 2003 - Maarc
Updated InternalPoll for speech, which should solve some compatability issues, and solve delayed speech from not occurring.
Added some batch files for windows which should help with deployment in future. They are found in the root, in uox3
There are 3 predefined templates
pureinstallcopy copies data and built binaries
buildanddatacopy builds a release executable and does same as pureinstallcopy
doall same as buildanddatacopy, but copies source as well
Each must be called like
doall c:\app\uoxtest
The batch files accept a parameter which dictates where the files are to be copied to.
From there, simple zips can be made.
Work continues on resurrecting a win32 installer, and communication with Rynet will see a similar process created for Linux.
29 Aug 2003 - Maarc
Warning and scope fixes only
22 Aug 2003 - Maarc
Added Empty OnStartup/OnShutdown events( to be expanded upon later )
Added a JSE class wrapper around UOX3 Account instance to provide access to methods
Implemented CAccountClass wrapper
Created .AddAccount(name,pass,email,flags) to add an account to the server
Created .DelAccount(name) or .DelAccount(accountid);
NOTE: These are pretty self explanitary.
Updated JS implementation of wrapper for cAccountClass. No longer var i = new CAccountClass syntax, it exposes a global object "Accounts"
With minor tweaks, managed to get Slasher's account editing stuff to work
13 Aug 2003 - Maarc
Fixed a crash bug with multis and deeds - the deed property wasn't always being set correctly and could crash on worldsave
Updated deed property of cMultiObj to be a std::string rather than a const char *, to avoid pointer issues as it's used infrequently
Added ExecuteCommand as a character object method (Example: pUser.ExecuteCommand( "add 0x04a9" ); )
Minor whitespace fixes
Changed MethodError of CChar_ExecuteCommand to the right func name, was SysMessage
Removed old standalone ExecuteCommand function from JS engine, so only character method is available
Updated version number
11 Aug 2003 - Maarc
Fixed a bug where insufficient templates in the HTML template system would cause a crash at runtime
Added 'setspawnobj and 'setspawnobjlist commands
Fixed a bug with tweaking items where the text strings were incorrect at the end of the property list
Fixed a bug with tweaking items where there was no text string at the end of the property list
Added spawnobj/spawnobjlist property to tweaking of items
Whitespace updates
Fixed typo in debug print of CChar_UseResource
Updated dictionaries in the tree
07 Aug 2003 - Maarc
-----------
Overhauled HTMLTemplate Class to actually handle multiple templates correctly.
Templates Supported at this time are :
ETT_ALLTEMPLATES : Update aLL templates found in default_templates.dfn
ETT_GMSTATUS : Update the GMSTATUS template
ETT_GUILD : Update the GUILD template
ETT_OFFLINE : Update the OFFLINE template(no player functionality yet)
ETT_PLAYER : Update the PLAYER template(no guild functionality yet)
ETT_ONLINE : Update the default server STATUS template
Supported template Types:
STATUS :
PLAYER :
GUILD :
GMSTATUS :
OFFLINE :
NOTE: The format and extention of the template files has changed slightly
Here is a complete default templates example (Filename: default_templates.dfn).
//o-------------------------------------------------------o
//| QUick note: TYPE must always be the first tag found in
//| a block.
//o-------------------------------------------------------o
[DEFAULT_STATUS]
{
TYPE=STATUS
NAME=Server Status Template
UPDATE=5
INPUT=C:/uox3/dfndata/html/online.htf
OUTPUT=D:/mywebserverdir/serverstatus.html
}
[DEFAULT_PLAYER]
{
TYPE=PLAYER
NAME=Server Offline Template
INPUT=C:/uox3/dfndata/html/player.htf
OUTPUT=D:/mywebserverdir/player.html
}
[DEFAULT_GUILD]
{
TYPE=GUILD
NAME=Server Guild Template
UPDATE=5
INPUT=C:/uox3/dfndata/html/guild.htf
OUTPUT=D:/mywebserverdir/guild.html
}
[DEFAULT_GMSTATUS]
{
TYPE=GMSTATUS
NAME=Server GameMaster Status Template
UPDATE=5
INPUT=C:/uox3/dfndata/html/gmstatus.htf
OUTPUT=D:/mywebserverdir/gmstatus.html
}
[DEFAULT_OFFLINE]
{
TYPE=OFFLINE
NAME=Server Offline Template
INPUT=C:/uox3/dfndata/html/offline.htf
OUTPUT=D:/mywebserverdir/serverstatus.html
}
EOF
NOTE: At all time in any template block the first tag MUST be the TYPE tag.
A detailed list of supported template tags will be forth comming.
05 Aug 2003 - Maarc
-----------
Fixed PC dying issue, not changing to ghost and not turning to gray
Reinstated terminating NULL with regards to CPOpenBuyWindow, which should hopefully restore pricing in 3D client
03 Aug 2003 - Maarc
-----------
Fixed issue with delete characters. Now characters should delete correctly, and not list unknown
values, and erroneous data.
Fixed an issue with CPIGumpMenuSelect, which was getting radio buttons wrong
Fixed an issue with BuyFrom, where the logic was backward... should be more like pUser.BuyFrom( NPC ) than NPC.BuyFrom( pUser )
Fixed similar issue with SellTo
Added "movable" to area commands on request of Xuri
02 Aug 2003 - Maarc
Updated CPItemsInContainer so that it will work faster and should work better with vendors
Updated CPOpenBuyWindow to work better with vendors, and go faster
Added AoS weapons and LBR-monster weapons (Xuri)
Vendors work fine in 3D client but not in 2D
Added a packet specific log routine to CPOpenBuyWindow
Updated cSocket and other routines to allow for packet specific logging on receive
Sideeffect of that is that non-packet classes save data already logged for variable length packet
Implemented Log() routine for CPIFirstLogin, CPISecondLogin, CPIServerSelect, CPIClientVersion and CPIUpdateRangeChange
Whitespace updates
setid now has character body restrictions, and is the same as 'poly, which has been upgraded to 0->0x7CF
Removed JS functions due to equivs
GetTarget
SetTarget
CalcSockFromChar
CalcDefense
CalcAttack
CalcCharFromSock
GetFlag
GetTown
SetTown
GetRegion
SetRegion
VendorBuy -> BuyFrom method of Char/socket
VendorSell -> SellTo method of char/socket
Added flag property to characters in JS (deals with criminal, murder and so on, read only property)
Migrated base JS functions to character/item methods
FinishedItemInCont -> FinishedItems
FirstItemInCont -> FirstItem
NextItemInCont -> NextItem
Dismounting a creature will have the creature face the same way as you
onDropItemOnNpc event implemented
First executes for item and if item doesn't bounce, executes for NPC (so item can override bouncing)
scripts must return a value between 0 and 2
0 == bounce
1 == don't bounce, use code
2 == don't bounce, don't use code
Updated mounts to support rest of LBR/AOS mounts
01 Aug 2003 - Maarc
Fixed issue with delete characters. Now characters should delete correctly, and not list unknown values, and erroneous data.
CChar's attacker property was a CHARACTER, not a CChar * - This lead to mixed ideas of what it's values are
Changed attacker property to CChar *, which should provide some minor performance benefits
Fixed a bug with stealing which would flag an index error on failure when not in combat
OpenURL function on a socket is now enabled
Closed a minor memory leak with the JS OnTalk event
Updated version number
Fixed an issue with NPC response (bank and other commands were not working) - Also affected JS speech
Found an issue with the vendor buy list.... not working correctly, unsure as to the reason why. All items are (null) at 0 gp, though icons are fine
31 Jul 2003 - Maarc
DoStaticEffect (JS function) was both a standalone method (DoStaticEffect) and item/char method (StaticEffect)
Removed standalone implementation of DoStaticEffect, as it wasn't updated to current implementations and one impl should be used
Fixed a bug with JS StaticEffect method that would make it not work correctly with items
JS method table for chars updated to reflect that StaticEffect takes 3 parameters, not 4
Fixed a crash bug when items tried to talk (via JS or not)
Some more basic implementation (ifdef'd out) of using boost tokenisation
Whitespace cleanups
CPObjectInfo caused crash bug when firefield was cast, fixed
The criminal() function would cause a server crash if the thing going criminal was an NPC (symptom of EV's crashing server)
Removed JS onUsage event, and updated onUse in its place
onUse now requires a return value of either true or false in the script
if return value true, then it continues on executing with hard coded implementation
if return value false, then no hard code is executed
Fixed 'make so that 'make player would work again
Items can now use the third optional parameter of StartTimer in JS, which enables to call back into the currently executing script
Updated SetCont so that if it fails to equip, it prints out serial and layer, and resets contObj properly
Fixed crash with killing characters and corpse clothing
onUse event fires for a door when it is used, allowing for greater customisation of whether the door can be opened or not
24 Jul 2003 - Maarc
cPBuffer now has an internal packed buffer, as well as an internal Pack() routine
cSocket::Send adjusted to use the cPBuffer packed buffer/unpacked where possible
cPBuffer's packed implementation means that if the packet is sent to multiple sockets, only one pack is needed
And consequently, runtime performance should be slightly improved (only affects removeitem sort of packets)
Updated version number
getTileName updated to behave like in singleClick()
singleClick now calls getTileName for name lookups rather than basically reproducing the code
singleClick slightly optimized to only do a character lookup if required
whitespace cleanups
20 Jul 2003 - Maarc
Fixed long packet problem
Fixed possible problem with create skill window
Converted more things to use CPSendGumpMenu
Fixed item refresh bug for items created after server load
Optimized code size for cGuild gumps a touch
SendVecsAsGump uses CPSendGumpMenu - note, we should be trying to get rid of all uses of SendVecsAsGump
Commented out a call to Gumps->Open() that locks up later clients (see cstatstarget in cTargets)
Optimization note for CPSendGumpMenu reuse - look at moving some of the processing from Finalize() to AddCommand()/AddText()
19 Jul 2003 - Maarc
Fixed a problem with WhichLoginPacket, as it would ignore some valid packet IDs
Implemented CPSendGumpMenu, an attempt to write a packet class for 0xB0 outbound
CPSendGumpMenu works for part of wholist and is implemented for 'howto
However, the size of the packet is bigger than our largest buffer.... and that means that it tramples all over memory
A fragmenting version is implemented, but the client is more likely than not to lockup
Real answer? Crypt and send a buffer big enough to hold the entire packet
18 Jul 2003 - Maarc
Created a WhichLoginPacket function, to deal specifically with logins only
WhichLoginPacket will throw an exception if it receives a request that it knows nothing about
This request is caught and swallowed, via new cSocket::FlushIncoming
17 Jul 2003 - Maarc
Reduced a number of flush locations
Books updated to packet classes
Fixed a bug with reading predefined books
If cannot wear an item, returns failure (only prints in debug mode)
Removed some commented code
Updated spellbooks to use packet classes
Slight spellbook speed up
Removed some dead variables
Some messages now only print in debug mode
Packet 0x98 (allnames 3D) moved to packet class
Game server list moved to own packet class
Added Add() method to CPItemsInContainer
Turned outbound 0x66 into CPBookPage
Turned outbound 0x6F into CPSecureTrading
UseDoor SE function now supports objects not indexes
MAXLAYERS reduced to 30
Fixed crashes related to system speech and npcs
Edited changelog to explicitly mention the month, not using a numeric (not everyone is an American)
CPDrawContainer model changed from SI16 to UI16
Updated to version 1g
Addendum
Replaced almost all instances of a++ and a-- code with ++a and --a, without breaking semantics
Implemented a basic boost tokenisation on account parsing of v3 files (ifdef'd out by default)
Saves approximately 100 lines of code and is more readable
15 Jul 2003 - Maarc
Should fix deleting characters
30 Jun 2003 - Maarc
RefreshItem() changed to Item->Refresh()
Implemented RefreshItem queueing
talking/unicodetalking merged into generictalking
Speech (both unicode and non-unicode) converted to a packet based system
Much greater compliance with packet packing rules
Very simple handler for NPC context menus (UOXClassic as inspiration)
NPC context menus turned on by default during login
All-names 3D basic implementation (for testing)
Extended status window
talk, talkAll, emote and emoteAll are character methods
itemTalk is a method of an item
sysmessage is a method of cSocket
Removed DefBase object and used constants for defaulting instead
Added ApplySection to Items and Chars in the JS engine
Split SpawnItem into CreateDFNItem and CreateBlankItem
Campfires now have 1 HP forced
OnSpeech event altered. Forces script to return a value. (0 == NPCs/PCs
see the speech, 1 == PCs see it, 2 == no one sees it, defaults to 0)
Female bit specified on CPExtMove if person is female
Yellow bit specified on CPExtMove if full health
Command handlers no longer need the offset value, as speech is unified
Books have partial packet class implementation
Better use of BASEITEMSERIAL and INVALIDSERIAL
CChar::SendToSocket implemented as packet class
target() and mtarget() are cSocket methods
Added pragma note for start of Move Guildstone functionality location
structure cleanups/movement
cCommands::MakeShop streamlined
Prints to console when a fragmented packet is attempted
Changed a dynamic memory allocation to static in cSocket::Send
cGump::OPen converted to use packet class
Addmenu no longer has nomove tag
Spellbook start converted to packet class
CPExtMove now handles flag setting
Streamlined startChar routine
I've removed these JS functions (as they have attrib or method equivs)
Gump_CreateGump
Gump_AddButton
Gump_AddText
Gump_AddRadio
Gump_AddPage
Gump_AddPicture
Gump_AddGump
Gump_AddBackground
Gump_AddTextEntry
Gump_AddCheckbox
Gump_Delete
Gump_SendToSocket
GetName2
SetName2
GetLowDamage
GetHiDamage
SetAtt
GetAtt
SetDef
GetDef
SetDecayable
IsDecayable
IsCriminal
IsMurderer
IsInnocent
MakeCriminal
MakeInnocent
GetGender
SetGender
TurnToward
DirectionTo
GetRaceName
SetRaceName
IsPlayerRace
GetRacialGenderRestrict
GetRacialArmourClass
GetRaceLanguageSkill
GetRacePoisonResistance
GetRaceMagicResistance
GetRaceVisibleDistance
GetRaceNightVision
GetClientVersion
GetClientType
These have been migrated to newer methods:
CastSpell (chars)
AddSpell (chars)
SpellFail (chars)
ApplyRank (items)
RequiresBeard (races)
RequiresNoBeard (races)
CanRaceWearArmour (races)
IsValidHairColour (races)
IsValidSkinColour (races)
IsValidBeardColour (races)
SpawnItem has been split into CreateDFNItem and CreateBlankItem.
A new object type, UOXCFile, has been made.
eg var mFile = new UOXCFile;
It has the following methods
Open
Close
Write
Read
ReadUntil
Free
and properties:
pos (read/write)
length (read)
eof (read)
25 Apr 2003 - giwo
Added:
Added enum distLocs to simplify distance checking (to avoid confusion over what a certain distance would be IE 1 tile away = 2)
Added support for setting an items container in JavaScript (object.conainer = newcontainer)
Added string support for house.dfn allowing house items and house deeds to be strings, not just numbers
Added new cStringTools class to replace makeNum() with type-matching string-to-number functions
Added new type of command func, CMD_SOCKFUNC, this will be used to define those commands which need a socket passed to it
Added Get/Set wrappers for cmd_offset and made it a private member of the cCommands class
Added cSpeech class and cSpeech.h to remove the speech functions from global scope
Added support for ADDITEM item,amount in the itemmenu's (note if you specify an amount it will override the default amount setting of that item)
-Same support for PACKITEM in newbie.dfn and npc dfn's and ADDITEM in carve.dfn
Added EQUIPITEM and PACKITEM in place of ITEM in advance.dfn, note PACKITEM has support for amounts, EQUIPITEM will attempt to equip the item on the character
Changed:
Cleaned up applyNPCSection and added support for reading in HP tags
Fixed issues with reading in certain tags from NPC-defs
Made console output hexadecimal numbers where applicable also reduced signed/unsigned mismatches in sprintf's
Moved CChar::carve and CItem::carve into cBaseObject::carve, and changed it to an SI16
Changed CItem::good to an SI16
Changed CItem::glow to a UI32 possibly fixing some issues where it would not read in properly
Fixed deletion of house items upon re-deeding a house
Fixed commandlevel overrides in command.dfn to read-in properly
Overhaul to cCombat to make way for future split of Players and NPC's
Created an enum for aiTypes allowing easy refrence of NPCAI
Created a TargetIDs enum to allow easy refrence of target-based commands when calling target() and using cTargets::MultiTarget()
Moved target() and its overloads to targeting.h
Updated many timers that were using an SI32 to use TIMERVAL reducing Signed/Unsigned mismatches
Moved safeCopy() into the cStringTools class, also moved numtostr and renamed it makeString()
Fixed up command_set and AllSetTarget() to remove the need for mstring
Moved gettokennum() into the cStringTools class as GetToken() and made better use of it
Change cServerData::SetServerStartPrivs() to a UI16
Changed UI08 CChar::Get/Set Priv() & Priv2() into UI16 Get/SetPriv()
Fixed areas where ifdef'd code had never been updated to make use of new CChar & CItem handling
ITEM tags in npc dfn's changed to EQUIPITEM, be sure to update your scripts
Changed JS function CalcSocketFromChar() to return an object
Moved findMulti() and inMulti() to findfuncs.cpp and removed inMulti() from global scope
Changed worldsaves to output many values in hex format
Fixed some issues in cServerData where settings were not initialized upon creation of the class
Many type mismatches fixed in cServerData along with the resizing of many variables in the class greatly reducing the total memory it uses
Fixed a crash bug in combat when attempting to calc the defense covering a certain layer
Fixed several magic commands which had unused variables sent to them
Moved comm[CMAX] to the cCommmands class and added Get/Set wrappers to it
Moved makenumber() to the cCommands class and renamed it to GetArgument()
Minor fixes / tweaks to the cBooks class
Fixed some container mismatches
Removed:
Functions:
CSocket::currchar & CSocket::addid5
Removed item_test and added CItem::CheckItemIntegrity() in its place
Fully depreciated and removed makeNum() and its overloads
UOXSOCKET calcSocketFromChar() overloads
calcSocketFromSockObj()
Legacy calcCharFromSer() and calcItemFromSer() overloads
UseHairDye() and moved all contained code to its' one usage
enlist()
CChar: Murderer(), Skin2(), ID2(), xID(), xSkin() and many unused overloads
Commands:
'USE' Because it has not had supporting code for it for quite some time
'CTRIG','ITRIG', and 'TTRIG' As they were remnants of the old trigger system
'SETHEXMOREXYZ' Because SetMOREXYZ will support both HEX and Decimal
'SETSPEECH' Because it did nothing
'TILEDATA' Because 'SHOWDETAIL does the exact same thing
'XSBANK' Because 'XBANK does the exact same thing
regions.h and classes.h from global scope and included them in those files which actually used them
utilsys.cpp and utilsys.h from the project as they were not used anywhere
mstring.cpp and mstring.h from the project
Many unused and duplicate global includes
Many unused #defines and const's
19 Mar 2003 - giwo
Added:
JS Get/Set "vulnerable" handlers for character properties (Abaddon)
willHunger with Get/Set HungerStatus() wrappers to CChar class (can now selectively stop a character/creature from continuing to hunger)
JS Get/Set "willhunger" handlers for character properties
Changed:
Linux compile fixes (thanks Malketh)
Hash.h warning fixed (thanks Philantrop)
Fixes to getRootPack() and getPackOwner()
Removed many #includes from the global scope, including them in the specific files that need them
This should greatly reduce compile time and filesize, along with the need to recompile after altering most headers
Removed the linux ifdefs around typedefd function declarations, this should work with gcc 3.2
Moved global loading functions into a new cFileIO() class to take them out of global scope
Fixed an issue causing items to not be sent to the client (thanks Malketh)
Moved some global structs into the CWorldMain class
Fixed a bug causing a crash on character / item creation
Moved all effects stuff into its own class to take it out of global scope
Changed the variable CChar::region to CChar::regionNum to avoid conflicts with the cTownRegion region[] indexes
Moved getbestskill(), isHuman(), and inDungeon() into the CChar class to remove them from global scope
Took npcSimpleAttackTarget() out of global scope
Rewrote restock() to make use of restockNPC()
Changed the typedef'd iterator in hash.h to HASHITERATOR to kill a Linux warning
Renamed cEffects::soundeffect() to PlaySound() and removed unneeded overloads
Fixed a bug causing executebatch to be set with locationcount data
Rewrote cEffects::bgsound()
Documented sounds.cpp
Misc minor cleanups / fixes
Removed:
sendItemsInRange() (CChar::Teleport() does the same thing)
Many #includes that were not being used
deathMenu()
respawnnow() and moved all of its code into command_respawn()
one instance of cEffects::scpSoundEffect() and renamed the other to PlaySound()
13 Mar 2003 - giwo
Changed
Fixed an issue allowing the server to not have a dictionary.ZRO (which would cause a crash when a dictionary entry was called with no language)
Fixed an issue causing the server to puke when it attempted a restart
Moved SpawnRandomItem() into cItem class
Moved SpawnRandomMonster() into cCharHandle class
Broke necro.dfn into fishing.dfn and digging.dfn
Made better use of SpawnRandomItem() and SpawnRandomMonster()
12 Mar 2003 - giwo
Added:
CPOpenGump and CPSpeech packet class to remove some global vars (Note these are pretty basic classes and someone
with a better understanding of how we handle sending/recieving packets could probably expand these to make better use of them)
Changed:
Moved many global vars into the CWorldMain() class
Cleaned ResetVars() in uox3.cpp as ResetDefaults() in CWorldMain() now handles much of that
Added a check to ensure text wasn't sent twice in talking(), should fix double-speech
Cleaned up cmdtable.cpp removing a couple duplicate entries, etc
Changed target() to only require 4 values (as the first two were always 0 and 1)
Removed many unneeded typedefs and globals
Went through cServerData() and noted unused server.ini entries
Moved title1(), title2(), and title3() to cClick.cpp since that is their only usage, made use
of MAX_TITLE to ensure we wouldn't overrun the buffers, and renamed them matching what title they were
11 Mar 2003 - giwo
Changed:
Fixed a potentially very serious bugs with how containers were being set upon loading the world
Fixed possible re-adding of weight to containers and characters at load
Fixed a bug causing equipped items that were not weapons to take damage in combat
Minor cleanups / warning fixes / Linux compatability issues (punt)
07 Mar 2003 - giwo
Overhauls/Additions/Major Changes
Changed:
Tweaks/Object Conversions/Misc Small Changes
Changed:
Changed CItem::Get/SetLayer() to a UI08
Fixed a bug in speech causing you to see your own text twice
Fixed a nasty crash bug caused by changing an items layer
Fixed a bug causing NPC's to always be the first attacker
Removed:
CChar::Fame2() and CChar::Karma2()
CChar::Stamina2(), CChar::Mana2()
05 Mar 2003 - giwo
Overhauls/Additions/Major Changes
Changed:
Armor DEF system overhauled to match OSI system
Tweaks/Object Conversions/Misc Small Changes
Changed:
-Updated Hash Table Remove() calls to remove unrefrenced parameter "index"
-Changed cSocket::Get/SetDWord() to a UI32 to fix problems checking it against INVALIDSERIAL and storing large serial numbers
-Changed cSocket::AddID() to a UI32 for the same reason as above
-Changed cSocket:::Get/SetWord() to a UI16 to fix possible problems storing ID's
-Fixed up calcStealDiff() to match new weight system
-Minor updates to CPStatsWindow to match the new Armor DEF system and Weight system
-Fixed calls to getTileName() so the names container was set with MAX_NAME
-Fixed up getFieldDir() using direction typedefs
-Changed Get/SetMagic() to Get/SetMovable()
-Cleaned up some unrefrenced params
-Changed some int's to UI16's in books.cpp
-WorldSave Changes:
-XYZ and worldnum to Location=x,y,z,worldnum
-HiDamage and LoDamage into Damage=hidamage,lodamage
-Strength,st2,Dexterity,dx2,Intelligence,in2 changed to Strength=str,st2, Intelligence=int,in2, Dexterity=dex,dx2
-DWord0-3 changed to DWords=0,1,2,3
-FX1,FY1,FX2,FY2,FZ1 changed to WanderArea=FX1,FY1,FX2,FY2,FZ1
-MoreX,MoreY,MoreZ changed to MoreXYZ=morex,morey,morez
-More,More2 changed to More=more,more2
-Type,Type2 changed to Type=type,type2
-Light,Rain,Heat,Cold,Snow,Lightning changed to RaceDamage=Light,Rain,Heat,Cold,Snow,Lightning
-Fame,Karma,Kills changed to Reputation=fame,karma,kills
Removed:
Removed all smoking stuff, as it's nothing but a waste of code
26 Feb 2003 - giwo
Overhauls/Additions/Major Changes
Changed:
-Complete rewrite to the Weight system
-Weight is more permanent, removed need to recalc it constantly
-Packs now show the weight of themselves and all their contents
-Packs now have a weight limit (currently hardcapped to 400, should make it based on type of container and possibly scriptable)
-All items use the weight value given to them in the scripts unless the entry is 0 in which case they pull weight from the MUL's
-Better handling of overloaded for teleport / recall / walking
-Weight will max out at 65535 stones and can not go lower than 0 stones
-Items container is now set as a cBaseObject
Tweaks/Object Conversions/Misc Small Changes
Changed:
-Fixed up itemsfx() and renamed it to itemSound(), now better handles Gold sfx and where an item was dropped (ie in a pack or on the ground)
-Cleaned up goldsfx() and renamed it to goldSound()
-Many fixes to get/drop/wear/packItem functions
-Minor fixes/cleanups in movement.cpp
-Fixed a worldsave crash with tamed creatures
-Pressing 0 in console reloads items as well as everything else
-Made dagger usable for carve again
-Fixed a horse mounting distance check
-Noted (and in some cases fixed) unrefrenced variables throughout the code
Removed:
-Removed calcLastContainerFromSer(), as the Get/SetCont() changes made it superfluous
18 Feb 2003 - giwo
Overhauls/Additions/Major Changes
Added:
-Added cItems::menuAddItem() to handle adding items from the add menu
-Added handleCooking() in place of cSkills CookMeat(), MakeDough(), and MakePizza()
-Added PlayInstrument() in place of PlayInstrumentWell() / PlayInstrumentPoor()
-Added cSkills::doStealing() to take place of repetitious code in RandomSteal() and StealingTarget()
-Added objInRange() functions in place of charInRange()/itemInRange() funcs
Changed:
-Converted inscribe.gmp to inscribe.dfn and used NewMakeMenu() in favor of the old make menu system
-Updated GetMagic() == 3 calls to IsLockedDown() calls (as that is all it should be used for)
-Fixed up all IsLockedDown() calls, resources that are LockedDown can NOT be used, even by GM, until released
-Also note, items that should be usable if locked: Skill items (looms, training dummies, etc, Recall runes)
-Moved the two functions from newbie.cpp to pcmanage.cpp and removed newbie.cpp from the project
-Moved action() and impaction() to effects.cpp
-Moved isHuman() to npcs.cpp
-Where possible made functions that were part of classes private
-Made use of cCombat::getWeaponType() in doubleClick() to centralize searching for weapon ID's
-Updated CDictionary to make use of IsValid and added wrapper functions for it
-Moved keyInPack() to doors.cpp and made better use of it
-Added support to NpcTalk for variable arguments
-Added support to NpcTalkAll for variable arguments
-Changed itemmessage() to objMessage() and added dictionary support to it
-Went through and added language support to Dictionary->GetEntry() calls anywhere possible (note, should NOT use socket-based languages for: Console, Broadcasts, Item/Region/Char Names, Anything else?)
-Broke doubleClick() into 3 functions, doubleClick(), handleDoubleClickTypes(), and handleDoubleClickIDs() to allow quicker viewing / editing
-Cleaned up unneeded variables in the three aforementioned functions
Removed:
-Trashed im.cpp/.h, MakeMenuTarget() and the rest of the old make menu system
-Removed Gumps directory (as it is now unnecesarry)
-Removed getCharDist() and getItemDist()
-Removed make_st and cSkills::CalcRank()
Tweaks/Object Conversions/Misc Small Changes
Changed:
-Removed iSGM() checks from all Dist functions, as it would cause wierdness in many areas of the code (Combat, for example)
-NPC Movement issues addressed
-Creatures following move faster (not just tamed)
-Wander direction changes randomly
-NPC movement slowed down alltogether
-Attack flagging issues addressed/worked on
-Combat bug causing you swing but never hit when diagonal from enemy fixed
-Decay timer reset upon dropping an item on the ground
-Cleanup of cItem::DecayItem()
-Fixed an issue causing creatures to get stuck turning around when nearly dead
-Fixed up amount functions to allow for UI32, should allow statwindow to properly display up to 4billion+ gold on a character, as well as allow high-cost item buy/sells
-Changed CChar tailitem, GetTailItem() and SetTailItem() to an object pointer
-Now can only mount a creature if it is tamed and owned by you
-Changed GetAdvObj to a UI16, shouldn't need more than 65535 Advance.dfn entries
-Get/SetSpawn() now check for INVALIDSERIAL instead of 0
-Updated CChar::Get/SetSmeltItem() to an Object pointer
-Changed UI32 ItemPtr() in tempeffects to cBaseObject *ObjPtr()
-Changed cSocket::AddMItem() to a CItem
-Used GetItemObj(), GetOwnerObj(), GetSpawnObj(), and GetMultiObj() where possible
-Cleaned up CurrcharObj() usage
-Changed CSkills::Snooping() to use an Object pointer rather than a Serial
-Changed tempeffect() to use a CItem call instead of ITEM (and removed it alltogether from its CChar overload)
-Changed nVialID in necro.cpp to now make use of cSocket::AddMItem() to allow an object pointer
-Changed cTownRegion::DisplayTownMenu() to use an item pointer
-Minor tweaks to Rank system
-Fixed House Lockdowns, Items are now added to the Multi's LockDown list
-Fixed a WorldSave crash caused by tempeffects, by adding teffect_st constructor
-Possibly fixed MultiCaching bug, where container should have been UI32
-Updated StoreItemRandomValue(), fixing some possible signed/unsigned issues
-Updated calcLastContainerFromSer() to return a cBaseObject pointer
-Fixed issue in checktempeffects() causing ITEM timers not to function
-Changed CItem *Get/SetTailItem() to SERIAL Get/SetSkillItem()
-Ensured SkillItem was being set back to INVALIDSERIAL after use
-Fixed up cGumps::choice()
-Fixed bug when npc attacked causing the emote to display incorrectly, also added "creature" is attacking you! emote for target only
-Same fixes for players attacking
-Updated npcEmoteAll() to handle variable arguments and updated calls to match
-Used Socket-based language calls in Dictionary-GetEntry() wherever possible
-Caught some missed text and put them in the dictionary.
-Documented functions in speech.cpp
-Made use of objInRange() wherever possible
-Many signed/unsigned mismatch fixes
-Minor optimizations and code cleanups
Removed:
-Commented out old Alchemy stuff (alchemy.dfn in /create/ still needs work)
-Removed unused respawntime global
-Removed some unneeded typedefs
-Removed many unnecesarry uses of char temp[]; sprintf( temp, Dict ); function( temp ); in favor of function( dict )
-Removed unnecesarry overloads for the following functions:
SpawnItem()
GetItem()
CItem::SetSpawn()
CChar::SetSpawn()
GetMulti()
GetOwner()
SetOwner()
openPack()
decItemAmount()
CItem::ReleaseItem()
----------------------------
2001-12-21 04:20 dark-storm
* uox3.cpp:
Fixed all warnings
2001-12-21 03:30 dark-storm
* funcdecl.h, html.cpp, html.h, uox3.cpp:
Worked on the HTML Stuff a little more, added the call for Offline
pages which should work now (Add OFFLINE=1 to your page
definition).
Moved some function declarations from funcdecl.h to html.h and
renamed offlinepages to CheckOfflinePages().
2001-12-21 02:33 darkangelab
* UOXJSPropertyFuncs.cpp, UOXJSPropertySpecs.h:
Whitespace updates
Added property setter stuff for item objects
2001-12-21 02:18 darkangelab
* SEFunctions.cpp, SEFunctions.h, cScript.cpp, gumps.cpp:
Removed GetX, GetY, GetZ, GetColour and GetID and their Set
versions from the JS engine, as they're now properties
Removed some warnings
General cleanups
2001-12-20 23:23 darkangelab
* cScript.cpp:
Updated some bad snippets
2001-12-20 22:34 darkangelab
* SEFunctions.cpp, cBaseObject.h, cBaseobject.cpp, cChar.cpp,
cItem.cpp, cScript.cpp, cScript.h, html.cpp, npcs.cpp,
pcmanage.cpp, regions.cpp, UOXJSMethods.cpp, UOXJSMethods.h,
UOXJSPropertySpecs.h, skills.cpp, targeting.cpp:
Added ShouldSave() method to CBaseObject, for more support in spawn
regions
ShouldSave by default is always true
If an object is inside an object that won't save, neither will any
of the objects inside the container
Updated all the JS events to use object based systems rather than
index based ones
Fixed a slight bug in the error reporter
Fixed the MethodError function with multiple paramater support
2001-12-20 17:42 darkangelab
* UOXJSMethods.h:
Readability updates
2001-12-20 17:42 dark-storm
* html.h:
Style
2001-12-20 17:32 darkangelab
* UOXJSMethods.cpp, combat.cpp, html.cpp, npcs.cpp:
Source code cleanups and tidy ups
Syntax updates to conform to a single style
Performance tweaks to some HTML stuff
2001-12-20 16:53 dark-storm
* cAccount.cpp, cServerData.cpp, cSocket.cpp:
Newlines once again
2001-12-20 16:36 dark-storm
* html.h:
Added a newline
2001-12-20 16:32 dark-storm
* SEFunctions.cpp, SEFunctions.h, UOXJSClasses.h, UOXJSMethods.cpp,
UOXJSMethods.h, UOXJSPropertyEnums.h, UOXJSPropertyFuncs.cpp,
UOXJSPropertyFuncs.h, UOXJSPropertySpecs.h, cMultiObj.cpp,
cScript.cpp, cSpawnRegion.cpp, cmdtable.cpp, combat.cpp, html.cpp,
necro.cpp, npcs.cpp, quantityfuncs.cpp:
Added Update to the PropertySetters for X,Y and Z.
Added a few Character Methods (TextMessage,Delete and others) and a
Constructor for the UOXChar class (not finished but working)
Added Newlines to some files
Fixed a linux issue (please check that)
Fixed a Guardbug where attacking a monster in a guarded area
without the default npc.scp would crash the server.
Setting the Source and Destination of TempEffects to INVALIDSERIAL
on NPC Deletion eventually should fix rare combat bugs.
Prepared html.cpp for Offline pages.
2001-12-20 12:41 dark-storm
* Makefile.am, Makefile.in:
Added the
UOXJSMethods.cpp and UOXJSMethods.h
to the Linux Makefiles
2001-12-20 08:48 dark-storm
* cScript.cpp:
Activated CGump javascript class
2001-12-20 08:44 dark-storm
* html.cpp, html.h, uox3.cpp, uox3.h:
Added the basics for a new HTML Status system.
Stand by for documentation...
Added: html.h
2001-12-20 08:22 dark-storm
* UOX3_Official.dsp:
- no message -
2001-12-20 08:16 dark-storm
* UOX3_Official.dsp, UOXJSClasses.h, UOXJSMethods.cpp,
UOXJSMethods.h, cScript.h:
Added CGump , class for JavaScript gumps.
Added UOXJSMethods.cpp and UOXJSMethods.h to the Project file and
added a filegroup for the JS Engine as there are a lot of files by
now...
Usage:
var myGump = new Gump;
myGump.AddBackground(0,0,450,200,0x24a4);
myGump.AddText(30, 30, 0x1, "Test");
myGump.Send(0);
2001-12-20 01:38 darkangelab
* cScript.cpp, cScript.h, cmdtable.cpp, funcdecl.h, npcs.cpp,
SEFunctions.cpp, UOX3_Official.dsp, skills.cpp, sound.cpp,
uox3.cpp:
playMidi now takes 2 parameters, not 3
The command to play a midi takes 1 or 2 parameters now
Added mechanism by which JS race, char, item, guild, region and
socket objects can be dynamically allocated and released without
much difficulty
Automatically acquire 2 characters and 2 items per script, so that
the parameters can be used
Created a #define system for new object based mechanism (note that
it will not currently compile under object system as is, but normal
one will)
Cleanups, tidyups, and other miscellaneous things
2001-12-19 19:37 darkangelab
* cClick.cpp, cItem.cpp, cItem.h, effect.cpp, funcdecl.h,
gumps.cpp, items.cpp, skills.cpp, targeting.cpp, uox3.cpp:
Removed SetLayer( 0 ) on items when generating corpse to avoid
layer corruption
Changed murderer and creator values for items from a string to a
serial, shaving 92 bytes per item
2001-12-19 17:49 darkangelab
* cScript.cpp:
SetIntelligence JS call fix thanks to silver2000
2001-12-18 23:14 darkangelab
* SEFunctions.cpp, boats.cpp, cClick.cpp, cSpawnRegion.h,
classes.h, combat.cpp, house.cpp, targeting.cpp, uox3.cpp:
Few cleanups and tidyups
2001-12-18 22:36 darkangelab
* cmdtable.cpp, cmdtable.h, newbie.cpp, npcs.cpp, uox3.cpp,
worldmain.cpp:
Added 'reloaddefs which allows runtime reloading of all definitions
(can be time consuming)
Fixed a bug with newbie items with text named items
Called SpeechSys->Poll() just before a world save, so that the
broadcast message telling about the save can be sent
Warning cleanups
2001-12-17 20:05 darkangelab
* ai.cpp, cMagic.h, classes.h, combat.cpp, cWeather.cpp,
cWeather.hpp, combat.h, globals.cpp, magic.cpp, movement.cpp,
movement.h, pcmanage.cpp, ssection.cpp, uox3.cpp, uox3.h:
Functions no longer take a currenttime parameter, instead using the
global uiCurrentTime variable
Fixed a bug where the day timer would go nuts
Changed temperature from UI08 to SI08, to support Krrios'
temperature effects
Removed some unnecessary global variables
2001-12-16 20:20 darkangelab
* UOXJSClasses.h, UOXJSPropertyEnums.h, UOXJSPropertyFuncs.cpp,
UOXJSPropertyFuncs.h, UOXJSPropertySpecs.h, cSocket.cpp, cSocket.h,
enums.h:
Added cSocket helper functions to help with JS property stuff
Added a CSocket object to the JS system
Implemented a number of socket properties for JS system
Added CV_KRRIOS to client types
2001-12-16 19:09 darkangelab
* commands.cpp, targeting.cpp, uoxstruct.h:
Added stripOff member to commandLevel_st
STRIPOFF tag in a command level description tells 'make to remove
equipped items to pack, and to remove hair/beard
2001-12-15 22:49 darkangelab
* UOXJSPropertyEnums.h, UOXJSPropertyFuncs.cpp,
UOXJSPropertySpecs.h:
Updated and worked on Guild properties
2001-12-15 05:57 darkangelab
* calcfuncs.cpp, cBaseObject.h, cBaseobject.cpp, cChar.cpp,
combat.cpp:
Fixed a bug which had calcItemObjFromSer with INVALIDSERIAL as the
serial returning a valid object
Installed an equivalent fix for calcCharObjFromSer but which hasn't
cropped up yet
Broke up SetMulti code to RemoveFrom and AddTo, firing the trigger
more often
2001-12-14 23:52 darkangelab
* UOXJSPropertyEnums.h, UOXJSPropertyFuncs.cpp,
UOXJSPropertySpecs.h, targeting.cpp, townregion.cpp, townregion.h,
uox3.cpp, weight.cpp:
Added more region properties
Changed a number of int references to SI32
Added more functions to cTownRegion
Cleaned up some warnings
2001-12-14 16:09 thyme
* Makefile.in:
Added UOXJSPropertyFuncs.o to OBJS for compile
2001-12-13 20:24 darkangelab
* UOXJSClasses.h, UOXJSPropertyFuncs.cpp:
Updates to property get/setters
2001-12-13 19:34 darkangelab
* Makefile.am, Makefile.in, UOX3_Official.dsp, UOXJSClasses.h,
UOXJSPropertyEnums.h, UOXJSPropertyFuncs.cpp, UOXJSPropertyFuncs.h,
UOXJSPropertySpecs.h, cScript.cpp:
Broke out PropertySpecs, PropertyFuncs, PropertyEnums and the JS
Classes into their own header and CPP files
2001-12-13 00:22 darkangelab
* cScript.cpp:
Added property enums and specs for Guilds, races and regions
2001-12-12 23:18 thyme
* skills.cpp:
Added strupr(tag) for create menu
2001-12-12 22:52 thyme
* scriptc.cpp:
Forced FindEntry to do uppercase lookups
2001-12-12 21:35 darkangelab
* cScript.cpp, globals.cpp, items.cpp, npcs.cpp, uox3.h:
Killed some unnecessary global variables
Changed some variables for JS Char objects to readonly
Implemented more property setters for JS Char objects
2001-12-11 21:02 darkangelab
* cItem.cpp:
Fixed a hash item error problem occurring on new item creation, due
to redundant code
2001-12-11 19:51 thyme
* scriptc.cpp:
Added strupr() for section headers
2001-12-11 19:14 darkangelab
* skills.cpp, skills.h, uox3.cpp:
Changed MakeMenuTarget to take a string instead of an int
Adjusted calls to MakeMenuTarget to pass a string
NOTE: Inscription relies on numeric entries for spells, not names!
2001-12-10 23:22 darkangelab
* SEFunctions.cpp, cChar.cpp, cItem.cpp, cItem.h, cMultiObj.cpp,
cMultiObj.h, charhandle.cpp, classes.h, commands.cpp, globals.cpp,
handlers.h, itemhandler.cpp, items.cpp, regions.cpp, uox3.cpp,
uox3.h:
Removed the need for InitItem
Implemented the constructors to be the same for citem/cmultiobj as
it is for cchar
Adjusted SetSerial so that it removes from the hash table and adds
it back in
This fixed the common error messages occurring with world loading
2001-12-10 21:52 darkangelab
* SEFunctions.cpp, SEFunctions.h, cScript.cpp, uox3.h:
Added Get/Set Name2 JS functions
Added GetLowDamage and GetHighDamage functions
Init'd standard classes for each context/object so things like for
loops should work
Added error reporter which should report errors meaningfully
Began work on preparing an object based system rather than a
heavily function based one
Thanks to DarkStorm for the information and the ideas/code
2001-12-05 22:46 darkangelab
* cSocket.cpp:
Logging only happens if the logging option is on
2001-12-05 22:25 thyme
* items.cpp, npcs.cpp:
Added strupr() for tags in DFNS
2001-12-05 19:39 darkangelab
* cScript.cpp, cScript.h, magic.cpp:
Added an onSpellTarget event
onSpellTarget fires for a character/item when it's targeted by a
spell
onSpellTarget also fires BEFORE the consequences of the spell
exerts itself (in case it's enough to kill)
2001-12-05 18:28 darkangelab
* uox3.cpp:
Fixed a bug where shop layers were not showing up with 'gmopen
2001-11-29 19:23 darkangelab
* cServerData.cpp, cServerDefinitions.cpp, jail.cpp, scriptc.cpp,
ssection.cpp, townregion.cpp, uox3.cpp:
Code changes and updates to turn the DFN support on, in preparation
for a package release
2001-11-27 18:22 darkangelab
* items.cpp:
Slight tweak/tidy up to CheckEquipment
2001-11-26 21:21 seank
* ChangeLog:
figured i'd update this guy... weee
2001-11-26 21:19 seank
* threadsafeobject.h:
A define was missing that was causing the pthread fixes zippy did
to break.
It seems to be a bug in the configure. This is a hack until I can
figure
out what happened.
2001-11-26 19:59 bpass
* network.cpp, threadsafeobject.cpp:
Linux/Pthread mutex fixes.
Changed threadsafeobject to use recursive mutex, this should fix a
LOT of linux freeze problems.
2001-11-25 21:40 thyme
* uox3.cpp:
Fixed dropItem bug
2001-11-25 20:05 bpass
* cClick.cpp, uox3.cpp:
Little container fix
2001-11-25 17:30 bpass
* hash.h:
replaced -1 with INVALIDSERIAL
2001-11-23 00:24 darkangelab
* network.cpp, npcs.cpp, packets.cpp, packets.h, targeting.cpp:
Removed some unnecessary variables
Created a packet class CPCharAndStartLoc to do the majority of the
GoodAuth() function in cNetworkStuff
2001-11-22 17:45 darkangelab
* cmdtable.cpp, npcs.cpp:
Removed some unnecessary references to uox3test.ini
Fixed an NPC creation lookup bug that would show up on DFN style
headers
2001-11-22 17:18 darkangelab
* cChar.cpp, cChar.h, cItem.cpp, cItem.h, combat.cpp, uox3.cpp:
Reduced Poison information for characters and items to SI08 from
SI32
Changed return value of -1 to 0xFFFF in calcAtt
2001-11-22 16:50 darkangelab
* pcmanage.cpp:
Added Thyme's fix for char creation with 0 intelligence
2001-11-21 21:04 darkangelab
* cBaseobject.cpp, cClick.cpp, funcdecl.h, hash.h, packets.cpp,
packets.h, speech.cpp, targeting.cpp, uox3.cpp:
Added openPack( cSocket *, CItem * ) to simplify some calls (and
reduce lookups)
Added CPItemsInContainer packet to do the bulk of the work that
openPack does
Split openPack to send CPDrawContainer and CPItemsInContainer
Fixed a bug with PostLoadProcessing that would stop spawn serials
and owner serials from properly being set
Syntax cleanups
2001-11-21 10:45 bpass
* globals.cpp, hash.cpp, hash.h, items.cpp, movement.cpp, uox3.cpp,
uox3.h:
Moved hash classes into template classes in hash.h
Hash.cpp is no longer needed.
2001-11-20 22:15 darkangelab
* cServerData.cpp:
Writes out the ScriptSectionHeader setting
2001-11-20 20:31 darkangelab
* packets.cpp:
Replaced sscanf in CPIClientVersion::Handle with a stringstream
based version
2001-11-20 14:17 bpass
* packets.cpp:
*Oops* Compile fix
2001-11-20 11:10 bpass
* UOX3_Official.dsp, UOX3_Official.dsw:
Small cleanups for the win32 project files
2001-11-20 11:07 bpass
* network.cpp, network.h, packets.cpp, packets.h, uox3.cpp:
Linux run fixes: ifdefd out Internal mutex stuff in network, only
used if compiled with __LOGIN_THREAD__ this stuff was causing
deadlock inside linux... preventing almost everything except login
(ie: Char creation)
Added string checking to CPIClientVersion
2001-11-18 20:20 darkangelab
* boats.cpp, cAccount.cpp, cClick.cpp, cServerData.cpp,
cServerData.h, cServerDefinitions.cpp, cSocket.cpp,
cSpawnRegion.cpp, cSpawnRegion.h, classes.h, cmdtable.cpp,
cmdtable.h, combat.cpp, debug.cpp, effect.cpp, fileio.cpp,
funcdecl.h, house.cpp, im.cpp, items.cpp, magic.cpp, magic.h,
movement.cpp, necro.cpp, npcs.cpp, SEFunctions.cpp, SEFunctions.h,
regions.cpp, skills.cpp, sound.cpp, speech.cpp, targeting.cpp,
targeting.h, trigger.cpp, uox3.cpp:
Changed one line comments from /* */ to // in the instances it's
used
Syntax cleanups
Fixed bug where SpawnRandomMonster would fail
Added tag to ini file to choose between, essentially, DFN and SCP
headers (whether it puts ITEM or NPC at front of numbers),
defaulting to scripts
Updated code to be much more DFN friendly
JS func SpawnNPC now takes a string not an int in the 4 param
version
2001-11-18 18:42 bpass
* effect.cpp:
Few NULL checks for crash fixes
2001-11-18 18:19 bpass
* sound.cpp:
Crash fix: added a few NULL checks to soundeffect()
2001-11-18 17:38 bpass
* magic.cpp:
Fix for NPCs killing themselves when casting area spells in combat.
2001-11-16 08:13 bpass
* ssection.cpp:
Crash fix
2001-11-15 21:04 darkangelab
* books.cpp, cmdtable.cpp, combat.cpp, commands.cpp, effect.cpp,
fileio.cpp, funcdecl.h, globals.cpp, gumps.cpp, house.cpp,
items.cpp, magic.cpp, msgboard.cpp, necro.cpp, network.cpp,
pcmanage.cpp, scriptc.cpp, skills.cpp, speech.cpp, targeting.cpp,
uox3.cpp, uox3.h, vendor.cpp:
Removed some unncessary global functions and variables
Updated DFN code so it properly reads in section headers
General clean up / tidy ups
2001-11-15 19:30 darkangelab
* cServerData.cpp:
V2.0 INI lookup doesn't force data to uppercase, fixes linux path
stuff
2001-11-15 18:49 darkangelab
* cAccount.cpp, cAccount.h, fileio.cpp, funcdecl.h, uox3.cpp:
Commited compilation fixes, so it compiles clean
Moved FileExists to a global func so it can be used by more than
accounts
2001-11-15 18:40 darkangelab
* cBaseobject.cpp, cChar.cpp, combat.cpp, network.cpp, queue.cpp,
sound.cpp, uox3.cpp, uox3.h:
Syntax cleanups
Moved the spline stuff to sound.cpp, only commented out playing,
however commented the linux stuff detailing steps required for
Linux as provided by NNKK. Seems trivial
General other cleanups
2001-11-15 17:47 bpass
* cServerData.cpp, cServerData.h, cServerDefinitions.cpp,
combat.cpp, network.cpp, uox3.cpp, worldmain.cpp:
New INI format & fixes...
Fixes for combat.
2001-11-15 16:52 darkangelab
* cmdtable.cpp:
'tile and 'tilew now support a single field ID (like 0x0EED instead
of 0x0E 0xED) as well as 2 field IDs
2001-11-15 12:11 mrfixit
* itemhandler.cpp:
Fixed a signed/unsigned issue
2001-11-14 14:34 mrfixit
* PageVector.h, queue.cpp:
Fixed some warnings
2001-11-13 18:26 darkangelab
* uox3.cpp:
Meditation fix from Pa'ka
2001-11-13 17:38 darkangelab
* pointer.cpp:
Removal of pointer.cpp
2001-11-13 17:37 darkangelab
* Makefile.am, Makefile.in:
Removal of pointer.cpp from the makefile
2001-11-13 17:33 darkangelab
* UOX3_Official.dsp, UOX3_Official.dsw, cBaseobject.cpp, cChar.cpp,
cItem.cpp, cMultiObj.cpp, fileio.cpp, pointer.cpp, uox3.h:
UOX3 not UOX
Removed the sound code Zippy put in entirely, as well as attic'ing
pointer.cpp
Removed the conditionals inside cbo, citem and cchar saving,
reverting it back to it's full write
Added ostringstream output for multi objects
2001-11-13 16:58 bpass
* cChar.cpp, combat.cpp, uox3.cpp:
Crash fixes from "Crash me" irc test shard.
2001-11-13 14:11 bpass
* cBaseobject.cpp, cChar.cpp, cItem.cpp, uox3.h:
Re-added some of the osttringstream stuff to increase save speed
even more.
2001-11-13 09:44 mrfixit
* ssection.cpp, ssection.h:
- Fixed some warnings.
2001-11-13 09:43 bpass
* cBaseobject.cpp, cChar.cpp, cItem.cpp, pointer.cpp, uox3.cpp,
uox3.h:
I'm not even going to say anything.
2001-11-13 09:22 seank
* ChangeLog:
Updated changelog... for no reason whatsoever.
2001-11-12 23:11 darkangelab
* Dictionary.cpp, boats.cpp, books.cpp, cAccount.cpp,
cBaseobject.cpp, cChar.cpp, cClick.cpp, cItem.cpp, cItem.h,
cServerDefinitions.cpp, cWeather.cpp, calcfuncs.cpp,
charhandle.cpp, cmdtable.cpp, combat.cpp, dist.cpp, fileio.cpp,
globals.cpp, gumps.cpp, itemhandler.cpp, items.cpp,
lineofsight.cpp, magic.cpp, mapstuff.cpp, movement.cpp,
msgboard.cpp, SEFunctions.cpp, network.cpp, newbie.cpp, npcs.cpp,
pointer.cpp, regions.cpp, skills.cpp, skills.h, sound.cpp,
speech.cpp, targeting.cpp, trigger.cpp, uox3.cpp, uox3.h,
commands.cpp:
Updated repair code thanks to Bel-CMC
Cleaned up the code so that if, for, and while are of the same
syntax format
ie
for( a = 0; a < b; a++ )
if( blah >= blah2 )
do
{
} while( x < y );
2001-11-12 19:29 darkangelab
* cBaseobject.cpp, cChar.cpp, cItem.cpp, uox3.h:
UOX3 not UOX
Restored full writing out of data for each object, as it is an
explicit design decision critical for future implementations
Significantly reduced file IO when saving out items of any type,
reducing to at most 6 transactions per object, compared to the
dozens previously required
2001-11-12 17:13 bpass
* combat.cpp, movement.cpp, regions.cpp, uox3.cpp:
Few small walking changes trying to fix people needing to 'resend
all the time.
2001-11-12 15:48 bpass
* cBaseobject.cpp, cChar.cpp, cItem.cpp, hash.cpp, uox3.h:
Removed default tags from Saves/Loads. Huge speed and save size
benifits.
2001-11-11 19:26 darkangelab
* effect.cpp:
Not all temp effects trigger an equipment check
2001-11-11 19:16 darkangelab
* effect.cpp:
Don't change the value of s based on effect
2001-11-10 23:12 bpass
* pointer.cpp:
We are worried about the SOUND being portable? Come on. Jesus.
2001-11-09 20:03 darkangelab
* SEFunctions.cpp, pointer.cpp:
Fixed a SetDecayable JS bug
Updated SE_GetRaceCount documentation and implementation
Removed sound playback from pointer.cpp
As long as this is purely a win32 implementation, IT WILL NOT STAY
IN
For it to go in, a portable mechanism must be found
2001-11-09 13:16 mrfixit
* SEFunctions.cpp, SEFunctions.h, cScript.cpp:
Added GetRaceCount (By DarkStorm) to the scriptengine.
2001-11-09 08:42 bpass
* pointer.cpp:
I'm just going to keep doing this.
2001-11-08 17:43 darkangelab
* cClick.cpp, targeting.cpp:
Specialized repair tools were set to case 49 in MultiTarget(),
which was reserved for MakeTownAlly
Changed repair tools to case 24 and called Skills->Repair()
2001-11-08 17:10 darkangelab
* pointer.cpp:
Decision stands: As long as code is not portable and there is no
alternative for other OS', it is not to be included
2001-11-08 15:34 bpass
* pointer.cpp, uox3.cpp:
Leave the sound ON.
2001-11-06 20:56 darkangelab
* skills.cpp:
Smithing only works on the valid ingot IDs
Smith action on non-ingots attempts repair of the item
2001-11-06 19:12 darkangelab
* targeting.cpp:
Don't force | 0x8000 on character dyeing
2001-11-06 18:42 darkangelab
* uox3.cpp:
Default JS engine size set to 1MB on Win, 16 on Linux (as 1MB is
insufficient for defaults scripts on Linux)
2001-11-06 18:39 darkangelab
* items.cpp, pcmanage.cpp, uox3.cpp:
Removed some unreferenced variables
Cleaned up createChar() to hopefully reduce some of the code bulk
Added in default size of 0x100000 for the JS engine
JS engine will read the file engine.dat and grab the first line of
text. It turns that text into a number, and uses that for the
engine size. Minimum size of 0x100000 required and enforced.
2001-11-06 14:56 mrfixit
* cScript.cpp:
Fixed 4 warnigs
2001-11-06 12:18 shadowlord13
* SEFunctions.cpp, SEFunctions.h, cScript.cpp:
Added four new JS functions:
void SetDecayable( int item, bool isDecayable)
bool IsDecayable( int item )
void SetDecayTime( int item, int decayTime)
int GetDecayTime( int item)
2001-11-05 23:42 darkangelab
* uox3.cpp:
Changed a PushConn to PopConn in RefreshItem(), hopefully fixing a
hanging bug in Linux
2001-11-05 23:13 darkangelab
* cBaseobject.cpp, SEFunctions.cpp, cBaseObject.h, cClick.cpp,
cItem.cpp, cmdtable.cpp, newbie.cpp, uox3.cpp:
Code cleanups / tidy ups
Forced consistency of style
Changed an int to SI32 in base object
2001-11-05 17:25 darkangelab
* commands.cpp, funcdecl.h, globals.cpp, uox3.h:
locationcount ranges from 0->4000, thus an UI16 is required
loadCombat prototype moved to funcdecls.h
Fix for bad dyeing of characters (Krrios)
2001-11-05 16:50 mrfixit
* globals.cpp, uox3.h:
Added comments and changed int variables into UI32, SI32 etc.
2001-11-04 19:02 darkangelab
* SEFunctions.cpp, ai.cpp, network.cpp, network.h, pointer.cpp,
targeting.cpp, uox3.cpp, uox3.h:
0.95.07.00 release
Fixed application name and release version
Updated timezone to reflect that of person distributing, including
adding proper address for the project's source rather than primary
website
Commented out distinctly nonportable code
Removed connCliList from cNetworkStuff as it is no longer used
Monsters will not attack true animals
Cleaned up some code in targeting.cpp
2001-11-04 18:09 seank
* ChangeLog:
updated changlog.. weee
2001-11-04 15:17 shadowlord13
* tags.h:
Added endline to the end of the file.
2001-11-04 15:15 shadowlord13
* SEFunctions.h:
Fixed to compile for linux.
2001-11-04 14:33 shadowlord13
* SEFunctions.h, cBaseObject.h, cBaseobject.cpp:
Code for tags on characters and items. JS functions:
SetTag(objectID, objectType, tagname, tagval);
GetTag(objectID, objectType, tagname);
GetNumTags(objectID, objectType);
2001-11-04 14:19 shadowlord13
* SEFunctions.cpp:
Code for tags on characters and items. JS functions:
SetTag(objectID, objectType, tagname, tagval);
GetTag(objectID, objectType, tagname);
GetNumTags(objectID, objectType);
2001-11-04 12:29 shadowlord13
* network.cpp:
When someone clicks 'plot course' on a map, the server prints a
message to that effect, but that's all it does.
2001-11-04 12:29 shadowlord13
* cScript.cpp:
Added StringToNum and NumToString to the list of functions usable
in JS scripts.
2001-11-04 10:38 bpass
* cAccount.cpp, uox3.h:
Small auto accounts fix
2001-11-03 21:53 bpass
* cServerDefinitions.cpp, cSocket.cpp:
Small crash Fixes
2001-11-03 13:00 shadowlord13
* uox3.cpp:
Changed four comparisons, which were comparing a char to NULL (NULL
is for pointers!) to comparing the char to '\0'.
2001-11-03 12:59 shadowlord13
* mapstuff.cpp:
Commented out an unneccessary assert. It was checking to make sure
a unsigned integer was >=0.
2001-11-03 12:58 shadowlord13
* effect.cpp:
Fixed an erroneous comment "lord binary, body-values >0x3e crash
the client." He meant 0x3e1.
2001-11-03 12:52 shadowlord13
* network.cpp:
Fixed crash on logout.
2001-11-01 20:58 bpass
* fileio.cpp, pointer.cpp:
Different Sound :o)
2001-11-01 20:25 shadowlord13
* uox3.h:
Compiles under MingW also now.
2001-11-01 20:15 shadowlord13
* uox3.cpp:
Compiles under MingW also now.
2001-11-01 19:38 shadowlord13
* tags.h:
Tags!
2001-11-01 16:04 bpass
* fileio.cpp, pointer.cpp:
*sigh* Fixes for splines.
2001-11-01 15:50 bpass
* combat.cpp, fileio.cpp, pointer.cpp, uox3.cpp:
Small Combat fixes
2001-11-01 07:36 bpass
* pointer.cpp:
Opps
2001-10-31 19:48 bpass
* pointer.cpp:
Small Fix
2001-10-31 19:39 bpass
* fileio.cpp, pointer.cpp:
Misc.
2001-10-30 19:10 bpass
* uox3.cpp:
Console Thread Cleanups
2001-10-29 18:51 bpass
* cAccount.cpp, cAccount.h, cBaseobject.cpp, cItem.cpp, uox3.cpp:
*chants* Death to all crash bugs! Aieeeeeee!!
2001-10-29 14:56 bpass
* cConsole.cpp, cConsole.h:
Small Linux Fix
2001-10-29 14:16 bpass
* cAccount.cpp, cBaseobject.cpp, cConsole.cpp, cItem.cpp,
cThreadQueue.cpp, house.cpp, network.cpp, npcs.cpp, uox3.cpp:
Fix for vendors' stuff not being displayed.
2001-10-29 10:41 bpass
* cConsole.cpp, cConsole.h:
Mr. Fixit console cleanups
2001-10-29 10:20 bpass
* SEFunctions.cpp:
Tweak for File i/o
2001-10-29 09:50 bpass
* cBaseobject.cpp, cItem.cpp, combat.cpp, speech.cpp:
Fix for criminal flagging
2001-10-28 21:06 bpass
* SEFunctions.cpp, uox3.cpp:
Quick linux fix for new SE Functions
2001-10-28 18:25 bpass
* SEFunctions.cpp, SEFunctions.h, cScript.cpp:
FileOpen, FileClose, EnfOfFile, Read, ReadUntil, Write,
StringToNum, NumToString JSE functions for File I/O in uox
jscripts. FileOpen does not allow files containing "..""\", or
"/".
2001-10-28 17:09 darkangelab
* ai.cpp, boats.cpp, cChar.cpp, cItem.cpp, calcfuncs.cpp,
cmdtable.cpp, combat.cpp, commands.cpp, effect.cpp, html.cpp,
items.cpp, movement.cpp, network.cpp, network.h, npcs.cpp,
skills.cpp, sound.cpp, speech.cpp, targeting.cpp, uox3.cpp,
vendor.cpp, xgm.cpp:
Updated network code to preserve iterators when a socket loop is
used
2001-10-28 16:09 bpass
* SEFunctions.cpp, boats.cpp, cmdtable.cpp, commands.cpp,
msgboard.cpp, network.cpp, npcs.cpp, skills.cpp, trigger.cpp,
uox3.cpp:
Console output cleanups.
2001-10-28 13:51 bpass
* uox3.cpp:
Still trying to fix the grabItem/worldsave crash,
2001-10-28 13:03 bpass
* uox3.cpp:
Huge crash fix for grabItem
2001-10-28 12:03 bpass
* cItem.cpp, cServerDefinitions.cpp, network.cpp, regions.cpp,
uox3.cpp, worldmain.cpp:
Small fix or two
2001-10-25 22:15 seank
* ChangeLog, townregion.cpp, uox3.dox:
Added uox3.dox and other minor sync tweaks
2001-10-25 21:40 bpass
* cBaseobject.cpp, cChar.cpp, cItem.cpp, cItem.h, cServerData.cpp,
cServerDefinitions.cpp, cSpawnRegion.cpp, calcfuncs.cpp,
cmdtable.cpp, combat.cpp, commands.cpp, fileio.cpp, html.cpp,
items.cpp, magic.cpp, network.cpp, network.h, npcs.cpp, power.h,
regions.cpp, speech.cpp, uox3.cpp, worldmain.cpp:
Lots of MAJOR crash fixes. From the test server. A few extra
console output cleanups.
2001-10-25 13:26 bpass
* Dictionary.cpp, Dictionary.h, cClick.cpp, cConsole.cpp,
combat.cpp, speech.cpp:
Misc
2001-10-24 18:10 bpass
* uox3.h:
Build 0.95.06
2001-10-24 17:28 bpass
* cAccount.cpp, cGuild.cpp, commands.cpp, fileio.cpp, magic.cpp,
mapstuff.cpp, network.cpp, regions.cpp, skills.cpp, speech.cpp,
uox3.cpp, uox3.h, worldmain.cpp:
Lots of crash fixes, a few bug fixes, General console output clean
up (it's pretty now!)
2001-10-24 13:49 bpass
* uox3.cpp:
Testing something
2001-10-23 17:24 bpass
* cSocket.cpp, cSocket.h, packets.h, uox3.cpp:
More fixes! yay!
2001-10-23 16:09 bpass
* cChar.cpp, cItem.cpp, cScript.cpp, cmdtable.cpp, npcs.cpp,
trigger.cpp, trigger.h, uox3.cpp:
More Crash fixes (a few biggies) and a fix for horse mounts
2001-10-23 09:19 bpass
* cScript.cpp, npcs.cpp, targeting.cpp, trigger.cpp:
Crash fix for stupid error.
2001-10-22 20:31 bpass
* cScript.cpp:
Little fix to onSpeech: make text lower case so comparisons can be
made.
2001-10-17 13:55 bpass
* cItem.cpp, cmdtable.cpp:
A few fixes.... Is abaddon dead?
2001-10-08 17:41 darkangelab
* skills.cpp, worldmain.cpp:
Made sure that resources.bin is saved/loaded each world save
Updated TreeTarget code so that it should always generate logs when
targeted (and logs exist)
2001-10-07 16:38 darkangelab
* cAccount.cpp:
Fixed an account reload bug that reset all characters, reloading
accounts now preserves existing characters in the list
2001-10-02 21:17 darkangelab
* cSocket.cpp:
If the build is a debug build (not release), then it turns socket
logging on by default (off in release)
2001-10-02 01:51 darkangelab
* cChar.cpp, cChar.h, combat.cpp, pcmanage.cpp, skills.cpp,
sound.cpp, uox3.cpp, uoxstruct.h:
Slight tidy up in PC creation
Added some more useful functions to CChar to clean up some code
Redid creat_st to be more OO, with constructor and access
mechanisms
Added in known animals based on UOTD information
Fixed setcharflag so that it only makes animals highlight blue in
an animals guarded region
2001-09-27 22:04 darkangelab
* SEFunctions.cpp, SEFunctions.h, cScript.cpp:
Added a GetWorldNumber function for use in scripts
2001-09-27 21:27 darkangelab
* boats.cpp, cChar.cpp, cClick.cpp, cRaces.cpp, cmdtable.cpp,
commands.cpp, funcdecl.h, packets.cpp, pcmanage.cpp,
townregion.cpp, typedefs.h, uox3.cpp, uox3.h, xgm.cpp:
Fixed some warnings and did some cleanups
Validated map transference based on client type
Added in recognition of third dawn client
Updated some typedef's to properly reflect their correct sizes
2001-09-27 19:13 darkangelab
* gumps.cpp:
Extended entry fields for gumps by 2 that require numbers, so that
hex values can be validly entered
2001-09-27 19:11 darkangelab
* cItem.cpp, cItem.h, cSpawnRegion.cpp, calcfuncs.cpp, classes.h,
effect.cpp, gumps.cpp, house.cpp, items.cpp, npcs.cpp, skills.cpp,
targeting.cpp, uox3.cpp:
Updated item spawn code so that it is properly put into the right
world
Updated carpentry checks so that all planks and logs will fire the
menu
Updated the makemenu handling so that if a bad item is created,
then it turns off the skills being used
2001-09-27 00:45 darkangelab
* funcdecl.h, items.cpp, npcs.cpp, uox3.cpp:
Miscellaneous code cleanup / warning removal / dead function
removal
2001-09-27 00:33 darkangelab
* SEFunctions.cpp, cScript.cpp, cSpawnRegion.cpp, classes.h,
globals.cpp, items.cpp, magic.cpp, necro.cpp, npcs.cpp,
targeting.cpp, uox3.cpp, uox3.h, uoxstruct.h:
Cleaned up code
Added code to properly spawn NPCs in the correct worlds
Added world transfer support to teleport.scp
2001-09-26 19:13 darkangelab
* ai.cpp, archive.cpp, boats.cpp, cBaseObject.h, cBaseobject.cpp,
cChar.cpp, cChar.h, cClick.cpp, cGuild.cpp, cItem.cpp, cRaces.cpp,
cScript.cpp, cServerData.cpp, cServerDefinitions.cpp, cSocket.cpp,
cSpawnRegion.cpp, cSpawnRegion.h, calcfuncs.cpp, classes.h,
cmdtable.cpp, combat.cpp, dist.cpp, door.cpp, enums.h, fileio.cpp,
fileio.h, funcdecl.h, gumps.cpp, house.cpp, items.cpp,
SEFunctions.cpp, jail.cpp, lineofsight.cpp, magic.cpp,
mapstuff.cpp, mapstuff.h, movement.cpp, movement.h, msgboard.cpp,
network.cpp, npcs.cpp, packets.cpp, packets.h, pcmanage.cpp,
queue.cpp, regions.cpp, regions.h, skills.cpp, sound.cpp,
speech.cpp, targeting.cpp, townregion.cpp, townregion.h,
trigger.cpp, typedefs.h, uox3.cpp, uoxstruct.h, vendor.cpp,
xgm.cpp:
Cleaned up a lot of code
Fixed a calcRegionFromXY bug
Fixed a bug where CACHE_MULS of 1 would never actually cache
Added UOTD map support
Added item type 89 (map change gate), with MoreXYZ being target
location, and MORE being the world number
NOTE: Currently, NO items or NPCs will spawn in any world apart
from 0. Thus, once you're there, you can't get back short of
modifying the world file. This WILL be fixed within the day
2001-09-25 21:05 darkangelab
* cChar.cpp, mapstuff.cpp, mapstuff.h, msgboard.cpp, network.cpp,
regions.h:
Code cleanups / tidy ups
Slight reorganization in lieu of preparation of Ilshenar support
Added multi area caching, speeding up routines which rely on the
size of the multi area
2001-09-25 19:34 darkangelab
* SEFunctions.cpp, cBaseObject.h, cBaseobject.cpp, cChar.cpp,
cGuild.cpp, cGuild.h, cItem.cpp, cMagic.h, cMultiObj.cpp,
cMultiObj.h, cRaces.cpp, cServerData.cpp, cServerData.h,
cSocket.cpp, cSocket.h, cWeather.cpp, charhandle.cpp, cmdtable.cpp,
combat.cpp, combat.h, dist.cpp, door.cpp, effect.cpp, fileio.cpp,
funcdecl.h, globals.cpp, gumps.cpp, handlers.h, hash.cpp,
house.cpp, html.cpp, itemhandler.cpp, magic.cpp, movement.cpp,
movement.h, network.cpp, skills.cpp, skills.h, ssection.cpp,
ssection.h, townregion.cpp, townregion.h, typedefs.h, uox3.cpp,
uoxstruct.h, worldmain.cpp, worldmain.h:
Replaced the vast majority of short with either SI16 or UI16, make
it much more CPU independent
Fixed a bug where deleting a multi (via deeding or 'showhs) would
cause a crash if anyone came near it or the world was saved
Cleaned up a number of warnings
2001-09-25 18:09 darkangelab
* cAccount.cpp, cServerDefinitions.cpp, cmdtable.cpp, commands.cpp,
globals.cpp, gumps.cpp, network.cpp, uox3.cpp, uox3.h,
worldmain.cpp, worldmain.h:
Removed some superfluous global objects
Removed some dead / unused code
Cleaned up a fair number of warnings
Added code so that players timed out during a world save won't get
kicked instantly
2001-09-24 23:29 darkangelab
* SEFunctions.cpp, books.cpp, books.h, cAccount.cpp, cItem.cpp,
effect.cpp, globals.cpp, skills.cpp, uox3.cpp, uox3.h, uoxstruct.h,
worldmain.cpp:
Fixed a MoreB and More corruption bug when setting just a part of
it
Cleaned up some signed/unsigned warnings
Writes out accounts.adm on save now, instead of accounts2.adm
Fixed integer instead of float issues
Removed a global that could be better served as a static local
skillNumber in a struct was reduced from UI16 to UI08
2001-09-24 22:49 darkangelab
* cAccount.cpp, cAccount.h, cGuild.cpp:
Fixed an auto account creation bug that was causing new characters
to be put in the wrong account
Updated the account reading code to ensure no duplicate numbers on
reading old / mixture of old and new
NOTE: If you want your current account 0 to stay that way, then you
MUST use SECTION ACCOUNT 0 instead of just SECTION ACCOUNT
2001-09-24 18:26 darkangelab
* SEFunctions.cpp, cServerData.h, cSocket.cpp, cSocket.h,
network.cpp, newbie.cpp:
Cleaned up some warnings
Fixed some variable size issues
Added all UOTD animations (bow, salute, and so on)
2001-09-24 16:06 darkangelab
* PageVector.h, SEFunctions.cpp, archive.cpp, boats.cpp,
cBaseobject.cpp, cClick.cpp, cGuild.cpp, cItem.cpp, cItem.h,
cMultiObj.cpp, cServerData.cpp, cServerData.h,
cServerDefinitions.cpp, cSpawnRegion.cpp, cSpawnRegion.h,
cmdtable.cpp, combat.cpp, commands.cpp, funcdecl.h, house.cpp,
itemhandler.cpp, items.cpp, jail.cpp, network.cpp, queue.cpp,
regions.cpp, ssection.cpp, townregion.cpp, trigger.cpp, uox3.cpp,
uox3.h, uoxlinux.h, wholist.cpp, worldmain.cpp, xgm.cpp:
Cleaned up a lot of code
Reduced some signed/unsigned issues
Forced signed/unsigned issues and a couple of other warnings to
level 3
Fixed up the archiving routines so that it properly archives world
files correctly
2001-09-21 01:47 darkangelab
* network.cpp, network.h, typedefs.h, uoxstruct.h:
Removed anonymous unions of structs, as the flexibility provided
was not being used
Increased compiler compatability
2001-09-20 20:24 darkangelab
* cChar.cpp, cItem.cpp, cItem.h, cRaces.cpp, cRaces.h,
cServerData.h, typedefs.h:
Increased source portability, removing some of the limitations in
place preventing gcc 2.95.3 from compiling
2001-09-19 18:38 darkangelab
* cChar.cpp, cmdtable.cpp, cmdtable.h, magic.cpp, packets.cpp,
typedefs.h, uoxstruct.h:
Removed the useless command 'house
Added 2 more consts, INVALIDID and INVALIDCOLOUR
Used INVALIDID and INVALIDCOLOUR where appropriate
'poly and 'add now accept a single parameter
2001-09-18 22:30 darkangelab
* SEFunctions.cpp, SEFunctions.h, cScript.cpp, uox3.h:
Updated version to 0.95.04 Build 2
Added GetBaseSkill function to the JS engine
2001-09-17 23:03 darkangelab
* calcfuncs.cpp, cmdtable.cpp, commands.cpp, fileio.cpp,
funcdecl.h, globals.cpp, hash.cpp, items.cpp, trigger.cpp,
uox3.cpp, uox3.h:
Removed the need for script1 and script2 on a global scope
calcLastContainerFromSer is only ever called from items.scp, so
it's only predeclared in that scope
Moved and updated readscript( FILE * ) and read2( FILE * ) to
trigger.cpp
Fixed a crash bug due to hash table stuff
Removed the need for cline
2001-09-17 21:53 toinzane
* SEFunctions.cpp, ai.cpp, boats.cpp, books.cpp, cAccount.cpp,
cBaseobject.cpp, cChar.cpp, cChar.h, cClick.cpp, cGuild.cpp,
cItem.cpp, cItem.h, cScript.cpp, cScript.h, cServerData.cpp,
cSocket.cpp, calcfuncs.cpp, charhandle.cpp, cmdtable.cpp,
combat.cpp, door.cpp, effect.cpp, findfuncs.cpp, funcdecl.h,
globals.cpp, gumps.cpp, hash.cpp, hash.h, house.cpp, html.cpp,
itemhandler.cpp, items.cpp, lineofsight.cpp, magic.cpp,
movement.cpp, msgboard.cpp, necro.cpp, network.cpp, npcs.cpp,
packets.cpp, pcmanage.cpp, quantityfuncs.cpp, queue.cpp,
regions.cpp, skills.cpp, sound.cpp, speech.cpp, targeting.cpp,
townregion.cpp, townregion.h, typedefs.h, uox3.cpp, uox3.h,
vendor.cpp, wholist.cpp, wholist.h, xgm.cpp:
Converted items and chars to UI32's to allow many more (double) the
amount of characters/items in a world.
Changed -1 Item/Char checks to INVALIDSERIAL checks.
Many ints converted to smaller containers to save wasted resources.
Misc minor bugfixes/cleanups.
2001-09-17 20:07 darkangelab
* cRaces.cpp, cRaces.h, cWeather.cpp, funcdecl.h, necro.cpp,
skills.cpp, uox3.cpp:
Minor clean ups and tidy ups
Converted some funcs to take a single ID rather than the split IDs
Converted weather damage for races to be signed (to support
healing)
2001-09-17 19:43 bpass
* network.h:
Fixes
2001-09-17 19:33 bpass
* network.cpp, network.h, uox3.cpp:
Fixes
2001-09-17 19:27 bpass
* cChar.cpp:
FUCK
2001-09-17 18:43 rmcadams
* cmdtable.cpp:
fix on xgate addition
2001-09-17 18:37 bpass
* cChar.cpp:
Fixed Login Reconnect and offline death bugs
2001-09-17 18:35 rmcadams
* cmdtable.cpp, cmdtable.h:
Xgate addition
2001-09-16 21:33 darkangelab
* cClick.cpp:
Double clicking on a gate will no longer send you to 0 0 0
2001-09-16 21:17 darkangelab
* magic.cpp:
Updated gate code so that you don't land right on the output gate
2001-09-16 21:03 darkangelab
* PageVector.h, SEFunctions.cpp, cChar.cpp, cConsole.cpp,
cGuild.cpp, cItem.cpp, cRaces.cpp, cScript.cpp, cSocket.cpp,
charhandle.cpp, classes.h, cmdtable.cpp, debug.cpp, effect.cpp,
globals.cpp, im.cpp, items.cpp, jail.cpp, magic.cpp, queue.cpp,
skills.cpp, speech.cpp, targeting.cpp, townregion.cpp, uox3.cpp,
uox3.h, uoxlinux.h:
Number of fixes / cleanups as available from Punt
Fixed a bug with makeNum under windows not supporting a large range
of data types, possibly resulting in things like empty spellbooks
Removed some dead and superfluous code
Removed the existing gate code, and replaced it with other code,
reducing memory consumption further.
2001-09-16 17:55 toinzane
* gumps.cpp:
Added error-checking to entrygump() to prevent crashes on bad
dictionary entries.
2001-09-16 17:41 toinzane
* targeting.cpp:
Removed a superfluous if (which would always be true) that caused
warnings under some compilers.
2001-09-16 17:36 darkangelab
* funcdecl.h, magic.cpp, mapstuff.cpp, uox3.h:
Slight clean up / tidy ups
Broke out the gate creation code into it's own function, SpawnGate
Sync'd an extern and declare so that they're declared the same
2001-09-14 18:48 darkangelab
* combat.cpp, gumps.cpp, uox3.cpp:
Removed some dead combat code
dumpgump.txt only generated in debug mode
Updated auto stack handling to avoid a possible crash
2001-09-13 21:53 darkangelab
* uox3.cpp:
Caused autoStack and dropItemOnChar to return true if an item was
deleted due to stacking
Adjusted code so that if an item was deleted, it wasn't used in sfx
functions or other functions related to dropping
2001-09-13 21:07 darkangelab
* magic.cpp:
Fixed a bug where if you received a message like "You are already
casting a spell" it would alter the spell you were already casting
2001-09-13 21:01 darkangelab
* uox3.cpp:
Fixed a Win32 command bug where hex values weren't being read
properly
Updated makenumber() to call makeNum()
makeNum() will now check for x or X instead of just x
2001-09-13 18:54 darkangelab
* uox3.h:
0.95.04.01
2001-09-13 18:24 seank
* ChangeLog:
updated changelog
2001-09-13 07:20 toinzane
* combat.cpp:
Made use of an #ifdef for debugging combat spam
2001-09-13 03:36 darkangelab
* PageVector.h, boats.cpp, cAccount.cpp, cClick.cpp, cConsole.cpp,
cConsole.h, cGuild.cpp, cMagic.h, cRaces.cpp, cSocket.cpp,
cSocket.h, cSpawnRegion.cpp, classes.h, cmdtable.cpp, cmdtable.h,
combat.cpp, commands.cpp, effect.cpp, funcdecl.h, gumps.cpp,
house.cpp, items.cpp, magic.cpp, mapstuff.cpp, msgboard.cpp,
necro.cpp, network.cpp, pcmanage.cpp, power.h, skills.cpp,
speech.cpp, targeting.cpp, townregion.cpp, uox3.cpp, uoxstruct.h,
vendor.cpp, wholist.cpp, worldmain.cpp:
Started to improve STLPort compatability with VC6
Fixed some signed/unsigned errors
Forced some functions to take const char * instead of char *
General clean up / tidy ups
Greatly reduced number of cast's required by the source
2001-09-12 22:19 darkangelab
* cItem.cpp, cItem.h, cmdtable.cpp, commands.cpp, effect.cpp,
funcdecl.h, gump.h, gumps.cpp, magic.cpp, magic.h, targeting.cpp,
uox3.cpp, uoxstruct.h:
create.scp item creation now tracks which entry it was made from
CItem now has some more const'd functions (weather related)
Removed the unnecessary function hexnumber()
'Skin now takes 1 parameter, not 2 (combined ID)
'Dye now takes 1 parameter, not 2 (combined ID)
'sfx now takes 1 or 2 parameters (combined ID, or separate)
'gumpopen now takes 1 or 2 parameters (combined ID, or separate)
'delid now takes 1 or 2 parameters (combined ID, or separate)
cGump::Open() takes 3 params, not 4 (combined IDs)
DiamondSpell(), FloodSpell(), SquareSpell() and FieldSpell()
updated to take a combined ID, not separate
Smelting heavily rewritten, so that it returns half the resources
required to make it
2001-09-10 20:50 toinzane
* boats.cpp, cChar.cpp, cSpawnRegion.cpp:
Documented cSpawnRegion.cpp
Fixed an error where an Unsigned Char was possibly set with
negative values in boats.cpp
Fixed petguarding set to -1 in CChar constructor.
2001-09-10 20:48 seank
* ChangeLog, queue.cpp:
sort needs algorithm
2001-09-10 20:35 darkangelab
* PageVector.h, cmdtable.cpp, cmdtable.h, commands.cpp,
network.cpp, network.h, queue.cpp, uox3.cpp:
Changed the gmpage_st to a HelpRequest class
Updated and latered HelpRequest to lay groundwork for reorganized
GM queues
Cleaned up some code
Added PeakConnectionCount member to cNetworkStuff
Hid some unnecessary public functions in cNetworkStuff
Removed the 'wanim command completely
2001-09-10 20:30 darkangelab
* regions.cpp:
Fixed a crash bug that occurred when nearing the edge of a map
2001-09-10 19:53 darkangelab
* books.cpp, xgm.cpp, xgm.h:
Added placeholder for show queue request xGM packet
Updated the ping packet so that it will return the time of the
server
Simplified the Cns and GM logged in code
Cleaned up some code
2001-09-09 19:30 darkangelab
* cServerData.cpp, cServerData.h, funcdecl.h, globals.cpp,
house.cpp, uox3.cpp, uox3.h:
Removed hstr2num as it's no longer used
Converted last use of hstr2num to makeNum
Fixed the auto save bug
Simplified the uox3test.ini output, as well as reading it's input
2001-09-09 18:38 darkangelab
* cRaces.cpp:
Reorganized the layout of the code in race transformation
Fixed a bug where it would try and colourize a beard object that
didn't exist
2001-09-09 18:32 darkangelab
* cRaces.cpp:
REQUIREBEARD is off by default
2001-09-07 09:10 toinzane
* cClick.cpp, cSpawnRegion.cpp, cmdtable.cpp, cmdtable.h,
funcdecl.h, globals.cpp, pcmanage.cpp, skills.cpp, skills.h,
targeting.cpp, typedefs.h, uox3.h, weight.cpp:
Minor cleanups / fixes.
Removed some superfluous globals and #defines
2001-09-06 18:31 darkangelab
* trigger.cpp:
Fixed envoke.scp parsing under windows
NOTE This requires that you update your scpTrig.scp file to include
explicit 0x for denoting hex values
2001-09-06 18:14 darkangelab
* cThreadQueue.h, uox3.cpp:
Fixed the console broadcast corruption bug
2001-09-06 17:49 darkangelab
* uox3.cpp:
Add GUIINFORMATION to menus.scp valid tags, which is a gump based
display of current VERSION and INFORMATION tags
VERSION tag in menus.scp now properly displays the version
2001-09-05 21:33 toinzane
* boats.cpp, cChar.cpp, cItem.cpp, cmdtable.cpp, items.cpp,
npcs.cpp, targeting.cpp, uox3.cpp:
More work on mapregion stuff
Improved how CItem and CChar destructors clean up after themselves.
Misc minor cleanups / fixes
2001-09-05 20:59 darkangelab
* cmdtable.cpp, commands.cpp, gumps.cpp, house.cpp, items.cpp,
magic.cpp, npcs.cpp, targeting.cpp, uox3.cpp:
Converted some calls to SetX and SetY to use SetLocation
Cleaned up some code
2001-09-04 18:11 darkangelab
* cServerData.cpp:
Fixed a linux path mapping bug
2001-09-03 18:29 toinzane
* cClick.cpp, cGuild.cpp, cItem.cpp, cRaces.cpp, commands.cpp,
gumps.cpp, items.cpp, magic.cpp, npcs.cpp, skills.cpp,
townregion.cpp, uox3.cpp:
makeNum() now handles octal, hex, and decimal (thanks seank).
Fixed a bug with guildstone names (and setting a name to any
object)
Misc minor cleanups/fixes
2001-09-03 18:13 darkangelab
* globals.cpp, items.cpp, npcs.cpp, uox3.cpp, uox3.h:
Removed some unnecessary globals
Removed some crash bugs caused by faulty code ('remove on items
should work correctly, amongst other things)
2001-09-03 16:55 darkangelab
* cBaseobject.cpp, skills.cpp:
Believe the rename crash bug has been fixed (doesn't crash at all
for me)
Fixed the mining bug where no ore would come up
2001-09-02 17:56 darkangelab
* cScript.cpp:
Added GetLightLevel to the function table so that it can be called
2001-09-02 15:17 darkangelab
* SEFunctions.cpp, cBaseobject.cpp, cItem.cpp, skills.cpp:
Added harkon's fixes for the SE functions GetPackOwner, FindMulti
and SpawnItem
Updated CItem::SetLocation so that it updates the multi value
(should fix the guildstone placement bug)
Slight tidy up in cbaseobject.cpp to initialize a variable to NULL
2001-08-29 18:31 darkangelab
* cScript.cpp:
harkon fixed a script function lookup problem
2001-08-28 19:31 toinzane
* books.cpp, cAccount.cpp, cBaseobject.cpp, cChar.cpp, cGuild.cpp,
cItem.cpp, cMultiObj.cpp, cRaces.cpp, cServerData.cpp,
cServerDefinitions.cpp, cSpawnRegion.cpp, cWeather.cpp,
commands.cpp, funcdecl.h, gumps.cpp, house.cpp, html.cpp,
items.cpp, jail.cpp, magic.cpp, msgboard.cpp, necro.cpp,
network.cpp, newbie.cpp, npcs.cpp, skills.cpp, targeting.cpp,
townregion.cpp, trigger.cpp, uox3.cpp:
Changed many atoi() calls to makeNum() calls to allow support of
strings
2001-08-28 17:05 toinzane
* books.cpp, books.h, cClick.cpp, cServerData.cpp, cServerData.h,
cSpawnRegion.cpp, itemhandler.cpp, network.cpp, uox3.cpp:
Fixed some issues with books.
Possible crash fixes with SpawnRegions
2001-08-23 22:46 seank
* ChangeLog, uox3.h:
minor linux fix for ioctl
2001-08-23 22:07 darkangelab
* SEFunctions.cpp, cAccount.cpp, cAccount.h, cBaseObject.h,
cBaseobject.cpp, cChar.cpp, cChar.h, cItem.cpp, cItem.h,
cMultiObj.cpp, cServerData.cpp, cServerData.h,
cServerDefinitions.cpp, cSocket.cpp, cSocket.h, cWeather.cpp,
cmdtable.cpp, fileio.cpp, funcdecl.h, hash.cpp, items.cpp,
mapstuff.cpp, network.cpp, network.h, npcs.cpp, speech.cpp,
teffect.h, trigger.cpp, typedefs.h, uox3.cpp, uox3.h:
Overall clean up and tidy ups
Removed the need for typedef'ing UINT, INT, UCHAR, CHAR, and TCHAR,
making use of their UI32 and such equivalents
Removed some of the need for #ifdef'ing (removing about 20
references to it)
2001-08-23 22:06 seank
* Makefile.am, Makefile.in:
added cSpawnRegion.cpp to the makefile
2001-08-23 19:56 darkangelab
* packets.cpp, packets.h:
Due to Beniam's information, been able to implement an input packet
class to handle packet 0xC8
2001-08-23 18:33 darkangelab
* itemhandler.cpp, xgm.cpp:
Updated xGM who packet, so that it properly reflects those who are
logging out / offline
Item handler now throws an exception (for debugging purposes) if a
valid items[] number is used, but the object is NULL
2001-08-22 21:15 darkangelab
* cItem.cpp, charhandle.cpp, handlers.h, itemhandler.cpp,
items.cpp, uox3.cpp:
CItem destructor does meaningful work now (and simplifies
DeleItem())
Item and Char handlers now clean themselves up programmatically,
rather than automatically
Bit of code cleanliness
2001-08-22 20:21 darkangelab
* cChar.cpp, cItem.cpp, cMultiObj.cpp, charhandle.cpp,
cmdtable.cpp, html.cpp, itemhandler.cpp, items.cpp, npcs.cpp,
sound.cpp, targeting.cpp, uox3.cpp:
Clean ups / tidy ups to various sections of code
Fixed the summon daemon death crash that was occurring
Changed deathstuff to not use invalid pointers after character
deletion
2001-08-22 19:15 toinzane
* UOX3_Official.dsp:
Added cSpawnRegion.cpp and cSpawnRegion.h to the project file.
2001-08-22 19:12 toinzane
* cSpawnRegion.cpp, cSpawnRegion.h:
Implemented cSpawnRegion
2001-08-22 19:04 toinzane
* SEFunctions.cpp, UOX3_Official.dsp, cChar.cpp, classes.h,
cmdtable.cpp, commands.cpp, commands.h, funcdecl.h, globals.cpp,
items.cpp, necro.cpp, npcs.cpp, regions.cpp, targeting.cpp,
townregion.cpp, uox3.cpp, uox3.h, uoxstruct.h:
Many fixes / cleanups with spawnregions.
Broke spawnregions into their own class cSpawnRegion.
Minor fixes / cleanups.
2001-08-21 20:10 darkangelab
* npcs.cpp:
Updated DeleteChar() to reduce need to call calcCharFromSer, fixing
a potential delete bug
2001-08-21 19:38 darkangelab
* globals.cpp, items.cpp, uox3.h:
Removed an unnecessary global variable
Tidied up DeleItem() a little
2001-08-21 19:32 darkangelab
* cGuild.cpp, cGuild.h, items.cpp:
gList is now a map< GuildID, CGuild * > instead of vector< CGuild *
>
This allows for nonsequential guild numbers, and solves a guild
removal bug
Fixed a bug where characters were never actually removed from their
guild
Fixed up DeleItem so that items.Delete() is called with a proper
var (as well as ispawnsp.Remove())
2001-08-21 17:24 toinzane
* cGuild.cpp:
Fixed some bad loops in CGuild (Should fix several crash bugs with
guildstones)
2001-08-21 15:07 toinzane
* cAccount.cpp, network.cpp:
Fixed auto-account creation bug (Thanks Fixit)
2001-08-21 06:44 toinzane
* cGuild.cpp, gumps.cpp:
Guildstones are now properly removed when last member resigns.
Fixed resign code so players who aren't in a guild can't resign
(thus crashing the server).
Fixed some possible endless loops.
Resized new tweak menus a bit.
2001-08-21 02:34 darkangelab
* funcdecl.h, trigger.cpp, typedefs.h, xgm.cpp:
Removed some dead and unused code
Updated some documentation in xgm.cpp
2001-08-20 19:18 darkangelab
* cAccount.cpp, network.cpp, pcmanage.cpp, typedefs.h, uox3.cpp,
xgm.cpp, xgm.h:
Added in Access Level Change Request and Response for xGM (courtesy
of JoeMC)
Added who's offline support
ACTREC's inworld is now a SERIAL instead of a char index, allowing
for better speed and flexibility
General code clean up / tidy ups
Must be online or an NPC to sustain hunger damage or change of
hunger status
2001-08-20 14:22 toinzane
* gumps.cpp:
Documented gumps.cpp
2001-08-20 13:52 toinzane
* gumps.cpp:
Removed an un-needed debug message.
2001-08-20 13:09 toinzane
* cGuild.cpp, cItem.cpp, cItem.h, cScript.cpp, cmdtable.cpp,
commands.cpp, funcdecl.h, gump.h, gumps.cpp, items.cpp, queue.cpp,
skills.cpp, targeting.cpp, townregion.cpp, wholist.cpp:
Removed ItemHand() stuff entirely, (This will cause your worldfile
to report invalid tags, this is normal, just save and reload the
world file).
Completely re-wrote the tweak menu. Divided it into two seperate
menus (Items and Characters) Looks much nicer, has far more
functionality, and is much easier to modify now.
Misc minor cleanups
2001-08-19 21:15 darkangelab
* uox3.h:
Version 0.95.04
2001-08-19 18:56 darkangelab
* cServerData.cpp, cServerData.h, globals.cpp, network.cpp, uox3.h:
Updated so that UOX_PORT is no longer required
GetServerPort and SetServerPort modify an internal listen port
Listen port now binds to GetServerPort of cServerData
Reads server.scp before uox3.ini now, to ensure proper PORTness
2001-08-19 17:49 darkangelab
* xgm.cpp:
Fixed a client version receive crash bug
2001-08-19 17:30 darkangelab
* xgm.cpp:
Updated GMLoggedIn and CnsLoggedIn to actually properly return the
GMs / Counselors logged in rather than the total number of them
2001-08-17 17:33 toinzane
* cBaseobject.cpp, cGuild.cpp, packets.cpp:
Weblaunch bug fixed.
Fixed guild name crash bug (caused by long guild names).
Changed Guildmaster Title length to max 15 characters. (was only 3
characters)
2001-08-17 16:23 toinzane
* boats.cpp, cServerData.cpp, cServerData.h, movement.cpp,
skills.cpp, uox3.cpp:
Cleaned up checkauto() and broke it down into more functions to
improve speed / readability.
Fixed boats dissapearing bug.
Got rid of BEGGINGTEXT stuff in favor of dictionary entries.
Misc minor cleanups / fixes.
2001-08-16 22:51 toinzane
* targeting.cpp:
Fixed a minor (stupid) bug with my latest source.
2001-08-16 21:27 toinzane
* targeting.cpp, targeting.h:
Removed some unneeded code.
2001-08-16 21:18 toinzane
* cServerDefinitions.cpp, npcs.cpp, targeting.cpp, targeting.h,
uox3.cpp:
Minor cleanups in targeting.
Added support for CARVE.scp using the groundwork Abaddon put in
earlier. (note this requrires you add a new /carve/ dir in
/dfndata/ and put the carve.scp from the scripts CVS in it.)
Misc minor cleanups.
2001-08-16 18:46 darkangelab
* xgm.cpp:
Server version response actually sends the real version and not 0
2001-08-16 18:15 darkangelab
* xgm.cpp:
Fixed a crash bug when trying to get a serverstat and the object
was being destroyed
2001-08-16 14:10 toinzane
* combat.cpp, combat.h, funcdecl.h, skills.cpp, uox3.cpp:
Fixed up guards and guard spawning;
Will no longer attack the person who called guards.
Now ensures there's no other guard (who isn't busy) in the area
before spawning a new guard.
Guards will no longer dissapear while in the midst of battle.
Misc minor cleanups.
2001-08-15 18:44 toinzane
* cAccount.cpp, uox3.cpp:
Minor fix in cAccounts.cpp.
More error-checking added to checkRegion()
2001-08-15 14:03 seank
* xgm.cpp:
Updated xgm perl stuff a bit..
2001-08-15 13:08 toinzane
* cAccount.cpp, cAccount.h, cChar.cpp, funcdecl.h, movement.cpp,
pcmanage.cpp, uox3.cpp, wholist.cpp, xgm.cpp:
Fixed the 'footsteps' bug.
Fixed a bug when accountflush was set > 0
Minor cleanups in how accounts are looped through.
Minor bugfix to startChar().
Cleaned up checkRegion().
2001-08-14 22:51 darkangelab
* cSocket.cpp, xgm.cpp, xgm.h:
Fixed non XGM client login bug
Generic clean ups / tidy ups
2001-08-14 22:15 darkangelab
* network.cpp, network.h, pcmanage.cpp, uox3.cpp:
setLastOn takes a cSocket * instead of a UOXSOCKET
Cleaned up some startChar() code to work correctly
Corrected a checkregion() bug that did an invalid pack check
2001-08-14 21:39 toinzane
* cSocket.cpp, network.h, skills.cpp:
Linux compile fixes (Thanks seank / Kot )
GM's can now gain skill.
2001-08-14 21:06 darkangelab
* SEFunctions.cpp, SEFunctions.h, UOX3_Official.dsp, cScript.cpp:
Added Get/Set More XYZ
Moved jail.cpp and jail.h into subsystem folders
2001-08-14 08:55 toinzane
* cItem.cpp, combat.cpp, items.cpp, typedefs.h, uox3.cpp,
vendor.cpp:
Added MAX_STACK to determine how large stackables can be set.
Moved AutoStacking into its own function.
Broke dropItem() into two functions, dropItem() and
dropItemOnChar().
Fixed a combat bug that could cause NPC's to never swing at their
target.
Misc minor cleanups.
2001-08-13 19:01 darkangelab
* cItem.cpp:
Updated SetCont so that items won't disappear oddly (and they will
still be saved)
2001-08-13 18:53 toinzane
* cChar.cpp, items.cpp, targeting.cpp, uox3.cpp:
Fixed some issues with item Layers.
Depreciated usage of ITEMHAND in favor of LAYER.
Cleaned up wearItem() a bit.
Misc minor cleanups.
2001-08-13 17:48 darkangelab
* Dictionary.cpp, cSocket.cpp, effect.cpp, enums.h, magic.cpp,
network.h, speech.cpp, speech.h, uox3.cpp:
Cleaned up some dead code / unreachable code / useless code
Added distinct language support, collapsing all english flavours
into a single file, all german into a single file, and so on
Now require only roughly half a dozen dictionary files
------------------
Copy dictionary.zro from the scripts/release archive to scripts/ in
the installed directory. Duplicate it and rename the duplicates to
have extensions of UNK and ENG
2001-08-13 15:26 toinzane
* dist.cpp, uox3.cpp:
Minor bugfix in checkItemRange()
Cleaned up grabItem().
2001-08-12 19:40 toinzane
* boats.cpp, classes.h, npcs.cpp, pcmanage.cpp:
Added some NULL checks for added crash protection.
Gave Zippy credit for boats.cpp functions.
Documented AddNpcCreation().
2001-08-11 09:19 toinzane
* ai.cpp, classes.h, combat.cpp, funcdecl.h, lineofsight.cpp,
magic.cpp, movement.cpp, movement.h, skills.cpp, targeting.cpp:
NPC's no longer loose their targets as easily.
Change line_of_sight to LineOfSight() and fixed it up a bit.
Misc minor cleanups.
2001-08-10 14:48 toinzane
* cChar.cpp, combat.cpp, effect.cpp, movement.cpp, movement.h:
Fixed a bug causing bandages not to be used up and spit out an
invalid item refrence.
Added a check so a player cannot use any fighting skill while
running or walking, if they are walking, they will begin fighting
as soon as they stop, if they are running, they must wait a short
amount of time (scriptable based on stamina_regen).
Attackers now turn to face their opponent in combat if they are not
already.
Misc minor cleanups.
2001-08-10 09:36 toinzane
* combat.cpp, items.cpp, magic.cpp, movement.cpp, necro.cpp,
npcs.cpp, pcmanage.cpp, sound.cpp, targeting.cpp, uox3.cpp:
Added a check so archers cannot fire arrows while running.
Added a distance check so archers must be 2 or more tiles from
their targets.
Fixed a crash bug when using a 'make command on an offline
character
Several minor bugfixes.
Moved around some code in combat.cpp to speed up processing a bit.
Moved a few funcs out of uox3.cpp to files better suited for them.
Misc minor cleanups.
2001-08-09 20:49 darkangelab
* network.cpp, xgm.cpp:
Fixed some cPIXGMLogin bugs
Automatically flushes the xGM buffers now
2001-08-09 08:06 toinzane
* SEFunctions.cpp, cChar.cpp, cChar.h, cClick.cpp, cScript.cpp,
effect.cpp, funcdecl.h, gumps.cpp, house.cpp, mapstuff.cpp,
mapstuff.h, pcmanage.cpp, sound.cpp, targeting.cpp:
More object conversions done.
Fixed a bug in checktempeffects() that would cause any tempeffect
without a character as the dest to fail.
2001-08-08 20:16 darkangelab
* cClick.cpp, items.cpp, speech.cpp:
Proper use of GetOwner() and GetOwnerObj() (fixing few crashes)
Tidied up doubleClick a little more
2001-08-08 15:28 toinzane
* cClick.cpp:
Fixed a bug with doubleclick not opening players paperdolls
2001-08-08 14:23 toinzane
* ai.cpp, books.cpp, books.h, cClick.cpp, cGuild.cpp, cmdtable.cpp,
commands.cpp, commands.h, funcdecl.h, gump.h, gumps.cpp, html.cpp,
jail.cpp, necro.cpp, network.cpp, speech.cpp, targeting.cpp,
uox3.cpp, vendor.cpp:
Many more object conversions.
2001-08-08 09:26 toinzane
* SEFunctions.cpp, cClick.cpp, cItem.cpp, cMagic.h, calcfuncs.cpp,
combat.cpp, commands.cpp, commands.h, effect.cpp, findfuncs.cpp,
funcdecl.h, gumps.cpp, house.cpp, items.cpp, magic.cpp,
movement.cpp, necro.cpp, network.cpp, skills.cpp, targeting.cpp,
uox3.cpp, vendor.cpp:
Many more object conversions, further depreciated &items[] and
calcItemFromSer() usage.
2001-08-08 08:15 toinzane
* cItem.cpp, classes.h, npcs.cpp, speech.cpp, targeting.cpp:
Cleaned up pet command code.
Added new func stopPetGuarding() to simplify some code.
Fixed a bug causing a crash on death (was trying to set a long to a
CChar * )
Misc minor cleanups.
2001-08-07 23:23 darkangelab
* cItem.cpp, funcdecl.h, items.cpp, magic.cpp, quantityfuncs.cpp,
skills.cpp, targeting.cpp, uox3.cpp:
Cleaned up some more code
Removed some redundant code
Reduced the need of &items[] style code
2001-08-07 22:33 darkangelab
* cClick.cpp, dist.cpp, targeting.cpp, uox3.cpp:
Used GetOwnerObj() where possible
Cleaned up doubleClick() a little more
General code tidy ups
2001-08-07 22:16 darkangelab
* SEFunctions.cpp, speech.cpp, targeting.cpp, targeting.h:
BuyShop updated to take a CChar *
Generic code cleanups
2001-08-07 22:01 darkangelab
* cMagic.h, magic.cpp, skills.cpp:
CheckStamina(), CheckMana() and CheckHealth() now use CChar *
instead of CHARACTER
DirectDamage was removed
CheckParry for CHARACTER was removed
Log() for magic was updated to use CChar * instead of CHARACTER
Other minor code clean up / tidy ups
2001-08-07 21:42 darkangelab
* cMagic.h, magic.cpp:
Removed PFireballTarget as it was never used
Removed an unnecessary version of CheckResist
2001-08-07 21:35 darkangelab
* targeting.cpp:
Converted MakeStatusTarget() to make use of CChar * instead of
CHARACTER
2001-08-07 20:22 darkangelab
* cChar.cpp, cMagic.h, cWeather.cpp, cWeather.hpp, combat.cpp,
commands.cpp, commands.h, effect.cpp, funcdecl.h, magic.cpp,
npcs.cpp, pcmanage.cpp, targeting.cpp, townregion.cpp,
townregion.h, uox3.cpp:
Removed some need for calcCharFromSer
Converted some funcs to use CChar * instead of CHARACTER
Cleaned up some code to make it more readable
Reduced dependence on &chars[] style code
2001-08-07 19:27 darkangelab
* SEFunctions.cpp, cmdtable.cpp, combat.cpp, commands.cpp,
effect.cpp, speech.cpp, targeting.cpp, townregion.cpp,
townregion.h, trade.cpp, uox3.cpp, vendor.cpp:
Fixed a duping bug
Removed more uses of calcCharFromSer
Optimized some code
2001-08-07 18:38 toinzane
* cClick.cpp, cmdtable.cpp, commands.cpp, gumps.cpp, magic.cpp,
movement.cpp, msgboard.cpp, network.cpp, skills.cpp, targeting.cpp,
uox3.cpp:
Changed many sysmessage() messages to dict entries (make sure you
update your dictionary.zro)
2001-08-07 18:12 darkangelab
* gumps.cpp, packets.cpp, skills.cpp, uox3.cpp:
Updated CPTrackingArrow to reset properly on one constructor
Updated tracking code so that the menus work correctly again
Minor clean ups
2001-08-07 17:40 toinzane
* cGuild.cpp, cmdtable.cpp, commands.cpp, house.cpp, html.cpp,
im.cpp, msgboard.cpp, network.cpp, speech.cpp, targeting.cpp,
uox3.cpp, wholist.cpp:
Added crash protection to unsafe CurrcharObj() calls.
2001-08-07 17:17 darkangelab
* effect.cpp, uox3.cpp:
Allmight's night sight fixes
2001-08-07 17:13 darkangelab
* SEFunctions.cpp, cRaces.cpp, cRaces.h, cmdtable.cpp, effect.cpp,
funcdecl.h, skills.cpp, uox3.cpp:
Converted cRaces::gate to use a CChar * instead of a CHARACTER, and
bool instead of an int
Miscellaneous other cleanups
Removed the CHARACTER based version of statwindow()
2001-08-07 15:47 toinzane
* uox3.cpp:
Linux compile fixes.
2001-08-07 15:19 toinzane
* targeting.h:
Fixed yet another linux compile issue.
2001-08-07 13:47 toinzane
* combat.cpp:
Fixed a Linux compile problem.
2001-08-07 12:50 toinzane
* SEFunctions.cpp, ai.cpp, cGuild.cpp, cMagic.h, cWeather.cpp,
cmdtable.cpp, commands.cpp, gumps.cpp, house.cpp, im.cpp,
items.cpp, magic.cpp, msgboard.cpp, necro.cpp, network.cpp,
skills.cpp, townregion.cpp, uox3.cpp, wholist.cpp:
Depreciated Currchar() usage almost entirely.
Misc minor cleanups.
2001-08-07 11:23 toinzane
* SEFunctions.cpp, ai.cpp, cChar.cpp, cClick.cpp, cMagic.h,
cWeather.cpp, calcfuncs.cpp, classes.h, combat.cpp, door.cpp,
funcdecl.h, gumps.cpp, html.cpp, magic.cpp, movement.cpp,
network.cpp, newbie.cpp, pcmanage.cpp, skills.cpp, speech.cpp,
targeting.cpp, uox3.cpp, vendor.cpp, wholist.cpp:
Many object conversions done.
Misc minor cleanups.
2001-08-07 10:31 toinzane
* classes.h, itemhandler.cpp, items.cpp, uox3.cpp:
Minor cleanups in items.cpp
Removed a superfluous function.
Fixed an issue with pet guarding.
2001-08-07 09:43 toinzane
* SEFunctions.cpp, cClick.cpp, classes.h, combat.cpp, magic.cpp,
npcs.cpp:
Changed AddRandomNPC() to CreateRandomNpc().
Removed some superfluous code.
Minor cleanups.
2001-08-06 23:43 toinzane
* cClick.cpp, classes.h, combat.cpp, funcdecl.h, magic.cpp,
npcs.cpp, targeting.cpp, targeting.h, uox3.cpp:
Broke NpcCreation() in npcs.cpp into two functions (
CreateScriptNpc() and ApplyNpcSection ).
Fixed up AddRandomNpc() to work with new NpcCreation() format.
Converted npcs.cpp to object-based.
Misc minor cleanups.
2001-08-06 21:23 toinzane
* mapstuff.cpp, npcs.cpp:
Fixed up AddRandomNPC().
Changed BuldFilePath() in mapstuff.cpp to use MAX_PATH.
2001-08-06 20:31 darkangelab
* classes.h, items.cpp:
CreateRandomItem is cleaned up / more efficient
CreateRandomScriptItem now returns a CItem * instead of an ITEM
CreateRandomScriptItem should no longer crash
Both CreateRandomItem and CreateRandomScriptItem no longer have
hard coded limits
2001-08-06 18:40 darkangelab
* cScript.cpp, magic.cpp, uox3.cpp:
Tidy up / clean up of some script code
The JS context scripts execute within are now 8k in size, rather
than 4k
2001-08-06 17:39 darkangelab
* SEFunctions.cpp, boats.cpp, cClick.cpp, cGuild.cpp, cGuild.h,
funcdecl.h, gumps.cpp, skills.cpp, speech.cpp, targeting.cpp,
townregion.cpp, townregion.h, uox3.cpp:
Added dictionary friendly versions of cTownRegion::TellMembers,
CGuild::TellMembers, npcEmote and npcEmoteAll
Converted more functions to use dictionary funcs instead
Tidied up speech in boats.cpp, making it more readable (but
potentially sacrificing a bit of speed)
General code clean up / tidy up
2001-08-06 16:00 toinzane
* classes.h, cmdtable.cpp, combat.cpp, magic.cpp, msgboard.cpp,
network.cpp, npcs.cpp, skills.cpp, speech.cpp, targeting.cpp,
targeting.h:
Cleaned up some dictionary calls.
Added pet FRIEND command, can now add people to pets friend list
(currently capped at 20, may adjust later).
Changed checkPetFriend() to a bool.
Adjusted petGuardAttack() so pets will not attack friends.
Misc minor cleanups.
2001-08-06 13:14 toinzane
* SEFunctions.cpp, cClick.cpp, classes.h, cmdtable.cpp, combat.cpp,
combat.h, commands.cpp, enums.h, funcdecl.h, items.cpp, magic.cpp,
movement.cpp, msgboard.cpp, msgboard.h, necro.cpp, npcs.cpp,
regions.cpp, skills.cpp, speech.cpp, uox3.cpp, uox3.h:
Converted msgboard.cpp functions to make use of cSocket and CChar.
Converted some npcs.cpp functions to make use of CChar and CItem.
Slowed down damage rate on Weapons/Armor in combat.
Misc minor cleanups.
2001-08-06 08:16 toinzane
* SEFunctions.cpp, ai.cpp, boats.cpp, cClick.cpp, combat.cpp,
combat.h, door.cpp, effect.cpp, funcdecl.h, magic.cpp,
msgboard.cpp, necro.cpp, skills.cpp, speech.cpp, targeting.cpp,
uox3.cpp, vendor.cpp:
More cleanups / fixes in combat.cpp
Added Dictionary-Safe overloads of npcTalk() and npcTalkAll().
2001-08-05 21:01 darkangelab
* combat.cpp:
Slight clean up / tidy up
Adjusted 2 sysmessage calls
2001-08-05 19:49 toinzane
* cServerData.cpp, combat.cpp, combat.h, magic.cpp, uox3.cpp,
weight.cpp:
MAJOR Overhaul to Combat (When the system is completed I'll write
up a Doc on it).
Minor fixes.
Fixed a Recall / Weight Check bug.
2001-08-05 19:34 darkangelab
* uox3.h:
Updated build number
2001-08-05 19:30 darkangelab
* cChar.cpp, uox3.cpp:
Fixed regen problems with NPCs/PCs
Meditation overhaul by Spud allowing for better behaviour / greater
complexity
2001-08-04 19:21 darkangelab
* SEFunctions.cpp, cClick.cpp, cMagic.h, cWeather.cpp,
cmdtable.cpp, combat.cpp, funcdecl.h, jail.cpp, magic.cpp,
movement.cpp, npcs.cpp, skills.cpp, sound.cpp, speech.cpp,
targeting.cpp, uox3.cpp, wholist.cpp:
Generic code clean ups / tidy ups
Converted more functions to use CChar * and CItem *
Reduced calls to calcCharFromSer
Used calcCharObjFromSer more in targeting.cpp
2001-08-04 12:49 toinzane
* SEFunctions.cpp, cClick.cpp, combat.cpp, effect.cpp, gumps.cpp,
skills.cpp, skills.h, uox3.cpp:
Fixed a small issue with NPCs in combat.
Converted skills.cpp functions to object-based.
Misc minor cleanups.
2001-08-03 23:09 darkangelab
* combat.cpp, skills.cpp, trade.cpp:
Cleaned up some usage of sysmessage
2001-08-03 21:53 toinzane
* SEFunctions.cpp, cMagic.h, funcdecl.h, house.cpp, magic.cpp,
movement.cpp, movement.h, network.cpp, uox3.cpp:
Converted movement.cpp functions to object-based.
Further depreciated Currchar().
Misc minor cleanups.
2001-08-03 19:48 toinzane
* combat.cpp, movement.cpp:
NPC Combat sounds now play.
Major lag fix for NPC's in combat.
2001-08-03 17:43 toinzane
* cClick.cpp, cWeather.cpp, combat.cpp, effect.cpp, magic.cpp,
movement.cpp, npcs.cpp, uox3.cpp:
Fixed NPC spawning.
Fixed a crash for NPCs spellcasting during combat.
Fixed NPC archers producing an invalid socket error.
Several nasty crash bugs fixed.
Removed many -1 character refrence warnings.
2001-08-03 13:30 toinzane
* cChar.cpp, cGuild.cpp, combat.cpp, commands.cpp, effect.cpp,
funcdecl.h, gumps.cpp, items.cpp, magic.cpp, msgboard.cpp,
necro.cpp, network.cpp, skills.cpp, skills.h, targeting.cpp,
uox3.cpp, vendor.cpp:
Many object conversions done, far less usage of calcItemFromSer().
Cleaned up msgboard.cpp.
Misc minor cleanups.
2001-08-02 18:39 darkangelab
* enums.h, speech.cpp, speech.h:
Added all the Unicode language codes I could find. Please note
that as much as we track them now, we still don't put them in when
sending speech
Also, not all of those language codes will be translatable.
TO DO
-------
All english and other languages have commonality. Alter dictionary
so that all english is from one file, all german from another, and
so on
2001-08-02 17:37 darkangelab
* Dictionary.cpp, cServerDefinitions.cpp, cSocket.cpp,
cmdtable.cpp, commands.cpp, fileio.cpp, im.cpp, jail.cpp,
magic.cpp, mapstuff.cpp, regions.cpp, skills.cpp, speech.cpp,
trigger.cpp, uox3.cpp:
Source code clean up / tidy up
All filenames that build a path now use MAX_PATH, and should help
resolve some crashes
2001-08-02 16:46 darkangelab
* ai.cpp, boats.cpp, cChar.cpp, cClick.cpp, classes.h, house.cpp,
items.cpp, magic.cpp, pcmanage.cpp, uox3.cpp:
Removed some redundant code sequences
Changed '\xaa' type code to 0xaa type code (fixed one boat issue
previously)
Generic clean up / tidy up
2001-08-02 16:08 toinzane
* combat.cpp, uox3.cpp:
Fixed some -1 Character refrence warnings
2001-08-02 15:22 toinzane
* SEFunctions.cpp, cItem.cpp, cMultiObj.cpp, calcfuncs.cpp,
funcdecl.h, items.cpp, network.cpp, npcs.cpp, pcmanage.cpp,
regions.cpp, speech.cpp, targeting.cpp, uox3.cpp, vendor.cpp:
Fixed a VERY nasty bug caused by one of my earlier commits.
More object conversions done.
2001-08-02 12:15 toinzane
* classes.h, cmdtable.cpp, funcdecl.h, network.cpp, npcs.cpp,
pcmanage.cpp, trade.cpp, uox3.cpp:
Fixed a nasty crash bug caused by adding NPC's
More object conversions
2001-08-02 08:37 toinzane
* SEFunctions.cpp, boats.cpp, cClick.cpp, cItem.cpp, cWeather.cpp,
classes.h, cmdtable.cpp, combat.cpp, commands.cpp, effect.cpp,
funcdecl.h, gumps.cpp, house.cpp, html.cpp, items.cpp, magic.cpp,
movement.cpp, necro.cpp, network.cpp, npcs.cpp, pcmanage.cpp,
quantityfuncs.cpp, regions.cpp, skills.cpp, skills.h, speech.cpp,
targeting.cpp, targeting.h, townregion.cpp, trade.cpp, uox3.cpp,
vendor.cpp, wholist.cpp:
More object conversions.
Removed superfluous functions.
Further depreciated Currchar().
Minor code cleanups.
2001-08-01 19:06 darkangelab
* classes.h, uox3.h, xgm.cpp, xgm.h:
Updated xgm.h to no longer define cRemote
xgm.h now contains the class definitions for incoming / outgoing
xgm packets
Implemented incoming xGM packets 0x02, 0x08 and 0x09
2001-08-01 18:07 darkangelab
* boats.cpp, cBaseobject.cpp, cChar.cpp, cChar.h, npcs.cpp,
targeting.cpp:
Fixed bug #446633 (boat exiting - mount copied)
Slight tidy up / clean ups
Fixed an invalid reference bug with IncX and IncY
Fixed a potential boat turning / movement bug
2001-08-01 16:59 toinzane
* combat.cpp, movement.cpp:
Fixed a bug allowing people to do melee combat from a distance.
Added error checking to PathFind() to kill bad direction errors.
2001-08-01 15:43 toinzane
* SEFunctions.cpp, ai.cpp, cClick.cpp, cRaces.cpp, cWeather.cpp,
cmdtable.cpp, combat.cpp, commands.cpp, dist.cpp, door.cpp,
effect.cpp, funcdecl.h, gumps.cpp, magic.cpp, movement.cpp,
skills.cpp, sound.cpp, speech.cpp, targeting.cpp, uox3.cpp:
Many more cleanups and object conversions.
Removed some superfluous functions.
2001-08-01 11:46 toinzane
* SEFunctions.cpp, cClick.cpp, door.cpp, effect.cpp, funcdecl.h,
movement.cpp, skills.cpp, sound.cpp, uox3.cpp:
More object conversions
2001-08-01 11:07 toinzane
* cClick.cpp, door.cpp, globals.cpp:
Fixed a bug that would cause some items to spit out a slew of -1
refrences when doubleclicked.
Fixed doors so they open properly, and a possible invalid socket
error.
2001-07-30 20:25 darkangelab
* cAccount.cpp, cWeather.cpp, cWeather.hpp, xgm.cpp:
Updated cWeather.hpp to use R32 and UI08 instead of float and
unsigned char
Added Count() to cWeatherAb
Documented a number of functions in cWeather.cpp
Added XGM output packet 0x12 / input packet 0x0F implementations
2001-07-30 18:49 toinzane
* SEFunctions.cpp, boats.cpp, cClick.cpp, cGuild.cpp, cRaces.cpp,
classes.h, cmdtable.cpp, combat.cpp, commands.cpp, effect.cpp,
funcdecl.h, house.cpp, items.cpp, magic.cpp, movement.cpp,
necro.cpp, newbie.cpp, npcs.cpp, pcmanage.cpp, skills.cpp,
targeting.cpp, trade.cpp, uox3.cpp:
Converted SpawnItem() and SpawnItemToPack() to object-based
Minor code cleanups
2001-07-29 17:57 darkangelab
* uox3.h:
Updated version information
2001-07-26 02:38 darkangelab
* uox3.cpp:
Initialized a variable to prevent errors
2001-07-26 01:01 darkangelab
* commands.cpp, funcdecl.h, quantityfuncs.cpp, targeting.cpp:
Code tidy up, redundancy removal
Fixed a slight duping bug
2001-07-25 22:29 toinzane
* SEFunctions.cpp, ai.cpp, cChar.cpp, combat.cpp, funcdecl.h,
magic.cpp, npcs.cpp, pcmanage.cpp, skills.cpp, skills.h,
targeting.cpp, uox3.cpp:
More object conversions.
Moved npcAttackTarget() and npcSimpleAttackTarget() to combat.cpp.
Further depreciated Currchar() usage.
2001-07-25 15:34 toinzane
* combat.cpp, combat.h, lineofsight.cpp, npcs.cpp, skills.cpp,
uox3.cpp:
Consolidated weapon ID code in combat.cpp
Fixed a crash bug in combat.
Fixed some combat animation bugs.
Minor code cleanups and bugfixes.
2001-07-25 10:36 toinzane
* SEFunctions.cpp, ai.cpp, cClick.cpp, cMagic.h, combat.cpp,
commands.cpp, effect.cpp, funcdecl.h, magic.cpp, magic.h,
movement.cpp, npcs.cpp, skills.cpp, targeting.cpp, targeting.h,
uox3.cpp:
Converted all functions in magic.cpp to object-based.
Fixed a possibly nasty bug with adding NPC's.
Minor code cleanups.
2001-07-25 08:15 toinzane
* effect.cpp, funcdecl.h, house.cpp, lineofsight.cpp, magic.cpp,
movement.cpp, movement.h, network.cpp, skills.cpp, sound.cpp,
speech.cpp, targeting.cpp, trade.cpp, uox3.cpp, vendor.cpp:
Removed some superfluous functions.
Changed many UOXSOCKET calls to cSocket calls.
Minor code cleanups.
2001-07-24 23:16 toinzane
* SEFunctions.cpp, boats.cpp, boats.h, funcdecl.h, house.cpp,
speech.cpp, uox3.cpp:
Removed some superfluous functions.
Minor code cleanups.
2001-07-24 22:15 toinzane
* SEFunctions.cpp, boats.cpp, boats.h, cClick.cpp, cItem.cpp,
funcdecl.h, house.cpp, items.cpp, magic.cpp, movement.cpp,
network.cpp, speech.cpp, targeting.cpp, uox3.cpp:
Converted boats.cpp functions to object-based.
Moved findMulti, inMulti, and sendInRange() to uox3.cpp.
Documented all functions in boats.cpp.
Changed cBoats:: Turn, Move, and Build to TurnBoat, MoveBoat, and
CreateBoat respectively.
Minor code cleanups.
2001-07-24 20:44 darkangelab
* jail.cpp, jail.h:
Jail system now reads in it's saved data
2001-07-24 20:17 darkangelab
* jail.cpp:
Added customized jail locations
2001-07-24 19:59 darkangelab
* boats.cpp, cmdtable.cpp, cmdtable.h, funcdecl.h, npcs.cpp,
pcmanage.cpp, speech.cpp, speech.h, targeting.cpp, targeting.h:
Updated itemtalk() and itemmessage() to add in delay support
Corrected the crash where an invalid dictionary reference would
crash the server
Added the 'deletechar command to delete a PC
Updated cCharStuff::DeleteChar() to fix the account reference for a
PC
2001-07-24 19:07 darkangelab
* SEFunctions.cpp:
Fixed SE_CommandDetails()
Implemented SE_GetLightLevel() properly
Did source cleanup / tidy ups
Added many debugging messages
Fixed SE_CalcRank()
2001-07-24 09:59 toinzane
* SEFunctions.cpp, ai.cpp, boats.cpp, cClick.cpp, combat.cpp,
dist.cpp, effect.cpp, funcdecl.h, items.cpp, magic.cpp,
movement.cpp, msgboard.cpp, necro.cpp, pcmanage.cpp, skills.cpp,
speech.cpp, targeting.cpp, uox3.cpp, vendor.cpp:
Removed some superfluous functions
More object conversions
Renamed backpack() to openPack()
Minor code cleanups
2001-07-23 21:25 darkangelab
* SEFunctions.cpp, ai.cpp, boats.cpp, cBaseobject.cpp, cChar.cpp,
cClick.cpp, cGuild.cpp, cGuild.h, cItem.cpp, cMultiObj.cpp,
cSocket.cpp, commands.cpp, effect.cpp, house.cpp, itemhandler.cpp,
items.cpp, magic.cpp, movement.cpp, msgboard.cpp, necro.cpp,
network.cpp, npcs.cpp, skills.cpp, speech.cpp, speech.h,
targeting.cpp, townregion.cpp, uox3.cpp, vendor.cpp:
Changed many references to 0xFFFFFFFF to INVALIDSERIAL
2001-07-23 21:01 darkangelab
* items.cpp:
Fixed a bad SpawnItemToPack bug
2001-07-23 20:48 darkangelab
* SEFunctions.cpp, cScript.cpp, npcs.cpp:
Updated SE_SpawnNPC function to require less variables
Small tidy up
2001-07-23 14:58 toinzane
* SEFunctions.cpp, ai.cpp, boats.cpp, cChar.cpp, cClick.cpp,
cItem.cpp, cmdtable.cpp, combat.cpp, dist.cpp, door.cpp,
effect.cpp, funcdecl.h, items.cpp, magic.cpp, movement.cpp,
necro.cpp, npcs.cpp, skills.cpp, sound.cpp, speech.cpp,
targeting.cpp, uox3.cpp:
Overhauled dist.cpp, and removed many superfluous functions.
More object conversions done.
Minor code cleanups.
2001-07-23 08:21 toinzane
* cChar.cpp, cItem.cpp, dist.cpp, items.cpp, magic.cpp,
movement.cpp, pcmanage.cpp, skills.cpp, speech.cpp, targeting.cpp,
trade.cpp, vendor.cpp, weight.cpp, weight.h:
Overhauled weight, is now entirely object-based, also removed some
useless functions.
Further depreciated Currchar() use.
Minor code cleanups.
2001-07-22 23:44 darkangelab
* boats.cpp, cClick.cpp, cItem.cpp, cRaces.cpp, commands.cpp,
funcdecl.h, house.cpp, items.cpp, magic.cpp, movement.cpp,
npcs.cpp, pcmanage.cpp, pointer.cpp, skills.cpp, targeting.cpp,
trade.cpp, uox3.cpp, vendor.cpp:
Ripped out the guts of pointer.cpp
Changed all calls to setserial() to what setserial() actaully does,
thus making setserial() and unsetserial() redundant
pointer.cpp is now deprecated
2001-07-22 22:59 toinzane
* cClick.cpp, calcfuncs.cpp, commands.cpp, door.cpp, funcdecl.h,
gumps.cpp, house.cpp, items.cpp, magic.cpp, network.cpp, npcs.cpp,
pcmanage.cpp, quantityfuncs.cpp, skills.cpp, speech.cpp,
targeting.cpp, trade.cpp, trigger.cpp, uox3.cpp, vendor.cpp,
weight.cpp:
Changed getPack() from an ITEM to a CItem
Removed superfluous packitem()
Cleaned up more Currchar()'s in favor of CurrcharObj()
Fixed up cgold2()
Minor code cleanups
2001-07-22 22:11 darkangelab
* SEFunctions.cpp, boats.cpp, cChar.cpp, cChar.h, cClick.cpp,
cRaces.cpp, cWeather.cpp, cWeather.hpp, cmdtable.cpp, combat.cpp,
commands.cpp, effect.cpp, funcdecl.h, gumps.cpp, house.cpp,
jail.cpp, magic.cpp, movement.cpp, network.cpp, npcs.cpp,
pcmanage.cpp, skills.cpp, speech.cpp, targeting.cpp, uox3.cpp,
wholist.cpp:
Updated CChar so that the functions Teleport(), Update(),
ExposeToView() and HideFromView() no longer need the index into the
chars[] array
Updated weather to take CChar * and cSocket * instead of CHARACTER
and UOXSOCKET
General code clean ups
2001-07-22 19:41 darkangelab
* cWeather.cpp, lineofsight.cpp, uox3.h:
Converted float to R32
Added explicit cast to BuildTimeValue to remove warnings
2001-07-22 19:22 darkangelab
* cChar.cpp:
Sped up FirstItemObj() and NextItemObj()
2001-07-22 19:20 darkangelab
* SEFunctions.cpp, books.cpp, cChar.cpp, cClick.cpp, cItem.cpp,
cWeather.cpp, cmdtable.cpp, combat.cpp, commands.cpp, effect.cpp,
funcdecl.h, globals.cpp, gumps.cpp, items.cpp, magic.cpp,
movement.cpp, msgboard.cpp, network.cpp, npcs.cpp, skills.cpp,
speech.cpp, targeting.cpp, townregion.cpp, uox3.cpp, uox3.h:
Slight source tidy up / clean ups
Removed some dead global variables
Implemented and converted almost all uses of CLOCKS_PER_SEC to use
the function BuildTimeValue
Lowered dependence on script1 and script2 from a global perspective
Fixed a potential bug in choice()
Slightly sped up some town region loading code
2001-07-22 18:24 toinzane
* SEFunctions.cpp, ai.cpp, boats.cpp, books.cpp, books.h,
cBaseobject.cpp, cChar.cpp, cChar.h, cClick.cpp, cGuild.cpp,
cItem.cpp, cMagic.h, calcfuncs.cpp, charhandle.cpp, classes.h,
combat.cpp, combat.h, commands.cpp, dist.cpp, door.cpp, effect.cpp,
funcdecl.h, gumps.cpp, handlers.h, house.cpp, itemhandler.cpp,
items.cpp, magic.cpp, movement.cpp, necro.cpp, network.cpp,
network.h, npcs.cpp, pcmanage.cpp, pointer.cpp, quantityfuncs.cpp,
skills.cpp, skills.h, sound.cpp, speech.cpp, targeting.cpp,
trade.cpp, uox3.cpp, vendor.cpp, weight.cpp, weight.h:
MANY Cleanups
Converted many functions to being object-based
Added in preliminary support for pet friends
Rewrote much of combat.cpp
Changed packitem() to getPack()
Greatly reduced Currchar() usage ( in favor of CurrcharObj() )
Some minor possible bugfixes
2001-07-22 17:21 darkangelab
* worldconverter/: cChar.cpp, cChar.h, cItem.cpp, globals.cpp,
uox3.cpp, uox3.h:
Added multiple item on layer support, to alleviate the issue with
CONT and LAYER being around the wrong way
Added some basic error logging
Slight tidy ups
2001-07-22 14:30 seank
* trigger.cpp, uox3.cpp:
more sscanf replacements (linux only)
2001-07-22 13:29 seank
* ChangeLog, boats.cpp, cBaseobject.cpp, cChar.cpp, cMultiObj.cpp,
cRaces.cpp, cWeather.cpp, cWeather.hpp, cmdtable.cpp, combat.cpp,
dist.cpp, effect.cpp, globals.cpp, itemhandler.cpp:
removed a ton of warnings
2001-07-22 11:23 seank
* cChar.cpp:
Removed the ifdefs, now sstream stuff is for windows too..
Someone verify that this method works under windows
2001-07-22 10:43 seank
* cChar.cpp:
More linux fixes (sstream instead of scanf)
2001-07-19 19:26 darkangelab
* cClick.cpp, effect.cpp, funcdecl.h, necro.cpp, quantityfuncs.cpp,
skills.cpp, uox3.cpp:
Added DecItemAmount() which replaces a lot of repeated item code
and adds a slight optimization
2001-07-19 18:29 darkangelab
* network.cpp:
Fixed a slight bug where xGM would never receive any packets
2001-07-19 18:21 darkangelab
* combat.cpp:
Tweaked a SERIAL check to compare against INVALIDSERIAL, and not -1
2001-07-19 18:08 darkangelab
* cChar.cpp, magic.cpp, movement.cpp, uox3.cpp:
Optimized Teleport() in CChar a lot, removes a lot of hash table
lookups
Generic code clean up / slight optimizations
2001-07-19 17:59 darkangelab
* cChar.cpp, cChar.h, cScript.cpp, movement.cpp:
Added OutOfRange and InRange support for characters
Added SendToSocket( cSocket *, bool, CChar * ) to CChar
Fixed a nasty cScript bug that would prevent events from being
flagged as available
2001-07-19 17:26 toinzane
* cChar.cpp, cChar.h, cClick.cpp, cItem.cpp, cItem.h, classes.h,
cmdtable.cpp, combat.cpp, commands.cpp, commands.h, funcdecl.h,
items.cpp, network.cpp, newbie.cpp, npcs.cpp, pcmanage.cpp,
pointer.cpp, speech.cpp, targeting.cpp, uox3.cpp:
Enhanced Pet Guarding (still needs work)
Added in object support to many functions
Many cleanups
Documented commands.cpp
2001-07-18 22:37 darkangelab
* enums.h, network.cpp, xgm.cpp:
Added xGM option to ClientTypes for cSocket
Added simple class and implementation of xGM input/output packets 0
On accept, cSocket is set to xGM for the xgm connected sockets
TODO
-----
Real authentication on xGM
2001-07-18 21:39 darkangelab
* cChar.cpp, globals.cpp, items.cpp, magic.cpp, necro.cpp,
pcmanage.cpp, skills.cpp, uox3.cpp, uox3.h, xgm.cpp:
Slight code tidy ups / tweaks
Changed hard coded 2 to a global var for GM command level
Changed hard coded 1 to a global var for CNS command level
Added 2 more empty packet handlers in WhichXGMPacket
2001-07-18 20:12 seank
* cChar.cpp:
see the start of the strtok/sscanf replacement here (stringstream)
2001-07-18 19:00 seank
* cChar.cpp:
temporary linux fix... strtok and sscanf misbehaving in BaseSkills
loader
2001-07-18 15:27 seank
* cServerData.cpp, cServerDefinitions.cpp, calcfuncs.cpp:
Fixed the linux directory functions
2001-07-18 14:15 toinzane
* classes.h, items.cpp:
Cleaned up and documented items.cpp
2001-07-18 12:29 toinzane
* calcfuncs.cpp, cmdtable.cpp, door.cpp, funcdecl.h,
lineofsight.cpp, magic.cpp, magic.h, mapstuff.cpp, mapstuff.h,
movement.cpp, network.cpp, npcs.cpp, regions.cpp, regions.h,
skills.cpp, speech.cpp, targeting.cpp, uox3.cpp:
MSVC Warning level 4 fixes.
2001-07-18 11:06 toinzane
* cClick.cpp:
Linux compile fix
Added in a check I missed for pet guarding.
2001-07-18 10:52 toinzane
* cClick.cpp, combat.cpp:
Pets will now guard your corpse if they were guarding you when you
died.
Fixed pet guarding in PlayerAttack().
2001-07-18 10:29 toinzane
* calcfuncs.cpp, funcdecl.h, quantityfuncs.cpp, uox3.cpp:
More minor code cleanups.
Added an object-based RefreshItem()
2001-07-18 09:56 toinzane
* cClick.cpp, funcdecl.h, movement.cpp, movement.h,
quantityfuncs.cpp:
Added in object-based getSubItemAmt(), DeleItemAmt(), and
DeleSubItemAmt() functions.
Cleaned up quantityfuncs.cpp and converted int's to SI32's (to
avoid cross-platform container size issues).
Minor code cleanups.
Fixed some signed / unsigned mismatches.
2001-07-18 08:45 toinzane
* cClick.cpp:
Fixed a minor issue with an isCorpse check.
2001-07-18 07:21 toinzane
* cClick.cpp, funcdecl.h:
Added in color highlighting for corpses, corpses of murderers will
be red, innocents blue, racial/guild enemies orange, ect.
2001-07-18 02:29 darkangelab
* cSocket.cpp, cSocket.h, network.cpp, xgm.cpp:
Laying down basic framework for xGM support
2001-07-17 23:57 darkangelab
* magic.cpp, movement.cpp:
Adjusted field spells so that caster only turns criminal if the
people in the field are innocent
2001-07-17 23:30 darkangelab
* cClick.cpp:
Updated corpse flagging code so that guild enemies/allies and
racial enemies/allies will not flag criminal if looting
2001-07-17 22:21 toinzane
* SEFunctions.cpp, funcdecl.h, items.cpp, quantityfuncs.cpp,
skills.cpp, skills.h:
Renamed GetIngotAmt(), GetSubIngotAmt(), DeleIngot(), and
DeleSubIngot(), to getItemAmt(), getSubItemAmt(), DeleIngotAmt(),
and DeleSubIngotAmt() respectively, And moved them to
quantityfuncs.cpp
2001-07-17 21:57 darkangelab
* townregion.cpp, uox3.cpp:
Slight tweaks/tidy ups to cTownRegion::InitFromScript and
loadregions()
2001-07-17 21:42 darkangelab
* skills.cpp, townregion.h, uox3.cpp:
Changed regionNum in CTownRegion to a UI08
Added periodic sound playback support in for making items
Added checks to ensure that you really CAN make an item (and not
skill busy)
Slight optimizations to checkauto() and checkPC()
2001-07-17 20:37 darkangelab
* cConsole.cpp, cSocket.cpp, commands.cpp, magic.cpp, speech.cpp,
targeting.cpp:
Updated logging code so that all log files are written into the
logs subdirectory
2001-07-17 20:19 darkangelab
* packets.cpp, pcmanage.cpp:
startchar() now sends the correct hours/minutes/seconds
CPTime now sets minutes/seconds properly
2001-07-17 20:09 darkangelab
* network.cpp:
Removed DNS-list style wholist due to plans for similar system
under xGM
2001-07-17 19:46 darkangelab
* cClick.cpp:
GMs don't go criminal for looking at corpses
2001-07-17 18:51 darkangelab
* skills.cpp, skills.h:
Removed redundant GetIngotAmt function
Added GetIngotAmt function to deal with CChar *
Added gold exploitation due to begging removal
2001-07-17 18:41 darkangelab
* skills.cpp:
Added line of sight check and range check to forensics target
2001-07-17 17:47 toinzane
* SEFunctions.cpp, boats.cpp, cClick.cpp, calcfuncs.cpp, classes.h,
cmdtable.cpp, combat.cpp, door.cpp, effect.cpp, funcdecl.h,
items.cpp, npcs.cpp, sound.cpp, trade.cpp, uox3.cpp:
Now only items inside multis will display [Locked Down] if movable
is set to 3.
Fixed some minor possible issues.
Miscellaneous minor code cleanups.
2001-07-17 17:26 seank
* cServerData.cpp, cSkillClass.h, cmdtable.cpp, enums.h, html.cpp,
im.h, jail.h, npcs.cpp, packets.h, pointer.cpp, queue.cpp,
scriptc.cpp, teffect.cpp, townregion.cpp, xgm.cpp:
linux compile fixes and some runtime issues fixed
2001-07-17 17:26 gimmles
* network.cpp:
I fixed another visual error, for the console.
so it prints the correct IP address
2001-07-17 09:37 toinzane
* uox3.cpp:
Oops, programming whilst tired is a bad thing :P
2001-07-17 09:31 toinzane
* books.cpp, cRaces.cpp, commands.cpp, door.cpp, funcdecl.h,
magic.cpp, npcs.cpp, pcmanage.cpp, pointer.cpp, targeting.cpp,
trade.cpp, uox3.cpp:
Fixed a int/bool mismatch with fielddir()
Changed setserial() to a bool
Misc minor code cleanups
2001-07-17 01:30 darkangelab
* speech.cpp:
Changed a -1 to INVALIDSERIAL to fix signedness
2001-07-16 22:41 darkangelab
* door.cpp:
Doors are no longer blocked by offline characters
2001-07-16 22:33 darkangelab
* cRaces.h, cScript.h, cServerData.h, cSocket.h, cdice.h, fileio.h,
handlers.h, hash.h, regions.h, scriptc.h, skills.h, speech.h,
threadsafeobject.h, townregion.h, wholist.h:
Updated some destructors so that they were flagged virtual (and
thus, if derived from, would destroy in the proper order)
2001-07-16 22:09 seank
* cAccount.cpp:
sizeof converted to strlen
2001-07-16 22:08 darkangelab
* uox3.cpp:
Using an explosion potion that damages an innocent turns the user
criminal
2001-07-16 21:41 darkangelab
* skills.cpp:
Inscribing will no longer gain you skill if you don't have enough
reagants or mana
2001-07-16 21:30 darkangelab
* cAccount.cpp, cClick.cpp, cSocket.cpp, cmdtable.cpp, html.cpp,
mapstuff.cpp, network.cpp, regions.cpp, uox3.cpp:
Changed \\ to / to help with Linux compatability
Updated cSocket constructors so that bytesReceived and bytesSent
are init'd to 0
Looting an innocent corpse that is not your own will result in
criminality
Seemingly fixed the xGM packet crash
2001-07-16 20:13 darkangelab
* SEFunctions.cpp:
More debugging message updates for the SE functions
2001-07-16 19:45 darkangelab
* SEFunctions.cpp:
Updated more SE functions to drop out debugging information
Slight improvements to some existing debugging writes
Slight code tidy ups
2001-07-16 18:47 darkangelab
* network.cpp:
Tweaks and clean ups to the code
Removed global use of conn for both CheckConn() and CheckXGMConn()
2001-07-16 18:25 darkangelab
* cAccount.cpp, cAccount.h, worldmain.cpp, worldmain.h:
Code cleanup / tidy ups
Removed redundant save routine in worldmain for accounts
Updated accounts save routine to write out correctly (although
still to accounts2.adm)
2001-07-16 18:04 darkangelab
* worldconverter/: cChar.cpp, uox3.cpp:
Updates to support new jailing system
2001-07-13 18:52 darkangelab
* targeting.cpp:
Slight tweaks to 'make, calling Teleport on body change not Update
2001-07-13 16:53 darkangelab
* jail.cpp:
Minor bug fix so that the cell with minimum # of jailees is
actually used
2001-07-13 15:45 gimmles
* network.cpp:
changed the output format of the ignored packet of the GetMSG() ,
GetLoginMSG(), and GetxGMMsg().
Gimli
2001-07-13 15:23 seank
* Makefile.am, Makefile.in, jail.cpp:
added jail to the makefile
2001-07-13 02:32 darkangelab
* combat.cpp:
Fixed slight overflow bug (UI08 cannot be < 0)
2001-07-12 23:59 toinzane
* boats.cpp, boats.h, combat.cpp, dist.cpp, funcdecl.h,
movement.cpp, movement.h, uox3.cpp:
Minor code cleanups, cleaning up MSVC Level 4 Warnings
2001-07-12 23:02 darkangelab
* UOX3_Official.dsp, cChar.cpp, cChar.h, classes.h, funcdecl.h,
globals.cpp, jail.cpp, jail.h, magic.cpp, targeting.cpp,
townregion.cpp, uox3.cpp, uox3.h, uoxstruct.h, worldmain.cpp:
Rewrote jail system, removing jail_st and writing a wrapper system
Added jail.h and jail.cpp
Removed OldXYZ from CChar
Added jail saving
TODO
-----
Add jail loading
Add jail scriptable locations
Write util to convert existing Reserved=0 to Reserved=-1 for
existing chars (so they're not "stuck" in jail)
2001-07-12 20:25 toinzane
* combat.cpp:
Duh, I really need some sleep :P
2001-07-12 20:21 toinzane
* combat.cpp, combat.h, skills.cpp:
Minor code cleanups in skills.cpp and combat.cpp
2001-07-12 20:21 darkangelab
* SEFunctions.cpp:
Updated SE Gump functions to solve some bugs and print out correct
debugging information
2001-07-12 20:03 darkangelab
* SEFunctions.cpp:
Updated some SE funcs to properly reflect their parameter
requirements
2001-07-12 18:55 darkangelab
* funcdecl.h, network.cpp, pcmanage.cpp, uox3.cpp:
Committed fix for character deletion packet issues (thanks to Gimli
for diagnosing and suggesting fix)
Added more tweak's to the UO3D mounts thanks to Weazel
2001-07-11 22:14 darkangelab
* effect.cpp, skills.cpp:
Added skill use turning on/off when creating items (as a start for
blocking multiple skill creation exploits)
2001-07-11 21:42 toinzane
* combat.cpp, skills.cpp, targeting.cpp:
Cleaned up CalcDef() a bit
Added weapon damage to CalcAtt()
Fixed a minor bug with Meditation
Minor cleanup in targeting.cpp
2001-07-11 21:14 darkangelab
* cChar.cpp, uox3.cpp:
Updated MountCreature / IsValidMount to reflect UO3D creatures that
are now available
Note that the NPCs and mounted creatures don't match up quite right
yet
---------------
Courtesy of Weazel
2001-07-11 19:27 darkangelab
* globals.cpp, typedefs.h, uox3.h:
Removed some superfluous #defines and variables
2001-07-11 19:10 darkangelab
* effect.cpp:
Added delayed sound effect support (on a character)
2001-07-11 18:53 darkangelab
* SEFunctions.cpp, effect.cpp, funcdecl.h, skills.cpp, skills.h,
teffect.h:
Adjusted cSkills::MakeItem() to take a 4th parameter (item #)
Completed delay support for success so that it uses scriptable
delays (on per item basis)
Deleted superfluous functions
2001-07-11 18:07 toinzane
* targeting.cpp:
Minor bugfix: 'unhide will now strip PermHidden attribute from
normal players (who were given it by 'hide)
2001-07-11 15:18 toinzane
* pcmanage.cpp:
Fixed bugs causing players hidden wth 'hide to be unhidden at
logon.
2001-07-11 13:32 toinzane
* commands.cpp, commands.h, magic.cpp, npcs.cpp, skills.cpp,
targeting.cpp, targeting.h:
Minor cleanups in commands.cpp, magic.cpp, npcs.cpp, skills.cpp,
and targeting.cpp,
Trimmed down excessive use of SERIAL container where it wasn't
necesarry.
2001-07-11 11:44 toinzane
* ai.cpp, cMagic.h, classes.h, magic.cpp, skills.h:
Cleaned up magic.cpp
Minor cleanups in misc areas of the source.
2001-07-11 10:09 toinzane
* boats.cpp, boats.h, cItem.cpp, calcfuncs.cpp, dist.cpp,
effect.cpp, funcdecl.h, house.cpp, magic.cpp, necro.cpp,
network.cpp, skills.cpp, sound.cpp, speech.cpp, targeting.cpp,
trade.cpp, uox3.cpp:
Minor code cleanups all over the source.
Moved a few functions out of uox3.cpp to more appropriate files.
2001-07-10 22:51 darkangelab
* speech.cpp:
Converted speech language string to uppercase for comparison
purposes (so kor and KOR would be the same)
2001-07-10 21:58 darkangelab
* cChar.cpp, cClick.cpp, classes.h, effect.cpp, house.cpp,
items.cpp, magic.cpp, skills.cpp, targeting.cpp, uox3.cpp,
uoxstruct.h:
Updated createEntry to hold a member delay
Changed createEntry.addItem to a string
Added string based SpawnItemToPack and CreateScriptItem (in
preperation for DFN system)
Changed CreateScriptItem's final parameter to bool, and adjusted
all calls to it
Added constructor initialization of skillUsed[] for CChar
Added some prelim support for avoiding alchemy grinding exploits
Corrected singleclick to only show creator for items made with very
high skill
2001-07-10 21:52 seank
* magic.cpp:
pow call was ambiguous, typecast to int
2001-07-10 21:14 seank
* SEFunctions.h, magic.cpp, skills.h, targeting.h:
temporary gcc 3.0 fixes (stupid gcc3 and it's typedef funcdecl
problems)
2001-07-10 20:05 seank
* lineofsight.cpp:
missed one, another sqrt improprietry
2001-07-10 20:03 seank
* lineofsight.cpp:
sqrt doesn't take ints.. only floating points
2001-07-10 20:03 darkangelab
* fileio.cpp, gumps.cpp, html.cpp, items.cpp, mapclasses.h,
mapstuff.cpp, npcs.cpp, skills.cpp, ssection.cpp, ssection.h,
uox3.h:
Tidied up ScriptSection, allowing for better definition support
(still not active)
Added crash avoidance to HTML server display
Generic code tidy ups
Repositioned create.scp menu buttons on gump properly
Extended max skill range to maxrange * 1.5 for making items
2001-07-10 15:36 seank
* ChangeLog, network.cpp:
FIONBIO is located in sys/ioctl.h, fixed
2001-07-09 22:28 darkangelab
* network.cpp, uox3.cpp:
Slight tidy up
Corpse generated is now put in a multi (if created inside one)
Added nonblocking listening socket
Tinkered with select and accept calls to work cleaner
*known issue*
login/disconnect before shard list, with proper username/pass,
seems to stop it from going further
2001-07-09 21:07 darkangelab
* uox3.cpp:
Updated monstergate() and advancementobjects(), just doing generic
clean ups
2001-07-09 20:19 seank
* ChangeLog, Makefile.am, Makefile.in:
Updated the makefile
2001-07-09 19:31 darkangelab
* cClick.cpp, cItem.cpp, cItem.h, commands.cpp, house.cpp,
items.cpp, magic.cpp, newbie.cpp, npcs.cpp, skills.cpp,
targeting.cpp, uox3.cpp:
Added Set / is Newbie(), Decayable() and Dispellable() to CItem
Adjusted all calls to GetPriv() that does bit comparisons to use
the new functions
2001-07-09 19:13 darkangelab
* uox3.cpp:
Moved the poison wear off code from checkPC and checkNPC to
genericCheck, resulting in common (cleaner) behaviour of poison
2001-07-09 19:06 darkangelab
* findfuncs.cpp:
Added findfuncs.cpp
2001-07-09 18:58 darkangelab
* classes.h, combat.cpp, SEFunctions.cpp, UOX3_Official.dsp,
cRaces.cpp, commands.cpp, effect.cpp, funcdecl.h, magic.cpp,
network.cpp, npcs.cpp, pcmanage.cpp, quantityfuncs.cpp, skills.cpp,
targeting.cpp, uox3.cpp, vendor.cpp:
Deleted redundant search functions from cCharStuff
Moved FindItemOfType, FindItemOnLayer and FindItem, along with
helper funcs, into findfuncs.cpp
General code clean ups
Better error checking on some search funcs
2001-07-09 18:29 darkangelab
* SEFunctions.cpp, SEFunctions.h, cScript.cpp, cScript.h, uox3.cpp:
Added onEnterRegion and onLeaveRegion events for characters
Added GetClientVersion and GetClientType SE functions
Added onEnterRegion and onLeaveRegion support to TriggerEvent
Put in handles so that onEnterRegion and onLeaveRegion will fire
2001-07-09 18:06 toinzane
* npcs.cpp:
Oopsie, fixed a couple minor errors :P
2001-07-09 18:02 toinzane
* SEFunctions.cpp, classes.h, items.cpp, necro.cpp, npcs.cpp,
targeting.cpp, uox3.cpp:
More cleanups in npcs.cpp
Broke AddRespawnNPC() into two functions, AddNPC() is called with a
socket, SpawnNPC() is called with an item, removed the need for
calling it with a type
Cleaned up items.cpp
2001-07-09 15:37 toinzane
* classes.h, funcdecl.h, npcs.cpp, uox3.cpp:
Many cleanups and fixes done to npcs.cpp
Renamed getstatskillvalue() to getStringValue()
2001-07-09 12:04 toinzane
* calcfuncs.cpp, cmdtable.cpp, funcdecl.h, items.cpp, npcs.cpp,
skills.cpp, speech.cpp, uox3.cpp, vendor.cpp:
Cleaned up and documented vendor.cpp
Fixed a problem in npcs.cpp where vendor shop packs were mis-labled
Cleaned up getname() and changed it to getTileName()
2001-07-08 22:11 seank
* ChangeLog, cvs2cl.pl:
added changelog utility
2001-07-08 21:55 darkangelab
* network.cpp:
Seemingly fixed the invalid IP connection display
2001-07-08 21:49 darkangelab
* movement.cpp:
Added xyblock[] overflow checking (avoids crashing in really
overloaded squares)
2001-07-08 21:45 darkangelab
* mapclasses.h, mapstuff.cpp, mapstuff.h, movement.cpp, movement.h,
packets.cpp, skills.cpp, uoxstruct.h:
Changed unitile_st to CTileUni and moved it to mapclasses.h
Abstracted away flags for unitile_st so it's member function based
(and more meaningful)
Slight tweaks and tidy ups
2001-07-08 21:34 seank
* ChangeLog:
cvs2pl changelog test
2001-07-08 20:57 seank
* Makefile.am, Makefile.in, cServerData.h, skills.cpp:
gcc 2.95 fixes
2001-07-08 20:14 darkangelab
* UOX3_Official.dsp, cClick.cpp, items.cpp, pcmanage.cpp,
skills.cpp, targeting.cpp, uox3.cpp:
Added pcmanage.cpp, to contain character management functions
Removed the setting of HiDamage and LoDamage to 5 of a lot of
items, preventing them being engraved
General code tidy ups
2001-07-08 19:11 toinzane
* cClick.cpp, uox3.cpp:
Fixed a possible UOE/UOP exploit that would allow users to steal
items from outside houses by tricking the client into thinking the
house wasn't there.
Added a temporary hack to make offline players unkillable until
Deathstuff() can be fixed up.
2001-07-08 18:57 darkangelab
* SEFunctions.cpp, SEFunctions.h, cItem.cpp, cItem.h, cRaces.cpp,
cRaces.h, cScript.cpp, network.cpp, packets.cpp, packets.h,
speech.cpp, speech.h, targeting.cpp, typedefs.h, uox3.cpp:
Changed COLOR to COLOUR
Changed COLOUR to a UI16 from a UI32
Used COLOUR more usefully
Added GetTileIDAtMapCoord SE function
Changed amount to an SI32 from UI32
Extending stacking to 65535 from 60000
Uncommented code that will fix player vendor purchasing exploit
2001-07-08 13:29 toinzane
* movement.cpp:
Added more error checking to trim down on Walking console spam.
2001-07-08 11:13 toinzane
* packets.cpp:
Skill Window Stuff, accidentally left debug stuff in with my last
commit. :P
2001-07-08 11:08 toinzane
* packets.cpp:
Fixed the SkillWindow bug
2001-07-07 23:24 toinzane
* PageVector.h, SEFunctions.cpp, boats.cpp, books.cpp, books.h,
cChar.cpp, cGuild.cpp, cGuild.h, cMagic.h, cMultiObj.cpp,
cMultiObj.h, cRaces.cpp, cRaces.h, cServerData.cpp, cServerData.h,
cSocket.cpp, cSocket.h, cWeather.cpp, calcfuncs.cpp,
charhandle.cpp, cmdtable.cpp, combat.cpp, combat.h, effect.cpp,
funcdecl.h, globals.cpp, gumps.cpp, handlers.h, html.cpp, im.cpp,
im.h, lineofsight.cpp, magic.cpp, mapclasses.h, movement.cpp,
movement.h, network.cpp, network.h, npcs.cpp, packets.cpp,
queue.cpp, skills.cpp, speech.cpp, speech.h, targeting.cpp,
townregion.cpp, townregion.h, typedefs.h, uox3.cpp, uox3.h,
uoxstruct.h, weight.cpp, weight.h:
Minor code cleanups
Many MSVC Warning Level 4 Fixes
Several unrefrenced variables removed.
Converted all floats to R32, and all doubles to R64
Overhauled and cleaned up im.cpp and im.h
2001-07-07 11:25 toinzane
* combat.cpp, combat.h, movement.cpp, skills.cpp, skills.h,
uox3.cpp:
Minor changes and cleanups in combat.cpp
Moved GetShield() and GetCombatSkill() from skills.cpp to
combat.cpp
Minor code cleanups in uox3.cpp
2001-07-07 09:24 toinzane
* uox3.cpp:
More fixes to dropping items on players.
Improved autostacking code.
Fixed some minor weight issues.
2001-07-06 23:11 toinzane
* cItem.cpp, cItem.h, skills.cpp, uox3.cpp:
Fixed bug causing items to vanish when dragged onto another player
or yourself (note you need to refresh your pack after dragging an
item onto yourself)
Fixed a minor Linux compile issue (thanks seank)
Fixed the bane of UOX.. The item-dupe bug (Item would automatically
dupe itself when moved), this was caused by items being set to an
amount larger than their container would hold, when that happened,
it would wrap the amount and continue to spawn the item when moved
until it reached that amount, SetAmount() now has a limit of 60k,
note UOX will fix any invalidated items at worldsave
2001-07-06 19:14 toinzane
* skills.cpp, uox3.cpp:
More minor updates to weight checks on stealing
Fixed bug allowing players to drop items into other characters
packs, now only GMs and Counsellors may put an item in another
characters pack.
2001-07-06 17:32 toinzane
* skills.cpp:
Stealing is now based on the thiefs armor as well as skill, higher
the AR, more skill it takes to steal (as with weight), at >40 AR,
you will not be able to steal at all.
2001-07-06 15:57 toinzane
* skills.cpp, skills.h:
More minor fixes in skills.cpp
Fixed up RandomSteal() and StealingTarget()
Added a new function: calcStealDiff(), will determine based on an
items type and weight, and players skill if he is able to steal it,
will then returns the minimum skill needed to steal that item based
on its weight.
2001-07-06 13:32 toinzane
* SEFunctions.cpp, classes.h, combat.cpp, combat.h, items.cpp,
newbie.cpp, skills.cpp, uox3.cpp:
Minor code cleanups
Rewrote StealingTarget() (Still needs some work, but looks/works
much better now)
Fixed a bug with CalcDef() that could cause infinite loops as well
as causing damage to armor when it shouldn't (Should GREATLY reduce
armor damage rate)
Fixed some issues that could potentially lead to serious bugs
2001-07-06 09:08 toinzane
* cClick.cpp, cRaces.cpp:
Cleaned up cClick.cpp and documented its functions
Incorporated some changes from Abaddon to slim down singleclick()
and fix some problems.
Fixed some problems for GM's seeing items as # instead of the
proper name.
Fixed a small issue in cRaces.cpp regarding skill counting.
2001-07-06 01:42 darkangelab
* cSocket.cpp, cSocket.h, enums.h, network.cpp, packets.cpp,
packets.h:
Added ClientTypes enumeration (regular, t2a, uo3d, unknown)
Added ClientTypes support to socket (defaulting to regular)
Added ClientVersion tracking (stores as 32 bit integer)
Added CPIClientVersion packet that copes with the client version
packet (assuming a format of x.x.xa)
2001-07-06 00:29 darkangelab
* cAccount.cpp, globals.cpp, uox3.cpp, uox3.h, worldmain.cpp:
Reduced the use of scpfile back to a small number of functions
General small tidyups
Eliminated global wscfile variable (superfluous)
Updated build number
2001-07-05 23:09 darkangelab
* cChar.cpp, npcs.cpp, scriptc.cpp, skills.cpp, uox3.cpp:
Generic tidy ups
Fixed a few updateSkillLevel loops iterating too far
Added an updateSkillLevel loop to PostLoadProcessing of CChar,
fixing the 0 effective skill bug (but NOT fixing skill window)
2001-07-05 21:35 darkangelab
* enums.h, speech.cpp, speech.h:
Added ENA language code (English, Australian)
Unicode speech now sets the language correctly (ensure you have a
dictionary of the right language!)
2001-07-05 20:46 toinzane
* SEFunctions.cpp, ai.cpp, cClick.cpp, calcfuncs.cpp, combat.cpp,
funcdecl.h, magic.cpp, npcs.cpp, skills.cpp, targeting.cpp,
uox3.cpp:
Code cleanups in npcs.cpp
Moved some more calc functions from uox3.cpp to calcfuncs.cpp
Documented all functions in calcfuncs.cpp
Changed backpack2() to openCorpse()
Cleaned up backpack() and openCorpse()
2001-07-05 20:36 darkangelab
* Dictionary.cpp, ssection.cpp:
Minor dictionary tweaks
Added function headers for ScriptSection
Tidied up ScriptSection constructors
2001-07-05 19:54 darkangelab
* worldconverter/uox3.cpp:
Fixed old world save to increment item/char counter
Minor cleanups
2001-07-05 19:15 darkangelab
* worldconverter/: cBaseobject.cpp, cChar.cpp, cItem.cpp,
globals.cpp, regions.cpp, uox3.cpp, uox3.h:
Remvoed garbage collection / item testing
Updated SetCont to deal with nonexistent character/item containers
Wrote a pretend save for old style multis -> new
Test worldfile of 963 items / 3 characters works
Note that the world size WILL increase, as old worldfiles write
minimalist information, new world files write everything
2001-07-05 18:17 seank
* configure, configure.in:
linux debugging turned off for speed
2001-07-05 17:56 darkangelab
* cGuild.cpp, effect.cpp, funcdecl.h, gumps.cpp, movement.cpp,
packets.cpp, packets.h, skills.cpp, uox3.cpp:
Other option, heaven forbid, is use ISO scoping, and use more
variable names (can eleminate need for count outside loop)
Updated gump code to deal better with SERIAL, rather than multibyte
parts
Updated gumpentry() to use dictionary entries
Corrected more sysmessage() calls to use dictionary stuff
Used const char *on gump text entry packet, rather than char *
2001-07-05 17:20 seank
* uox3.cpp:
linux fixes. Ok people, you have to stop using iso-incompatible
scoping. for (int i; .. ) { } i is only scoped for inside the for
loop,
not outside it.
2001-07-05 16:47 toinzane
* SEFunctions.cpp, boats.cpp, cClick.cpp, calcfuncs.cpp, classes.h,
combat.cpp, effect.cpp, funcdecl.h, gumps.cpp, house.cpp,
items.cpp, movement.cpp, necro.cpp, newbie.cpp, npcs.cpp,
skills.cpp, targeting.cpp, uox3.cpp:
Fully documented uox3.cpp functions
Moved calcRegionFromXY() from uox3.cpp to calcfuncs.cpp
Moved npcsimpleattacktarget(), npcattacktarget(),
npcToggleCombat(), npcToggleCombat(), npcact(), and npcaction()
from uox3.cpp to npcs.cpp
Renamed mounthorse() to MountCreature() and unmounthorse() to
DismountCreature()
Misc minor code cleanups
2001-07-05 08:53 toinzane
* funcdecl.h, mapstuff.cpp, skills.cpp, uox3.cpp:
Some minor code cleanups.
Beginning of function documentation in uox3.cpp
2001-07-05 03:09 darkangelab
* SEFunctions.cpp, boats.cpp, books.cpp, cChar.cpp, cClick.cpp,
cGuild.cpp, cRaces.cpp, cScript.cpp, cWeather.cpp, calcfuncs.cpp,
cmdtable.cpp, cmdtable.h, combat.cpp, commands.cpp, dist.cpp,
effect.cpp, funcdecl.h, gumps.cpp, house.cpp, html.cpp, items.cpp,
lineofsight.cpp, movement.cpp, msgboard.cpp, npcs.cpp, magic.cpp,
skills.cpp, sound.cpp, speech.cpp, targeting.cpp, targeting.h,
townregion.cpp, trade.cpp, uox3.cpp, vendor.cpp, weight.cpp,
wholist.cpp:
Encapsulated Network->GetSockPtr() in calcSocketObjFromSock
Encapsulated Network->FindNetworkPtr() in calcSocketFromSockObj()
Changed many sysmessages() to be more dictionary friendly
Wrote 2 more target() functions that are dictionary friendly, and
converted all target() calls to these 2
Small miscellaneous tidy ups
2001-07-05 00:56 darkangelab
* msgboard.cpp, necro.cpp, network.cpp, skills.cpp:
Slight fix for magic
Changed lots of sysmessage() to dictionary friendly ones
2001-07-04 23:16 seank
* threadsafeobject.cpp:
Windows compile fix
2001-07-04 23:13 seank
* uox3.cpp:
Windows compile fix
2001-07-04 23:01 seank
* Makefile.in:
Linux compile fixes
2001-07-04 22:56 seank
* AUTHORS, COPYING, ChangeLog, INSTALL, NEWS, PageVector.h, README,
SEFunctions.h, boats.cpp, books.cpp, cAccount.cpp, cBaseObject.h,
cChar.h, cClick.cpp, cConsole.cpp, cConsole.h, cGuild.cpp,
cGuild.h, cItem.h, cMagic.h, cMultiObj.h, cScript.h, cServerData.h,
cServerDefinitions.h, cSocket.cpp, cSocket.h, cThreadQueue.cpp,
cThreadQueue.h, calcfuncs.cpp, cdice.h, classes.h, combat.h,
commands.h, configure, configure.in, enums.h, fileio.cpp,
funcdecl.h, gump.h, handlers.h, hash.h, install-sh, magic.cpp,
magic.h, mapclasses.h, mapstuff.cpp, mapstuff.h, missing,
mkinstalldirs, movement.h, network.cpp, network.h, packets.h,
regions.h, skills.h, speech.h, ssection.h, targeting.cpp,
targeting.h, teffect.h, threadsafeobject.cpp, threadsafeobject.h,
townregion.h, trigger.h, typedefs.h, uox3.cpp, uox3.h, uoxlinux.h,
weight.h, wholist.h, worldmain.cpp, Makefile.am:
Linux compile fixes
2001-07-04 21:37 darkangelab
* SEFunctions.cpp, cMagic.h, magic.cpp, skills.cpp, targeting.cpp,
uoxstruct.h:
Fixed magery casting bug which had reagent errors
Removed extraneous DeleReagents function from magic
Fixed a potential spell blocking bug
Added a default constructor to reag_st to initialize all values
2001-07-04 21:23 toinzane
* cServerData.cpp, cServerData.h, skills.cpp:
Made engrave toggleable with ENGRAVEENABLED in server.scp
2001-07-04 20:35 darkangelab
* cRaces.cpp, cWeather.cpp, house.cpp, packets.cpp:
Fixed a crash issue doing an 'add which involved invalid skill
values calling a race function
Fixed multiplacement view packet so houses/boats ghost properly
More code tidy ups
Updated weather periodic update to take into account light changes
on a minutely basis
2001-07-04 19:59 toinzane
* weight.cpp:
More error-checking added to weight, now will not fall below 0 or
above 32,000.
Minor cleanups in weight.cpp, along with better function
documentation.
2001-07-04 19:34 darkangelab
* fileio.cpp, fileio.h, magic.cpp, movement.cpp, uox3.cpp:
Fixed a nonupdating stamina issue with overloaded walking
More sysmessage() changes
Changed ioBuff to UI08 * from char *
Fixed crash bug when entering an area with nonexistent midi
2001-07-04 18:21 darkangelab
* cItem.cpp, cMagic.h, classes.h, effect.cpp, fileio.cpp,
funcdecl.h, gumps.cpp, house.cpp, items.cpp, lineofsight.cpp,
magic.cpp, npcs.cpp, regions.cpp, sound.cpp, targeting.cpp,
uox3.cpp:
Much greater usage of dictionary safe sysmessage
Removed InitChar function, as it was already empty
Tidied up magic.cpp
Reduced parameter count for cMagic::SummonMonster
Fixed PoisonDamage bug
2001-07-04 17:02 darkangelab
* door.cpp, effect.cpp, skills.cpp:
Fixed a tempeffect2 bug which didn't store source correctly
Fixed dooruse to use either active char or invalid char, rather
than character 0
Fixed checktempeffects to calculate proper character for door
closing
Fixed door not closing bug
2001-07-04 16:45 darkangelab
* cChar.cpp, cChar.h, skills.cpp, speech.cpp:
Removal of the Get/Set BankBox functions in CChar
Removed all references to Get/Set BankBox functions, fixing
non-reopening bank box
Tidied up some of the CChar member code
2001-07-04 16:32 uid43025
* network.cpp:
More meaningful message displayed when a client disconnects
2001-07-04 16:31 uid43025
* mapstuff.cpp:
Fixed a minor invalid return
2001-07-04 08:33 uid55407
* dist.cpp, funcdecl.h, gumps.cpp, house.cpp, html.cpp, im.cpp,
mapstuff.cpp, mapstuff.h, msgboard.cpp, msgboard.h, necro.cpp,
scriptc.cpp:
Few minor code cleanups throughout the source with a couple
possible bugfixes
2001-07-04 00:11 uid55407
* calcfuncs.cpp, funcdecl.h, uox3.cpp:
Minor cleanups in uox3.cpp
Moved calcLastContainerFromSer to calcfuncs.cpp
Testing Commit to CVS ability :P
2001-07-03 21:52 uid43025
* cmdtable.cpp, commands.cpp, items.cpp, mapstuff.cpp, scriptc.cpp,
targeting.cpp, uox3.cpp:
Zane
----
Soundfx properly played for picking up items from ground
'set kills added, 'setmurder removed (code commented)
ItemSpawn() and ItemSpawnBackpack2() automatically add the items
weight to the calling character (if any)
Minor cleanups in targeting.cpp
Abaddon
-------
Started work on definition section header support
2001-07-03 21:16 uid43025
* SEFunctions.cpp, cClick.cpp, cSocket.cpp:
Fixed an SE InRange issue where items were in a pack
Fixed a doubleclick issue that would put an item out of range (if
not on ground)
Updated second cSocket constructor to have default language
2001-07-03 20:36 darkangelab
* combat.cpp, commands.cpp, door.cpp, effect.cpp:
Updated sysmessage calls to call the dictionary friendly sysmessage
One or two minor code cleanups
2001-07-03 19:26 darkangelab
* boats.cpp, cChar.cpp, cClick.cpp:
Updated boats.cpp, cChar.cpp and cClick.cpp to replace sysmessage
calls wtih dictionary friendly sysmessage calls
2001-07-03 18:59 darkangelab
* cChar.cpp, door.cpp, funcdecl.h, lineofsight.cpp, movement.cpp,
movement.h, sound.cpp, targeting.cpp, trade.cpp, uox3.cpp,
vendor.cpp:
GM's don't lose stamina when running
Added commented line of sight proposed algorithm
Added few more func decl headers
(on behalf of Zane)
Cleaned up movement.cpp functions
Cleaned up uox3.cpp along with fixing several issues with weight
fixed soundeffects() bug causing sound not to always play to
calling socket
2001-07-03 17:04 darkangelab
* calcfuncs.cpp:
Late addition of calcfuncs.cpp
2001-07-03 03:31 darkangelab
* SEFunctions.cpp, UOX3_Official.dsp, ai.cpp, boats.cpp,
cClick.cpp, cGuild.cpp, cRaces.cpp, cWeather.cpp, cmdtable.cpp,
combat.cpp, effect.cpp, enums.h, funcdecl.h, globals.cpp,
magic.cpp, msgboard.cpp, necro.cpp, network.cpp, network.h,
packets.cpp, packets.h, regions.h, skills.cpp, speech.cpp,
targeting.cpp, uox3.cpp, uox3.h, vendor.cpp, wholist.cpp:
Addition of the LoginDenyReason enumeration
Added CPLoginDeny packet, allowing removal of some global arrays
for packets
Deprecation of cNetworkStuff::CharList and cNetworkStuff::Relay by
implementing the CPISecondLogin and CPIServerSelect packets
Declaration of dictionary based sysmessage
Conversion of cmdtable.cpp, cRaces.cpp, wholist.cpp and
cWeather.cpp to using new dictionary based sysmessage
Changed all references to antispam to use booleans rather than char
Adjusted speech functions to use a single UI16 for colour rather
than 2 UI08s
Deprecated 2 itemmessage() functions and converted other serial
based references to char/item references
2001-07-03 03:25 darkangelab
* door.cpp, lineofsight.cpp, quantityfuncs.cpp:
Breaking out some functions from uox3.cpp and moving them into
their own file
2001-07-03 00:18 darkangelab
* combat.cpp, combat.h, funcdecl.h, magic.cpp, targeting.cpp,
uox3.cpp:
Addition of a cBaseObject based LOS call, turning a number of calls
into that
Broke out a few more functions in combat.cpp
General code tidy up in combat.cpp
2001-07-02 20:24 darkangelab
* UOX3_Official.dsp, cServerData.cpp, cServerDefinitions.cpp,
magic.cpp, uox3.cpp:
Fixed release crash bug when loading spells
Adjusted Release part of the project to have the proper defines
Updated multiple SCP file scanning to work better with directory
navigation
General code tidy ups
2001-07-01 22:42 darkangelab
* uox3.cpp:
Cannot damage invulnerable players with explosion potions
Tidied up spawnregion code and added CALL support, fixing a slight
map region bug
2001-07-01 22:34 darkangelab
* UOX3_Official.dsp:
Adjustments to the link part of the profiles to remove a bad
reference to JavaScript/
2001-07-01 22:33 darkangelab
* cClick.cpp, skills.cpp, targeting.cpp, uoxstruct.h:
Tidy up of the make_st to work more cleanly with structure
2001-07-01 21:55 darkangelab
* worldconverter/: UOX3WorldConverter.dsp, UOX3WorldConverter.dsw,
cBaseObject.h, cBaseobject.cpp, cChar.cpp, cChar.h, cItem.cpp,
cItem.h, cMultiObj.cpp, cMultiObj.h, charhandle.cpp, classes.h,
enums.h, funcdecl.h, globals.cpp, handlers.h, hash.cpp, hash.h,
itemhandler.cpp, power.h, regions.cpp, regions.h, resource.h,
typedefs.h, uox3.cpp, uox3.h, uox3.ico, uox3.rc, uoxstruct.h:
Creation of worldconverter project
2001-07-01 21:52 darkangelab
* uoxlist.h:
Removal of excess files
2001-07-01 21:44 darkangelab
* worldconverter/readme.txt:
Creation of worldconverter project
2001-07-01 21:26 darkangelab
* UOX3_Official.dsp, UOX3_Official.dsw, uox3.cpp, uox3.h, uox3.ico,
uox3.rc, uoxlist.h, uoxstruct.h, vendor.cpp, weight.cpp, weight.h,
wholist.cpp, wholist.h, worldmain.cpp, worldmain.h, xgm.cpp, xgm.h,
readme.txt:
Initial commit of 0.95 source
2001-07-01 21:23 darkangelab
* Dictionary.cpp, Dictionary.h, cSkillClass.h, cSocket.cpp,
cSocket.h, cThreadQueue.cpp, cThreadQueue.h, cWeather.cpp,
cWeather.hpp, debug.cpp, debug.h, dist.cpp, effect.cpp, enums.h,
fileio.cpp, fileio.h, funcdecl.h, globals.cpp, gump.h, gumps.cpp,
handlers.h, hash.cpp, hash.h, house.cpp, html.cpp, im.cpp, im.h,
itemhandler.cpp, PageVector.h, items.cpp, magic.cpp, magic.h,
mapclasses.h, mapstuff.cpp, mapstuff.h, movement.cpp, movement.h,
msgboard.cpp, msgboard.h, necro.cpp, network.cpp, network.h,
newbie.cpp, npcs.cpp, packets.cpp, packets.h, pointer.cpp, power.h,
queue.cpp, SEFunctions.cpp, SEFunctions.h, regions.cpp, regions.h,
resource.h, scriptc.cpp, scriptc.h, skills.cpp, skills.h,
sound.cpp, speech.cpp, speech.h, ssection.cpp, ssection.h,
targeting.cpp, targeting.h, teffect.cpp, teffect.h,
threadsafeobject.cpp, threadsafeobject.h, townregion.cpp,
townregion.h, trade.cpp, trigger.cpp, trigger.h, typedefs.h:
Initial commit of 0.95 source
2001-07-01 21:19 darkangelab
* archive.cpp, boats.cpp, boats.h, books.cpp, books.h,
cAccount.cpp, cAccount.h, cBaseObject.h, cBaseobject.cpp,
cChar.cpp, cChar.h, cClick.cpp, cConsole.cpp, cConsole.h,
cDice.cpp, cGuild.cpp, cGuild.h, cdice.h, charhandle.cpp,
cItem.cpp, cItem.h, cMagic.h, cMultiObj.cpp, cMultiObj.h,
classes.h, cmdtable.cpp, cmdtable.h, combat.cpp, cRaces.cpp,
cRaces.h, cScript.cpp, cScript.h, cServerData.cpp, cServerData.h,
cServerDefinitions.cpp, cServerDefinitions.h, combat.h,
commands.cpp, commands.h:
Initial commit of 0.95 source
2001-07-01 21:15 darkangelab
* ai.cpp:
Initial commit of 0.95 source
2001-06-06 08:54 yeshe
* readme.txt:
creation
01/07/2023 - Xuri (0.99.6-RC6)
Removed arbitrary and hidden restrictions on refreshing list of online players shown with 'wholist command
Fixed an issue where player ghosts that get teleported would not see themselves get updated to new location
Fixed a server crash from clients disconnecting while running server in debug mode
Improved how container updates are sent to players; now only sends to clients that have actually opened the container, and who are still within range
Added more information about UO data files being loaded during server startup
Enhanced the GM 'add menu to allow clicking directly on images of items/npcs to add them, and adjusted size of menus to accommodate this
Fixed an issue with fleeing NPCs that could cause them to attempt to flee across time and space, regardless of distance to target/attacker in combat
Added NPC AI that runs away from players if they get too close (even outside combat). Applied to hind, rabbits, squirrels, ferrets and various birds by default:
AI_ANIMAL_SCARED (aitype 12)
Fixed issues with NPCs fleeing forever, or getting stuck in flee/don't flee loop, by introducing max fleeing distance (50 tiles) and cooldown (30 sec) on fleeing
Updated onNameRequest JS Event to include third parameter with origin of name request, so script responses can be tailored appropriately:
onNameRequest( myObj, requestedBy, requestSource )
Potential values for requestSource:
0 - Speech/System Messages
1 - Guild Menus
2 - Stat Window (self)
3 - Stat Window (other)
4 - Tooltip
5 - Paperdoll Journal
6 - Paperdoll
7 - Single Click / All-Names
8 - System
9 - Secure Trade Window
Added Adaptive Performance System (APS) that dynamically adjust how often NPC AI/movement is checked based on overall shard performance. If performance drops below defined threshold, UOX3 gradually slows down checks for NPC AI/movement to prioritize player movement/speech/command responsiveness. If performance climbs back up above threshold, slowdowns are gradually removed. The following UOX.INI options have been added under [system] category to support this system:
APSPERFTHRESHOLD=50 // Performance threshold (measured in simulation cycles/sec) below which the APS kicks in
APSINTERVAL=100 // How often (in milliseconds) the APS checks performance and makes adjustments (if needed) to balance out shard performance
APSDELAYSTEP=50 // How much the delay timer is modified by (in milliseconds) each time APS makes adjustments
APSDELAYMAXCAP=2000 // Max amount of of delay APS can introduce for NPC AI/movement handling when attempting to restore shard performance
Added new JS script with packet hook for packet 0xA4 as sent by CUOWeb client, which includes information about CUOWeb user and potentially secret key required for connecting to shard
Added new UOX.INI setting where a secret shard key can be defined, which can be used as a way to restrict which clients can connect to the shard:
SECRETSHARDKEY=None // None by default
Added new JS Methods for Region objects:
.GetOrePrefs( oreType ) // Get ore preference data for ore type found in town region. Returned as an array containing the following data:
orePrefData -> [
oreName, // name of ore
color, // color of ore
minskill, // min skill to mine ore
ingotName, // name of ingot created from ore
makemenu, // makemenu entry for crafting something from ingot
oreChance, // default global chance of finding this ore type
scriptID // script attached to mined ore
],
orePrefChance // Chance of finding this ore type in given town region
.GetOreChance() // Get base chance of finding any ore in town region
Moved Mining skill plus gravedigging feature from hard code to scripts (js/skill/mining.js) to make it easier to maintain and/or customize, and removed hard coded variants
Gravedigging now relies on the ore resource system behind the scenes to restrict how often graves in a given area can be dug up
Fixed some incorrect references to .worldNumber Character property in misc scripts (should be .worldnumber)
Made some "hard-scripted" system messages in misc scripts use dictionary system instead
Added spawn region for banker NPCs in Serpent's Hold (dfndata/spawn/felucca/spawn_town_serpents_hold.dfn, dfndata/spawn/trammel/spawn_town_serpents_hold.dfn)
Fixed region definition of Ocllo to actually cover the entire town (dfndata/regions/regions.dfn)
Added numerous additional locations accessible with 'goplace # command, for key locations in Ilshenar, Malas, Tokuno Islands and Ter Mur (dfndata/location/location.dfn)
Revised travel-menu portion of GM menu (shortcut: 'travel) to include more travel options based on new locations (dfndata/items/travelmenu.dfn and travelmenu.bulk.dfn)
Fixed an issue where NPCs could attempt to attack targets in other worlds/instances
Added new JS Event that triggers for characters who are about to deal damage in combat. Complimentary to onDamage, which triggers for chars receiving damage:
onDamageDeal( dmgDealer, dmgReceiver, damageValue, damageType )
Added new JS Event that can trigger in global script upon creation of new player chars. Note that this will trigger in place of onCreateDFN event for player characters:
onCreatePlayer( pChar )
Added new JS Event that triggers for characters selecting a target with a spell. Complimentary to onSpellTarget, which triggers for targets selected with a spell:
onSpellTargetSelect( caster, target, spellNum )
Updated onCombatStart and onCombatEnd JS Events to also trigger for the other party in combat
Updated onPickup JS Event to include a third parameter - the potential container item was picked up from. Event now also triggers event in scripts attached to said containers:
onPickup( iPickedUp, pChar, iCont )
Added tracking of total playtime per individual character, and per account across all characters, and exposed these properties to JS engine:
.totalPlayTime // Account property, total playtime across all chars
.playTime // Character property, total playtime on given character only
Added new player-accessible command ('playtime) to spit out the playtime of current character/account as a whole (js/commands/playtime.js)
Implemented first version of Young Player System:
Replaced the UNUSED9 account flag with YOUNG, to be used by Young/New Player System
Added new JS Account property that gets/sets whether player account is considered Young:
.isYoung
Added new Char timers:
TIMER_YOUNGHEAL // Restricts how often Young players are healed by NPC healers
TIMER_YOUNGMESSAGE // Restricts how often Young players are warned about dangerous looking monsters in overworld
Updated GM commands 'get and 'set to get/set .isYoung property of player's account (js/commands/targeting/get.js and set.js)
Added new UOX.INI setting to enable/disable Young Player System (enabled by default):
YOUNGPLAYERSYSTEM=1
If Young Player System is enabled, all newly created player accounts are automatically marked with Young flag
Added new script to handle various restrictions and functions related to Young characters (js/player/young_player.js):
Young characters will have [Young] displayed over their head
Young characters will have their Young status checked and verified on every login + every stat/skill gain, to revoke the Young status if any of the following is true:
Account has a total playtime of more than 40 hours
Any character has more than 350 total (base) skill points
Any character has more than 70 skill points in a single skill
Any character has more than 150 total stat points
Any character has more than 80 stat points in a single stat
Young characters can renounce their Young status manually by saying the words "I renounce my young player status"
Young characters get an additional item upon creation:
a new player ticket, which can be combined with any other players new player ticket for both players to get a reward:
a sextant (shows Young players directions to nearest moongate/bank regardless of where they are, as long as outdoors)
a hair restyling deed
a ranger armor set (if coreShardEra is T2A or lower)
a spellbook with 1st to 4th circle spells (if CoreShardEra is UOR or higher)
a fireworks wand
a spyglass
a dye tub and dyes
Young characters cannot target other player characters with hostile spells or skills
Young characters cannot be the target of other player characters' hostile spells or skills
Young characters can only cast beneficial spells upon themselves or other Young characters
Young characters can only be the target of beneficial spells from other Young players
Young players (and their pets/followers) cannot attack or harm any other players (or their pets/followers), nor themselves be attacked or harmed by any other players (or their pets/followers), whether from combat, spells, skills or items
Young players don't lose any of their items on death, and are teleported to the nearest healer upon death with all their items intact
Young players receive a warning upon entering dungeons that monsters there will be hostile
Updated global script (js/server/global.js) to:
Check/Verify Young status of players upon login
Attach young player script on login/creation for players on Young accounts
Give specific items to Young players upon creation
Added new script (js/item/corpse.js) that is assigned to all freshly created corpses. This script handles restrictions related to Young players interactions with corpses, and the interactions of other players with corpses of Young players
Updated JS Method .Carve() to return true/false depending on whether carving a corpse was successful
Updated Healer AI in code to heal nearby injured Young players
Updated Evil AI and Evil Caster AI in code to avoid selecting Young players as targets in combat outside of dungeons
Added a new section to UOX.INI - [young start locations] - that can be used to define starting locations for Young players. If only one such location is provided, all players start there. Otherwise, it matches the same starting location setup as the regular one - with one entry per town in Britannia.
Restricted transferring and/or friending of pets (code) and hirelings (hirelings.js) between Young and non-Young players
Restricted Young players from recalling or gating to Felucca facet
Young players can instantly logout from anywhere, at any time
Added new Item DFN tag - SPELLS - which specifies which spells a spellbook starts with, using the following syntax: SPELLS=0x00000000,0x00000000,0x00000000
The existence of a spell from within each circle have specific values (0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80), and a combined value of 0xff if all spells in said circle are present.
The first comma-separated value in the SPELLS tag represents spell values for circles 1 to 4, while the second comma-separated value represents the spell values for circles 5 to 8. The third comma-separated value is currently unused.
The last two digits (0x000000##) of the first value in the SPELLS tag represent the combined value of spells from the first circle, the 5th and 6th digits (0x0000##00) spells from second circle, the 3rd and 4th from third circle (0x00##0000), and the 1st and 2nd from fourth circle (0x##000000). Repeat for the second value in the tag, with fifth (last two digits) to eight (first two digits) circle spells.
Examples:
spellbook with only 1st circle spells: SPELLS=0x000000ff,0x0,0x0
spellbook with only 2nd circle spells: SPELLS=0x0000ff00,0x0,0x0
spellbook with 1st - 2nd circle spells: SPELLS=0x0000ffff,0x0,0x0
spellbook with only 2nd and 5th circle spells: SPELLS=0x0000ff00,0x000000ff,0x0
spellbook with only 4th and 8th circle spells: SPELLS=0xff000000,0xff000000,0x0
spellbook with all spells, from all eight circles: SPELLS=0xffffffff,0xffffffff,0x0
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)
Fixed an incorrect character reference in Spyglass script (js/item/spyglass.js)
Added Item DFN entry for a fireworks wand with 50 charges (dfndata/items/gear/magic_items.dfn)
Added script for new player ticket (js/item/consumables/new_player_ticket.js)
27/06/2023 - Xuri
Updated guildmaster script to properly check and set timestamp for when a player joins an NPC guild (js/npc/ai/guildmaster.js)
Updated GM command 'get to show values of .npcGuildJoined player property
Updated GM command 'set to also accept true/false to set boolean flags, not just 1/0 (js/commands/targeting/set.js)
20/06/2023 - Xuri (0.99.6-RC5)
Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits
Added two new UOX.INI settings for NPC Guilds, which will give players discounts when buying or premium prices when selling items from/to NPCs that are members of the same NPC guilds as the player:
ENABLENPCGUILDDISCOUNTS=1
ENABLENPCGUILDPREMIUMS=1
Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet):
m_thief_guildmaster (dfndata/npc/male_human.dfn)
f_thief_guildmaster (dfndata/npc/female_Human.dfn)
Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties:
.npcGuild // ID of NPC guild, as defined in script
.npcGuildJoined // Timestamp for when player joined NPC guild
Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players.
Added two new character properties:
.isDisguised // true/false flag for character being disguised
.origName // used to store character's original name before disguise went into effect
Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include:
New features:
Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container
When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles
Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing
Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed
Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed
Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above)
Optional AoS feature to steal special consumable items from monsters
Updated default stealing rules:
Updated calculations to determine chance of success when stealing
Players cannot steal while engaged in combat
Players are revealed if hidden as soon as they use the stealing skill
Players can no longer steal items in the secure trade window
Players can no longer steal items from NPC shopkeepers
Both hands must be free to steal
Stealing now checks line of sight to target player/object
Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies
Players can no longer steal from NPC guards by default
Players can no longer steal from the same NPC monster more than once
Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher
Players can no longer steal items held on cursor by other players
Orcish masks now eplode if player steals from orcs while wearing it
If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player
Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged
Stealing script options:
Allow stealing entire containers (off by default pre-AoS)
Return stolen items on thief death (off by default)
Temporarily make stolen items immovable in thief's backpack (on by default post-AoS)
Temporarily protect traded items (on by default)
Let dexterity affect chance for successful theft (off by default)
Let light level affect chance for successful theft (off by default)
Allow stealing from NPC Guards (off by default)
Allow stealing special loot from monsters (on by default post-ml)
Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes:
Players cannot snoop pack animals from inside a house, if the animal is outside
The deeper inside main backpack a container sits, the harder it becomes to snoop inside it
Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time.
Players have a chance to stay hidden while snooping, based on their Hiding skill
Karma is now lowered by snooping regardless of success or failure
Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes
Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies.
Player combat targets and war mode are now cleared on logout
Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat
Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button
Fixed an issue that could cause swimming NPCs to swim on land
NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone.
SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer:
[NPCLIST example]
{
75|NPCLIST=allorc
25|ratman
}
Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez
Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property.
Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up
Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped
Added new JS Function to check if any characters at specified location potentially block movement:
DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
11/06/2023 - Xuri
Fixed an issue with the Clumsy spell script (js/magic/clumsy.js) where an attempt could be made to send a system message to the non-existent sockets of NPCs casting the spell
Fixed an issue where [golem] NPCs were trying to GET crafted_golem instead of craftedgolem (dfndata/npc/clockwork.dfn)
Fixed an issue where [golem] and [craftedgolem] NPCs were setup to use colossal blow special ability, but ability script didn't allow for it (js/ai/special/colossal_blow.js)
Removed some debug messages from gate opener script (js/item/gate_opener.js)
Added some comments to musiclists in regions.dfn, and added a few missing music entries to a few regions (dfndata/regions/regions.dfn)
Added function _restorecontext_() {} to another bunch of scripts:
js/npc/ai/monster/ethereal_warrior.js
js/commands/zerokills.js
js/commands/killall.js
js/commands/fixcont.js
js/commands/delid.js
js/commands/cleanup.js
js/commands/areacommand.js
js/item/guildstone.js
js/item/gate_opener.js
js/item/bedroll.js
js/item/potion.js
js/item/kindling.js
js/item/doors.js
js/item/dungeons/switch_puzzle_covetous.js
js/skill/peacemaking.js
js/skill/detecthidden.js
js/skill/craft/cooking.js
js/skill/craft/blacksmithing.js
js/skill/cooking/wheat.js
js/skill/cooking/flourmill.js
js/npc/ai/pack_ai.js
js/npc/ai/monster/savage_shaman.js
js/npc/ai/monster/orc_chopper.js
js/npc/ai/monster/orc_brute.js
js/npc/ai/exodus_clockwork.js
js/npc/special/life_drain_aura.js
js/npc/special/dull_copper_elemental.js
js/npc/special/damage_aura.js
js/npc/speech/speech_monster.js
js/server/misc/dungeon_trap.js
js/server/house/playerVendorDeed.js
js/server/house/houseCommands.js
09/06/2023 - Xuri
Fixed client freeze after login for sub-7.x clients, caused by sending an unsupported animation packet; FORCENEWANIMATIONPACKET will now not be enabled if support for client versions below 7.x is enabled
Added function _restorecontext_() {} to a couple more scripts:
js/commands/targeting/set.js
js/commands/decorate.js
js/commands/go.js
Fixed an issue with 'xgo command that would prevent it from working properly (js/commands/targeting/x.js)
Fixed an issue with teleport function in help gump which prevented pets from teleporting with player (js/server/misc/helpgump.js)
Fixed an issue with players in some cases getting toggled out of combat mode visually on other clients even though they were still in combat mode (when target dies, resurrection of ghost in combat mode, etc)
Players no longer see a message above their character's head about their own character attacking other characters
05/06/2023 - Xuri
Fixed an issue with patrolling-portion of hireling script - was incorrectly using Z coordinate as a parameter of WalkTo - should be maxSteps (js/npc/ai/hireling.js)
Added error checking to .WalkTo() and .RunTo() JS Methods that cancels pathfinding attempt if maxSteps provided is zero
Swapped around order of arguments in ScriptError() function in cScript.cpp, so the const char used by va_start() is now the last named argument (thanks ldilley!)
Fixed a socket error with 'move command alias in js/commands/targeting/tele.js (thanks Dragon Slayer!)
Fixed a server crash caused by an attempt to fetch the serial of a nullptr!
02/06/2023 - Xuri
Added new protected property for CChar class to track a player's currently controlled pets/followers/summons, and renamed the on tracking all pets owned:
GenericList activeFollowers
GenericList petsControlled -> petsOwned
Added new JS Character Methods to view/manipulate follower list:
GetFollowerList()
AddFollower( npcObject )
RemoveFollower( npcObject )
Added new JS Character Property to fetch current count of followers character has:
.followerCount
Added new GM commands for spitting out information on all pets/followers a player has, in the following format: Name: %s | ID: %i | Serial: %i | x: %i | y: %i | z: %i | world: %i | instanceID: %i
'listpets
'listfollowers
Replaced most instances of GetPetList in code and scripts with GetFollowerList, as that's what we actually care about for the most part
Updated code and relevant scripts to make use of AddFollower and RemoveFollower functions where appropriate
Modified code for restoring pet loyalty upon feeding pet; by default it now restores 10/100 loyalty per time pet is fed, while if CoreShardEra setting in UOX.INI is set to AoS expansion or higher, loyalty is instantly restored to max when pet is fed (regardless of amount)
Updated AreaCharacterFunction and AreaItemFunction JS Functions to still work if third parameter (socket) is provided as null
Modified code and relevant scripts that teleport pets/followers along with player to only do so for pets/followers using the "follow" wandermode with player as follow target
Updated some instances of code and script that checked for both controlSlot AND maxFollowers requirements - now only checks maxFollowers if controlSlots is set to 0 in ini
Added function _restorecontext_() {} to a couple more scripts:
js/commands/targeting/tele.js
Updated error message shown when attempts are made to add deleted objects to refreshQueue, to include name, ID and serial of the object in question
30/05/2023 - Xuri (0.99.6-RC4)
Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers
Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js)
Fixed an issue where UOX3 would fail to load pre-HS multi.mul files
Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn)
Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js)
When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride
Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong
Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function
MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile
MAXRANGE item property can now be used to define max combat range for melee weapons
Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors
Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn)
Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js)
Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead
Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer)
Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8
Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9
Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory
Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses
Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer)
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_() {}
Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer)
Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object:
.GetTagMap() // Gets list of persistent custom tags associated with object
.GetTempTagMap() // Gets list of temporary custom tags associated with object
Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js)
Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js)
Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js)
Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js)
Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js)
Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js)
Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js)
Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js)
Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly
Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn
Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax:
.SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE
Added new Character JS Methods:
.SetRandomName( nameListID ) // apply a random name from specified namelist to character
.FindItemSection( sectionID ) // find item in player's backpack with specified sectionID
Added new Socket JS Method:
.OpenContainer() // Opens specified container for socket
Fixed status window sex flag not being correctly sent for player characters of a Gargoyle nature (Dragon Slayer)
Fixed some issues with static pet scripts (js/npc/pets/*) that would allow players to exceed max number of followers and/or controlslots when buying animals from animal trainer
Updated OnBuyFromVendor, onBoughtFromVendor, onSellToVendor and onSoldToVendor JS Events to include a fourth parameter - iAmount - the number of items bought/sold
Fixed some issues with stabling and claiming pets from animal trainer NPCs (js/npc/ai/stablemaster.js)
Fixed an issue with 'remove and 'rremove commands where they would not reduce petCount/controlSlotsUsed for owners of characters removed (js/commands/targeting/remove.js and js/commands/custom/repeatingcmds.js)
21/05/2023 - Dragon Slayer, Xuri
Added initial pass for supporting Trammel PvP ruleset, which can be applied to and/or customized per facet and optionally overridden per region via js/server/misc/facetRulset.js (Dragon Slayer)
Misc script cleanup and extension of pvp ruleset script to include target handling for Blade Spirits/Energy Vortex, as well as the Provoke barding skill (Xuri)
Added custom AI scripts for summoned Blade Spirits (js/npc/ai/summon/blade_spirit.js) and Energy Vortexes (js/npc/ai/summon/energy_vortex.js) with updated target selection rules (based on target stats) and checks for active pvp ruleset (Xuri)
Added JS Function to check for existence of a JS event in another file (Xuri):
DoesEventExist( scriptID, eventToCheck )
Updated scripted magic spells to check for facet ruleset before allowing casting hostile and/or beneficial spells on other players (Xuri)
Added new JS Method for Guilds to check if they are "at peace", i.e. NOT at war with any other guilds (Xuri):
.IsAtPeace() // Returns true if guild is at peace, and not at war with any other guilds
Added support for triggering onPickup JS event for Characters, and not just items (Xuri)
17/03/2023 - Dragon Slayer, Xuri
Created framework, gumps, initial system for Bulk Order Deeds (Dragon Slayer)
Expanded BOD system to include gold, fame and special item rewards (Xuri)
Added optional support for triggering BOD offers from shopkeepers via context menus (Xuri)
Added new UOX.INI section with settings for Bulk Order System: (Xuri)
OFFERBODSFROMITEMSALES=1 // If enabled, shopkeepers might offer BODs when players sell items to them
OFFERBODSFROMCONTEXTMENU=0 // If enabled, shopkeepers might offer BODs via context menu option
BODSFROMCRAFTEDITEMSONLY=0 // If enabled, only selling of crafted items will trigger BOD offers
BODGOLDREWARDMULTIPLIER=1 // Reward multiplier for Gold given for completing a BODs - defaults to 1.0
BODFAMEREWARDMULTIPLIER=1 // Reward multiplier for Fame given for completing a BOD - defaults to 1.0
Updated smithing-related create DFNs (dfndata/create/*) with proper names for entries (Xuri)
Added special BOD item rewards: (Xuri)
Sturdy Pickaxe - More uses than normal pickaxes
Sturdy Shovel - More uses than normal shovels
Mining Gloves +1/+3/+5 - Boosts mining skill when equipped
Runic Hammers - Adds bonuses to crafted weapons and armors, applied after crafting the items (js/skill/craft/crafting_complete.js)
Colored Anvils - No unique property other than color, but can be added to houses as decoration/functional anvils
Ancient Smithy Hammers +10/+15/+30/+60 - Boosts blacksmithy skill when equipped
(Not fully implemented, AoS feature) Gargoyle's Pickaxe
(Not fully implemented, AoS feature) Prospector's Tool
(Not fully implemented, AoS feature) Powder of Temperament
(Not fully implemented, AoS feature) Blacksmith Power Scrolls +5/+10/+15/+20
Updated onMakeItem() JS event to always include the create entry ID as a parameter, even when crafting an item failed (Xuri)
17/03/2023 - Xuri
Fixed an issue where casting Wall of Stone inside a multi would lead to the wall of stone never expiring, because it was not correctly marked as a field spell
Reduced combat message spam; attacking messages now only appear when attacking targets who are not already fighting the attacker
Added a new character state - "passive combat mode" - primarily used by players when they tab out of combat. Tabbing out of combat will prevent the character from retaliating in combat if they're already fighting someone
Fixed several issues with dropping items through floors, tables and generally not being placed correctly when dropped inside multis
Hard-defined the Z-level at which some jewellers in Britain spawn to deny them rooftop access (spawn_felucca_town_britain.dfn and spawn_trammel_town_britain.dfn)
Added system messages informing shard staff with elevated command privileges why they are getting 100% skill check success, and no spellcast delay
10/03/2023 - Xuri
Fixed an issue where EraStringToNum JS Function would return incorrect values and lead to unexpected behaviour
Added some safeguards against server crashes in onNameRequest() and onTooltip() JS Events
08/03/2023 - Xuri
Fixed an issue where houses could lose track of locked down items on server restart
Fixed an issue where items could be accidentally dropped through the floor of houses/boats
04/03/2023 - Xuri (0.99.6-RC3)
Updated Item DFNs with ORIGIN and SECTIONID tags for relevant items
Added JS Function to make comparing eras (based on object origin or server settings) easier:
EraStringToNum( eraString ) // Takes an era string (uo, t2a, uor, td, lbr, aos, etc) and returns an int
Updated some JS scripts to use EraStringToNum() for era comparisons (potionkeg.js)
Default CORESHARDERA setting is now LBR
Removed PUB15 as a separate "era" - it's identical to late stage LBR anyway:
Removed support for GETPUB15 tag
Added support for GETUO tag for items/NPCs:
GETUO= // Inherit DFN section if core shard era is Ultima Online (original release, before T2A)
Rewrote portions of MsgBoardQuestEscortCreate() function in msgboard.cpp to ensure only escort regions within same world as NPC can be selected as destinations
Increased maximum number of possible escort regions that can exist from 255 to 65535
Added region definitions for all shrines in Britannia (Fel & Trammel), and marked them as valid destinations for NPC escorts (uox3/regions/regions.dfn)
Moved bankers from vendor to human DFN files, and made them inherit basehuman instead of basevendor - since they are not vendors
To address an issue with escorted NPCs not timing out and vanishing if they are left in a "dormant" area of the world with no player activity, the NPCs are marked as "always awake" the moment they arrive at their destination. Note that the uox.ini setting ALLOWAWAKENPCS needs to be enabled for this to work.
Fixed an issue where spawnsection of spawners did not show up correctly in tweak menu
Fixed an issue where the generic Orc AI script didn't have a return true at end of onDamage() event, which prevented all orcs from taking damage in combat (js/npc/ai/monster/orc.js)
Moved Anatomy skill-check in healing script (js/skill/healing.js) from onCallback1() function to onTimer() to prevent the skill-check from being spammable
Added mount ID for Frost Mite in creatures.dfn, allowing it to be used as mount
Exposed the following character properties to JS engine, which can be used to view/adjust the permanent hair/beard options for a character:
.hairStyle
.hairColour
.beardStyle
.beardColour
Updated 'kill hair, 'shavehair, 'shavebeard and 'remove commands to clear permanent hair/beard colour and style properties in addition to removing the item itself
Added a GM override to let GMs place as many houses as they want (js/server/house/houseDeed.js)
Fixed an issue where attempting to sell items to NPC shopkeepers could result in client crashing
Added a new JS Event:
onMultiLogout( iMulti, cPlayer ) // Handles players logging out while inside multis
Updated house script (js/server/house/house.js) with onMultiLogout event, which allows owners (always) and co-owners/friends/guests (if option enabled in uox.ini) to safely log out inside the house (without getting booted).
Added a "keyless" option for interacting with locked doors (js/item/doors.js) of player-owned houses, which lets owners/co-owners/friends/guests of a house use locked doors in the house without requiring a key in their backpack, if the options for that are enabled in UOX.INI. Enabled for owners/co-owners and friends by default (but not for guests)
Note that if option to safely log out is enabled, but keyless option is NOT enabled, then the server will check if the player has a key to the house in their backpack, and eject them from the house upon logging out if not. This is to make sure players don't get stuck inside a house they can't get out of because they lack the rights to open doors etc.
Added new UOX.INI options, under the [houses] section:
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
Fixed NOHAIR tag from races.dfn not being loaded correctly
31/12/2022 - Xuri
Extended GetSpawnRegion JS Function to fetch spawn region reference based on a set of coordinates. Supported syntax are now:
GetSpawnRegion( spawnRegionID )
GetSpawnRegion( x, y, worldNum, instanceID )
Added new DFN tags for Items and NPC:
SECTIONID // Override which [sectionID] is stored for an object
ORIGIN // Store reference to which expansion/era of UO an item/NPC originated in
Added new Item/Character JS property:
.origin // Get reference to expansion/era of UO an item/NPC originated in
Fixed an issue with IsInBuilding JS Function which could only handled a limited subset of instance ID values
Corrected name of tag used to attach scripts to ore types - from SCRIPTID to SCRIPT
24/12/2022 - Xuri, punt, ldilley (0.99.6-RC2)
CMake is now default build system on Linux/FreeBSD, and an alternative for Windows/macOS-users instead of VS/XCode, though the old GCC/Make build process is still intact (for now)
Resource files (uox3.rc and uox3.ico) have been moved from UOX3/source to UOX3/assets
Build/project-related files have been moved to /make/[buildsystem] sub-directories, for both UOX3 and sub-projects:
UOX3/make/cmake
UOX3/make/VS2017
UOX3/make/VS2022
UOX3/make/XCode
spidermonkey/make/cmake
spidermonkey/make/VS2017
spidermonkey/make/VS2022
spidermonkey/make/XCode
zlib/make/cmake
zlib/make/VS2017
zlib/make/VS2022
zlib/make/XCode
CMake, VS2022 and XCode will compile sub-projects automatically when UOX3 is compiled, while VS2017 requires compiling sub-projects prior to UOX3
automake.sh script (still in root of repository) now uses CMake instead of GCC/Make, and supports optional arguments for creating debug/clean builds
Updated instructions on compiling UOX3 can be found on GitHub and/or in the UOX3 documentation
Some redundant files have been deleted from the repository (like DLL folder and file)
Code style guide added to UOX3/docs directory (styleguide.html)
Updated GitHub workflows to use cmake for Linux and to ignore changes to .txt/.html/.sln/.vcxproj files for both Linux & Windows workflows
17/12/2022 - Xuri
When a player says "vendor buy" or "vendor sell", NPC shopkeepers (and related JS events) will now respond in priority of distance to the player
11/12/2022 - Xuri
Added support for a SCRIPT tag in ore definitions in dfndata/skills/skills.dfn, which will be applied to any ore of that type that's mined
08/12/2022 - Dragon Slayer
Replaced orc Spawns with Savages in T2A orc fort. this would bring the spawns up to date with LBR.
03/12/2022 - Xuri
Updated .ResourceCount() and .UseResource() JS Object Methods to include optional parameter for sectionId. New supported syntax:
int ResourceCount( realId, colour )
int ResourceCount( realId, colour, moreVal )
int ResourceCount( realId, colour, moreVal, sectionId )
int UseResource( amount, realItemId )
int UseResource( amount, realItemId, colour )
int UseResource( amount, realItemId, colour, moreVal )
int UseResource( amount, realItemId, colour, moreVal, sectionId )
Fixed an issue where the bit flag for the HirelingCombatTraining setting was not set properly
Fixed an issue in SpiderMonkey VS project that prevented compiling a x64 debug build (thanks, punt!)
Some minor cleanup
03/12/2022 - Dragon Slayer
GM and Counselors can now go though the wind teleporter
03/12/2022 - ldilley
Comment line in jsconfig.mk that attempts to cat a non-existent Version file. This causes an error otherwise during the SpiderMonkey build.
Initialize totalPlayerGold in vendor.cpp.
Flag unused variable in gumps.cpp.
Update README.md to include references to FreeBSD and also alter the command (libtool instead of ar) used to generate the JavaScript library on macOS.
Improve automake.sh.
29/11/2022 - Xuri
Added some validation checks for attacker object in onDamage JS event in several scripts
Enabled onSellToVendor, onSoldToVendor, onBuyFromVendor and onBoughtFromVendor JS events to also run if attached to NPCs
Disabled location check for 'addmulti command
29/11/2022 - ldilley
Fixed many compile-time warnings (closes Fix compile warnings #131).
Clang and GCC builds were both successful and completely clean using -Wall, -Wextra, and -Werror. The following various problems were corrected:
Fix reasonable warnings reported by MSVC using /W4 /W3 /D_CRT_SECURE_NO_WARNINGS.
Returning final without virtual
Comparison of values with differing signedness
Assignment order
memset() expecting a multiple of a data type
A plethora of unused variables (commented or voided)
Comparisons always resulting in true
Failure to initialize missing members
Static methods (inlined)
Instances of case fallthrough (denoted)
Incompatible casts
Mismatching macros/methods requiring variable number of arguments
Bit shifting in bool contexts
Inappropriate pointer use
Potentially incorrect initialization of class/struct instances using memcpy()/memset()
Removed some instances of extraneous spaces/tabs.
27/11/2022 - Dragon Slayer, Xuri
Implemented potion kegs; these can be crafted by carpenters/tinkerers, and can be used to store potions at a fraction of their original weight (Dragon Slayer)
Only the owner (if locked down), the current holder (if in backpack) or someone who have previously taste identified a potion keg may add additional potions to it (Xuri)
Potions dropped from monsters and bought from stores are unidentified by default, but can be identified by players using the taste identification skill. (Xuri)
Potions crafted by players are identified by default for all to see (Xuri)
Releasing locked down items in houses now set the items as movable (1) instead of client default (0) (Xuri)
Added socket as another parameter to the onToolTip JS event
15/11/2022 - Dragon Slayer
Added special hair dyes
Updated item menu in dfndata/items/ItemMenu.bulk.dfn with dyes (Xuri)
Added hairstylist NPC alias to dfndata/npc/vendors.dfn (Xuri)
13/11/2022 - Xuri
When buying items from NPC shopkeepers where the total cost is higher than the buy threshold set in uox.ini, UOX3 will now check the player's bankbox for gold first, then their backpack second, instead of just failing outright if bank didn't have the required amount
Minor cleanup of some UO era-specific code for better maintainability
Adjusted default light-settings in UOX.INI:
DUNGEONLEVEL changed from 3 to 15
DARKLEVEL changed from 5 to 12
12/11/2022 - Dragon Slayer
Added hair-only and beard-only variants of hair dyes
Added hair stylist vendors that sell all types of dye
09/11/2022 - Dragon Slayer/ldilley
Added item definition (in misc/consumables.dfn), JS script (item/bearddye.js) and dictionary entries for hair dye
Combined hair and beard dye scripts into one, since they shared most code (Xuri)
Added dyes to alchemist shoplist (items/shoplist.dfn) (Xuri)
Removed old hair dye menu from legacy gump DFN (dfndata/misc/gumps.dfn) (Xuri)
Selling items to NPC shopkeepers now relies on sectionID of items instead of their ID/Type/Morex values (Xuri)
Tinkerers can now craft Fletching Tools (Dragon Slayer)
08/11/2022 - Dragon Slayer/ldilley
Added item definition (misc/consumables.dfn), JS script (item/hairdye.js) and dictionary entries for hair dye
Added hair dyes (and tribal paint) to new consumables menu in add-menu (Xuri)
Cleaned up hair dye script based on style guidelines, addressed a few issues (Xuri)
Removed hard-coded hairdye functionality (Xuri)
06/11/2022 - Dragon Slayer/Xuri
Implemented Taxidermy Kits for creating trophy house addons (Dragon Slayer)
Fixed an issue related to open doors in houses that would prevent the placement of house-addons because of an incorrect distance check (Xuri)
Fixed an issue with placement of house addons that would allow them to be placed in locations blocked either by other items or by parts of the multi itself (such as walls) (Xuri)
1/11/2022 - Dragon Slayer
Updated spawn regions in Yew with NPCs for Empath Abbey
1/11/2022 - Xuri
Base multis created with CreateBaseMulti() JS function or BuildBaseMulti() C++ function no longer require valid 'house/boat' locations to spawn
Fixed an issue where no reagents were consumed when casting recall/gate spells via spell icons in runebooks (js/item/runebook.js)
Spawn Regions will now more accurately spawn objects near desired heights supplied via PREFZ tags. Using PREFZ=20 will attempt to spawn NPCs on the second floor of a building with ground level at Z 0, for instance.
Added a new DFN tag usable in Spawn Regions to define a definite Z level at which to attempt to spawn objects (skips some steps in the process and assumes the defined Z is a valid Z):
DEFZ=# // Defines a definite Z level to attempt to spawn an object at
Updated banker AI script (js/npc/ai/banker.js) with some extra validation checks, system messages and to take max weight capacity of bankbox into account
The sectionID property of NPCs are now transferred to their corpses upon death, to make it easier to identify in scripts from which NPC a corpse really originated
30/10/2022 - Xuri
Player vendors in existing houses no longer teleport to new houses placed by owner nearby
Fixed script issue with demolishing house with player vendors in them
Fixed an issue where setting prices for items on player vendors would permanently overwrite the buy-value of the item. Player vendor prices are now stored as a separate property (but saved as part of the VALUE tag), also accessible by the following JS Item property:
.vendorPrice
Item description and vendor price are now cleared from items bought from player vendors
Tooltips for items with new descriptions or vendor prices in player vendor backpacks are now correctly updated
Only books, keyrings and unlocked containers can now be marked 'Not for Sale' in a player vendor's main/root backpack
Any items on player vendors can now be marked as 'Not for Sale' if placed within a container that has a price tag
Added additional feedback messages to players for various interactions with player vendors
Fixed a bug where player vendors would lose loyalty and 'go wild' like pets when not fed regularly
Split up some of the longer item lists in the 'add menu to prevent freezes on original 2D client
27/10/2022 - Xuri
Added some code to assist with preventing/debugging houses potentially decaying
Fixed an issue with freeshard server poll script, which attempted to fetch wrong ini setting
Fixed a server crash related to applying invalid prices for player vendor items
Neglecting to give item in player vendor pack a description now defaults to item name
Items in player vendor packs are now refreshed properly when players update price and name
Players can no longer issue pet control commands to player vendors via context menus
27/10/2022 - DragonSlayer
Added aliases in item definitions for containers
Consolidated all light item scripts into one, with options for auto-lights (lampposts) based on environment brightness level and more
Removed old light scripts (Xuri)
Updated consolidated lights.js script to handle custom dir values on lights, modified source of sound effects when turning lights on/off and made a few other minor adjustments (Xuri)
Revamped region spawn system
27/10/2022 - Xuri
Fixed an issue with onDyeTarget event where the dyetub and target object parameters were not set properly
Fixed some incorrect casting animation-related variable assignments for AI_HEALER and AI_EVIL_HEALER
Fixed an issue with pets not going wild from lack of loyalty to their owners when at zero loyalty
Addressed issues with idle/fidget animation setup that could cause NPCs to blink out of existence
Removed stray semicolon behind control statement related to triggering of OnFacetChange JS event
Fixed an issue with Bless spell when cast from item
Some minor code cleanup
24/10/2022 - Xuri (0.99.6-RC1)
Misc cleanup and standardization of style and naming conventions in code and scripts
Added comments for all dictionary-based system messages in code for maintainability reasons
Fixed an issue where line of sight checks for dynamic items would fail
Fixed an issue where items being picked up by a player would not be added to the correct mapregion if bouncing back to its original location when dropped
Fixed an issue where NPC spellcasters would damage/kill themselves by attempting to cast Mind Blast at their target. Now they'll only cast this if they're actually smarter than their target
Fixed an issue where NPC spellcasters would damage and kill members of their own species/ai/race via AoE spells
Fixed an issue where the max spellcast range defined in UOX.INI was off for NPCs by 1 tile
Added spoken words of power for spells cast by human NPCs
Fixed an exploit with the Dispel Field spell
Admins and GMs are no longer dispellable...
Fixed a bug where spell effects would get stuck on caster if they cast a spell with a moving effect at themselves
Added two new NPC AI types that can be used for NPCs that are primarily casters:
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
Changed the NPCAI tags of some NPCs from 5 to 10 and from 2 to 11
Added some visual flair to let NPCs play idle/fidget animations from time to time
Added some visual flair to let NPCs play casting animations when using magic spells
Added support for new tags in creatures.dfn to define some animation behaviour for non-player creatures in combat (ANTIBLINK tag no longer needed):
ANIM_CASTAREA=#,frameCount // Animation to use when casting area-targeted spells
ANIM_CASTTARGET=#,frameCount // Animation to use when casting target-based spells
ANIM_ATTACK1=#,frameCount // First attack animation
ANIM_ATTACK2=#,frameCount // (optional) Second attack animation
ANIM_ATTACK3=#,frameCount // (optional) Third attack animation
Updated creatures.dfn with entries for all known creatures in the UO client, as well as icons, sounds and combat/casting animations for all of those.
Fixed an issue with creature DFN setup for Elf ghosts which prevented paperdoll context menu from working
Added new JS Events:
onCarveCorpse( pUser, iCorpse ) // Triggers for iCorpse when being carved by pUser
onFacetChange( mChar, oldFacet, newFacet ) // Triggers for character when moving between facets
onDyeTarget( pUser, dyeTub, targItem ) // Triggers for dyeTub when player tries dying an item
Added new JS Functions to create houses (from house.dfn) and base multis (using raw multi IDs):
CreateHouse( houseID, x, y, z, worldNum, instanceID );
CreateBaseMulti( multiID, x, y, z, worldNum, instanceID );
Added new JS Character/Item Method:
.HasScriptTrigger( scriptID ) // Returns true if script with scriptID is present on object
Added new JS commands for GMs in js/commands/custom/misc-cmd.js
'addhouse houseID // Add house from house.dfn at target location
'addmulti multiID // Add base multi from client multi files at target location
Added new INI settings:
SHOWRACEWITHNAME=1 // If enabled, shows a character's race along with their name. Defaults to 1
SHOWITEMRESISTSTATS=0/1 // If enabled, shows item resistance stats in item tooltip. Defaults to 0
SHOWWEAPONDAMAGETYPES=1/0 // If enabled, shows weapon damage types in item tooltip. Defaults to 1
CASTSPELLSWHILEMOVING=0/1 // If enabled, players can cast spells while moving, without having to stop
SHOWREPUTATIONTITLEINTOOLTIP=1/0 // If enabled, shows player's reputation title in tooltip. Defaults to 1
SHOWGUILDINFOINTOOLTIP=1/0 // If enabled, shows player's guild info in tooltip. Defaults to 1
SHOWRACEINPAPERDOLL=1/0 // If enabled, shows a character's race in the paperdoll. Defaults to 1
SHOWNPCTITLESINTOOLTIPS=1/0 // If enabled, shows NPC titles in tooltip. Defaults to 1
Renamed 0xf1_connectUOServerPoll.js to 0xf1_freeshardServerPoll.js, and updated script to respond to the "standard" freeshard server poll request rather than the more specific (and now dead) ConnectUO one.
Renamed INI setting CUOENABLED to FREESHARDSERVERPOLL
Added new INI settings under [expansion settings] section to help shard admins customize some key behaviours of their shard, based on their preferred "era" of UO. Note that a value of "core" means the setting inherits the chosen era from the CORESHARDERA setting:
CORESHARDERA=lbr
Defines the "core" era of the shard. Defaults to pub15 (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
RACIALDAMAGEBONUS=core
Defines era to base racial damage bonus on
sa or later - Gargoyles gain +15% damage bonus per each 20 HP lost
DAMAGEBONUSCAP=core
Defines era to base damage bonus cap on
lbr or earlier - No cap on damage bonus multiplier
aos or later - Total damage bonus multiplier capped at 300% higher than base damage
SHIELDPARRY=core
Defines era to base shield parry calculations on
t2a - chance to block is parryskill / 2. shield absorbs damage equivalent of AR/2 for melee, or equivalent of AR for archery
uor to lbr - higher AR equals lower block chance, but more damage absorbed.
aos or later - chance to block dependent on parry skill vs bushido skill, with dex modifier
WEAPONPARRY=core
Defines era to base weapon parry calculations on
aos or later - chance to parry with weapon based on parry skill and bushido skill, with a dex modifier, 16.6% chance weapon will take damage from parrying
ml or later - chance to parry with weapon based on parry skill and bushido skill, with a dex modifier, 5% chance weapon will take damage from parrying, or 75% if opponent has mace
WRESTLINGPARRY=core
Defines era to base wrestling parry calculations on
tol or later - From 12.5% chance (at GM wrestling, increases with higher skill) that an NPC will parry an attack
COMBATHITCHANCE=core
Defines era to base combat hit chance calculations on
t2a to lbr - hit chance based on attacker's skill vs defender's skill. No minimum chance to hit
uor to lbr - Additional bonus hit chance for archery
aos to tol - hit chance based on attacker's skill (and hit chance increase) vs defender's skill (and defense chance increase). Minimum 2% chance to hit
Supported era values:
uo, t2a, uor, td, lbr, aos, se, ml, sa, hs, tol and core (inherits era defined in CORESHARDERA)
Added (optional) new Item/NPC DFN tags to help determine which variants of Items/NPCs to load from DFNs, based on chosen era in CORESHARDERA setting:
GETUO= // Inherit DFN section if core shard era is Ultima Online (original release, before T2A)
GETT2A= // Inherit DFN section if core shard era is The Second Age
GETTD= // Inherit DFN section if core shard era is Third Dawn
GETUOR= // Inherit DFN section if core shard era is UO Renaissance
GETLBR= // Inherit DFN section if core shard era is Lord Blackthorn's Revenge
GETAOS= // Inherit DFN section if core shard era is Age of Shadows
GETSE= // Inherit DFN section if core shard era is Samurai Empire
GETML= // Inherit DFN section if core shard era is Mondain's Legacy
GETSA= // Inherit DFN section if core shard era is Stygian Abyss
GETTOL= // Inherit DFN section if core shard era is Time of Legends
Added new Item/Character DFN tags that provide defensive bonuses on top of existing DEF/ELEMENTALRESIST values:
DEFBONUS=minVal [maxVal] // Def/Physical resistance bonus (maxVal optional)
ERBONUS=heat cold energy poison // Elemental resistance bonus
Crafted armor made from coloured ingots now provide additional defensive bonuses based on color of ingots (for AoS/ToL variant of items)
Fixed a bug where players not a member of a guild could still interact with the guildstone of said guild
Guild masters can no longer dismiss themselves from their own guild; if they want to leave they'll have to resign
Fixed a bug where cancelling text input for various guild functions could blank out the guild name, abbreviation, guildmaster title, charter or website
Fixed a bug where guild abbreviations (and titles) would show when turned off, and would not show when turned on
Added guild master ability to grant guild titles to targeted guild members
Added system message feedback various guild interactions, including: inviting players to join, swearing fealty, declaring war, entering alliances, granting titles
Added support for showing guild titles and guild names in character tooltips
Guild titles, names and abbreviations are now hidden for players who are incognito
Players invited to join a guild by the Guild Master directly will now automatically be accepted into the guild
Fixed a potential null-reference exception related to moving Townstones
Fixed a bug where adding or removing friends for a pet would not properly inform the involved players
Traps in dungeons will now only trigger for player characters, and will ignore all NPCs
Tweaked HTML templates for server status pages; shard name shown more prominently, names of GMs/Counselors hidden from regular player list, information on UOX3 build version hidden in player-facing pages, and a few other small adjustments
Fixed an issue with archery butte script (js/item/archerybutte.js) where chance of hitting a bullseye was not calculated correctly
UOX3 now responds correctly to logout requests from the client
Fixed reagent requirements for inscribing Explosion spell (thanks, Azzerhoden Razeri)
Removed redundant VALUE tags from JewlerShopping shoplist (thanks, Azzerhoden Razeri)
Reduced combat hit message spam by increasing the lower damage threshold for when they can show up
Added NPC definitions for savage shaman, savage warrior (male and female) and savage rider in dfndata/npc/savages.dfn.
Added special AI scripts for savages and savage shamans, to handle their special abilities
Added tribal paint consumable item (dfndata/items/misc/consumables.dfn)
Added ability to cook tribal paint via flour and tribal berries (js/skill/cooking/flour.js)
Added some helper scripts for magic:
js/magic/helper/check_resist.js (6000) // Test target's resist versus caster and spell circle
js/magic/helper/calc_final_spell_damage.js (6001) // Calculate spell damage from provided base damage
Added a timer-related script that can be used to keep track of long-term timers (up to 49 days) on objects, and which will remove itself from the object when there are no more active timers left. Currently used to keep track of tribal paint applied to players:
js/server/timer/long_term_timers.js (3)
Fixed an issue where player backpacks did not have a max weight set, which could cause issues for scripts that relied on checking max weight of backpack to work
Added new UOX.INI settings to let shard admins control the maximum weight that player backpacks and bankboxes can hold:
MAXPLAYERPACKWEIGHT=40000 // 400.00 stones by default
MAXPLAYERBANKWEIGHT=160000 // 1600.00 stones by default
Fixed an issue where spells setup in JS did not correctly consume reagents when cast (thanks, Azzerhoden Razeri)
Fixed a bug where casting spells would sometimes leave the player in a "frozen" state client-side
Fixed a bug where RECALL=1 was missing from town of Vesper in regions.dfn
Fixed an issue where runebooks did not keep correct count of runes added/dropped (thanks, Azzerhoden Razeri, Dragon Slayer
Fixed an issue where the runebook script would crash because of a misspelled object variable (thanks, Azzerhoden Razeri)
Added missing spell scrolls to the MageShopping shoplist
Added new property for Items and NPCs loaded from DFNs (also available as a JS object property):
sectionID // Keeps track of the [sectionID] an item or NPC originated from
Added support for getting/setting new sectionID property via 'get and 'set commands
Exposed Character properties to JS engine:
.fleeAt // Percentage health threshold for NPC fleeing in combat
.reAttackAt // Percentage health threshold for NPC re-attacking in combat if fleeing
Added new character timer (also available in JS engine) for time between each time a character plays an idle animation
Added 'move as an alias command for 'telestuff (js/commands/targeting/tele.js)
Fixed missing socket reference in bankcheck.js
Added missing tribal paint (js/item/tribal_paint.js), spear (js/item/tribal_spear.js) and bola (js/npc/special/bola_ability.js) scripts
Updated js/item/oilcloth.js to support wiping away tribal paint from the player
Updated js/npc/ai/monster/orc.js AI script to make sure owners of pets attacking the orc will get their orcish kin masks destroyed
Players can no longer use Polymorph spell while incognitoed, or while under effect of tribal paint
Players can no longer use Incognito spell while polymorphed, or while under effect of tribal paint
Facial hair is now removed from players who are under the effects of Incognito spell that changes their gender for female
Expanded the amount of possible house entries in dfndata/house/house.dfn from 255 to 65535
24/10/2022 - ldilley
Fixed cPlayerAction.cpp case in source/CMakeLists.txt (was cplayeraction.cpp).
Added FreeBSD build support for SpiderMonkey, zlib, and UOX3.
Updated README.md with FreeBSD build instructions.
Fixed a compile error due to NULL being defined as nullptr (non-int type) and not 0 (zero)
26/08/2022 - Xuri (0.99.5b-7)
Fixed a missing definition for GetStartTime JS function which would cause an error in the help menu script
Tweaked some messages output to the UOX3 console during startup for improved clarity
25/08/2022 - Xuri (0.99.5b-6)
Increased world load speed by almost 20% by reducing how often loading progress is written to the console
Increased world save speed by almost 50% through the use of binary mode and buffer tweaks for ofstream combined with a cached newline char and std::to_string instead of static_cast
Fixed a server crash involving killing NPCs of a specific spawn region using the 'spawnkill # command
Fixed a server crash involving moving items from decaying corpses to the ground
Fixed a server crash involving carving up human corpses
Fixed a server crash related to AreaCharacterFunction JS function, which could trigger for any script that potentially kills any NPC this function iterates over (like explosion potions)
Fixed a server crash related to GMs attempting to add items from add-menu while having no backpack
Fixed a client crash issue caused by attempting to sell house deeds back to architect NPCs
Fixed an issue where players would get incorrect amounts of gold for selling house deeds back to architect NPCs
Fixed an issue with characters dying onboard boats which prevented players from packing up the boats later
Added new item property in code (via bools bitset) that can be used to enable/disable maker's mark on crafted items. This property can be set to true for items crafted at exceptional quality by GM craftsmen
Exposed the new item property to JS engine:
.isMarkedByMaker // If true, maker's mark will be displayed
Updated default item tooltip to display " of exceptional quality" for items crafted with exceptional quality
Updated default item tooltip to display "[Crafted] by [Crafter's Name]" for exceptional quality items crafted by GM craftsmen. The [Crafted] text comes from the MADEWORD defined in dfndata/skills/skills.dfn for the primary skill used to craft the item
Updated old-school single-click names for items (when AoS bit is disabled in client/server features) to display exceptional status and/or maker's mark for appropriate items
Fixed an issue with the display of titles for NPCs that used dictionary lookups for their title
Added new UOX.INI settings under the [settings] section:
DISPLAYMAKERSMARK=1/0 // Controls if maker's marks on crafted items are shown on a global level
SHOWNPCTITLESOVERHEAD=1/0 // Controls whether NPC titles are shown over their heads
SHOWINVULNERABLETAGOVERHEAD=0/1 // Controls whether invulnerable tags are shown overhead
GLOBALRESTOCKMULTIPLIER=1.0 // Global multiplier applied to RESTOCK property of items when loaded from DFNs
Added new UOX.INI settings under the [combat] section:
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=0/1 // Controls whether NPCs in general can gain skills/stats from combat
Fixed an issue where a player meeting the exact minimum requirements for crafting an item would always fail
Fixed a bug with teleporting off boats to valid nearby locations when double-clicking boat planks while standing on it
Updated behaviour of planks on boats:
Boat key can unlock plank, but won't automatically open it
Boat key used on an open, unlocked plank will lock and automatically close the plank
Boat key used on an open, locked plank will unlock the plank and leave it open
Player using an unlocked plank now opens it
Player using an open plank will disembark (if onboard) or embark (if not) the boat
Player can always open a locked plank if they're on the boat, even with no key, to allow disembarking the boat.
Planks that are open, but locked cannot be accessed from outside the boat, and will close automatically after five of seconds
Updated behaviour of Magic Lock/Unlock spells:
Magic Lock cannot be used on objects inside a multi
Magic Lock applies difficulty to lock based on caster's Magery skill
Magic Lock effect will last between 7 to 50 seconds (depending on caster's Magery skill)
Any object that can be locked via Magic Lock spell can also be unlocked via Magic Unlock spell, if caster has high enough Magery skill
Fixed a bug where certain JS Functions, Methods and Properties would occasionally pass incorrect values to scripts that called upon them. Scripts that rely on the GetCurrentClock() Function, the .GetTimer() Method, .decayTime, .logTime, .oreTime and .fishTime Properties might need to be updated to account for the fix, which causes larger values to be passed in than before.
Fixed a bug related to GetCurrentClock() that caused decay and respawning of dungeon chests from working properly
Fixed a bug related to GetCurrentClock() and .logTime/.fishTime that prevented consumption and regeneration of log/fish resources from working properly
Added a new JS Function:
GetStartTime() // Returns a timestamp for when server started up
Fixed a bug related to GetCurrentClock() where server uptime stats in help menu was showing up incorrectly
Fixed a bug related to GetCurrentClock() and purging of registrations of visitors in public houses so their visits can be counted again later
Fixed a bug related to GetCurrentClock() that caused monster speech to not work properly
Fixed a Z-related issue that sometimes prevented players from fishing when standing on the shoreline next to the sea
Fixed an issue with Animal Lore skill that would always return a pet's loyalty level as "Wild"
Increased max range pets can be from their owner in order to still be included in moongate/teleporter travel from 12 to 24 tiles
Fixed an issue where the alchemy bonus damage for explosion potions was off by an order of magnitude
Fixed an issue where food IDs from foodlists referenced by other foodlists was not detected as valid food for tamed pets or NPCs
Fixed an issue where Alchemy crafting skill did not properly check for the existence of the crafting tool before proceeding with the crafting process
Fixed an issue that prevented the Teleport spell from working as intended
Fixed an issue where players would still get 1 gold even if STARTGOLD in uox.ini was set to 0
Fixed an issue with mount restrictions script that prevented players from mounting Unicorns, Ki-rins and Cu Sidhes
Fixed an issue where aggressive creatures wouldn't stop attacking player after being tamed (js/skill/taming.js)
Added a system message to inform the player when they've dropped out of stealth due to taking too many steps
Fixed an issue where hunger level of NPCs instantly dropped upon spawning because hunger timer was not active yet
Fixed a bug where character corpses would appear with a [unidentified] tag attached
Fixed an issue where the [unidentified] tag did not show up for unidentified magic items
Added ANIMAL tag to a small bunch of creature definitions (dfndata/creatures/creatures.dfn)
Fixed an issue with Bowcraft skill where player could not gain enough skill from crafting bows to reach min requirement for crossbows, and similiarly could not reach min requirement for heavy crossbows from crossbows
Updated default value of MURDERDECAYTIMER INI setting from 60 seconds to 28800 seconds (8 hours), to match the amount of time it would take for one (short term) murder count to decay on LBR-era OSI shards.
10/08/2022 - Xuri (0.99.5b-5)
Fixed an issue involving player deaths and moving items from backpacks to corpses
Fixed NPC Carpenters not selling carpentry tools
Fixed an issue with trashbarrel script (js/server/house/trashbarrel.js) that prevented it from working on stand-alone containers not in a house
Fixed a logic issue that resulted in some crafted items not having full item details show up in tooltips
Fixed an issue where reloading ini file would keep loading in the same starting locations over and over without ever clearing the list, making it grow in size with every reload
15/07/2022 - Xuri
Added new JS Methods for Characters and Items, for getting/setting expiry time for a specific timer belonging to a specific script attached to an object, or to kill said timer completely:
.GetJSTimer( timerID, scriptID )
.SetJSTimer( timerID, timeInMilliseconds, scriptID )
.KillJSTimer( timerID, scriptID )
Added new JS commands:
'getjstimer timerID,scriptID // Spits out remaining time before timer expires
'setjstimer timerID,timeInMilliseconds,scriptID // Updates expiry time for specified timer
'killjstimer timerID,scriptID // Kills specific timer completely
Updated JS Docs with info on the new JS timer-related methods
Updated dictionaries with new lines used by new JS timer-related commands
11/07/2022 - Xuri (0.99.5b-4)
Fixed an issue with incorrect sized Stat Window Info packet (0x11) being sent for clients when only T2A client/server features are enabled, which could cause client to freeze on login
05/07/2022 - Xuri (0.99.5b-3)
Fixed an issue where multis could vanish because multi data was not always correctly saved out to house.wsc; now multi data is saved to the same wsc files as other items instead. UOX3 still reads house.wsc content on world load, but will delete the file on the first world save, as it's no longer needed.
05/07/2022 - punt
Fix for invalid uo directory causing crash
Address an error in the using the error prone generic list (push/pop). Had an additional push, without a corresponding pop
05/07/2022 - Xuri
Wrapped some debug messages related to sockets in debug defines
Adjusted fix for mining to be more flexible with name of tiles
Fixed an issue that caused double saves on shutdown, with second shutdown wiping out some objects because they'd already been unloaded from system after first save
04/07/2022 - Xuri
Fixed an issue with mining that allowed mining on non-valid static tiles
Fixed an issue that prevented boats from moving
Fixed an issue that prevented boats from being blocked by blocking tiles
Fixed an issue where salute and bow emotes got reversed
12/06/2022 (on or about) - punt
Modernized and replaced all mul handling
Changed dynamic allocation of basic classes to static
Perhaps speed improvement
03/06/2022 - punt
Modernized ObjectFactory and replaced external hash with use of unordered_map
31/05/2022 - Xuri
Fixed an issue with the provocation skill (skill/js/provocation.js) that prevented successfully provoked creatures from attacking one another
28/05/2022 - Xuri
Fixed issue in js/server/house/houseCommands.js that caused any attempts to create secure containers in houses to fail (thanks Hughesbuddy!)
23/05/2022 - Xuri
Fix for logic error that prevented stamina loss when shoving past other characters
22/05/2022 - Xuri
Exposed the NPC wander properties FX1, FY1, FX2, FY2 and FZ to the JS engine, and updated get, set and tweak JS commands to handle these
Updated dictionary files with tweak-menu specific messages for NPC wander properties
Fixed an issue with weight calculation when picking up partial piles of items - now uses weight of the specific amount of items picked up on cursor, and not the weight of the full pile
Fixed an issue with weight calculation of bank box contents, which didn't take into account the amount of items in item piles
21/05/2022 - Xuri
The TOOLUSELIMIT and TOOLUSEBREAK ini settings now also properly affect mining tools when enabled
12/05/2022 - Xuri
Fixed an issue where slips counted while using the Healing skill (js/skill/healing_slip.js) would never be reset (thanks Hughesbuddy!)
Adjusted fishing script (js/skill/fishing.js) to reduce the chance of fishing up sea serpents on failure in shallow and deep waters, and also added a chance for players to fish up deep sea serpents while in deep waters
Adjusted scissors script (js/skill/tailoring/scissors.js) to stop preventing use of scissors while the system thinks the player is running, but just show the associated message without any other impact
08/05/2022 - Xuri
Fixed an issue where non-mounted NPCs didn't get proper default values set for mounted walking, running and fleeing speeds
03/04/2022 - Xuri
Fixed a bug with skill check code that resulted in much lower than expected success rate at using skills (non-crafting ones in particular)
Updated code for how the minimum 50% success-rate is calculated for crafters who meet all minimum skill requirements for crafting an item, which previously incorrectly gave crafters a much higher chance of success!
Tweaked how rank is calculated for crafted items to modify the final rank based on base chance of success at crafting item. This brings the chance of crafting exceptional (10/10 rank) items more in line with how difficult this was in LBR era on official shards
Adjusted how estimated chance for crafting exceptional items is calculated in crafting script (js/skill/craft/itemdetailgump.js) to be more in line with what actually takes place in code
22/03/2022 - Xuri
Reverted from using strncpy_s to strncpy due to some unforeseen side effects that could cause script errors and crashes. Additional work might be required in order to safely convert to strncpy_s
Updated 'radd command to provide better feedback when using incorrect syntax. Also added redirects to 'radditem and 'raddnpc commands when "item" or "npc" is detected as a parameter of this command
07/03/2022 - punt
Added all-in-one solution and project files for VS2022 that compiles both UOX3, Spidermonkey and zlib at the same time
Updated cmake project to compile static version of Spidermonkey library
Various source changes made to address warnings
Updated project files and filters to be more consistent between VS2017 and VS2022 solutions (Xuri)
02/03/2022 - Xuri (0.99.5b-2)
Added a new feature that allows shard admins/scripters to mark specific NPCs as "permanently awake", in order to keep UOX3 running scripts, timers and updates for these NPCs even if they are in regions that are "asleep" because of no nearby online players.
A new UOX.INI setting has been added which can turn this feature on/off:
ALLOWAWAKENPCS=0/1 // If disabled, NPCs marked as awake are treated as regular NPCs
New NPC DFN tag added to mark an NPC as awake or not:
AWAKE=0/1 // 0 = disabled (default), 1 = enabled
New Character JS Property added to toggle an NPC's awake state via JS:
.isAwake // 0 = disabled (default), 1 = enabled
'get and 'set commands updated with the new awake property:
'get awake
'set awake 0/1
IP of shard in shard list is now sent to client in little endian instead of big endian, which should correct the ping displayed in shard list, which previously showed a timeout (punt)
28/02/2022 - Xuri
Updated UOX.INI setting NETWORKLOG to actually control logging of network traffic for all connected clients, without needing each socket to have logging enabled via the manual console command 'Z'. This console command can still be used, however, to override a disabled INI setting and enable network traffic logging for connected clients.
Updated 'get and 'set commands to support getting/setting a range of socket properties for a targeted (online) player:
tempInt // int (temporary value)
tempInt2 // int (temporary value)
xText // string (temporary string)
clickX // int (x coordinate of where player clicked with targeting cursor)
clickY // int (y coordinate of where player clicked with targeting cursor)
clickZ // int (z coordinate of where player clicked with targeting cursor)
walkSequence // int (movement sequence number, between 0 and 255)
currentSpellType // int (current spell being cast by a player)
logging // bool (enable to override disabled NETWORKLOG setting)
pickupX // int (x coordinate of where player picked up an item from)
pickupY // int (y coordinate of where player picked up an item from)
pickupZ // int (z coordinate of where player picked up an item from)
pickupSpot // int (0 = nowhere, 1 = ground, 2 = ownpack, 3 = otherpack, 4 = paperdoll, 5 = bank)
language // string (language code)
Fixed an issue where CUSTOMINTTAG in NPC DFNs would not get read properly, but would instead print an (incorrect) warning about how the tag was formatted
27/02/2022 - Xuri
Fixed a server crash related to attempting to play music for non-existent sockets
26/02/2022 - Xuri
Fixed a server crash caused by a couple of items in "stone walls 4" section of add-menu that were missing their ID in ItemMenu.bulk.dfn (thanks, Humility)
Fixed an issue where items added to house (multi) definition would not be attached to the house if their coordinates were not within the boundaries of the house. This prevented the usage of house foundation multis with custom stairs, for instance.
26/02/2022 - Dragon Slayer
Added JS-based help menu accessible via character paperdoll, with modernized style and UI, ability for players to change their password
Minor cleanup and addition of a few extra features to help menu, like a safe teleport option for players who are potentially stuck, updated server info details and integration with UOX3's existing GM paging system as support options (Xuri)
Added new JS functions to retrieve server data used for server stats in help menu:
GetItemCount() // Gets number of items on server
GetMultiCount() // Gets number of multis on server
GetCharacterCount() // Gets number of characters on server
GetServerVersionString() // Gets server version as a string
Added new UOX.INI settings to control safe teleport for stuck players via the Help menu in Paperdoll:
MAXSAFETELEPORTSPERDAY=1 // Max teleports per day, defaults to 1
TELEPORTNEARESTSAFELOC=1 // Teleport player to nearest safe location (1) or random safe location (0)
Added 'res as an alias of 'resurrect command
Added alias names for items in misc_magic.dfn, potions.dfn, reagents.dfn and scrolls.dfn, to allow adding these items using 'add item bloodmoss, or 'add item lesserexplosionpotion
26/02/2022 - punt
Added some error checking for sockets
25/02/2022 - punt
Timing instrumentation added to allow obtaining information to aid in analyzing performance issues




