From 5a354fb419114d84c6b550455a63112cb31e0e6d Mon Sep 17 00:00:00 2001 From: Acentech Dev Date: Mon, 20 Jul 2026 22:31:46 +0300 Subject: [PATCH] feat(hs): add Heykel Savasi event map skeleton (map 90) Adds HeykelSavasiMap (BaseMapInitializer, Number=90/World91) as an empty terrain-only skeleton and registers it in GameMapsInitializer. Statue/guard monster definitions and spawns are added by later Heykel Savasi tasks. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../VersionSeasonSix/GameMapsInitializer.cs | 1 + .../VersionSeasonSix/Maps/HeykelSavasiMap.cs | 66 +++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/Persistence/Initialization/VersionSeasonSix/Maps/HeykelSavasiMap.cs diff --git a/src/Persistence/Initialization/VersionSeasonSix/GameMapsInitializer.cs b/src/Persistence/Initialization/VersionSeasonSix/GameMapsInitializer.cs index d85548d..553c312 100644 --- a/src/Persistence/Initialization/VersionSeasonSix/GameMapsInitializer.cs +++ b/src/Persistence/Initialization/VersionSeasonSix/GameMapsInitializer.cs @@ -105,6 +105,7 @@ public class GameMapsInitializer : GameMapsInitializerBase yield return typeof(Debenter); yield return typeof(Uruk); yield return typeof(Ferea); + yield return typeof(HeykelSavasiMap); } } } \ No newline at end of file diff --git a/src/Persistence/Initialization/VersionSeasonSix/Maps/HeykelSavasiMap.cs b/src/Persistence/Initialization/VersionSeasonSix/Maps/HeykelSavasiMap.cs new file mode 100644 index 0000000..6aa1cae --- /dev/null +++ b/src/Persistence/Initialization/VersionSeasonSix/Maps/HeykelSavasiMap.cs @@ -0,0 +1,66 @@ +// +// Licensed under the MIT License. See LICENSE file in the project root for full license information. +// + +namespace MUnique.OpenMU.Persistence.Initialization.VersionSeasonSix.Maps; + +/// +/// The initialization for the Heykel Savasi event map. +/// Statue/guard monster definitions and NPC/monster spawns are added by later +/// Heykel Savasi tasks; for now this is an empty terrain-only skeleton. +/// +/// +/// The MU client loads world folder World{Number + 1}, so server map +/// Number 90 corresponds to client World91. +/// +internal class HeykelSavasiMap : BaseMapInitializer +{ + /// + /// The Number of the Map. + /// + internal const byte Number = 90; + + /// + /// The Name of the Map. + /// + internal const string Name = "Heykel Savasi"; + + /// + /// Initializes a new instance of the class. + /// + /// The context. + /// The game configuration. + public HeykelSavasiMap(IContext context, GameConfiguration gameConfiguration) + : base(context, gameConfiguration) + { + } + + /// + protected override byte MapNumber => Number; + + /// + protected override string MapName => Name; + + /// + protected override byte SafezoneMapNumber => Lorencia.Number; + + /// + protected override IEnumerable CreateNpcSpawns() + { + // Event NPCs are added by later Heykel Savasi tasks. + yield break; + } + + /// + protected override IEnumerable CreateMonsterSpawns() + { + // Statue/guard monster spawns are added by later Heykel Savasi tasks. + yield break; + } + + /// + protected override void CreateMonsters() + { + // Statue/guard MonsterDefinitions are added by later Heykel Savasi tasks. + } +}