auto verkaufen

This commit is contained in:
hydrant
2020-04-02 22:29:27 +02:00
parent 85cd638a4c
commit a8994d9e4a
4 changed files with 92 additions and 10 deletions

View File

@@ -29,6 +29,7 @@ export default function (globalData: IGlobalData) {
var licenseItem = new UIMenuItem("Lizenzen", "Lizenzen Informationen"); 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) => { mp.events.add("SERVER:InteractionMenu_OpenMenu", (accountDataJson: string, faction: string, group: string, factionInvite: boolean, groupInvite: boolean) => {
var accountData: AccountData = JSON.parse(accountDataJson); var accountData: AccountData = JSON.parse(accountDataJson);
@@ -45,6 +46,12 @@ export default function (globalData: IGlobalData) {
menu.AddItem(licenseItem); menu.AddItem(licenseItem);
menu.BindMenuToItem(getLicenseMenu(accountData.licenses, menu), 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) { if (faction) {
factionItem.SetRightLabel(faction); factionItem.SetRightLabel(faction);
menu.AddItem(factionItem); menu.AddItem(factionItem);
@@ -106,7 +113,7 @@ export default function (globalData: IGlobalData) {
menu.ItemSelect.on((item: NativeUI.UIMenuItem, index: number) => { menu.ItemSelect.on((item: NativeUI.UIMenuItem, index: number) => {
if (item === acceptItem) { if (item === acceptItem) {
mp.events.callRemote("CLIENT:InteractionMenu_AcceptInvite", acceptItem.SelectedValue); 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.show();
input.getValue(name => { input.getValue(name => {
mp.events.callRemote("CLIENT:InteractionMenu_Show", "License", 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; 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;
}
} }

View File

@@ -1,4 +1,4 @@
declare interface IGlobalData { declare type IGlobalData = {
InTuning: boolean, InTuning: boolean,
HideGui: boolean, HideGui: boolean,
InMenu: boolean, InMenu: boolean,
@@ -7,7 +7,7 @@
InInput: boolean InInput: boolean
} }
declare interface AccountData { declare type AccountData = {
regDate: string; regDate: string;
adminLevel: string; adminLevel: string;
faction: string; faction: string;
@@ -17,9 +17,15 @@ declare interface AccountData {
job: string; job: string;
paycheck: Paycheck; paycheck: Paycheck;
licenses: Licenses; licenses: Licenses;
vehicles: VehicleData[];
} }
declare interface Paycheck { declare type VehicleData = {
Id: number;
Model: number;
};
declare type Paycheck = {
financialHelp: number; financialHelp: number;
financialInterest: number; financialInterest: number;
vehicleTaxation: number; vehicleTaxation: number;
@@ -29,18 +35,18 @@ declare interface Paycheck {
rentalFees: number; rentalFees: number;
} }
declare interface Licenses { declare type Licenses = {
drivingLicenseCar: boolean; drivingLicenseCar: boolean;
drivingLicenseBike: boolean; drivingLicenseBike: boolean;
flightLicensePlane: boolean; flightLicensePlane: boolean;
weaponLicense: boolean; weaponLicense: boolean;
} }
declare interface FactionRanks { declare type FactionRanks = {
factionId: number, factionId: number,
ranks: FactionRank[] ranks: FactionRank[]
} }
declare interface FactionRank { declare type FactionRank = {
} }

View File

@@ -16,6 +16,7 @@ using ReallifeGamemode.Server.Util;
using ReallifeGamemode.Server.Inventory.Interfaces; using ReallifeGamemode.Server.Inventory.Interfaces;
using ReallifeGamemode.Server.DrivingSchool; using ReallifeGamemode.Server.DrivingSchool;
using ReallifeGamemode.Server.Types; using ReallifeGamemode.Server.Types;
using Microsoft.EntityFrameworkCore;
/** /**
* @overview Life of German Reallife - Event Key (Key.cs) * @overview Life of German Reallife - Event Key (Key.cs)
* @author VegaZ * @author VegaZ
@@ -107,9 +108,16 @@ namespace ReallifeGamemode.Server.Events
[RemoteEvent("keyPress:DOWN_ARROW")] [RemoteEvent("keyPress:DOWN_ARROW")]
public void KeyPressDownArrow(Player player) public void KeyPressDownArrow(Player player)
{ {
User u = player.GetUser(); using var dbContext = new DatabaseContext();
User u = player.GetUser(dbContext);
if (u == null) return; 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; Paycheck paycheck = null;
if (Economy.Paychecks.ContainsKey(u.Id)) paycheck = Economy.Paychecks[u.Id]; if (Economy.Paychecks.ContainsKey(u.Id)) paycheck = Economy.Paychecks[u.Id];
@@ -125,7 +133,8 @@ namespace ReallifeGamemode.Server.Events
groupRank = u.GroupRank.GetName(), groupRank = u.GroupRank.GetName(),
job = JobManager.GetJob(u.JobId ?? 0)?.Name ?? "Keiner", job = JobManager.GetJob(u.JobId ?? 0)?.Name ?? "Keiner",
paycheck, paycheck,
licenses licenses,
vehicles
}; };
string faction = u.FactionLeader ? u.Faction.Name : null; string faction = u.FactionLeader ? u.Faction.Name : null;

View File

@@ -335,6 +335,40 @@ namespace ReallifeGamemode.Server.Managers
ChatService.BroadcastJob(msg, taxiJob); ChatService.BroadcastJob(msg, taxiJob);
ChatService.SendMessage(player, "!{02FCFF}Du hast erfolgreich ein Taxi zu deiner aktuellen Position gerufen."); 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 #endregion
#region Spielerinteraktionen PFEILTASTE-LINKS #region Spielerinteraktionen PFEILTASTE-LINKS
[RemoteEvent("openTradeInventory")] [RemoteEvent("openTradeInventory")]