[+] Add SchoolVehicle Class for Driving and Flight School

[*] Fixed and Improved Flight School
This commit is contained in:
Lukas Moungos
2019-11-01 18:24:02 +01:00
parent 1ec473a2d1
commit a211e23d37
12 changed files with 1550 additions and 54 deletions

View File

@@ -0,0 +1,15 @@
using Microsoft.EntityFrameworkCore;
using ReallifeGamemode.Database.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ReallifeGamemode.Database.Models;
namespace ReallifeGamemode.Database.Entities
{
public class SchoolVehicle : ServerVehicle
{
public int SchoolId { get; set; }
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,22 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace ReallifeGamemode.Database.Migrations
{
public partial class SchoolId : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "SchoolId",
table: "ServerVehicles",
nullable: true);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "SchoolId",
table: "ServerVehicles");
}
}
}

View File

@@ -1118,6 +1118,17 @@ namespace ReallifeGamemode.Database.Migrations
b.HasDiscriminator().HasValue("SavedVehicle");
});
modelBuilder.Entity("ReallifeGamemode.Database.Entities.SchoolVehicle", b =>
{
b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle");
b.Property<int>("SchoolId");
b.ToTable("SchoolVehicle");
b.HasDiscriminator().HasValue("SchoolVehicle");
});
modelBuilder.Entity("ReallifeGamemode.Database.Entities.ShopVehicle", b =>
{
b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle");

View File

@@ -118,5 +118,9 @@ namespace ReallifeGamemode.Database.Models
// Bus Routes
public DbSet<Entities.BusRoute> BusRoutes { get; set; }
public DbSet<Entities.BusRoutePoint> BusRoutesPoints { get; set; }
//Driving/Bike/Flight School
public DbSet<Entities.SchoolVehicle> SchoolVehicles { get; set; }
}
}

View File

@@ -1891,6 +1891,32 @@ namespace ReallifeGamemode.Server.Commands
else ChatService.SendMessage(player, "~m~Du sitzt in keinem Fahrzeug!");
break;
case "schoolvehicle":
if (player.IsInVehicle)
{
if (option1 == null)
{
ChatService.SendMessage(player, "~m~Benutzung: ~s~/save schoolvehicle [FahrschuleID]");
return;
}
if (!int.TryParse(option1, out int drivingSchoolId))
{
ChatService.SendMessage(player, "~m~Benutzung: ~s~/save schoolvehicle [FahrschuleID]");
return;
}
if(drivingSchoolId > 2 || drivingSchoolId < 0)
{
ChatService.SendMessage(player, "~m~Diese Fahrschule existiert nicht.");
return;
}
Vehicle vehicle = player.Vehicle;
vehicle = SaveManager.SaveSchoolVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
vehicle.PrimaryColor, vehicle.SecondaryColor, vehicle.Locked, vehicle.EngineStatus, drivingSchoolId);
player.SendNotification("Fahrschulauto ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true);
player.SetIntoVehicle(vehicle, -1);
}
break;
case "location":
if(option1 == null || option1.Length < 0)
{

View File

@@ -68,7 +68,7 @@ namespace ReallifeGamemode.Server.DrivingSchool
User user = client.GetUser();
if (user.FlyingLicensePlane)
return;
client.SetData("ActiveSchool", 1);
client.TriggerEvent("renderTextOnScreen", "Du hast die Flugscheinprüfung gestartet. Steige nun in eines der Flugzeuge ein.");
client.TriggerEvent("waitPlayerEntersVehicle1");
}
@@ -93,55 +93,72 @@ namespace ReallifeGamemode.Server.DrivingSchool
[RemoteEvent("planeSchoolEvent")]
public void planeSchoolEvent(Client user, int checkpoint)
{
if(checkpoint == 0)
switch (checkpoint)
{
case 0:
user.TriggerEvent("renderTextOnScreen", "Achten Sie darauf dass Sie mittig durch jeder Markierung fahren/fliegen.");
}
else if(checkpoint == 1)
{
break;
case 1:
user.TriggerEvent("renderTextOnScreen", "Für die Flugprüfung haben Sie 15min Zeit.");
}
else if(checkpoint == 2)
{
break;
case 2:
user.TriggerEvent("renderTextOnScreen", "Wenn Sie aus dem Flugzeug aussteigen sind Sie aus der Prüfung durchgefallen.");
}
else if(checkpoint == 3)
{
break;
case 3:
user.TriggerEvent("renderTextOnScreen", "Achten Sie darauf dass Sie nicht stark abbremsen in der Luft sonst geht der Motor aus.");
}
else if (checkpoint == 4)
{
break;
case 4:
user.TriggerEvent("renderTextOnScreen", "Falls Sie eine Landung durchführen fliegen Sie mit max. 150km/h.");
}
else if (checkpoint == 5)
{
user.TriggerEvent("renderTextOnScreen", "Folgen Sie den Gelben Punkte auf der Karte. Der Pfeil auf den Punkt zeigt ihnen ob Sie über oder unter dem Punkt seid.");
}
else if(checkpoint == 7)
{
break;
case 5:
user.TriggerEvent("renderTextOnScreen", "Der Pfeil auf dem gelben Punkt zeigt ihnen ob Sie über oder unter dem Punkt seid.");
break;
case 6:
user.TriggerEvent("renderTextOnScreen", "Beschleunige nun auf mind. 80km/h um abzuheben.");
break;
case 13:
user.TriggerEvent("renderTextOnScreen", "Beschleunige nun auf mind. 80km/h um abzuheben.");
break;
case 7:
user.TriggerEvent("renderTextOnScreen", "Sobald Sie sicher in der Luft sind drücken Sie 'G' um ihr Fahrwerk einzufahren.");
}
else if(checkpoint == 6 || checkpoint ==13)
{
user.TriggerEvent("renderTextOnScreen", "Beschleunige nun auf mind. 100km/h um abzuheben.");
}
else if(checkpoint == 10 || checkpoint == 14)
{
break;
case 10:
user.TriggerEvent("renderTextOnScreen", "Setze zum landeflug an. Drücke 'G' um ihr Fahrwerk auszufahren.");
}
else if (checkpoint == 15)
{
break;
case 14:
user.TriggerEvent("renderTextOnScreen", "Setze zum landeflug an. Drücke 'G' um ihr Fahrwerk auszufahren.");
break;
case 15:
Vehicle veh = user.Vehicle;
user.WarpOutOfVehicle();
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(veh);
VehicleStreaming.SetEngineState(veh, false);
VehicleStreaming.SetLockStatus(veh, false);
NAPI.Entity.SetEntityVelocity(veh.Handle, new Vector3(0,0,0));
veh.Position = sVeh.Position;
veh.Rotation = new Vector3(0, 0, sVeh.Heading);
user.TriggerEvent("renderTextOnScreen", "Du hast deinen Flugschein bestanden!");
User spieler = user.GetUser();
using (var dbContext = new DatabaseContext())
{
User drivingUser = dbContext.Users.Where(u => u.Id == spieler.Id).FirstOrDefault();
User drivingUser = user.GetUser(dbContext);
drivingUser.FlyingLicensePlane = true;
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(user.Vehicle);
ServerVehicleExtensions.Spawn(sVeh, user.Vehicle);
dbContext.SaveChanges();
}
user.ResetData("ActiveSchool");
user.Position = new Vector3(-1083.96, -2476.96, 13.07);
break;
}
}

