From a8994d9e4ac2356a92f3b7d95aa1a94cab8bdf6b Mon Sep 17 00:00:00 2001 From: hydrant Date: Thu, 2 Apr 2020 22:29:27 +0200 Subject: [PATCH] auto verkaufen --- .../Interaction/interactionmenu.ts | 37 ++++++++++++++++++- ReallifeGamemode.Client/global.d.ts | 18 ++++++--- ReallifeGamemode.Server/Events/Key.cs | 13 ++++++- .../Managers/InteractionManager.cs | 34 +++++++++++++++++ 4 files changed, 92 insertions(+), 10 deletions(-) diff --git a/ReallifeGamemode.Client/Interaction/interactionmenu.ts b/ReallifeGamemode.Client/Interaction/interactionmenu.ts index 20399db0..d3413a94 100644 --- a/ReallifeGamemode.Client/Interaction/interactionmenu.ts +++ b/ReallifeGamemode.Client/Interaction/interactionmenu.ts @@ -29,6 +29,7 @@ export default function (globalData: IGlobalData) { var licenseItem = new UIMenuItem("Lizenzen", "Lizenzen Informationen"); + var vehiclesItem = new UIMenuItem("Fahrzeuge", "Zeige deine Fahrzeuge an"); mp.events.add("SERVER:InteractionMenu_OpenMenu", (accountDataJson: string, faction: string, group: string, factionInvite: boolean, groupInvite: boolean) => { var accountData: AccountData = JSON.parse(accountDataJson); @@ -45,6 +46,12 @@ export default function (globalData: IGlobalData) { menu.AddItem(licenseItem); menu.BindMenuToItem(getLicenseMenu(accountData.licenses, menu), licenseItem); + var vehicles = accountData.vehicles; + if (vehicles.length > 0) { + menu.AddItem(vehiclesItem); + menu.BindMenuToItem(getVehiclesMenu(vehicles, menu), vehiclesItem); + } + if (faction) { factionItem.SetRightLabel(faction); menu.AddItem(factionItem); @@ -106,7 +113,7 @@ export default function (globalData: IGlobalData) { menu.ItemSelect.on((item: NativeUI.UIMenuItem, index: number) => { if (item === acceptItem) { mp.events.callRemote("CLIENT:InteractionMenu_AcceptInvite", acceptItem.SelectedValue); - menu.Close(); + menu.Close(true); } }); @@ -199,7 +206,7 @@ export default function (globalData: IGlobalData) { input.show(); input.getValue(name => { mp.events.callRemote("CLIENT:InteractionMenu_Show", "License", name); - parentMenu.Close(); + parentMenu.Close(true); }); } @@ -278,4 +285,30 @@ export default function (globalData: IGlobalData) { return servicesMenu; } + function getVehiclesMenu(vehicles: VehicleData[], parentMenu: NativeUI.Menu): NativeUI.Menu { + var menu = new Menu("Fahrzeuge", "Finde oder verkaufe deine Fahrzeuge", new Point(50, 50), null, null); + menu.Visible = false; + + var collection = new ItemsCollection(["Finden", "Verkaufen"]); + + vehicles.forEach(veh => { + var name: string = mp.game.vehicle.getDisplayNameFromVehicleModel(veh.Model); + + var item = new UIMenuListItem(`${veh.Id.toString().padEnd(4)} | ${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("CLIENT:InteractionMenu_VehicleInteraction", id, selection); + + parentMenu.Close(true); + }); + + return menu; + } + } diff --git a/ReallifeGamemode.Client/global.d.ts b/ReallifeGamemode.Client/global.d.ts index 986ee13c..76d8ce95 100644 --- a/ReallifeGamemode.Client/global.d.ts +++ b/ReallifeGamemode.Client/global.d.ts @@ -1,4 +1,4 @@ -declare interface IGlobalData { +declare type IGlobalData = { InTuning: boolean, HideGui: boolean, InMenu: boolean, @@ -7,7 +7,7 @@ InInput: boolean } -declare interface AccountData { +declare type AccountData = { regDate: string; adminLevel: string; faction: string; @@ -17,9 +17,15 @@ declare interface AccountData { job: string; paycheck: Paycheck; licenses: Licenses; + vehicles: VehicleData[]; } -declare interface Paycheck { +declare type VehicleData = { + Id: number; + Model: number; +}; + +declare type Paycheck = { financialHelp: number; financialInterest: number; vehicleTaxation: number; @@ -29,18 +35,18 @@ declare interface Paycheck { rentalFees: number; } -declare interface Licenses { +declare type Licenses = { drivingLicenseCar: boolean; drivingLicenseBike: boolean; flightLicensePlane: boolean; weaponLicense: boolean; } -declare interface FactionRanks { +declare type FactionRanks = { factionId: number, ranks: FactionRank[] } -declare interface FactionRank { +declare type FactionRank = { } \ No newline at end of file diff --git a/ReallifeGamemode.Server/Events/Key.cs b/ReallifeGamemode.Server/Events/Key.cs index 515d7a40..bd4aa6a2 100644 --- a/ReallifeGamemode.Server/Events/Key.cs +++ b/ReallifeGamemode.Server/Events/Key.cs @@ -16,6 +16,7 @@ using ReallifeGamemode.Server.Util; using ReallifeGamemode.Server.Inventory.Interfaces; using ReallifeGamemode.Server.DrivingSchool; using ReallifeGamemode.Server.Types; +using Microsoft.EntityFrameworkCore; /** * @overview Life of German Reallife - Event Key (Key.cs) * @author VegaZ @@ -107,9 +108,16 @@ namespace ReallifeGamemode.Server.Events [RemoteEvent("keyPress:DOWN_ARROW")] public void KeyPressDownArrow(Player player) { - User u = player.GetUser(); + using var dbContext = new DatabaseContext(); + User u = player.GetUser(dbContext); if (u == null) return; + var vehicles = dbContext.UserVehicles.Where(veh => veh.UserId == u.Id).OrderBy(veh => veh.Id).Select(v => new + { + v.Id, + v.Model + }); + Paycheck paycheck = null; if (Economy.Paychecks.ContainsKey(u.Id)) paycheck = Economy.Paychecks[u.Id]; @@ -125,7 +133,8 @@ namespace ReallifeGamemode.Server.Events groupRank = u.GroupRank.GetName(), job = JobManager.GetJob(u.JobId ?? 0)?.Name ?? "Keiner", paycheck, - licenses + licenses, + vehicles }; string faction = u.FactionLeader ? u.Faction.Name : null; diff --git a/ReallifeGamemode.Server/Managers/InteractionManager.cs b/ReallifeGamemode.Server/Managers/InteractionManager.cs index 51af1277..bc35bb03 100644 --- a/ReallifeGamemode.Server/Managers/InteractionManager.cs +++ b/ReallifeGamemode.Server/Managers/InteractionManager.cs @@ -335,6 +335,40 @@ namespace ReallifeGamemode.Server.Managers ChatService.BroadcastJob(msg, taxiJob); ChatService.SendMessage(player, "!{02FCFF}Du hast erfolgreich ein Taxi zu deiner aktuellen Position gerufen."); } + + [RemoteEvent("CLIENT:InteractionMenu_VehicleInteraction")] + public void VehicleInteraction(Player player, int id, string selection) + { + using var dbContext = new DatabaseContext(true); + var user = player.GetUser(dbContext); + + var userVehicle = dbContext.UserVehicles.Where(v => v.Id == id && v.UserId == user.Id).FirstOrDefault(); + if (userVehicle == null) + { + ChatService.ErrorMessage(player, "Das Fahrzeug wurde nicht gefunden"); + } + + Vehicle veh = VehicleManager.GetVehicleFromServerVehicle(userVehicle); + + if (selection == "Finden") + { + player.TriggerEvent("SERVER:Util_setWaypoint", veh.Position.X, veh.Position.Y); + } + else if (selection == "Verkaufen") + { + var vehPrice = dbContext.ShopVehicles.Where(v => v.Model == userVehicle.Model).Select(v => v.Price).FirstOrDefault(); + var backPrice = (int)(vehPrice * 0.6); + + user.BankAccount.Balance += backPrice; + + ChatService.SendMessage(player, $"~b~[INFO]~s~ Du hast durch den Autoverkauf ~g~{backPrice.ToMoneyString()}~s~ erhalten."); + + dbContext.UserVehicles.Remove(userVehicle); + dbContext.SaveChanges(); + + veh.Delete(); + } + } #endregion #region Spielerinteraktionen PFEILTASTE-LINKS [RemoteEvent("openTradeInventory")]