Commit graph

170 commits

Author SHA1 Message Date
Xoduz
db54fda02c Misc fixes
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
2022-11-01 02:25:52 +08:00
Xoduz
c4143e2309 Player vendor fixes
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
2022-10-30 03:52:44 +08:00
Xoduz
75250e62cb Couple more changes 2022-10-24 23:42:16 +08:00
Xoduz
37a76083de Rest of the changes for 0.99.6-RC1
Misc cleanup and standardization of style and naming conventions in code and scripts
Added missing code for showing race in paperdoll based on ini setting
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 the effects of tribal paint
Facial hair is now removed from players who are under the effects of Incognito spell that changes their gender for female
2022-10-24 18:39:33 +08:00
Xoduz
80a52e3a83 Misc changes
Added some missing DFN data for svvages
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
Included missing code for HasScriptTrigger JS function
Added new character timer (also available in JS engine) for time between each time a character plays an idle animation
2022-10-22 16:47:06 +08:00
Xoduz
68e57b0756 UOX3 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.
2022-08-25 02:13:00 +08:00
Charles Kerr
a9c30281ef char* to string 2022-06-15 19:19:40 -04:00
Charles Kerr
9d1a21c54a General cleanup 2022-06-08 10:38:16 -04:00
Charles Kerr
01b46f26db STRINGLIST modernization
NOte, many method calls are passing copies of collections. Did not change, as that could change functionality (unlikely), but this is a syntax only exerersize.

Just changing value (copes) to reference (and provide a const/nonconst method) would see a  noticeable speed difference.
2022-06-06 11:27:53 -04:00
Xoduz
30c060d2af Exposed NPC wander type properties to JS engine
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
2022-05-22 03:11:40 +08:00
Charles Kerr
d540835eb4 2022 project filters, and name change for strutil 2022-03-04 07:35:46 -05:00
Xoduz
f461e62825 0.99.5b-2 - Fix for ping in shardlist, and support for always awake NPCs
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)
2022-03-02 19:50:52 +08:00
Xoduz
e9279919d5 UOX3 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.
2022-02-25 20:30:20 +08:00
Xoduz
85e33d8a46 UOX3 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
2022-02-13 22:49:37 +08:00
Xoduz
8148b8ccfb 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
2022-01-24 17:58:19 +08:00
Xoduz
c4dc320719 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
2022-01-10 07:33:51 +08:00
Xoduz
31a9e6b1e6 More updates to crafting system
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 limted 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
2022-01-01 07:58:45 +01:00
Xoduz
4cf424d0a8 Misc small fixes
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
2021-12-19 17:57:57 +08:00
Xoduz
ce10584755 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
2021-11-26 02:19:03 +08:00
Xoduz
4023794087 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 (east)
	training dummy (south)
	pickpocket dip 1 (east)
	pickpocket dip 2 (east)
	dresser (east) // Disabled, doesn't work as container after being turned into addon
	dresser (south) // Disabled, doesn't work as container after being turned into addon
	abattoir (stone pentagram)
	flour mill (east)
	flour mill (south)
	oven (east)
	oven (south)
	large forge (east)
	large forge (west)
	large forge (north)
	large forge (south)
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
2021-10-31 10:43:24 +08:00
Xoduz
8b8fd68972 Fixed a few issues, exposed a couple of Char properties to JS
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
2021-10-24 01:55:33 +08:00
Xoduz
8e6288e3f7 Misc updates
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
2021-09-22 02:49:45 +08:00
Xoduz
69a8c090cd 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!
2021-09-20 21:35:17 +08:00
Xoduz
eb35fc4c8b Improvements for feature negotiation with assistant tools
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
2021-08-08 16:41:24 +08:00
Xoduz
82a3ef5386 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
2021-08-08 01:57:25 +08:00
Xoduz
fff6154c19 Added new resource type tracked by UOX3 in resource regions - fish
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
2021-08-01 19:58:04 +08:00
Xoduz
f87cef802f Updates to scissors and tailoring
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

