From 32540c4aa93cd13ce0b2309ce9497dbf1e0978e1 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 2 Jun 2020 14:40:54 +0200 Subject: [PATCH] add interactionmenu find cars as member & add funcation give money --- .../Interaction/interactionmenu.ts | 102 ++++++++++++++++-- ReallifeGamemode.Server/Events/Key.cs | 14 ++- .../Managers/InteractionManager.cs | 62 ++++++++++- 3 files changed, 167 insertions(+), 11 deletions(-) diff --git a/ReallifeGamemode.Client/Interaction/interactionmenu.ts b/ReallifeGamemode.Client/Interaction/interactionmenu.ts index f7ab1e74..4b5b0d0c 100644 --- a/ReallifeGamemode.Client/Interaction/interactionmenu.ts +++ b/ReallifeGamemode.Client/Interaction/interactionmenu.ts @@ -21,7 +21,9 @@ export default function (globalData: IGlobalData) { var serviceItem = new UIMenuItem("Service rufen", "Rufe einen Dienstleister an"); - var factionItem = new UIMenuItem("Fraktion", "Verwalte deine Fraktion"); + var factionItem = new UIMenuItem("Fraktion", "Fraktionsfahrzeug finden"); + + var factionleaderItem = new UIMenuItem("Fraktion", "Verwalte deine Fraktion"); var groupItem = new UIMenuItem("Gruppe", "Verwalte deine Gruppe"); @@ -33,7 +35,9 @@ export default function (globalData: IGlobalData) { var ticketItem = new UIMenuItem("Strafticket", "Strafticket annehmen/ablehnen"); - mp.events.add("SERVER:InteractionMenu_OpenMenu", (accountDataJson: string, faction: string, group: string, factionInvite: boolean, groupInvite: boolean, ticket_boolean: boolean, ticket_amount) => { + var payName: string; + + mp.events.add("SERVER:InteractionMenu_OpenMenu", (accountDataJson: string, factionleader: string, faction: string, group: string, factionInvite: boolean, groupInvite: boolean, ticket_boolean: boolean, ticket_amount, pay_amount) => { var accountData: AccountData = JSON.parse(accountDataJson); @@ -57,11 +61,16 @@ export default function (globalData: IGlobalData) { menu.BindMenuToItem(getVehiclesMenu(vehicles, "CLIENT:InteractionMenu_PlayerVehicleInteraction", true, menu), vehiclesItem); } - if (faction) { + if (faction && !factionleader) { factionItem.SetRightLabel(faction); menu.AddItem(factionItem); menu.BindMenuToItem(getFactionMenu(faction, accountData.factionVehicles, accountData.stateFaction, menu), factionItem); } + if (faction && factionleader) { + factionleaderItem.SetRightLabel(factionleader); + menu.AddItem(factionleaderItem); + menu.BindMenuToItem(getFactionLeaderMenu(faction, accountData.factionVehicles, accountData.stateFaction, menu), factionleaderItem); + } if (group) { groupItem.SetRightLabel(group); @@ -69,6 +78,9 @@ export default function (globalData: IGlobalData) { menu.BindMenuToItem(getGroupMenu(group, menu), groupItem); } + + + if (accountData.paycheck) { var p = accountData.paycheck; var paycheckMenu = new Menu("Gehaltsscheck", "Dein Verdienst der letzten Stunde", new Point(50, 50), null, null); @@ -112,6 +124,9 @@ export default function (globalData: IGlobalData) { menu.BindMenuToItem(paycheckMenu, paycheckItem); } + var payItem = new UIMenuItem("Geld geben"); + menu.AddItem(payItem); + var nextPaydayItem = new UIMenuItem("Nächster PayDay"); nextPaydayItem.SetRightLabel(`${accountData.nextPayday} Minuten`); menu.AddItem(nextPaydayItem); @@ -138,6 +153,17 @@ export default function (globalData: IGlobalData) { if (item === acceptItem) { mp.events.callRemote("CLIENT:InteractionMenu_AcceptInvite", acceptItem.SelectedValue); menu.Close(true); + } else if (item === payItem) { + mp.gui.chat.activate(true); + mp.gui.cursor.show(true, true); + globalData.InMenu = false; + var input = new InputHelper("Welchem Spieler möchtest du Geld geben (Name / ID)?", globalData); + input.show(); + input.getValue(name => { + mp.events.call("CLIENT:InteractionMenu_Pay_Name", name); + menu.Close(true); + mp.gui.cursor.show(false, false); + }); } }); @@ -253,17 +279,41 @@ export default function (globalData: IGlobalData) { } function getFactionMenu(faction: string, vehData: VehicleData[], stateFaction: boolean, parentMenu: NativeUI.Menu): NativeUI.Menu { + var factionMenu = new NativeUI.Menu("Fraktion", faction, new Point(50, 50), null, null); + + + factionMenu.Visible = false; + + if (vehData.length > 0) { + var factionVehicleItem = new UIMenuItem("Fahrzeuge Finden", "Finden"); + factionMenu.AddItem(factionVehicleItem); + factionMenu.BindMenuToItem(getVehiclesMenu(vehData, "CLIENT:InteractionMenu_FactionVehicleInteraction", !stateFaction, parentMenu), factionVehicleItem); + } + + return factionMenu; + } + function getFactionLeaderMenu(faction: string, vehData: VehicleData[], stateFaction: boolean, parentMenu: NativeUI.Menu): NativeUI.Menu { + + var factionMenu = new NativeUI.Menu("Fraktion", faction, new Point(50, 50), null, null); + factionMenu.AddItem(new UIMenuItem("Spieler einladen")); factionMenu.AddItem(new UIMenuItem("Spieler rauswerfen")); factionMenu.Visible = false; if (vehData.length > 0) { - var factionVehicleItem = new UIMenuItem("Fraktionsfahrzeuge", "Finden oder verkaufen"); + var factionVehicleItem = new UIMenuItem("Fahrzeuge Finden", "Finden"); factionMenu.AddItem(factionVehicleItem); factionMenu.BindMenuToItem(getVehiclesMenu(vehData, "CLIENT:InteractionMenu_FactionVehicleInteraction", !stateFaction, parentMenu), factionVehicleItem); } + if (vehData.length > 0) { + var factionVehicleItem2 = new UIMenuItem("Fahrzeuge Verkaufen", "Verkaufen"); + factionMenu.AddItem(factionVehicleItem2); + factionMenu.BindMenuToItem(getVehiclesMenu2(vehData, "CLIENT:InteractionMenu_FactionVehicleInteractionSell", !stateFaction, parentMenu), factionVehicleItem2); + } + + factionMenu.ItemSelect.on((item, index) => { if (index === 0) { // Inviten var input = new InputHelper("Welchen Spieler möchtest du inviten (Name / ID)?", globalData); @@ -330,17 +380,42 @@ export default function (globalData: IGlobalData) { function getVehiclesMenu(vehicles: VehicleData[], eventName: string, allowSell: boolean, parentMenu: NativeUI.Menu): NativeUI.Menu { var desc = "Finden"; - if (allowSell) { - desc += " oder Verkaufen"; - } var menu = new Menu("Fahrzeuge", desc, new Point(50, 50), null, null); var items: string[] = ["Finden"]; + + var collection = new ItemsCollection(items); + + vehicles.forEach(veh => { + var name: string = mp.game.ui.getLabelText(mp.game.vehicle.getDisplayNameFromVehicleModel(veh.Model)); + + var item = new UIMenuListItem(`${veh.Id.toString().padEnd(5)} | ${name}`, "", collection, null, { id: veh.Id }); + + menu.AddItem(item); + }); + + menu.ItemSelect.on((item: NativeUI.UIMenuListItem, index: number) => { + var id = item.Data.id; + var selection = item.SelectedValue; + + mp.events.callRemote(eventName, id, selection); + + parentMenu.Close(true); + }); + + return menu; + } + + function getVehiclesMenu2(vehicles: VehicleData[], eventName: string, allowSell: boolean, parentMenu: NativeUI.Menu): NativeUI.Menu { + var desc = ""; if (allowSell) { - items.push("Verkaufen"); + desc += " Verkaufen"; } + var menu = new Menu("Fahrzeuge", desc, new Point(50, 50), null, null); + + var items: string[] = ["Verkaufen"]; var collection = new ItemsCollection(items); @@ -418,6 +493,7 @@ export default function (globalData: IGlobalData) { return menu; } + function getTicketMenu(ticket_amount: number, parentMenu: NativeUI.Menu): NativeUI.Menu { var ticketMenu = new NativeUI.Menu("Ticket", `Ticket in Höhe von ${ticket_amount}$`, new Point(50, 50), null, null); ticketMenu.AddItem(new UIMenuItem("Ticket annehmen")); @@ -440,4 +516,14 @@ export default function (globalData: IGlobalData) { return ticketMenu; } + mp.events.add("CLIENT:InteractionMenu_Pay_Name", (name) => { + payName = name; + var input = new InputHelper("Wie viel?", globalData); + mp.gui.cursor.show(true, true); + input.show(); + input.getValue(amount => { + mp.events.callRemote("CLIENT:InteractionMenu_Pay", JSON.stringify(payName), amount); + mp.gui.cursor.show(false, false); + }); + }); } diff --git a/ReallifeGamemode.Server/Events/Key.cs b/ReallifeGamemode.Server/Events/Key.cs index 1ca9bbe1..87299a44 100644 --- a/ReallifeGamemode.Server/Events/Key.cs +++ b/ReallifeGamemode.Server/Events/Key.cs @@ -151,6 +151,8 @@ namespace ReallifeGamemode.Server.Events adminLevel = u.AdminLevel.GetName(), points = u.Points, faction = u.Faction?.Name ?? "Zivilist", + factionleader = u.Faction?.Name ?? "Zivilist", + //factionleader = u.FactionLeader, stateFaction = u.Faction?.StateOwned, factionRank = u.GetFactionRank().RankName, group = u.Group?.Name ?? "Keine", @@ -163,18 +165,26 @@ namespace ReallifeGamemode.Server.Events nextPayday = u.PaydayTimer }; - string faction = u.FactionLeader ? u.Faction.Name : null; + string faction = u.Faction.Name; + string factionleader = u.FactionLeader ? u.Faction.Name : null; 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 = 0; + int pay_amount = 0; + if (player.HasData("ticket_amount")) { ticket_amount = player.GetData("ticket_amount"); } - player.TriggerEvent("SERVER:InteractionMenu_OpenMenu", JsonConvert.SerializeObject(accountData), faction, group, factionInvite, groupInvite, ticket_boolean, ticket_amount); + if(player.HasData("pay_amount")) + { + pay_amount = player.GetData("pay_amount"); + } + + player.TriggerEvent("SERVER:InteractionMenu_OpenMenu", JsonConvert.SerializeObject(accountData), factionleader, faction, group, factionInvite, groupInvite, ticket_boolean, ticket_amount, pay_amount); } [RemoteEvent("keyPress:E")] diff --git a/ReallifeGamemode.Server/Managers/InteractionManager.cs b/ReallifeGamemode.Server/Managers/InteractionManager.cs index 4cb9e701..f1379fe5 100644 --- a/ReallifeGamemode.Server/Managers/InteractionManager.cs +++ b/ReallifeGamemode.Server/Managers/InteractionManager.cs @@ -394,8 +394,24 @@ namespace ReallifeGamemode.Server.Managers if (selection == "Finden") { player.TriggerEvent("SERVER:Util_setWaypoint", veh.Position.X, veh.Position.Y); + } + } + + [RemoteEvent("CLIENT:InteractionMenu_FactionVehicleInteractionSell")] + public void FactionVehicleInteractionSell(Player player, int id, string selection) + { + using var dbContext = new DatabaseContext(true); + var user = player.GetUser(dbContext); + + var factionVehicle = dbContext.FactionVehicles.ToList().Where(v => v.Id == id && v.GetOwners().Contains(user.FactionId.Value)).FirstOrDefault(); + if (factionVehicle == null) + { + ChatService.ErrorMessage(player, "Das Fahrzeug wurde nicht gefunden"); } - else if (selection == "Verkaufen") + + GTANetworkAPI.Vehicle veh = VehicleManager.GetVehicleFromServerVehicle(factionVehicle); + + if (selection == "Verkaufen") { if (dbContext.FactionVehicles.ToList().Where(f => f.GetOwners().Contains(user.FactionId.Value)).Count() <= 6) { @@ -588,6 +604,50 @@ namespace ReallifeGamemode.Server.Managers } } + [RemoteEvent("CLIENT:InteractionMenu_Pay")] + public void InteractionMenu_Pay(Player player, string jsonNameOrId, string stringAmount) + { + string nameOrId = (string)JsonConvert.DeserializeObject(jsonNameOrId); + int amount = Int32.Parse(stringAmount); + Player target = PlayerService.GetPlayerByNameOrId(nameOrId); + string playername = NAPI.Player.GetPlayerName(player); + string targetname = NAPI.Player.GetPlayerName(target); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + else if (target == player) + { + player.SendNotification("~r~Du kannst dir selber kein Geld geben!"); + } + else + { + if (amount > 0 && amount < 5000) + { + player.SendNotification($"~w~Du hast ~y~{targetname} ~w~ ${amount} gegeben."); + target.SendNotification($"~w~ Du hast von ~y~{playername} ~w~ ${amount}$ erhalten.", true); + target.SetData("pay_amount", amount); + + player.SendChatMessage("hallo debug player"); + target.SendChatMessage("hallo debug target"); + using (var dbContext = new DatabaseContext()) + { + target.GetUser(dbContext).Handmoney += amount; + player.GetUser(dbContext).Handmoney -= amount; + dbContext.SaveChanges(); + } + target.ResetData("pay_amount"); + target.ResetData("pay_player"); + } + else + { + player.SendNotification("~r~ Du kannst nur zwischen $1 und $5.000 geben!"); + } + } + } + + #endregion Eigeninteraktionen PFEILTASTE-RUNTER #region Spielerinteraktionen PFEILTASTE-LINKS