From 1937846fb29fad833c0f1a1f35740f38b7ea4a3e Mon Sep 17 00:00:00 2001 From: Mac_Slash Date: Mon, 4 May 2020 03:04:44 +0200 Subject: [PATCH] =?UTF-8?q?=C3=84nderung=20Busfahrer/Pilot=20Bugs=20fix=20?= =?UTF-8?q?siehe=20Forenbeitrag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/html/sound/index.html | 2 +- ReallifeGamemode.Client/index.ts | 3 + ReallifeGamemode.Client/npmrunwatch.bat | 1 + ReallifeGamemode.Client/util/checkpoint.ts | 132 +++++-- ReallifeGamemode.Client/util/freeze.ts | 32 ++ .../Commands/AdminCommands.cs | 3 +- ReallifeGamemode.Server/Events/Death.cs | 33 +- ReallifeGamemode.Server/Events/Disconnect.cs | 38 +- .../Events/EnterVehicleAttempt.cs | 14 +- ReallifeGamemode.Server/Events/Key.cs | 19 +- .../Events/ResourceStop.cs | 15 +- ReallifeGamemode.Server/Job/PilotJob.cs | 15 +- .../Managers/DoorManager.cs | 29 +- .../Managers/JobManager.cs | 372 +++++++++--------- .../Util/CheckPointHandle.cs | 14 +- ReallifeGamemode.Server/Util/PlayerTimer.cs | 38 ++ 16 files changed, 498 insertions(+), 262 deletions(-) create mode 100644 ReallifeGamemode.Client/npmrunwatch.bat create mode 100644 ReallifeGamemode.Client/util/freeze.ts create mode 100644 ReallifeGamemode.Server/Util/PlayerTimer.cs diff --git a/ReallifeGamemode.Client/assets/html/sound/index.html b/ReallifeGamemode.Client/assets/html/sound/index.html index 8a8d1b3a..c08cf699 100644 --- a/ReallifeGamemode.Client/assets/html/sound/index.html +++ b/ReallifeGamemode.Client/assets/html/sound/index.html @@ -19,7 +19,7 @@ var sound = new Howl({ src: ['package://assets/sound/' + soundname + '.'+ typ], loop: false, - valume: volume + volume: volume }) sound.play() sound.volume(volume); diff --git a/ReallifeGamemode.Client/index.ts b/ReallifeGamemode.Client/index.ts index cfcc0ab2..b958cd1e 100644 --- a/ReallifeGamemode.Client/index.ts +++ b/ReallifeGamemode.Client/index.ts @@ -173,6 +173,9 @@ vehicleIndicators(); import vehicleDoor from './vehiclesync/door'; vehicleDoor(); +import freeze from './util/freeze'; +freeze(); + import reportList from './Player/reportmenu'; reportList(globalData); diff --git a/ReallifeGamemode.Client/npmrunwatch.bat b/ReallifeGamemode.Client/npmrunwatch.bat new file mode 100644 index 00000000..1798879d --- /dev/null +++ b/ReallifeGamemode.Client/npmrunwatch.bat @@ -0,0 +1 @@ +npm run-watch \ No newline at end of file diff --git a/ReallifeGamemode.Client/util/checkpoint.ts b/ReallifeGamemode.Client/util/checkpoint.ts index 6925eef6..251b5969 100644 --- a/ReallifeGamemode.Client/util/checkpoint.ts +++ b/ReallifeGamemode.Client/util/checkpoint.ts @@ -12,18 +12,21 @@ export default function checkpointHandle(globalData: IGlobalData) { var delayCounter; var markerID; var markerSize; + var useVehicle; var markerDist; var event; var checkPointsDone = 0; var activeBlip = null; + var Leaving = false; - mp.events.add('setCheckPoint', (position, player, checkPointID, nDelay, nMarkerID, nMarkerSize, nMarkerDist, nEvent) => { + mp.events.add('setCheckPoint', (position, player, checkPointID, nDelay, nMarkerID, nMarkerSize, nMarkerDist, nUseVehicle, nEvent) => { inCheckpoint = false; posCp = position; Player = player; delay = nDelay; markerID = nMarkerID; markerSize = nMarkerSize; + useVehicle = nUseVehicle; markerDist = nMarkerDist; delayCounter = 0; checkPointsDone = checkPointID; @@ -62,45 +65,108 @@ export default function checkpointHandle(globalData: IGlobalData) { var pos = posCp; mp.events.callRemote("sendCP", posCp.x, posCp.y, posCp.z); }); - + mp.events.add("playerStartExitVehicle", (vehicle, seat) => { + Leaving = true; + }); + mp.events.add("playerExitVehicle", (vehicle, seat) => { + Leaving = true; + }); + mp.events.add("playerStartLeaveVehicle", (vehicle, seat) => { + Leaving = true; + }); + mp.events.add("playerLeaveVehicle", (vehicle, seat) => { + Leaving = true; + }); + mp.events.add("playerEnterVehicle", (vehicle, seat) => { + Leaving = false; + }); function myTimer() { - let dist = mp.game.gameplay.getDistanceBetweenCoords(Player.position.x, Player.position.y, 0, posCp.x, posCp.y, 0, false); - //mp.gui.chat.push("delay: " + delay + " | delayCounter: " + delayCounter); - if (dist <= markerDist) { + if (useVehicle == true) { + if (Player.isInVehicle && Leaving == false) { - if (!inCheckpoint) { - if (delay != 0) { - massage = "Warte nun " + delay / 1000 +" Sekunden."; - render = true; - textTime = setInterval(ClearText, delay) - } - mp.game.audio.playSoundFrontend(1, "Beep_Red", "DLC_HEIST_HACKING_SNAKE_SOUNDS", true); - mp.events.callRemote("playerWaitsInCheckpoint"); - mp.players.local.freezePosition(true); - } - inCheckpoint = true; - - if (delayCounter >= delay) { - activeCheckpoint.destroy(); - activeBlip.destroy(); - activeBlip = null; - activeCheckpoint = null; - clearInterval(myVar); - mp.events.callRemote("playerInCheckpoint"); - mp.players.local.freezePosition(false); - if (event != "") { - while (checkPointsDone > 10000) { + let dist = mp.game.gameplay.getDistanceBetweenCoords(Player.vehicle.position.x, Player.vehicle.position.y, 0, posCp.x, posCp.y, 0, false); + //mp.gui.chat.push("delay: " + delay + " | delayCounter: " + delayCounter); + if (dist <= markerDist) { + if (!inCheckpoint) { + if (delay != 0) { + massage = "Warte nun " + delay / 1000 + " Sekunden."; + render = true; + textTime = setInterval(ClearText, delay) + } + mp.game.audio.playSoundFrontend(1, "Beep_Red", "DLC_HEIST_HACKING_SNAKE_SOUNDS", true); + mp.events.callRemote("playerWaitsInCheckpoint"); + //mp.players.local.freezePosition(true); } - mp.events.callRemote(event, checkPointsDone); + inCheckpoint = true; + + if (delayCounter >= delay) { + activeCheckpoint.destroy(); + activeBlip.destroy(); + activeBlip = null; + activeCheckpoint = null; + clearInterval(myVar); + mp.events.callRemote("playerInCheckpoint"); + //mp.players.local.freezePosition(false); + if (event != "") { + while (checkPointsDone > 10000) { + + } + mp.events.callRemote(event, checkPointsDone); + } + } else { + delayCounter += 50; + } + } else if (dist > 2) { + inCheckpoint = false; + delayCounter = 0; + mp.gui.chat.push("Läuft."); } - } else { - delayCounter += 50; } - } else if (dist > 2) { - inCheckpoint = false; - delayCounter = 0; + else { + + } + } + if(useVehicle == false) { + + let dist = mp.game.gameplay.getDistanceBetweenCoords(Player.position.x, Player.position.y, 0, posCp.x, posCp.y, 0, false); + //mp.gui.chat.push("delay: " + delay + " | delayCounter: " + delayCounter); + if (dist <= markerDist) { + + if (!inCheckpoint) { + if (delay != 0) { + massage = "Warte nun " + delay / 1000 + " Sekunden."; + render = true; + textTime = setInterval(ClearText, delay) + } + mp.game.audio.playSoundFrontend(1, "Beep_Red", "DLC_HEIST_HACKING_SNAKE_SOUNDS", true); + mp.events.callRemote("playerWaitsInCheckpoint"); + //mp.players.local.freezePosition(true); + } + inCheckpoint = true; + + if (delayCounter >= delay) { + activeCheckpoint.destroy(); + activeBlip.destroy(); + activeBlip = null; + activeCheckpoint = null; + clearInterval(myVar); + mp.events.callRemote("playerInCheckpoint"); + //mp.players.local.freezePosition(false); + if (event != "") { + while (checkPointsDone > 10000) { + + } + mp.events.callRemote(event, checkPointsDone); + } + } else { + delayCounter += 50; + } + } else if (dist > 2) { + inCheckpoint = false; + delayCounter = 0; + } } } diff --git a/ReallifeGamemode.Client/util/freeze.ts b/ReallifeGamemode.Client/util/freeze.ts new file mode 100644 index 00000000..4b654bfb --- /dev/null +++ b/ReallifeGamemode.Client/util/freeze.ts @@ -0,0 +1,32 @@ +export default function freeze() { + mp.events.add("CLIENT:FreezePlayer", (player) => + { + player.freezePosition(true); + }); + mp.events.add("CLIENT:UnFreezePlayer", (player) => { + player.freezePosition(false); + }); + mp.events.add("CLIENT:FreezeVehicle", (veh) => { + if (mp.players.local.isInVehicle) { + veh.freezePosition(true); + } + }); + mp.events.add("CLIENT:UnFreezeVehicle", (veh) => { + if (mp.players.local.isInVehicle) { + veh.freezePosition(false); + } + }); + mp.events.add("CLIENT:Freeze", (player) => { + if (player.isInVehicle) { + player.vehicle.freezePosition(true); + } + else { + player.freezePosition(true); + } + }); + mp.events.add("CLIENT:Freeze", (player) => { + player.vehicle.freezePosition(false); + player.freezePosition(false); + }); +} + diff --git a/ReallifeGamemode.Server/Commands/AdminCommands.cs b/ReallifeGamemode.Server/Commands/AdminCommands.cs index 7136d5b2..79c3bd15 100644 --- a/ReallifeGamemode.Server/Commands/AdminCommands.cs +++ b/ReallifeGamemode.Server/Commands/AdminCommands.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using GTANetworkAPI; @@ -1332,6 +1332,7 @@ namespace ReallifeGamemode.Server.Commands VehicleStreaming.SetEngineState(v, true); VehicleStreaming.SetLockStatus(v, false); player.SetIntoVehicle(v.Handle, 0); + player.SetIntoVehicle(v.Handle, 0); } [Command("fv", "~m~Benutzung: ~s~/fv", Alias = "vfix")] diff --git a/ReallifeGamemode.Server/Events/Death.cs b/ReallifeGamemode.Server/Events/Death.cs index f1faacb0..1ec23abd 100644 --- a/ReallifeGamemode.Server/Events/Death.cs +++ b/ReallifeGamemode.Server/Events/Death.cs @@ -1,4 +1,4 @@ -using System; +using System; using GTANetworkAPI; using ReallifeGamemode.Database; using ReallifeGamemode.Database.Entities; @@ -66,7 +66,7 @@ namespace ReallifeGamemode.Server.Events User user = player.GetUser(); if (user.JailTime <= 0) { - + //MEDIC AUFTRAG MedicTask reviveTask = new MedicTask() { @@ -112,6 +112,35 @@ namespace ReallifeGamemode.Server.Events userDeath.SaveChanges(); } } + Job.JobBase job = Managers.JobManager.GetJob(player.GetUser().JobId ?? -1); + if (job != null) + { + if (player.Vehicle.GetServerVehicle() is JobVehicle vehJ) + { + if (player.Vehicle.GetData("timerJobVehicleRespawn") == true) + { + if (vehJ.GetJob().GetUsersInJob().Contains(player)) + { + if (player.Vehicle != null) + { + player.Vehicle.ResetData("timerJobVehicleRespawn"); + ServerVehicle sVeh = Managers.VehicleManager.GetServerVehicleFromVehicle(player.Vehicle); + ServerVehicleExtensions.Spawn(sVeh, player.Vehicle); + } + } + } + } + Managers.JobManager jm = new Managers.JobManager(); + if (jm.playerTimersJobVehicleRespawn.ContainsKey(player)) + { + jm.playerTimersJobVehicleRespawn[player].Stop(); + } + player.ResetData("HatRoute"); + player.ResetData("PilotenBase"); + job.StopJob(player); + //ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet."); + CheckPointHandle.DeleteCheckpoints(player); + } //JailTime.cs Jail.Check_PutBehindBars(player); diff --git a/ReallifeGamemode.Server/Events/Disconnect.cs b/ReallifeGamemode.Server/Events/Disconnect.cs index 263aba7a..6b609588 100644 --- a/ReallifeGamemode.Server/Events/Disconnect.cs +++ b/ReallifeGamemode.Server/Events/Disconnect.cs @@ -1,17 +1,22 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; +using System.Reflection; using System.Text; using GTANetworkAPI; +using ReallifeGamemode.Database.Entities; +using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Job; using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Util; +using ReallifeGamemode.Services; using ReallifeGamemode.Server.Services; using ReallifeGamemode.Database; using ReallifeGamemode.Server.Types; + /** * @overview Life of German Reallife - Event Login (Login.cs) * @author VegaZ @@ -50,8 +55,37 @@ namespace ReallifeGamemode.Server.Events ChatService.BroadcastAdmin("!{#FFFF00}*** " + player.Name + " hat den Server verlassen", AdminLevel.MAPPING); } + //Vehicle LastVehicle = player.GetData("LastVehicle"); JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1); - if (job != null) job.StopJob(player, true); + if (job != null) + { + if (player.Vehicle.GetServerVehicle() is JobVehicle vehJ) + { + if (player.Vehicle.GetData("timerJobVehicleRespawn") == true) + { + if (vehJ.GetJob().GetUsersInJob().Contains(player)) + { + if (player.Vehicle != null) + { + player.Vehicle.ResetData("timerJobVehicleRespawn"); + ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(player.Vehicle); + ServerVehicleExtensions.Spawn(sVeh, player.Vehicle); + } + } + } + } + JobManager jm = new JobManager(); + if (jm.playerTimersJobVehicleRespawn.ContainsKey(player)) + { + jm.playerTimersJobVehicleRespawn[player].Stop(); + } + player.ResetData("HatRoute"); + player.ResetData("PilotenBase"); + player.ResetData("JobVehicleFrei"); + job.StopJob(player); + //ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet."); + CheckPointHandle.DeleteCheckpoints(player); + } using (var saveUser = new DatabaseContext()) { diff --git a/ReallifeGamemode.Server/Events/EnterVehicleAttempt.cs b/ReallifeGamemode.Server/Events/EnterVehicleAttempt.cs index aba6043f..4a297631 100644 --- a/ReallifeGamemode.Server/Events/EnterVehicleAttempt.cs +++ b/ReallifeGamemode.Server/Events/EnterVehicleAttempt.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Text; using System.Timers; @@ -55,17 +55,23 @@ namespace ReallifeGamemode.Server.Events { if ((VehicleHash)vehicle.Model == VehicleHash.Velum || (VehicleHash)vehicle.Model == VehicleHash.Velum2 && player.GetUser().PilotSkill < 300) { - player.SendNotification("~r~Dein Skilllevel(2) ist nicht hoch genug!"); + player.SetData("JobVehicleFrei", true); + player.StopAnimation(); + player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skill Level(2)!"); return; } if ((VehicleHash)vehicle.Model == VehicleHash.Coach && player.GetUser().BusSkill < 300) { - player.SendNotification("~r~Dein Skilllevel(2) ist nicht hoch genug!"); + player.SetData("JobVehicleFrei", true); + player.StopAnimation(); + player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skill Level(2)!"); return; } if ((VehicleHash)vehicle.Model == VehicleHash.Tourbus && player.GetUser().BusSkill < 800) { - player.SendNotification("~r~Dein Skilllevel(3) ist nicht hoch genug!"); + player.SetData("JobVehicleFrei", true); + player.StopAnimation(); + player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skill Level(3)!"); return; } } diff --git a/ReallifeGamemode.Server/Events/Key.cs b/ReallifeGamemode.Server/Events/Key.cs index a5bbe1d6..8d063fb8 100644 --- a/ReallifeGamemode.Server/Events/Key.cs +++ b/ReallifeGamemode.Server/Events/Key.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using GTANetworkAPI; using Newtonsoft.Json; @@ -398,13 +398,14 @@ namespace ReallifeGamemode.Server.Events { if (job.GetUsersInJob().Contains(player)) { - user.SetData("PilotenBase", 1); + player.SetData("PilotenBase", 1); jobb.StopJob(player); return; } if (!job.GetUsersInJob().Contains(player)) { - user.SetData("PilotenBase", 1); + player.SetData("PilotenBase", 1); + player.SendChatMessage($"Debug PilotenJob PilotenBase1: {player.GetData("PilotenBase")}"); jobb.StartJobEvent(player); return; } @@ -413,13 +414,14 @@ namespace ReallifeGamemode.Server.Events { if (job.GetUsersInJob().Contains(player)) { - user.SetData("PilotenBase", 2); + player.SetData("PilotenBase", 2); jobb.StopJob(player); return; } if (!job.GetUsersInJob().Contains(player)) { - user.SetData("PilotenBase", 2); + player.SetData("PilotenBase", 2); + player.SendChatMessage($"Debug PilotenJob PilotenBase2: {player.GetData("PilotenBase")}"); jobb.StartJobEvent(player); return; } @@ -576,14 +578,21 @@ namespace ReallifeGamemode.Server.Events { if (jV.JobId == 3) { + player.SendChatMessage("Debug Pilot 1"); Job.PilotJob c = new Job.PilotJob(); if ((VehicleHash)jV.Model == VehicleHash.Cuban800 && !state) { + player.SendChatMessage("Debug Pilot 2"); if (!player.HasData("HatRoute") || player.GetData("HatRoute") == false) { + player.SendChatMessage("Debug Pilot 3"); player.SetData("HatRoute", true); c.StartPilotRoute(player, "RouteStart"); } + else + { + player.SendChatMessage("Debug Pilot 4"); + } } if ((VehicleHash)jV.Model == VehicleHash.Velum && !state || (VehicleHash)jV.Model == VehicleHash.Velum2 && !state) { diff --git a/ReallifeGamemode.Server/Events/ResourceStop.cs b/ReallifeGamemode.Server/Events/ResourceStop.cs index 56d33175..5dc00556 100644 --- a/ReallifeGamemode.Server/Events/ResourceStop.cs +++ b/ReallifeGamemode.Server/Events/ResourceStop.cs @@ -1,5 +1,6 @@ -using GTANetworkAPI; +using GTANetworkAPI; using ReallifeGamemode.Database.Models; +using ReallifeGamemode.Server.Extensions; using System.Linq; /** @@ -15,7 +16,17 @@ namespace ReallifeGamemode.Server.Events [ServerEvent(Event.ResourceStop)] public void OnResourceStop() { - var users = NAPI.Pools.GetAllPlayers(); + foreach (var player in NAPI.Pools.GetAllPlayers()) + { + using (var dbContext = new DatabaseContext()) + { + player.GetUser(dbContext).PositionX = player.Position.X; + player.GetUser(dbContext).PositionY = player.Position.Y; + player.GetUser(dbContext).PositionZ = player.Position.Z; + dbContext.SaveChanges(); + } + } + var users = NAPI.Pools.GetAllPlayers(); foreach (Player user in users) { diff --git a/ReallifeGamemode.Server/Job/PilotJob.cs b/ReallifeGamemode.Server/Job/PilotJob.cs index e1641038..d841d092 100644 --- a/ReallifeGamemode.Server/Job/PilotJob.cs +++ b/ReallifeGamemode.Server/Job/PilotJob.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using GTANetworkAPI; using ReallifeGamemode.Server.Util; @@ -171,13 +171,18 @@ namespace ReallifeGamemode.Server.Job [RemoteEvent("startPilotRoute")] public void StartPilotRoute(Player player, string type) { + player.SendChatMessage("Debug Pilot 5"); Vehicle veh = player.Vehicle; if (player.VehicleSeat == 0) { + player.SendChatMessage("Debug Pilot 6"); if (type == "RouteStart") { + player.SendChatMessage("Debug Pilot 7"); + player.SendChatMessage($"Debug PilotenJob PilotenBaseAbfrage: {player.GetData("PilotenBase")}"); if (player.HasData("PilotenBase") && player.GetData("PilotenBase") == 1) { + player.SendChatMessage("Debug Pilot 8"); Random rnd = new Random(); int rroute = rnd.Next(1, 4); switch (rroute) @@ -253,6 +258,14 @@ namespace ReallifeGamemode.Server.Job { CheckPointHandle.StartCheckPointRoute(player, Route6, 0, 6, 40, 20, true, "pilotJob"); } + else + { + player.SendChatMessage("Debug Pilot 9"); + } + } + else + { + player.SendChatMessage("Debug Pilot 10"); } } public static void payWage(Player jobber, int wage) diff --git a/ReallifeGamemode.Server/Managers/DoorManager.cs b/ReallifeGamemode.Server/Managers/DoorManager.cs index 995fc5bf..ee70fc01 100644 --- a/ReallifeGamemode.Server/Managers/DoorManager.cs +++ b/ReallifeGamemode.Server/Managers/DoorManager.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using GTANetworkAPI; using ReallifeGamemode.Database.Entities; @@ -49,20 +49,23 @@ namespace ReallifeGamemode.Server.Managers IQueryable NearDoors = dbContext.Doors.Where(d => d.Position.DistanceTo(player.Position) <= d.Radius); foreach (Door d in NearDoors) { - if (!user.IsAdmin(AdminLevel.ADMIN) && (d.FactionId != user.FactionId || d.FactionId == null)) + if (d != null) { - string lockState = "~r~Du hast kein Recht diese T\u00fcr " + (d.Locked == true ? "auf" : "ab") + "zuschlie\u00dfen!"; - player.SendNotification(lockState, true); - continue; + if (!user.IsAdmin(AdminLevel.ADMIN) && (d.FactionId != user.FactionId || d.FactionId == null)) + { + string lockState = "~r~Du hast kein Recht diese T\u00fcr " + (d.Locked == true ? "auf" : "ab") + "zuschlie\u00dfen!"; + player.SendNotification(lockState, true); + continue; + } + + d.Locked = !d.Locked; + + string notStr = d.Name + " " + (d.Locked == false ? "~g~auf" : "~r~ab") + "geschlossen"; + + player.SendNotification(notStr, true); + + NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", d.Model, d.X, d.Y, d.Z, (d.Locked ? 1 : 0), 0.0f, 0.0f, 0.0f)); } - - d.Locked = !d.Locked; - - string notStr = d.Name + " " + (d.Locked == false ? "~g~auf" : "~r~ab") + "geschlossen"; - - player.SendNotification(notStr, true); - - NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", d.Model, d.X, d.Y, d.Z, (d.Locked ? 1 : 0), 0.0f, 0.0f, 0.0f)); } dbContext.SaveChanges(); } diff --git a/ReallifeGamemode.Server/Managers/JobManager.cs b/ReallifeGamemode.Server/Managers/JobManager.cs index 87975da1..6a13ba07 100644 --- a/ReallifeGamemode.Server/Managers/JobManager.cs +++ b/ReallifeGamemode.Server/Managers/JobManager.cs @@ -1,4 +1,4 @@ -using GTANetworkAPI; +using GTANetworkAPI; using Newtonsoft.Json; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; @@ -20,8 +20,6 @@ namespace ReallifeGamemode.Server.Managers { private static List _jobs = new List(); - private static System.Timers.Timer timerJobVehicleRespawn = new System.Timers.Timer(30000); //30 Sekunden Timer JobVehicleRespawn - public static void LoadJobs() { IEnumerable jobTypes = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.IsSubclassOf(typeof(JobBase)) && !t.IsAbstract); @@ -48,6 +46,8 @@ namespace ReallifeGamemode.Server.Managers public static List GetJobs() => _jobs.OrderBy(j => j.Id).ToList(); + public Dictionary playerTimersJobVehicleRespawn = new Dictionary(); + [RemoteEvent("CLIENT:JobCenter_CancelJob")] public void CancelJobEvent(Player player) { @@ -186,6 +186,7 @@ namespace ReallifeGamemode.Server.Managers [ServerEvent(Event.PlayerExitVehicle)] public void JobManagerPlayerExitVehicle(Player player, Vehicle veh) { + ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(veh); User u = player.GetUser(); if (u.JobId == null) return; @@ -197,87 +198,90 @@ namespace ReallifeGamemode.Server.Managers { if (u.JobId != 2) { - //timerJobVehicleRespawn.Start(); - player.SetData("DelayTime", 30000); - veh.SetData("timerJobVehicleRespawn", true); - player.SetData("LastVehicle", veh); - Vehicle LastVehicle = player.GetData("LastVehicle"); - /*timerJobVehicleRespawn.AutoReset = false; - timerJobVehicleRespawn.Elapsed += Timer30000_Elapsed;*/ - NAPI.Task.Run(() => + if (!player.HasData("JobVehicleFrei") || player.GetData("JobVehicleFrei") == false) { - try + player.SetData("DelayTime", 30000); + veh.SetData("timerJobVehicleRespawn", true); + player.SetData("LastVehicle", veh); + player.SetData("LastSVehicle", sVeh); + if (playerTimersJobVehicleRespawn.ContainsKey(player)) { - ChatService.SendMessage(player, "TimerAusgelöst"); - if (LastVehicle.GetData("timerJobVehicleRespawn") == true) - { - ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(veh); - if (vehJ.GetJob().GetUsersInJob().Contains(player)) - { - if (veh != null) - { - job.StopJob(player); - ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet."); - veh.ResetData("timerJobVehicleRespawn"); - CheckPointHandle.DeleteCheckpoints(player); - ServerVehicleExtensions.Spawn(sVeh, veh); - if (player.GetData("isDead") == false) - { - if (player.GetUser().JobId == 1)//Taxifahrer - { - //VehicleManager.DeleteVehicle(v); - } - if (player.GetUser().JobId == 2)//Müllmann - { - //VehicleManager.DeleteVehicle(v); - } - if (player.GetUser().JobId == 3)//Pilot - { - if (!player.HasData("PilotenBase2") || player.GetData("PilotenBase2") == false) //Sandyshores - { - player.Position = new Vector3(1707.2711181640625, 3276.216064453125, 41.155494689941406); - player.Heading = (-154.65234375f); - } - if (player.HasData("PilotenBase2") && player.GetData("PilotenBase2") == true) //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); - } - } - } - } - } + playerTimersJobVehicleRespawn[player].Stop(); } - catch (ArgumentNullException e) - { - player.SendChatMessage("Timer gekillt1."); - player.SendChatMessage($"{e} First exception caught."); - } - catch (Exception e) - { - player.SendChatMessage("Timer gekillt2."); - player.SendChatMessage($"{e} First exception caught."); - if (e.Data != null) - { - player.SendChatMessage("Timer gekillt3."); - player.SendChatMessage($"{e} First exception caught."); - } - } - }, delayTime: 30000); - 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; + 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; + } } } } } + + private void PlayerTimer_Elapsed(Player player, Vehicle veh) + { + NAPI.Task.Run(() => + { + //Vehicle LastVehicle = player.GetData("LastVehicle"); + Vehicle LastVehicle = veh; + JobBase job = GetJob(player.GetUser().JobId.Value); + 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 == 1)//Taxifahrer + { + //VehicleManager.DeleteVehicle(v); + } + if (player.GetUser().JobId == 2)//Müllmann + { + //VehicleManager.DeleteVehicle(v); + } + 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); + } + } + } + } + } + } + }); + } [RemoteEvent("CLIENT:Job_StopJob")] public void StopJob(Player player) { @@ -298,8 +302,6 @@ namespace ReallifeGamemode.Server.Managers VehicleStreaming.SetEngineState(player.Vehicle, false); } - //if (LastVehicle.GetData("timerJobVehicleRespawn") == true) - //Vehicle v = player.Vehicle; job.StopJob(player); /*if (player.GetUser().JobId == 1)//Taxifahrer { @@ -313,19 +315,6 @@ namespace ReallifeGamemode.Server.Managers } if (player.GetUser().JobId == 3)//Pilot { - /*if (LastVehicle != null) - { - if ((VehicleHash)LastVehicle.Model == VehicleHash.Cuban800) - { - player.Position = new Vector3(1707.2711181640625, 3276.216064453125, 41.155494689941406); - player.Heading = (-154.65234375f); - } - if ((VehicleHash)LastVehicle.Model == VehicleHash.Velum || (VehicleHash)LastVehicle.Model == VehicleHash.Velum2) - { - player.Position = new Vector3(-1615.156982421875, -3140.54833984375, 13.991917610168457); - player.Heading = (60.65372848510742f); - } - }*/ if (player.HasData("PilotenBase") || player.GetData("PilotenBase") == 1) //Sandyshores { player.Position = new Vector3(1707.2711181640625, 3276.216064453125, 41.155494689941406); @@ -341,19 +330,6 @@ namespace ReallifeGamemode.Server.Managers } if (player.GetUser().JobId == 4)//Busfahrer { - /*if (LastVehicle != null) - { - if ((VehicleHash)LastVehicle.Model == VehicleHash.Bus || (VehicleHash)LastVehicle.Model == VehicleHash.Coach) - { - player.Position = new Vector3(-604.0092163085938, -2229.08447265625, 6.004401683807373); - player.Heading = (17.64179039001465f); - } - if ((VehicleHash)LastVehicle.Model == VehicleHash.Tourbus) - { - player.Position = new Vector3(458.98468017578125, -657.942138671875, 27.58537483215332); - player.Heading = (-8.147048950195312f); - } - }*/ player.Position = new Vector3(-535.46, -2144.97, 5.95); player.Heading = (57.03f); } @@ -363,79 +339,20 @@ namespace ReallifeGamemode.Server.Managers LastVehicle.ResetData("timerJobVehicleRespawn"); ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(LastVehicle); ServerVehicleExtensions.Spawn(sVeh, LastVehicle); - ChatService.SendMessage(player, $"~y~[JOB]~s~ LastVehicle1: {LastVehicle}"); } - ChatService.SendMessage(player, $"~y~[JOB]~s~ LastVehicle2: {LastVehicle}"); + if (playerTimersJobVehicleRespawn.ContainsKey(player)) + { + playerTimersJobVehicleRespawn[player].Stop(); + } CheckPointHandle.DeleteCheckpoints(player); ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet."); } - public void Timer30000_Elapsed(object sender, ElapsedEventArgs e) - { - NAPI.Task.Run(() => - { - NAPI.Pools.GetAllPlayers().ForEach(p => - { - NAPI.Pools.GetAllVehicles().ForEach(v => - { - Vehicle LastVehicle = p.GetData("LastVehicle"); - if (LastVehicle.GetServerVehicle() is JobVehicle vehJ) - { - if (LastVehicle.GetData("timerJobVehicleRespawn") == true) - { - JobBase job = GetJob(p.GetUser().JobId.Value); - ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(LastVehicle); - if (vehJ.GetJob().GetUsersInJob().Contains(p)) - { - if (LastVehicle != null) - { - job.StopJob(p); - ChatService.SendMessage(p, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet."); - LastVehicle.ResetData("timerJobVehicleRespawn"); - CheckPointHandle.DeleteCheckpoints(p); - ServerVehicleExtensions.Spawn(sVeh, LastVehicle); - if (p.GetData("isDead") == false) - { - if (p.GetUser().JobId == 1)//Taxifahrer - { - //VehicleManager.DeleteVehicle(v); - } - if (p.GetUser().JobId == 2)//Müllmann - { - //VehicleManager.DeleteVehicle(v); - } - if (p.GetUser().JobId == 3)//Pilot - { - if (!p.HasData("PilotenBase2") || p.GetData("PilotenBase2") == false) //Sandyshores - { - p.Position = new Vector3(1707.2711181640625, 3276.216064453125, 41.155494689941406); - p.Heading = (-154.65234375f); - } - if (p.HasData("PilotenBase2") && p.GetData("PilotenBase2") == true) //LS Airport - { - p.Position = new Vector3(-1622.48, -3151.58, 13); - p.Heading = (48.44f); - } - } - if (p.GetUser().JobId == 4)//Busfahrer - { - p.Position = new Vector3(-535.46, -2144.97, 5.95); - p.Heading = (57.03f); - } - } - } - } - } - } - }); - }); - }); - } [ServerEvent(Event.PlayerEnterVehicle)] public void JobManagerPlayerEnterVehicle(Player player, Vehicle veh, sbyte seat) { ServerVehicle sVeh = veh.GetServerVehicle(); - if (sVeh == null) return; + //if (sVeh == null) return; if (seat != 0) { if (sVeh is JobVehicle jV && jV.JobId == 1) // Spieler steigt in Taxi ein @@ -473,47 +390,120 @@ namespace ReallifeGamemode.Server.Managers } } } - else + JobBase job = GetJob(player.GetUser().JobId.Value); + if (job.GetUsersInJob().Contains(player)) { + ChatService.SendMessage(player, "Debug1"); if (sVeh != null) { - JobBase job = GetJob(player.GetUser().JobId.Value); - - if (job.GetUsersInJob().Contains(player)) + ChatService.SendMessage(player, "Debug2"); + if (sVeh is JobVehicle JV) { - if (sVeh is JobVehicle JV) + ChatService.SendMessage(player, "Debug3"); + if (player.GetUser().JobId == 3 || player.GetUser().JobId == 4) { - if (player.GetUser().JobId == 3 || player.GetUser().JobId == 4) + ChatService.SendMessage(player, "Debug4"); + if (seat == 0) { - if (seat == 0) + ChatService.SendMessage(player, "Debug5"); + JobVehicle c = new JobVehicle(); + if (JV.GetJob().GetUsersInJob().Contains(player)) { - 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")) { - //timerJobVehicleRespawn.Stop(); + ChatService.SendMessage(player, "Debug6"); veh.SetData("timerJobVehicleRespawn", false); - player.SetData("DelayTime", 0); + if (playerTimersJobVehicleRespawn.ContainsKey(player)) + { + playerTimersJobVehicleRespawn[player].Stop(); + } + } + else + { + if (player.GetData("HatRoute") == true) + { + StopJob(player); + } } } - else + else ChatService.SendMessage(player, "Debug7"); + } + else + { + ChatService.SendMessage(player, "Debug8"); + job.StopJob(player); + ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet."); + if (playerTimersJobVehicleRespawn.ContainsKey(player)) { - player.StopAnimation(); - return; + 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; } } - else + } + else + { + ChatService.SendMessage(player, "Debug9"); + job.StopJob(player); + ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet."); + if (playerTimersJobVehicleRespawn.ContainsKey(player)) { - job.StopJob(player); - ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet."); - veh.ResetData("timerJobVehicleRespawn"); - CheckPointHandle.DeleteCheckpoints(player); - ServerVehicleExtensions.Spawn(sVeh, player.GetData("LastVehicle")); - player.StopAnimation(); - return; + 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 || veh != null) + { + ChatService.SendMessage(player, "Debug10"); + 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) + { + ChatService.SendMessage(player, "Debug11"); + 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 + { + ChatService.SendMessage(player, "Debug12"); + } + } + else + { + ChatService.SendMessage(player, "Debug13"); } } diff --git a/ReallifeGamemode.Server/Util/CheckPointHandle.cs b/ReallifeGamemode.Server/Util/CheckPointHandle.cs index 79b8f077..5f667157 100644 --- a/ReallifeGamemode.Server/Util/CheckPointHandle.cs +++ b/ReallifeGamemode.Server/Util/CheckPointHandle.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using ReallifeGamemode.Server.Services; using GTANetworkAPI; using System.Linq; @@ -87,7 +87,7 @@ namespace ReallifeGamemode.Server.Util NAPI.Task.Run(() => { BusCheckpoint(user); - }, delayTime: 3850); + }, delayTime: 3250); } if (!(veh.GetData("indicatorData") is IndicatorData data)) data = new IndicatorData(); data.Left = false; @@ -135,13 +135,13 @@ namespace ReallifeGamemode.Server.Util if ((VehicleHash)veh.Model == VehicleHash.Tourbus) { user.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AbfahrtHaltestelleTourbus", "wav", 25); - user.TriggerEvent("CLIENT:SetDoorShutDelayed", 3, false, 2100); - user.TriggerEvent("CLIENT:SetDoorShutDelayed", 2, false, 2100); - user.TriggerEvent("CLIENT:SetDoorShutDelayed", 3, false, 2100); + 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: 2100); + }, delayTime: 2600); } //user.TriggerEvent("CLIENT:UnFreezeVehicle", veh); } @@ -225,7 +225,7 @@ namespace ReallifeGamemode.Server.Util { LastCheckpoint = 0; Vector3 nextCp = list.ElementAt(checkPointsDone); - this.player.TriggerEvent("setCheckPoint", nextCp, player, this.checkPointsDone, delay, this.markerID, this.markerSize, this.markerDist, this.eventInCheckpoint); + this.player.TriggerEvent("setCheckPoint", nextCp, player, this.checkPointsDone, delay, this.markerID, this.markerSize, this.markerDist, this.useVehicle, this.eventInCheckpoint); } if (checkPointsDone == this.list.Count()-1) { diff --git a/ReallifeGamemode.Server/Util/PlayerTimer.cs b/ReallifeGamemode.Server/Util/PlayerTimer.cs new file mode 100644 index 00000000..c0ba1bc1 --- /dev/null +++ b/ReallifeGamemode.Server/Util/PlayerTimer.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Timers; +using GTANetworkAPI; + +namespace ReallifeGamemode.Server.Util +{ + public class PlayerTimer + { + private readonly Player player; + private readonly Vehicle veh; + private readonly Timer timer; + + public delegate void PlayerTimerElapsed(Player player, Vehicle veh); + public event PlayerTimerElapsed Elapsed; + + public PlayerTimer(Player player, Vehicle veh = null, int milliseconds = 1000) + { + this.player = player; + this.veh = veh; + + this.timer = new Timer(milliseconds); + this.timer.Elapsed += Timer_Elapsed; + this.timer.Start(); + } + + private void Timer_Elapsed(object sender, ElapsedEventArgs e) + { + Elapsed?.Invoke(player, veh); + } + + public void Stop() + { + this.timer.Stop(); + } + } +}