using System; using System.Collections.Generic; using System.Text; using GTANetworkAPI; using ReallifeGamemode.Server.Util; using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Extensions; using System.Timers; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Database.Entities; using System.Linq; using Newtonsoft.Json; using ReallifeGamemode.Server.Types; namespace ReallifeGamemode.Server.Job { class TaxiDriverJob : JobBase { public List TaxiContracts { get; set; } = new List(); private static readonly Dictionary lastPositions = new Dictionary(); public override int Id => 1; public override string Name => "Taxifahrer"; public override bool NeedVehicleToStart => true; private static TaxiDriverJob _Instance; public TaxiDriverJob() { JobStart += TaxiDriverJobJobStart; JobStop += TaxiDriverJobJobStop; } public static TaxiDriverJob GetInstance() { if (_Instance == null) _Instance = new TaxiDriverJob(); return _Instance; } private void TaxiDriverJobJobStart(Player player) { player.Vehicle.SetSharedData("vehicleTaxiLight", true); player.TriggerEvent("CLIENT:setFarePrice"); } private void TaxiDriverJobJobStop(Player player) { player.Vehicle.SetSharedData("vehicleTaxiLight", false); int Id = player.GetUser().Id; player.ResetData("DriverPrice"); Vehicle v = player.Vehicle; foreach (Player occupant in v.Occupants) { occupant.TriggerEvent("CLIENT:cancelFare"); } } [RemoteEvent("SERVER:failedFarePrice")] private void SrvEvent_failedFarePrice(Player player) { ChatService.ErrorMessage(player, "Bitte richtigen Wert eintragen"); TaxiDriverJobJobStop(player); } [RemoteEvent("SERVER:setFare")] private void SrvEvent_setFare(Player player, int amount) { player.SetData("DriverPrice", amount); player.TriggerEvent("CLIENT:startFare"); } [RemoteEvent("SERVER:payFare")] private void SrvEvent_payFare(Player player, int amount, float km) { int id = player.GetUser().Id; player.SetData("FareKm", km); int targetId = player.GetData("Passager"); if (targetId == 0) return; using (var dbContext = new DatabaseContext()) { User target = dbContext.Users.Where(u => u.Id == targetId).FirstOrDefault(); target.Handmoney -= amount; dbContext.SaveChanges(); target.Player.TriggerEvent("SERVER:SET_HANDMONEY", target.Handmoney); } } /* public static void StartTaxiTimer() { Timer timer = new Timer(500); timer.Start(); timer.Elapsed += UpdateFare; } */ public static void UpdateFare() { foreach (var player in GetPlayerInJob()) { User u = player.GetUser(); if (u.JobId != 1) return; Console.WriteLine(player.Name); if (!player.HasData("hasPassager")) { player.SetData("hasPassager", false); continue; } int playerId = player.GetUser().Id; Vehicle v = player.Vehicle; Vector3 lastPosition = v.Position; if (lastPositions.ContainsKey(v.Handle)) lastPosition = lastPositions[v.Handle]; lastPositions[v.Handle] = v.Position; double distance = lastPosition.DistanceTo(v.Position) / 1000.0; if (distance > 0.5) { ChatService.BroadcastAdmin($"Möglicher Cheater - {player.Name}", AdminLevel.MAPPING); continue; } if (!player.GetData("hasPassager")) continue; foreach (Player occupant in v.Occupants) { occupant.TriggerEvent("CLIENT:updateFare", JsonConvert.SerializeObject(distance)); } } } } }