Releases: Crypto137/MHServerEmu
Releases · Crypto137/MHServerEmu
0.4.0
Missions
- Implemented story missions. The entire story from the Prologue all the way to Chapter 10 is now playable.
- Implemented legendary missions.
- Implemented shared quests.
- Implemented daily and weekly influence missions.
- Implemented region events.
- Implemented discoveries.
- Implemented metagame-based game modes:
- Patrols (Midtown, Brooklyn, Hightown)
- Cosmic Trial
- X-Defense
- S.H.I.E.L.D. Holo-Sim
- The Age of Ultron
- Infernal Limbo
- Danger Room
- Overhauled the region population system. Mobs and NPCs now spawn dynamically based on what is happening in the region.
- As a result of this, the
WorldEntityRespawnTimeMS
setting no longer makes sense and it has been removed from Config.ini.
- As a result of this, the
- You can now earn bounty chests by defeating enemies in terminals.
- Terminals now reset automatically when you exit the region after defeating the boss. Resetting them manually via the !instance reset command is still possible.
- Match regions are now capped at their intended maximum number of players.
Loot
- Implemented item affix generation.
- Implemented non-item loot types: orbs, currencies, experience points, and more.
- Implemented cooldown-based drops (Eternity Splinters, Cube Shards, etc.).
- Implemented buying items from vendors (including buying back sold items).
- Implemented vendor leveling.
- Implemented legendary item leveling.
- Implemented relics.
- Implemented rare item find (RIF), special item find (SIF), and credits bonuses.
- Implemented various bonus experience sources.
- Implemented loot box items that replace themselves with loot on interaction. This includes fortune cards, story rewards boxes, and more.
- Note: Loot boxes that spawn loot in the game world (e.g. Odin’s Bounty) are not yet implemented.
- Implemented highlights for recently added picked up items and items moved to stash tabs that are not currently being viewed.
- Implemented vanity title unlocking and selection.
- Note: Most sources of vanity title rewards are still not in the game.
- Implemented grid-based loot spawn positions.
Difficulty
- Implemented dynamic combat level (DCL). Enemies across the entire game now scale to your character’s level.
- Implemented difficulty selection. Difficulty currently affects rewards, but does not make combat harder.
- Implemented enemy affixes.
Miscellaneous
- Map exploration now persists when you return to a region.
- Waypoints now need to be unlocked.
- Retargeted the project to .NET 8. The server now requires you to have the .NET 8 Runtime installed to run.
- Implemented various optimizations. This results in improved server startup times (up to 40% in certain scenarios) and reduced game simulation stuttering.
- Improved the save timeout system to mitigate rollbacks under very high load.
- Updated the setup tool:
- Renamed the executable to Setup.exe for clarity.
- Enabled single-file publish.
- Improved game client detection.
- Implemented a Linux compatibility mode.
- This mode can be enabled by using the new
!account togglelinuxmode
command. - Please not that while enabling this mode will allow you to log in using a patched client running on Linux, it disables certain incompatible security measures and will make your account more susceptible to theoretical session hijacking attacks. We do not recommend to use this feature on public servers.
- This mode can be enabled by using the new
- Updated the build process to automatically include the correct version of the SQLite interop library on Linux.
- Implemented performance metrics. These can be accessed using the new
/Metrics/Performance API
endpoint.
Bug Fixes
- Fixed an issue where enemies that have multiple loot table for different difficulty tiers would roll all of them.
- Fixed an issue that caused charge powers to get stuck at 0 charges when transitioning within a region (e.g. going from one floor to another) or swapping to another hero.
- Fixed various issues related to multithreading and server lag.
- Fixed two memory leaks related to entities not being cleared after shutting down their regions.
- Fixed enemies running in place when idle.
- Fixed map icons for distant entities not being able to rotate to bottom left directions.
- Disabled boss teleport powers that caused desynchronization issues between the client and the server. These will be re-enabled in a future update once all the issues are resolved.
Live Tuning
- Implemented global tuning variables:
eGTV_VendorBuyPrice
eGTV_VendorXPGain
eGTV_LootSpecialDropRate
eGTV_LootRarity
eGTV_RespectLevelForGlobalXP
eGTV_RespectLevelForGlobalRIF
eGTV_RespectLevelForGlobalSIF
eGTV_RespectLevelForAvatarXP
eGTV_RespectLevelForRegionXP
eGTV_ServerBonusUnlockLevelOverride
- Implemented world entity tuning variables:
eWETV_MobDropRate
eWETV_MobSpecialDropRate
eWETV_MobDropRarity
eWETV_VendorEnabled
eWETV_EternitySplinterPrice
- Implemented avatar tuning variables:
eAETV_BonusXPPct
eAETV_EternitySplinterPrice
- Implemented region tuning variables:
eRT_BonusXPPct
eRT_BonusItemFindMultiplier
0.3.0
General
- Implemented powers.
- Powers now deal damage when you hold the button down.
- Powers now deal damage to all enemies in their effect radius.
- Powers now have proper activation timing (damage is now dealt during the contact frame rather than instantly).
- Throwable objects now deal damage.
- Powers that have charges now consume charges.
- Added an option called
DisableMovementPowerChargeCost
that disables power charge consumption for player movement powers.
- Added an option called
- Implemented base damage calculations based on tooltip formulas.
- Implemented critical and brutal strike chance and damage multiplier calculations.
- NOTE: Not all power mechanics are currently implemented. Powers that rely on unimplemented mechanics may not deal damage or do anything at all. Unimplemented power mechanics include: resources, conditions (buffs and debuffs), hotspots (areas that deal damage, heal, etc.), summons, bouncing, and more.
- Implemented AI for enemies and friendly NPCs.
- Implemented team-ups and vanity pets. Summoned team-ups persist when transferring between regions or logging out.
- Implemented death and resurrection for avatars and team-ups.
- Overhauled the persistence layer:
- The server now saves player data, avatars, team-ups, items, and controlled entities. This means your progress and inventory contents will no longer be wiped when transferring between regions or logging out.
- Implemented automated database file migration for backward compatibility with save data from older versions of the server.
Account.db
file will now be created on server startup if it does not exist.- Implemented automatic backups of saved data. By default the server saves up to 5 backups with an interval of at least 15 minutes between them. Backup number and frequency can be changed in the
Config.ini
file.
- Implemented avatar and team-up leveling.
- Implemented live tuning. Tuning variables can be adjusted by editing the
LiveTuningData.json
file and applied by invoking the !server reloadlivetuning command in the server console. - Non-critical errors will now shut down the game instance and disconnect players instead of shutting down the entire server.
Items
- Implemented loot tables. Quality and base types should be mostly accurate, but items currently have no affixes.
- Implemented per-player instanced loot. Instanced loot can be disabled in the
Config.ini
file. - Items “purchased” in the in-game store are now added to the player’s inventory.
- Implemented itemized costumes.
- Implemented stash tab unlocks and customization.
- Implemented selling items to vendors.
- Implemented the first iteration of the loot vacuum.
- Implemented expiration timers for items lying on the ground.
Regions
- Implemented private region instances.
- Only you have access to your private instances. In the future parties will also be able to access private instances of the party leader.
- Enemies no longer respawn in private instances.
- You can see your active private instances using the new
!instance list
command. - Private instances reset every 5-10 minutes with default server settings. You can reset your private instances manually using the new
!instance reset
command. You cannot reset the instance you are currently in using this command, so you need to move to another region first. Private instances also reset when you log out.
- Implemented faraway point of interest indicators.
- Using transitions to teleport within the same region now snaps the camera to to the target location rather than doing interpolated movement through environment.
- Using transitions to teleport within the same region with a loading screen (e.g. using an elevator transition in a tower region) no longer causes the player to fully re-enter the region, making loading times faster.
- If you get stuck in an infinite loading screen by warping into an unsafe region that the client does not have assets for, you will now be returned to the default hub region on your next login.
Miscellaneous
- Implemented an option to apply maximum health magnitude bonus to all player avatars via the configuration file. This is a temporary option to compensate for the lack of stats from equipment, and it will be removed at some point later on.
- Implemented JSON output for the web API.
- Implemented
!account download
command that allows you to download your account’s data. This data can be used when playing offline on your own server. - Implemented a number of optimizations:
- Optimized memory management of vector math data structures.
- Optimized handling of network traffic.
- Optimized entity property parameter decoding.
Major Bug Fixes
- Fixed an issue that prevented some of the larger avatars from being able to drop items on the ground.
- Fixed an issue that made it possible for the current avatar to get outside of the player’s area of interest, making it disappear on the client.
- Fixed an issue that was causing some client messages to be be ignored by the server, especially when there were many small messages arriving in a short period of time.
0.2.0
Second stable release.
Major New Features
- Overhauled the area of interest system: clients are now notified of what is happening on the server in real time, allowing you to, for example, see enemies respawn.
- Implemented multiplayer: you can now see other players logged into the same server in-game and interact with them.
- Avatar swapping now happens in-game with no loading screens.
- Implemented the inventory system: you can pick up and drop items to the ground, stack them, equip and unequip them, see items equipped on nearby avatars. Currently there is no inventory persistence, so inventories are wiped when you log out or transfer between regions.
- Enemies now drop loot. Currently the loot system uses a placeholder loot table for all enemies, and there is no affix generation. The placeholder loot table includes crafting elements, relics, artifacts, rings, runeword glyphs, costumes, and pets.
- Implemented the navi system: the server now has a representation of the world geometry, which we currently use for basic collision detection when spawning enemies and dropping items. In the future this will also be used for systems such as pathfinding and AI.
- Implemented physics and locomotion systems, which makes it possible to synchronize world entity movement between clients.
Other Changes
- Overhauled server architecture: the server is now divided into replaceable services.
- Improved handling of situations when multiple clients are attempting to use the same account.
- Implemented saving and loading of the default account data used when authentication bypass is enabled.
- Overhauled archive serialization and protobuf message parsing.
- Overhauled game simulation timing and event scheduling.
- Implemented in-engine cutscene playback for prologue regions.
- Implemented default configuration values, allowing the server to start with options missing in the Config.ini.
- Region cleanup and entity respawn intervals are now configurable.
- Implemented various new chat commands. Here are some of them:
- !item give [pattern] – searches for an item prototype matching the provided pattern, generates an item and adds it to the player’s inventory.
- !item drop [pattern] – searches for an item prototype matching the provided pattern, generates an item and drops it to the ground.
- !region warp [pattern] – searches for a region matching the provided pattern and teleports the player there.
- !server broadcast [text] – broadcasts a notification to all players on the server.
- Implemented world entity power collections, which makes it possible to add and remove powers available for specific world entities to use.
- Implemented world entity condition collections, which makes it possible to add and remove condition effects (buffs and debuffs) to/from world entities.
- Implemented various game data tables that are used to simplify access to some of the data contained in the game database.
- Numerous other small optimizations and improvements.
0.1.0
Initial release.
Features
-
Client-server network protocol implementation.
-
Basic multiplayer functionality: handling multiple clients, remote connections, chat.
-
Implementation of the proprietary static game data management system used by the game.
-
Fully-featured implementation of DRAG (dynamic random area generator).
-
Spawning of entities, including NPCs, enemies, and interactable objects, across the entire game.
-
Hero and costume selection.
-
Rudimentary implementation of hero powers.
-
Account system with simple web API for registering new accounts.