Merge branch 'feature/user-backend' into develop
This commit is contained in:
@@ -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; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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")]
|
||||||
|
|||||||
@@ -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; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
31
Server/Entities/FactionBankAccount.cs
Normal file
31
Server/Entities/FactionBankAccount.cs
Normal 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
31
Server/Entities/Shop.cs
Normal 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; }
|
||||||
|
}
|
||||||
|
}
|
||||||
23
Server/Entities/ShopCategory.cs
Normal file
23
Server/Entities/ShopCategory.cs
Normal 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; }
|
||||||
|
}
|
||||||
|
}
|
||||||
43
Server/Entities/ShopVehicles.cs
Normal file
43
Server/Entities/ShopVehicles.cs
Normal 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; }
|
||||||
|
}
|
||||||
|
}
|
||||||
29
Server/Events/EnterVehicleAttempt.cs
Normal file
29
Server/Events/EnterVehicleAttempt.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
36
Server/Extensions/FactionExtension.cs
Normal file
36
Server/Extensions/FactionExtension.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
36
Server/Extensions/UserExtension.cs
Normal file
36
Server/Extensions/UserExtension.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
27
Server/Extensions/VehicleExtension.cs
Normal file
27
Server/Extensions/VehicleExtension.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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; }
|
||||||
}
|
}
|
||||||
|
|||||||
116
Server/Managers/BankManager.cs
Normal file
116
Server/Managers/BankManager.cs
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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,10 +44,31 @@ 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user