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);
}
}