Rewrite of vehicle system

This commit is contained in:
hydrant
2018-11-28 19:36:46 +01:00
parent 52ab83f5ea
commit d5b249e8e1
12 changed files with 137 additions and 174 deletions

View File

@@ -37,6 +37,10 @@ namespace reallife_gamemode.Model
modelBuilder.Entity<Server.Entities.User>() modelBuilder.Entity<Server.Entities.User>()
.HasIndex(u => u.BusinessId) .HasIndex(u => u.BusinessId)
.IsUnique(true); .IsUnique(true);
modelBuilder.Entity<Server.Entities.ServerVehicle>()
.Property(sv => sv.Active)
.HasDefaultValue(true);
} }
//User //User
@@ -80,5 +84,8 @@ namespace reallife_gamemode.Model
// Control Panel // Control Panel
public DbSet<Server.Entities.News> News { get; set; } public DbSet<Server.Entities.News> News { get; set; }
// Server Vehicles
public DbSet<Server.Entities.ServerVehicle> ServerVehicles { get; set; }
} }
} }

View File

@@ -1835,7 +1835,7 @@ namespace reallife_gamemode.Server.Commands
var dataSet = new UserVehicle var dataSet = new UserVehicle
{ {
UserId = player.GetUser().Id, UserId = player.GetUser().Id,
Model = (VehicleHash) playerVehicle.Model, Model = (VehicleHash)playerVehicle.Model,
PositionX = playerVehicle.Position.X, PositionX = playerVehicle.Position.X,
PositionY = playerVehicle.Position.Y, PositionY = playerVehicle.Position.Y,
PositionZ = playerVehicle.Position.Z, PositionZ = playerVehicle.Position.Z,
@@ -1844,8 +1844,7 @@ namespace reallife_gamemode.Server.Commands
PrimaryColor = Convert.ToByte(playerVehicle.PrimaryColor), PrimaryColor = Convert.ToByte(playerVehicle.PrimaryColor),
SecondaryColor = Convert.ToByte(playerVehicle.SecondaryColor), SecondaryColor = Convert.ToByte(playerVehicle.SecondaryColor),
Locked = playerVehicle.Locked, Locked = playerVehicle.Locked,
Engine = playerVehicle.EngineStatus, Active = true
Dimension = Convert.ToByte(playerVehicle.Dimension),
}; };
playerVehicle.SetData("ownerId",player.GetUser().Id); playerVehicle.SetData("ownerId",player.GetUser().Id);
saveVehicle.UserVehicles.Add(dataSet); saveVehicle.UserVehicles.Add(dataSet);
@@ -1928,10 +1927,10 @@ namespace reallife_gamemode.Server.Commands
{ {
ShopVehicle sVehicle = getShopVehicle.ShopVehicles.FirstOrDefault(u => u.Id == shopVehicleId); ShopVehicle sVehicle = getShopVehicle.ShopVehicles.FirstOrDefault(u => u.Id == shopVehicleId);
Entities.Faction receiverUser = getShopVehicle.Factions.FirstOrDefault(u => u.Name == "LSPD"); Entities.Faction receiverUser = getShopVehicle.Factions.FirstOrDefault(u => u.Name == "LSPD");
BankManager.TransferMoney(player.GetUser(), receiverUser, sVehicle.Price, "Fahrzeug gekauft: " + sVehicle.ModelName); BankManager.TransferMoney(player.GetUser(), receiverUser, sVehicle.Price, "Fahrzeug gekauft: " + NAPI.Vehicle.GetVehicleDisplayName(sVehicle.Model));
//TODO Anpassen //TODO Anpassen
Vehicle boughtVehicle = NAPI.Vehicle.CreateVehicle(sVehicle.Model, new Vector3(sVehicle.PositionX, sVehicle.PositionY + 10, sVehicle.PositionZ + 0.5), sVehicle.Heading, Vehicle boughtVehicle = NAPI.Vehicle.CreateVehicle(sVehicle.Model, new Vector3(sVehicle.PositionX, sVehicle.PositionY + 10, sVehicle.PositionZ + 0.5), sVehicle.Heading,
sVehicle.PrimaryColor, sVehicle.SecondaryColor, "LoG", sVehicle.Alpha, false, true, 0); sVehicle.PrimaryColor, sVehicle.SecondaryColor, "LoG", 255, false, true, 0);
player.SetIntoVehicle(boughtVehicle, 0); player.SetIntoVehicle(boughtVehicle, 0);
//TODO fügt das Fahrzeug als Userfahrzeug hinzu //TODO fügt das Fahrzeug als Userfahrzeug hinzu
CmdAdminOwn(player); CmdAdminOwn(player);

View File

@@ -14,28 +14,11 @@ using System.Text;
namespace reallife_gamemode.Server.Entities namespace reallife_gamemode.Server.Entities
{ {
public class FactionVehicle [Table("FactionVehicles")]
public class FactionVehicle : ServerVehicle
{ {
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("Faction")] [ForeignKey("Faction")]
public int? FactionId { get; set; } public int? FactionId { get; set; }
public Faction Faction { get; set; } public Faction Faction { get; set; }
public VehicleHash Model { get; set; }
public float PositionX { get; set; }
public float PositionY { get; set; }
public float PositionZ { get; set; }
public float Heading { get; set; }
[StringLength(8)]
public string NumberPlate { get; set; }
public byte Alpha { get; set; }
public byte PrimaryColor { get; set; }
public byte SecondaryColor { get; set; }
public bool Locked { get; set; }
public bool Engine { get; set; }
public byte Dimension { get; set; }
public bool Active { get; set; }
} }
} }

View File

@@ -0,0 +1,40 @@
using GTANetworkAPI;
using reallife_gamemode.Model;
using reallife_gamemode.Server.Managers;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
namespace reallife_gamemode.Server.Entities
{
public abstract class ServerVehicle
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public VehicleHash Model { get; set; }
public float PositionX { get; set; }
public float PositionY { get; set; }
public float PositionZ { get; set; }
public float Heading { get; set; }
[StringLength(8)]
public string NumberPlate { get; set; }
public int PrimaryColor { get; set; }
public int SecondaryColor { get; set; }
public bool Locked { get; set; }
public bool Active { get; set; }
[NotMapped]
public Vector3 Position => new Vector3(PositionX, PositionY, PositionZ);
public Vehicle Spawn()
{
Vehicle veh = NAPI.Vehicle.CreateVehicle(this.Model, this.Position, this.Heading, this.PrimaryColor, this.SecondaryColor, this.NumberPlate, locked: this.Locked, engine: false);
VehicleManager.AddVehicle(this, veh);
return veh;
}
}
}

