MfG, DimGamer

This commit is contained in:
hydrant
2020-03-25 21:33:32 +01:00
parent 16be2869a0
commit 0d8249c39c
16 changed files with 1527 additions and 61 deletions

View File

@@ -1,5 +1,7 @@
using System.ComponentModel.DataAnnotations.Schema; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq; using System.Linq;
using Newtonsoft.Json;
using ReallifeGamemode.Database.Models; using ReallifeGamemode.Database.Models;
/** /**
@@ -13,21 +15,13 @@ namespace ReallifeGamemode.Database.Entities
[Table("FactionVehicles")] [Table("FactionVehicles")]
public partial class FactionVehicle : ServerVehicle public partial class FactionVehicle : ServerVehicle
{ {
[ForeignKey("Faction")] public string Owners { get; set; }
public int? FactionId { get; set; }
public Faction Faction { get; set; }
public Faction GetFaction() public List<int> GetOwners() => JsonConvert.DeserializeObject<List<int>>(Owners);
{
using (var context = new DatabaseContext())
{
return context.Factions.FirstOrDefault(f => f.Id == FactionId);
}
}
public override string ToString() public override string ToString()
{ {
return "Fraktions Fahrzeug | Fraktion: " + GetFaction().Name; return "Fraktions Fahrzeug | Fraktion: " + string.Join(", ", GetOwners());
} }
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,55 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace ReallifeGamemode.Database.Migrations
{
public partial class FactionVehiclesMultipleOwners : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "Owners",
table: "ServerVehicles",
nullable: true);
migrationBuilder.Sql("UPDATE servervehicles SET Owners = CONCAT('[', FactionId, ']') WHERE FactionId IS NOT NULL");
migrationBuilder.DropForeignKey(
name: "FK_ServerVehicles_Factions_FactionId",
table: "ServerVehicles");
migrationBuilder.DropIndex(
name: "IX_ServerVehicles_FactionId",
table: "ServerVehicles");
migrationBuilder.DropColumn(
name: "FactionId",
table: "ServerVehicles");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "Owners",
table: "ServerVehicles");
migrationBuilder.AddColumn<int>(
name: "FactionId",
table: "ServerVehicles",
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_ServerVehicles_FactionId",
table: "ServerVehicles",
column: "FactionId");
migrationBuilder.AddForeignKey(
name: "FK_ServerVehicles_Factions_FactionId",
table: "ServerVehicles",
column: "FactionId",
principalTable: "Factions",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
}
}
}

View File

@@ -1149,9 +1149,7 @@ namespace ReallifeGamemode.Database.Migrations
{ {
b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle");
b.Property<int?>("FactionId"); b.Property<string>("Owners");
b.HasIndex("FactionId");
b.ToTable("FactionVehicles"); b.ToTable("FactionVehicles");
@@ -1399,13 +1397,6 @@ namespace ReallifeGamemode.Database.Migrations
.OnDelete(DeleteBehavior.Cascade); .OnDelete(DeleteBehavior.Cascade);
}); });
modelBuilder.Entity("ReallifeGamemode.Database.Entities.FactionVehicle", b =>
{
b.HasOne("ReallifeGamemode.Database.Entities.Faction", "Faction")
.WithMany()
.HasForeignKey("FactionId");
});
modelBuilder.Entity("ReallifeGamemode.Database.Entities.GroupVehicle", b => modelBuilder.Entity("ReallifeGamemode.Database.Entities.GroupVehicle", b =>
{ {
b.HasOne("ReallifeGamemode.Database.Entities.Group", "Group") b.HasOne("ReallifeGamemode.Database.Entities.Group", "Group")

View File

@@ -2006,38 +2006,37 @@ namespace ReallifeGamemode.Server.Commands
if (player.IsInVehicle) if (player.IsInVehicle)
{ {
string fIdStr = option1 + " " + option2; string fIdStr = option1 + " " + option2;
int[] fIds = null;
string[] fIdStrs = fIdStr.Split(" ");
int? factionId = null;
try try
{ {
factionId = int.Parse(option1); fIds = fIdStrs.Select(int.Parse).ToArray();
} }
catch (Exception) { } catch (Exception)
if (player.GetUser().Faction == null && factionId == null)
{ {
ChatService.SendMessage(player, "~m~Du bist in keiner Fraktion! Invite dich erst mit ~y~/ainvite"); ChatService.ErrorMessage(player, "Es wurden fehlerhafte Fraktionen angegeben");
return; return;
} }
else
if (fIds.Any())
{ {
if (factionId != null) using (var dbContext = new DatabaseContext())
{ {
using (var dbContext = new DatabaseContext()) if (dbContext.Factions.Where(f => fIds.Contains(f.Id)).Count() != fIds.Length)
{ {
if (dbContext.Factions.Where(f => f.Id == factionId).Count() == 0) ChatService.ErrorMessage(player, "Mindestens eine der angegeben Fraktionen existieren nicht");
{ return;
ChatService.ErrorMessage(player, "Diese Fraktion existiert nicht");
return;
}
} }
} }
Vehicle vehicle = player.Vehicle;
int playerSeat = player.VehicleSeat;
vehicle = SaveManager.SaveFactionVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
vehicle.PrimaryColor, vehicle.SecondaryColor, vehicle.Locked, vehicle.EngineStatus, factionId ?? player.GetUser().FactionId.Value, vehicle.Livery);
player.SendNotification("Fraktionsfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true);
player.SetIntoVehicle(vehicle, playerSeat);
} }
Vehicle vehicle = player.Vehicle;
int playerSeat = player.VehicleSeat;
vehicle = SaveManager.SaveFactionVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
vehicle.PrimaryColor, vehicle.SecondaryColor, vehicle.Locked, vehicle.EngineStatus, fIds, vehicle.Livery);
player.SendNotification("Fraktionsfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true);
player.SetIntoVehicle(vehicle, playerSeat);
} }
else ChatService.SendMessage(player, "~m~Du sitzt in keinem Fahrzeug!"); else ChatService.SendMessage(player, "~m~Du sitzt in keinem Fahrzeug!");
break; break;

View File

@@ -18,7 +18,8 @@ namespace ReallifeGamemode.Server.Events
return; return;
if (vehicle.GetServerVehicle() is FactionVehicle veh) if (vehicle.GetServerVehicle() is FactionVehicle veh)
{ {
if (client.GetUser().FactionId != null && (veh.FactionId == client.GetUser().FactionId) && (veh.Model == VehicleHash.Burrito3) && vehicle.HasData("weaponDeal") && vehicle.GetData<bool>("weaponDeal") == true) User u = client.GetUser();
if (u.FactionId != null && (!veh.GetOwners().Contains(u.FactionId.Value)) && (veh.Model == VehicleHash.Burrito3) && vehicle.HasData("weaponDeal") && vehicle.GetData<bool>("weaponDeal") == true)
{ {
Vector3 vector = WeaponDealPoints.getRndWD_Route(client.GetUser().FactionId.Value); Vector3 vector = WeaponDealPoints.getRndWD_Route(client.GetUser().FactionId.Value);
if (vector == new Vector3()) if (vector == new Vector3())

View File

@@ -4,6 +4,7 @@ using System.Text;
using GTANetworkAPI; using GTANetworkAPI;
using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Types;
using ReallifeGamemode.Server.WeaponDeal; using ReallifeGamemode.Server.WeaponDeal;
namespace ReallifeGamemode.Server.Events namespace ReallifeGamemode.Server.Events
@@ -22,9 +23,11 @@ namespace ReallifeGamemode.Server.Events
if (seat != 0) return; if (seat != 0) return;
User u = player.GetUser();
if (vehicle.GetServerVehicle() is FactionVehicle veh) if (vehicle.GetServerVehicle() is FactionVehicle veh)
{ {
if (veh.FactionId != player.GetUser().FactionId) if (!veh.GetOwners().Contains(player.GetUser().FactionId ?? 0) && !u.IsAdmin(AdminLevel.HEADADMIN))
{ {
if ((VehicleHash)vehicle.Model == VehicleHash.Burrito3) if ((VehicleHash)vehicle.Model == VehicleHash.Burrito3)
{ {

View File

@@ -19,7 +19,8 @@ namespace ReallifeGamemode.Server.Events
return; return;
if (vehicle.GetServerVehicle() is FactionVehicle veh) if (vehicle.GetServerVehicle() is FactionVehicle veh)
{ {
if ((client.GetUser().FactionId != null) && (veh.FactionId == client.GetUser().FactionId) && ((VehicleHash)vehicle.Model == VehicleHash.Burrito3) && vehicle.HasData("weaponDeal") && vehicle.GetData<bool>("weaponDeal") == true) User u = client.GetUser();
if ((u.FactionId != null) && (veh.GetOwners().Contains(u.FactionId ?? 0)) && ((VehicleHash)vehicle.Model == VehicleHash.Burrito3) && vehicle.HasData("weaponDeal") && vehicle.GetData<bool>("weaponDeal") == true)
{ {
CheckPointHandle.RemovePlayerHandlerFromList(client); CheckPointHandle.RemovePlayerHandlerFromList(client);
client.TriggerEvent("destroyCP"); client.TriggerEvent("destroyCP");

View File

@@ -453,7 +453,7 @@ namespace ReallifeGamemode.Server.Events
} }
else if (sV is FactionVehicle fV) else if (sV is FactionVehicle fV)
{ {
if (fV.FactionId != u.FactionId && !state && !u.IsAdmin(AdminLevel.ADMIN3)) if (!fV.GetOwners().Contains(u.FactionId ?? 0) && !state && !u.IsAdmin(AdminLevel.ADMIN3))
{ {
player.SendNotification("~r~Du hast keinen Schlüssel."); player.SendNotification("~r~Du hast keinen Schlüssel.");
return; return;
@@ -509,7 +509,8 @@ namespace ReallifeGamemode.Server.Events
ServerVehicle veh = player.Vehicle.GetServerVehicle(); ServerVehicle veh = player.Vehicle.GetServerVehicle();
if (veh != null) if (veh != null)
{ {
if (veh is FactionVehicle fV && fV.FactionId != player.GetUser()?.FactionId && (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? false)) User u = player.GetUser();
if (veh is FactionVehicle fV && !fV.GetOwners().Contains(u.FactionId ?? 0) && (!u.IsAdmin(AdminLevel.ADMIN3)))
{ {
return; return;
} }

View File

@@ -38,7 +38,7 @@ namespace ReallifeGamemode.Server.Events
} }
else if (sV is FactionVehicle fV) else if (sV is FactionVehicle fV)
{ {
if (fV.FactionId != u.FactionId && !state && !u.IsAdmin(AdminLevel.ADMIN3)) if (!fV.GetOwners().Contains(u.FactionId ?? 0) && !state && !u.IsAdmin(AdminLevel.ADMIN3))
{ {
player.SendNotification("~r~Du hast keinen Schlüssel."); player.SendNotification("~r~Du hast keinen Schlüssel.");
return; return;
@@ -94,7 +94,7 @@ namespace ReallifeGamemode.Server.Events
} }
else if (sV is FactionVehicle fV) else if (sV is FactionVehicle fV)
{ {
if (fV.FactionId != u.FactionId) if (!fV.GetOwners().Contains(u.FactionId ?? 0))
{ {
return; return;
} }
@@ -152,7 +152,7 @@ namespace ReallifeGamemode.Server.Events
} }
else if (sV is FactionVehicle fV) else if (sV is FactionVehicle fV)
{ {
if (fV.FactionId != u.FactionId) if (!fV.GetOwners().Contains(u.FactionId ?? 0))
{ {
return; return;
} }
@@ -205,7 +205,7 @@ namespace ReallifeGamemode.Server.Events
} }
else if (sV is FactionVehicle fV) else if (sV is FactionVehicle fV)
{ {
if (fV.FactionId != u.FactionId || !u.FactionLeader) if (!fV.GetOwners().Contains(u.FactionId ?? 0) || !u.FactionLeader)
{ {
player.SendNotification("~r~Du darfst dieses Fahrzeug nicht parken."); player.SendNotification("~r~Du darfst dieses Fahrzeug nicht parken.");
return; return;

View File

@@ -27,11 +27,11 @@ namespace ReallifeGamemode.Server.Extensions
int c1 = veh.PrimaryColor; int c1 = veh.PrimaryColor;
int c2 = veh.SecondaryColor; int c2 = veh.SecondaryColor;
Vehicle newVeh = NAPI.Vehicle.CreateVehicle(model, position, heading, c1, c2, "", 255, false, false); Vehicle newVeh = NAPI.Vehicle.CreateVehicle(model, position, heading, c1, c2, "", 255, false, false);
veh.Livery = veh.Livery; veh.Livery = veh.Livery;
VehicleStreaming.SetEngineState(newVeh, false); VehicleStreaming.SetEngineState(newVeh, false);
VehicleStreaming.SetLockStatus(newVeh, veh.Locked); VehicleStreaming.SetLockStatus(newVeh, veh.Locked);
VehicleManager.AddVehicle(veh, newVeh); VehicleManager.AddVehicle(veh, newVeh);
newVeh.Rotation = new Vector3(0,0,heading); newVeh.Rotation = new Vector3(0, 0, heading);
newVeh.SetSharedData("drivenDistance", veh.DistanceDriven); newVeh.SetSharedData("drivenDistance", veh.DistanceDriven);
@@ -39,7 +39,7 @@ namespace ReallifeGamemode.Server.Extensions
if (veh is FactionVehicle fV) if (veh is FactionVehicle fV)
{ {
numberplate = $"F{fV.FactionId} " + numberplate; numberplate = $"F{string.Join(".", fV.GetOwners())} " + numberplate;
} }
if (veh is UserVehicle uV) if (veh is UserVehicle uV)

View File

@@ -21,7 +21,7 @@ namespace ReallifeGamemode.Server.Inventory.Items
public bool noTransfer(Player client, UserItem uItem, FactionVehicle fVeh) public bool noTransfer(Player client, UserItem uItem, FactionVehicle fVeh)
{ {
if (fVeh.FactionId != client.GetUser().FactionId) if (!fVeh.GetOwners().Contains(client.GetUser().FactionId ?? 0))
return false; return false;
if (fVeh.Model != VehicleHash.Burrito3) if (fVeh.Model != VehicleHash.Burrito3)
return false; return false;

View File

@@ -195,7 +195,7 @@ namespace ReallifeGamemode.Server.Managers
PositionY = spawnPos.Y, PositionY = spawnPos.Y,
PositionZ = spawnPos.Z, PositionZ = spawnPos.Z,
Locked = false, Locked = false,
FactionId = player.GetUser().FactionId, Owners = JsonConvert.SerializeObject(new int[] { player.GetUser(dbContext).FactionId.Value }),
Model = shopVehicle.Model, Model = shopVehicle.Model,
PrimaryColor = 111, PrimaryColor = 111,
SecondaryColor = 111, SecondaryColor = 111,

View File

@@ -5,6 +5,7 @@ using ReallifeGamemode.Database.Entities.Saves;
using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Database.Models; using ReallifeGamemode.Database.Models;
using System; using System;
using Newtonsoft.Json;
namespace ReallifeGamemode.Server.Managers namespace ReallifeGamemode.Server.Managers
{ {
@@ -133,14 +134,14 @@ namespace ReallifeGamemode.Server.Managers
public static Vehicle SaveFactionVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading, public static Vehicle SaveFactionVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading,
string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int factionId, int livery) string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int[] factionId, int livery)
{ {
using (var saveData = new DatabaseContext()) using (var saveData = new DatabaseContext())
{ {
var dataSet = new FactionVehicle var dataSet = new FactionVehicle
{ {
Model = vehicleModel, Model = vehicleModel,
FactionId = factionId, Owners = JsonConvert.SerializeObject(factionId),
PositionX = vehiclePosition.X, PositionX = vehiclePosition.X,
PositionY = vehiclePosition.Y, PositionY = vehiclePosition.Y,
PositionZ = vehiclePosition.Z, PositionZ = vehiclePosition.Z,

View File

@@ -31,10 +31,11 @@ namespace ReallifeGamemode.Server.Managers
colShape.OnEntityEnterColShape += (cs, c) => colShape.OnEntityEnterColShape += (cs, c) =>
{ {
using var dbContext = new DatabaseContext();
if (c.IsInVehicle) if (c.IsInVehicle)
{ {
Vehicle v = c.Vehicle; Vehicle v = c.Vehicle;
if (v.GetServerVehicle() is FactionVehicle fV && fV.GetFaction().StateOwned) if (v.GetServerVehicle() is FactionVehicle fV && fV.GetOwners().TrueForAll(fV => dbContext.Factions.Where(f => f.Id == fV).First().StateOwned))
{ {
return; return;
} }

View File

@@ -28,7 +28,7 @@ namespace ReallifeGamemode.Server.WeaponDeal
var user = client.GetUser(); var user = client.GetUser();
using (var context = new DatabaseContext()) using (var context = new DatabaseContext())
{ {
FactionVehicle factionVehicle = context.FactionVehicles.Where(f => f.FactionId == user.FactionId && f.Model == VehicleHash.Burrito3).FirstOrDefault(); FactionVehicle factionVehicle = context.FactionVehicles.Where(f => f.GetOwners().Contains(user.FactionId ?? 0) && f.Model == VehicleHash.Burrito3).FirstOrDefault();
Vehicle fVeh = VehicleManager.GetVehicleFromServerVehicle(factionVehicle); Vehicle fVeh = VehicleManager.GetVehicleFromServerVehicle(factionVehicle);
if (fVeh.Position.DistanceTo(client.Position) > 50) if (fVeh.Position.DistanceTo(client.Position) > 50)
@@ -85,13 +85,13 @@ namespace ReallifeGamemode.Server.WeaponDeal
User user = client.GetUser(); User user = client.GetUser();
using (var context = new DatabaseContext()) using (var context = new DatabaseContext())
{ {
FactionVehicle factionVehicle = context.FactionVehicles.Where(f => f.FactionId == user.FactionId && f.Model == VehicleHash.Burrito3).FirstOrDefault(); FactionVehicle factionVehicle = context.FactionVehicles.Where(f => f.GetOwners().Contains(user.FactionId ?? 0) && f.Model == VehicleHash.Burrito3).FirstOrDefault();
Vehicle fVeh = VehicleManager.GetVehicleFromServerVehicle(factionVehicle); Vehicle fVeh = VehicleManager.GetVehicleFromServerVehicle(factionVehicle);
fVeh.SetData("weaponDeal", false); fVeh.SetData("weaponDeal", false);
fVeh.SetData("WeaponDealLoad", true); fVeh.SetData("WeaponDealLoad", true);
InventoryManager.RemoveAllItemsfromVehicleInventory(fVeh); InventoryManager.RemoveAllItemsfromVehicleInventory(fVeh);
Random rnd = new Random(); Random rnd = new Random();
if (factionVehicle.FactionId == 8 || factionVehicle.FactionId == 7) if (factionVehicle.GetOwners().Contains(8) || factionVehicle.GetOwners().Contains(7))
{ {
VehicleItem item = new VehicleItem() { ItemId = 11, VehicleId = factionVehicle.Id, Amount = rnd.Next(45, 75) }; //pistole VehicleItem item = new VehicleItem() { ItemId = 11, VehicleId = factionVehicle.Id, Amount = rnd.Next(45, 75) }; //pistole
InventoryManager.AddItemToVehicleInventory(client, item, fVeh); InventoryManager.AddItemToVehicleInventory(client, item, fVeh);