frakcar sellen

This commit is contained in:
hydrant
2020-05-06 21:56:54 +02:00
parent ce0eac5967
commit 89e341a4cd
10 changed files with 1952 additions and 14 deletions

View File

@@ -54,13 +54,13 @@ export default function (globalData: IGlobalData) {
var vehicles = accountData.vehicles; var vehicles = accountData.vehicles;
if (vehicles.length > 0) { if (vehicles.length > 0) {
menu.AddItem(vehiclesItem); menu.AddItem(vehiclesItem);
menu.BindMenuToItem(getVehiclesMenu(vehicles, menu), vehiclesItem); menu.BindMenuToItem(getVehiclesMenu(vehicles, "CLIENT:InteractionMenu_PlayerVehicleInteraction", true, menu), vehiclesItem);
} }
if (faction) { if (faction) {
factionItem.SetRightLabel(faction); factionItem.SetRightLabel(faction);
menu.AddItem(factionItem); menu.AddItem(factionItem);
menu.BindMenuToItem(getFactionMenu(faction, menu), factionItem); menu.BindMenuToItem(getFactionMenu(faction, accountData.factionVehicles, accountData.stateFaction, menu), factionItem);
} }
if (group) { if (group) {
@@ -252,12 +252,18 @@ export default function (globalData: IGlobalData) {
return licenseMenu; return licenseMenu;
} }
function getFactionMenu(faction: string, parentMenu: NativeUI.Menu): NativeUI.Menu { 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); var factionMenu = new NativeUI.Menu("Fraktion", faction, new Point(50, 50), null, null);
factionMenu.AddItem(new UIMenuItem("Spieler einladen")); factionMenu.AddItem(new UIMenuItem("Spieler einladen"));
factionMenu.AddItem(new UIMenuItem("Spieler rauswerfen")); factionMenu.AddItem(new UIMenuItem("Spieler rauswerfen"));
factionMenu.Visible = false; factionMenu.Visible = false;
if (vehData.length > 0) {
var factionVehicleItem = new UIMenuItem("Fraktionsfahrzeuge", "Finden oder verkaufen");
factionMenu.AddItem(factionVehicleItem);
factionMenu.BindMenuToItem(getVehiclesMenu(vehData, "CLIENT:InteractionMenu_FactionVehicleInteraction", !stateFaction, parentMenu), factionVehicleItem);
}
factionMenu.ItemSelect.on((item, index) => { factionMenu.ItemSelect.on((item, index) => {
if (index === 0) { // Inviten if (index === 0) { // Inviten
var input = new InputHelper("Welchen Spieler möchtest du inviten (Name / ID)?", globalData); var input = new InputHelper("Welchen Spieler möchtest du inviten (Name / ID)?", globalData);
@@ -322,15 +328,26 @@ export default function (globalData: IGlobalData) {
return servicesMenu; return servicesMenu;
} }
function getVehiclesMenu(vehicles: VehicleData[], parentMenu: NativeUI.Menu): NativeUI.Menu { function getVehiclesMenu(vehicles: VehicleData[], eventName: string, allowSell: boolean, parentMenu: NativeUI.Menu): NativeUI.Menu {
var menu = new Menu("Fahrzeuge", "Finde oder verkaufe deine Fahrzeuge", new Point(50, 50), null, null); var desc = "Finden";
if (allowSell) {
desc += " oder Verkaufen";
}
var collection = new ItemsCollection(["Finden", "Verkaufen"]); var menu = new Menu("Fahrzeuge", desc, new Point(50, 50), null, null);
var items: string[] = ["Finden"];
if (allowSell) {
items.push("Verkaufen");
}
var collection = new ItemsCollection(items);
vehicles.forEach(veh => { vehicles.forEach(veh => {
var name: string = mp.game.vehicle.getDisplayNameFromVehicleModel(veh.Model); var name: string = mp.game.ui.getLabelText(mp.game.vehicle.getDisplayNameFromVehicleModel(veh.Model));
var item = new UIMenuListItem(`${veh.Id.toString().padEnd(4)} | ${name}`, "", collection, null, { id: veh.Id }); var item = new UIMenuListItem(`${veh.Id.toString().padEnd(5)} | ${name}`, "", collection, null, { id: veh.Id });
menu.AddItem(item); menu.AddItem(item);
}); });
@@ -371,7 +388,7 @@ export default function (globalData: IGlobalData) {
} }
if (item == yesItem) { if (item == yesItem) {
mp.events.callRemote("CLIENT:InteractionMenu_VehicleInteraction", id, selection); mp.events.callRemote(eventName, id, selection);
confirmMenu.Close(); confirmMenu.Close();
parentMenu.Close(true); parentMenu.Close(true);
closing = true; closing = true;
@@ -393,7 +410,7 @@ export default function (globalData: IGlobalData) {
return; return;
} }
mp.events.callRemote("CLIENT:InteractionMenu_VehicleInteraction", id, selection); mp.events.callRemote(eventName, id, selection);
parentMenu.Close(true); parentMenu.Close(true);
}); });

View File

@@ -19,7 +19,9 @@ declare type AccountData = {
paycheck: Paycheck; paycheck: Paycheck;
licenses: Licenses; licenses: Licenses;
vehicles: VehicleData[]; vehicles: VehicleData[];
factionVehicles: VehicleData[];
nextPayday: number; nextPayday: number;
stateFaction: boolean;
} }
declare type VehicleData = { declare type VehicleData = {

View File

@@ -19,6 +19,8 @@ namespace ReallifeGamemode.Database.Entities
public List<int> GetOwners() => JsonConvert.DeserializeObject<List<int>>(Owners); public List<int> GetOwners() => JsonConvert.DeserializeObject<List<int>>(Owners);
public int BuyPrice { get; set; }
public override string ToString() public override string ToString()
{ {
using (var dbContext = new DatabaseContext()) using (var dbContext = new DatabaseContext())

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,22 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace ReallifeGamemode.Database.Migrations
{
public partial class FactionVehicleBuyPrice : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "BuyPrice",
table: "ServerVehicles",
nullable: true);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "BuyPrice",
table: "ServerVehicles");
}
}
}

View File

@@ -1547,6 +1547,9 @@ namespace ReallifeGamemode.Database.Migrations
{ {
b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle");
b.Property<int>("BuyPrice")
.HasColumnType("int");
b.Property<string>("Owners") b.Property<string>("Owners")
.HasColumnType("longtext CHARACTER SET utf8mb4"); .HasColumnType("longtext CHARACTER SET utf8mb4");

View File

@@ -132,6 +132,13 @@ namespace ReallifeGamemode.Server.Events
Price = v.Price ?? 0 Price = v.Price ?? 0
}); });
var factionVehicles = dbContext.FactionVehicles.ToList().Where(f => f.GetOwners().Contains(u.FactionId ?? -1)).Select(f => new
{
f.Id,
f.Model,
Price = f.BuyPrice
});
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];
@@ -143,6 +150,7 @@ namespace ReallifeGamemode.Server.Events
adminLevel = u.AdminLevel.GetName(), adminLevel = u.AdminLevel.GetName(),
points = u.Points, points = u.Points,
faction = u.Faction?.Name ?? "Zivilist", faction = u.Faction?.Name ?? "Zivilist",
stateFaction = u.Faction?.StateOwned,
factionRank = u.GetFactionRank().RankName, factionRank = u.GetFactionRank().RankName,
group = u.Group?.Name ?? "Keine", group = u.Group?.Name ?? "Keine",
groupRank = u.GroupRank.GetName(), groupRank = u.GroupRank.GetName(),
@@ -150,6 +158,7 @@ namespace ReallifeGamemode.Server.Events
paycheck, paycheck,
licenses, licenses,
vehicles, vehicles,
factionVehicles = u.FactionLeader ? factionVehicles : null,
nextPayday = u.PaydayTimer nextPayday = u.PaydayTimer
}; };

