Merge branch 'feature/user-backend' into develop

This commit is contained in:
VegaZ
2018-10-15 17:05:35 +02:00
15 changed files with 563 additions and 30 deletions

View File

@@ -39,14 +39,18 @@ namespace reallife_gamemode.Model
//User //User
public DbSet<Server.Entities.User> Users { get; set; } public DbSet<Server.Entities.User> Users { get; set; }
public DbSet<Server.Entities.UserVehicle> UserVehicles { get; set; } public DbSet<Server.Entities.UserVehicle> UserVehicles { get; set; }
public DbSet<Server.Entities.UserBankAccount> BankAccounts { get; set; } public DbSet<Server.Entities.UserBankAccount> UserBankAccounts { get; set; }
public DbSet<Server.Entities.Ban> Bans { get; set; } public DbSet<Server.Entities.Ban> Bans { get; set; }
//Faction //Faction
public DbSet<Server.Entities.Faction> Factions { get; set; } public DbSet<Server.Entities.Faction> Factions { get; set; }
public DbSet<Server.Entities.FactionBankAccount> FactionBankAccounts { get; set; }
public DbSet<Server.Entities.FactionRank> FactionRanks { get; set; } public DbSet<Server.Entities.FactionRank> FactionRanks { get; set; }
public DbSet<Server.Entities.FactionVehicle> FactionVehicles { get; set; } public DbSet<Server.Entities.FactionVehicle> FactionVehicles { get; set; }
//Shops
public DbSet<Server.Entities.Shop> Shops { get; set; }
//Logs //Logs
//public DbSet<Server.Logs.Ban> BanLogs { get; set; } //public DbSet<Server.Logs.Ban> BanLogs { get; set; }
public DbSet<Server.Logs.BankAccountTransactionHistory> BankAccountTransactionLogs { get; set; } public DbSet<Server.Logs.BankAccountTransactionHistory> BankAccountTransactionLogs { get; set; }
@@ -59,5 +63,6 @@ namespace reallife_gamemode.Model
public DbSet<Server.Saves.SavedPickup> Pickups { get; set; } public DbSet<Server.Saves.SavedPickup> Pickups { get; set; }
public DbSet<Server.Saves.SavedTextLabel> TextLabels { get; set; } public DbSet<Server.Saves.SavedTextLabel> TextLabels { get; set; }
public DbSet<Server.Saves.SavedVehicle> Vehicles { get; set; } public DbSet<Server.Saves.SavedVehicle> Vehicles { get; set; }
public DbSet<Server.Entities.ShopVehicle> ShopVehicles { get; set; }
} }
} }

View File