Co-Authored-By: Dragon Slayer <85514184+DragonSlayer62@users.noreply.github.com>
2021-08-01 18:25:31 +08:00
Xoduz
c9e4c29367 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)
2021-07-28 16:02:56 +08:00
Charles Kerr
61a20c1dd9 more stripTrim Removal 2021-07-19 14:59:19 -04:00
Charles Kerr
44072729a7 Addressed compile issues on macOS
removed double declaration of retail in Socket.cpp, and addressed passing of a temporary string to a method (stripTrim) by reference
2021-07-18 22:08:54 -04:00
Xoduz
e33fd0876a Misc updates
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
2021-07-06 07:05:13 +08:00
Xoduz
c1283e2ae6 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
2021-07-04 07:57:42 +08:00
Xoduz
6ca9ddc6f2 Various code/warning cleanup
Fixed an issue with ItemID skill where using the skill on a crafted item would not output a result if creator of item was unknown
Command logs now also include any parameters used with a command
Fixed an issue where messages used with CustomTarget JS function would not get truncated properly if longer than the allowed maximum length
Fixed some instances of potential buffer overrun and/or out-of-bounds memory access
Fixed some potential null pointer dereferences
Fixed a couple instances of missing breaks in switch cases
Added [[maybe_unused]] attributes in places where return values are intentionally unused
Added [[fallthrough]] attributes in places where switch case fallthroughs are intentional
Misc minor code cleanup
2021-07-04 02:26:43 +08:00
Xoduz
4e0608ff9f Exposed crafting entries from create DFNs to JS engine
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
2021-06-30 00:00:48 +08:00
Charles Kerr
75fc56b0dd NULL to nullptr 2021-06-12 07:30:23 -04:00
Xoduz
c508572352 Thirst system addition
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 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)

Co-Authored-By: DragonSlayer62 <85514184+DragonSlayer62@users.noreply.github.com>
2021-06-11 04:03:16 +08:00
Xoduz
343ee8b293 First iteration of support for damageable items/multis
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
2021-06-03 06:14:56 +08:00
Xoduz
52ed2376f3 Some maintenance changes
Replaced UOX_MIN and UOX_MAX with std::min and std::max (punt)
Moved StringUtility functions into a new namespace: strutil (punt)
2021-05-27 05:42:35 +08:00
Xoduz
2265f52202 Minor JS revamp - multiple scripts per object!
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
	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
	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)
	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)
2021-05-25 19:37:52 +08:00
Xoduz
4110086944 UString to std::tsring
More UString instances replaced by std::string and associates (punt)

Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-24 04:21:57 +08:00
Xoduz
0bee2f33b5 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)

Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-23 02:13:17 +08:00
Xoduz
2445f39564 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!
2021-04-19 01:11:25 +08:00
Xoduz
69c20fbc42 Added ability to ban/unban players
Added new helper function to get amount of minutes that have passed since midnight 01/01/1970 UTC - GetMinutesSinceEpoch()
Converted wTimeBan property of CAccountBlock from UI16 to UI32
Added check during login for timeban account property. If a timeban is in place, player will be unable to login until after the ban is over.
Added JS property for Account JS Object:
	.timeban 			// Time in minutes that user is banned
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
2021-04-17 17:28:12 +08:00
Xoduz
9ea15ac7b3 Fixes for Console behaviour on Linux and Windows, addition of JS properties for user accounts
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.

