frakcar sellen
This commit is contained in:
@@ -54,13 +54,13 @@ export default function (globalData: IGlobalData) {
|
||||
var vehicles = accountData.vehicles;
|
||||
if (vehicles.length > 0) {
|
||||
menu.AddItem(vehiclesItem);
|
||||
menu.BindMenuToItem(getVehiclesMenu(vehicles, menu), vehiclesItem);
|
||||
menu.BindMenuToItem(getVehiclesMenu(vehicles, "CLIENT:InteractionMenu_PlayerVehicleInteraction", true, menu), vehiclesItem);
|
||||
}
|
||||
|
||||
if (faction) {
|
||||
factionItem.SetRightLabel(faction);
|
||||
menu.AddItem(factionItem);
|
||||
menu.BindMenuToItem(getFactionMenu(faction, menu), factionItem);
|
||||
menu.BindMenuToItem(getFactionMenu(faction, accountData.factionVehicles, accountData.stateFaction, menu), factionItem);
|
||||
}
|
||||
|
||||
if (group) {
|
||||
@@ -252,12 +252,18 @@ export default function (globalData: IGlobalData) {
|
||||
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);
|
||||
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");
|
||||
factionMenu.AddItem(factionVehicleItem);
|
||||
factionMenu.BindMenuToItem(getVehiclesMenu(vehData, "CLIENT:InteractionMenu_FactionVehicleInteraction", !stateFaction, parentMenu), factionVehicleItem);
|
||||
}
|
||||
|
||||
factionMenu.ItemSelect.on((item, index) => {
|
||||
if (index === 0) { // Inviten
|
||||
var input = new InputHelper("Welchen Spieler möchtest du inviten (Name / ID)?", globalData);
|
||||
@@ -322,15 +328,26 @@ 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);
|
||||
function getVehiclesMenu(vehicles: VehicleData[], eventName: string, allowSell: boolean, parentMenu: NativeUI.Menu): NativeUI.Menu {
|
||||
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 => {
|
||||
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);
|
||||
});
|
||||
@@ -371,7 +388,7 @@ export default function (globalData: IGlobalData) {
|
||||
}
|
||||
|
||||
if (item == yesItem) {
|
||||
mp.events.callRemote("CLIENT:InteractionMenu_VehicleInteraction", id, selection);
|
||||
mp.events.callRemote(eventName, id, selection);
|
||||
confirmMenu.Close();
|
||||
parentMenu.Close(true);
|
||||
closing = true;
|
||||
@@ -393,7 +410,7 @@ export default function (globalData: IGlobalData) {
|
||||
return;
|
||||
}
|
||||
|
||||
mp.events.callRemote("CLIENT:InteractionMenu_VehicleInteraction", id, selection);
|
||||
mp.events.callRemote(eventName, id, selection);
|
||||
|
||||
parentMenu.Close(true);
|
||||
});
|
||||
|
||||
2
ReallifeGamemode.Client/global.d.ts
vendored
2
ReallifeGamemode.Client/global.d.ts
vendored
@@ -19,7 +19,9 @@ declare type AccountData = {
|
||||
paycheck: Paycheck;
|
||||
licenses: Licenses;
|
||||
vehicles: VehicleData[];
|
||||
factionVehicles: VehicleData[];
|
||||
nextPayday: number;
|
||||
stateFaction: boolean;
|
||||
}
|
||||
|
||||
declare type VehicleData = {
|
||||
|
||||
@@ -19,6 +19,8 @@ namespace ReallifeGamemode.Database.Entities
|
||||
|
||||
public List<int> GetOwners() => JsonConvert.DeserializeObject<List<int>>(Owners);
|
||||
|
||||
public int BuyPrice { get; set; }
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
using (var dbContext = new DatabaseContext())
|
||||
|
||||
1847
ReallifeGamemode.Database/Migrations/20200506184310_FactionVehicleBuyPrice.Designer.cs
generated
Normal file
1847
ReallifeGamemode.Database/Migrations/20200506184310_FactionVehicleBuyPrice.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1547,6 +1547,9 @@ namespace ReallifeGamemode.Database.Migrations
|
||||
{
|
||||
b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle");
|
||||
|
||||
b.Property<int>("BuyPrice")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<string>("Owners")
|
||||
.HasColumnType("longtext CHARACTER SET utf8mb4");
|
||||
|
||||
|
||||
@@ -132,6 +132,13 @@ namespace ReallifeGamemode.Server.Events
|
||||
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;
|
||||
if (Economy.Paychecks.ContainsKey(u.Id)) paycheck = Economy.Paychecks[u.Id];
|
||||
|
||||
@@ -143,6 +150,7 @@ namespace ReallifeGamemode.Server.Events
|
||||
adminLevel = u.AdminLevel.GetName(),
|
||||
points = u.Points,
|
||||
faction = u.Faction?.Name ?? "Zivilist",
|
||||
stateFaction = u.Faction?.StateOwned,
|
||||
factionRank = u.GetFactionRank().RankName,
|
||||
group = u.Group?.Name ?? "Keine",
|
||||
groupRank = u.GroupRank.GetName(),
|
||||
@@ -150,6 +158,7 @@ namespace ReallifeGamemode.Server.Events
|
||||
paycheck,
|
||||
licenses,
|
||||
vehicles,
|
||||
factionVehicles = u.FactionLeader ? factionVehicles : null,
|
||||
nextPayday = u.PaydayTimer
|
||||
};
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using GTANetworkAPI;
|
||||
using GTANetworkAPI;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
@@ -32,6 +32,7 @@ namespace ReallifeGamemode.Server.Extensions
|
||||
return context
|
||||
.Users
|
||||
.Include(u => u.Faction)
|
||||
.ThenInclude(f => f.BankAccount)
|
||||
.Include(u => u.FactionRank)
|
||||
.Include(u => u.Group)
|
||||
.Include(u => u.House)
|
||||
|
||||
@@ -212,6 +212,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
PrimaryColor = 111,
|
||||
SecondaryColor = 111,
|
||||
Active = true,
|
||||
BuyPrice = price
|
||||
};
|
||||
}
|
||||
//else if (target == "Gruppe")
|
||||
|
||||
@@ -344,8 +344,8 @@ namespace ReallifeGamemode.Server.Managers
|
||||
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)
|
||||
[RemoteEvent("CLIENT:InteractionMenu_PlayerVehicleInteraction")]
|
||||
public void PlayerVehicleInteraction(Player player, int id, string selection)
|
||||
{
|
||||
using var dbContext = new DatabaseContext(true);
|
||||
var user = player.GetUser(dbContext);
|
||||
@@ -364,7 +364,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
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);
|
||||
|
||||
user.BankAccount.Balance += backPrice;
|
||||
@@ -377,6 +377,40 @@ namespace ReallifeGamemode.Server.Managers
|
||||
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")]
|
||||
public void InteractionMenu_LSPD_Ticket3(Player player, string jsonNameOrId, string stringAmount, string jsonReason)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user