[+] 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"); 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 => modelBuilder.Entity("ReallifeGamemode.Database.Entities.ShopVehicle", b =>
{ {
b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle");

View File

@@ -118,5 +118,9 @@ namespace ReallifeGamemode.Database.Models
// Bus Routes // Bus Routes
public DbSet<Entities.BusRoute> BusRoutes { get; set; } public DbSet<Entities.BusRoute> BusRoutes { get; set; }
public DbSet<Entities.BusRoutePoint> BusRoutesPoints { 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!"); else ChatService.SendMessage(player, "~m~Du sitzt in keinem Fahrzeug!");
break; 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": case "location":
if(option1 == null || option1.Length < 0) if(option1 == null || option1.Length < 0)
{ {

View File

@@ -68,7 +68,7 @@ namespace ReallifeGamemode.Server.DrivingSchool
User user = client.GetUser(); User user = client.GetUser();
if (user.FlyingLicensePlane) if (user.FlyingLicensePlane)
return; return;
client.SetData("ActiveSchool", 1);
client.TriggerEvent("renderTextOnScreen", "Du hast die Flugscheinprüfung gestartet. Steige nun in eines der Flugzeuge ein."); client.TriggerEvent("renderTextOnScreen", "Du hast die Flugscheinprüfung gestartet. Steige nun in eines der Flugzeuge ein.");
client.TriggerEvent("waitPlayerEntersVehicle1"); client.TriggerEvent("waitPlayerEntersVehicle1");
} }
@@ -93,56 +93,73 @@ namespace ReallifeGamemode.Server.DrivingSchool
[RemoteEvent("planeSchoolEvent")] [RemoteEvent("planeSchoolEvent")]
public void planeSchoolEvent(Client user, int checkpoint) public void planeSchoolEvent(Client user, int checkpoint)
{ {
if(checkpoint == 0) switch (checkpoint)
{ {
user.TriggerEvent("renderTextOnScreen", "Achten Sie darauf dass Sie mittig durch jeder Markierung fahren/fliegen."); case 0:
user.TriggerEvent("renderTextOnScreen", "Achten Sie darauf dass Sie mittig durch jeder Markierung fahren/fliegen.");
break;
case 1:
user.TriggerEvent("renderTextOnScreen", "Für die Flugprüfung haben Sie 15min Zeit.");
break;
case 2:
user.TriggerEvent("renderTextOnScreen", "Wenn Sie aus dem Flugzeug aussteigen sind Sie aus der Prüfung durchgefallen.");
break;
case 3:
user.TriggerEvent("renderTextOnScreen", "Achten Sie darauf dass Sie nicht stark abbremsen in der Luft sonst geht der Motor aus.");
break;
case 4:
user.TriggerEvent("renderTextOnScreen", "Falls Sie eine Landung durchführen fliegen Sie mit max. 150km/h.");
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.");
break;
case 10:
user.TriggerEvent("renderTextOnScreen", "Setze zum landeflug an. Drücke 'G' um ihr Fahrwerk auszufahren.");
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!");
using (var dbContext = new DatabaseContext())
{
User drivingUser = user.GetUser(dbContext);
drivingUser.FlyingLicensePlane = true;
dbContext.SaveChanges();
}
user.ResetData("ActiveSchool");
user.Position = new Vector3(-1083.96, -2476.96, 13.07);
break;
} }
else if(checkpoint == 1)
{
user.TriggerEvent("renderTextOnScreen", "Für die Flugprüfung haben Sie 15min Zeit.");
}
else if(checkpoint == 2)
{
user.TriggerEvent("renderTextOnScreen", "Wenn Sie aus dem Flugzeug aussteigen sind Sie aus der Prüfung durchgefallen.");
}
else if(checkpoint == 3)
{
user.TriggerEvent("renderTextOnScreen", "Achten Sie darauf dass Sie nicht stark abbremsen in der Luft sonst geht der Motor aus.");
}
else if (checkpoint == 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)
{
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)
{
user.TriggerEvent("renderTextOnScreen", "Setze zum landeflug an. Drücke 'G' um ihr Fahrwerk auszufahren.");
}
else if (checkpoint == 15)
{
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();
drivingUser.FlyingLicensePlane = true;
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(user.Vehicle);
ServerVehicleExtensions.Spawn(sVeh, user.Vehicle);
dbContext.SaveChanges();
}
user.Position = new Vector3(-1083.96, -2476.96, 13.07);
}
} }

View File

@@ -16,8 +16,6 @@ namespace ReallifeGamemode.Server.Events
{ {
if (seat != -1) if (seat != -1)
return; return;
Console.WriteLine("inVEhicle");
if (vehicle.GetServerVehicle() is FactionVehicle veh) 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) 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; 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; numberplate = $"J{jV.JobId} " + numberplate;
} }
NAPI.Vehicle.SetVehicleNumberPlate(newVeh, numberplate);
veh.NumberPlate = numberplate; veh.NumberPlate = numberplate;
return newVeh; 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, 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) 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) 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) public static Vehicle GetVehicleFromServerVehicle(ServerVehicle serverVehicle)
@@ -833,7 +837,7 @@ namespace ReallifeGamemode.Server.Managers
} }
[ServerEvent(Event.VehicleDeath)] [ServerEvent(Event.VehicleDeath)]
public void VehicleManagerVehicleDeath(Vehicle vehicle) public static void VehicleManagerVehicleDeath(Vehicle vehicle)
{ {
ServerVehicle serverVehicle = GetServerVehicleFromVehicle(vehicle); ServerVehicle serverVehicle = GetServerVehicleFromVehicle(vehicle);