@@ -13,6 +13,7 @@ using reallife_gamemode.Server.Events;
using reallife_gamemode.Server.Extensions; using reallife_gamemode.Server.Extensions;
using reallife_gamemode.Server.Services; using reallife_gamemode.Server.Services;
using reallife_gamemode.Server.Util; using reallife_gamemode.Server.Util;
using reallife_gamemode.Server.Managers;
/** /**
* @overview Life of German Reallife - Admin Commands (Admin.cs) * @overview Life of German Reallife - Admin Commands (Admin.cs)
@@ -586,7 +587,7 @@ namespace reallife_gamemode.Server.Commands
target.GetUser().BanPlayer(admin, reason, mins); target.GetUser().BanPlayer(admin, reason, mins);
} }
[Command("save", "~m~Benutzung: ~s~/save [Typ = ~g~Blip, ~r~Marker, Ped, Pickup, TextLabel, ~g~Vehicle, FVehicle")] [Command("save", "~m~Benutzung: ~s~/save [Typ = ~g~Blip, ~r~Marker, Ped, Pickup, TextLabel, ~g~Vehicle, FVehicle, SVehicle")]
public void CmdAdminSave(Client player, string typ) public void CmdAdminSave(Client player, string typ)
{ {
switch (typ) switch (typ)
@@ -594,6 +595,15 @@ namespace reallife_gamemode.Server.Commands
case "Blip": case "Blip":
player.TriggerEvent("saveBlip"); player.TriggerEvent("saveBlip");
break; break;
case "Vehicle":
if (player.IsInVehicle)
{
Vehicle vehicle = player.Vehicle;
SaveManager.SaveVehicleData((VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), vehicle.Locked, vehicle.EngineStatus, Convert.ToByte(vehicle.Dimension));
}
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
break;
case "FVehicle": case "FVehicle":
if (player.IsInVehicle) if (player.IsInVehicle)
{ {
@@ -605,18 +615,21 @@ namespace reallife_gamemode.Server.Commands
else else
{ {
Vehicle vehicle = player.Vehicle; Vehicle vehicle = player.Vehicle;
SaveData.SaveFactionVehicleData((VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate, SaveManager.SaveFactionVehicleData((VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), vehicle.Locked, vehicle.EngineStatus, Convert.ToByte(vehicle.Dimension), player.GetUser().FactionId); Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), vehicle.Locked, vehicle.EngineStatus, Convert.ToByte(vehicle.Dimension), player.GetUser().FactionId);
vehicle.SetData("factionId", player.GetUser().FactionId);
LoadManager.FactionVehicleList.Add(vehicle);
} }
} }
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!"); else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
break; break;
case "Vehicle": case "SVehicle":
if (player.IsInVehicle) if (player.IsInVehicle)
{ {
Vehicle vehicle = player.Vehicle; Vehicle vehicle = player.Vehicle;
SaveData.SaveVehicleData((VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate, SaveManager.SaveShopVehicleData((VehicleHash)vehicle.Model, vehicle.DisplayName, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), vehicle.Locked, vehicle.EngineStatus, Convert.ToByte(vehicle.Dimension)); Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), Convert.ToByte(vehicle.Dimension), player.GetUser().FactionId);
LoadManager.ShopVehicleList.Add(vehicle);
} }
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!"); else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
break; break;
@@ -733,6 +746,7 @@ namespace reallife_gamemode.Server.Commands
if (player.IsInVehicle) if (player.IsInVehicle)
{ {
Vehicle playerVehicle = player.Vehicle; Vehicle playerVehicle = player.Vehicle;
LoadManager.UserVehicleList.Add(playerVehicle);
using (var saveVehicle = new DatabaseContext()) using (var saveVehicle = new DatabaseContext())
{ {
var dataSet = new UserVehicle var dataSet = new UserVehicle
@@ -750,10 +764,10 @@ namespace reallife_gamemode.Server.Commands
Engine = playerVehicle.EngineStatus, Engine = playerVehicle.EngineStatus,
Dimension = Convert.ToByte(playerVehicle.Dimension), Dimension = Convert.ToByte(playerVehicle.Dimension),
}; };
playerVehicle.SetData("ownerId",player.GetUser().Id);
saveVehicle.UserVehicles.Add(dataSet); saveVehicle.UserVehicles.Add(dataSet);
saveVehicle.SaveChanges(); saveVehicle.SaveChanges();
} }
} }
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!"); else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
} }
@@ -1075,7 +1089,7 @@ namespace reallife_gamemode.Server.Commands
player.SendChatMessage("IP von " + NAPI.Player.GetPlayerName(target) + ": " + target.Address); player.SendChatMessage("IP von " + NAPI.Player.GetPlayerName(target) + ": " + target.Address);
} }
//TEST COMMAND //TODO TEST COMMAND
[Command("myvehicles")] [Command("myvehicles")]
public void CmdAdminMyVehicles(Client player) public void CmdAdminMyVehicles(Client player)
{ {
@@ -1098,6 +1112,55 @@ namespace reallife_gamemode.Server.Commands
} }
} }
} }
//TODO
[Command("fpay")]
public void FPay(Client player, string receiver, float amount)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
using (var getFaction = new DatabaseContext())
{
Entities.Faction receiverUser = getFaction.Factions.FirstOrDefault(u => u.Name == receiver);
BankManager.TransferUserMoneyToFaction(player.GetUser(), receiverUser, amount, "/FPAY");
}
}
//TODO Ausführen bei Tastendruck wenn in Fahrzeug.
[Command("buyv")]
public void BuyShopVehicle(Client player)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
if (player.IsInVehicle)
{
if (player.Vehicle.HasData("shopVehicleId"))
{
int shopVehicleId = player.Vehicle.GetData("shopVehicleId");
using (var getShopVehicle = new DatabaseContext())
{
ShopVehicle sVehicle = getShopVehicle.ShopVehicles.FirstOrDefault(u => u.Id == shopVehicleId);
Entities.Faction receiverUser = getShopVehicle.Factions.FirstOrDefault(u => u.Name == "LSPD");
BankManager.TransferUserMoneyToFaction(player.GetUser(), receiverUser, sVehicle.Price, "Fahrzeug gekauft: " + sVehicle.ModelName);
//TODO Anpassen
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);
player.SetIntoVehicle(boughtVehicle, 0);
//TODO fügt das Fahrzeug als Userfahrzeug hinzu
CmdAdminOwn(player);
}
}
}
}
[Command("saveall")]
public void SaveAll(Client player)
{
SaveManager.SaveAllOnSave();
}
/* /*
[Command("restart")] [Command("restart")]

View File

@@ -20,7 +20,7 @@ namespace reallife_gamemode.Server.Entities
public int Id { get; set; } public int Id { get; set; }
[StringLength(32)] [StringLength(32)]
public string Name { get; set; } public string Name { get; set; }
public int BankAccount { get; set; } public float BankAccount { get; set; }
public bool StateOwned { get; set; } public bool StateOwned { get; set; }
} }
} }

View File

@@ -0,0 +1,31 @@
using GTANetworkAPI;
using reallife_gamemode.Server.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
/**
* @overview Life of German Reallife - Entities FactionBankAccount (FactionBankAccount.cs)
* @author VegaZ
* @copyright (c) 2008 - 2018 Life of German
*/
namespace reallife_gamemode.Server.Entities
{
public class FactionBankAccount
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("Faction")]
public int FactionId { get; set; }
public Faction Faction { get; set; }
[StringLength(12)]
public string Bic { get; set; }
[StringLength(32)]
public string Iban { get; set; }
public float Balance { get; set; }
public bool Active { get; set; }
}
}

