Hybrasyl Server 0.9.3 ("Glioca")
0.9.3 is jam packed full of bug fixes and features (item procs, combat log, religious faith, elemental resistances & augments, new Lua scripting hooks, and more).
New Features
- Combat log - This can be enabled or disabled using /combatlog and is displayed as a guild/party equivalent message
- Localizations can now define locales and the server can define a locale at startup which is recognized by world
- Add proc support (either castables or scripted events) for items and equipment, initially supporting on use, on hit, and on cast events
- The
$
whisper target (which can be used to run arbitrary scripting commands) now supports the execution of multiline adhoc scripts usingbegin
andend
- [HS-1130] Implement bind on pickup and handle many edge cases related to weight / etc as a result
- [HS-1246] Allow vendors to run checks to determine whether they provide training / vendor / mail / repair / bank services to a player
- [HS-1250] Implement merchant voice triggers for repair, deposit, withdraw, selling, and asking how much gold or items are on deposit
- [HS-1253] Lua scripts can now spawn monsters
- [HS-1261] Lua scripts can register custom death handlers for monsters
- [HS-1269] Enable formulas for reactor calculations
- [HS-1270] Add scaling support to GiveExperience() in scripting
- [HS-1271] Give scripts enhanced ability to access item properties
- [HS-1275] Signs can display effects when they enter a user's field of view
- [HS-1276] Enable resistances & augments (elemental buff/debuff for both attackers and defenders)
- [HS-1277] Support religious faith fully as an attribute (stat, formulas, etc)
- [HS-1288] Scripts can now register quest metadata (client quest display support)
- [HS-1290] Reactor number of uses can be a formula
- [HS-1291] Weapons and creatures can override default assail sounds
- [HS-1297] Castables can inherit element from equipment or buff/debuffs
- [HS-1298] Monsters can declare immunities to spells in XML
Bugs / Tickets Addressed
- Correct issues where mail flag (flashing icon on client) was not always correctly set
- Formulas for statuses were not evaluated if a castable was not responsible for applying the status
- Correct error in OnHear where scripted events were no longer receiving SpokenEvent events
- Item names were not always accessible via scripting
- Ensure procs run when castables are used for all cases
- Update MR/Damage/Regen/Hit to be percentages with appropriate display on client side
- [HS-758] Fix certain edge cases with slot restrictions for items
- [HS-802] Training dummy issues
- [HS-847] /group command now uses popup similar to group invites
- [HS-1024] Fixes to traps & trap abilities
- [HS-1051] Caoin Cath doesn't stun nearby monsters
- [HS-1130] Fix force drop exploit for certain edge cases
- [HS-1224] Monks can learn and see multiple forms
- [HS-1230] Fix various errors with spell dialogs
- [HS-1247] SetNPCDisplaySprite() in scripting not functioning correctly
- [HS-1248] Implement HasKilled support in Lua scripts for quests to use
- [HS-1256] Logging into a map with a non-existent NPC results in infinite loading screen
- [HS-1265] Regeneration not really working at all even remotely like expected
- [HS-1266] Selling items via chat gives different gold than selling directly to merchant
- [HS-1267] Improve implementation of regen / mr / hit / damage and client display of such
- [HS-1272] Creatures do not respect hostility settings
- [HS-1273] Selling stacked items doesn't remove them from inventory
- [HS-1282] Dropped items no longer appearing on ground
- [HS-1283] Fix unevaluated $TOKENS used by $NPCs
- [HS-1285] Spawngroups with coordinate spawns defined should use the number of coordinate pairs defined as a maximum
- [HS-1286] Bonus experience is overly generous & also doesn't display penalty / bonus exp
- [HS-1287] RemoveSpell() in scripts does not remove spells correctly
- [HS-1294] Handle removal of invisibility correctly
- [HS-1305] Random strings appear in chat window
- [HS-1307] Castables should prefer closest targets first
- [HS-1308] Fix log filtering & add admin command to allow logging levels to be changed
- [HS-1309] Reloading a map results in it not being able to be loaded again by a player
- [HS-1311] Expose element in damage to scripting
- [HS-1317] Fix certain rubberbanding effects on transitions
- [HS-1318] Combat log cannot be disabled
- [HS-1324] Reactor sprites do not disappear when reactor expires
Code Improvements & Refactoring
- [HS-1315] Simplify variant expressions in XML and unify handling of itemvariants
- [HS-1331] Simplify heal expressions in XML
- [HS-1332] Simplify damage expression in XML
- Upgrade to .NET 7
- Upgrade to latest version of xsd2code
- Unit tests can now test and use packet handlers
- Enforce separation between WorldState / WorldData using new IStatestorable interface
- Separate out all XML entity access to XmlManager (using Hybrasyl.Xml library)
- Rename WorldDataStore -> WorldStateStore & remove XML entity support from it
- Update code as needed to match new IWorldDataManager API
- Fix failing tests here and there
- Remove Hybrasyl WorldMap object, as it is no longer needed
- Rename Hybrasyl Map object to MapObject (similar to ItemObject) and update to use new patterns
- Disable XML reloading for now (to be reimplemented before 1.0)
- Update world constructor to allow IWorldDataManager to be injected into it at runtime
- Remove LoadData / etc from Hybrasyl as it is now handled by the data manager
- Update Hybrasyl to support setting data dir / log dir / world data dir from command line or env variables
- Clean up Map.cs and move classes to where they belong
- Remove ResolveVariant as it is now handled by the data manager
- Remove path helpers as they are now obsolete