From 9cd5fa3f40eea11239cfd09f6127b0038a2c9fe9 Mon Sep 17 00:00:00 2001 From: Mac_Slash Date: Wed, 8 Apr 2020 16:42:28 +0200 Subject: [PATCH] Add PunkteSystem --- .../Interaction/factioninteraction.ts | 463 +++++++++++------- .../Interaction/interactionmenu.ts | 17 +- .../ReallifeGamemode.Client.csproj | 2 +- ReallifeGamemode.Client/global.d.ts | 1 + ReallifeGamemode.Client/package-lock.json | 178 +++---- ReallifeGamemode.Database/Entities/User.cs | 1 + .../Windows PowerShell.lnk | Bin 0 -> 2366 bytes .../Commands/FactionCommands.cs | 2 +- ReallifeGamemode.Server/Events/Key.cs | 9 +- .../Managers/InteractionManager.cs | 1 + .../ReallifeGamemode.Server.csproj | 1 + 11 files changed, 418 insertions(+), 257 deletions(-) create mode 100644 ReallifeGamemode.Database/Windows PowerShell.lnk diff --git a/ReallifeGamemode.Client/Interaction/factioninteraction.ts b/ReallifeGamemode.Client/Interaction/factioninteraction.ts index e2e4faf9..90da9974 100644 --- a/ReallifeGamemode.Client/Interaction/factioninteraction.ts +++ b/ReallifeGamemode.Client/Interaction/factioninteraction.ts @@ -1,4 +1,5 @@ import * as NativeUI from '../libs/NativeUI'; +import InputHelper from '../inputhelper'; const Menu = NativeUI.Menu; const UIMenuItem = NativeUI.UIMenuItem; const UIMenuListItem = NativeUI.UIMenuListItem; @@ -25,50 +26,49 @@ export default function factionInteraction(globalData: IGlobalData) { var rangeLeft; var sortText; + var ticketName: string; + var pointsName: string; + var factionInteractionMenu; - var reviveTaskMenu; + var reviveTaskMenuMedic; - mp.events.add("updateFactionBlips", (type, taskList) => { + /*mp.events.add("updateFactionBlips", (type, taskList) => { - }); + });*/ + mp.events.add("showFactionInteractionLSPD", (userFactionId, isDuty, userFactionName, isFactionLeader) => { + //LSPD + let ticketTaskMenuLSPD; + let pointsTaskMenuLSPD; + if (userFactionId == 1) { + if (isDuty) { + mp.gui.chat.activate(false); + globalData.InMenu = true; - mp.events.add("showFactionInteraction", (userFactionId, isDuty, userFactionName, isFactionLeader, reviveTaskCount, healTaskCount, fireTaskCount) => { - mp.gui.chat.activate(false); - globalData.InMenu = true; + factionInteractionMenu = new Menu("Fraktionsinteraktion", userFactionName, new Point(0, screenRes.y / 2), null, null); - var rP = ((reviveTaskCount === "0") ? "~r~" : "~g~"); - var hP = ((healTaskCount === "0") ? "~r~" : "~g~"); - var fP = ((fireTaskCount === "0") ? "~r~" : "~g~"); + if (isFactionLeader) { + let leaderMenu = new UIMenuItem("Leadermen\u00fc", "Verwaltung der Fraktion"); + leaderMenu.SetRightBadge(BadgeStyle.Star); + factionInteractionMenu.AddItem(leaderMenu); + } - factionInteractionMenu = new Menu("Fraktionsinteraktion", userFactionName, new Point(0, screenRes.y / 2), null, null); - if (isFactionLeader) { - let leaderMenu = new UIMenuItem("Leadermen\u00fc", "Verwaltung der Fraktion"); - leaderMenu.SetRightBadge(BadgeStyle.Star); - factionInteractionMenu.AddItem(leaderMenu); - } - let reviveTaskMenu; - let healTaskMenu; - let fireTaskMenu; - if (isDuty) { - switch (userFactionId) { - case 2: - reviveTaskMenu = new UIMenuItem("Reviveauftr\u00e4ge"); - reviveTaskMenu.SetRightLabel(rP + reviveTaskCount) - factionInteractionMenu.AddItem(reviveTaskMenu); - healTaskMenu = new UIMenuItem("Healauftr\u00e4ge"); - healTaskMenu.SetRightLabel(hP + healTaskCount) - factionInteractionMenu.AddItem(healTaskMenu); + ticketTaskMenuLSPD = new UIMenuItem("Ticket ausstellen", "Einem Spieler ein Strafticket ausstellen."); + factionInteractionMenu.AddItem(ticketTaskMenuLSPD); - fireTaskMenu = new UIMenuItem("Feuerauftr\u00e4ge"); - fireTaskMenu.SetRightLabel(fP + fireTaskCount) - factionInteractionMenu.AddItem(fireTaskMenu); - break; + pointsTaskMenuLSPD = new UIMenuItem("Strafpunkte verteilen", "Einem Spieler Strafpunkte verteilen."); + factionInteractionMenu.AddItem(pointsTaskMenuLSPD); + + /*TaskMenuLSPD = new UIMenuItem(""); + TaskMenuLSPD.SetRightLabel(""); + factionInteractionMenu.AddItem(TaskMenuLSPD);*/ //weiteres } } + + - let cancelItem = new UIMenuItem("Schlie\u00dfen", "Schlie\u00dft die Fraktionsinteraktion"); + let cancelItem = new UIMenuItem("Schlie\u00dfen", "Schlie\u00dft die Fraktionsinteraktion."); cancelItem.BackColor = new Color(213, 0, 0); cancelItem.HighlightedBackColor = new Color(229, 57, 53); factionInteractionMenu.AddItem(cancelItem); @@ -82,11 +82,29 @@ export default function factionInteraction(globalData: IGlobalData) { mp.gui.chat.activate(true); globalData.InMenu = false; break; - case reviveTaskMenu: - mp.events.callRemote("loadMedicTasks", 0) + + case ticketTaskMenuLSPD: factionInteractionMenu.Visible = false; mp.gui.chat.activate(true); + mp.gui.cursor.show(true, true); globalData.InMenu = false; + var input = new InputHelper("Welchem Spieler möchtest du ein Ticket geben (Name / ID)?", globalData); + input.show(); + input.getValue(name => { + mp.events.call("CLIENT:InteractionMenu_LSPD_Ticket", name); + mp.gui.cursor.show(false, false); + }); + break; + case pointsTaskMenuLSPD: + factionInteractionMenu.Visible = false; + mp.gui.chat.activate(true); + mp.gui.cursor.show(true, true); + globalData.InMenu = false; + var input = new InputHelper("Welchem Spieler möchtest du Strafpunkte geben (Name / ID)?", globalData); + input.show(); + input.getValue(name => { + mp.events.call("CLIENT:InteractionMenu_LSPD_Points", name); + }); break; } }); @@ -96,164 +114,273 @@ export default function factionInteraction(globalData: IGlobalData) { globalData.InMenu = false; }); }); + mp.events.add("CLIENT:InteractionMenu_LSPD_Ticket", (name) => { + ticketName = name; + var input = new InputHelper("Wie hoch soll der Ticketbetrag sein ?", globalData); + mp.gui.cursor.show(true, true); + input.show(); + input.getValue(amount => { + mp.events.call("CLIENT:InteractionMenu_LSPD_Ticket2", amount); + mp.gui.cursor.show(false, false); + }); + }); + mp.events.add("CLIENT:InteractionMenu_LSPD_Ticket2", (ticketPrice) => { + var input = new InputHelper("Um welches Vergehen handelt es sich ?", globalData); + mp.gui.cursor.show(true, true); + input.show(); + input.getValue(ticketReason => { + mp.events.callRemote("CLIENT:InteractionMenu_LSPD_Ticket3", JSON.stringify(ticketName), JSON.stringify(ticketPrice), JSON.stringify(ticketReason)); + mp.gui.cursor.show(false, false); + }); + }); - mp.events.add("showMedicTasks", (type, taskList) => { - tasks = JSON.parse(taskList); - if (sorting === 0) { - initTasks = tasks; - } + mp.events.add("CLIENT:InteractionMenu_LSPD_Points", (name) => { + pointsName = name; + var input = new InputHelper("Wieviele Punkte werden vergeben ?", globalData); + mp.gui.cursor.show(true, true); + input.show(); + input.getValue(amount => { + mp.events.call("CLIENT:InteractionMenu_LSPD_Points2", amount); + mp.gui.cursor.show(false, false); + }); + }); - mp.events.call("sortFactionTasks", false); + mp.events.add("CLIENT:InteractionMenu_LSPD_Points2", (pointsAmount) => { + var input = new InputHelper("Um welches Vergehen handelt es sich ?", globalData); + mp.gui.cursor.show(true, true); + input.show(); + input.getValue(pointsReason => { + mp.events.callRemote("CLIENT:InteractionMenu_LSPD_Points3", JSON.stringify(pointsName), JSON.stringify(pointsAmount), JSON.stringify(pointsReason)); + mp.gui.cursor.show(false, false); + }); + }); - mp.gui.chat.activate(false); - globalData.InMenu = true; - switch (type) { - case 0: - reviveTaskMenu = new Menu("Revives", "\u00c4lteste zu erst", new Point(0, screenRes.y / 2), null, null); - let aTask; - for (var i = 0; i < tasks.length; i++) { - if (tasks[i].MedicName === "none") { - aTask = new UIMenuItem("~g~" + tasks[i].Victim); - } else { - aTask = new UIMenuItem("~r~" + tasks[i].Victim); - } + mp.events.add("showFactionInteractionMedic", (userFactionId, isDuty, userFactionName, isFactionLeader, reviveTaskCountMedic, healTaskCountMedic, fireTaskCountMedic) => { + mp.gui.chat.activate(false); + globalData.InMenu = true; - aTask.SetRightLabel(mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, tasks[i].Position.x, tasks[i].Position.y, tasks[i].Position.z, true).toFixed(2).toString() + " ~g~m"); - reviveTaskMenu.AddItem(aTask); + //Medic + var rPM = ((reviveTaskCountMedic === "0") ? "~r~" : "~g~"); + var hPM = ((healTaskCountMedic === "0") ? "~r~" : "~g~"); + var fPM = ((fireTaskCountMedic === "0") ? "~r~" : "~g~"); + + factionInteractionMenu = new Menu("Fraktionsinteraktion", userFactionName, new Point(0, screenRes.y / 2), null, null); + + if (isFactionLeader) { + let leaderMenu = new UIMenuItem("Leadermen\u00fc", "Verwaltung der Fraktion"); + leaderMenu.SetRightBadge(BadgeStyle.Star); + factionInteractionMenu.AddItem(leaderMenu); } - let backItem = new UIMenuItem("Zur\u00fcck", "Zur\u00fcck zur Fraktionsinteraktion"); - backItem.BackColor = new Color(213, 0, 0); - backItem.HighlightedBackColor = new Color(229, 57, 53); - reviveTaskMenu.AddItem(backItem); + //Medic + let reviveTaskMenuMedic; + let healTaskMenuMedic; + let fireTaskMenuMedic; - reviveTaskMenu.ItemSelect.on((item, index) => { - if (item === backItem) { - reviveTaskMenu.Visible = false; - factionInteractionMenu.Visible = true; - } else { - if (tasks[index].MedicName === "none") { - mp.game.graphics.requestStreamedTextureDict("medicimages", true); - mp.events.callRemote("updateMedicTask", 0, index, player.name); - mp.game.ui.setNewWaypoint(tasks[index].Position.x, tasks[index].Position.y); - activeCheckpoint = mp.markers.new(1, new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 2), 3.0, { - color: [255, 0, 0, 150], - visible: true, - dimension: 0 - }); - reviveTaskMenu.Visible = false; + if (userFactionId == 2) { + if (isDuty) { + reviveTaskMenuMedic = new UIMenuItem("Reviveauftr\u00e4ge"); + reviveTaskMenuMedic.SetRightLabel(rPM + reviveTaskCountMedic) + factionInteractionMenu.AddItem(reviveTaskMenuMedic); + + healTaskMenuMedic = new UIMenuItem("Healauftr\u00e4ge"); + healTaskMenuMedic.SetRightLabel(hPM + healTaskCountMedic) + factionInteractionMenu.AddItem(healTaskMenuMedic); + + fireTaskMenuMedic = new UIMenuItem("Feuerauftr\u00e4ge"); + fireTaskMenuMedic.SetRightLabel(fPM + fireTaskCountMedic); + factionInteractionMenu.AddItem(fireTaskMenuMedic); + + } + } + + let cancelItem = new UIMenuItem("Schlie\u00dfen", "Schlie\u00dft die Fraktionsinteraktion."); + cancelItem.BackColor = new Color(213, 0, 0); + cancelItem.HighlightedBackColor = new Color(229, 57, 53); + factionInteractionMenu.AddItem(cancelItem); + + factionInteractionMenu.Visible = true; + + factionInteractionMenu.ItemSelect.on((item) => { + switch (item) { + case cancelItem: + factionInteractionMenu.Visible = false; mp.gui.chat.activate(true); globalData.InMenu = false; - ambulanceImagePos = 0.325 - taskStart = player.position; - taskFinish = tasks[index].Position; - taskRange = mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z, true); - activeTask = true; - } + break; + case reviveTaskMenuMedic: + mp.events.callRemote("loadMedicTasks", 0) + factionInteractionMenu.Visible = false; + mp.gui.chat.activate(true); + globalData.InMenu = false; + break; } }); - reviveTaskMenu.MenuClose.on(() => { - reviveTaskMenu.Visible = false; - factionInteractionMenu.Visible = true; + factionInteractionMenu.MenuClose.on(() => { + mp.gui.chat.activate(true); + globalData.InMenu = false; }); - break; - case 1: - break; - case 2: - break; - } - }); + }); - mp.events.add("sortFactionTasks", (sortByKey) => { - if (firstSorting) { - sortText = "Nach Uhrzeit"; - firstSorting = false; - //mp.gui.chat.push("Init Sort"); - return; - } else { - if (sortByKey) { - if (sorting < 1) { - sorting++; - } else { - sorting = 0; + + mp.events.add("showMedicTasks", (type, taskList) => { + tasks = JSON.parse(taskList); + if (sorting === 0) { + initTasks = tasks; } - switch (sorting) { - case 0: //Standartsortierung + mp.events.call("sortFactionTasks", false); - reviveTaskMenu.Close(); - factionInteractionMenu.Close(); - sortText = "Nach Uhrzeit"; - mp.events.call("showMedicTasks", 0, JSON.stringify(initTasks)); - break; + mp.gui.chat.activate(false); + globalData.InMenu = true; + switch (type) { + case 0: + reviveTaskMenuMedic = new Menu("Revives", "\u00c4lteste zu erst", new Point(0, screenRes.y / 2), null, null); + let aTask; + for (var i = 0; i < tasks.length; i++) { + if (tasks[i].MedicName === "none") { + aTask = new UIMenuItem("~g~" + tasks[i].Victim); + } else { + aTask = new UIMenuItem("~r~" + tasks[i].Victim); + } - case 1: //Sortierung nach Metern (aufsteigend) - for (var d = 0; d < tasks.length; d++) { - for (var e = 0; e < tasks.length - 1; e++) { - if (getDistance1(e) > getDistance2(e + 1)) { - var tempTask = tasks[e]; - tasks[e] = tasks[e + 1]; - tasks[e + 1] = tempTask; - mp.gui.chat.push("SWITCH"); + aTask.SetRightLabel(mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, tasks[i].Position.x, tasks[i].Position.y, tasks[i].Position.z, true).toFixed(2).toString() + " ~g~m"); + reviveTaskMenuMedic.AddItem(aTask); + } + + let backItem = new UIMenuItem("Zur\u00fcck", "Zur\u00fcck zur Fraktionsinteraktion."); + backItem.BackColor = new Color(213, 0, 0); + backItem.HighlightedBackColor = new Color(229, 57, 53); + reviveTaskMenuMedic.AddItem(backItem); + + reviveTaskMenuMedic.ItemSelect.on((item, index) => { + if (item === backItem) { + reviveTaskMenuMedic.Visible = false; + factionInteractionMenu.Visible = true; + } else { + if (tasks[index].MedicName === "none") { + mp.game.graphics.requestStreamedTextureDict("medicimages", true); + mp.events.callRemote("updateMedicTask", 0, index, player.name); + mp.game.ui.setNewWaypoint(tasks[index].Position.x, tasks[index].Position.y); + activeCheckpoint = mp.markers.new(1, new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 2), 3.0, { + color: [255, 0, 0, 150], + visible: true, + dimension: 0 + }); + reviveTaskMenuMedic.Visible = false; + mp.gui.chat.activate(true); + globalData.InMenu = false; + ambulanceImagePos = 0.325 + taskStart = player.position; + taskFinish = tasks[index].Position; + taskRange = mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z, true); + activeTask = true; } } - } - reviveTaskMenu.Close(); - factionInteractionMenu.Close(); - sortText = "Entfernung aufsteigend"; - mp.events.call("showMedicTasks", 0, JSON.stringify(tasks)); + }); + + reviveTaskMenuMedic.MenuClose.on(() => { + reviveTaskMenuMedic.Visible = false; + factionInteractionMenu.Visible = true; + }); + break; + case 1: + break; + case 2: break; - - //case 2: //Sortierung nach Metern (absteigend) - // mp.gui.chat.push("Sorting 2"); - // sortText = "Entfernung absteigend"; - // break; - //case 3: //Sortierung nach Zeit (aufsteigend) - // mp.gui.chat.push("Sorting 3"); - // sortText = "Restzeit aufsteigend"; - // break; - //case 4: //Sortierung nach Zeit (absteigend) - // mp.gui.chat.push("Sorting 4"); - // sortText = "Restzeit absteigend"; - // break; } - } - } - }); + }); - function getDistance1(index) { - return mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, newTasks[index].Position.x, newTasks[index].Position.y, newTasks[index].Position.z, true).toFixed(2); - } - function getDistance2(index) { - return mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, newTasks[index].Position.x, newTasks[index].Position.y, newTasks[index].Position.z, true).toFixed(2); - } - - mp.events.add('render', () => { - if (activeTask) { - rangeLeft = mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, taskFinish.x, taskFinish.y, taskFinish.z, true).toFixed(2); - if (rangeLeft > 1.9) { - ambulanceImagePos = 0.655 - (mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, taskFinish.x, taskFinish.y, taskFinish.z, true) / taskRange * 0.35); - mp.game.graphics.drawRect(0.5, 0.945, 0.35, 0.025, 150, 0, 0, 200); - mp.game.graphics.drawText(rangeLeft.toString() + "m", [0.5, 0.93], { - font: 0, - color: [255, 255, 255, 255], - scale: [0.35, 0.35], - outline: true, - centre: true - }); - if (taskRange < rangeLeft) ambulanceImagePos = 0.3; - mp.game.graphics.drawSprite("medicimages", "finish", 0.655, 0.898, 0.04, 0.07, 0, 255, 255, 255, 255); - if (player.isInAnyVehicle(false)) { - mp.game.graphics.drawSprite("medicimages", "ambulance", ambulanceImagePos + 0.01, 0.915, 0.04, 0.07, 0, 255, 255, 255, 255); + mp.events.add("sortFactionTasks", (sortByKey) => { + if (firstSorting) { + sortText = "Nach Uhrzeit"; + firstSorting = false; + //mp.gui.chat.push("Init Sort"); + return; } else { - mp.game.graphics.drawSprite("medicimages", "running", ambulanceImagePos + 0.02, 0.915, 0.02, 0.035, 0, 255, 0, 0, 255); + if (sortByKey) { + if (sorting < 1) { + sorting++; + } else { + sorting = 0; + } + + switch (sorting) { + case 0: //Standartsortierung + + reviveTaskMenuMedic.Close(); + factionInteractionMenu.Close(); + sortText = "Nach Uhrzeit"; + mp.events.call("showMedicTasks", 0, JSON.stringify(initTasks)); + break; + + case 1: //Sortierung nach Metern (aufsteigend) + for (var d = 0; d < tasks.length; d++) { + for (var e = 0; e < tasks.length - 1; e++) { + if (getDistance1(e) > getDistance2(e + 1)) { + var tempTask = tasks[e]; + tasks[e] = tasks[e + 1]; + tasks[e + 1] = tempTask; + mp.gui.chat.push("SWITCH"); + } + } + } + reviveTaskMenuMedic.Close(); + factionInteractionMenu.Close(); + sortText = "Entfernung aufsteigend"; + mp.events.call("showMedicTasks", 0, JSON.stringify(tasks)); + break; + + //case 2: //Sortierung nach Metern (absteigend) + // mp.gui.chat.push("Sorting 2"); + // sortText = "Entfernung absteigend"; + // break; + //case 3: //Sortierung nach Zeit (aufsteigend) + // mp.gui.chat.push("Sorting 3"); + // sortText = "Restzeit aufsteigend"; + // break; + //case 4: //Sortierung nach Zeit (absteigend) + // mp.gui.chat.push("Sorting 4"); + // sortText = "Restzeit absteigend"; + // break; + } + } } - } else { - activeTask = false; - activeCheckpoint.destroy(); + }); + + function getDistance1(index) { + return mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, newTasks[index].Position.x, newTasks[index].Position.y, newTasks[index].Position.z, true).toFixed(2); } - } - }); -} \ No newline at end of file + function getDistance2(index) { + return mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, newTasks[index].Position.x, newTasks[index].Position.y, newTasks[index].Position.z, true).toFixed(2); + } + + mp.events.add('render', () => { + if (activeTask) { + rangeLeft = mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, taskFinish.x, taskFinish.y, taskFinish.z, true).toFixed(2); + if (rangeLeft > 1.9) { + ambulanceImagePos = 0.655 - (mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, taskFinish.x, taskFinish.y, taskFinish.z, true) / taskRange * 0.35); + mp.game.graphics.drawRect(0.5, 0.945, 0.35, 0.025, 150, 0, 0, 200); + mp.game.graphics.drawText(rangeLeft.toString() + "m", [0.5, 0.93], { + font: 0, + color: [255, 255, 255, 255], + scale: [0.35, 0.35], + outline: true, + centre: true + }); + if (taskRange < rangeLeft) ambulanceImagePos = 0.3; + mp.game.graphics.drawSprite("medicimages", "finish", 0.655, 0.898, 0.04, 0.07, 0, 255, 255, 255, 255); + if (player.isInAnyVehicle(false)) { + mp.game.graphics.drawSprite("medicimages", "ambulance", ambulanceImagePos + 0.01, 0.915, 0.04, 0.07, 0, 255, 255, 255, 255); + } else { + mp.game.graphics.drawSprite("medicimages", "running", ambulanceImagePos + 0.02, 0.915, 0.02, 0.035, 0, 255, 0, 0, 255); + } + } else { + activeTask = false; + activeCheckpoint.destroy(); + } + } + }); + } \ No newline at end of file diff --git a/ReallifeGamemode.Client/Interaction/interactionmenu.ts b/ReallifeGamemode.Client/Interaction/interactionmenu.ts index 2f4d749e..d1dbd34a 100644 --- a/ReallifeGamemode.Client/Interaction/interactionmenu.ts +++ b/ReallifeGamemode.Client/Interaction/interactionmenu.ts @@ -31,6 +31,8 @@ export default function (globalData: IGlobalData) { var vehiclesItem = new UIMenuItem("Fahrzeuge", "Zeige deine Fahrzeuge an"); + var ticketItem = new UIMenuItem("Ticket annehmen", "Strafticket annehmen"); + mp.events.add("SERVER:InteractionMenu_OpenMenu", (accountDataJson: string, faction: string, group: string, factionInvite: boolean, groupInvite: boolean) => { var accountData: AccountData = JSON.parse(accountDataJson); @@ -44,7 +46,7 @@ export default function (globalData: IGlobalData) { menu.BindMenuToItem(getAccountMenu(accountData), accountItem); menu.AddItem(licenseItem); - menu.BindMenuToItem(getLicenseMenu(accountData.licenses, menu), licenseItem); + menu.BindMenuToItem(getLicenseMenu(accountData, accountData.licenses, menu), licenseItem); var vehicles = accountData.vehicles; if (vehicles.length > 0) { @@ -165,7 +167,7 @@ export default function (globalData: IGlobalData) { return accountMenu; } - function getLicenseMenu(data: Licenses, parentMenu: NativeUI.Menu): NativeUI.Menu { + function getLicenseMenu(accdata: AccountData, data: Licenses, parentMenu: NativeUI.Menu, ): NativeUI.Menu { var licenseMenu = new NativeUI.Menu("Lizenzen", mp.players.local.name, new Point(50, 50), null, null); var menuItem = new UIMenuItem("Auto Führerschein"); @@ -198,6 +200,17 @@ export default function (globalData: IGlobalData) { } else if (data.weaponLicense == true) { menuItem.SetRightLabel("~g~erhalten"); } + + menuItem = new UIMenuItem("Strafpunkte"); + if (accdata.points == 0) { + menuItem.SetRightLabel("~g~" + accdata.points); + } + else if (accdata.points >= 1 && accdata.points <= 5) { + menuItem.SetRightLabel("~y~" + accdata.points); + } + if (accdata.points > 5) { + menuItem.SetRightLabel("~r~" + accdata.points); + } licenseMenu.AddItem(menuItem); licenseMenu.AddItem(new UIMenuItem("Lizenzen an Spieler zeigen")); diff --git a/ReallifeGamemode.Client/ReallifeGamemode.Client.csproj b/ReallifeGamemode.Client/ReallifeGamemode.Client.csproj index 1d7f8fb4..e9e3931d 100644 --- a/ReallifeGamemode.Client/ReallifeGamemode.Client.csproj +++ b/ReallifeGamemode.Client/ReallifeGamemode.Client.csproj @@ -2,7 +2,7 @@ Library - netcoreapp2.1 + netcoreapp3.1 Debug;Release;ServerBuild diff --git a/ReallifeGamemode.Client/global.d.ts b/ReallifeGamemode.Client/global.d.ts index 79ec85e3..dc0525ca 100644 --- a/ReallifeGamemode.Client/global.d.ts +++ b/ReallifeGamemode.Client/global.d.ts @@ -9,6 +9,7 @@ declare type AccountData = { regDate: string; + points: number; adminLevel: string; faction: string; factionRank: string; diff --git a/ReallifeGamemode.Client/package-lock.json b/ReallifeGamemode.Client/package-lock.json index fc3cf9e1..e8d2188d 100644 --- a/ReallifeGamemode.Client/package-lock.json +++ b/ReallifeGamemode.Client/package-lock.json @@ -344,9 +344,9 @@ "dev": true }, "acorn": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz", - "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true }, "ajv": { @@ -607,6 +607,16 @@ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "bluebird": { "version": "3.5.5", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", @@ -765,9 +775,9 @@ "dev": true }, "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, "requires": { "bluebird": "^3.5.5", @@ -822,9 +832,9 @@ } }, "chokidar": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", - "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -1026,9 +1036,9 @@ }, "dependencies": { "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, "requires": { "bluebird": "^3.5.5", @@ -1555,6 +1565,13 @@ "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", "dev": true }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -1664,14 +1681,15 @@ "dev": true }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", + "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" + "node-pre-gyp": "*" }, "dependencies": { "abbrev": { @@ -1719,7 +1737,7 @@ } }, "chownr": { - "version": "1.1.1", + "version": "1.1.4", "bundled": true, "dev": true, "optional": true @@ -1749,7 +1767,7 @@ "optional": true }, "debug": { - "version": "4.1.1", + "version": "3.2.6", "bundled": true, "dev": true, "optional": true, @@ -1776,12 +1794,12 @@ "optional": true }, "fs-minipass": { - "version": "1.2.5", + "version": "1.2.7", "bundled": true, "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.6.0" } }, "fs.realpath": { @@ -1807,7 +1825,7 @@ } }, "glob": { - "version": "7.1.3", + "version": "7.1.6", "bundled": true, "dev": true, "optional": true, @@ -1836,7 +1854,7 @@ } }, "ignore-walk": { - "version": "3.0.1", + "version": "3.0.3", "bundled": true, "dev": true, "optional": true, @@ -1855,7 +1873,7 @@ } }, "inherits": { - "version": "2.0.3", + "version": "2.0.4", "bundled": true, "dev": true, "optional": true @@ -1891,13 +1909,13 @@ } }, "minimist": { - "version": "0.0.8", + "version": "1.2.5", "bundled": true, "dev": true, "optional": true }, "minipass": { - "version": "2.3.5", + "version": "2.9.0", "bundled": true, "dev": true, "optional": true, @@ -1907,42 +1925,42 @@ } }, "minizlib": { - "version": "1.2.1", + "version": "1.3.3", "bundled": true, "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.9.0" } }, "mkdirp": { - "version": "0.5.1", + "version": "0.5.3", "bundled": true, "dev": true, "optional": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "ms": { - "version": "2.1.1", + "version": "2.1.2", "bundled": true, "dev": true, "optional": true }, "needle": { - "version": "2.3.0", + "version": "2.3.3", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^4.1.0", + "debug": "^3.2.6", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.12.0", + "version": "0.14.0", "bundled": true, "dev": true, "optional": true, @@ -1956,11 +1974,11 @@ "rc": "^1.2.7", "rimraf": "^2.6.1", "semver": "^5.3.0", - "tar": "^4" + "tar": "^4.4.2" } }, "nopt": { - "version": "4.0.1", + "version": "4.0.3", "bundled": true, "dev": true, "optional": true, @@ -1970,19 +1988,29 @@ } }, "npm-bundled": { - "version": "1.0.6", + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.4.1", + "version": "1.4.8", "bundled": true, "dev": true, "optional": true, "requires": { "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "npmlog": { @@ -2047,7 +2075,7 @@ "optional": true }, "process-nextick-args": { - "version": "2.0.0", + "version": "2.0.1", "bundled": true, "dev": true, "optional": true @@ -2062,18 +2090,10 @@ "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } } }, "readable-stream": { - "version": "2.3.6", + "version": "2.3.7", "bundled": true, "dev": true, "optional": true, @@ -2088,7 +2108,7 @@ } }, "rimraf": { - "version": "2.6.3", + "version": "2.7.1", "bundled": true, "dev": true, "optional": true, @@ -2115,7 +2135,7 @@ "optional": true }, "semver": { - "version": "5.7.0", + "version": "5.7.1", "bundled": true, "dev": true, "optional": true @@ -2168,18 +2188,18 @@ "optional": true }, "tar": { - "version": "4.4.8", + "version": "4.4.13", "bundled": true, "dev": true, "optional": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" + "yallist": "^3.0.3" } }, "util-deprecate": { @@ -2204,7 +2224,7 @@ "optional": true }, "yallist": { - "version": "3.0.3", + "version": "3.1.1", "bundled": true, "dev": true, "optional": true @@ -2694,9 +2714,9 @@ } }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "lcid": { @@ -2892,9 +2912,9 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "mississippi": { @@ -2937,20 +2957,12 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } + "minimist": "^1.2.5" } }, "move-concurrently": { @@ -4025,9 +4037,9 @@ }, "dependencies": { "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, "requires": { "bluebird": "^3.5.5", @@ -4323,9 +4335,9 @@ } }, "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, "uri-js": { @@ -4409,12 +4421,12 @@ "dev": true }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz", + "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==", "dev": true, "requires": { - "chokidar": "^2.0.2", + "chokidar": "^2.1.8", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" } diff --git a/ReallifeGamemode.Database/Entities/User.cs b/ReallifeGamemode.Database/Entities/User.cs index 269c12ed..043e32bd 100644 --- a/ReallifeGamemode.Database/Entities/User.cs +++ b/ReallifeGamemode.Database/Entities/User.cs @@ -99,6 +99,7 @@ namespace ReallifeGamemode.Database.Entities public bool WeaponLicense { get; set; } = false; public bool IsAdmin(AdminLevel level) => AdminLevel >= level; + public int Points { get; set; } [NotMapped] public Player Player diff --git a/ReallifeGamemode.Database/Windows PowerShell.lnk b/ReallifeGamemode.Database/Windows PowerShell.lnk new file mode 100644 index 0000000000000000000000000000000000000000..07b77a2d95f68780ff1c55303ddb7b890dbb2673 GIT binary patch literal 2366 zcmds3O-NKx6#m9EtBEk0evC?^M*5p+MorBk#b&ZHiV! z5McyEt2X^EQZQnKpiM@buonGbi$KYY+9Z*E=gyB>lI;TT%(*|`J@>okopay0uN;8I zmc$x}s2ckRIm~4L`rWHN15E>#c-yr$>DC*LF*aXmTB7=i`isSe4Db8O7n#F_fwY^i z7GSH(bt4_yiwm`c(qyL!ZZ&wiH|d@W{y=lR(QaZl79bg)ACG$?+hk@7bu!XK@%Qcg z2%s7DFwhQ@^D9uDV607X!PjZF>7kr#U{8XxpPaQR!ntVGOq@P+lB*3mLdXG^Vig)= ztmB?=Q5yWE6(yDavozhCU=0_^oUoo>I}_`4OTEfs9j)+@TSt&T*{3YFPw(E5+cunb zJ6%BDlsyEOJub|+$7!y1f=gf{D=lY`#y#DuGtpwS>#b&^9t=A54jtSl?qR=m+~cOGi6O|rL;K|DIv;A$~=nc7;TdPR{BZ;=1K4{#A2<* zBNPX`VyRCo)#UND-z|62=i;{p+SSTEOdeAM$IwLdIHTrZzmBNRQ;~^H#0+YMh{-u| z(9d#WbZq8q15U9os{+(&=Bnke;{Ymg5c^PqDwOg(?ISjcdQpVK)Ujh1W$Ia}B8NdP zJ2Wy)KSLU3kH3a^{51T{>oz)+??KoebzPNVwAnQ?cF_OTjf}-yDE}t{bHQ_S>lq}s zq{utL_9aE~kd@>1ivHCflWHq^N}Tua9JlzPGxVov65qWwCMu)M^~3>EE}sa`e_W2 zNQ96~OsGF5CZtE&UQpckW7(CgYoX_-h$mB!L6MDp zOtEgt4obG_Nu7;+BGPlC0J%yhj~7)gMP_$WTna7Ve7+h-SL7>HR=Mc3+{EQ_j(dqg zsq_7dug-g0e53Be`oVYJtfj=|!jb5!rw~9qGYwGRI#V^&GYB9>mZ+~AQ4@~{z|%F! IA^mvy1vfW&6951J literal 0 HcmV?d00001 diff --git a/ReallifeGamemode.Server/Commands/FactionCommands.cs b/ReallifeGamemode.Server/Commands/FactionCommands.cs index 5f73067e..0ffb89eb 100644 --- a/ReallifeGamemode.Server/Commands/FactionCommands.cs +++ b/ReallifeGamemode.Server/Commands/FactionCommands.cs @@ -1,4 +1,4 @@ -using GTANetworkAPI; +using GTANetworkAPI; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Extensions; diff --git a/ReallifeGamemode.Server/Events/Key.cs b/ReallifeGamemode.Server/Events/Key.cs index bd4aa6a2..3beedbf8 100644 --- a/ReallifeGamemode.Server/Events/Key.cs +++ b/ReallifeGamemode.Server/Events/Key.cs @@ -98,9 +98,13 @@ namespace ReallifeGamemode.Server.Events User user = player.GetUser(); switch (user.FactionId) { - //LSFD + //LSPD + case 1: + player.TriggerEvent("showFactionInteractionLSPD", user.FactionId, user.GetData("duty"), user.Faction.Name, user.FactionLeader); + break; + //Medic case 2: - player.TriggerEvent("showFactionInteraction", user.FactionId, user.GetData("duty"), user.Faction.Name, user.FactionLeader, Medic.ReviveTasks.Count.ToString(), Medic.HealTasks.Count.ToString(), Medic.FireTasks.Count.ToString()); + player.TriggerEvent("showFactionInteractionMedic", user.FactionId, user.GetData("duty"), user.Faction.Name, user.FactionLeader, Medic.ReviveTasks.Count.ToString(), Medic.HealTasks.Count.ToString(), Medic.FireTasks.Count.ToString()); break; } } @@ -127,6 +131,7 @@ namespace ReallifeGamemode.Server.Events { regDate = u.RegistrationDate.ToShortDateString(), adminLevel = u.AdminLevel.GetName(), + points = u.Points, faction = u.Faction?.Name ?? "Zivilist", factionRank = u.GetFactionRank().RankName, group = u.Group?.Name ?? "Keine", diff --git a/ReallifeGamemode.Server/Managers/InteractionManager.cs b/ReallifeGamemode.Server/Managers/InteractionManager.cs index 52a21c9c..6ebb1010 100644 --- a/ReallifeGamemode.Server/Managers/InteractionManager.cs +++ b/ReallifeGamemode.Server/Managers/InteractionManager.cs @@ -378,6 +378,7 @@ namespace ReallifeGamemode.Server.Managers string reason = (string)JsonConvert.DeserializeObject(jsonReason); Player target = PlayerService.GetPlayerByNameOrId(nameOrId); string playername = NAPI.Player.GetPlayerName(player); + string targetname = NAPI.Player.GetPlayerName(target); player.SendNotification($"~w~Du hast ~y~{targetname} ~w~ein Ticket in Höhe von ~b~{amount}$ ~w~gestellt. Grund: ~g~{reason}~w~."); target.SendNotification($"~b~{player.GetUser().FactionRank.RankName} | {playername} ~w~hat dir ein Ticket in Höhe von ~y~{amount}$ ~w~gestellt.", true); diff --git a/ReallifeGamemode.Server/ReallifeGamemode.Server.csproj b/ReallifeGamemode.Server/ReallifeGamemode.Server.csproj index 418fad1f..4259a105 100644 --- a/ReallifeGamemode.Server/ReallifeGamemode.Server.csproj +++ b/ReallifeGamemode.Server/ReallifeGamemode.Server.csproj @@ -25,6 +25,7 @@ +