View File

@@ -1,4 +1,4 @@
using GTANetworkAPI; using GTANetworkAPI;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json; using Newtonsoft.Json;
using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Entities;
@@ -32,6 +32,7 @@ namespace ReallifeGamemode.Server.Extensions
return context return context
.Users .Users
.Include(u => u.Faction) .Include(u => u.Faction)
.ThenInclude(f => f.BankAccount)
.Include(u => u.FactionRank) .Include(u => u.FactionRank)
.Include(u => u.Group) .Include(u => u.Group)
.Include(u => u.House) .Include(u => u.House)

View File

@@ -212,6 +212,7 @@ namespace ReallifeGamemode.Server.Managers
PrimaryColor = 111, PrimaryColor = 111,
SecondaryColor = 111, SecondaryColor = 111,
Active = true, Active = true,
BuyPrice = price
}; };
} }
//else if (target == "Gruppe") //else if (target == "Gruppe")

View File

@@ -344,8 +344,8 @@ namespace ReallifeGamemode.Server.Managers
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")] [RemoteEvent("CLIENT:InteractionMenu_PlayerVehicleInteraction")]
public void VehicleInteraction(Player player, int id, string selection) public void PlayerVehicleInteraction(Player player, int id, string selection)
{ {
using var dbContext = new DatabaseContext(true); using var dbContext = new DatabaseContext(true);
var user = player.GetUser(dbContext); var user = player.GetUser(dbContext);
@@ -364,7 +364,7 @@ namespace ReallifeGamemode.Server.Managers
} }
else if (selection == "Verkaufen") else if (selection == "Verkaufen")
{ {
var vehPrice = dbContext.ShopVehicles.Where(v => v.Model == userVehicle.Model).Select(v => v.Price).FirstOrDefault(); var vehPrice = userVehicle.Price;
var backPrice = (int)(vehPrice * 0.6); var backPrice = (int)(vehPrice * 0.6);
user.BankAccount.Balance += backPrice; user.BankAccount.Balance += backPrice;
@@ -377,6 +377,40 @@ namespace ReallifeGamemode.Server.Managers
veh.Delete(); veh.Delete();
} }
} }
[RemoteEvent("CLIENT:InteractionMenu_FactionVehicleInteraction")]
public void FactionVehicleInteraction(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");
}
GTANetworkAPI.Vehicle veh = VehicleManager.GetVehicleFromServerVehicle(factionVehicle);
if (selection == "Finden")
{
player.TriggerEvent("SERVER:Util_setWaypoint", veh.Position.X, veh.Position.Y);
}
else if (selection == "Verkaufen")
{
var backPrice = factionVehicle.BuyPrice;
user.Faction.BankAccount.Balance += backPrice;
ChatService.SendMessage(player, $"~b~[INFO]~s~ Deine Fraktion hat durch den Autoverkauf ~g~{backPrice.ToMoneyString()}~s~ erhalten.");
dbContext.FactionVehicles.Remove(factionVehicle);
dbContext.SaveChanges();
veh.Delete();
}
}
[RemoteEvent("CLIENT:InteractionMenu_LSPD_Ticket3")] [RemoteEvent("CLIENT:InteractionMenu_LSPD_Ticket3")]
public void InteractionMenu_LSPD_Ticket3(Player player, string jsonNameOrId, string stringAmount, string jsonReason) public void InteractionMenu_LSPD_Ticket3(Player player, string jsonNameOrId, string stringAmount, string jsonReason)
{ {