diff --git a/ReallifeGamemode.Client/Interaction/interactionmenu.ts b/ReallifeGamemode.Client/Interaction/interactionmenu.ts index d1dbd34a..2106c422 100644 --- a/ReallifeGamemode.Client/Interaction/interactionmenu.ts +++ b/ReallifeGamemode.Client/Interaction/interactionmenu.ts @@ -33,7 +33,7 @@ export default function (globalData: IGlobalData) { var ticketItem = new UIMenuItem("Ticket annehmen", "Strafticket annehmen"); - mp.events.add("SERVER:InteractionMenu_OpenMenu", (accountDataJson: string, faction: string, group: string, factionInvite: boolean, groupInvite: boolean) => { + mp.events.add("SERVER:InteractionMenu_OpenMenu", (accountDataJson: string, faction: string, group: string, factionInvite: boolean, groupInvite: boolean, ticket_boolean: boolean, ticket_amount: number) => { var accountData: AccountData = JSON.parse(accountDataJson); var menu = getInteractionMenu(); @@ -103,6 +103,12 @@ export default function (globalData: IGlobalData) { menu.BindMenuToItem(paycheckMenu, paycheckItem); } + if (ticket_boolean == true) + { + menu.AddItem(ticketItem); + menu.BindMenuToItem(getTicketMenu(ticket_amount, menu), ticketItem); + } + var items: Array = new Array(); if (factionInvite) items.push("Fraktion"); if (groupInvite) items.push("Gruppe"); @@ -327,5 +333,26 @@ export default function (globalData: IGlobalData) { return menu; } + function getTicketMenu(ticket_amount: number, parentMenu: NativeUI.Menu): NativeUI.Menu { + var factionMenu = new NativeUI.Menu("Ticket", `Ticket in Höhe von ${ticket_amount}`, new Point(50, 50), null, null); + factionMenu.AddItem(new UIMenuItem("Ticket annehmen")); + factionMenu.AddItem(new UIMenuItem("Ticket ablehnen")); + factionMenu.Visible = false; + + factionMenu.ItemSelect.on((item, index) => { + if (index === 0) // Ticket annehmen + { + parentMenu.Close(); + mp.events.callRemote("CLIENT:InteractionMenu_Ticket", "Angenommen", ticket_amount); + } + else if (index === 1) // Ticket ablehnen + { + parentMenu.Close(); + mp.events.callRemote("CLIENT:InteractionMenu_Ticket", "Abgelehnt", ticket_amount); + } + }); + + return factionMenu; + } } diff --git a/ReallifeGamemode.Server/Events/Key.cs b/ReallifeGamemode.Server/Events/Key.cs index 3beedbf8..e04e9a1c 100644 --- a/ReallifeGamemode.Server/Events/Key.cs +++ b/ReallifeGamemode.Server/Events/Key.cs @@ -146,8 +146,10 @@ namespace ReallifeGamemode.Server.Events string group = u.Group != null && u.GroupRank >= GroupRank.MANAGER ? u.Group.Name : null; bool factionInvite = player.HasData("accept_faction_invite"); bool groupInvite = player.HasData("accept_group_invite"); + bool ticket_boolean = player.HasData("ticket_boolean"); + int ticket_amount = NAPI.Data.GetEntityData(player, "ticket_amount"); - player.TriggerEvent("SERVER:InteractionMenu_OpenMenu", JsonConvert.SerializeObject(accountData), faction, group, factionInvite, groupInvite); + player.TriggerEvent("SERVER:InteractionMenu_OpenMenu", JsonConvert.SerializeObject(accountData), faction, group, factionInvite, groupInvite, ticket_boolean, ticket_amount); } [RemoteEvent("keyPress:E")] diff --git a/ReallifeGamemode.Server/Managers/InteractionManager.cs b/ReallifeGamemode.Server/Managers/InteractionManager.cs index e8bc61b6..290a8a4b 100644 --- a/ReallifeGamemode.Server/Managers/InteractionManager.cs +++ b/ReallifeGamemode.Server/Managers/InteractionManager.cs @@ -384,8 +384,12 @@ namespace ReallifeGamemode.Server.Managers target.SendNotification($"~b~{player.GetUser().FactionRank.RankName} | {playername} ~w~hat dir ein Ticket in Höhe von ~y~{amount}$ ~w~gestellt.", true); target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Strafticket im Interaktionsmenü annehmen.", true); //target.SendChatMessage("Du kannst mit '/accept ticket' das Strafticket annehmen."); + target.SetData("ticket_boolean", true); + //target.SetData("ticket_amount", amount); + //target.SetSharedData("ticket_amount", amount); + NAPI.Data.SetEntityData(target, "ticket_amount", amount); + NAPI.Data.SetEntityData(target, "ticket_player", player); - } [RemoteEvent("CLIENT:InteractionMenu_LSPD_Points3")] public void InteractionMenu_LSPD_Points3(Player player, string jsonNameOrId, string jsoAmount, string jsonReason) @@ -396,10 +400,19 @@ namespace ReallifeGamemode.Server.Managers Player target = PlayerService.GetPlayerByNameOrId(nameOrId); string playername = NAPI.Player.GetPlayerName(player); string targetname = NAPI.Player.GetPlayerName(target); - if (target.GetUser().DriverLicenseVehicle == false && target.GetUser().DriverLicenseBike == false) + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + else if (target.GetUser().DriverLicenseVehicle == false && target.GetUser().DriverLicenseBike == false) { player.SendNotification("~r~Spieler hat weder Auto- noch Motorradführerschein!"); } + else if(target == player) + { + player.SendNotification("~r~Du kannst dir selbst keine Punkte setzen!"); + } else { if (amount > -9 && amount < 9) @@ -424,7 +437,18 @@ namespace ReallifeGamemode.Server.Managers else if (target.GetUser().Points >= 8) { target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Du hast nun ~r~8/8 ~x~Strafpunkten.", true); - target.SendNotification($"~w~Dir wird ~r~Auo- ~w~und ~r~Motorradführerschein ~w~entzogen.", true); + target.SendNotification($"~w~Dir wird ~r~Auto- ~w~und ~r~Motorradführerschein ~w~entzogen.", true); + foreach (var copPlayer in NAPI.Pools.GetAllPlayers()) + { + User copUser = copPlayer.GetUser(); + if (copUser.FactionId == 1 || copUser.FactionId == 3) + { + if (copUser.GetData("duty") == true) + { + ChatService.SendMessage(copPlayer, "!{#8181E9}HQ: " + targetname + " besitzt nun keinen Führerschein mehr."); + } + } + } using (var dbContext = new DatabaseContext()) { User target2 = target.GetUser(dbContext); @@ -446,6 +470,41 @@ namespace ReallifeGamemode.Server.Managers } } } + [RemoteEvent("CLIENT:InteractionMenu_Ticket")] + public void InteractionMenuTicket(Player target, string type, int ticket_amount) + { + Player player = NAPI.Data.GetEntityData(target, "ticket_player"); + string playername = NAPI.Player.GetPlayerName(player); + string targetname = NAPI.Player.GetPlayerName(target); + /*if (type != "Fraktion" && type != "Gruppe") return; + + Player target = PlayerService.GetPlayerByNameOrId(nameOrId); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + }*/ + + //User targetUser = target.GetUser(); + //User playerUser = player.GetUser(); + + if (type == "Angenommen") + { + target.SendNotification($"~g~Du hast das Ticket über ~b~{ticket_amount}$ ~g~angenommen und bezahlt.", true); + player.SendNotification($"~y~{targetname} ~g~hat das Ticket über ~b~{ticket_amount}$ ~g~angenommen und bezahlt.", true); + target.ResetData("ticket_boolean"); + NAPI.Data.ResetEntityData(target, "ticket_amount"); + NAPI.Data.ResetEntityData(target, "ticket_player"); + } + else if (type == "Abgelehnt") + { + target.SendNotification($"~r~Du hast das Ticket über ~b~{ticket_amount}$ ~r~abgelehnt.", true); + player.SendNotification($"~y~{targetname} ~r~hat das Ticket über ~b~{ticket_amount}$ ~r~abgelehnt.", true); + target.ResetData("ticket_boolean"); + NAPI.Data.ResetEntityData(target, "ticket_amount"); + NAPI.Data.ResetEntityData(target, "ticket_player"); + } + } #endregion #region Spielerinteraktionen PFEILTASTE-LINKS [RemoteEvent("openTradeInventory")]