Changelog for next UOX3 version (post v0.99.4)

Where we archive the version changelog threads
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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

Code: Select all

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)
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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)
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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)
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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=#
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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
	Misc minor code cleanup
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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 new DFN tag for creatures.dfn - TYPE - which contains a string describing the type of creature
	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, 5 - French, 6 - Portuguese, 7 - Italian, 8 - 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)
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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
-= Ho Eyo He Hum =-
User avatar
Xuri
Site Admin
Posts: 3704
Joined: Mon Jun 02, 2003 9:11 am
Location: Norway
Has thanked: 48 times
Been thanked: 8 times
Contact:

Post by Xuri »

Code: Select all

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
-= Ho Eyo He Hum =-
Locked