View File

@@ -14,30 +14,12 @@ using System.Text;
namespace reallife_gamemode.Server.Entities namespace reallife_gamemode.Server.Entities
{ {
public class ShopVehicle [Table("ShopVehicles")]
public class ShopVehicle : ServerVehicle
{ {
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("Shop")] [ForeignKey("Shop")]
public int? ShopId { get; set; } public int? ShopId { get; set; }
public Shop Shop { get; set; } public Shop Shop { get; set; }
public VehicleHash Model { get; set; }
[StringLength(32)]
public string ModelName { get; set; }
public int Price { get; set; } public int Price { get; set; }
public float PositionX { get; set; }
public float PositionY { get; set; }
public float PositionZ { get; set; }
public float Heading { get; set; }
[StringLength(8)]
public string NumberPlate { get; set; }
public byte Alpha { get; set; }
public byte PrimaryColor { get; set; }
public byte SecondaryColor { get; set; }
public byte Dimension { get; set; }
public bool Active { get; set; }
} }
} }

View File

@@ -14,27 +14,11 @@ using System.Text;
namespace reallife_gamemode.Server.Entities namespace reallife_gamemode.Server.Entities
{ {
public class UserVehicle [Table("UserVehicles")]
public class UserVehicle : ServerVehicle
{ {
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("User")] [ForeignKey("User")]
public int UserId { get; set; } public int UserId { get; set; }
public User User { get; set; } public User User { get; set; }
public VehicleHash Model { get; set; }
public float PositionX { get; set; }
public float PositionY { get; set; }
public float PositionZ { get; set; }
public float Heading { get; set; }
[StringLength(8)]
public string NumberPlate { get; set; }
public byte Alpha { get; set; }
public byte PrimaryColor { get; set; }
public byte SecondaryColor { get; set; }
public bool Locked { get; set; }
public bool Engine { get; set; }
public byte Dimension { get; set; }
} }
} }

