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 00000000..5d809dea Binary files /dev/null and b/ReallifeGamemode.Client/assets/img/vehiclemenu/park.png differ 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); } }