Co-Authored-By: Charles Kerr <punt1959@users.noreply.github.com>
2021-04-16 21:14:50 +08:00
Xoduz
5381092ddd JS Region Properties and misc
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
2021-04-14 21:12:59 +08:00
Xoduz
c76a41215f 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 ??? (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)
2021-04-08 18:54:15 +08:00
Xoduz
8c2c1de962 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
2021-03-22 05:59:20 +08:00
Xoduz
77901a697c Various teleport fixes - v0.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
2020-11-19 05:04:34 +08:00
Xoduz
ce17a71e85 Misc Pathfinding fixes and other things - v0.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
2020-11-15 02:59:45 +08:00
Xoduz
d7ac5c3218 Housing Revamp and more
Updated JS SysMessage function to accept up to 10 extra, optional arguments, which can be used with dictionary messages that require additional parameters like %s or %i
Added new type of house privilege in cMultiObj.cpp to keep track of friends of the multi - HOUSEPRIV_FRIEND - which is stored during worldsaves as one or more Friend=<player serial> tags in house.wsc
Added new type of house privilege in cMultiObj.cpp to keep track of guests of the multi - HOUSEPRIV_GUEST - which is stored during worldsaves as one or more Guest=<player serial> tags in house.wsc
When items are created for houses upon house placement, a reference to the multi's serial is now stored in the house sign's MORE property to allow easier tracking of which house a particular sign belongs to
Added tracking of new, persistent properties for houses via cMultiObj.cpp/h:
	lockdowns, secure containers, vendors, guests, friends, owners, ban location, public status, number of visits, timestamps
Added a multitude of  new methods in cMultiObj.cpp/h to assist in improving the functionality of houses
Added new tags for houses in house.dfn (default values applied if tag not specified):
	MAXSECURECONTAINERS=4 - Max amount of secure containers allowed in a multi
	MAXLOCKDOWNS=256 - Max amount of lockdowns allowed in a multi
	MAXVENDORS=10 - Max amount of vendors allowed in a multi
	MAXBANS=50 - Max amount of bans in a multi's ban list
	MAXFRIENDS=50 - Max amount of friends in a multi's friend list
	MAXGUESTS=50 - Max amount of guests in a multi's guest list
	MAXOWNERS=8 - Max amount of owners and co-owners in a multi's owner list
	MAXTRASHCONTAINERS=1 - Max amount of trash containers allowed in multi
	SCRIPT=<scriptID> - Assign a JS script-ID directly to a multi
	FRONTDOOR - indicates that a door is the front door of a house. Cannot be locked in public houses!
	INTERIORDOOR - indicates that a door is an interior door of a house. Can be locked in public houses.
	BANX - Location X offset for multi's ban location, if not used, will try to use SE corner of multi instead
	BANY - Location Y offset for multi's ban location, if not used, will try to use SE corner of multi instead
Added JS Event:
	onHouseCommand( tSock, multiObj, cmdID ) - For handling spoken house commands via JS scripts attached to multi.
Updated JS Events:
	onEntrance() - can now trigger both for multi being entered and/or object entering
	onLeaving() - can now trigger both for multi being left and/or object entering
	onSpeech() - can now also trigger for items (in addition to chars) with event & script attached, if UOX.INI setting ITEMSDETECTSPEECH is enabled
Added JS Multi methods:
	.IsBoat() - Returns whether the item (or multi) is a boat
	.IsOwner( playerToCheck ) - Returns whether a player is the owner of a multi
	.IsOnOwnerList( playerToCheck ) - Returns whether a player is on the (co-)owner list of a multi
	.IsOnFriendList( playerToCheck ) - Returns whether a player is on the friend list of a multi
	.IsOnGuestList( playerToCheck ) - Returns whether a player is on the guest list of a multi
	.IsOnBanList( playerToCheck ) - Returns whether a player is on the ban list of a multi
	.AddToFriendList( playertoAdd ) - Adds player to the friend list of a multi
	.RemoveFromFriendList( playertoRemove ) - Removes player from the friend list of a multi
	.AddToGuestList( playertoAdd ) - Adds player to the guest list of a multi
	.RemoveFromGuestList( playertoRemove ) - Removes player from the guest list of a multi
	.ClearOwnerList() - Clears all entries from a multi's (co-)owner list
	.ClearFriendList() - Clears all entries from a multi's friend list
	.ClearGuestList() - Clears all entries from a multi's guest list
	.ClearBanList() - Clears all entries from a multi's ban list
	.SecureContainer( itemToSecure ) - Secures a container in a multi
	.UnsecureContainer( itemToUnsecure ) - Unsecures a container in a multi
	.IsSecureContainer( itemToCheck ) - Checks if specified item is a secure container in a multi
	.LockDownItem( itemToLockDown) - Locks down an item in a multi
	.ReleaseItem( itemToRelease ) - Releases a locked down item in a multi
	.KillKeys() - Deletes ALL keys associated with a multi
	.AddTrashCont( itemToAdd ) - Add trash container to multi's list of trash containers
	.RemoveTrashCont( itemToRemove ) - Remove trash container from multi's list of trash containers
