From 917831e198c476d89b2175f8d7d28d1dba724020 Mon Sep 17 00:00:00 2001 From: Acentech Dev Date: Tue, 21 Jul 2026 01:18:54 +0300 Subject: [PATCH] feat(hs): import LoL map (server 92 / World93) + real base & statue coords - Embed Terrain93.att (server map No 92 -> loads Terrain93); map Number 90->92. - Real walkable coords from the LoL arena diamond (center lane x=42): Red base (42,10) top tip, Blue base (42,92) bottom tip; 7 statues per team along x=42. - Client World93 + Object93 deployed to PC client separately. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../MiniGames/HeykelSavasiContext.cs | 36 +++++++++--------- ...e.OpenMU.Persistence.Initialization.csproj | 2 + .../Initialization/Resources/Terrain93.att | Bin 0 -> 65539 bytes .../Initialization/VersionSeasonSix/Gates.cs | 4 +- .../VersionSeasonSix/Maps/HeykelSavasiMap.cs | 2 +- 5 files changed, 23 insertions(+), 21 deletions(-) create mode 100644 src/Persistence/Initialization/Resources/Terrain93.att diff --git a/src/GameLogic/MiniGames/HeykelSavasiContext.cs b/src/GameLogic/MiniGames/HeykelSavasiContext.cs index 4f784e8..f432802 100644 --- a/src/GameLogic/MiniGames/HeykelSavasiContext.cs +++ b/src/GameLogic/MiniGames/HeykelSavasiContext.cs @@ -33,25 +33,25 @@ public class HeykelSavasiContext : MiniGameContext /// The X1/Y1 anchor of the red team's base spawn gate. /// Must match Gates.cs targetGates 600 (RedBase). /// - private const byte RedBaseAnchorX1 = 20; + private const byte RedBaseAnchorX1 = 42; /// /// The X1/Y1 anchor of the red team's base spawn gate. /// Must match Gates.cs targetGates 600 (RedBase). /// - private const byte RedBaseAnchorY1 = 20; + private const byte RedBaseAnchorY1 = 10; /// /// The X1/Y1 anchor of the blue team's base spawn gate. /// Must match Gates.cs targetGates 601 (BlueBase). /// - private const byte BlueBaseAnchorX1 = 220; + private const byte BlueBaseAnchorX1 = 42; /// /// The X1/Y1 anchor of the blue team's base spawn gate. /// Must match Gates.cs targetGates 601 (BlueBase). /// - private const byte BlueBaseAnchorY1 = 220; + private const byte BlueBaseAnchorY1 = 92; /// /// The number of statues (per team) which need to be broken by the opposing team to win the event. @@ -112,13 +112,13 @@ public class HeykelSavasiContext : MiniGameContext /// private static readonly Point[] RedStatuePositions = { - new(100, 100), - new(88, 88), - new(77, 77), - new(65, 65), - new(53, 53), - new(42, 42), - new(30, 30), + new(42, 51), + new(42, 45), + new(42, 38), + new(42, 31), + new(42, 25), + new(42, 15), + new(42, 8), }; /// @@ -129,13 +129,13 @@ public class HeykelSavasiContext : MiniGameContext /// private static readonly Point[] BlueStatuePositions = { - new(140, 140), - new(152, 152), - new(163, 163), - new(175, 175), - new(187, 187), - new(198, 198), - new(210, 210), + new(42, 53), + new(42, 59), + new(42, 66), + new(42, 73), + new(42, 79), + new(42, 87), + new(42, 94), }; private readonly IGameContext _gameContext; diff --git a/src/Persistence/Initialization/MUnique.OpenMU.Persistence.Initialization.csproj b/src/Persistence/Initialization/MUnique.OpenMU.Persistence.Initialization.csproj index 00da802..1328150 100644 --- a/src/Persistence/Initialization/MUnique.OpenMU.Persistence.Initialization.csproj +++ b/src/Persistence/Initialization/MUnique.OpenMU.Persistence.Initialization.csproj @@ -25,6 +25,7 @@ + @@ -109,6 +110,7 @@ + diff --git a/src/Persistence/Initialization/Resources/Terrain93.att b/src/Persistence/Initialization/Resources/Terrain93.att new file mode 100644 index 0000000000000000000000000000000000000000..b088a63a475c2f0fe5515dec6bc4ca3691835787 GIT binary patch literal 65539 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 /// The Number of the Map. /// - internal const byte Number = 90; + internal const byte Number = 92; /// /// The Name of the Map.