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