View File

@@ -16,8 +16,6 @@ namespace ReallifeGamemode.Server.Events
{
if (seat != -1)
return;
Console.WriteLine("inVEhicle");
if (vehicle.GetServerVehicle() is FactionVehicle veh)
{
if (client.GetUser().FactionId != null && (veh.FactionId == client.GetUser().FactionId) && (veh.Model == VehicleHash.Burrito3) && vehicle.HasData("weaponDeal") && vehicle.GetData("weaponDeal") == true)

View File

@@ -36,6 +36,21 @@ namespace ReallifeGamemode.Server.Events
return;
}
}
if (vehicle.GetServerVehicle() is SchoolVehicle sVeh)
{
if (!player.HasData("ActiveSchool"))
{
player.StopAnimation();
player.SendNotification("~r~Du darfst dieses Fahrzeug nicht benutzen!", true);
return;
}
if (sVeh.SchoolId != player.GetData("ActiveSchool"))
{
player.StopAnimation();
player.SendNotification("~r~Du darfst dieses Fahrzeug nicht benutzen!", true);
return;
}
}
}
}
}

View File

@@ -65,7 +65,7 @@ namespace ReallifeGamemode.Server.Extensions
{
numberplate = $"J{jV.JobId} " + numberplate;
}
NAPI.Vehicle.SetVehicleNumberPlate(newVeh, numberplate);
veh.NumberPlate = numberplate;
return newVeh;

View File

@@ -104,6 +104,34 @@ namespace ReallifeGamemode.Server.Managers
}
}
public static Vehicle SaveSchoolVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading,
string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int schoolId)
{
using (var saveData = new DatabaseContext())
{
var dataSet = new SchoolVehicle
{
Model = vehicleModel,
SchoolId = schoolId,
PositionX = vehiclePosition.X,
PositionY = vehiclePosition.Y,
PositionZ = vehiclePosition.Z,
Heading = vehicleHeading,
NumberPlate = vehicleNumberPlate,
PrimaryColor = vehiclePrimaryColor,
SecondaryColor = vehicleSecondaryColor,
Locked = vehicleLocked,
Active = true
};
saveData.SchoolVehicles.Add(dataSet);
saveData.SaveChanges();
return dataSet.Spawn(veh);
}
}
public static Vehicle SaveFactionVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading,
string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int factionId, int livery)
{

View File

@@ -789,7 +789,11 @@ namespace ReallifeGamemode.Server.Managers
public static Vehicle GetVehicleFromId(int id)
{
return NAPI.Pools.GetAllVehicles().Find(v => v.Handle.Value == id);
using(var dbcontext = new DatabaseContext())
{
ServerVehicle sVeh = dbcontext.ServerVehicles.Where(sV => sV.Id == id).FirstOrDefault();
return GetVehicleFromServerVehicle(sVeh);
}
}
public static Vehicle GetVehicleFromServerVehicle(ServerVehicle serverVehicle)
@@ -833,7 +837,7 @@ namespace ReallifeGamemode.Server.Managers
}
[ServerEvent(Event.VehicleDeath)]
public void VehicleManagerVehicleDeath(Vehicle vehicle)
public static void VehicleManagerVehicleDeath(Vehicle vehicle)
{
ServerVehicle serverVehicle = GetServerVehicleFromVehicle(vehicle);