Add VehicleShop, SaveManager, Edit LoadManager amm...

This commit is contained in:
VegaZ
2018-10-10 21:06:20 +02:00
parent e0bc6ef9aa
commit 0227e223c2
7 changed files with 250 additions and 28 deletions

View File

@@ -60,5 +60,6 @@ namespace reallife_gamemode.Model
public DbSet<Server.Saves.SavedPickup> Pickups { get; set; }
public DbSet<Server.Saves.SavedTextLabel> TextLabels { get; set; }
public DbSet<Server.Saves.SavedVehicle> Vehicles { get; set; }
public DbSet<Server.Entities.ShopVehicle> ShopVehicles { get; set; }
}
}

View File

@@ -587,7 +587,7 @@ namespace reallife_gamemode.Server.Commands
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)
{
switch (typ)
@@ -595,6 +595,15 @@ namespace reallife_gamemode.Server.Commands
case "Blip":
player.TriggerEvent("saveBlip");
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":
if (player.IsInVehicle)
{
@@ -606,18 +615,21 @@ namespace reallife_gamemode.Server.Commands
else
{
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);
vehicle.SetData("factionId", player.GetUser().FactionId);
LoadManager.FactionVehicleList.Add(vehicle);
}
}
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
break;
case "Vehicle":
case "SVehicle":
if (player.IsInVehicle)
{
Vehicle vehicle = player.Vehicle;
SaveData.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));
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);
}
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
break;
@@ -734,6 +746,7 @@ 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
@@ -751,10 +764,10 @@ namespace reallife_gamemode.Server.Commands
Engine = playerVehicle.EngineStatus,
Dimension = Convert.ToByte(playerVehicle.Dimension),
};
playerVehicle.SetData("ownerId",player.GetUser().Id);
saveVehicle.UserVehicles.Add(dataSet);
saveVehicle.SaveChanges();
}
}
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
}
@@ -1075,7 +1088,7 @@ namespace reallife_gamemode.Server.Commands
player.SendChatMessage("IP von " + NAPI.Player.GetPlayerName(target) + ": " + target.Address);
}
//TEST COMMAND
//TODO TEST COMMAND
[Command("myvehicles")]
public void CmdAdminMyVehicles(Client player)
{
@@ -1113,6 +1126,40 @@ namespace reallife_gamemode.Server.Commands
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")]

View File

@@ -0,0 +1,39 @@
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; }
public VehicleHash Model { get; set; }
[StringLength(32)]
public string ModelName { get; set; }
public float Price { get; set; }
public float PositionX { get; set; }
public float PositionY { get; set; }
public float PositionZ { get; set; }
public float Heading { get; set; }
[StringLength(8)]
public string NumberPlate { get; set; }
public byte Alpha { get; set; }
public byte PrimaryColor { get; set; }
public byte SecondaryColor { get; set; }
public byte Dimension { get; set; }
public bool Active { get; set; }
}
}

View File

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

View File

@@ -0,0 +1,27 @@
using GTANetworkAPI;
using Microsoft.EntityFrameworkCore;
using reallife_gamemode.Model;
using reallife_gamemode.Server.Entities;
using reallife_gamemode.Server.Managers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/**
* @overview Life of German Reallife - Vehicle Extension (VehicleExtension.cs)
* @author hydrant
* @copyright (c) 2008 - 2018 Life of German
*/
namespace reallife_gamemode.Server.Extensions
{
public static class VehicleExtension
{
public static bool IsFactionVehicle(Vehicle vehicle)
{
bool containsVehicle = LoadManager.FactionVehicleList.Contains(vehicle);
return containsVehicle;
}
}
}

View File

@@ -15,6 +15,10 @@ namespace reallife_gamemode.Server.Managers
{
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)]
public void OnResourceStart()
{
@@ -40,9 +44,30 @@ namespace reallife_gamemode.Server.Managers
{
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);
}
current.SetData("factionId", v.FactionId);
FactionVehicleList.Add(current);
}
}
foreach (ShopVehicle v in loadData.ShopVehicles)
{
if (v.Active == true)
{
Vehicle current = NAPI.Vehicle.CreateVehicle((uint)v.Model, new Vector3(v.PositionX, v.PositionY, v.PositionZ), v.Heading, (v.PrimaryColor),
v.SecondaryColor, v.NumberPlate, v.Alpha, false, false, v.Dimension);
ShopVehicleList.Add(current);
current.Health = -4000;
var tLabel = NAPI.TextLabel.CreateTextLabel(v.ModelName + " | " + v.Price + "~g~$", new Vector3(v.PositionX, v.PositionY, v.PositionZ + 1.5), 10, 1, 0, new Color(255, 255, 255), false, v.Dimension);
current.SetData("shopVehicleId", v.Id);
}
}
foreach (UserVehicle v in loadData.UserVehicles)
{
Vehicle current = NAPI.Vehicle.CreateVehicle((uint)v.Model, new Vector3(v.PositionX, v.PositionY, v.PositionZ), v.Heading, (v.PrimaryColor),
v.SecondaryColor, v.NumberPlate, v.Alpha, false, false, v.Dimension);
current.SetData("ownerId", v.UserId);
UserVehicleList.Add(current);
}
}
}

View File

@@ -1,11 +1,14 @@
using GTANetworkAPI;
using reallife_gamemode.Server.Extensions;
using reallife_gamemode.Server.Managers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace reallife_gamemode.Server.Events
{
public class SaveData : Script
public class SaveManager : Script
{
[RemoteEvent("OnSaveBlipData")]
public void OnSaveBlipData(Client player, string blipSprite, string blipName, string blipScale, string blipColor,
@@ -98,5 +101,56 @@ namespace reallife_gamemode.Server.Events
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())
{
//Alle 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;
}
//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();
}
}
}
}