diff --git a/ReallifeGamemode.Client/Gui/vehiclemenu/main.ts b/ReallifeGamemode.Client/Gui/vehiclemenu/main.ts
index d5988b50..385eaacb 100644
--- a/ReallifeGamemode.Client/Gui/vehiclemenu/main.ts
+++ b/ReallifeGamemode.Client/Gui/vehiclemenu/main.ts
@@ -9,6 +9,44 @@ var screenRes = mp.game.graphics.getScreenResolution(0, 0);
export default function vehicleMenu(globalData: IGlobalData) {
let menuBrowser: BrowserMp = null;
+ var lastDriversBrowser: BrowserMp = null;
+
+ var lastDrivers = null;
+
+ mp.events.add('lookLastDrivers', (lastDriversParam) => {
+ lastDrivers = JSON.parse(lastDriversParam);
+
+ if (lastDriversBrowser !== null) {
+ lastDriversBrowser.destroy();
+ lastDriversBrowser = null;
+ globalData.InMenu = false;
+ mp.gui.cursor.show(false, false);
+ mp.gui.chat.activate(true);
+ }
+ else if (!globalData.InMenu) {
+ globalData.InMenu = true;
+ lastDriversBrowser = mp.browsers.new('package://assets/vehicle/lastPlayers.html');
+ mp.gui.chat.activate(false);
+ mp.gui.cursor.show(true, true);
+ }
+ });
+
+ mp.events.add("CEF:VehicleLook_Loaded", () => {
+ lastDriversBrowser.execute(`setDrivers('${JSON.stringify(lastDrivers)}');`);
+ });
+
+ mp.events.add("removeLookMenu", () => {
+ if (lastDriversBrowser == null) {
+ return;
+ }
+ else if (globalData.InMenu) {
+ lastDriversBrowser.destroy();
+ lastDriversBrowser = null;
+ globalData.InMenu = false;
+ mp.gui.cursor.show(false, false);
+ mp.gui.chat.activate(true);
+ }
+ });
mp.events.add('ToggleVehicleMenu', () => {
if (menuBrowser !== null) {
diff --git a/ReallifeGamemode.Client/assets/html/vehiclemenu/script.js b/ReallifeGamemode.Client/assets/html/vehiclemenu/script.js
new file mode 100644
index 00000000..82dbf11f
--- /dev/null
+++ b/ReallifeGamemode.Client/assets/html/vehiclemenu/script.js
@@ -0,0 +1,16 @@
+
+
+
+function ad_row(id, name, faction, ping) {
+ var table_id = "t1";
+ var table = document.getElementById(table_id);
+ var rows = table.getElementsByTagName('tr').length;
+ var tr = table.insertRow(rows);
+ var td1 = document.createElement('td');
+ var td2 = document.createElement('td');
+ var td3 = document.createElement('td');
+ var td4 = document.createElement('td');
+ var test = faction;
+ td1.innerHTML = ''+driver;
+ tr.appendChild(td1);
+}
\ No newline at end of file
diff --git a/ReallifeGamemode.Client/assets/html/vehiclemenu/style.css b/ReallifeGamemode.Client/assets/html/vehiclemenu/style.css
new file mode 100644
index 00000000..aa5f9d4f
--- /dev/null
+++ b/ReallifeGamemode.Client/assets/html/vehiclemenu/style.css
@@ -0,0 +1,67 @@
+/* style.css für Tabliste */
+.greyFont {
+ color: gray;
+ font-size: 14px;
+ width: 250px;
+}
+div {
+ user-select: none;
+}
+
+body {
+ overflow: hidden;
+ font-family: 'Roboto', sans-serif;
+ font-weight: 500;
+ color: #222;
+ margin: 0;
+ padding: 0;
+}
+
+h2 {
+ font-family: 'Roboto', sans-serif;
+ font-weight: 700;
+ font-size: 18px;
+ color: white;
+ margin:5px;
+ padding: 5px;
+ border: 1px solid #808080;
+ width: 20.75em;
+}
+.TabWrapper {
+ background: rgba(0,0,0,0.6);
+ height: 600px;
+ width: 600px;
+ display: block;
+ padding: 5px;
+ position: absolute;
+ left: 32%;
+ top: 10%;
+}
+th, td {
+ color: white;
+ font-size: 18px;
+ width:10%;
+ text-align: left;
+}
+.scroll {
+ height: 600px;
+ width: 600px;
+ font-size: 12px;
+ overflow: auto;
+}
+.force-overflow {
+ min-height: 600px;
+}
+
+#style1::-webkit-scrollbar {
+ width: 10px;
+ background-color: #F5F5F5;
+}
+
+#style1::-webkit-scrollbar-thumb {
+ background-color: #FF0040;
+}
+
+
+
+
diff --git a/ReallifeGamemode.Client/assets/vehicle/application.js b/ReallifeGamemode.Client/assets/vehicle/application.js
new file mode 100644
index 00000000..024717a1
--- /dev/null
+++ b/ReallifeGamemode.Client/assets/vehicle/application.js
@@ -0,0 +1,26 @@
+
+let close = document.getElementById('close');
+
+$(document).ready(function () {
+ mp.trigger("CEF:VehicleLook_Loaded");
+});
+
+function setDrivers(driversJson) {
+ var drivers = JSON.parse(driversJson);
+ var listTag = $("#drivers-list");
+ drivers.forEach(driver => {
+ var name = driver.Name;
+ var dateTime = new Date(driver.Time);
+
+ var date = `${dateTime.getDay()}.${dateTime.getMonth()}.${dateTime.getFullYear()}`;
+ var time = `${dateTime.getHours()}:${dateTime.getMinutes()}:${dateTime.getSeconds()}`;
+
+ var infoLine = `${name} am ${date} um ${time} Uhr`;
+ var listItemTag = `
${infoLine}`;
+ listTag.append(listItemTag);
+ });
+}
+
+close.onclick = function closeWindow() {
+ mp.trigger('removeLookMenu');
+}
\ No newline at end of file
diff --git a/ReallifeGamemode.Client/assets/vehicle/lastPlayers.html b/ReallifeGamemode.Client/assets/vehicle/lastPlayers.html
new file mode 100644
index 00000000..293f1c03
--- /dev/null
+++ b/ReallifeGamemode.Client/assets/vehicle/lastPlayers.html
@@ -0,0 +1,29 @@
+
+
+
+
+
+ Eingabe | Life of German
+
+
+
+
+
+
+
+
+
+
+
Letze Fahrer
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ReallifeGamemode.Client/assets/vehicle/style.css b/ReallifeGamemode.Client/assets/vehicle/style.css
new file mode 100644
index 00000000..aa5f9d4f
--- /dev/null
+++ b/ReallifeGamemode.Client/assets/vehicle/style.css
@@ -0,0 +1,67 @@
+/* style.css für Tabliste */
+.greyFont {
+ color: gray;
+ font-size: 14px;
+ width: 250px;
+}
+div {
+ user-select: none;
+}
+
+body {
+ overflow: hidden;
+ font-family: 'Roboto', sans-serif;
+ font-weight: 500;
+ color: #222;
+ margin: 0;
+ padding: 0;
+}
+
+h2 {
+ font-family: 'Roboto', sans-serif;
+ font-weight: 700;
+ font-size: 18px;
+ color: white;
+ margin:5px;
+ padding: 5px;
+ border: 1px solid #808080;
+ width: 20.75em;
+}
+.TabWrapper {
+ background: rgba(0,0,0,0.6);
+ height: 600px;
+ width: 600px;
+ display: block;
+ padding: 5px;
+ position: absolute;
+ left: 32%;
+ top: 10%;
+}
+th, td {
+ color: white;
+ font-size: 18px;
+ width:10%;
+ text-align: left;
+}
+.scroll {
+ height: 600px;
+ width: 600px;
+ font-size: 12px;
+ overflow: auto;
+}
+.force-overflow {
+ min-height: 600px;
+}
+
+#style1::-webkit-scrollbar {
+ width: 10px;
+ background-color: #F5F5F5;
+}
+
+#style1::-webkit-scrollbar-thumb {
+ background-color: #FF0040;
+}
+
+
+
+
diff --git a/ReallifeGamemode.Server/Commands/UserCommands.cs b/ReallifeGamemode.Server/Commands/UserCommands.cs
index 3c2bf091..15d159a7 100644
--- a/ReallifeGamemode.Server/Commands/UserCommands.cs
+++ b/ReallifeGamemode.Server/Commands/UserCommands.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using GTANetworkAPI;
+using Newtonsoft.Json;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Extensions;
@@ -16,6 +17,42 @@ namespace ReallifeGamemode.Server.Commands
{
internal class UserCommands : Script
{
+ [Command("look", "~m~look")]
+ public void CmdUserLook(Player player)
+ {
+ if (!player.IsLoggedIn()) return;
+
+ Vehicle veh = NAPI.Pools.GetAllVehicles()
+ .Where(v => v.Position.DistanceTo(player.Position) <= 5)
+ .OrderBy(v => v.Position.DistanceTo(player.Position))
+ .FirstOrDefault();
+
+ if (veh == null)
+ {
+ return;
+ }
+
+ var lastDriverDic = new Dictionary();
+
+ if(VehicleManager.lastDriversInVehicle.ContainsKey(veh))
+ {
+ lastDriverDic = VehicleManager.lastDriversInVehicle[veh];
+ }
+ else
+ {
+ player.SendNotification("~r~Mit diesem Fahrzeug ist noch niemand gefahren");
+ return;
+ }
+
+ var list = lastDriverDic.Select(v => new
+ {
+ Name = v.Key,
+ Time = v.Value
+ }).OrderByDescending(v => v.Time).ToList();
+
+ player.TriggerEvent("lookLastDrivers", JsonConvert.SerializeObject(list));
+ }
+
[Command("id", "~m~Benutzung: ~s~/id [Name]")]
public void CmdUserId(Player player, String targetname)
{
@@ -61,7 +98,7 @@ namespace ReallifeGamemode.Server.Commands
}
else
{
- pVeh = NAPI.Pools.GetAllVehicles().Where(v => v.Position.DistanceTo(player.Position) <= 5).FirstOrDefault();
+ pVeh = NAPI.Pools.GetAllVehicles().Where(v => v.Position.DistanceTo(player.Position) <= 5).OrderBy(v => v.Position.DistanceTo(player.Position)).FirstOrDefault();
}
if (pVeh == null)
diff --git a/ReallifeGamemode.Server/Events/EnterVehicle.cs b/ReallifeGamemode.Server/Events/EnterVehicle.cs
index e6bce887..0ac95d38 100644
--- a/ReallifeGamemode.Server/Events/EnterVehicle.cs
+++ b/ReallifeGamemode.Server/Events/EnterVehicle.cs
@@ -1,7 +1,9 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Server.Extensions;
+using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Util;
using ReallifeGamemode.Server.WeaponDeal;
@@ -20,6 +22,13 @@ namespace ReallifeGamemode.Server.Events
if (vehicle.HasMarkerBehind())
vehicle.RemoveMarkerBehind();
+ if (!VehicleManager.lastDriversInVehicle.ContainsKey(vehicle))
+ {
+ VehicleManager.lastDriversInVehicle.Add(vehicle, new Dictionary());
+ }
+
+ VehicleManager.lastDriversInVehicle[vehicle][client.Name] = DateTime.Now;
+
if (vehicle.GetServerVehicle() is FactionVehicle veh)
{
User u = client.GetUser();
diff --git a/ReallifeGamemode.Server/Managers/VehicleManager.cs b/ReallifeGamemode.Server/Managers/VehicleManager.cs
index fc0283a2..e4f05cae 100644
--- a/ReallifeGamemode.Server/Managers/VehicleManager.cs
+++ b/ReallifeGamemode.Server/Managers/VehicleManager.cs
@@ -14,6 +14,9 @@ namespace ReallifeGamemode.Server.Managers
{
public class VehicleManager : Script
{
+
+ public static Dictionary> lastDriversInVehicle = new Dictionary>();
+
private static readonly List _enabledMods = new List()
{
"ninef",