Added JS Item (Multi only) properties:
	.lockdowns - Get the number of lockdowns in a multi
	.maxLockdowns - Get/Set the max number of lockdowns allowed in a multi
	.secureContainers - Get the number of secure containers in a multi
	.maxSecureContainers - Get/Set the max number of secure containers allowed in a multi
	.trashContainers - Get the number of trash containers in a multi
	.maxTrashContainers - Get/Set the max number of trash containers allowed in a multi
	.friends - Get the number of friends in a multi's friend list
	.maxFriends - Get/Set the max number of friends allowed in a multi's friend list
	.guests - Get the number of guests in a multi's guest list
	.maxGuests - Get/Set the max number of guests allowed in a multi's guest list
	.owners - Get the number of owners in a multi's owner list
	.maxOwners - Get/Set the max number of owners allowed in a multi's owner list
	.bans - Get the number of banned players in a multi's ban list
	.maxBans - Get/Set the max number of banned players allowed in a multi's ban list
	.vendors - Get the number of player vendors in a multi
	.maxVendors - Get the max number of player vendors allowed in a multi
	.deed - Get the item sectionID for deed used to place multi
	.isPublic - Get/Set the private/public state of a multi
	.buildTimestamp - Get the timestamp for when the house was originally placed
	.tradeTimestamp - Get the timestamp for when the house was last traded to another player
	.banX - Get/Set the ban location X offset for the multi
	.banY - Get/Set the ban location Y offset for the multi
Added JS Character properties:
	.multi = Get/Set the multi object the character is in
	.accountNum = Get the account number the character belongs to
	.housesOwned = Get a count of houses owned by the character
	.housesCoOwned = Get a count of houses co-owned by the character
Updated JS cBaseObject Methods .FirstItem(), .NextItem() and .FinishedItems() to also support iterating through items in multis
Updated JS multi Methods .FirstChar(), .NextChar() and .FinishedChars() to support an additional parameter to specify what kind of characters to loop through:
	"default" or no parameter - all characters inside the multi
	"owner" - players on multi's owner list
	"friend" - players on multi's friend list
	"guest" - players on multi's guest list
	"banned" - players on multi's ban list
Added new INI tags to a new section of uox.ini called [houses]
	DECAYTIMERINHOUSE=3600 // Decay timer in seconds for non-locked down items inside houses
	PROTECTPRIVATEHOUSES=1 // Toggles whether private houses will automatically boot unauthorized visitors (1) or not (0)
	TRACKHOUSESPERACCOUNT=1 // Toggles whether to track (and restrict) house ownership per account (1) or per character (0)
	MAXHOUSESOWNABLE=1 // Specifies the max amount of houses a player can own per account/char, depending on how house ownership is tracked
	MAXHOUSESCOOWNABLE=10 // Specifies the max amount of houses a player can co-own per character
	CANOWNANDCOOWNHOUSES=1 // Toggles whether players can own and co-own houses at the same time
	COOWNHOUSESONSAMEACCOUNT=1 // Toggles whether characters on same account as house owner will be treated as co-owners
Added new INI tags in [settings] section of uox.ini:
	ITEMSDETECTSPEECH=0 // If enabled, server will search for nearby items with onSpeech JS event running whenever a character speaks. Disabled by default.
	MAXPLAYERPACKITEMS=125 // Defines max item capacity for player (and NPC) backpacks. Defaults to 125.
Moved most of the existing house functionality to JS and expanded upon it to reach feature parity with houses in regular UO around Publish 15/16, with various extras thrown in for good measure and all functionality being customizable:
	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
2020-11-04 02:00:37 +08:00