Adapted Save- and LoadManager to new Vehicle System

This commit is contained in:
hydrant
2018-11-29 20:04:40 +01:00
parent b83c071e45
commit fab3f05575
8 changed files with 114 additions and 66 deletions

View File

@@ -255,13 +255,16 @@ namespace reallife_gamemode.Server.Commands
return;
}
var gotoString = "";
foreach (GotoPoint point in LoadManager.GotoPointList)
using(var dbContext = new DatabaseContext())
{
foreach (GotoPoint point in dbContext.GotoPoints)
{
if (point.Active)
{
gotoString += point.Description + ", ";
}
}
}
player.SendChatMessage(gotoString);
}
@@ -787,7 +790,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)
{
@@ -810,7 +813,7 @@ namespace reallife_gamemode.Server.Commands
return;
}
playerVeh.Delete();
VehicleManager.DeleteVehicle(playerVeh);
}
[Command("vcolor", "~m~Benutzung: ~s~/vcolor [Farb-ID1] [Farb-ID2]")]
@@ -1297,17 +1300,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;
@@ -1315,11 +1319,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!");
@@ -1328,10 +1333,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;
@@ -1795,7 +1801,7 @@ namespace reallife_gamemode.Server.Commands
}
}
[Command("givebusinessbankbalance", "~m~Benutzung: ~s~/givebusinessbankbalance [Business ID] [Menge]")]
[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)
@@ -1811,7 +1817,7 @@ namespace reallife_gamemode.Server.Commands
return;
}
BankManager.TransferMoney(null, business, amount, "Admin");
BankManager.SetMoney(player, business, amount, "Admin");
}
#endregion
@@ -1834,7 +1840,6 @@ 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
@@ -1846,12 +1851,11 @@ namespace reallife_gamemode.Server.Commands
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,
Active = true
};
playerVehicle.SetData("ownerId",player.GetUser().Id);
saveVehicle.UserVehicles.Add(dataSet);
saveVehicle.SaveChanges();
}

View File

@@ -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;
/**
@@ -20,5 +22,13 @@ namespace reallife_gamemode.Server.Entities
[ForeignKey("Faction")]
public int? FactionId { get; set; }
public Faction Faction { get; set; }
public Faction GetFaction()
{
using (var context = new DatabaseContext())
{
return context.Factions.FirstOrDefault(f => f.Id == FactionId);
}
}
}
}

View File

@@ -30,10 +30,17 @@ namespace reallife_gamemode.Server.Entities
[NotMapped]
public Vector3 Position => new Vector3(PositionX, PositionY, PositionZ);
public Vehicle Spawn()
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;
}
}

View File

@@ -0,0 +1,17 @@
using GTANetworkAPI;
using reallife_gamemode.Server.Entities;
using reallife_gamemode.Server.Managers;
using System;
using System.Collections.Generic;
using System.Text;
namespace reallife_gamemode.Server.Extensions
{
public static class VehicleExtension
{
public static ServerVehicle GetServerVehicle(this Vehicle veh)
{
return VehicleManager.GetServerVehicleFromVehicle(veh);
}
}
}

View File

@@ -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,13 +30,6 @@ 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)
{
if (g.Active == true)
{
GotoPointList.Add(g);
}
}
foreach(ServerVehicle veh in loadData.ServerVehicles)
{
@@ -52,24 +42,13 @@ namespace reallife_gamemode.Server.Managers
NAPI.Vehicle.CreateVehicle((uint)savedV.Model, new Vector3(savedV.PositionX, savedV.PositionY, savedV.PositionZ), savedV.Heading, savedV.PrimaryColor,
savedV.SecondaryColor, savedV.NumberPlate, 255, savedV.Locked);
}
if (veh is FactionVehicle factionV)
{
current.SetData("factionId", factionV.FactionId);
FactionVehicleList.Add(current);
}
if (veh is ShopVehicle shopV)
else if (veh is ShopVehicle shopV)
{
string displayName = NAPI.Vehicle.GetVehicleDisplayName(shopV.Model);
ShopVehicleList.Add(current);
NAPI.Vehicle.SetVehicleEngineHealth(current, 0);
var tLabel = NAPI.TextLabel.CreateTextLabel(displayName + " | " + shopV.Price + "~g~$", new Vector3(shopV.PositionX, shopV.PositionY, shopV.PositionZ + 1.5), 10, 1, 0, new Color(255, 255, 255), false);
current.SetData("shopVehicleId", shopV.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));
}
if (veh is UserVehicle userV)
{
UserVehicleList.Add(current);
}
}

View File

@@ -1,7 +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;
@@ -30,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,
@@ -53,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,
@@ -71,16 +73,19 @@ namespace reallife_gamemode.Server.Events
Locked = vehicleLocked,
Active = true
};
saveData.ServerVehicles.Add(dataSet);
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,
@@ -94,16 +99,18 @@ namespace reallife_gamemode.Server.Events
Locked = vehicleLocked,
Active = true
};
saveData.ServerVehicles.Add(dataSet);
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,
PositionX = vehiclePosition.X,
@@ -115,8 +122,10 @@ namespace reallife_gamemode.Server.Events
SecondaryColor = vehicleSecondaryColor,
Active = true
};
saveData.ServerVehicles.Add(dataSet);
saveData.ShopVehicles.Add(dataSet);
saveData.SaveChanges();
return dataSet.Spawn(veh);
}
}

View File

@@ -1,4 +1,6 @@
using GTANetworkAPI;
using reallife_gamemode.Server.Entities;
using reallife_gamemode.Server.Extensions;
using System.Collections.Generic;
namespace reallife_gamemode.Server.Managers
@@ -19,7 +21,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");
}
};

View File

@@ -25,6 +25,21 @@ namespace reallife_gamemode.Server.Managers
_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)
{
@@ -34,7 +49,7 @@ namespace reallife_gamemode.Server.Managers
return null;
}
return NAPI.Pools.GetAllVehicles().Find(v => v.Handle == _serverVehicles[serverVehicle.Id]);
return GetVehicleFromHandle(_serverVehicles[serverVehicle.Id]);
}
public static ServerVehicle GetServerVehicleFromVehicle(Vehicle veh)