31
Server/Entities/Shop.cs Normal file
View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using reallife_gamemode.Server.Entities;
/**
* @overview Life of German Reallife - Entities Shop (Shop.cs)
* @author VegaZ
* @copyright (c) 2008 - 2018 Life of German
*/
namespace reallife_gamemode.Server.Entities
{
public class Shop
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string ShopName { get; set; }
public float Balance { get; set; }
[ForeignKey("ShopCategory")]
public int Category { get; set; }
public ShopCategory ShopCategory { get; set; }
public int Owner { get; set; }
public bool Active { get; set; }
}
}

View File

@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using reallife_gamemode.Server.Entities;
/**
* @overview Life of German Reallife - Entities ShopCategory (ShopCategory.cs)
* @author VegaZ
* @copyright (c) 2008 - 2018 Life of German
*/
namespace reallife_gamemode.Server.Entities
{
public class ShopCategory
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Category { get; set; }
}
}

View File

@@ -0,0 +1,43 @@
using GTANetworkAPI;
using reallife_gamemode.Server.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
/**
* @overview Life of German Reallife - Entities ShopVehicles (ShopVehicles.cs)
* @author VegaZ
* @copyright (c) 2008 - 2018 Life of German
*/
namespace reallife_gamemode.Server.Entities
{
public class ShopVehicle
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("Shop")]
public int ShopId { get; set; }
public Shop Shop { get; set; }
public VehicleHash Model { get; set; }
[StringLength(32)]
public string ModelName { get; set; }
public float 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

