Merge
This commit is contained in:
102
Server/Business/BusinessBase.cs
Normal file
102
Server/Business/BusinessBase.cs
Normal file
@@ -0,0 +1,102 @@
|
||||
using GTANetworkAPI;
|
||||
using reallife_gamemode.Model;
|
||||
using reallife_gamemode.Server.Entities;
|
||||
using reallife_gamemode.Server.Extensions;
|
||||
using reallife_gamemode.Server.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace reallife_gamemode.Server.Business
|
||||
{
|
||||
public abstract class BusinessBase : IBankAccountOwner
|
||||
{
|
||||
private TextLabel _informationLabel;
|
||||
private Marker _marker;
|
||||
private ColShape _colShape;
|
||||
|
||||
public abstract int Id { get; }
|
||||
public abstract string Name { get; }
|
||||
|
||||
public abstract Vector3 Position { get; }
|
||||
|
||||
public IBankAccount GetBankAccount(DatabaseContext databaseContext = null)
|
||||
{
|
||||
if (databaseContext == null)
|
||||
{
|
||||
using (databaseContext = new DatabaseContext())
|
||||
{
|
||||
return databaseContext.BusinessBankAccounts.FirstOrDefault(u => u.BusinessId == Id);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return databaseContext.BusinessBankAccounts.FirstOrDefault(u => u.BusinessId == Id);
|
||||
}
|
||||
}
|
||||
|
||||
public void Setup()
|
||||
{
|
||||
_informationLabel = NAPI.TextLabel.CreateTextLabel(Name, Position.Add(new Vector3(0, 0, 0.5)), 20.0f, 1.3f, 0, new Color(255, 255, 255));
|
||||
_marker = NAPI.Marker.CreateMarker(MarkerType.VerticalCylinder, Position.Subtract(new Vector3(0, 0, 1.5)), new Vector3(), new Vector3(), 1f, new Color(255, 255, 255), true);
|
||||
|
||||
_colShape = NAPI.ColShape.CreateSphereColShape(Position.Subtract(new Vector3(0, 0, 1.5)), 3f);
|
||||
_colShape.OnEntityEnterColShape += EntityEnterBusinessColShape;
|
||||
_colShape.OnEntityExitColShape += EntityExitBusinessColShape;
|
||||
|
||||
if (GetBankAccount() == null)
|
||||
{
|
||||
NAPI.Util.ConsoleOutput("Creating Bank Account for Business: " + Name);
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
|
||||
dbContext.BusinessBankAccounts.Add(new BusinessBankAccount()
|
||||
{
|
||||
BusinessId = Id,
|
||||
Balance = 0
|
||||
});
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void EntityExitBusinessColShape(ColShape colShape, Client client)
|
||||
{
|
||||
client.TriggerEvent("business_removeHelp", true);
|
||||
}
|
||||
|
||||
private void EntityEnterBusinessColShape(ColShape colShape, Client client)
|
||||
{
|
||||
if (GetOwner() != null && GetOwner().Id == client.GetUser()?.Id && !client.IsInVehicle)
|
||||
{
|
||||
client.TriggerEvent("business_showHelp", Name, (GetBankAccount()?.Balance ?? 0).ToMoneyString());
|
||||
}
|
||||
}
|
||||
|
||||
public void Update(int? money = null)
|
||||
{
|
||||
if (money == null) money = GetBankAccount()?.Balance ?? 0;
|
||||
User owner = GetOwner();
|
||||
string infoText = Name + "\n" + "Besitzer: " + (owner == null ? "Niemand" : owner.Name) + "\nKasse: ~g~" + money.ToMoneyString();
|
||||
_informationLabel.Text = infoText;
|
||||
}
|
||||
|
||||
public User GetOwner(DatabaseContext dbContext = null)
|
||||
{
|
||||
if(dbContext == null)
|
||||
{
|
||||
using (dbContext = new DatabaseContext())
|
||||
{
|
||||
return dbContext.Users.FirstOrDefault(u => u.BusinessId == Id);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return dbContext.Users.FirstOrDefault(u => u.BusinessId == Id);
|
||||
}
|
||||
}
|
||||
|
||||
public abstract void Load();
|
||||
}
|
||||
}
|
||||
21
Server/Business/ShopBusiness.cs
Normal file
21
Server/Business/ShopBusiness.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using GTANetworkAPI;
|
||||
|
||||
namespace reallife_gamemode.Server.Business
|
||||
{
|
||||
class ShopBusiness : BusinessBase
|
||||
{
|
||||
public override int Id => 2;
|
||||
|
||||
public override string Name => "24/7 Business";
|
||||
|
||||
public override Vector3 Position => new Vector3(-443, 1134, 326);
|
||||
|
||||
public override void Load()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
21
Server/Business/TelefonBusiness.cs
Normal file
21
Server/Business/TelefonBusiness.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using GTANetworkAPI;
|
||||
|
||||
namespace reallife_gamemode.Server.Business
|
||||
{
|
||||
public class TelefonBusiness : BusinessBase
|
||||
{
|
||||
public override int Id => 1;
|
||||
|
||||
public override string Name => "Telefon Business";
|
||||
|
||||
public override Vector3 Position => new Vector3(-423, 1130, 326);
|
||||
|
||||
public override void Load()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,7 @@ using reallife_gamemode.Server.Managers;
|
||||
using reallife_gamemode.Server.Inventory.Items;
|
||||
using reallife_gamemode.Server.Inventory.Interfaces;
|
||||
using reallife_gamemode.Server.Saves;
|
||||
using reallife_gamemode.Server.Business;
|
||||
|
||||
/**
|
||||
* @overview Life of German Reallife - Admin Commands (Admin.cs)
|
||||
@@ -216,11 +217,12 @@ namespace reallife_gamemode.Server.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
/* if (target == player) //TODO: wieder reintun, musste testen
|
||||
if (target == player)
|
||||
{
|
||||
ChatService.ErrorMsg(player);
|
||||
return;
|
||||
}*/
|
||||
}
|
||||
|
||||
player.SendChatMessage("~y~PM an " + target.Name + ": " + msg + " ");
|
||||
string Message = "~y~PM von " + player.GetUser().AdminLevel.GetName() + " " + player.Name + ": " + msg + "";
|
||||
NAPI.Chat.SendChatMessageToPlayer(target, Message);
|
||||
@@ -244,6 +246,22 @@ namespace reallife_gamemode.Server.Commands
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Command("businesslist", "~m~Benutzung: ~s~/businesslist")]
|
||||
public void CmdAdminBusinessList(Client player)
|
||||
{
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
player.SendChatMessage("~m~__________ ~s~Businesses ~m~__________");
|
||||
foreach (Business.BusinessBase b in BusinessManager.Businesses)
|
||||
{
|
||||
player.SendChatMessage(b.Id.ToString().PadRight(3) + " | " + b.Name);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -309,11 +327,14 @@ namespace reallife_gamemode.Server.Commands
|
||||
return;
|
||||
}
|
||||
var gotoString = "";
|
||||
foreach (GotoPoint point in LoadManager.GotoPointList)
|
||||
using(var dbContext = new DatabaseContext())
|
||||
{
|
||||
if (point.Active)
|
||||
foreach (GotoPoint point in dbContext.GotoPoints)
|
||||
{
|
||||
gotoString += point.Description + ", ";
|
||||
if (point.Active)
|
||||
{
|
||||
gotoString += point.Description + ", ";
|
||||
}
|
||||
}
|
||||
}
|
||||
player.SendChatMessage(gotoString);
|
||||
@@ -594,7 +615,7 @@ namespace reallife_gamemode.Server.Commands
|
||||
|
||||
if (ban.Applied == ban.UntilDateTime)
|
||||
{
|
||||
user.UnbanPlayer(admin);
|
||||
user.UnbanPlayer();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -605,7 +626,7 @@ namespace reallife_gamemode.Server.Commands
|
||||
return;
|
||||
}
|
||||
}
|
||||
user.UnbanPlayer(admin);
|
||||
user.UnbanPlayer();
|
||||
}
|
||||
|
||||
string message = "~b~[ADMIN] ~s~Der Spieler ~y~" + user.Name + " ~s~wurde von ~y~" + admin.Name + " ~s~entbannt.";
|
||||
@@ -841,7 +862,7 @@ namespace reallife_gamemode.Server.Commands
|
||||
}
|
||||
|
||||
[Command("vdestroy")]
|
||||
public void CmdAdminDelveh(Client player)
|
||||
public void CmdAdminVdestroy(Client player)
|
||||
{
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true)
|
||||
{
|
||||
@@ -855,10 +876,16 @@ namespace reallife_gamemode.Server.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
/* TODO: Checken, ob das Fahrzeug in einem System genutzt wird (Fraktions-Autos / Spieler-Auto)
|
||||
* Wenn Ja: Abbrechen und mitteilen, dass man den System-spezifischen Befehl zu nutzen hat */
|
||||
Vehicle playerVeh = player.Vehicle;
|
||||
|
||||
player.Vehicle.Delete();
|
||||
ServerVehicle veh = VehicleManager.GetServerVehicleFromVehicle(playerVeh);
|
||||
if(veh != null)
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Fahrzeug wird von einem Server-System benutzt: ~m~" + veh.GetType().Name);
|
||||
return;
|
||||
}
|
||||
|
||||
VehicleManager.DeleteVehicle(playerVeh);
|
||||
}
|
||||
|
||||
[Command("vcolor", "~m~Benutzung: ~s~/vcolor [Farb-ID1] [Farb-ID2]")]
|
||||
@@ -1345,17 +1372,18 @@ namespace reallife_gamemode.Server.Commands
|
||||
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));
|
||||
int playerSeat = player.VehicleSeat;
|
||||
vehicle = SaveManager.SaveVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
|
||||
Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), vehicle.Locked);
|
||||
player.SendNotification("Fahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true);
|
||||
|
||||
player.SetIntoVehicle(vehicle, playerSeat);
|
||||
}
|
||||
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
|
||||
break;
|
||||
case "FVehicle":
|
||||
if (player.IsInVehicle)
|
||||
{
|
||||
if (player.GetUser().FactionId == null)
|
||||
if (player.GetUser().GetFaction() == null)
|
||||
{
|
||||
player.SendChatMessage("~m~Du bist in keiner Fraktion! Invite dich erst mit ~y~/ainvite");
|
||||
return;
|
||||
@@ -1363,11 +1391,12 @@ namespace reallife_gamemode.Server.Commands
|
||||
else
|
||||
{
|
||||
Vehicle vehicle = player.Vehicle;
|
||||
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);
|
||||
vehicle.SetData("factionId", player.GetUser().FactionId);
|
||||
LoadManager.FactionVehicleList.Add(vehicle);
|
||||
player.SendChatMessage("second color: " + vehicle.SecondaryColor);
|
||||
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, player.GetUser().FactionId);
|
||||
player.SendNotification("Fraktionsfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true);
|
||||
player.SetIntoVehicle(vehicle, playerSeat);
|
||||
}
|
||||
}
|
||||
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
|
||||
@@ -1376,10 +1405,11 @@ namespace reallife_gamemode.Server.Commands
|
||||
if (player.IsInVehicle)
|
||||
{
|
||||
Vehicle vehicle = player.Vehicle;
|
||||
SaveManager.SaveShopVehicleData((VehicleHash)vehicle.Model, vehicle.DisplayName, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
|
||||
Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), Convert.ToByte(vehicle.Dimension), player.GetUser().FactionId);
|
||||
LoadManager.ShopVehicleList.Add(vehicle);
|
||||
int playerSeat = player.VehicleSeat;
|
||||
vehicle = SaveManager.SaveShopVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.DisplayName, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
|
||||
Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor));
|
||||
player.SendNotification("Shopfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true);
|
||||
player.SetIntoVehicle(vehicle, playerSeat);
|
||||
}
|
||||
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
|
||||
break;
|
||||
@@ -1694,6 +1724,7 @@ namespace reallife_gamemode.Server.Commands
|
||||
NAPI.Chat.SendChatMessageToPlayer(player, "~w~Das Wetter konnte nicht geändert werden");
|
||||
}
|
||||
}
|
||||
|
||||
[Command("aspeed", "~m~Benutzung: ~s~/aspeed [Modifier]")] //TODO: Überarbeiten ?? SetPlayerVelocity ??
|
||||
public void CmdAdminAspeed(Client player, float modifier)
|
||||
{
|
||||
@@ -1711,7 +1742,8 @@ namespace reallife_gamemode.Server.Commands
|
||||
|
||||
player.Vehicle.EnginePowerMultiplier = modifier;
|
||||
}
|
||||
[Command("setmoney")]
|
||||
|
||||
[Command("setmoney", "~m~Benutzung: ~s~/setmoney [Name] [Menge]")]
|
||||
public void SetPlayerMoney(Client player, string receiver, int amount)
|
||||
{
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
|
||||
@@ -1735,7 +1767,7 @@ namespace reallife_gamemode.Server.Commands
|
||||
target.SendChatMessage("~b~[ADMIN]~s~ Dein Geld wurde von Admin " + player.Name + " auf ~g~$" + amount + "~s~ gesetzt.");
|
||||
}
|
||||
|
||||
[Command("givemoney")]
|
||||
[Command("givemoney", "~m~Benutzung: ~s~/givemoney [Name] [Menge]")]
|
||||
public void GivePlayerMoney(Client player, string receiver, int amount)
|
||||
{
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
|
||||
@@ -1743,6 +1775,7 @@ namespace reallife_gamemode.Server.Commands
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
Client target = ClientService.GetClientByNameOrId(receiver);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
@@ -1758,6 +1791,106 @@ namespace reallife_gamemode.Server.Commands
|
||||
player.SendChatMessage("~b~[ADMIN]~s~ Du hast " + target.Name + " ~g~$" + amount + "~s~ gegeben.");
|
||||
target.SendChatMessage("~b~[ADMIN]~s~ Admin " + player.Name + " hat dir ~g~$" + amount + "~s~ gegeben.");
|
||||
}
|
||||
|
||||
[Command("setbusinessowner", "~m~Benutzung: ~s~/setbusinessowner [Name] [Business ID]")]
|
||||
public void CmdAdminSetbusinessowner(Client player, string name, int businessid)
|
||||
{
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
Client target = ClientService.GetClientByNameOrId(name);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(player);
|
||||
return;
|
||||
}
|
||||
|
||||
if(target.GetUser().BusinessId != null)
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Der Spieler besitzt momentan schon ein Business: ~o~" + BusinessManager.GetBusiness(target.GetUser().BusinessId).Name);
|
||||
return;
|
||||
}
|
||||
|
||||
BusinessBase business = BusinessManager.GetBusiness(businessid);
|
||||
if(business == null)
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Business existiert nicht. ~m~/businesslist");
|
||||
return;
|
||||
}
|
||||
|
||||
if(business.GetOwner() != null)
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Das Business hat momentan noch einen Besitzer: ~o~" + business.GetOwner().Name + "~s~. Entferne diesen Besitzer erst mit ~m~/clearbusiness");
|
||||
return;
|
||||
}
|
||||
|
||||
using(var dbContext = new DatabaseContext())
|
||||
{
|
||||
Entities.User targetUser = target.GetUser(dbContext);
|
||||
targetUser.BusinessId = businessid;
|
||||
|
||||
dbContext.SaveChanges();
|
||||
business.Update();
|
||||
}
|
||||
}
|
||||
|
||||
[Command("clearbusiness", "~m~Benutzung:~s~ /clearbusiness [Business ID]")]
|
||||
public void CmdAdminClearbusiness(Client player, int businessid)
|
||||
{
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
BusinessBase business = BusinessManager.GetBusiness(businessid);
|
||||
if (business == null)
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Business existiert nicht. ~m~/businesslist");
|
||||
return;
|
||||
}
|
||||
|
||||
using(var dbContext = new DatabaseContext())
|
||||
{
|
||||
Entities.User owner = business.GetOwner(dbContext);
|
||||
if(owner == null)
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Business hat momentan keinen Besitzer.");
|
||||
return;
|
||||
}
|
||||
|
||||
owner.BusinessId = null;
|
||||
business.GetBankAccount(dbContext).Balance = 0;
|
||||
|
||||
owner.GetClient()?.SendChatMessage("~b~[ADMIN]~s~ Dir wurde von ~y~" + player.Name + "~s~ dein Business entzogen.");
|
||||
player.SendChatMessage("~b~[ADMIN]~s~ Du hast ~y~" + owner.Name + "~s~ sein Business ~o~" + business.Name + "~s~ entzogen.");
|
||||
|
||||
dbContext.SaveChanges();
|
||||
business.Update();
|
||||
}
|
||||
}
|
||||
|
||||
[Command("setbusinessbankbalance", "~m~Benutzung: ~s~/setbusinessbankbalance [Business ID] [Menge]")]
|
||||
public void CmdAdminGivebusinessbankbalance(Client player, int businessid, int amount)
|
||||
{
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
BusinessBase business = BusinessManager.GetBusiness(businessid);
|
||||
if (business == null)
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Business existiert nicht. ~m~/businesslist");
|
||||
return;
|
||||
}
|
||||
|
||||
BankManager.SetMoney(player, business, amount, "Admin");
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ALevel1338
|
||||
@@ -1779,25 +1912,22 @@ namespace reallife_gamemode.Server.Commands
|
||||
if (player.IsInVehicle)
|
||||
{
|
||||
Vehicle playerVehicle = player.Vehicle;
|
||||
LoadManager.UserVehicleList.Add(playerVehicle);
|
||||
using (var saveVehicle = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new UserVehicle
|
||||
{
|
||||
UserId = player.GetUser().Id,
|
||||
Model = (VehicleHash) playerVehicle.Model,
|
||||
Model = (VehicleHash)playerVehicle.Model,
|
||||
PositionX = playerVehicle.Position.X,
|
||||
PositionY = playerVehicle.Position.Y,
|
||||
PositionZ = playerVehicle.Position.Z,
|
||||
Heading = playerVehicle.Heading,
|
||||
NumberPlate = playerVehicle.NumberPlate,
|
||||
PrimaryColor = Convert.ToByte(playerVehicle.PrimaryColor),
|
||||
SecondaryColor = Convert.ToByte(playerVehicle.SecondaryColor),
|
||||
PrimaryColor = playerVehicle.PrimaryColor,
|
||||
SecondaryColor = playerVehicle.SecondaryColor,
|
||||
Locked = playerVehicle.Locked,
|
||||
Engine = playerVehicle.EngineStatus,
|
||||
Dimension = Convert.ToByte(playerVehicle.Dimension),
|
||||
Active = true
|
||||
};
|
||||
playerVehicle.SetData("ownerId",player.GetUser().Id);
|
||||
saveVehicle.UserVehicles.Add(dataSet);
|
||||
saveVehicle.SaveChanges();
|
||||
}
|
||||
@@ -1805,13 +1935,6 @@ namespace reallife_gamemode.Server.Commands
|
||||
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//TODO TEST COMMAND
|
||||
|
||||
//TEST COMMAND
|
||||
[Command("myvehicles")]
|
||||
public void CmdAdminMyVehicles(Client player)
|
||||
@@ -1878,10 +2001,10 @@ namespace reallife_gamemode.Server.Commands
|
||||
{
|
||||
ShopVehicle sVehicle = getShopVehicle.ShopVehicles.FirstOrDefault(u => u.Id == shopVehicleId);
|
||||
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
|
||||
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);
|
||||
//TODO fügt das Fahrzeug als Userfahrzeug hinzu
|
||||
CmdAdminOwn(player);
|
||||
|
||||
31
Server/Entities/BusinessBankAccount.cs
Normal file
31
Server/Entities/BusinessBankAccount.cs
Normal file
@@ -0,0 +1,31 @@
|
||||
using reallife_gamemode.Server.Business;
|
||||
using reallife_gamemode.Server.Managers;
|
||||
using reallife_gamemode.Server.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Text;
|
||||
|
||||
namespace reallife_gamemode.Server.Entities
|
||||
{
|
||||
public class BusinessBankAccount : IBankAccount
|
||||
{
|
||||
[NotMapped]
|
||||
private int _balance;
|
||||
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int Id { get; set; }
|
||||
public int Balance {
|
||||
get => _balance;
|
||||
set
|
||||
{
|
||||
_balance = value;
|
||||
BusinessManager.GetBusiness(BusinessId).Update(value);
|
||||
}
|
||||
}
|
||||
|
||||
public int BusinessId { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,11 @@
|
||||
using GTANetworkAPI;
|
||||
using reallife_gamemode.Model;
|
||||
using reallife_gamemode.Server.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
/**
|
||||
@@ -14,28 +16,19 @@ using System.Text;
|
||||
|
||||
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")]
|
||||
public int? FactionId { 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; }
|
||||
public Faction GetFaction()
|
||||
{
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
return context.Factions.FirstOrDefault(f => f.Id == FactionId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
47
Server/Entities/ServerVehicle.cs
Normal file
47
Server/Entities/ServerVehicle.cs
Normal file
@@ -0,0 +1,47 @@
|
||||
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 currentVeh = null)
|
||||
{
|
||||
if (currentVeh != null) VehicleManager.DeleteVehicle(currentVeh);
|
||||
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);
|
||||
|
||||
if(this is FactionVehicle fV)
|
||||
{
|
||||
veh.NumberPlate = fV.GetFaction().Name;
|
||||
}
|
||||
|
||||
return veh;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,30 +14,12 @@ using System.Text;
|
||||
|
||||
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")]
|
||||
public int? ShopId { 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 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; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,11 +3,9 @@ using reallife_gamemode.Model;
|
||||
using reallife_gamemode.Server.Extensions;
|
||||
using reallife_gamemode.Server.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
/**
|
||||
* @overview Life of German Reallife - Entities User (User.cs)
|
||||
@@ -59,6 +57,8 @@ namespace reallife_gamemode.Server.Entities
|
||||
public int? FactionRankId { get; set; }
|
||||
public FactionRank FactionRank { get;set; }
|
||||
|
||||
public int? BusinessId { get; set; }
|
||||
|
||||
public Faction GetFaction()
|
||||
{
|
||||
using(var context = new DatabaseContext())
|
||||
@@ -100,14 +100,16 @@ namespace reallife_gamemode.Server.Entities
|
||||
{
|
||||
NAPI.Chat.SendChatMessageToAll("!{#FF4040}[BAN] " + this.Name + " wurde von " + admin.Name + " permanent gebannt. [" + reason + "]");
|
||||
banUser = new Ban { UserId = this.Id, Reason = reason, BannedBy = admin.Name, Applied = unixTimestamp, UntilDateTime = unixTimestamp };
|
||||
//TODO user.Kick();
|
||||
|
||||
GetClient()?.Kick();
|
||||
|
||||
mins--;
|
||||
}
|
||||
else
|
||||
{
|
||||
NAPI.Chat.SendChatMessageToAll("!{#FF4040}[BAN] " + this.Name + " wurde von " + admin.Name + " für " + mins + " Minuten gebannt. [" + reason + "]");
|
||||
banUser = new Ban { UserId = this.Id, Reason = reason, BannedBy = admin.Name, Applied = unixTimestamp, UntilDateTime = unixTimestamp + mins * 60 };
|
||||
//TODO user.Kick();
|
||||
GetClient()?.Kick();
|
||||
}
|
||||
|
||||
banUserContext.Bans.Add(banUser);
|
||||
@@ -119,12 +121,11 @@ namespace reallife_gamemode.Server.Entities
|
||||
}
|
||||
}
|
||||
|
||||
public void UnbanPlayer(Client admin)
|
||||
public void UnbanPlayer()
|
||||
{
|
||||
using (var unbanUser = new DatabaseContext())
|
||||
{
|
||||
User user = admin.GetUser();
|
||||
var targetUser = unbanUser.Users.FirstOrDefault(u => u.Id == user.Id);
|
||||
var targetUser = unbanUser.Users.FirstOrDefault(u => u.Id == this.Id);
|
||||
targetUser.BanId = null;
|
||||
unbanUser.SaveChanges();
|
||||
}
|
||||
@@ -153,5 +154,10 @@ namespace reallife_gamemode.Server.Entities
|
||||
return databaseContext.UserBankAccounts.FirstOrDefault(u => u.UserId == this.Id);
|
||||
}
|
||||
}
|
||||
|
||||
public Client GetClient()
|
||||
{
|
||||
return NAPI.Player.GetPlayerFromName(Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,27 +14,11 @@ using System.Text;
|
||||
|
||||
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")]
|
||||
public int UserId { 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; }
|
||||
}
|
||||
}
|
||||
|
||||
22
Server/Entities/VehicleMod.cs
Normal file
22
Server/Entities/VehicleMod.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Text;
|
||||
|
||||
namespace reallife_gamemode.Server.Entities
|
||||
{
|
||||
public class VehicleMod
|
||||
{
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int Id { get; set; }
|
||||
|
||||
[ForeignKey("Vehicle")]
|
||||
public int ServerVehicleId { get; set; }
|
||||
public ServerVehicle Vehicle { get; set; }
|
||||
|
||||
public int Slot { get; set; }
|
||||
public int ModId { get; set; }
|
||||
}
|
||||
}
|
||||
18
Server/Extensions/IntegerExtension.cs
Normal file
18
Server/Extensions/IntegerExtension.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace reallife_gamemode.Server.Extensions
|
||||
{
|
||||
public static class IntegerExtension
|
||||
{
|
||||
public static string ToMoneyString(this int? money)
|
||||
{
|
||||
return ToMoneyString(money ?? 0);
|
||||
}
|
||||
public static string ToMoneyString(this int money)
|
||||
{
|
||||
return string.Format(Main.SERVER_CULTURE, "{0:C0}", money).Replace('€', '$');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,31 +1,17 @@
|
||||
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)
|
||||
public static ServerVehicle GetServerVehicle(this Vehicle veh)
|
||||
{
|
||||
return LoadManager.FactionVehicleList.Contains(vehicle);
|
||||
return VehicleManager.GetServerVehicleFromVehicle(veh);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using GTANetworkAPI;
|
||||
using reallife_gamemode.Server.Business;
|
||||
using reallife_gamemode.Server.Entities;
|
||||
using reallife_gamemode.Server.Extensions;
|
||||
using reallife_gamemode.Server.Util;
|
||||
@@ -13,11 +14,44 @@ using reallife_gamemode.Server.Util;
|
||||
* @copyright (c) 2008 - 2018 Life of German
|
||||
*/
|
||||
|
||||
|
||||
namespace reallife_gamemode.Server.Managers
|
||||
{
|
||||
public class BankManager : Script
|
||||
public class BankManager
|
||||
{
|
||||
public static TransactionResult SetMoney(Client admin, IBankAccountOwner owner, int amount, string reason = "Von Admin gesetzt")
|
||||
{
|
||||
using (var transferMoney = new Model.DatabaseContext())
|
||||
{
|
||||
if (amount < 0) return TransactionResult.NEGATIVE_MONEY_SENT;
|
||||
|
||||
IBankAccount account = owner.GetBankAccount(transferMoney);
|
||||
|
||||
if (account == null) return TransactionResult.RECEIVER_NO_BANKACCOUNT;
|
||||
|
||||
var transactionLog = new Logs.BankAccountTransactionHistory
|
||||
{
|
||||
Sender = "ADMIN: " + admin.Name,
|
||||
SenderBalance = 0,
|
||||
Receiver = owner.Name,
|
||||
ReceiverBalance = amount,
|
||||
NewReceiverBalance = amount,
|
||||
NewSenderBalance = 0,
|
||||
MoneySent = amount,
|
||||
Fee = 0,
|
||||
Origin = reason
|
||||
};
|
||||
|
||||
// add log
|
||||
transferMoney.BankAccountTransactionLogs.Add(transactionLog);
|
||||
|
||||
account.Balance = amount;
|
||||
|
||||
transferMoney.SaveChanges();
|
||||
|
||||
return TransactionResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
public static TransactionResult TransferMoney(IBankAccountOwner sender, IBankAccountOwner receiver, int amount, string origin)
|
||||
{
|
||||
using (var transferMoney = new Model.DatabaseContext())
|
||||
|
||||
112
Server/Managers/BusinessManager.cs
Normal file
112
Server/Managers/BusinessManager.cs
Normal file
@@ -0,0 +1,112 @@
|
||||
using GTANetworkAPI;
|
||||
using reallife_gamemode.Server.Business;
|
||||
using reallife_gamemode.Server.Entities;
|
||||
using reallife_gamemode.Server.Extensions;
|
||||
using reallife_gamemode.Server.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
|
||||
namespace reallife_gamemode.Server.Managers
|
||||
{
|
||||
class BusinessManager : Script
|
||||
{
|
||||
public static List<BusinessBase> Businesses { get; private set; }
|
||||
|
||||
public static void LoadBusinesses()
|
||||
{
|
||||
Businesses = new List<BusinessBase>();
|
||||
|
||||
IEnumerable<Type> allTypes = Assembly.GetExecutingAssembly().GetTypes().Where(type => type.IsClass && !type.IsAbstract && type.IsSubclassOf(typeof(BusinessBase)));
|
||||
foreach (Type item in allTypes)
|
||||
{
|
||||
NAPI.Util.ConsoleOutput($"Loading Business {item.Name}");
|
||||
if (Activator.CreateInstance(item) is BusinessBase o)
|
||||
{
|
||||
if (GetBusiness(o.Id) != null)
|
||||
{
|
||||
throw new InvalidOperationException($"Double Business ID found: {o.Id} | {o.Name}");
|
||||
}
|
||||
Businesses.Add(o);
|
||||
o.Setup();
|
||||
o.Load();
|
||||
o.Update();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static T GetBusiness<T>() where T : BusinessBase
|
||||
{
|
||||
return (T)Businesses.Find(b => b.GetType() == typeof(T));
|
||||
}
|
||||
|
||||
public static BusinessBase GetBusiness(int? id)
|
||||
{
|
||||
return Businesses.Find(b => b.Id == id);
|
||||
}
|
||||
|
||||
[RemoteEvent("Business_DepositMoney")]
|
||||
public void BusinessDepositMoney(Client player, int amount)
|
||||
{
|
||||
User user = player.GetUser();
|
||||
if(user == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BusinessBase playerBusiness = GetBusiness(user.BusinessId);
|
||||
|
||||
TransactionResult result = BankManager.TransferMoney(user, playerBusiness, amount, "Überweisung");
|
||||
|
||||
/*if(result == TransactionResult.NEGATIVE_MONEY_SENT)
|
||||
{
|
||||
player.SendNotification("~r~Es können nur positive Beträge überwiesen werden");
|
||||
return;
|
||||
}
|
||||
else if(result == TransactionResult.SENDER_NOT_ENOUGH_MONEY)
|
||||
{
|
||||
player.SendNotification("~r~Du hast nicht genug Geld");
|
||||
return;
|
||||
}
|
||||
else */if(result == TransactionResult.SUCCESS)
|
||||
{
|
||||
player.TriggerEvent("business_updateMoney", playerBusiness.GetBankAccount().Balance.ToMoneyString());
|
||||
player.SendNotification("~g~Du hast erfolgreich ~s~" + amount.ToMoneyString() + " ~g~ überwiesen");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("Business_WithdrawMoney")]
|
||||
public void BusinessWithdrawMoney(Client player, int amount)
|
||||
{
|
||||
User user = player.GetUser();
|
||||
if (user == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BusinessBase playerBusiness = GetBusiness(user.BusinessId);
|
||||
|
||||
TransactionResult result = BankManager.TransferMoney(playerBusiness, user, amount, "Überweisung");
|
||||
|
||||
if (result == TransactionResult.NEGATIVE_MONEY_SENT)
|
||||
{
|
||||
player.SendNotification("~r~Es können nur positive Beträge überwiesen werden");
|
||||
return;
|
||||
}
|
||||
else if (result == TransactionResult.SENDER_NOT_ENOUGH_MONEY)
|
||||
{
|
||||
player.SendNotification("~r~Es ist nicht genug Geld auf der Businesskasse vorhanden");
|
||||
return;
|
||||
}
|
||||
else if (result == TransactionResult.SUCCESS)
|
||||
{
|
||||
player.TriggerEvent("business_updateMoney", playerBusiness.GetBankAccount().Balance.ToMoneyString());
|
||||
player.SendNotification("~g~Du hast erfolgreich ~s~" + amount.ToMoneyString() + " ~g~ überwiesen");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ using System.Text;
|
||||
using GTANetworkAPI;
|
||||
using reallife_gamemode.Model;
|
||||
using reallife_gamemode.Server.Entities;
|
||||
using reallife_gamemode.Server.Extensions;
|
||||
|
||||
/**
|
||||
* @overview Life of German Reallife - Managers LoadManager (LoadManager.cs)
|
||||
@@ -15,10 +16,6 @@ namespace reallife_gamemode.Server.Managers
|
||||
{
|
||||
public class LoadManager : Script
|
||||
{
|
||||
public static List<GotoPoint> GotoPointList = new List<GotoPoint>();
|
||||
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)]
|
||||
public void OnResourceStart()
|
||||
@@ -33,51 +30,24 @@ namespace reallife_gamemode.Server.Managers
|
||||
b.Color, b.Name, b.Alpha, b.DrawDistance, b.ShortRange, (short) b.Rotation, b.Dimension);
|
||||
}
|
||||
}
|
||||
foreach (GotoPoint g in loadData.GotoPoints)
|
||||
|
||||
foreach(ServerVehicle veh in loadData.ServerVehicles)
|
||||
{
|
||||
if (g.Active == true)
|
||||
if (!veh.Active) continue;
|
||||
|
||||
Vehicle current = veh.Spawn();
|
||||
TuningManager.ApplyTuningToServerVehicle(veh);
|
||||
|
||||
if (veh is ShopVehicle shopV)
|
||||
{
|
||||
GotoPointList.Add(g);
|
||||
}
|
||||
}
|
||||
foreach (Saves.SavedVehicle v in loadData.Vehicles)
|
||||
{
|
||||
if (v.Active == true)
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
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),
|
||||
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);
|
||||
string displayName = NAPI.Vehicle.GetVehicleDisplayName(shopV.Model);
|
||||
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);
|
||||
current.SetData("shopVehicleId", v.Id);
|
||||
var tLabel = NAPI.TextLabel.CreateTextLabel(displayName + " | " + shopV.Price.ToMoneyString(), new Vector3(shopV.PositionX, shopV.PositionY, shopV.PositionZ + 1.5), 10, 1, 0, new Color(255, 255, 255), false);
|
||||
tLabel.AttachTo(current, "chassis", new Vector3(0, 0, 1.5), new Vector3(0, 0, 0));
|
||||
}
|
||||
}
|
||||
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,6 +1,9 @@
|
||||
using GTANetworkAPI;
|
||||
using reallife_gamemode.Model;
|
||||
using reallife_gamemode.Server.Entities;
|
||||
using reallife_gamemode.Server.Extensions;
|
||||
using reallife_gamemode.Server.Managers;
|
||||
using reallife_gamemode.Server.Saves;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -29,9 +32,9 @@ namespace reallife_gamemode.Server.Events
|
||||
|
||||
NAPI.Blip.CreateBlip(uint.Parse(blipSprite), new Vector3(x,y,z), scale, color, name, alpha, drawDistance, shortRange, short.Parse(blipRotation), dimension);
|
||||
|
||||
using (var saveData = new Model.DatabaseContext())
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new Server.Saves.SavedBlip
|
||||
var dataSet = new SavedBlip
|
||||
{
|
||||
Sprite = sprite,
|
||||
PositionX = x,
|
||||
@@ -52,12 +55,12 @@ namespace reallife_gamemode.Server.Events
|
||||
}
|
||||
}
|
||||
|
||||
public static void SaveVehicleData(VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading,
|
||||
string vehicleNumberPlate, byte vehiclePrimaryColor, byte vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, byte vehicleDimension)
|
||||
public static Vehicle SaveVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading,
|
||||
string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked)
|
||||
{
|
||||
using (var saveData = new Model.DatabaseContext())
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new Server.Saves.SavedVehicle
|
||||
var dataSet = new SavedVehicle
|
||||
{
|
||||
Model = vehicleModel,
|
||||
PositionX = vehiclePosition.X,
|
||||
@@ -68,20 +71,21 @@ namespace reallife_gamemode.Server.Events
|
||||
PrimaryColor = vehiclePrimaryColor,
|
||||
SecondaryColor = vehicleSecondaryColor,
|
||||
Locked = vehicleLocked,
|
||||
Engine = vehicleEngine,
|
||||
Dimension = vehicleDimension,
|
||||
Active = true
|
||||
};
|
||||
saveData.Vehicles.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
|
||||
return dataSet.Spawn(veh);
|
||||
}
|
||||
}
|
||||
public static void SaveFactionVehicleData(VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading,
|
||||
string vehicleNumberPlate, byte vehiclePrimaryColor, byte vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, byte vehicleDimension, int? factionId)
|
||||
public static Vehicle SaveFactionVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading,
|
||||
string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int? factionId)
|
||||
{
|
||||
using (var saveData = new Model.DatabaseContext())
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new Entities.FactionVehicle
|
||||
Console.WriteLine("Adding Faction Vehicle Secondary Color: " + vehicleSecondaryColor);
|
||||
var dataSet = new FactionVehicle
|
||||
{
|
||||
Model = vehicleModel,
|
||||
FactionId = factionId,
|
||||
@@ -93,23 +97,22 @@ namespace reallife_gamemode.Server.Events
|
||||
PrimaryColor = vehiclePrimaryColor,
|
||||
SecondaryColor = vehicleSecondaryColor,
|
||||
Locked = vehicleLocked,
|
||||
Engine = vehicleEngine,
|
||||
Dimension = vehicleDimension,
|
||||
Active = true
|
||||
};
|
||||
saveData.FactionVehicles.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
|
||||
return dataSet.Spawn(veh);
|
||||
}
|
||||
}
|
||||
public static void SaveShopVehicleData(VehicleHash vehicleModel, string vehicleModelName, Vector3 vehiclePosition, float vehicleHeading,
|
||||
string vehicleNumberPlate, byte vehiclePrimaryColor, byte vehicleSecondaryColor, byte vehicleDimension, int? factionId)
|
||||
public static Vehicle SaveShopVehicleData(Vehicle veh, VehicleHash vehicleModel, string vehicleModelName, Vector3 vehiclePosition, float vehicleHeading,
|
||||
string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor)
|
||||
{
|
||||
using (var saveData = new Model.DatabaseContext())
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new Entities.ShopVehicle
|
||||
var dataSet = new ShopVehicle
|
||||
{
|
||||
Model = vehicleModel,
|
||||
ModelName = vehicleModelName,
|
||||
PositionX = vehiclePosition.X,
|
||||
PositionY = vehiclePosition.Y,
|
||||
PositionZ = vehiclePosition.Z,
|
||||
@@ -117,11 +120,12 @@ namespace reallife_gamemode.Server.Events
|
||||
NumberPlate = vehicleNumberPlate,
|
||||
PrimaryColor = vehiclePrimaryColor,
|
||||
SecondaryColor = vehicleSecondaryColor,
|
||||
Dimension = vehicleDimension,
|
||||
Active = true
|
||||
};
|
||||
saveData.ShopVehicles.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
|
||||
return dataSet.Spawn(veh);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -139,44 +143,31 @@ namespace reallife_gamemode.Server.Events
|
||||
};
|
||||
saveData.GotoPoints.Add(dataSet);
|
||||
saveData.SaveChanges();
|
||||
LoadManager.GotoPointList.Add(dataSet);
|
||||
}
|
||||
}
|
||||
public static void SaveAllOnSave()
|
||||
{
|
||||
// Alle Fahrzeuge
|
||||
using (var saveAll = new Model.DatabaseContext())
|
||||
{
|
||||
//TODO Fahrzeugschäden und Tankfüllstände
|
||||
//User Vehicle
|
||||
foreach (Vehicle v in LoadManager.UserVehicleList)
|
||||
foreach(ServerVehicle veh in saveAll.ServerVehicles)
|
||||
{
|
||||
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;
|
||||
}
|
||||
Vehicle v = VehicleManager.GetVehicleFromServerVehicle(veh);
|
||||
|
||||
//Faction Vehicle
|
||||
foreach (Vehicle v in LoadManager.FactionVehicleList)
|
||||
{
|
||||
int factionId = v.GetData("factionId");
|
||||
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;
|
||||
veh.PositionX = v.Position.X;
|
||||
veh.PositionY = v.Position.Y;
|
||||
veh.PositionZ = v.Position.Z;
|
||||
veh.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;
|
||||
Vector3 pos = player.Position;
|
||||
User user = player.GetUser(saveAll);
|
||||
user.PositionX = pos.X;
|
||||
user.PositionY = pos.Y;
|
||||
user.PositionZ = pos.Z;
|
||||
}
|
||||
|
||||
saveAll.SaveChanges();
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
using GTANetworkAPI;
|
||||
using reallife_gamemode.Model;
|
||||
using reallife_gamemode.Server.Entities;
|
||||
using reallife_gamemode.Server.Extensions;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace reallife_gamemode.Server.Managers
|
||||
{
|
||||
@@ -19,7 +23,12 @@ namespace reallife_gamemode.Server.Managers
|
||||
{
|
||||
if(c.IsInVehicle)
|
||||
{
|
||||
c.TriggerEvent("showTuningInfo", c.GetData("duty"));
|
||||
Vehicle v = c.Vehicle;
|
||||
if(v.GetServerVehicle() is FactionVehicle fV && fV.GetFaction().StateOwned)
|
||||
{
|
||||
return;
|
||||
}
|
||||
c.TriggerEvent("showTuningInfo");
|
||||
}
|
||||
};
|
||||
|
||||
@@ -31,6 +40,20 @@ namespace reallife_gamemode.Server.Managers
|
||||
tuningGarages.Add(colShape);
|
||||
}
|
||||
|
||||
public static void ApplyTuningToServerVehicle(ServerVehicle sVeh)
|
||||
{
|
||||
Vehicle veh = VehicleManager.GetVehicleFromServerVehicle(sVeh);
|
||||
if (veh == null) return;
|
||||
|
||||
using(var dbContext = new DatabaseContext())
|
||||
{
|
||||
foreach(VehicleMod vMod in dbContext.VehicleMods.ToList().FindAll(vM => vM.ServerVehicleId == sVeh.Id))
|
||||
{
|
||||
veh.SetMod(vMod.Slot, vMod.ModId - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("startPlayerTuning")]
|
||||
public void StartPlayerTuning(Client player)
|
||||
{
|
||||
@@ -44,6 +67,42 @@ namespace reallife_gamemode.Server.Managers
|
||||
{
|
||||
if (index == 0) index--;
|
||||
player.Vehicle.SetMod(slot, index - 1);
|
||||
|
||||
ServerVehicle sV = player.Vehicle.GetServerVehicle();
|
||||
if (sV == null) return;
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
VehicleMod vMod = dbContext.VehicleMods.FirstOrDefault(m => m.ServerVehicleId == sV.Id && m.Slot == slot);
|
||||
if(vMod == null && index != -1)
|
||||
{
|
||||
vMod = new VehicleMod
|
||||
{
|
||||
ServerVehicleId = sV.Id,
|
||||
Slot = slot,
|
||||
ModId = index
|
||||
};
|
||||
dbContext.VehicleMods.Add(vMod);
|
||||
}
|
||||
else if(vMod != null && index == -1)
|
||||
{
|
||||
dbContext.VehicleMods.Remove(vMod);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (vMod == null)
|
||||
{
|
||||
vMod = new VehicleMod
|
||||
{
|
||||
ServerVehicleId = sV.Id,
|
||||
Slot = slot
|
||||
};
|
||||
dbContext.VehicleMods.Add(vMod);
|
||||
}
|
||||
vMod.ModId = index;
|
||||
}
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
70
Server/Managers/VehicleManager.cs
Normal file
70
Server/Managers/VehicleManager.cs
Normal file
@@ -0,0 +1,70 @@
|
||||
using GTANetworkAPI;
|
||||
using reallife_gamemode.Server.Entities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using reallife_gamemode.Model;
|
||||
|
||||
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;
|
||||
}
|
||||
internal static void DeleteVehicle(Vehicle veh)
|
||||
{
|
||||
ServerVehicle sVeh;
|
||||
if ((sVeh = GetServerVehicleFromVehicle(veh)) != null)
|
||||
{
|
||||
_serverVehicles.Remove(sVeh.Id);
|
||||
}
|
||||
|
||||
veh.Delete();
|
||||
}
|
||||
|
||||
public static Vehicle GetVehicleFromHandle(NetHandle handle)
|
||||
{
|
||||
return NAPI.Pools.GetAllVehicles().Find(v => v.Handle == handle);
|
||||
}
|
||||
|
||||
public static Vehicle GetVehicleFromServerVehicle(ServerVehicle serverVehicle)
|
||||
{
|
||||
if(!_serverVehicles.ContainsKey(serverVehicle.Id))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return GetVehicleFromHandle(_serverVehicles[serverVehicle.Id]);
|
||||
}
|
||||
|
||||
public static ServerVehicle GetServerVehicleFromVehicle(Vehicle veh)
|
||||
{
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
foreach(KeyValuePair<int, NetHandle> pair in _serverVehicles)
|
||||
{
|
||||
if (pair.Value == veh.Handle)
|
||||
{
|
||||
return dbContext.ServerVehicles.Find(pair.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ using System.Text;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using GTANetworkAPI;
|
||||
using reallife_gamemode.Server.Entities;
|
||||
|
||||
/**
|
||||
* @overview Life of German Reallife - Saves SavedVehicle.cs
|
||||
@@ -13,24 +14,6 @@ using GTANetworkAPI;
|
||||
|
||||
namespace reallife_gamemode.Server.Saves
|
||||
{
|
||||
public class SavedVehicle
|
||||
{
|
||||
[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; }
|
||||
}
|
||||
public class SavedVehicle : ServerVehicle
|
||||
{ }
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace reallife_gamemode.Server.Util
|
||||
NAPI.Util.ConsoleOutput("Initializing database...");
|
||||
using(var dbContext = new DatabaseContext())
|
||||
{
|
||||
dbContext.Users.First();
|
||||
dbContext.Users.FirstOrDefault();
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user