From 41d756c4d2a95962b4d0f93cd7eaa63f21ebe8a1 Mon Sep 17 00:00:00 2001 From: hydrant Date: Sat, 11 May 2019 22:10:53 +0200 Subject: [PATCH] add option to park vehicles in vehicle menu --- .../Gui/vehiclemenu/main.ts | 2 + .../ReallifeGamemode.Client.csproj | 6 +- .../assets/html/vehiclemenu/index.html | 4 +- .../assets/img/vehiclemenu/park.png | Bin 0 -> 7575 bytes ReallifeGamemode.Server/Events/VehicleMenu.cs | 71 +++++++++++++++++- .../Extensions/VehicleExtension.cs | 5 +- .../Managers/SaveManager.cs | 10 --- .../Managers/VehicleManager.cs | 24 ++---- 8 files changed, 83 insertions(+), 39 deletions(-) create mode 100644 ReallifeGamemode.Client/assets/img/vehiclemenu/park.png diff --git a/ReallifeGamemode.Client/Gui/vehiclemenu/main.ts b/ReallifeGamemode.Client/Gui/vehiclemenu/main.ts index eb6283b1..ed30ef45 100644 --- a/ReallifeGamemode.Client/Gui/vehiclemenu/main.ts +++ b/ReallifeGamemode.Client/Gui/vehiclemenu/main.ts @@ -41,6 +41,8 @@ export default function vehicleMenu() { case 3: // Türen showDoorsMenu(); break; + case 7: // Parken + mp.events.callRemote("CLIENT:VehicleMenu_ParkCar"); } }); diff --git a/ReallifeGamemode.Client/ReallifeGamemode.Client.csproj b/ReallifeGamemode.Client/ReallifeGamemode.Client.csproj index d106cecb..ff3d12d2 100644 --- a/ReallifeGamemode.Client/ReallifeGamemode.Client.csproj +++ b/ReallifeGamemode.Client/ReallifeGamemode.Client.csproj @@ -13,17 +13,17 @@ + + + - - - diff --git a/ReallifeGamemode.Client/assets/html/vehiclemenu/index.html b/ReallifeGamemode.Client/assets/html/vehiclemenu/index.html index 00f2aa10..d6ce19a1 100644 --- a/ReallifeGamemode.Client/assets/html/vehiclemenu/index.html +++ b/ReallifeGamemode.Client/assets/html/vehiclemenu/index.html @@ -78,8 +78,8 @@
- +

Fahrzeug parken

+
  • diff --git a/ReallifeGamemode.Client/assets/img/vehiclemenu/park.png b/ReallifeGamemode.Client/assets/img/vehiclemenu/park.png new file mode 100644 index 0000000000000000000000000000000000000000..5d809dea4477c8aec98e44cd69fe7b46fde830ec GIT binary patch literal 7575 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 F{|^QNw_N}L literal 0 HcmV?d00001 diff --git a/ReallifeGamemode.Server/Events/VehicleMenu.cs b/ReallifeGamemode.Server/Events/VehicleMenu.cs index 92e190bf..1b8af631 100644 --- a/ReallifeGamemode.Server/Events/VehicleMenu.cs +++ b/ReallifeGamemode.Server/Events/VehicleMenu.cs @@ -1,6 +1,7 @@ using GTANetworkAPI; using ReallifeGamemode.Server.Entities; using ReallifeGamemode.Server.Extensions; +using ReallifeGamemode.Server.Models; using ReallifeGamemode.Server.Util; using System; using System.Collections.Generic; @@ -37,8 +38,17 @@ namespace ReallifeGamemode.Server.Events } else if (sV is FactionVehicle fV) { - if (fV.FactionId != u.FactionId && !state) + if (fV.FactionId != u.FactionId && !state && !u.IsAdmin(AdminLevel.ADMIN3)) { + player.SendNotification("~r~Du hast keinen Schlüssel."); + return; + } + } + else if (sV is GroupVehicle gV) + { + if(gV.GroupId != u.Group.Id && !state && !u.IsAdmin(AdminLevel.ADMIN3)) + { + player.SendNotification("~r~Du hast keinen Schlüssel."); return; } } @@ -76,20 +86,75 @@ namespace ReallifeGamemode.Server.Events } else if (sV is UserVehicle uV) { - if (uV.UserId != u.Id && !u.IsAdmin(AdminLevel.ADMIN3)) + if (uV.UserId != u.Id) { return; } } } - VehicleStreaming.SetLockStatus(v, !state); state = !state; + VehicleStreaming.SetLockStatus(v, state); string msg = "Fahrzeug "; msg += state ? "~g~abgeschlossen" : "~r~aufgeschlossen"; player.SendNotification(msg); } } + [RemoteEvent("CLIENT:VehicleMenu_ParkCar")] + public void VehicleMenuParkCarEvent(Client player) + { + if (player.IsInVehicle && player.VehicleSeat == -1) + { + Vehicle v = player.Vehicle; + + User u = player.GetUser(); + if (u == null) return; + + using (var dbContext = new DatabaseContext()) + { + ServerVehicle sV = v.GetServerVehicle(dbContext); + + if (sV == null) return; + + if (sV is UserVehicle uV) + { + if (uV.UserId != u.Id) + { + player.SendNotification("~r~Du darfst dieses Fahrzeug nicht parken."); + return; + } + } + else if(sV is FactionVehicle fV) + { + if(fV.FactionId != u.FactionId || !u.FactionLeader) + { + player.SendNotification("~r~Du darfst dieses Fahrzeug nicht parken."); + return; + } + } + else if(sV is GroupVehicle gV) + { + if (gV.GroupId != u.Group.Id || u.GroupRank < GroupRank.MANAGER) + { + player.SendNotification("~r~Du darfst dieses Fahrzeug nicht parken."); + return; + } + } + + Vector3 pos = v.Position; + + sV.PositionX = pos.X; + sV.PositionY = pos.Y; + sV.PositionZ = pos.Z; + sV.Heading = v.Heading; + + player.SendNotification("~g~Das Fahrzeug wurde geparkt."); + + dbContext.SaveChanges(); + } + } + } + [RemoteEvent("VehicleMenu_ToggleSingleDoor")] public void VehicleMenuToggleSingleDoorEvent(Client player, int door) { diff --git a/ReallifeGamemode.Server/Extensions/VehicleExtension.cs b/ReallifeGamemode.Server/Extensions/VehicleExtension.cs index d548937d..121cd769 100644 --- a/ReallifeGamemode.Server/Extensions/VehicleExtension.cs +++ b/ReallifeGamemode.Server/Extensions/VehicleExtension.cs @@ -1,6 +1,7 @@ using GTANetworkAPI; using ReallifeGamemode.Server.Entities; using ReallifeGamemode.Server.Managers; +using ReallifeGamemode.Server.Models; using System; using System.Collections.Generic; using System.Text; @@ -9,9 +10,9 @@ namespace ReallifeGamemode.Server.Extensions { public static class VehicleExtension { - public static ServerVehicle GetServerVehicle(this Vehicle veh) + public static ServerVehicle GetServerVehicle(this Vehicle veh, DatabaseContext context = null) { - return VehicleManager.GetServerVehicleFromVehicle(veh); + return VehicleManager.GetServerVehicleFromVehicle(veh, context); } } } diff --git a/ReallifeGamemode.Server/Managers/SaveManager.cs b/ReallifeGamemode.Server/Managers/SaveManager.cs index 17c44130..adb95aec 100644 --- a/ReallifeGamemode.Server/Managers/SaveManager.cs +++ b/ReallifeGamemode.Server/Managers/SaveManager.cs @@ -159,16 +159,6 @@ namespace ReallifeGamemode.Server.Managers user.PositionZ = pos.Z; } - foreach (ServerVehicle veh in saveAll.ServerVehicles) - { - Vehicle v = VehicleManager.GetVehicleFromServerVehicle(veh); - - veh.PositionX = v.Position.X; - veh.PositionY = v.Position.Y; - veh.PositionZ = v.Position.Z; - veh.Heading = v.Heading; - } - saveAll.SaveChanges(); } } diff --git a/ReallifeGamemode.Server/Managers/VehicleManager.cs b/ReallifeGamemode.Server/Managers/VehicleManager.cs index 17d3e5fe..78537245 100644 --- a/ReallifeGamemode.Server/Managers/VehicleManager.cs +++ b/ReallifeGamemode.Server/Managers/VehicleManager.cs @@ -162,27 +162,13 @@ namespace ReallifeGamemode.Server.Managers public static ServerVehicle GetServerVehicleFromVehicle(Vehicle veh, DatabaseContext dbContext = null) { - if (dbContext == null) + dbContext = dbContext ?? new DatabaseContext(); + + foreach (KeyValuePair pair in _serverVehicles) { - using (dbContext = new DatabaseContext()) + if (pair.Value == veh.Handle) { - foreach (KeyValuePair pair in _serverVehicles) - { - if (pair.Value == veh.Handle) - { - return dbContext.ServerVehicles.Find(pair.Key); - } - } - } - } - else - { - foreach (KeyValuePair pair in _serverVehicles) - { - if (pair.Value == veh.Handle) - { - return dbContext.ServerVehicles.Find(pair.Key); - } + return dbContext.ServerVehicles.Find(pair.Key); } }