@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Text;
using GTANetworkAPI;
using reallife_gamemode.Server.Entities;
using reallife_gamemode.Server.Extensions;
namespace reallife_gamemode.Server.Events
{
public class EnterVehicleAttempt : Script
{
[ServerEvent(Event.PlayerEnterVehicleAttempt)]
public void OnPlayerEnterVehicleAttempt(Client player, Vehicle vehicle, sbyte seat)
{
if (vehicle.HasData("factionId"))
{
if((vehicle.GetData("factionId") != player.GetUser().FactionId) && seat == 0)
{
//TODO REWORK
player.SetIntoVehicle(vehicle, 1);
player.WarpOutOfVehicle();
player.SendChatMessage("Du hast kein Recht in dieses Fahrzeug als Fahrer einzusteigen.");
return;
}
}
}
}
}

View File

@@ -0,0 +1,36 @@
using GTANetworkAPI;
using Microsoft.EntityFrameworkCore;
using reallife_gamemode.Model;
using reallife_gamemode.Server.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/**
* @overview Life of German Reallife - Faction Extension (FactionExtension.cs)
* @author VegaZ
* @copyright (c) 2008 - 2018 Life of German
*/
namespace reallife_gamemode.Server.Extensions
{
public static class FactionExtension
{
public static FactionBankAccount GetFactionBankAccount(this Faction faction, DatabaseContext context = null)
{
using (DatabaseContext dbContext = new DatabaseContext())
if (context == null)
{
using (context = new DatabaseContext())
{
return context.FactionBankAccounts.FirstOrDefault(u => u.FactionId == faction.Id);
}
}
else
{
return context.FactionBankAccounts.FirstOrDefault(u => u.FactionId == faction.Id);
}
}
}
}

View File

@@ -0,0 +1,36 @@
using GTANetworkAPI;
using Microsoft.EntityFrameworkCore;
using reallife_gamemode.Model;
using reallife_gamemode.Server.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/**
* @overview Life of German Reallife - User Extension (UserExtension.cs)
* @author VegaZ
* @copyright (c) 2008 - 2018 Life of German
*/
namespace reallife_gamemode.Server.Extensions
{
public static class UserExtension
{
public static UserBankAccount GetUserBankAccount(this User user, DatabaseContext context = null)
{
using (DatabaseContext dbContext = new DatabaseContext())
if (context == null)
{
using (context = new DatabaseContext())
{
return context.UserBankAccounts.FirstOrDefault(u => u.UserId == user.Id);
}
}
else
{
return context.UserBankAccounts.FirstOrDefault(u => u.UserId == user.Id);
}
}
}
}

View File

@@ -0,0 +1,27 @@
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
{
public static bool IsFactionVehicle(Vehicle vehicle)
{
bool containsVehicle = LoadManager.FactionVehicleList.Contains(vehicle);
return containsVehicle;
}
}
}

View File

@@ -28,6 +28,8 @@ namespace reallife_gamemode.Server.Logs
public float NewSenderBalance { get; set; } public float NewSenderBalance { get; set; }
public float NewReceiverBalance { get; set; } public float NewReceiverBalance { get; set; }
public float Fee { get; set; } public float Fee { get; set; }
[StringLength(32)]
public string Origin { get; set; }
[Timestamp] [Timestamp]
public byte[] Timestamp { get; set; } public byte[] Timestamp { get; set; }
} }

View File

