diff --git a/ReallifeGamemode.Client/Gui/blips.ts b/ReallifeGamemode.Client/Gui/blips.ts index 85b9e1ae..ba6b8446 100644 --- a/ReallifeGamemode.Client/Gui/blips.ts +++ b/ReallifeGamemode.Client/Gui/blips.ts @@ -1,6 +1,13 @@ -export default function playerBlips() { +import { afkStatus } from '../Player/antiafk'; +import { getWantedCount } from './wanteds'; + +export default function playerBlips() { var playerBlipMap: Map; var ready = false; + var escapeTimer = null; + + const PD_BLIP = 38; + const FIB_BLIP = 63; setInterval(() => { if (!ready) return; @@ -9,7 +16,7 @@ mp.players.forEachInStreamRange( (player) => { if (mp.players.local == player) - return; + return; if (!playerBlipMap.has(player)) { let pBlip = mp.blips.new(1, player.position, { @@ -43,8 +50,29 @@ pBlip.setColour(isNaN(color) ? 0 : color); pBlip.setPosition(player.position.x, player.position.y, player.position.z); + + if ((color == PD_BLIP || color == FIB_BLIP || afkStatus)) { + if (escapeTimer) { + mp.events.call("SERVER:SetWantedFlash", false); + clearInterval(escapeTimer); + escapeTimer = null; + } + return; + } + + if (!escapeTimer && !afkStatus && getWantedCount() > 0) { + mp.events.call("SERVER:SetWantedFlash", true); + escapeTimer = setInterval(() => { + if (getWantedCount() == 0) { + clearInterval(escapeTimer); + escapeTimer = null; + return; + } + + mp.events.callRemote("CLIENT:EscapeWanted"); + }, 300000); //120000 -> 2 min , 300000 -> 5min + } } - }); }, 50); diff --git a/ReallifeGamemode.Client/Player/antiafk.ts b/ReallifeGamemode.Client/Player/antiafk.ts index 229cd705..c231d5f3 100644 --- a/ReallifeGamemode.Client/Player/antiafk.ts +++ b/ReallifeGamemode.Client/Player/antiafk.ts @@ -1,13 +1,12 @@ -export default function antiAfk(globalData: IGlobalData) { +export let afkStatus: boolean = false; + +export default function antiAfk(globalData: IGlobalData) { let lastPosition: Vector3Mp = mp.players.local.position; let afkCounter: number = 0; - let afkStatus: boolean = false; - setInterval(checkAfkPosition, 1000 * 10); function checkAfkPosition() { - if (!globalData.LoggedIn) { return; } diff --git a/ReallifeGamemode.Server/Util/ThreadTimers.cs b/ReallifeGamemode.Server/Util/ThreadTimers.cs index 5d205ae6..e86fe5b5 100644 --- a/ReallifeGamemode.Server/Util/ThreadTimers.cs +++ b/ReallifeGamemode.Server/Util/ThreadTimers.cs @@ -62,7 +62,6 @@ namespace ReallifeGamemode.Server.Util }); } - private static void Timer60000_Elapsed(object sender, ElapsedEventArgs e) { NAPI.Task.Run(() => @@ -79,7 +78,6 @@ namespace ReallifeGamemode.Server.Util { NAPI.Task.Run(() => { - WantedEscapeTimer.Timer_Elapsed(); Jail.JailIn_Elapsed(); Gangwar.Gangwar.Value_TimerElapsed(); }); diff --git a/ReallifeGamemode.Server/Wanted/WantedEscapeTimer.cs b/ReallifeGamemode.Server/Wanted/WantedEscapeTimer.cs index 7f6fe6ea..ffbac518 100644 --- a/ReallifeGamemode.Server/Wanted/WantedEscapeTimer.cs +++ b/ReallifeGamemode.Server/Wanted/WantedEscapeTimer.cs @@ -13,82 +13,25 @@ using ReallifeGamemode.Server.Services; namespace ReallifeGamemode.Server.Wanted { - public class WantedEscapeTimer + public class WantedEscapeTimer : Script { - private const int WantedEscapeTime = 300000; - - public static Dictionary waTimer { get; set; } = new Dictionary(); //zeit in ms - /* - public static void WantedTimer() - { - //System.Timers.Timer timer = new System.Timers.Timer(2500); - //timer.Start(); - //timer.Elapsed += Timer_Elapsed; - } - */ - - public static void ResetWantedTimeToElapse(User user) - { - waTimer[user.Id] = WantedEscapeTime; - } - - public static void Timer_Elapsed() + [RemoteEvent("CLIENT:EscapeWanted")] + public void WantedEscape(Player player) { using var dbContext = new DatabaseContext(); - foreach (var player in NAPI.Pools.GetAllPlayers()) + User user = player.GetUser(dbContext); + + if (user.Wanteds <= 0) + return; + + player.SendChatMessage("~y~Du hast erfolgreich einen Wanted abgetaucht."); + user.Wanteds -= 1; + if (user.Wanteds == 0) { - User user = player.GetUser(dbContext); - if (user != null && user.Wanteds > 0) - { - if (!waTimer.ContainsKey(user.Id)) - ResetWantedTimeToElapse(user); - - bool isNearCop = false; - foreach (var playerCop in NAPI.Pools.GetAllPlayers()) - { - if (!playerCop.IsLoggedIn()) continue; - - User cop = playerCop.GetUser(); - if (cop != null && (cop.FactionId == 1 || cop.FactionId == 3)) - { - if (cop.GetData("duty") && playerCop.Position.DistanceTo2D(player.Position) <= 500) - { - //Schriftzug 'abgetaucht' zerstören :( - isNearCop = true; - break; - } - //Hier abgetaucht schriftzug einfügen :) - } - } - - if (!waTimer.ContainsKey(user.Id)) - waTimer[user.Id] = 300000; - - if (waTimer[user.Id] <= 0) - { - ResetWantedTimeToElapse(user); - player.SendChatMessage("~y~Du hast erfolgreich einen Wanted abgetaucht."); - user.Wanteds -= 1; - if (user.Wanteds == 0) - { - ChatService.HQMessage(player.Name + " konnte solange abtauchen, sodass er nicht mehr gesucht wird."); - user.SetBlipAndNametagColor(); - } - dbContext.SaveChanges(); - waTimer[user.Id] = WantedEscapeTime; - } - else if (!isNearCop && !player.IsAfk()) - { - player.TriggerEvent("SERVER:SetWantedFlash", true); - waTimer[user.Id] -= 2500; - } - else if (isNearCop) - { - player.TriggerEvent("SERVER:SetWantedFlash", false); - ResetWantedTimeToElapse(user); - } - } + ChatService.HQMessage(player.Name + " konnte solange abtauchen, sodass er nicht mehr gesucht wird."); + user.SetBlipAndNametagColor(); } + dbContext.SaveChanges(); } } }