OverHaul Bus and Pilot TEST

This commit is contained in:
2021-04-10 01:32:12 +02:00
parent cb020aa007
commit b51756a045
14 changed files with 836 additions and 1336 deletions

View File

@@ -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();
}
}
}
}

View File

@@ -5,6 +5,7 @@ using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Managers;
namespace ReallifeGamemode.Server.Job
{
@@ -21,12 +22,20 @@ namespace ReallifeGamemode.Server.Job
private readonly List<Player> _inJob = new List<Player>();
private static readonly List<Player> jobPlayer = new List<Player>();
public static Dictionary<Player, Vehicle> playerVehiclePair = new Dictionary<Player, Vehicle>();
public abstract int Id { get; }
public abstract string Name { get; }
public abstract bool NeedVehicleToStart { get; }
public abstract void LastCheckpoint(Player player);
public abstract void StartJobEndTimer(Player player);
public abstract bool CheckVehicle(Player player, Vehicle veh);
public virtual bool Deactivated => false;
public void StartJob(Player player)
@@ -46,18 +55,10 @@ namespace ReallifeGamemode.Server.Job
_inJob.Remove(player);
jobPlayer.Remove(player);
User user = player.GetUser();
using (var dbContext = new DatabaseContext())
{
user = player.GetUser(dbContext);
user.trashcount -= user.trashcount;
dbContext.SaveChanges();
}
if (quit)
{
ChatService.SendMessage(player, $"~y~[Job]~s~ Du hast deinen Job (~o~{this.Name}~s~) beendet.");
player.Position = JobManager.playerJobStartPosition[player];
}
JobStop?.Invoke(player);
@@ -65,10 +66,8 @@ namespace ReallifeGamemode.Server.Job
public List<JobVehicle> GetJobVehicles()
{
using (var dbContext = new DatabaseContext())
{
return dbContext.JobVehicles.Where(j => j.JobId == Id).ToList();
}
using var dbContext = new DatabaseContext();
return dbContext.JobVehicles.Where(j => j.JobId == Id).ToList();
}
public static List<Player> GetPlayerInJob() => jobPlayer;

View File

@@ -7,6 +7,8 @@ using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Util;
using System.Linq;
using ReallifeGamemode.Database.Entities;
namespace ReallifeGamemode.Server.Job
{
@@ -18,239 +20,224 @@ namespace ReallifeGamemode.Server.Job
private const int CHECKPOINT_MARKER_ID = 6;
public const string BEGINNER = "Anfänger";
public const string INTERMEDIATE = "Fortgeschrittener";
public const string PROFESSIONAL = "Profi";
public const int WAGE_BEGINNER = 350;
public const int WAGE_INTERMEDIATE = 500;
public const uint VEHICLE_BEGINNER = (uint)VehicleHash.Cuban800;
public const uint VEHICLE_INTERMEDIATE = (uint)VehicleHash.Velum2;
public const uint VEHICLE_PROFESSIONAL = (uint)VehicleHash.Submersible;
public static Dictionary<string, List<Vector3>> playerRouteCurrent = new Dictionary<string, List<Vector3>>();
public static int spawnIndex = 0;
public const int SKILL_BEGINNER = 0;
public const int SKILL_INTERMEDIATE = 300;
public override bool NeedVehicleToStart => false;
private readonly IReadOnlyCollection<Vector3> Skill1Route1 = new List<Vector3>//Pilot_Skill_1_Route_1
private readonly Dictionary<Vector3, float> BEGINNER_SPAWNS = new Dictionary<Vector3, float>
{
new Vector3(1645.9910888671875, 3236.744873046875, 40.98052978515625),
new Vector3(302.6805114746094, 2867.93896484375, 204.81182861328125),
new Vector3(-1093.6722412109375, 2737.1376953125, 257.575439453125),
new Vector3(-2286.014892578125, 3019.12841796875, 33.4510498046875),
new Vector3(-2471.854248046875, 3271.08935546875, 33.47834777832031),
new Vector3(-623.9515380859375, 5313.12158203125, 181.6047821044922),
new Vector3(1896.899658203125, 4824.203125, 208.77737426757812),
new Vector3(2281.790283203125, 3606.98681640625, 132.3915252685547),
new Vector3(1610.4461669921875, 3225.36376953125, 41.05073928833008),
}.AsReadOnly();
{ new Vector3(1698.0226, 3261.829, 41.625206), -170},
{ new Vector3(1673.5715, 3255.3167, 41.385006), -170},
{ new Vector3(1652.0725, 3249.6987, 41.194054), -170},
{ new Vector3(1705.3207, 3236.8796, 41.563965), 15},
{ new Vector3(1680.5709, 3230.2217, 41.563965), 52},
};
private readonly IReadOnlyCollection<Vector3> Skill1Route2 = new List<Vector3>//Pilot_Skill_1_Route_2
private readonly Dictionary<Vector3, float> INTERMEDIATE_SPAWNS = new Dictionary<Vector3, float>()
{
new Vector3(1593.927490234375, 3193.30908203125, 41.170997619628906),
new Vector3(961.5843505859375, 2278.5966796875, 251.17218017578125),
new Vector3(924.3920288085938, 93.95357513427734, 282.3033142089844),
new Vector3(963.6002197265625, -3101.551513671875, 177.8121337890625),
new Vector3(-1265.1163330078125, -2990.142578125, 14.595105171203613),
new Vector3(-1260.78662109375, -2806.293212890625, 14.587812423706055),
new Vector3(-894.3707885742188, 82.7993392944336, 385.011962890625),
new Vector3(919.4126586914062, 2553.385986328125, 135.39154052734375),
new Vector3(1592.840087890625, 3192.8017578125, 41.169837951660156),
}.AsReadOnly();
{ new Vector3(-1593.1952, -3081.4019, 15), 153},
{ new Vector3(-1573.7805, -3092.615, 15), 153},
{ new Vector3(-1555-9386, -3102-4492, 15), 150},
{ new Vector3(-1536-6404, -3113-7183, 15), 150},
{ new Vector3(-1517-0101, -3125-2798, 15), 150},
};
private readonly IReadOnlyCollection<Vector3> Skill1Route3 = new List<Vector3>//Pilot_Skill_1_Route_3
{
new Vector3(-850.61, 2181.98, 429.67),
}.AsReadOnly();
//124 0 Velum
private readonly IReadOnlyCollection<Vector3> Skill2Route1 = new List<Vector3>//Pilot_Skill_2_Route_1
private readonly Dictionary<int, List<Vector3>> ROUTE_BEGINNER = new Dictionary<int, List<Vector3>>//Bus_Skill_1_Route_1
{
new Vector3(-1534.98828125, -3028.916748046875, 14.451109886169434),
new Vector3(-1182.960205078125, -3236.542724609375, 67.93492126464844),
new Vector3(942.8041381835938, -2997.95751953125, 323.1705322265625),
new Vector3(2459.114501953125, -525.8928833007812, 409.09002685546875),
new Vector3(2764.611572265625, 1482.853271484375, 457.73944091796875),
new Vector3(3485.380615234375, 3652.9619140625, 343.3283996582031),
new Vector3(2652.611572265625, 4737.7958984375, 206.23399353027344),
new Vector3(2043.8521728515625, 4769.595703125, 42.007118225097656),
new Vector3(2134.332763671875, 4781.857421875, 41.900352478027344),
new Vector3(1943.1544189453125, 4721.03125, 57.76427459716797),
new Vector3(1749.4105224609375, 3790.8955078125, 194.40440368652344),
new Vector3(1203.5526123046875, 2707.182373046875, 342.80145263671875),
new Vector3(-377.686279296875, 1256.92578125, 532.7467651367188),
new Vector3(-820.6907958984375, -412.96466064453125, 311.0726013183594),
new Vector3(-1073.534912109375, -1704.798583984375, 94.05522155761719),
new Vector3(-1686.30126953125, -2815.478759765625, 14.87234115600586),
new Vector3(-1617.498291015625, -2982.41259765625, 14.883989334106445),
}.AsReadOnly();
{ 1,
new List<Vector3>()
{
//new Vector3(-601.733, -2049.285, 6.090),
new Vector3(1645.9910888671875, 3236.744873046875, 40.98052978515625),
new Vector3(302.6805114746094, 2867.93896484375, 204.81182861328125),
new Vector3(-1093.6722412109375, 2737.1376953125, 257.575439453125),
new Vector3(-2286.014892578125, 3019.12841796875, 33.4510498046875),
new Vector3(-2471.854248046875, 3271.08935546875, 33.47834777832031),
new Vector3(-623.9515380859375, 5313.12158203125, 181.6047821044922),
new Vector3(1896.899658203125, 4824.203125, 208.77737426757812),
new Vector3(2281.790283203125, 3606.98681640625, 132.3915252685547),
new Vector3(1610.4461669921875, 3225.36376953125, 41.05073928833008),
}
},
{ 2,
new List<Vector3>()
{
//new Vector3(-601.733, -2049.285, 6.090),
new Vector3(1593.927490234375, 3193.30908203125, 41.170997619628906),
new Vector3(961.5843505859375, 2278.5966796875, 251.17218017578125),
new Vector3(924.3920288085938, 93.95357513427734, 282.3033142089844),
new Vector3(963.6002197265625, -3101.551513671875, 177.8121337890625),
new Vector3(-1265.1163330078125, -2990.142578125, 14.595105171203613),
new Vector3(-1260.78662109375, -2806.293212890625, 14.587812423706055),
new Vector3(-894.3707885742188, 82.7993392944336, 385.011962890625),
new Vector3(919.4126586914062, 2553.385986328125, 135.39154052734375),
new Vector3(1592.840087890625, 3192.8017578125, 41.169837951660156),
}
},
};
private readonly IReadOnlyCollection<Vector3> Skill2Route2 = new List<Vector3>//Pilot_Skill_2_Route_2
private readonly Dictionary<int, List<Vector3>> ROUTE_INTERMEDIATE = new Dictionary<int, List<Vector3>>
{
new Vector3(-1463.965576171875, -2875.571533203125, 14.882678031921387),
new Vector3(-981.0889282226562, -3122.533203125, 56.10537338256836),
new Vector3(-341.6023254394531, -2016.779541015625, 262.1709899902344),
new Vector3(-1446.6815185546875, -894.4887084960938, 321.3404846191406),
new Vector3(-3151.909912109375, 979.1404418945312, 335.3139953613281),
new Vector3(-1309.160888671875, 4903.9140625, 388.6031494140625),
new Vector3(31.35175895690918, 3690.413330078125, 333.4454345703125),
new Vector3(-948.346923828125, 2766.284912109375, 239.0842742919922),
new Vector3(-2312.5068359375, 3033.903076171875, 33.7471923828125),
new Vector3(-2132.787109375, 3265.840087890625, 33.74031448364258),
new Vector3(-2331.76611328125, 3148.581298828125, 33.7597541809082),
new Vector3(-2564.848876953125, 2369.27783203125, 182.68736267089844),
new Vector3(-1833.041259765625, 832.1589965820312, 398.28863525390625),
new Vector3(-878.19384765625, -904.84521484375, 284.2839050292969),
new Vector3(-1124.624755859375, -1821.9208984375, 74.77794647216797),
new Vector3(-1631.8602294921875, -2720.09814453125, 14.873514175415039),
new Vector3(-1543.793701171875, -2829.399169921875, 14.899491310119629),
}.AsReadOnly();
private readonly IReadOnlyCollection<Vector3> Skill2Route3 = new List<Vector3>//Pilot_Skill_2_Route_3
{
new Vector3(-710.89, -1836.81, 355.46),
}.AsReadOnly();
{ 1,
new List<Vector3>()
{
new Vector3(-1534.98828125, -3028.916748046875, 14.451109886169434),
new Vector3(-1182.960205078125, -3236.542724609375, 67.93492126464844),
new Vector3(942.8041381835938, -2997.95751953125, 323.1705322265625),
new Vector3(2459.114501953125, -525.8928833007812, 409.09002685546875),
new Vector3(2764.611572265625, 1482.853271484375, 457.73944091796875),
new Vector3(3485.380615234375, 3652.9619140625, 343.3283996582031),
new Vector3(2652.611572265625, 4737.7958984375, 206.23399353027344),
new Vector3(2043.8521728515625, 4769.595703125, 42.007118225097656),
new Vector3(2134.332763671875, 4781.857421875, 41.900352478027344),
new Vector3(1943.1544189453125, 4721.03125, 57.76427459716797),
new Vector3(1749.4105224609375, 3790.8955078125, 194.40440368652344),
new Vector3(1203.5526123046875, 2707.182373046875, 342.80145263671875),
new Vector3(-377.686279296875, 1256.92578125, 532.7467651367188),
new Vector3(-820.6907958984375, -412.96466064453125, 311.0726013183594),
new Vector3(-1073.534912109375, -1704.798583984375, 94.05522155761719),
new Vector3(-1686.30126953125, -2815.478759765625, 14.87234115600586),
new Vector3(-1617.498291015625, -2982.41259765625, 14.883989334106445),
}
},
{ 2,
new List<Vector3>()
{
new Vector3(-1463.965576171875, -2875.571533203125, 14.882678031921387),
new Vector3(-981.0889282226562, -3122.533203125, 56.10537338256836),
new Vector3(-341.6023254394531, -2016.779541015625, 262.1709899902344),
new Vector3(-1446.6815185546875, -894.4887084960938, 321.3404846191406),
new Vector3(-3151.909912109375, 979.1404418945312, 335.3139953613281),
new Vector3(-1309.160888671875, 4903.9140625, 388.6031494140625),
new Vector3(31.35175895690918, 3690.413330078125, 333.4454345703125),
new Vector3(-948.346923828125, 2766.284912109375, 239.0842742919922),
new Vector3(-2312.5068359375, 3033.903076171875, 33.7471923828125),
new Vector3(-2132.787109375, 3265.840087890625, 33.74031448364258),
new Vector3(-2331.76611328125, 3148.581298828125, 33.7597541809082),
new Vector3(-2564.848876953125, 2369.27783203125, 182.68736267089844),
new Vector3(-1833.041259765625, 832.1589965820312, 398.28863525390625),
new Vector3(-878.19384765625, -904.84521484375, 284.2839050292969),
new Vector3(-1124.624755859375, -1821.9208984375, 74.77794647216797),
new Vector3(-1631.8602294921875, -2720.09814453125, 14.873514175415039),
new Vector3(-1543.793701171875, -2829.399169921875, 14.899491310119629),
}
},
};
public PilotJob()
{
JobStart += PilotJob_JobStart;
JobStop += _JobStop;
}
private void PilotJob_JobStart(Player player)
private void _JobStop(Player player)
{
/*List<String> listRouteTexts = new List<string>();
List<String> listRouteTexts2 = new List<string>();
if (!playerVehiclePair.ContainsKey(player))
return;
Vehicle veh = player.Vehicle;
playerVehiclePair[player].Delete();
playerVehiclePair.Remove(player);
}
if ((VehicleHash)veh.Model == VehicleHash.Velum || (VehicleHash)veh.Model == VehicleHash.Velum2)
{
listRouteTexts2.Add("Route 4");
listRouteTexts2.Add("Route 5");
listRouteTexts2.Add("Route 6");
public string getSkill(int skillPoints)
{
if (skillPoints == SKILL_BEGINNER)
return BEGINNER;
else if (skillPoints == SKILL_INTERMEDIATE)
return INTERMEDIATE;
player.TriggerEvent("showPilotRouteMenu", JsonConvert.SerializeObject(listRouteTexts2));
}
else
{
listRouteTexts.Add("Route 1");
listRouteTexts.Add("Route 2");
listRouteTexts.Add("Route 3");
return "none";
}
player.TriggerEvent("showPilotRouteMenu", JsonConvert.SerializeObject(listRouteTexts));
}*/
/*Random rnd = new Random();
int rroute = rnd.Next(1, 6);
switch (rroute)
{
case 1:
{
StartPilotRoute(player, "Route 1");
break;
}
case 2:
{
StartPilotRoute(player, "Route 2");
break;
}
case 3:
{
StartPilotRoute(player, "Route 3");
break;
}
case 4:
{
StartPilotRoute(player, "Route 4");
break;
}
case 5:
{
StartPilotRoute(player, "Route 5");
break;
}
}*/
private uint getPlayerJobVehicle(string type)
{
if (type == BEGINNER)
return VEHICLE_BEGINNER;
else if (type == INTERMEDIATE)
return VEHICLE_INTERMEDIATE;
else if (type == PROFESSIONAL)
return VEHICLE_PROFESSIONAL;
return 0;
}
[RemoteEvent("startPilotRoute")]
public void StartPilotRoute(Player player, string type)
public void StartPilotRoute(Player player, int skillPoints)
{
Vehicle veh = player.Vehicle;
if (player.VehicleSeat == 0)
string type = getSkill(skillPoints);
List<Vector3> selectedRoute = new List<Vector3>();
Random random = new Random();
Vector3 spawnPoint = null;
float heading = 0;
if (type == BEGINNER)
{
if (type == "RouteStart")
{
if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 1)
{
Random rnd = new Random();
int rroute = rnd.Next(1, 3);
switch (rroute)
{
case 1:
{
CheckPointHandle.StartCheckPointRoute(player, Skill1Route1, 0, CHECKPOINT_MARKER_ID, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
player.SendChatMessage("~y~Job: ~s~Route wurde gesetzt: ~g~Route 1");
player.SetData("Route", "Skill1Route1");
break;
}
case 2:
{
CheckPointHandle.StartCheckPointRoute(player, Skill1Route2, 0, CHECKPOINT_MARKER_ID, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
player.SendChatMessage("~y~Job: ~s~Route wurde gesetzt: ~g~Route 2");
player.SetData("Route", "Skill1Route2");
break;
}
/*case 3:
{
CheckPointHandle.StartCheckPointRoute(player, Skill1Route3, 0, 26, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
player.SendChatMessage("~y~[JOB] ~w~Route wurde gesetzt: ~g~Route 3");
player.SetData("Route", "Skill1Route3");
break;
}*/
}
}
if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 2)
{
Random rnd = new Random();
int rroute = rnd.Next(1, 3);
switch (rroute)
{
case 1:
{
CheckPointHandle.StartCheckPointRoute(player, Skill2Route1, 0, CHECKPOINT_MARKER_ID, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
player.SendChatMessage("~y~Job: ~s~Route wurde gesetzt: ~g~Route 1");
player.SetData("Route", "Skill2Route1");
break;
}
case 2:
{
CheckPointHandle.StartCheckPointRoute(player, Skill2Route2, 0, CHECKPOINT_MARKER_ID, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
player.SendChatMessage("~y~Job: ~s~Route wurde gesetzt: ~g~Route 2");
player.SetData("Route", "Skill2Route2");
break;
}
/*case 3:
{
CheckPointHandle.StartCheckPointRoute(player, Skill2Route3, 0, 26, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
player.SendChatMessage("~y~[JOB] ~w~Route wurde gesetzt: ~g~Route 3");
player.SetData("Route", "Skill2Route3");
break;
}*/
}
}
}
/*if (type == "Route 1")
{
CheckPointHandle.StartCheckPointRoute(player, Route1, 0, 6, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
}
else if (type == "Route 2")
{
CheckPointHandle.StartCheckPointRoute(player, Route2, 0, 6, 40, 10, true, "pilotJob");
}
else if (type == "Route 3")
{
CheckPointHandle.StartCheckPointRoute(player, Route3, 0, 6, 40, 10, true, "pilotJob");
}
else if (type == "Route 4")
{
CheckPointHandle.StartCheckPointRoute(player, Route4, 0, 6, 40, 10, true, "pilotJob");
}
else if (type == "Route 5")
{
CheckPointHandle.StartCheckPointRoute(player, Route5, 0, 6, 40, 10, true, "pilotJob");
}
else if (type == "Route 6")
{
CheckPointHandle.StartCheckPointRoute(player, Route6, 0, 6, 40, 10, true, "pilotJob");
}*/
spawnPoint = BEGINNER_SPAWNS.Keys.ToList()[spawnIndex++ % BEGINNER_SPAWNS.Count];
heading = BEGINNER_SPAWNS[spawnPoint];
selectedRoute = ROUTE_BEGINNER.GetValueOrDefault(random.Next(1, ROUTE_BEGINNER.Count));
}
else if (type == INTERMEDIATE)
{
spawnPoint = INTERMEDIATE_SPAWNS.Keys.ToList()[spawnIndex++ % INTERMEDIATE_SPAWNS.Count];
heading = INTERMEDIATE_SPAWNS[spawnPoint];
selectedRoute = ROUTE_INTERMEDIATE.GetValueOrDefault(random.Next(1, ROUTE_INTERMEDIATE.Count));
}
if (selectedRoute.Count is 0)
{
Console.WriteLine($"[ERROR:BUSJOB] Player {player.Name} has empty route Vector3 List.");
return;
}
if (spawnPoint is null)
{
Console.WriteLine($"[ERROR:BUSJOB] Player {player.Name} has empty spawn point.");
return;
}
Vehicle vehicle = NAPI.Vehicle.CreateVehicle(getPlayerJobVehicle(type), spawnPoint, heading, 124, 0, "JOB");
vehicle.NumberPlate = "JOB-" + vehicle.Id;
if (vehicle is null)
{
Console.WriteLine($"[ERROR:BUSJOB] Player {player.Name} got no Vehicle set.");
return;
}
if (!playerRouteCurrent.ContainsKey(player.Name))
playerRouteCurrent.Add(player.Name, new List<Vector3>());
playerRouteCurrent[player.Name] = selectedRoute;
if (playerVehiclePair.ContainsKey(player))
{
if (playerVehiclePair[player] != null)
playerVehiclePair[player].Delete();
playerVehiclePair.Remove(player);
}
playerVehiclePair.Add(player, vehicle);
player.SetIntoVehicle(vehicle.Handle, 0);
CheckPointHandle.StartCheckPointRoute(player, selectedRoute, 0, CHECKPOINT_MARKER_ID, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
}
public static void payWage(Player jobber, int wage)
{
using (var dbContext = new DatabaseContext())
@@ -277,64 +264,113 @@ namespace ReallifeGamemode.Server.Job
}
}
[RemoteEvent("PilotLetzterCheckpoint")]
public static void PilotLetzterCheckpoint(Player player)
public string getPlayerRouteType(Player player)
{
PilotJob c = new PilotJob();
Vehicle v = player.Vehicle;
c.StartPilotRoute(player, "RouteStart");
/*if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 1)
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;
return "none";
}
public int getSkillFromType(string type)
{
if (type == BEGINNER)
return SKILL_BEGINNER;
else if (type == INTERMEDIATE)
return SKILL_INTERMEDIATE;
return -1;
}
public override void LastCheckpoint(Player player)
{
string type = getPlayerRouteType(player);
int skill = getSkillFromType(type);
if (skill == -1)
{
Random rnd = new Random();
int rroute = rnd.Next(1, 4);
switch (rroute)
{
case 1:
{
c.StartPilotRoute(player, "Route 1");
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 1");
break;
}
case 2:
{
c.StartPilotRoute(player, "Route 2");
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 2");
break;
}
case 3:
{
c.StartPilotRoute(player, "Route 3");
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 2");
break;
}
}
StopJob(player, true);
return;
}
if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 2)
StartPilotRoute(player, skill);
}
public override void StartJobEndTimer(Player player)
{
if (!playerVehiclePair.ContainsKey(player))
return;
if (JobManager.playerTimersJobVehicleRespawn.ContainsKey(player))
{
Random rnd = new Random();
int rroute = rnd.Next(1, 4);
switch (rroute)
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 PilotJobEvents : Script
{
[RemoteEvent("PILOT:InCheckpoint")]
public void PilotInCheckpoint(Player player)
{
if (!PilotJob.playerVehiclePair.ContainsKey(player) || !PilotJob.playerRouteCurrent.ContainsKey(player.Name))
return;
if (PilotJob.playerVehiclePair[player].Model is PilotJob.VEHICLE_BEGINNER)
payWage(player, PilotJob.WAGE_BEGINNER / PilotJob.playerRouteCurrent[player.Name].Count);
else if (PilotJob.playerVehiclePair[player].Model is PilotJob.VEHICLE_INTERMEDIATE)
payWage(player, PilotJob.WAGE_INTERMEDIATE / PilotJob.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.PilotSkill++;
if (user.PilotSkill == BusDriverJob.SKILL_INTERMEDIATE)
{
case 1:
{
c.StartPilotRoute(player, "Route 4");
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 4");
break;
}
case 2:
{
c.StartPilotRoute(player, "Route 5");
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 5");
break;
}
case 3:
{
c.StartPilotRoute(player, "Route 6");
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 6");
break;
}
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!");
}
}*/
dbContext.SaveChanges();
}
}
}
}