@@ -0,0 +1,116 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GTANetworkAPI;
using reallife_gamemode.Server.Entities;
using reallife_gamemode.Server.Extensions;
/**
* @overview Life of German Reallife - Managers BankManager (BankManager.cs)
* @author VegaZ
* @copyright (c) 2008 - 2018 Life of German
*/
namespace reallife_gamemode.Server.Managers
{
public class BankManager : Script
{
public static void TransferUserMoneyToUser(User sender, User receiver, float amount, string origin)
{
using (var transferMoney = new Model.DatabaseContext())
{
var transactionLog = new Logs.BankAccountTransactionHistory
{
Sender = sender.Name,
SenderBalance = sender.GetUserBankAccount().Balance,
MoneySent = amount,
Receiver = receiver.Name,
ReceiverBalance = receiver.GetUserBankAccount().Balance,
NewReceiverBalance = receiver.GetUserBankAccount().Balance += amount,
NewSenderBalance = sender.GetUserBankAccount().Balance -= amount,
Fee = 0,
Origin = origin
};
transferMoney.BankAccountTransactionLogs.Add(transactionLog);
sender.GetUserBankAccount(transferMoney).Balance -= amount;
receiver.GetUserBankAccount(transferMoney).Balance += amount;
transferMoney.SaveChanges();
}
}
public static void TransferUserMoneyToFaction(User sender, Faction receiver, float amount, string origin)
{
using (var transferMoney = new Model.DatabaseContext())
{
var transactionLog = new Logs.BankAccountTransactionHistory
{
Sender = sender.Name,
SenderBalance = sender.GetUserBankAccount().Balance,
MoneySent = amount,
Receiver = receiver.Name,
ReceiverBalance = receiver.BankAccount,
NewReceiverBalance = receiver.BankAccount += amount,
NewSenderBalance = sender.GetUserBankAccount().Balance -= amount,
Fee = 0,
Origin = origin
};
transferMoney.BankAccountTransactionLogs.Add(transactionLog);
sender.GetUserBankAccount(transferMoney).Balance -= amount;
receiver.BankAccount += amount;
transferMoney.SaveChanges();
}
}
public static void TransferFactionMoneyToUser(Faction sender, User receiver, float amount, string origin)
{
using (var transferMoney = new Model.DatabaseContext())
{
var transactionLog = new Logs.BankAccountTransactionHistory
{
Sender = sender.Name,
SenderBalance = sender.BankAccount,
MoneySent = amount,
Receiver = receiver.Name,
ReceiverBalance = receiver.GetUserBankAccount().Balance,
NewReceiverBalance = receiver.GetUserBankAccount().Balance += amount,
NewSenderBalance = sender.BankAccount -= amount,
Fee = 0,
Origin = origin
};
transferMoney.BankAccountTransactionLogs.Add(transactionLog);
sender.BankAccount -= amount;
receiver.GetUserBankAccount(transferMoney).Balance += amount;
transferMoney.SaveChanges();
}
}
public static void TransferFactionMoneyToFaction(Faction sender, Faction receiver, float amount, string origin)
{
using (var transferMoney = new Model.DatabaseContext())
{
var transactionLog = new Logs.BankAccountTransactionHistory
{
Sender = sender.Name,
SenderBalance = sender.GetFactionBankAccount().Balance,
MoneySent = amount,
Receiver = receiver.Name,
ReceiverBalance = receiver.BankAccount,
NewReceiverBalance = receiver.BankAccount += amount,
NewSenderBalance = sender.BankAccount -= amount,
Fee = 0,
Origin = origin
};
transferMoney.BankAccountTransactionLogs.Add(transactionLog);
sender.BankAccount -= amount;
receiver.BankAccount += amount;
transferMoney.SaveChanges();
}
}
}
}

View File