View File

@@ -1,31 +0,0 @@
using GTANetworkAPI;
using Microsoft.EntityFrameworkCore;
using reallife_gamemode.Model;
using reallife_gamemode.Server.Entities;
using reallife_gamemode.Server.Managers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/**
* @overview Life of German Reallife - Vehicle Extension (VehicleExtension.cs)
* @author hydrant
* @copyright (c) 2008 - 2018 Life of German
*/
namespace reallife_gamemode.Server.Extensions
{
public static class VehicleExtension
{
/// <summary>
/// Gibt zurück, ob das Vehicle ein Fraktions-Fahrzeug ist
/// </summary>
/// <param name="vehicle">Das Vehicle, von dem man wissen möchte, ob es ein Fraktionsfahrzeug ist</param>
/// <returns></returns>
public static bool IsFactionVehicle(this Vehicle vehicle)
{
return LoadManager.FactionVehicleList.Contains(vehicle);
}
}
}

View File

@@ -40,44 +40,39 @@ namespace reallife_gamemode.Server.Managers
GotoPointList.Add(g); GotoPointList.Add(g);
} }
} }
foreach (Saves.SavedVehicle v in loadData.Vehicles)
foreach(ServerVehicle veh in loadData.ServerVehicles)
{ {
if (v.Active == true) if (!veh.Active) continue;
Vehicle current = veh.Spawn();
if (veh is Saves.SavedVehicle savedV)
{ {
NAPI.Vehicle.CreateVehicle((uint)v.Model, new Vector3(v.PositionX, v.PositionY, v.PositionZ), v.Heading, (v.PrimaryColor), NAPI.Vehicle.CreateVehicle((uint)savedV.Model, new Vector3(savedV.PositionX, savedV.PositionY, savedV.PositionZ), savedV.Heading, savedV.PrimaryColor,
v.SecondaryColor, v.NumberPlate, v.Alpha, v.Locked, v.Engine = false, v.Dimension); savedV.SecondaryColor, savedV.NumberPlate, 255, savedV.Locked);
} }
} if (veh is FactionVehicle factionV)
foreach (FactionVehicle v in loadData.FactionVehicles)
{
if (v.Active == true)
{ {
Vehicle current = NAPI.Vehicle.CreateVehicle((uint)v.Model, new Vector3(v.PositionX, v.PositionY, v.PositionZ), v.Heading, (v.PrimaryColor), current.SetData("factionId", factionV.FactionId);
v.SecondaryColor, v.NumberPlate, v.Alpha, v.Locked, v.Engine = false, v.Dimension);
current.SetData("factionId", v.FactionId);
FactionVehicleList.Add(current); FactionVehicleList.Add(current);
} }
} if (veh is ShopVehicle shopV)
foreach (ShopVehicle v in loadData.ShopVehicles)
{
if (v.Active == true)
{ {
Vehicle current = NAPI.Vehicle.CreateVehicle((uint)v.Model, new Vector3(v.PositionX, v.PositionY, v.PositionZ), v.Heading, (v.PrimaryColor), string displayName = NAPI.Vehicle.GetVehicleDisplayName(shopV.Model);
v.SecondaryColor, v.NumberPlate, v.Alpha, false, false, v.Dimension);
ShopVehicleList.Add(current); ShopVehicleList.Add(current);
NAPI.Vehicle.SetVehicleEngineHealth(current, 0); NAPI.Vehicle.SetVehicleEngineHealth(current, 0);
var tLabel = NAPI.TextLabel.CreateTextLabel(v.ModelName + " | " + v.Price + "~g~$", new Vector3(v.PositionX, v.PositionY, v.PositionZ + 1.5), 10, 1, 0, new Color(255, 255, 255), false, v.Dimension); var tLabel = NAPI.TextLabel.CreateTextLabel(displayName + " | " + shopV.Price + "~g~$", new Vector3(shopV.PositionX, shopV.PositionY, shopV.PositionZ + 1.5), 10, 1, 0, new Color(255, 255, 255), false);
current.SetData("shopVehicleId", v.Id); current.SetData("shopVehicleId", shopV.Id);
tLabel.AttachTo(current, "chassis", new Vector3(0, 0, 1.5), new Vector3(0, 0, 0)); tLabel.AttachTo(current, "chassis", new Vector3(0, 0, 1.5), new Vector3(0, 0, 0));
} }
if (veh is UserVehicle userV)
{
UserVehicleList.Add(current);
}
} }
foreach (UserVehicle v in loadData.UserVehicles)
{
Vehicle current = NAPI.Vehicle.CreateVehicle((uint)v.Model, new Vector3(v.PositionX, v.PositionY, v.PositionZ), v.Heading, (v.PrimaryColor),
v.SecondaryColor, v.NumberPlate, v.Alpha, false, false, v.Dimension);
current.SetData("ownerId", v.UserId);
UserVehicleList.Add(current);
}
} }
} }
} }

