From d22cf6e1ba83be34232e83fedcfcc1db6165257c Mon Sep 17 00:00:00 2001 From: hydrant Date: Mon, 24 Dec 2018 15:26:38 +0100 Subject: [PATCH] Removed vespucci cardealer, add interior system (teleport missing) --- Client/dlcpacks/vespucci_dealership/dlc.rpf | 3 - Model/DatabaseContext.cs | 3 + Server/Commands/Admin.cs | 81 +++++++++++++++++++++ Server/Entities/Interior.cs | 75 +++++++++++++++++++ Server/Managers/InteriorManager.cs | 27 +++++++ 5 files changed, 186 insertions(+), 3 deletions(-) delete mode 100644 Client/dlcpacks/vespucci_dealership/dlc.rpf create mode 100644 Server/Entities/Interior.cs create mode 100644 Server/Managers/InteriorManager.cs diff --git a/Client/dlcpacks/vespucci_dealership/dlc.rpf b/Client/dlcpacks/vespucci_dealership/dlc.rpf deleted file mode 100644 index dd617679..00000000 --- a/Client/dlcpacks/vespucci_dealership/dlc.rpf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:600fcdcea0bee73c236286d15cdf6ba784791c65eaacb7131cfd4413e653f650 -size 25088 diff --git a/Model/DatabaseContext.cs b/Model/DatabaseContext.cs index a88eb177..c19d3476 100644 --- a/Model/DatabaseContext.cs +++ b/Model/DatabaseContext.cs @@ -96,5 +96,8 @@ namespace reallife_gamemode.Model // Whitelist public DbSet WhitelistEntries { get; set; } + + // Interiors + public DbSet Interiors { get; set; } } } diff --git a/Server/Commands/Admin.cs b/Server/Commands/Admin.cs index 5160393e..925fb356 100644 --- a/Server/Commands/Admin.cs +++ b/Server/Commands/Admin.cs @@ -2111,6 +2111,87 @@ namespace reallife_gamemode.Server.Commands player.TriggerEvent("showTuningMenu"); } + [Command("interior", "~m~Benutzung: ~s~/interior [Add / Remove / SetEnterPosition / SetExitPosition] [Name]")] + public void CmdAdminInterior(Client player, string option1, string option2) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + option1 = option1.ToString(); + + if(option1 != "add" && option1 != "remove" && option1 != "setenterposition" && option1 != "setexitposition") + { + player.SendChatMessage("~m~Benutzung: ~s~/interior [Add / Remove / SetEnterPosition / SetExitPosition] [Name]"); + return; + } + + switch(option1) + { + case "add": + if(InteriorManager.GetInteriorByName(option2) != null) + { + player.SendChatMessage("~r~[FEHLER]~s~ Dieses Interior existiert schon."); + return; + } + using(var dbContext = new DatabaseContext()) + { + Interior interiorAdd = new Interior + { + Name = option2 + }; + dbContext.Interiors.Add(interiorAdd); + dbContext.SaveChanges(); + player.SendChatMessage("~b~[ADMIN]~s~ Das Interior ~y~" + option2 + "~s~ wurde erstellt. ~m~ID: " + interiorAdd.Id); + } + break; + case "remove": + using (var dbContext = new DatabaseContext()) + { + Interior interiorRemove = InteriorManager.GetInteriorByName(option2, dbContext); + if(interiorRemove == null) + { + player.SendChatMessage("~r~[FEHLER]~s~ Dieses Interior existiert nicht."); + return; + } + dbContext.Interiors.Remove(interiorRemove); + dbContext.SaveChanges(); + } + player.SendChatMessage("~b~[ADMIN]~s~ Das Interior wurde gelöscht."); + break; + case "setenterposition": + using (var dbContext = new DatabaseContext()) + { + Interior interior = InteriorManager.GetInteriorByName(option2, dbContext); + if (interior == null) + { + player.SendChatMessage("~r~[FEHLER]~s~ Dieses Interior existiert nicht."); + return; + } + interior.EnterPosition = player.Position; + dbContext.SaveChanges(); + } + player.SendChatMessage("~b~[ADMIN]~s~ Die Eingangs-Position vom Interior ~y~" + option2 + "~s~ wurde gesetzt."); + break; + case "setexitposition": + using (var dbContext = new DatabaseContext()) + { + Interior interior = InteriorManager.GetInteriorByName(option2, dbContext); + if (interior == null) + { + player.SendChatMessage("~r~[FEHLER]~s~ Dieses Interior existiert nicht."); + return; + } + interior.ExitPosition = player.Position; + dbContext.SaveChanges(); + } + player.SendChatMessage("~b~[ADMIN]~s~ Die Ausgangs-Position vom Interior ~y~" + option2 + "~s~ wurde gesetzt."); + break; + } + } + #endregion #region ALevel1338 diff --git a/Server/Entities/Interior.cs b/Server/Entities/Interior.cs new file mode 100644 index 00000000..b6e7e56e --- /dev/null +++ b/Server/Entities/Interior.cs @@ -0,0 +1,75 @@ +using GTANetworkAPI; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; + +namespace reallife_gamemode.Server.Entities +{ + public class Interior + { + [NotMapped] + private Vector3 _enterPosition; + [NotMapped] + private Vector3 _exitPosition; + + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + + public string Name { get; set; } + + [Column("EnterPosition")] + public string EnterPositionStr + { + get + { + return JsonConvert.SerializeObject(this._enterPosition); + } + set + { + this._enterPosition = JsonConvert.DeserializeObject(value); + } + } + + [Column("ExitPosition")] + public string ExitPositionStr + { + get + { + return JsonConvert.SerializeObject(this._exitPosition); + } + set + { + this._exitPosition = JsonConvert.DeserializeObject(value); + } + } + + [NotMapped] + public Vector3 EnterPosition + { + get + { + return this._enterPosition; + } + set + { + this._enterPosition = value; + } + } + [NotMapped] + public Vector3 ExitPosition + { + get + { + return this._exitPosition; + } + set + { + this._exitPosition = value; + } + } + } +} diff --git a/Server/Managers/InteriorManager.cs b/Server/Managers/InteriorManager.cs new file mode 100644 index 00000000..c59eb14b --- /dev/null +++ b/Server/Managers/InteriorManager.cs @@ -0,0 +1,27 @@ +using reallife_gamemode.Model; +using reallife_gamemode.Server.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace reallife_gamemode.Server.Managers +{ + public class InteriorManager + { + public static Interior GetInteriorByName(string name, DatabaseContext dbContext = null) + { + if(dbContext == null) + { + using (dbContext = new DatabaseContext()) + { + return dbContext.Interiors.Where(i => i.Name.ToLower() == name.ToLower()).FirstOrDefault(); + } + } + else + { + return dbContext.Interiors.Where(i => i.Name.ToLower() == name.ToLower()).FirstOrDefault(); + } + } + } +}