@@ -15,6 +15,10 @@ namespace reallife_gamemode.Server.Managers
{ {
public class LoadManager : Script public class LoadManager : Script
{ {
public static List<Vehicle> FactionVehicleList = new List<Vehicle>();
public static List<Vehicle> ShopVehicleList = new List<Vehicle>();
public static List<Vehicle> UserVehicleList = new List<Vehicle>();
[ServerEvent(Event.ResourceStart)] [ServerEvent(Event.ResourceStart)]
public void OnResourceStart() public void OnResourceStart()
{ {
@@ -40,9 +44,30 @@ namespace reallife_gamemode.Server.Managers
{ {
if (v.Active == true) if (v.Active == true)
{ {
NAPI.Vehicle.CreateVehicle((uint)v.Model, new Vector3(v.PositionX, v.PositionY, v.PositionZ), v.Heading, (v.PrimaryColor), 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, v.Locked, v.Engine = false, v.Dimension); v.SecondaryColor, v.NumberPlate, v.Alpha, v.Locked, v.Engine = false, v.Dimension);
} current.SetData("factionId", v.FactionId);
FactionVehicleList.Add(current);
}
}
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),
v.SecondaryColor, v.NumberPlate, v.Alpha, false, false, v.Dimension);
ShopVehicleList.Add(current);
current.Health = -4000;
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);
current.SetData("shopVehicleId", v.Id);
}
}
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,11 +1,14 @@
using GTANetworkAPI; using GTANetworkAPI;
using reallife_gamemode.Server.Extensions;
using reallife_gamemode.Server.Managers;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Text;
namespace reallife_gamemode.Server.Events namespace reallife_gamemode.Server.Events
{ {
public class SaveData : Script public class SaveManager : Script
{ {
[RemoteEvent("OnSaveBlipData")] [RemoteEvent("OnSaveBlipData")]
public void OnSaveBlipData(Client player, string blipSprite, string blipName, string blipScale, string blipColor, public void OnSaveBlipData(Client player, string blipSprite, string blipName, string blipScale, string blipColor,
@@ -98,5 +101,68 @@ namespace reallife_gamemode.Server.Events
saveData.SaveChanges(); saveData.SaveChanges();
} }
} }
public static void SaveShopVehicleData(VehicleHash vehicleModel, string vehicleModelName, Vector3 vehiclePosition, float vehicleHeading,
string vehicleNumberPlate, byte vehiclePrimaryColor, byte vehicleSecondaryColor, byte vehicleDimension, int? factionId)
{
using (var saveData = new Model.DatabaseContext())
{
var dataSet = new Entities.ShopVehicle
{
Model = vehicleModel,
ModelName = vehicleModelName,
PositionX = vehiclePosition.X,
PositionY = vehiclePosition.Y,
PositionZ = vehiclePosition.Z,
Heading = vehicleHeading,
NumberPlate = vehicleNumberPlate,
PrimaryColor = vehiclePrimaryColor,
SecondaryColor = vehicleSecondaryColor,
Dimension = vehicleDimension,
Active = true
};
saveData.ShopVehicles.Add(dataSet);
saveData.SaveChanges();
}
}
public static void SaveAllOnSave()
{
using (var saveAll = new Model.DatabaseContext())
{
//TODO Fahrzeugschäden und Tankfüllstände
//User Vehicle
foreach (Vehicle v in LoadManager.UserVehicleList)
{
int ownerId = v.GetData("ownerId");
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
foreach (Vehicle v in LoadManager.FactionVehicleList)
{
int factionId = v.GetData("factionId");
Entities.UserVehicle factionVehicle = saveAll.UserVehicles.FirstOrDefault(u => u.UserId == factionId);
factionVehicle.PositionX = v.Position.X;
factionVehicle.PositionY = v.Position.Y;
factionVehicle.PositionZ = v.Position.Z;
factionVehicle.Heading = v.Heading;
}
//Alle Spieler
foreach (Client player in NAPI.Pools.GetAllPlayers())
{
int userId = player.GetUser().Id;
Entities.User user = saveAll.Users.FirstOrDefault(u => u.Id == userId);
user.PositionX = player.Position.X;
user.PositionY = player.Position.Y;
user.PositionZ = player.Position.Z;
}
saveAll.SaveChanges();
}
}
} }
} }