diff --git a/Assets/Gothic-Core/Scripts/Models/Config/DeveloperConfig.cs b/Assets/Gothic-Core/Scripts/Models/Config/DeveloperConfig.cs index 97a281486..dec786208 100644 --- a/Assets/Gothic-Core/Scripts/Models/Config/DeveloperConfig.cs +++ b/Assets/Gothic-Core/Scripts/Models/Config/DeveloperConfig.cs @@ -291,5 +291,14 @@ public class DebugChannelTypesCollection : CollectionWrapper(); + + if (_configService.Dev.EnableLevel5Cheat) + buttons.Add(("Level +5", CheatAddLevels)); + + if (_configService.Dev.EnableGuildCheat) + buttons.Add(("Guild → Novice", CheatToNovice)); + + if (_configService.Dev.EnableTimeSkip) + buttons.Add(("Skip Time +30min", SkipTime30Min)); + + const float buttonHeight = 50f; + const float gap = 10f; + var totalHeight = buttons.Count * buttonHeight + (buttons.Count - 1) * gap; + var startY = totalHeight / 2f - buttonHeight / 2f; + + for (var i = 0; i < buttons.Count; i++) + { + var (label, onClick) = buttons[i]; + CreateButton(label, onClick, startY - i * (buttonHeight + gap)); + } + } + + private void CheatAddLevels() + { + const int levelsToAdd = 5; + var hero = _npcService.GetHeroContainer(); + var oldLevel = hero.Instance.Level; + hero.Instance.Level += levelsToAdd; + hero.Instance.Lp += levelsToAdd * 10; + var hpMax = hero.Vob.GetAttribute(1) + levelsToAdd * 12; + hero.Vob.SetAttribute(1, hpMax); + hero.Vob.SetAttribute(0, hpMax); + _npcService.SyncHeroInstanceToVob(); + Logger.Log($"[MarvinMode] Level cheat: {oldLevel}→{hero.Instance.Level} (+{levelsToAdd * 10} LP, +{levelsToAdd * 12} HP_MAX)", LogCat.Ui); + } + + private void CheatToNovice() + { + var hero = _npcService.GetHeroContainer(); + hero.Props.TrueGuild = VmGothicEnums.Guild.GIL_NOV; + Logger.Log("[MarvinMode] Guild cheat: set to GIL_NOV", LogCat.Ui); + } + + private void SkipTime30Min() + { + var t = _gameTimeService.GetCurrentTime(); + var next = t.Add(System.TimeSpan.FromMinutes(30)); + _gameTimeService.SetTime(next.Hours, next.Minutes); + _npcRoutineService.RecalculateAllNpcRoutines(); + Logger.Log($"[MarvinMode] Time skip → {next.Hours:D2}:{next.Minutes:D2}", LogCat.Ui); + } + + private void CreateButton(string label, System.Action onClick, float anchoredY) + { + var go = _resourceCacheService.TryGetPrefabObject(PrefabType.UiDebugButton, parent: gameObject); + if (go == null) + { + Logger.LogWarning($"[MarvinMode] UiDebugButton prefab not found for: {label}", LogCat.Ui); + return; + } + + var rt = go.GetComponent(); + if (rt != null) + rt.anchoredPosition = new Vector2(0f, anchoredY); + + var text = go.GetComponentInChildren(); + if (text != null) + text.text = label; + + var button = go.GetComponentInChildren