View File

@@ -8,6 +8,7 @@ using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Util;
namespace ReallifeGamemode.Server.Job
{
@@ -415,5 +416,45 @@ namespace ReallifeGamemode.Server.Job
}
#endregion zweiSpeieler
public override void LastCheckpoint(Player player)
{
//nothing
}
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], 60000 * 5);
playerTimer.Elapsed += JobTimerElapsed;
JobManager.playerTimersJobVehicleRespawn[player] = playerTimer;
}
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;
}
}
}

View File

@@ -84,15 +84,15 @@ namespace ReallifeGamemode.Server.Job
player.SetData<float>("FareKm", km);
int targetId = player.GetData<int>("Passager");
if (targetId == 0) return;
using (var dbContext = new DatabaseContext())
{
if (player.HasData("hasPassager"))
{
User target = dbContext.Users.Where(u => u.Id == targetId).FirstOrDefault();
player.SendNotification("~r~[Info] ~w~ Dein Kunde hat kein Geld mehr auf der Hand.");
if((target.Handmoney - amount) <= 0)
player.SendNotification("~r~[Info] ~w~ Dein Kunde hat kein Geld mehr auf der Hand.");
if ((target.Handmoney - amount) <= 0)
{
Player targetmoney = PlayerService.GetPlayerByNameOrId(Convert.ToString(targetId));
targetmoney.SendNotification("~r~[Fehler] ~w~ Du hast kein Geld mehr auf der Hand.");
@@ -101,8 +101,8 @@ namespace ReallifeGamemode.Server.Job
targetmoney.TriggerEvent("CLIENT:cancelFareCustomer");
targetmoney.WarpOutOfVehicle();
}
else
{
else
{
target.Handmoney -= amount;
player.GetUser(dbContext).Wage += amount;
dbContext.SaveChanges();
@@ -123,11 +123,10 @@ namespace ReallifeGamemode.Server.Job
public static void UpdateFare()
{
foreach (var player in GetPlayerInJob())
{
User u = player.GetUser();
if(u == null)
if (u == null)
{
continue;
}
@@ -157,5 +156,26 @@ namespace ReallifeGamemode.Server.Job
}
}
}
public override void LastCheckpoint(Player player)
{
//nothing
}
public override void StartJobEndTimer(Player player)
{
//nothing
}
public override bool CheckVehicle(Player player, Vehicle vehicle)
{
if (!playerVehiclePair.ContainsKey(player))
return false;
if (playerVehiclePair[player] == vehicle)
return true;
return false;
}
}
}