using System.Collections.Generic; using System.Linq; using GTANetworkAPI; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Managers; namespace ReallifeGamemode.Server.Job { public abstract class JobBase : Script { public delegate void JobStartHandler(Player player); public delegate void JobStopHandler(Player player); public event JobStartHandler JobStart; public event JobStopHandler JobStop; private readonly List _inJob = new List(); private static readonly List jobPlayer = new List(); public static Dictionary playerVehiclePair = new Dictionary(); public static List 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) { if (_inJob.Contains(player)) return; _inJob.Add(player); jobPlayer.Add(player); ChatService.SendMessage(player, $"~y~[Job]~s~ Du hast deinen Job ~o~{this.Name}~s~ gestartet."); JobStart?.Invoke(player); } public void StopJob(Player player, bool quit = false) { if (!_inJob.Contains(player)) return; _inJob.Remove(player); jobPlayer.Remove(player); 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); } public List GetJobVehicles() { using var dbContext = new DatabaseContext(); return dbContext.JobVehicles.Where(j => j.JobId == Id).ToList(); } public static List GetPlayerInJob() => jobPlayer; public List GetUsersInJob() => _inJob; } }