diff --git a/ReallifeGamemode.Client/Interaction/elevator.ts b/ReallifeGamemode.Client/Interaction/elevator.ts index d61c7d26..99220cd7 100644 --- a/ReallifeGamemode.Client/Interaction/elevator.ts +++ b/ReallifeGamemode.Client/Interaction/elevator.ts @@ -32,6 +32,7 @@ export default function elevatorList(globalData: IGlobalData) { globalData.InMenu = true; stages = JSON.parse(stagesArr); + stage = stages[0]; elevatorMenu = new Menu("Aufzug", "", new Point(0, screenRes.y / 3), null, null); diff --git a/ReallifeGamemode.Client/Interaction/interactionmenu.ts b/ReallifeGamemode.Client/Interaction/interactionmenu.ts index 2efdd786..d25fea1f 100644 --- a/ReallifeGamemode.Client/Interaction/interactionmenu.ts +++ b/ReallifeGamemode.Client/Interaction/interactionmenu.ts @@ -362,24 +362,24 @@ export default function (globalData: IGlobalData) { var busLevel; if (jobdata.pilotskill >= 300) { - pilotLevel = 2; + pilotLevel = "Fortgeschrittener"; } else { - pilotLevel = 1; + pilotLevel = "Anfänger"; } if (jobdata.busskill >= 800) { - busLevel = 3; + busLevel = "Profi"; } else if (jobdata.busskill >= 300) { - busLevel = 2; + busLevel = "Fortgeschrittener"; } else { - busLevel = 1; + busLevel = "Anfänger"; } var actJobItem = new UIMenuItem("Aktueller Job:"); actJobItem.SetRightLabel(jobdata.job) jobMenu.AddItem(actJobItem); - var pilotSkillItem = new UIMenuItem("Pilot Skill (LVL " + pilotLevel + ")"); + var pilotSkillItem = new UIMenuItem("Pilot Skill (" + pilotLevel + ")"); switch (pilotLevel) { case 1: pilotSkillItem.SetRightLabel(jobdata.pilotskill + "/300") @@ -390,7 +390,7 @@ export default function (globalData: IGlobalData) { } jobMenu.AddItem(pilotSkillItem); - var busSkillItem = new UIMenuItem("Bus Skill (LVL " + busLevel + ")"); + var busSkillItem = new UIMenuItem("Bus Skill (" + busLevel + ")"); switch (busLevel) { case 1: busSkillItem.SetRightLabel(jobdata.busskill + "/300") diff --git a/ReallifeGamemode.Client/Jobs/BusRouteSelect.ts b/ReallifeGamemode.Client/Jobs/BusRouteSelect.ts index c280c7ee..d6f144e8 100644 --- a/ReallifeGamemode.Client/Jobs/BusRouteSelect.ts +++ b/ReallifeGamemode.Client/Jobs/BusRouteSelect.ts @@ -32,7 +32,7 @@ export default function busRouteList(globalData: IGlobalData) { skillSelect = ["Anfänger", "Fortgeschrittener", "Profi"]; routeMenu = new Menu("Bus Job", "", new Point(0, screenRes.y / 3), null, null); - routeMenu.AddItem(new UIMenuListItem("Skill wählen", "", new ItemsCollection(skillSelect))); + routeMenu.AddItem(new UIMenuListItem("Route wählen", "", new ItemsCollection(skillSelect))); routeMenu.AddItem(sendItem); routeMenu.AddItem(cancelItem); @@ -49,10 +49,21 @@ export default function busRouteList(globalData: IGlobalData) { routeMenu.ItemSelect.on((item) => { if (item.Text === "Starten") { + if (routeSelect == skillSelect[1] && skill < 300) { + mp.game.audio.playSoundFrontend(1, "Hack_Failed", "DLC_HEIST_BIOLAB_PREP_HACKING_SOUNDS", true); + return; + } + if (routeSelect == skillSelect[2] && skill < 800) { + mp.game.audio.playSoundFrontend(1, "Hack_Failed", "DLC_HEIST_BIOLAB_PREP_HACKING_SOUNDS", true); + return; + } + mp.events.callRemote("CLIENT:StartBusRoute", routeSelect); routeMenu.Close(); globalData.InMenu = false; } else if (item.Text === "Abbrechen") { + mp.events.callRemote("CLIENT:Job_StopJob"); + routeMenu.Close(); globalData.InMenu = false; } diff --git a/ReallifeGamemode.Server/Commands/AdminCommands.cs b/ReallifeGamemode.Server/Commands/AdminCommands.cs index f6a425a6..cc07d242 100644 --- a/ReallifeGamemode.Server/Commands/AdminCommands.cs +++ b/ReallifeGamemode.Server/Commands/AdminCommands.cs @@ -474,7 +474,8 @@ namespace ReallifeGamemode.Server.Commands string adminPlayername = NAPI.Player.GetPlayerName(player); ChatService.SendMessage(target, "~r~KICKINFO: ~w~Du wurdest von " + adminPlayername + " vom Server gekickt: " + reason); - NAPI.Task.Run(() => { + NAPI.Task.Run(() => + { target.Kick(); }, 2500); @@ -790,7 +791,8 @@ namespace ReallifeGamemode.Server.Commands ChatService.SendMessage(target, "~r~KICKINFO: ~w~Du wurdest von " + adminPlayername + " vom Server gekickt: " + reason); - NAPI.Task.Run(() => { + NAPI.Task.Run(() => + { target.Kick(); }, 2500); @@ -852,7 +854,7 @@ namespace ReallifeGamemode.Server.Commands } [Command("ban", "~m~Benutzung: ~s~/ban [User] [Grund] [Zeit in Minuten(0 für Permanent)]", GreedyArg = true)] - public void CmdAdminBan(Player admin, string user, string reason, int mins = 0) + public void CmdAdminBan(Player admin, string user, string reason, string strmins = "0") { if (!admin.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) { @@ -860,6 +862,12 @@ namespace ReallifeGamemode.Server.Commands return; } + if (!int.TryParse(strmins, out int mins) && mins < 0) + { + ChatService.ErrorMessage(admin, "Ungültige Zeitangabe"); + return; + } + Player target = PlayerService.GetPlayerByNameOrId(user); if (target == null || !target.IsLoggedIn()) @@ -886,7 +894,8 @@ namespace ReallifeGamemode.Server.Commands ChatService.SendMessage(target, banMessage); - NAPI.Task.Run(() => { + NAPI.Task.Run(() => + { target.GetUser().BanPlayer(admin, reason, mins); }, 2500); } diff --git a/ReallifeGamemode.Server/Events/Key.cs b/ReallifeGamemode.Server/Events/Key.cs index 70012ea6..2d5761fb 100644 --- a/ReallifeGamemode.Server/Events/Key.cs +++ b/ReallifeGamemode.Server/Events/Key.cs @@ -233,60 +233,58 @@ namespace ReallifeGamemode.Server.Events if (nearestBehindVehiclePoint != null) { if (player.HasAttachment("ammobox")) return; - using (var dbContext = new DatabaseContext()) + using var dbContext = new DatabaseContext(); + List vehicleItems = dbContext.VehicleItems.ToList().Where(f => f.GetVehicle().GetVehicle() == nearestBehindVehiclePoint.vehicle && InventoryManager.GetItemById(f.ItemId) is IWeaponDealItem).ToList(); + if (vehicleItems.Count == 0) { - List vehicleItems = dbContext.VehicleItems.ToList().Where(f => f.GetVehicle().GetVehicle() == nearestBehindVehiclePoint.vehicle && InventoryManager.GetItemById(f.ItemId) is IWeaponDealItem).ToList(); - if (vehicleItems.Count == 0) + GTANetworkAPI.Vehicle vehicle = nearestBehindVehiclePoint.vehicle; + + if (vehicle.HasAttachment("weapondeal")) { - GTANetworkAPI.Vehicle vehicle = nearestBehindVehiclePoint.vehicle; - - if (vehicle.HasAttachment("weapondeal")) - { - vehicle.AddAttachment("weapondeal", true); - vehicle.AddAttachment("weapondeal1", true); - vehicle.AddAttachment("weapondeal2", true); - } - - if (WeaponDealManager.checkWeaponDbyVehicle(vehicle)) - { - vehicle.ResetData("WeaponDealLoad"); - vehicle.ResetData("weaponDeal"); - vehicle.ResetData("dealPoint"); - } - - nearestBehindVehiclePoint.vehicle.RemoveMarkerBehind(); - - return; + vehicle.AddAttachment("weapondeal", true); + vehicle.AddAttachment("weapondeal1", true); + vehicle.AddAttachment("weapondeal2", true); } - foreach (var v in vehicleItems) + + if (WeaponDealManager.checkWeaponDbyVehicle(vehicle)) { - int itemToAdd = 0; - for (int i = 1; i <= v.Amount; i++) + vehicle.ResetData("WeaponDealLoad"); + vehicle.ResetData("weaponDeal"); + vehicle.ResetData("dealPoint"); + } + + nearestBehindVehiclePoint.vehicle.RemoveMarkerBehind(); + + return; + } + foreach (var v in vehicleItems) + { + int itemToAdd = 0; + for (int i = 1; i <= v.Amount; i++) + { + if (InventoryManager.GetUserInventoryWeight(player) + (i * InventoryManager.GetItemById(v.ItemId).Gewicht) > 40000) { - if (InventoryManager.GetUserInventoryWeight(player) + (i * InventoryManager.GetItemById(v.ItemId).Gewicht) > 40000) - { - break; - } - else - { - itemToAdd = i; - } - } - if (itemToAdd == 0) break; - - v.Amount -= itemToAdd; - if (v.Amount <= 0) - { - itemToAdd += v.Amount; - dbContext.VehicleItems.Remove(v); } - - InventoryManager.AddItemToInventory(player, v.ItemId, itemToAdd); - nearestBehindVehiclePoint.usePoint(player); - dbContext.SaveChanges(); - return; + else + { + itemToAdd = i; + } } + if (itemToAdd == 0) + break; + + v.Amount -= itemToAdd; + if (v.Amount <= 0) + { + itemToAdd += v.Amount; + dbContext.VehicleItems.Remove(v); + } + + InventoryManager.AddItemToInventory(player, v.ItemId, itemToAdd); + nearestBehindVehiclePoint.usePoint(player); + dbContext.SaveChanges(); + return; } } if (nearestDuty != null)// Duty Point @@ -553,57 +551,31 @@ namespace ReallifeGamemode.Server.Events { if (player.Vehicle != null) return; Job.JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1); - JobManager jobb = new JobManager(); - if (nearestJobPoint.jobId != 3 && nearestJobPoint.jobId == player.GetUser().JobId) + JobManager jobManager = new JobManager(); + if (nearestJobPoint.jobId == player.GetUser().JobId) { if (job.GetUsersInJob().Contains(player)) { - jobb.StopJob(player); + jobManager.StopJob(player); return; } if (!job.GetUsersInJob().Contains(player)) { - jobb.StartJobEvent(player); - player.TriggerEvent("renderTextOnScreen", "Steige nun in eines der Fahrzeuge und starte den Motor mit der Taste 'N'."); - return; - } - } - else if (nearestJobPoint.jobId == 3 && player.GetUser().JobId == 3) - { - if (nearestJobPoint.Skill < 300 && player.GetUser().PilotSkill >= 0) - { - if (job.GetUsersInJob().Contains(player)) + if (player.GetUser().JobId == 3) { - player.SetData("PilotenBase", 1); - jobb.StopJob(player); - return; + if (nearestJobPoint.Skill > user.PilotSkill) + { + player.SendChatMessage("~y~[JOB] ~r~Dein Skilllevel ist noch zu niedrig."); + return; + } + jobManager.StartJobEvent(player); + job.StartJob(player); + JobManager.GetJob().StartPilotRoute(player, nearestJobPoint.Skill); } - if (!job.GetUsersInJob().Contains(player)) + else { - player.SetData("PilotenBase", 1); - jobb.StartJobEvent(player); - player.TriggerEvent("renderTextOnScreen", "Steige nun in eines der Flugzeuge und starte den Motor mit der Taste 'N'."); - return; + jobManager.StartJobEvent(player); } - } - if (nearestJobPoint.Skill >= 300 && player.GetUser().PilotSkill >= 300) - { - if (job.GetUsersInJob().Contains(player)) - { - player.SetData("PilotenBase", 2); - jobb.StopJob(player); - return; - } - if (!job.GetUsersInJob().Contains(player)) - { - player.SetData("PilotenBase", 2); - jobb.StartJobEvent(player); - player.TriggerEvent("renderTextOnScreen", "Steige nun in eines der Flugzeuge und starte den Motor mit der Taste 'N'."); - return; - } - } - { - player.SendChatMessage("~y~[JOB] ~r~Dein Skilllevel ist noch zu niedrig."); return; } } @@ -850,88 +822,6 @@ namespace ReallifeGamemode.Server.Events player.SendNotification("~y~[JOB] ~w~Du musst den Job vorher starten!"); return; } - else - { - /*if(player.IsAdminDuty()) - { - player.SendChatMessage(""); - }*/ - if (jV.JobId == 3 && player.GetUser().JobId == 3 && jV.GetJob().GetUsersInJob().Contains(player)) - { - Job.PilotJob c = new Job.PilotJob(); - if ((VehicleHash)jV.Model == VehicleHash.Cuban800 && !state) - { - if (!player.HasData("HatRoute") || player.GetData("HatRoute") == false) - { - player.SetData("HatRoute", true); - c.StartPilotRoute(player, "RouteStart"); - } - } - if ((VehicleHash)jV.Model == VehicleHash.Velum && !state || (VehicleHash)jV.Model == VehicleHash.Velum2 && !state) - { - if (player.GetUser().PilotSkill >= 300) - { - if (!player.HasData("HatRoute") || player.GetData("HatRoute") == false) - { - player.SetData("HatRoute", true); - c.StartPilotRoute(player, "RouteStart"); - } - } - else - { - player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(2) "); - return; - } - } - } - if (jV.JobId == 4 && player.GetUser().JobId == 4 && jV.GetJob().GetUsersInJob().Contains(player)) - { - Job.BusDriverJob c = new Job.BusDriverJob(); - if ((VehicleHash)jV.Model == VehicleHash.Bus && !state) - { - if (!player.HasData("HatRoute") || player.GetData("HatRoute") == false) - { - player.SetData("HatRoute", true); - c.StartBusRoute(player, "RouteStart"); - player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45); - } - } - if ((VehicleHash)jV.Model == VehicleHash.Coach && !state) - { - if (player.GetUser().BusSkill >= 300) - { - if (!player.HasData("HatRoute") || player.GetData("HatRoute") == false) - { - player.SetData("HatRoute", true); - c.StartBusRoute(player, "RouteStart"); - player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45); - } - } - else - { - player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(2) "); - return; - } - } - if ((VehicleHash)jV.Model == VehicleHash.Tourbus && !state) - { - if (player.GetUser().BusSkill >= 800) - { - if (!player.HasData("HatRoute") || player.GetData("HatRoute") == false) - { - player.SetData("HatRoute", true); - c.StartBusRoute(player, "RouteStart"); - player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45); - } - } - else - { - player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(3) "); - return; - } - } - } - } } } else if (sV is UserVehicle uV) diff --git a/ReallifeGamemode.Server/Events/Vehicle.cs b/ReallifeGamemode.Server/Events/Vehicle.cs index c336fe3f..263b8f8a 100644 --- a/ReallifeGamemode.Server/Events/Vehicle.cs +++ b/ReallifeGamemode.Server/Events/Vehicle.cs @@ -77,88 +77,6 @@ namespace ReallifeGamemode.Server.Events player.SendNotification("~y~[JOB] ~w~Du musst den Job vorher starten!"); return; } - else - { - /*if(player.IsAdminDuty()) - { - player.SendChatMessage(""); - }*/ - if (jV.JobId == 3 && player.GetUser().JobId == 3 && jV.GetJob().GetUsersInJob().Contains(player)) - { - Job.PilotJob c = new Job.PilotJob(); - if ((VehicleHash)jV.Model == VehicleHash.Cuban800 && !state) - { - if (!player.HasData("HatRoute") || player.GetData("HatRoute") == false) - { - player.SetData("HatRoute", true); - c.StartPilotRoute(player, "RouteStart"); - } - } - if ((VehicleHash)jV.Model == VehicleHash.Velum && !state || (VehicleHash)jV.Model == VehicleHash.Velum2 && !state) - { - if (player.GetUser().PilotSkill >= 300) - { - if (!player.HasData("HatRoute") || player.GetData("HatRoute") == false) - { - player.SetData("HatRoute", true); - c.StartPilotRoute(player, "RouteStart"); - } - } - else - { - player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(2) "); - return; - } - } - } - if (jV.JobId == 4 && player.GetUser().JobId == 4 && jV.GetJob().GetUsersInJob().Contains(player)) - { - Job.BusDriverJob c = new Job.BusDriverJob(); - if ((VehicleHash)jV.Model == VehicleHash.Bus && !state) - { - if (!player.HasData("HatRoute") || player.GetData("HatRoute") == false) - { - player.SetData("HatRoute", true); - c.StartBusRoute(player, "RouteStart"); - player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45); - } - } - if ((VehicleHash)jV.Model == VehicleHash.Coach && !state) - { - if (player.GetUser().BusSkill >= 300) - { - if (!player.HasData("HatRoute") || player.GetData("HatRoute") == false) - { - player.SetData("HatRoute", true); - c.StartBusRoute(player, "RouteStart"); - player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45); - } - } - else - { - player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(2) "); - return; - } - } - if ((VehicleHash)jV.Model == VehicleHash.Tourbus && !state) - { - if (player.GetUser().BusSkill >= 800) - { - if (!player.HasData("HatRoute") || player.GetData("HatRoute") == false) - { - player.SetData("HatRoute", true); - c.StartBusRoute(player, "RouteStart"); - player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45); - } - } - else - { - player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(3) "); - return; - } - } - } - } } } else if (sV is UserVehicle uV) @@ -170,7 +88,6 @@ namespace ReallifeGamemode.Server.Events } } VehicleStreaming.SetEngineState(v, !state); - } } @@ -227,8 +144,8 @@ namespace ReallifeGamemode.Server.Events { ServerVehicle carlocked = v.GetServerVehicle(dbContext); - if(state == true) - { + if (state == true) + { carlocked.Locked = true; dbContext.SaveChanges(); } @@ -238,7 +155,7 @@ namespace ReallifeGamemode.Server.Events dbContext.SaveChanges(); } } - player.SendNotification(msg); + player.SendNotification(msg); } else if (!player.IsInVehicle) { diff --git a/ReallifeGamemode.Server/Job/BusDriverJob.cs b/ReallifeGamemode.Server/Job/BusDriverJob.cs index 3f6ca06c..ade16983 100644 --- a/ReallifeGamemode.Server/Job/BusDriverJob.cs +++ b/ReallifeGamemode.Server/Job/BusDriverJob.cs @@ -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 playerBusPair = new Dictionary(); - public static Dictionary> playerRoutePair = new Dictionary>(); - 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> playerRoutePair1 = new Dictionary>(); //skill 1 + public static Dictionary> playerRoutePair2 = new Dictionary>(); //skill 2 + public static Dictionary> playerRoutePair3 = new Dictionary>(); //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> playerRouteCurrent = new Dictionary>(); - 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() { - 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() { - 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() { - 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() { - 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() { - 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() { - 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() { - 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() { - 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() { - 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() { - 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() { - 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 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 selectedRoute = new List(); - 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("LastVehicle"); - JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1); - if (LastVehicle.GetServerVehicle() is JobVehicle vehJ) - { - if (LastVehicle.GetData("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("isDead") == false) - { - if (player.GetUser().JobId == 3)//Pilot - { - if (!player.HasData("PilotenBase") || player.GetData("PilotenBase") == 1) //Sandyshores - { - player.Position = new Vector3(1707.2711181640625, 3276.216064453125, 41.155494689941406); - player.Heading = (-154.65234375f); - } - if (player.HasData("PilotenBase") && player.GetData("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 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(); + StartBusRoute(player, type); }, delayTime: 10000); + + if (!player.IsInVehicle || player.VehicleSeat != 0) return; + Vehicle veh = player.Vehicle; + if (!(veh.GetData("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") 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("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(); + + dbContext.SaveChanges(); + } } } } diff --git a/ReallifeGamemode.Server/Job/JobBase.cs b/ReallifeGamemode.Server/Job/JobBase.cs index 325c4cb2..dae4f86b 100644 --- a/ReallifeGamemode.Server/Job/JobBase.cs +++ b/ReallifeGamemode.Server/Job/JobBase.cs @@ -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 _inJob = new List(); private static readonly List jobPlayer = new List(); + public static Dictionary playerVehiclePair = new Dictionary(); + 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 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 GetPlayerInJob() => jobPlayer; diff --git a/ReallifeGamemode.Server/Job/PilotJob.cs b/ReallifeGamemode.Server/Job/PilotJob.cs index 5f17ac4b..39fb7149 100644 --- a/ReallifeGamemode.Server/Job/PilotJob.cs +++ b/ReallifeGamemode.Server/Job/PilotJob.cs @@ -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> playerRouteCurrent = new Dictionary>(); + + 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 Skill1Route1 = new List//Pilot_Skill_1_Route_1 + private readonly Dictionary BEGINNER_SPAWNS = new Dictionary { - 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 Skill1Route2 = new List//Pilot_Skill_1_Route_2 + private readonly Dictionary INTERMEDIATE_SPAWNS = new Dictionary() { - 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 Skill1Route3 = new List//Pilot_Skill_1_Route_3 - { - new Vector3(-850.61, 2181.98, 429.67), - }.AsReadOnly(); + //124 0 Velum - private readonly IReadOnlyCollection Skill2Route1 = new List//Pilot_Skill_2_Route_1 + private readonly Dictionary> ROUTE_BEGINNER = new Dictionary>//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() + { + //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() + { + //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 Skill2Route2 = new List//Pilot_Skill_2_Route_2 + private readonly Dictionary> ROUTE_INTERMEDIATE = new Dictionary> { - 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 Skill2Route3 = new List//Pilot_Skill_2_Route_3 - { - new Vector3(-710.89, -1836.81, 355.46), - }.AsReadOnly(); + { 1, + new List() + { + 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() + { + 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 listRouteTexts = new List(); - List listRouteTexts2 = new List(); + 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 selectedRoute = new List(); + Random random = new Random(); + Vector3 spawnPoint = null; + float heading = 0; + + if (type == BEGINNER) { - if (type == "RouteStart") - { - if (player.HasData("PilotenBase") && player.GetData("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("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()); + + 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("PilotenBase") == 1) + if (!playerRouteCurrent.ContainsKey(player.Name)) + return "none"; + + List 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("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("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(); + } } } } diff --git a/ReallifeGamemode.Server/Job/RefuseCollectorJob.cs b/ReallifeGamemode.Server/Job/RefuseCollectorJob.cs index 8ed29f14..b970da03 100644 --- a/ReallifeGamemode.Server/Job/RefuseCollectorJob.cs +++ b/ReallifeGamemode.Server/Job/RefuseCollectorJob.cs @@ -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("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; + } } } diff --git a/ReallifeGamemode.Server/Job/TaxiDriverJob.cs b/ReallifeGamemode.Server/Job/TaxiDriverJob.cs index db034056..4a0666e5 100644 --- a/ReallifeGamemode.Server/Job/TaxiDriverJob.cs +++ b/ReallifeGamemode.Server/Job/TaxiDriverJob.cs @@ -84,15 +84,15 @@ namespace ReallifeGamemode.Server.Job player.SetData("FareKm", km); int targetId = player.GetData("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; + } } } diff --git a/ReallifeGamemode.Server/Managers/JobManager.cs b/ReallifeGamemode.Server/Managers/JobManager.cs index 9cfe6ae4..2201ff66 100644 --- a/ReallifeGamemode.Server/Managers/JobManager.cs +++ b/ReallifeGamemode.Server/Managers/JobManager.cs @@ -19,7 +19,7 @@ namespace ReallifeGamemode.Server.Managers { private static List _jobs = new List(); - private Dictionary playerJobStartPosition = new Dictionary(); + public static Dictionary playerJobStartPosition = new Dictionary(); public static void LoadJobs() { @@ -160,68 +160,15 @@ namespace ReallifeGamemode.Server.Managers if (u.JobId == null) return; - JobBase job = GetJob(u.JobId.Value); - if (veh.GetServerVehicle() is JobVehicle vehJ && player.VehicleSeat == 0) - { - if (vehJ.GetJob().GetUsersInJob().Contains(player)) - { - if (u.JobId != 2) - { - if (!player.HasData("JobVehicleFrei") || player.GetData("JobVehicleFrei") == false) - { - player.SetData("DelayTime", 30000); - veh.SetData("timerJobVehicleRespawn", true); - player.SetData("LastVehicle", veh); - player.SetData("LastSVehicle", sVeh); - if (playerTimersJobVehicleRespawn.ContainsKey(player)) - { - playerTimersJobVehicleRespawn[player].Stop(); - } - PlayerTimer playerTimer = new PlayerTimer(player, veh, 30000); - playerTimer.Elapsed += PlayerTimer_Elapsed; - 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!"); - //job.StopJob(player); - return; - } - if (player.HasData("JobVehicleFrei") && player.GetData("JobVehicleFrei") == true) - { - player.SetData("JobVehicleFrei", false); - return; - } - } - if (u.JobId == 2) - { - if (!player.HasData("JobVehicleFrei") || player.GetData("JobVehicleFrei") == false) - { - player.SetData("DelayTime", 60000 * 5); - veh.SetData("timerJobVehicleRespawn", true); - player.SetData("LastVehicle", veh); - player.SetData("LastSVehicle", sVeh); - if (playerTimersJobVehicleRespawn.ContainsKey(player)) - { - playerTimersJobVehicleRespawn[player].Stop(); - } - PlayerTimer playerTimer = new PlayerTimer(player, veh, 60000 * 5); - playerTimer.Elapsed += PlayerTimer_Elapsed; - 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!"); - //job.StopJob(player); - return; - } - if (player.HasData("JobVehicleFrei") && player.GetData("JobVehicleFrei") == true) - { - player.SetData("JobVehicleFrei", false); - return; - } - } - } - } + JobBase job = GetJob(u.JobId ?? -1); + + if (job == null) + return; + + job.StartJobEndTimer(player); } - private void PlayerTimer_Elapsed(Player player, Vehicle veh) + public void PlayerTimer_Elapsed(Player player, Vehicle veh) { NAPI.Task.Run(() => { @@ -311,44 +258,7 @@ namespace ReallifeGamemode.Server.Managers } job.StopJob(player); - if (player.GetUser().JobId == 1)//Taxifahrer - { - //player.Position = new Vector3(-628.598388671875, -2107.609130859375, 6.072586536407471); - //player.Heading = (-171.50303649902344f); - player.Position = playerJobStartPosition[player]; - } - if (player.GetUser().JobId == 2)//Müllmann - { - player.Position = new Vector3(485.4114685058594, -2173.25, 5.918273448944092); - player.Heading = (-15.922085762023926f); - } - if (player.GetUser().JobId == 3)//Pilot - { - if (player.HasData("PilotenBase") || player.GetData("PilotenBase") == 1) //Sandyshores - { - player.Position = new Vector3(1707.2711181640625, 3276.216064453125, 41.155494689941406); - player.Heading = (-154.65234375f); - player.GetUser().SetData("PilotenBase", 0); - } - if (player.HasData("PilotenBase") && player.GetData("PilotenBase") == 2) //LS Airport - { - player.Position = new Vector3(-1622.48, -3151.58, 13); - player.Heading = (48.44f); - player.GetUser().SetData("PilotenBase", 0); - } - } - if (player.GetUser().JobId == 4)//Busfahrer - { - player.Position = new Vector3(-535.46, -2144.97, 5.95); - player.Heading = (57.03f); - } - Vehicle LastVehicle = player.GetData("LastVehicle"); - if (LastVehicle != null && job.Id != GetJob().Id) - { - LastVehicle.ResetData("timerJobVehicleRespawn"); - ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(LastVehicle); - ServerVehicleExtensions.Spawn(sVeh, LastVehicle); - } + if (playerTimersJobVehicleRespawn.ContainsKey(player)) { playerTimersJobVehicleRespawn[player].Stop(); @@ -360,181 +270,15 @@ namespace ReallifeGamemode.Server.Managers [ServerEvent(Event.PlayerEnterVehicle)] public void JobManagerPlayerEnterVehicle(Player player, Vehicle veh, sbyte seat) { - ServerVehicle sVeh = veh.GetServerVehicle(); - if (sVeh == null) - { - return; - } - - if (seat != 0) - { - if (sVeh is JobVehicle jV && jV.JobId == 1) // Spieler steigt in Taxi ein - { - var taxiJob = JobManager.GetJob(); - - Player driver = veh.GetDriver(); - if (driver == null) - { - return; - } - - if (!driver.HasData("DriverPrice")) return; - int taxiPrice = driver.GetData("DriverPrice"); - float km = 0; - if (!driver.HasData("FareKm")) { driver.SetData("FareKm", km); } - km = driver.GetData("FareKm"); - if (driver.HasData("Passager")) return; - driver.SetData("Passager", player.GetUser().Id); - driver.SetData("hasPassager", true); - /* using (var dbContext = new DatabaseContext()) - { - int amount = (int)Math.Round(km * taxiPrice); - User contractUser = player.GetUser(dbContext); - contractUser.Handmoney -= amount; - driver.GetUser(dbContext).Wage += amount; - dbContext.SaveChanges(); - //contractUser.Player.TriggerEvent("SERVER:SET_HANDMONEY", contractUser.Handmoney); - } */ - player.TriggerEvent("CLIENT:startCustomerFare", taxiPrice, km); - - var taxiContracts = taxiJob.TaxiContracts.Where(t => t.Name == player.Name); - if (taxiContracts.Count() == 0) return; - - var contract = taxiContracts.First(); - taxiJob.TaxiContracts.Remove(contract); - - if (driver != null && contract.Driver != null && contract.Driver.Handle != veh.GetDriver().Handle) - { - ChatService.SendMessage(contract.Driver, $"!{{02FCFF}}{player.Name} ist in ein Taxi eingestiegen, der Auftrag wurde beendet."); - ChatService.SendMessage(player, $"!{{02FCFF}}Du bist in ein Taxi eingestiegen, der Auftrag wurde beendet."); - } - } - } JobBase job = GetJob(player.GetUser().JobId ?? -1); - if (job?.GetUsersInJob()?.Contains(player) ?? false) + + if (job != null && job.GetUsersInJob().Contains(player) && job.CheckVehicle(player, veh) && seat == 0) { - if (sVeh != null) - { - if (sVeh is JobVehicle JV) - { - if (player.GetUser().JobId == 3 || player.GetUser().JobId == 4) - { - if (seat == 0) - { - JobVehicle c = new JobVehicle(); - if (JV.GetJob().GetUsersInJob().Contains(player)) - { - if (!player.HasData("LastVehicle") || player.GetData("LastVehicle") == null) return; - if (player.HasData("LastVehicle") && veh == player.GetData("LastVehicle")) - { - veh.SetData("timerJobVehicleRespawn", false); - if (playerTimersJobVehicleRespawn.ContainsKey(player)) - { - playerTimersJobVehicleRespawn[player].Stop(); - } - } - else - { - if (player.GetData("HatRoute") == true) - { - StopJob(player); - } - } - } - } - else - { - job.StopJob(player); - ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet."); - if (playerTimersJobVehicleRespawn.ContainsKey(player)) - { - playerTimersJobVehicleRespawn[player].Stop(); - } - CheckPointHandle.DeleteCheckpoints(player); - if (!player.HasData("LastVehicle") || player.GetData("LastVehicle") == null) return; - player.GetData("LastVehicle").ResetData("timerJobVehicleRespawn"); - ServerVehicle nsSVeh = VehicleManager.GetServerVehicleFromVehicle(player.GetData("LastVehicle")); - ServerVehicleExtensions.Spawn(nsSVeh, player.GetData("LastVehicle")); - return; - } - } - if (player.GetUser().JobId == 2) - { - JobVehicle c = new JobVehicle(); - if (JV.GetJob().GetUsersInJob().Contains(player)) - { - if (!player.HasData("LastVehicle") || player.GetData("LastVehicle") == null) return; - if (player.HasData("LastVehicle") && veh == player.GetData("LastVehicle")) - { - veh.SetData("timerJobVehicleRespawn", false); - if (playerTimersJobVehicleRespawn.ContainsKey(player)) - { - playerTimersJobVehicleRespawn[player].Stop(); - } - } - else - { - if (player.GetData("HatRoute") == true) - { - StopJob(player); - } - } - } - } - } - else - { - job.StopJob(player); - ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet."); - if (playerTimersJobVehicleRespawn.ContainsKey(player)) - { - playerTimersJobVehicleRespawn[player].Stop(); - } - CheckPointHandle.DeleteCheckpoints(player); - if (!player.HasData("LastVehicle")) - { - return; - } - if (player.GetData("LastVehicle") == null) - { - return; - } - player.GetData("LastVehicle").ResetData("timerJobVehicleRespawn"); - ServerVehicle nsSVeh = VehicleManager.GetServerVehicleFromVehicle(player.GetData("LastVehicle")); - ServerVehicleExtensions.Spawn(nsSVeh, player.GetData("LastVehicle")); - } - } - else if (sVeh! is JobVehicle || veh != null) - { - job.StopJob(player); - ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet."); - if (playerTimersJobVehicleRespawn.ContainsKey(player)) - { - playerTimersJobVehicleRespawn[player].Stop(); - } - CheckPointHandle.DeleteCheckpoints(player); - if (!player.HasData("LastVehicle") || player.GetData("LastVehicle") == null) return; - player.GetData("LastVehicle").ResetData("timerJobVehicleRespawn"); - ServerVehicle nsSVeh = VehicleManager.GetServerVehicleFromVehicle(player.GetData("LastVehicle")); - ServerVehicleExtensions.Spawn(nsSVeh, player.GetData("LastVehicle")); - } - else if (sVeh is JobVehicle JV) - { - if (JV.JobId != player.GetUser().JobId) - { - job.StopJob(player); - ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet."); - if (playerTimersJobVehicleRespawn.ContainsKey(player)) - { - playerTimersJobVehicleRespawn[player].Stop(); - } - CheckPointHandle.DeleteCheckpoints(player); - if (!player.HasData("LastVehicle") || player.GetData("LastVehicle") == null) return; - player.GetData("LastVehicle").ResetData("timerJobVehicleRespawn"); - ServerVehicle nsSVeh = VehicleManager.GetServerVehicleFromVehicle(player.GetData("LastVehicle")); - ServerVehicleExtensions.Spawn(nsSVeh, player.GetData("LastVehicle")); - } - } + if (!playerTimersJobVehicleRespawn.ContainsKey(player)) + return; + + playerTimersJobVehicleRespawn[player].Stop(); + playerTimersJobVehicleRespawn.Remove(player); } } @@ -559,29 +303,7 @@ namespace ReallifeGamemode.Server.Managers [ServerEvent(Event.PlayerExitVehicle)] public void JobManagerPlayerExitVehicle2(Player player, Vehicle veh) { - ServerVehicle sVeh = veh.GetServerVehicle(); - if (sVeh == null) return; - if (sVeh is JobVehicle jV && jV.JobId == 1) // Spieler steigt vom Taxi aus - { - var taxiJob = JobManager.GetJob(); - if (veh.Occupants.Count == 0) return; - Player driver = veh.GetDriver(); - if (driver == null) return; - if (player.GetUser().Id != driver.GetData("Passager")) { player.TriggerEvent("CLIENT:cancelFare"); return; } - player.TriggerEvent("CLIENT:cancelFareCustomer"); - driver.TriggerEvent("CLIENT:resetFareClock"); - driver.ResetData("Passager"); - driver.ResetData("hasPassager"); - driver.SetData("FareKm", 0); - driver.TriggerEvent("CLIENT:cancelFare"); - driver.TriggerEvent("CLIENT:startFare"); - foreach (Player occupant in veh.Occupants) - { - if (occupant == driver) continue; - occupant.WarpOutOfVehicle(); - } - } } [RemoteEvent("CLIENT:JobManager_TaxiJob_AcceptCall")] diff --git a/ReallifeGamemode.Server/Managers/PositionManager.cs b/ReallifeGamemode.Server/Managers/PositionManager.cs index 5534a189..4209340f 100644 --- a/ReallifeGamemode.Server/Managers/PositionManager.cs +++ b/ReallifeGamemode.Server/Managers/PositionManager.cs @@ -162,13 +162,17 @@ namespace ReallifeGamemode.Server.Managers { Position = new Vector3(485.4114685058594, -2173.25, 5.918273448944092), jobId = 2, - Skill = 0 + Skill = 0, + eventOnStart = false, + eventName = "" }; JobPoint jobPointPilot = new JobPoint() { Position = new Vector3(1707.2711181640625, 3276.216064453125, 41.155494689941406), jobId = 3, - Skill = 0 + Skill = 0, + eventOnStart = false, + eventName = "" }; JobPoint jobPointPilot2 = new JobPoint() { @@ -392,6 +396,8 @@ public class JobPoint public Vector3 Position { get; set; } public int jobId { get; set; } public int Skill { get; set; } + public bool eventOnStart { get; set; } + public string eventName { get; set; } } public class ElevatorPoint diff --git a/ReallifeGamemode.Server/Util/CheckPointHandle.cs b/ReallifeGamemode.Server/Util/CheckPointHandle.cs index 3b3e0d62..84b93b84 100644 --- a/ReallifeGamemode.Server/Util/CheckPointHandle.cs +++ b/ReallifeGamemode.Server/Util/CheckPointHandle.cs @@ -3,6 +3,7 @@ using System.Linq; using GTANetworkAPI; using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Job; +using ReallifeGamemode.Server.Managers; namespace ReallifeGamemode.Server.Util { @@ -14,8 +15,6 @@ namespace ReallifeGamemode.Server.Util public static void DeleteCheckpoints(Player player) { - player.SetData("HatRoute", false); - player.ResetData("Route"); RemovePlayerHandlerFromList(player); player.TriggerEvent("destroyCP"); } @@ -27,232 +26,20 @@ namespace ReallifeGamemode.Server.Util playerHandle.DeleteCheckpoints(); listHandle.Add(playerHandle); - player.ResetData("Route"); playerHandle.StartRoute(); - - player.SetData("HatRoute", true); - /*if(player.GetUser().BusSkill >= 1000) - { - playerHandle.LastCheckpoint = 2; - }*/ } public static void RemovePlayerHandlerFromList(this Player player) { - CheckPointListForPlayer temp = null; for (int a = 0; a < listHandle.Count; a++) { - temp = listHandle[a]; + CheckPointListForPlayer temp = listHandle[a]; if (temp.player == player) { listHandle.Remove(temp); } } } - - #region delete - - /* - [RemoteEvent("playerWaitsInCheckpoint")] - public void PlayerWaitsInCheckpoint(Player user) - { - if (user.GetUser().JobId == 4) - { - Job.JobBase job = Managers.JobManager.GetJob(user.GetUser().JobId ?? -1); - if (job.GetUsersInJob().Contains(user)) - { - if (!user.IsInVehicle || user.VehicleSeat != 0) return; - Vehicle veh = user.Vehicle; - user.TriggerEvent("CLIENT:FreezeVehicle", veh); - user.TriggerEvent("CLIENT:UnFreezeVehicle", veh); - user.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AnfahrtHaltestelle", "wav", 50); - if ((VehicleHash)veh.Model == VehicleHash.Bus) - { - user.TriggerEvent("CLIENT:SetDoorOpen", 0, false, false); - user.TriggerEvent("CLIENT:SetDoorOpen", 1, false, false); - user.TriggerEvent("CLIENT:SetDoorOpen", 2, false, false); - user.TriggerEvent("CLIENT:SetDoorOpen", 3, false, false); - user.TriggerEvent("CLIENT:SetDoorOpen", 0, false, false); - NAPI.Task.Run(() => - { - BusCheckpoint(user); - }, delayTime: 3600); - } - if ((VehicleHash)veh.Model == VehicleHash.Coach) - { - user.TriggerEvent("CLIENT:SetDoorOpen", 0, false, false); - NAPI.Task.Run(() => - { - BusCheckpoint(user); - }, delayTime: 2800); - } - if ((VehicleHash)veh.Model == VehicleHash.Tourbus) - { - user.TriggerEvent("CLIENT:SetDoorOpen", 2, false, false); - user.TriggerEvent("CLIENT:SetDoorOpen", 3, false, false); - NAPI.Task.Run(() => - { - BusCheckpoint(user); - }, delayTime: 3250); - } - if (!(veh.GetData("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.25); - }, delayTime: 500); - NAPI.Task.Run(() => - { - veh.Position = private new Vector3(veh.Position.X, veh.Position.Y, veh.Position.Z + 0.1); - - user.TriggerEvent("CLIENT:FreezeVehicle", veh); - }, delayTime: 500); - } - } - } - public static void BusCheckpoint(Player user) -{ - if (!user.IsInVehicle || user.VehicleSeat != 0) return; - Vehicle veh = user.Vehicle; - if ((VehicleHash)veh.Model == VehicleHash.Bus) - { - user.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AbfahrtHaltestelleBus", "wav", 25); - user.TriggerEvent("CLIENT:SetDoorShutDelayed", 0, false, 1850); - user.TriggerEvent("CLIENT:SetDoorShutDelayed", 1, false, 1850); - user.TriggerEvent("CLIENT:SetDoorShutDelayed", 2, false, 1850); - user.TriggerEvent("CLIENT:SetDoorShutDelayed", 3, false, 1850); - user.TriggerEvent("CLIENT:SetDoorShutDelayed", 0, false, 1850); - NAPI.Task.Run(() => - { - user.TriggerEvent("CLIENT:UnFreezeVehicle", veh); - }, delayTime: 1850); - } - if ((VehicleHash)veh.Model == VehicleHash.Coach) - { - user.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AbfahrtHaltestelleCoach", "wav", 35); - user.TriggerEvent("CLIENT:SetDoorShutDelayed", 0, false, 1000); - NAPI.Task.Run(() => - { - user.TriggerEvent("CLIENT:UnFreezeVehicle", veh); - }, delayTime: 1000); - } - if ((VehicleHash)veh.Model == VehicleHash.Tourbus) - { - user.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AbfahrtHaltestelleTourbus", "wav", 25); - user.TriggerEvent("CLIENT:SetDoorShutDelayed", 3, false, 2600); - user.TriggerEvent("CLIENT:SetDoorShutDelayed", 2, false, 2600); - user.TriggerEvent("CLIENT:SetDoorShutDelayed", 3, false, 2600); - NAPI.Task.Run(() => - { - user.TriggerEvent("CLIENT:UnFreezeVehicle", veh); - }, delayTime: 2600); - } - //user.TriggerEvent("CLIENT:UnFreezeVehicle", veh); -} - -[RemoteEvent("playerInCheckpoint")] -public void PlayerInCheckpoint(Player user) -{ - CheckPointListForPlayer temp = null; - for (int a = 0; a < listHandle.Count; a++) - { - temp = listHandle[a]; - if (temp.player == user) - { - break; - } - } - if (temp.LastCheckpoint != 1) - { - Job.JobBase job = Managers.JobManager.GetJob(user.GetUser().JobId ?? -1); - if (job?.GetUsersInJob().Contains(user) ?? false) - { - if (user.GetUser().JobId == 3) - { - if (temp.checkPointsDone == 2) - { - if (user.GetData("Route") == "Skill1Route1" || user.GetData("Route") == "Skill1Route2" || user.GetData("Route") == "Skill1Route3") - { - PilotJob.payWage(user, PilotSkill1RouteVerdienst / temp.list.Count()); - PilotJob.payWage(user, PilotSkill1RouteVerdienst / temp.list.Count()); - } - if (user.GetData("Route") == "Skill2Route1" || user.GetData("Route") == "Skill2Route2" || user.GetData("Route") == "Skill2Route3") - { - PilotJob.payWage(user, PilotSkill2RouteVerdienst / temp.list.Count()); - PilotJob.payWage(user, PilotSkill2RouteVerdienst / temp.list.Count()); - } - } - if (temp.checkPointsDone > 2) - { - if (user.GetData("Route") == "Skill1Route1" || user.GetData("Route") == "Skill1Route2" || user.GetData("Route") == "Skill1Route3") - { - PilotJob.payWage(user, PilotSkill1RouteVerdienst / temp.list.Count()); - } - if (user.GetData("Route") == "Skill2Route1" || user.GetData("Route") == "Skill2Route2" || user.GetData("Route") == "Skill2Route3") - { - PilotJob.payWage(user, PilotSkill2RouteVerdienst / temp.list.Count()); - } - } - //PilotJob.payWage(user, 100); - } - if (user.GetUser().JobId == 4) - { - if (temp.checkPointsDone == 2) - { - if (user.GetData("Route") == "Skill1Route1" || user.GetData("Route") == "Skill1Route2" || user.GetData("Route") == "Skill1Route3" || user.GetData("Route") == "Skill1Route4") - { - BusDriverJob.payWage(user, BusSkill1RouteVerdienst / temp.list.Count()); - BusDriverJob.payWage(user, BusSkill1RouteVerdienst / temp.list.Count()); - } - if (user.GetData("Route") == "Skill2Route1" || user.GetData("Route") == "Skill2Route2" || user.GetData("Route") == "Skill2Route3" || user.GetData("Route") == "Skill2Route4") - { - BusDriverJob.payWage(user, BusSkill2RouteVerdienst / temp.list.Count()); - BusDriverJob.payWage(user, BusSkill2RouteVerdienst / temp.list.Count()); - } - if (user.GetData("Route") == "Skill3Route1" || user.GetData("Route") == "Skill3Route2" || user.GetData("Route") == "Skill3Route3" || user.GetData("Route") == "Skill3Route4") - { - BusDriverJob.payWage(user, BusSkill3RouteVerdienst / temp.list.Count()); - BusDriverJob.payWage(user, BusSkill3RouteVerdienst / temp.list.Count()); - } - } - if (temp.checkPointsDone > 2) - { - if (user.GetData("Route") == "Skill1Route1" || user.GetData("Route") == "Skill1Route2" || user.GetData("Route") == "Skill1Route3" || user.GetData("Route") == "Skill1Route4") - { - BusDriverJob.payWage(user, BusSkill1RouteVerdienst / temp.list.Count()); - } - if (user.GetData("Route") == "Skill2Route1" || user.GetData("Route") == "Skill2Route2" || user.GetData("Route") == "Skill2Route3" || user.GetData("Route") == "Skill2Route4") - { - BusDriverJob.payWage(user, BusSkill2RouteVerdienst / temp.list.Count()); - } - if (user.GetData("Route") == "Skill3Route1" || user.GetData("Route") == "Skill3Route2" || user.GetData("Route") == "Skill3Route3" || user.GetData("Route") == "Skill3Route4") - { - BusDriverJob.payWage(user, BusSkill3RouteVerdienst / temp.list.Count()); - } - } - //BusDriverJob.payWage(user, 100); - if (!user.IsInVehicle || user.VehicleSeat != 0) return; - Vehicle veh = user.Vehicle; - if (!(veh.GetData("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); - //BusCheckpoint(user); - } - } - } - else - { - } - temp.NextCheckpoint(); -} -*/ - - #endregion delete } public class CheckPointListForPlayer @@ -305,25 +92,10 @@ public void PlayerInCheckpoint(Player user) LastCheckpoint = 0; CheckPointHandle.RemovePlayerHandlerFromList(this.player); DeleteCheckpoints(); - player.SetData("HatRoute", false); - if (player.GetUser().JobId == 3 && player.HasData("Route")) - { - //PilotJob.payWage(player, 200); - PilotJob.PilotLetzterCheckpoint(player); - } - else if (player.GetUser().JobId == 4 && player.HasData("Route")) - { - //BusDriverJob.payWage(player, 200); - //CheckPointHandle.BusCheckpoint(player); - BusDriverJob.BusLetzterCheckpoint(player); - if (!player.IsInVehicle || player.VehicleSeat != 0) return; - Vehicle veh = player.Vehicle; - if (!(veh.GetData("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); - } + + JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1); + if (job != null && job.GetUsersInJob().Contains(player)) + job.LastCheckpoint(player); } //NAPI.Chat.SendChatMessageToAll($"this.list.Count() = {this.list.Count()}, checkPointsDone = {checkPointsDone}, LastCheckpoint = {LastCheckpoint}"); } @@ -333,4 +105,45 @@ public void PlayerInCheckpoint(Player user) this.player.TriggerEvent("destroyCP"); } } + + public class CheckPointEvents : Script + { + [RemoteEvent("playerWaitsInCheckpoint")] + public void PlayerWaitsInCheckpoint(Player player) + { + JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1); + if (job == null || !job.GetUsersInJob().Contains(player)) + return; + + if (job.Id == JobManager.GetJob().Id) + JobManager.GetJob().AtBusStop(player); + } + + [RemoteEvent("playerInCheckpoint")] + public void PlayerInCheckpoint(Player user) + { + CheckPointListForPlayer temp = null; + for (int a = 0; a < CheckPointHandle.listHandle.Count; a++) + { + temp = CheckPointHandle.listHandle[a]; + if (temp.player == user) + { + break; + } + } + if (temp.LastCheckpoint != 1) + { + if (!user.IsInVehicle || user.VehicleSeat != 0) return; + Vehicle veh = user.Vehicle; + if (!(veh.GetData("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); + //BusCheckpoint(user); + } + + temp.NextCheckpoint(); + } + } }