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",