From 62e7397d6f0a7197bd09cecaaf7be0a7267ca825 Mon Sep 17 00:00:00 2001 From: hydrant Date: Mon, 4 May 2020 18:16:03 +0200 Subject: [PATCH] /interior list --- .../Commands/Admin/InteriorCommand.cs | 12 ++++++-- .../Managers/InteriorManager.cs | 28 +++++++++++++++---- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/ReallifeGamemode.Server.Core/Commands/Admin/InteriorCommand.cs b/ReallifeGamemode.Server.Core/Commands/Admin/InteriorCommand.cs index 775818ff..9cef568d 100644 --- a/ReallifeGamemode.Server.Core/Commands/Admin/InteriorCommand.cs +++ b/ReallifeGamemode.Server.Core/Commands/Admin/InteriorCommand.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Server.Core.API; @@ -12,7 +13,7 @@ namespace ReallifeGamemode.Server.Core.Commands.Admin { public override string CommandName => "interior"; - public override string HelpText => "[Add / Remove / SetEnter / SetExit][Name / ID]"; + public override string HelpText => "[Add / Remove / SetEnter / SetExit/ List] [Name / ID]"; protected override AdminLevel AdminLevel => AdminLevel.HEADADMIN; @@ -20,9 +21,9 @@ namespace ReallifeGamemode.Server.Core.Commands.Admin { option1 = option1.ToString(); - if (option1 != "add" && option1 != "remove" && option1 != "setenter" && option1 != "setexit") + if (option1 != "add" && option1 != "remove" && option1 != "setenter" && option1 != "setexit" && option1 != "list") { - player.SendMessage("/interior [Add / Remove / SetEnter / SetExit] [Name / ID]", ChatPrefix.Usage); + player.SendMessage("/interior [Add / Remove / SetEnter / SetExit / List] [Name / ID]", ChatPrefix.Usage); return; } @@ -108,6 +109,11 @@ namespace ReallifeGamemode.Server.Core.Commands.Admin interiorManager.LoadInteriors(); } break; + + case "list": + var interiors = interiorManager.GetInteriors(); + player.SendMessage(string.Join(", ", interiors.Select(i => i.Item1 + " (" + i.Item2 + ")")), ChatPrefix.Admin); + break; } } } diff --git a/ReallifeGamemode.Server.Core/Managers/InteriorManager.cs b/ReallifeGamemode.Server.Core/Managers/InteriorManager.cs index a280be96..afbf65f4 100644 --- a/ReallifeGamemode.Server.Core/Managers/InteriorManager.cs +++ b/ReallifeGamemode.Server.Core/Managers/InteriorManager.cs @@ -90,14 +90,14 @@ namespace ReallifeGamemode.Server.Core.Managers _interiorExitColShapes.Remove(interior.Id); } - public ITextLabel GetInteriorEnterTextLabel(Interior interior) => _interiorEnterTextLabels[interior.Id]; - public ITextLabel GetInteriorExitTextLabel(Interior interior) => _interiorExitTextLabels[interior.Id]; + public ITextLabel GetInteriorEnterTextLabel(Interior interior) => _interiorEnterTextLabels.FirstOrDefault(x => x.Key == interior.Id).Value; + public ITextLabel GetInteriorExitTextLabel(Interior interior) => _interiorExitTextLabels.FirstOrDefault(x => x.Key == interior.Id).Value; - public IMarker GetInteriorEnterMarker(Interior interior) => _interiorEnterMarkers[interior.Id]; - public IMarker GetInteriorExitMarkers(Interior interior) => _interiorExitMarkers[interior.Id]; + public IMarker GetInteriorEnterMarker(Interior interior) => _interiorEnterMarkers.FirstOrDefault(x => x.Key == interior.Id).Value; + public IMarker GetInteriorExitMarkers(Interior interior) => _interiorExitMarkers.FirstOrDefault(x => x.Key == interior.Id).Value; - public IColShape GetInteriorEnterColShape(Interior interior) => _interiorEnterColShapes[interior.Id]; - public IColShape GetInteriorExitColShape(Interior interior) => _interiorExitColShapes[interior.Id]; + public IColShape GetInteriorEnterColShape(Interior interior) => _interiorEnterColShapes.FirstOrDefault(x => x.Key == interior.Id).Value; + public IColShape GetInteriorExitColShape(Interior interior) => _interiorExitColShapes.FirstOrDefault(x => x.Key == interior.Id).Value; public int GetInteriorIdFromEnterColShape(IColShape handle) => _interiorEnterColShapes.FirstOrDefault(c => c.Value == handle).Key; public int GetInteriorIdFromExitColShape(IColShape handle) => _interiorExitColShapes.FirstOrDefault(c => c.Value == handle).Key; @@ -134,7 +134,23 @@ namespace ReallifeGamemode.Server.Core.Managers var enterExit = args[1].ToInt(); Interior interior = GetInteriorById(id, GetDbContext()); + + if (interior.ExitPosition == null || interior.EnterPosition == null) + { + player.SendMessage("Dieses Interior ist noch nicht eingerichtet (keine Ein-/Ausgangsposition)", ChatPrefix.Error); + return; + } + player.Position = enterExit == 0 ? interior.ExitPosition : interior.EnterPosition; } + + public IEnumerable<(string, int)> GetInteriors() + { + using var dbContext = GetDbContext(); + foreach (Interior interior in dbContext.Interiors) + { + yield return (interior.Name, interior.Id); + } + } } }