View File

@@ -1,4 +1,5 @@
using GTANetworkAPI; using GTANetworkAPI;
using reallife_gamemode.Server.Entities;
using reallife_gamemode.Server.Extensions; using reallife_gamemode.Server.Extensions;
using reallife_gamemode.Server.Managers; using reallife_gamemode.Server.Managers;
using System; using System;
@@ -68,11 +69,9 @@ namespace reallife_gamemode.Server.Events
PrimaryColor = vehiclePrimaryColor, PrimaryColor = vehiclePrimaryColor,
SecondaryColor = vehicleSecondaryColor, SecondaryColor = vehicleSecondaryColor,
Locked = vehicleLocked, Locked = vehicleLocked,
Engine = vehicleEngine,
Dimension = vehicleDimension,
Active = true Active = true
}; };
saveData.Vehicles.Add(dataSet); saveData.ServerVehicles.Add(dataSet);
saveData.SaveChanges(); saveData.SaveChanges();
} }
} }
@@ -93,11 +92,9 @@ namespace reallife_gamemode.Server.Events
PrimaryColor = vehiclePrimaryColor, PrimaryColor = vehiclePrimaryColor,
SecondaryColor = vehicleSecondaryColor, SecondaryColor = vehicleSecondaryColor,
Locked = vehicleLocked, Locked = vehicleLocked,
Engine = vehicleEngine,
Dimension = vehicleDimension,
Active = true Active = true
}; };
saveData.FactionVehicles.Add(dataSet); saveData.ServerVehicles.Add(dataSet);
saveData.SaveChanges(); saveData.SaveChanges();
} }
} }
@@ -109,7 +106,6 @@ namespace reallife_gamemode.Server.Events
var dataSet = new Entities.ShopVehicle var dataSet = new Entities.ShopVehicle
{ {
Model = vehicleModel, Model = vehicleModel,
ModelName = vehicleModelName,
PositionX = vehiclePosition.X, PositionX = vehiclePosition.X,
PositionY = vehiclePosition.Y, PositionY = vehiclePosition.Y,
PositionZ = vehiclePosition.Z, PositionZ = vehiclePosition.Z,
@@ -117,10 +113,9 @@ namespace reallife_gamemode.Server.Events
NumberPlate = vehicleNumberPlate, NumberPlate = vehicleNumberPlate,
PrimaryColor = vehiclePrimaryColor, PrimaryColor = vehiclePrimaryColor,
SecondaryColor = vehicleSecondaryColor, SecondaryColor = vehicleSecondaryColor,
Dimension = vehicleDimension,
Active = true Active = true
}; };
saveData.ShopVehicles.Add(dataSet); saveData.ServerVehicles.Add(dataSet);
saveData.SaveChanges(); saveData.SaveChanges();
} }
} }
@@ -139,44 +134,31 @@ namespace reallife_gamemode.Server.Events
}; };
saveData.GotoPoints.Add(dataSet); saveData.GotoPoints.Add(dataSet);
saveData.SaveChanges(); saveData.SaveChanges();
LoadManager.GotoPointList.Add(dataSet);
} }
} }
public static void SaveAllOnSave() public static void SaveAllOnSave()
{ {
// Alle Fahrzeuge
using (var saveAll = new Model.DatabaseContext()) using (var saveAll = new Model.DatabaseContext())
{ {
//TODO Fahrzeugschäden und Tankfüllstände foreach(ServerVehicle veh in saveAll.ServerVehicles)
//User Vehicle
foreach (Vehicle v in LoadManager.UserVehicleList)
{ {
int ownerId = v.GetData("ownerId"); Vehicle v = VehicleManager.GetVehicleFromServerVehicle(veh);
Entities.UserVehicle userVehicle = saveAll.UserVehicles.FirstOrDefault(u => u.UserId == ownerId);
userVehicle.PositionX = v.Position.X;
userVehicle.PositionY = v.Position.Y;
userVehicle.PositionZ = v.Position.Z;
userVehicle.Heading = v.Heading;
}
//Faction Vehicle veh.PositionX = v.Position.X;
foreach (Vehicle v in LoadManager.FactionVehicleList) veh.PositionY = v.Position.Y;
{ veh.PositionZ = v.Position.Z;
int factionId = v.GetData("factionId"); veh.Heading = v.Heading;
Entities.FactionVehicle factionVehicle = saveAll.FactionVehicles.FirstOrDefault(u => u.FactionId == factionId);
factionVehicle.PositionX = v.Position.X;
factionVehicle.PositionY = v.Position.Y;
factionVehicle.PositionZ = v.Position.Z;
factionVehicle.Heading = v.Heading;
} }
//Alle Spieler //Alle Spieler
foreach (Client player in NAPI.Pools.GetAllPlayers()) foreach (Client player in NAPI.Pools.GetAllPlayers())
{ {
int userId = player.GetUser().Id; Vector3 pos = player.Position;
Entities.User user = saveAll.Users.FirstOrDefault(u => u.Id == userId); User user = player.GetUser(saveAll);
user.PositionX = player.Position.X; user.PositionX = pos.X;
user.PositionY = player.Position.Y; user.PositionY = pos.Y;
user.PositionZ = player.Position.Z; user.PositionZ = pos.Z;
} }
saveAll.SaveChanges(); saveAll.SaveChanges();

View File

@@ -0,0 +1,39 @@
using GTANetworkAPI;
using reallife_gamemode.Server.Entities;
using System;
using System.Collections.Generic;
using System.Text;
namespace reallife_gamemode.Server.Managers
{
public class VehicleManager
{
private static Dictionary<int, NetHandle> _serverVehicles = new Dictionary<int, NetHandle>();
public static void AddVehicle(ServerVehicle serverVehicle, Vehicle vehicle)
{
if(_serverVehicles.ContainsKey(serverVehicle.Id))
{
return;
}
if (_serverVehicles.ContainsValue(vehicle.Handle))
{
return;
}
_serverVehicles[serverVehicle.Id] = vehicle.Handle;
}
public static Vehicle GetVehicleFromServerVehicle(ServerVehicle serverVehicle)
{
Console.WriteLine("calling GetVehicleFromServerVehicle | " + serverVehicle.Id);
if(!_serverVehicles.ContainsKey(serverVehicle.Id))
{
return null;
}
return NAPI.Pools.GetAllVehicles().Find(v => v.Handle == _serverVehicles[serverVehicle.Id]);
}
}
}

View File

@@ -4,6 +4,7 @@ using System.Text;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using GTANetworkAPI; using GTANetworkAPI;
using reallife_gamemode.Server.Entities;
/** /**
* @overview Life of German Reallife - Saves SavedVehicle.cs * @overview Life of German Reallife - Saves SavedVehicle.cs
@@ -13,24 +14,6 @@ using GTANetworkAPI;
namespace reallife_gamemode.Server.Saves namespace reallife_gamemode.Server.Saves
{ {
public class SavedVehicle public class SavedVehicle : ServerVehicle
{ { }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public VehicleHash Model { get; set; }
public float PositionX { get; set; }
public float PositionY { get; set; }
public float PositionZ { get; set; }
public float Heading { get; set; }
[StringLength(8)]
public string NumberPlate { get; set; }
public byte Alpha { get; set; }
public byte PrimaryColor { get; set; }
public byte SecondaryColor { get; set; }
public bool Locked { get; set; }
public bool Engine { get; set; }
public byte Dimension { get; set; }
public bool Active { get; set; }
}
} }

View File

@@ -14,7 +14,7 @@ namespace reallife_gamemode.Server.Util
NAPI.Util.ConsoleOutput("Initializing database..."); NAPI.Util.ConsoleOutput("Initializing database...");
using(var dbContext = new DatabaseContext()) using(var dbContext = new DatabaseContext())
{ {
dbContext.Users.First(); dbContext.Users.FirstOrDefault();
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
} }