OverHaul Bus and Pilot TEST
This commit is contained in:
@@ -7,6 +7,7 @@ using ReallifeGamemode.Server.Services;
|
||||
using ReallifeGamemode.Server.Managers;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using System.Linq;
|
||||
|
||||
namespace ReallifeGamemode.Server.Job
|
||||
{
|
||||
@@ -16,29 +17,34 @@ namespace ReallifeGamemode.Server.Job
|
||||
|
||||
public override string Name => "Busfahrer";
|
||||
|
||||
public static Dictionary<Player, Vehicle> playerBusPair = new Dictionary<Player, Vehicle>();
|
||||
public static Dictionary<string, List<Vector3>> playerRoutePair = new Dictionary<string, List<Vector3>>();
|
||||
private const int MARKER_DELAY = 4000;
|
||||
private const int MARKER_ID = 1;
|
||||
private const int MARKER_SIZE = 7;
|
||||
private const int MARKER_DIST = 6;
|
||||
private const string MARKER_EVENT = "busDriverJob";
|
||||
public static Dictionary<string, List<Vector3>> playerRoutePair1 = new Dictionary<string, List<Vector3>>(); //skill 1
|
||||
public static Dictionary<string, List<Vector3>> playerRoutePair2 = new Dictionary<string, List<Vector3>>(); //skill 2
|
||||
public static Dictionary<string, List<Vector3>> playerRoutePair3 = new Dictionary<string, List<Vector3>>(); //skill 3
|
||||
|
||||
private const uint VEHICLE_BEGINNER = (uint)VehicleHash.Bus;
|
||||
private const uint VEHICLE_INTERMEDIATE = (uint)VehicleHash.Coach;
|
||||
private const uint VEHICLE_PROFESSIONAL = (uint)VehicleHash.Tourbus;
|
||||
public static Dictionary<string, List<Vector3>> playerRouteCurrent = new Dictionary<string, List<Vector3>>();
|
||||
|
||||
private const string BEGINNER = "Anfänger";
|
||||
private const string INTERMEDIATE = "Fortgeschrittener";
|
||||
private const string PROFESSIONAL = "Profi";
|
||||
public const int MARKER_DELAY = 4000;
|
||||
public const int MARKER_ID = 1;
|
||||
public const int MARKER_SIZE = 7;
|
||||
public const int MARKER_DIST = 6;
|
||||
public const string MARKER_EVENT = "BUSJOB:BusInCheckpoint";
|
||||
|
||||
private const int SKILL_BEGINNER = 0;
|
||||
private const int SKILL_INTERMEDIATE = 300;
|
||||
private const int SKILL_PROFESSIONAL = 800;
|
||||
public const uint VEHICLE_BEGINNER = (uint)VehicleHash.Bus;
|
||||
public const uint VEHICLE_INTERMEDIATE = (uint)VehicleHash.Coach;
|
||||
public const uint VEHICLE_PROFESSIONAL = (uint)VehicleHash.Tourbus;
|
||||
|
||||
public const int WAGE_BEGINNER = 800;
|
||||
public const int WAGE_INTERMEDIATE = 1200;
|
||||
public const int WAGE_PROFESSIOAL = 1800;
|
||||
|
||||
public const string BEGINNER = "Anfänger";
|
||||
public const string INTERMEDIATE = "Fortgeschrittener";
|
||||
public const string PROFESSIONAL = "Profi";
|
||||
|
||||
public const int SKILL_BEGINNER = 0;
|
||||
public const int SKILL_INTERMEDIATE = 300;
|
||||
public const int SKILL_PROFESSIONAL = 800;
|
||||
|
||||
private const int WAGE_BEGINNER = 800;
|
||||
private const int WAGE_INTERMEDIATE = 1200;
|
||||
private const int WAGE_PROFESSIOAL = 1800;
|
||||
//-623.76, -2083.1008, 5.9822865
|
||||
|
||||
private static int spawnIndex = 0;
|
||||
@@ -51,7 +57,7 @@ namespace ReallifeGamemode.Server.Job
|
||||
new Vector3(-598.5143, -2207.357, 5.988893),
|
||||
};
|
||||
|
||||
private const float VEHICLE_HEADING = 47; //6.618084f;
|
||||
private const float VEHICLE_HEADING = 50; //6.618084f;
|
||||
|
||||
public override bool NeedVehicleToStart => false;
|
||||
|
||||
@@ -60,7 +66,7 @@ namespace ReallifeGamemode.Server.Job
|
||||
{ 1,
|
||||
new List<Vector3>()
|
||||
{
|
||||
new Vector3(-601.733, -2049.285, 6.090),
|
||||
//new Vector3(-601.733, -2049.285, 6.090),
|
||||
new Vector3(-1018.1577758789062, -2732.403564453125, 10.658967971801758) ,
|
||||
new Vector3(-153.04013061523438, -2033.8385009765625, 19.712543487548828) ,
|
||||
new Vector3(50.42457580566406, -1536.9090576171875, 26.184476852416992) ,
|
||||
@@ -76,7 +82,7 @@ namespace ReallifeGamemode.Server.Job
|
||||
{ 2,
|
||||
new List<Vector3>()
|
||||
{
|
||||
new Vector3(-601.733, -2049.285, 6.090),
|
||||
//new Vector3(-601.733, -2049.285, 6.090),
|
||||
new Vector3(-567.6445922851562, -1233.4453125, 12.050300598144531),
|
||||
new Vector3(-509.224609375, -668.373291015625, 30.02402877807617),
|
||||
new Vector3(55.00559997558594, -749.8328247070312, 41.11421203613281),
|
||||
@@ -92,7 +98,7 @@ namespace ReallifeGamemode.Server.Job
|
||||
{ 3,
|
||||
new List<Vector3>()
|
||||
{
|
||||
new Vector3(-601.733, -2049.285, 6.090),
|
||||
//new Vector3(-601.733, -2049.285, 6.090),
|
||||
new Vector3(423.4793395996094, -2143.4169921875, 15.23659896850586),
|
||||
new Vector3(875.1618041992188, -1766.7913818359375, 26.780052185058594),
|
||||
new Vector3(1166.110107421875, -1422.72265625, 31.477935791015625),
|
||||
@@ -108,7 +114,7 @@ namespace ReallifeGamemode.Server.Job
|
||||
{ 4,
|
||||
new List<Vector3>()
|
||||
{
|
||||
new Vector3(-601.733, -2049.285, 6.090),
|
||||
//new Vector3(-601.733, -2049.285, 6.090),
|
||||
new Vector3(-694.1781616210938, -1199.3873291015625, 7.50633716583252),
|
||||
new Vector3(-1408.264892578125, -567.5278930664062, 27.21875),
|
||||
new Vector3(-1681.6112060546875, -503.3702392578125, 34.79117965698242),
|
||||
@@ -129,7 +135,7 @@ namespace ReallifeGamemode.Server.Job
|
||||
{ 1,
|
||||
new List<Vector3>()
|
||||
{
|
||||
new Vector3(-601.733, -2049.285, 6.090),
|
||||
//new Vector3(-601.733, -2049.285, 6.090),
|
||||
new Vector3(-1042.6405029296875, -2718.244384765625, 9.493847846984863),
|
||||
new Vector3(832.205322265625, -11.559977531433105, 76.72754669189453),
|
||||
new Vector3(2563.96826171875, 2633.976806640625, 35.279945373535156),
|
||||
@@ -144,7 +150,7 @@ namespace ReallifeGamemode.Server.Job
|
||||
{ 2,
|
||||
new List<Vector3>()
|
||||
{
|
||||
new Vector3(-601.733, -2049.285, 6.090),
|
||||
//new Vector3(-601.733, -2049.285, 6.090),
|
||||
new Vector3(1925.767333984375, 2614.566162109375, 46.16560363769531),
|
||||
new Vector3(299.0667419433594, 2642.93798828125, 44.60177993774414),
|
||||
new Vector3(1162.4556884765625, 1806.3663330078125, 74.3133773803711),
|
||||
@@ -157,7 +163,7 @@ namespace ReallifeGamemode.Server.Job
|
||||
{ 3,
|
||||
new List<Vector3>()
|
||||
{
|
||||
new Vector3(-601.733, -2049.285, 6.090),
|
||||
//new Vector3(-601.733, -2049.285, 6.090),
|
||||
new Vector3(-1855.54,153.604,79.0297),
|
||||
new Vector3(-1538.72,1375.19,124.3),
|
||||
new Vector3(-1101.74,2668.48,17.7363),
|
||||
@@ -170,7 +176,7 @@ namespace ReallifeGamemode.Server.Job
|
||||
{ 4,
|
||||
new List<Vector3>()
|
||||
{
|
||||
new Vector3(-601.733, -2049.285, 6.090),
|
||||
//new Vector3(-601.733, -2049.285, 6.090),
|
||||
new Vector3(-1037.8,-2716.02,12.7963),
|
||||
new Vector3(1662.69,4849.72,40.9165),
|
||||
new Vector3(57.8575,3735.46,38.7301),
|
||||
@@ -189,7 +195,7 @@ namespace ReallifeGamemode.Server.Job
|
||||
{ 1,
|
||||
new List<Vector3>()
|
||||
{
|
||||
new Vector3(-601.733, -2049.285, 6.090),
|
||||
//new Vector3(-601.733, -2049.285, 6.090),
|
||||
new Vector3(-598.849365234375, -2053.087646484375, 5.8428778648376465),
|
||||
new Vector3(-229.679931640625, -2049.821533203125, 27.384798049926758),
|
||||
new Vector3(-72.33480834960938, -615.8173217773438, 35.91234588623047),
|
||||
@@ -213,7 +219,7 @@ namespace ReallifeGamemode.Server.Job
|
||||
{ 2,
|
||||
new List<Vector3>()
|
||||
{
|
||||
new Vector3(-601.733, -2049.285, 6.090),
|
||||
//new Vector3(-601.733, -2049.285, 6.090),
|
||||
new Vector3(-597.8766479492188, -2053.534423828125, 5.853154182434082),
|
||||
new Vector3(-895.4871826171875, -2074.380126953125, 8.602267265319824),
|
||||
new Vector3(-667.8001708984375, -1233.9366455078125, 10.274462699890137),
|
||||
@@ -231,7 +237,7 @@ namespace ReallifeGamemode.Server.Job
|
||||
{ 3,
|
||||
new List<Vector3>()
|
||||
{
|
||||
new Vector3(-601.733, -2049.285, 6.090),
|
||||
//new Vector3(-601.733, -2049.285, 6.090),
|
||||
new Vector3(-146.62071, -2178.8228, 9.194298),
|
||||
new Vector3(14.580393, -1578.6385, 28.212185),
|
||||
new Vector3(222.91612, -1098.8556, 28.227453),
|
||||
@@ -249,7 +255,7 @@ namespace ReallifeGamemode.Server.Job
|
||||
public BusDriverJob()
|
||||
{
|
||||
JobStart += BusDriverJob_JobStart;
|
||||
JobStop += BusDriverJob_JobStop;
|
||||
JobStop += _JobStop;
|
||||
}
|
||||
|
||||
private void BusDriverJob_JobStart(Player player)
|
||||
@@ -258,13 +264,44 @@ namespace ReallifeGamemode.Server.Job
|
||||
player.TriggerEvent("SERVER:StartBusJob", user.BusSkill);
|
||||
}
|
||||
|
||||
private void BusDriverJob_JobStop(Player player)
|
||||
private void _JobStop(Player player)
|
||||
{
|
||||
if (!playerBusPair.ContainsKey(player))
|
||||
if (!playerVehiclePair.ContainsKey(player))
|
||||
return;
|
||||
|
||||
playerBusPair[player].Delete();
|
||||
playerBusPair.Remove(player);
|
||||
playerVehiclePair[player].Delete();
|
||||
playerVehiclePair.Remove(player);
|
||||
}
|
||||
|
||||
public string getPlayerRouteType(Player player)
|
||||
{
|
||||
if (!playerRouteCurrent.ContainsKey(player.Name))
|
||||
return "none";
|
||||
|
||||
List<Vector3> selectedRoute = playerRouteCurrent[player.Name];
|
||||
|
||||
if (ROUTE_BEGINNER.Values.Where(v => v.Equals(selectedRoute)) != null)
|
||||
return BEGINNER;
|
||||
else if (ROUTE_INTERMEDIATE.Values.Where(v => v.Equals(selectedRoute)) != null)
|
||||
return INTERMEDIATE;
|
||||
else if (ROUTE_PROFESSIONAL.Values.Where(v => v.Equals(selectedRoute)) != null)
|
||||
return PROFESSIONAL;
|
||||
|
||||
return "none";
|
||||
}
|
||||
|
||||
private uint getPlayerJobVehicle(Player player)
|
||||
{
|
||||
string type = getPlayerRouteType(player);
|
||||
|
||||
if (type == BEGINNER)
|
||||
return VEHICLE_BEGINNER;
|
||||
else if (type == INTERMEDIATE)
|
||||
return VEHICLE_INTERMEDIATE;
|
||||
else if (type == PROFESSIONAL)
|
||||
return VEHICLE_PROFESSIONAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:StartBusRoute")]
|
||||
@@ -275,39 +312,37 @@ namespace ReallifeGamemode.Server.Job
|
||||
if (type == PROFESSIONAL && user.BusSkill < SKILL_PROFESSIONAL) { player.TriggerEvent("MenuSelect:Error"); return; }
|
||||
|
||||
List<Vector3> selectedRoute = new List<Vector3>();
|
||||
Vehicle vehicle = null;
|
||||
Vector3 spawnPoint = VEHICLE_SPAWNS[spawnIndex++ % VEHICLE_SPAWNS.Count];
|
||||
|
||||
if (playerRoutePair.ContainsKey(player.Name))
|
||||
if (playerRouteCurrent.ContainsKey(player.Name))
|
||||
{
|
||||
selectedRoute = playerRoutePair[player.Name];
|
||||
if (ROUTE_BEGINNER.ContainsValue(selectedRoute))
|
||||
vehicle = NAPI.Vehicle.CreateVehicle(VEHICLE_BEGINNER, spawnPoint, VEHICLE_HEADING, 111, 111, "JOB");
|
||||
else if (ROUTE_INTERMEDIATE.ContainsValue(selectedRoute))
|
||||
vehicle = NAPI.Vehicle.CreateVehicle(VEHICLE_INTERMEDIATE, spawnPoint, VEHICLE_HEADING, 111, 111, "JOB");
|
||||
else if (ROUTE_PROFESSIONAL.ContainsValue(selectedRoute))
|
||||
vehicle = NAPI.Vehicle.CreateVehicle(VEHICLE_PROFESSIONAL, spawnPoint, VEHICLE_HEADING, 111, 111, "JOB");
|
||||
selectedRoute = playerRouteCurrent[player.Name];
|
||||
}
|
||||
else
|
||||
{
|
||||
Random random = new Random();
|
||||
if (type == BEGINNER)
|
||||
{
|
||||
selectedRoute = ROUTE_BEGINNER.GetValueOrDefault(random.Next(1, ROUTE_BEGINNER.Count));
|
||||
vehicle = NAPI.Vehicle.CreateVehicle(VEHICLE_BEGINNER, spawnPoint, VEHICLE_HEADING, 111, 111, "JOB");
|
||||
if (playerRoutePair1.ContainsKey(player.Name))
|
||||
selectedRoute = playerRoutePair1[player.Name];
|
||||
else
|
||||
selectedRoute = ROUTE_BEGINNER.GetValueOrDefault(random.Next(1, ROUTE_BEGINNER.Count));
|
||||
}
|
||||
else if (type == INTERMEDIATE)
|
||||
{
|
||||
selectedRoute = ROUTE_INTERMEDIATE.GetValueOrDefault(random.Next(1, ROUTE_INTERMEDIATE.Count));
|
||||
vehicle = NAPI.Vehicle.CreateVehicle(VEHICLE_INTERMEDIATE, spawnPoint, VEHICLE_HEADING, 111, 111, "JOB");
|
||||
if (playerRoutePair2.ContainsKey(player.Name))
|
||||
selectedRoute = playerRoutePair2[player.Name];
|
||||
else
|
||||
selectedRoute = ROUTE_INTERMEDIATE.GetValueOrDefault(random.Next(1, ROUTE_INTERMEDIATE.Count));
|
||||
}
|
||||
else if (type == PROFESSIONAL)
|
||||
{
|
||||
selectedRoute = ROUTE_PROFESSIONAL.GetValueOrDefault(random.Next(1, ROUTE_PROFESSIONAL.Count));
|
||||
vehicle = NAPI.Vehicle.CreateVehicle(VEHICLE_PROFESSIONAL, spawnPoint, VEHICLE_HEADING, 111, 111, "JOB");
|
||||
if (playerRoutePair3.ContainsKey(player.Name))
|
||||
selectedRoute = playerRoutePair3[player.Name];
|
||||
else
|
||||
selectedRoute = ROUTE_PROFESSIONAL.GetValueOrDefault(random.Next(1, ROUTE_PROFESSIONAL.Count));
|
||||
}
|
||||
|
||||
playerRoutePair.Add(player.Name, selectedRoute);
|
||||
playerRouteCurrent.Add(player.Name, selectedRoute);
|
||||
}
|
||||
|
||||
if (selectedRoute.Count is 0)
|
||||
@@ -316,15 +351,27 @@ namespace ReallifeGamemode.Server.Job
|
||||
return;
|
||||
}
|
||||
|
||||
Vector3 spawnPoint = VEHICLE_SPAWNS[spawnIndex++ % VEHICLE_SPAWNS.Count];
|
||||
Vehicle vehicle = NAPI.Vehicle.CreateVehicle(getPlayerJobVehicle(player), spawnPoint, VEHICLE_HEADING, 111, 111, "JOB");
|
||||
vehicle.NumberPlate = "JOB-" + vehicle.Id;
|
||||
|
||||
if (vehicle is null)
|
||||
{
|
||||
Console.WriteLine($"[ERROR:BUSJOB] Player {player.Name} got no Vehicle set.");
|
||||
return;
|
||||
}
|
||||
if (playerVehiclePair.ContainsKey(player))
|
||||
{
|
||||
playerVehiclePair.Remove(player);
|
||||
if (playerVehiclePair[player] != null)
|
||||
playerVehiclePair[player].Delete();
|
||||
}
|
||||
|
||||
playerVehiclePair.Add(player, vehicle);
|
||||
|
||||
player.SetIntoVehicle(vehicle.Handle, 0);
|
||||
|
||||
player.StartCheckPointRoute(selectedRoute, 0, MARKER_ID, MARKER_SIZE, MARKER_DIST, true, "BusInCheckpoint");
|
||||
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/FahrplanAbfahrt", "wav", 15);
|
||||
player.StartCheckPointRoute(selectedRoute, MARKER_DELAY, MARKER_ID, MARKER_SIZE, MARKER_DIST, true, MARKER_EVENT);
|
||||
|
||||
#region delete
|
||||
|
||||
@@ -463,217 +510,205 @@ namespace ReallifeGamemode.Server.Job
|
||||
#endregion delete
|
||||
}
|
||||
|
||||
[RemoteEvent("BusInCheckpoint")]
|
||||
public void BusInCheckpoint(Player player)
|
||||
public override void LastCheckpoint(Player player)
|
||||
{
|
||||
if (!playerBusPair.ContainsKey(player) || !playerRoutePair.ContainsKey(player.Name))
|
||||
return;
|
||||
|
||||
using var dbcontext = new DatabaseContext();
|
||||
|
||||
User user = player.GetUser(dbcontext);
|
||||
|
||||
if (playerBusPair[player].Model is VEHICLE_BEGINNER)
|
||||
user.Wage += (WAGE_BEGINNER / playerRoutePair[player.Name].Count);
|
||||
else if (playerBusPair[player].Model is VEHICLE_INTERMEDIATE)
|
||||
user.Wage += (WAGE_INTERMEDIATE / playerRoutePair[player.Name].Count);
|
||||
else if (playerBusPair[player].Model is VEHICLE_PROFESSIONAL)
|
||||
user.Wage += (WAGE_PROFESSIOAL / playerRoutePair[player.Name].Count);
|
||||
|
||||
dbcontext.SaveChanges();
|
||||
}
|
||||
|
||||
public static void payWage(Player jobber, int wage)
|
||||
{
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
if (jobber.VehicleSeat == 0)
|
||||
{
|
||||
jobber.GetUser(dbContext).Wage += wage;
|
||||
//jobber.SendNotification($"~y~[JOB] ~g~+{wage}$");
|
||||
jobber.GetUser(dbContext).BusSkill++;
|
||||
dbContext.SaveChanges();
|
||||
if (jobber.GetUser(dbContext).BusSkill == 300)
|
||||
{
|
||||
jobber.SendChatMessage($"~y~Job: ~w~Du hast nun ~g~Skill-Level 2 ~w~erreicht!");
|
||||
jobber.SendChatMessage($"~y~Job: ~w~Du kannst jetzt auch mit dem Coach fahren!");
|
||||
}
|
||||
if (jobber.GetUser(dbContext).BusSkill == 800)
|
||||
{
|
||||
jobber.SendChatMessage($"~y~Job: ~w~Du hast nun ~g~Skill-Level 3 ~w~erreicht!");
|
||||
jobber.SendChatMessage($"~y~Job: ~w~Du kannst jetzt mit dem Coach und dem Tourbus fahren!");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
JobBase job = JobManager.GetJob(jobber.GetUser().JobId ?? -1);
|
||||
job.StopJob(jobber);
|
||||
CheckPointHandle.DeleteCheckpoints(jobber);
|
||||
ChatService.SendMessage(jobber, $"~y~Job:~s~ Du hast deinen Job (~o~{job.Name}~s~) beendet.");
|
||||
}
|
||||
//BusLetzterCheckpoint(jobber);
|
||||
//BusDriverJob rt = null;
|
||||
//rt.BusLetzterCheckpoint()
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("BusLetzterCheckpoint")]
|
||||
public static void BusLetzterCheckpoint(Player player)
|
||||
{
|
||||
BusDriverJob c = new BusDriverJob();
|
||||
Vehicle v = player.Vehicle;
|
||||
player.SendChatMessage("~y~Job: ~w~Die neue Route lädt. Bitte warten...");
|
||||
player.SendChatMessage("~y~[Job]: ~w~Die neue Route lädt. Bitte warten...");
|
||||
NAPI.Task.Run(() =>
|
||||
{
|
||||
if (player.VehicleSeat == 0)
|
||||
{
|
||||
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/FahrplanAbfahrt", "wav", 15);
|
||||
c.StartBusRoute(player, "RouteStart");
|
||||
}
|
||||
else
|
||||
{
|
||||
Vehicle LastVehicle = player.GetData<Vehicle>("LastVehicle");
|
||||
JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1);
|
||||
if (LastVehicle.GetServerVehicle() is JobVehicle vehJ)
|
||||
{
|
||||
if (LastVehicle.GetData<bool>("timerJobVehicleRespawn") == true)
|
||||
{
|
||||
if (vehJ.GetJob().GetUsersInJob().Contains(player))
|
||||
{
|
||||
if (LastVehicle != null)
|
||||
{
|
||||
LastVehicle.ResetData("timerJobVehicleRespawn");
|
||||
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(LastVehicle);
|
||||
ServerVehicleExtensions.Spawn(sVeh, LastVehicle);
|
||||
job.StopJob(player);
|
||||
ChatService.SendMessage(player, $"~y~Job:~s~ Du hast deinen Job (~o~{job.Name}~s~) beendet.");
|
||||
CheckPointHandle.DeleteCheckpoints(player);
|
||||
if (!player.HasData("isDead") || player.GetData<bool>("isDead") == false)
|
||||
{
|
||||
if (player.GetUser().JobId == 3)//Pilot
|
||||
{
|
||||
if (!player.HasData("PilotenBase") || player.GetData<int>("PilotenBase") == 1) //Sandyshores
|
||||
{
|
||||
player.Position = new Vector3(1707.2711181640625, 3276.216064453125, 41.155494689941406);
|
||||
player.Heading = (-154.65234375f);
|
||||
}
|
||||
if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 2) //LS Airport
|
||||
{
|
||||
player.Position = new Vector3(-1622.48, -3151.58, 13);
|
||||
player.Heading = (48.44f);
|
||||
}
|
||||
}
|
||||
if (player.GetUser().JobId == 4)//Busfahrer
|
||||
{
|
||||
player.Position = new Vector3(-535.46, -2144.97, 5.95);
|
||||
player.Heading = (57.03f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/*if (v.Model == (uint)Types.VehicleModel.Bus)
|
||||
{
|
||||
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/FahrplanAbfahrt", "wav", 15);
|
||||
Random rnd = new Random();
|
||||
int rroute = rnd.Next(1, 5);
|
||||
switch (rroute)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
c.StartBusRoute(player, "Skill1Route1");
|
||||
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 1");
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
c.StartBusRoute(player, "Skill1Route2");
|
||||
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 2");
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
c.StartBusRoute(player, "Skill1Route3");
|
||||
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 3");
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
c.StartBusRoute(player, "Skill1Route4");
|
||||
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 4");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (v.Model == (uint)Types.VehicleModel.Coach)
|
||||
{
|
||||
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/FahrplanAbfahrt", "wav", 15);
|
||||
Random rnd = new Random();
|
||||
int rroute = rnd.Next(1, 5);
|
||||
switch (rroute)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
c.StartBusRoute(player, "Skill2Route1");
|
||||
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 1");
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
c.StartBusRoute(player, "Skill2Route2");
|
||||
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 2");
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
c.StartBusRoute(player, "Skill2Route3");
|
||||
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 3");
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
c.StartBusRoute(player, "Skill2Route4");
|
||||
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 4");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (v.Model == (uint)Types.VehicleModel.Tourbus)
|
||||
{
|
||||
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/FahrplanAbfahrt", "wav", 15);
|
||||
Random rnd = new Random();
|
||||
int rroute = rnd.Next(1, 5);
|
||||
switch (rroute)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
c.StartBusRoute(player, "Skill3Route1");
|
||||
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 1");
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
c.StartBusRoute(player, "Skill3Route2");
|
||||
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 2");
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
c.StartBusRoute(player, "Skill3Route3");
|
||||
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 3");
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
c.StartBusRoute(player, "Skill3Route4");
|
||||
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 4");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
string type = getPlayerRouteType(player);
|
||||
|
||||
List<Vector3> selectedRoute = playerRouteCurrent[player.Name];
|
||||
|
||||
if (type == BEGINNER)
|
||||
playerRoutePair1.Remove(player.Name);
|
||||
else if (type == INTERMEDIATE)
|
||||
playerRoutePair2.Remove(player.Name);
|
||||
else if (type == PROFESSIONAL)
|
||||
playerRoutePair3.Remove(player.Name);
|
||||
|
||||
playerRouteCurrent.Remove(player.Name);
|
||||
BusDriverJob job = JobManager.GetJob<BusDriverJob>();
|
||||
StartBusRoute(player, type);
|
||||
}, delayTime: 10000);
|
||||
|
||||
if (!player.IsInVehicle || player.VehicleSeat != 0) return;
|
||||
Vehicle veh = player.Vehicle;
|
||||
if (!(veh.GetData<IndicatorData>("indicatorData") is IndicatorData data)) data = new IndicatorData();
|
||||
data.Left = false;
|
||||
data.Right = false;
|
||||
veh.SetData("indicatorData", data);
|
||||
NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right);
|
||||
}
|
||||
|
||||
public void BusCheckpoint(Player player)
|
||||
{
|
||||
if (!player.IsInVehicle || player.VehicleSeat != 0) return;
|
||||
Vehicle veh = player.Vehicle;
|
||||
if ((VehicleHash)veh.Model == VehicleHash.Bus)
|
||||
{
|
||||
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AbfahrtHaltestelleBus", "wav", 25);
|
||||
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 0, false, 1850);
|
||||
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 1, false, 1850);
|
||||
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 2, false, 1850);
|
||||
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 3, false, 1850);
|
||||
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 0, false, 1850);
|
||||
NAPI.Task.Run(() =>
|
||||
{
|
||||
player.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
|
||||
}, delayTime: 1850);
|
||||
}
|
||||
if ((VehicleHash)veh.Model == VehicleHash.Coach)
|
||||
{
|
||||
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AbfahrtHaltestelleCoach", "wav", 35);
|
||||
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 0, false, 1000);
|
||||
NAPI.Task.Run(() =>
|
||||
{
|
||||
player.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
|
||||
}, delayTime: 1000);
|
||||
}
|
||||
if ((VehicleHash)veh.Model == VehicleHash.Tourbus)
|
||||
{
|
||||
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AbfahrtHaltestelleTourbus", "wav", 25);
|
||||
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 3, false, 2600);
|
||||
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 2, false, 2600);
|
||||
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 3, false, 2600);
|
||||
NAPI.Task.Run(() =>
|
||||
{
|
||||
player.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
|
||||
}, delayTime: 2600);
|
||||
}
|
||||
//user.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
|
||||
}
|
||||
|
||||
public void AtBusStop(Player player)
|
||||
{
|
||||
if (!player.IsInVehicle || player.VehicleSeat != 0) return;
|
||||
Vehicle veh = player.Vehicle;
|
||||
player.TriggerEvent("CLIENT:FreezeVehicle", veh);
|
||||
player.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
|
||||
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AnfahrtHaltestelle", "wav", 50);
|
||||
if ((VehicleHash)veh.Model == VehicleHash.Bus)
|
||||
{
|
||||
player.TriggerEvent("CLIENT:SetDoorOpen", 0, false, false);
|
||||
player.TriggerEvent("CLIENT:SetDoorOpen", 1, false, false);
|
||||
player.TriggerEvent("CLIENT:SetDoorOpen", 2, false, false);
|
||||
player.TriggerEvent("CLIENT:SetDoorOpen", 3, false, false);
|
||||
player.TriggerEvent("CLIENT:SetDoorOpen", 0, false, false);
|
||||
NAPI.Task.Run(() =>
|
||||
{
|
||||
BusCheckpoint(player);
|
||||
}, delayTime: 3600);
|
||||
}
|
||||
if ((VehicleHash)veh.Model == VehicleHash.Coach)
|
||||
{
|
||||
player.TriggerEvent("CLIENT:SetDoorOpen", 0, false, false);
|
||||
NAPI.Task.Run(() =>
|
||||
{
|
||||
BusCheckpoint(player);
|
||||
}, delayTime: 2800);
|
||||
}
|
||||
if ((VehicleHash)veh.Model == VehicleHash.Tourbus)
|
||||
{
|
||||
player.TriggerEvent("CLIENT:SetDoorOpen", 2, false, false);
|
||||
player.TriggerEvent("CLIENT:SetDoorOpen", 3, false, false);
|
||||
NAPI.Task.Run(() =>
|
||||
{
|
||||
BusCheckpoint(player);
|
||||
}, delayTime: 3250);
|
||||
}
|
||||
if (!(veh.GetData<IndicatorData>("indicatorData") is IndicatorData data)) data = new IndicatorData();
|
||||
data.Left = false;
|
||||
data.Right = true;
|
||||
veh.SetData("indicatorData", data);
|
||||
NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right);
|
||||
|
||||
NAPI.Task.Run(() =>
|
||||
{
|
||||
veh.Position = new Vector3(veh.Position.X, veh.Position.Y, veh.Position.Z + 0.1);
|
||||
|
||||
player.TriggerEvent("CLIENT:FreezeVehicle", veh);
|
||||
}, delayTime: 500);
|
||||
}
|
||||
|
||||
public override void StartJobEndTimer(Player player)
|
||||
{
|
||||
if (!playerVehiclePair.ContainsKey(player))
|
||||
return;
|
||||
|
||||
if (JobManager.playerTimersJobVehicleRespawn.ContainsKey(player))
|
||||
{
|
||||
JobManager.playerTimersJobVehicleRespawn[player].Stop();
|
||||
}
|
||||
PlayerTimer playerTimer = new PlayerTimer(player, playerVehiclePair[player], 30000);
|
||||
playerTimer.Elapsed += JobTimerElapsed;
|
||||
JobManager.playerTimersJobVehicleRespawn[player] = playerTimer;
|
||||
player.SendChatMessage("~y~[JOB] ~w~Du hast das Fahrzeug verlassen,");
|
||||
player.SendChatMessage("~y~[JOB] ~w~Bist du nicht in 30 Sekunden zurück, ~r~wird der Job beendet!");
|
||||
}
|
||||
|
||||
private void JobTimerElapsed(Player player, Vehicle vehicle)
|
||||
{
|
||||
NAPI.Task.Run(() =>
|
||||
{
|
||||
StopJob(player, !player.GetData<bool>("isDead"));
|
||||
JobManager.playerTimersJobVehicleRespawn[player].Stop();
|
||||
JobManager.playerTimersJobVehicleRespawn.Remove(player);
|
||||
});
|
||||
}
|
||||
|
||||
public override bool CheckVehicle(Player player, Vehicle vehicle)
|
||||
{
|
||||
if (!playerVehiclePair.ContainsKey(player))
|
||||
return false;
|
||||
|
||||
if (playerVehiclePair[player] == vehicle)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public class BusJobEvents : Script
|
||||
{
|
||||
[RemoteEvent("BUSJOB:BusInCheckpoint")]
|
||||
public void BusInCheckpoint(Player player)
|
||||
{
|
||||
if (!BusDriverJob.playerVehiclePair.ContainsKey(player) || !BusDriverJob.playerRouteCurrent.ContainsKey(player.Name))
|
||||
return;
|
||||
|
||||
if (BusDriverJob.playerVehiclePair[player].Model is BusDriverJob.VEHICLE_BEGINNER)
|
||||
payWage(player, BusDriverJob.WAGE_BEGINNER / BusDriverJob.playerRouteCurrent[player.Name].Count);
|
||||
else if (BusDriverJob.playerVehiclePair[player].Model is BusDriverJob.VEHICLE_INTERMEDIATE)
|
||||
payWage(player, BusDriverJob.WAGE_INTERMEDIATE / BusDriverJob.playerRouteCurrent[player.Name].Count);
|
||||
else if (BusDriverJob.playerVehiclePair[player].Model is BusDriverJob.VEHICLE_PROFESSIONAL)
|
||||
payWage(player, BusDriverJob.WAGE_PROFESSIOAL / BusDriverJob.playerRouteCurrent[player.Name].Count);
|
||||
}
|
||||
|
||||
private void payWage(Player player, int wage)
|
||||
{
|
||||
using var dbContext = new DatabaseContext();
|
||||
User user = player.GetUser(dbContext);
|
||||
|
||||
if (player.VehicleSeat == 0)
|
||||
{
|
||||
user.Wage += wage;
|
||||
user.BusSkill++;
|
||||
if (user.BusSkill == BusDriverJob.SKILL_INTERMEDIATE)
|
||||
{
|
||||
player.SendChatMessage($"~y~[Job]: ~w~Du hast nun die Route ~g~{BusDriverJob.INTERMEDIATE} ~w~freigeschaltet!");
|
||||
player.SendChatMessage($"~y~[Job]: ~w~Du kannst jetzt auch mit dem Coach fahren!");
|
||||
}
|
||||
if (user.BusSkill == BusDriverJob.SKILL_PROFESSIONAL)
|
||||
{
|
||||
player.SendChatMessage($"~y~[Job]: ~w~Du hast nun die Route ~g~{BusDriverJob.PROFESSIONAL} ~w~freigeschaltet!");
|
||||
player.SendChatMessage($"~y~[Job]: ~w~Du kannst jetzt auch mit dem Tourbus fahren!");
|
||||
}
|
||||
|
||||
BusDriverJob job = JobManager.GetJob<BusDriverJob>();
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user