/// <summary> /// Proxies the sync data to a certain vehicle /// </summary> /// <param name="dataDic">data</param> public void SetVehicleSyncData(IDictionary <string, object> dataDic, int netId, int PlayerId) { if (Game.Player.ServerId == PlayerId) { Utils.DebugWriteLine("Data discarded because PlayerId same as local player ID"); return; } Utils.DebugWriteLine($"{PlayerId} has sent us data parsing"); var hasSirenOrLightData = dataDic.ContainsKey(DataNames.Siren) || dataDic.ContainsKey(DataNames.Light); if (vehicleList.ContainsKey(netId) && hasSirenOrLightData) { vehicleList[netId].SetData(dataDic); return; } if (hasSirenOrLightData && !vehicleList.RecentlyRegistered(netId)) { if (!vehicleList.TryGetElsVehicle(netId, out ELSVehicle _, dataDic, PlayerId)) { Utils.ReleaseWriteLine($"Failed to register other clients vehicle with id {netId}"); return; } } if (dataDic.ContainsKey(DataNames.IndicatorState) && !hasSirenOrLightData && API.NetworkDoesNetworkIdExist(netId)) { if (API.NetworkDoesNetworkIdExist(netId)) { Vehicle veh = (Vehicle)Entity.FromHandle(API.NetworkGetEntityFromNetworkId(netId)); if (veh != null) { Indicator.ToggleInicatorState(veh, Indicator.IndStateLib[dataDic[DataNames.IndicatorState].ToString()]); } } } }
internal async void RunTickAsync() { try { if (Game.PlayerPed.IsSittingInELSVehicle() && (Game.PlayerPed.CurrentVehicle.GetPedOnSeat(VehicleSeat.Driver) == Game.PlayerPed || Game.PlayerPed.CurrentVehicle.GetPedOnSeat(VehicleSeat.Passenger) == Game.PlayerPed)) { if (vehicleList.ContainsKey(Game.PlayerPed.CurrentVehicle.GetNetworkId())) { Utils.DebugWriteLine("Vehicle is in the list running ticks"); ELSVehicle _currentVehicle = vehicleList[Game.PlayerPed.CurrentVehicle.GetNetworkId()]; _currentVehicle?.RunTick(); vehicleList.RunExternalTick(_currentVehicle); Game.PlayerPed.CurrentVehicle.SetExistOnAllMachines(true); } else { if (!vehicleList.VehRegAttempts.ContainsKey(Game.PlayerPed.CurrentVehicle.GetNetworkId()) || Game.GameTime - vehicleList.VehRegAttempts[Game.PlayerPed.CurrentVehicle.GetNetworkId()].Item2 >= 15000 && vehicleList.VehRegAttempts[Game.PlayerPed.CurrentVehicle.GetNetworkId()].Item1 < 5) { if (vehicleList.MakeSureItExists(API.VehToNet(Game.PlayerPed.CurrentVehicle.Handle), vehicle: out ELSVehicle _currentVehicle)) { _currentVehicle?.RunTick(); vehicleList.RunExternalTick(_currentVehicle); Game.PlayerPed.CurrentVehicle.SetExistOnAllMachines(true); } else { vehicleList.RunExternalTick(); } } else { vehicleList.RunExternalTick(); } } if (Game.PlayerPed.IsInVehicle() && (Game.PlayerPed.CurrentVehicle.GetPedOnSeat(VehicleSeat.Driver) == Game.PlayerPed) && (VehicleClass.Boats != Game.PlayerPed.CurrentVehicle.ClassType || VehicleClass.Trains != Game.PlayerPed.CurrentVehicle.ClassType || VehicleClass.Planes != Game.PlayerPed.CurrentVehicle.ClassType || VehicleClass.Helicopters != Game.PlayerPed.CurrentVehicle.ClassType)) { if (Game.PlayerPed.CurrentVehicle.GetNetworkId() == 0) { makenetworked(Game.PlayerPed.CurrentVehicle); } Indicator.RunAsync(Game.PlayerPed.CurrentVehicle); } #if DEBUG //if (Game.IsControlJustPressed(0, Control.Cover)) //{ // FullSync.FullSyncManager.SendDataBroadcast( // _currentVehicle.GetData(), // Game.Player.ServerId // ); // CitizenFX.Core.UI.Screen.ShowNotification("FullSync™ ran"); // CitizenFX.Core.Debug.WriteLine("FullSync™ ran"); //} //Debug.DebugText(); #endif } else { vehicleList.RunExternalTick(); } } catch (Exception e) { CitizenFX.Core.Debug.WriteLine($"VehicleManager Error: {e.Message} \n Stacktrace: {e.StackTrace}"); } //TODO Chnage how I check for the panic alarm }
internal async Task RegistrationTick() { int count = 0; do { //Utils.DebugWriteLine($"Delay {count} at {Game.GameTime}"); await ELS.Delay(1000); count++; } while (count < Global.RegistrationDelay); List <Vehicle> vehicles = new List <Vehicle>(World.GetAllVehicles()); for (int i = 0; i < vehicles.Count; i++) { //if (vehicles[i].IsEls() && !API.DecorExistOn(vehicles[i].Handle, "elsplus_id") && vehicles[i].GetPedOnSeat(VehicleSeat.Driver) == Game.PlayerPed) //{ // Random rnd1 = new Random(); // int rnd = rnd1.Next(Game.GameTime); // Utils.DebugWriteLine($"Registering Decor Int of {rnd} for vehicle elsplus id"); // API.DecorSetInt(vehicles[i].Handle, "elsplus_id", rnd); // vehicleList.Add(vehicles[i].Handle); //} /*else*/ if (vehicles[i].IsEls() && API.DecorExistOn(vehicles[i].Handle, "elsplus_id")) { int id = vehicles[i].GetElsId(); int currVeh = 0; if (Game.PlayerPed.CurrentVehicle != null) { currVeh = Game.PlayerPed.CurrentVehicle.GetElsId(); } Utils.DebugWriteLine($"Got ELS Id for this vehicle of {id}"); //if (!vehicleList.ContainsKey(id)) //{ // Utils.DebugWriteLine($"ELS Vehicle found with id of {id} attempting to get data from server"); // //ELS.TriggerServerEvent("ELS:FullSync:UniCast", Game.Player.ServerId, id); // //await ELS.Delay(5000); //} string json = API.GetConvar("elsplus_data", ""); //Utils.DebugWriteLine($"Got Registration Json of: {json}"); if (!String.IsNullOrEmpty(json)) { Dictionary <int, string> vehlist = JsonConvert.DeserializeObject <Dictionary <int, string> >(json); if (!vehicleList.ContainsKey(id) && vehlist.ContainsKey(id)) { Utils.DebugWriteLine($"Veh not in client list registering new vehicle for id {id}"); vehicleList.Add(vehicles[i].Handle, JsonConvert.DeserializeObject <ELSVehicleFSData>(vehlist[id])); } else if (!vehicleList.ContainsKey(id) && !vehlist.ContainsKey(id)) { Utils.DebugWriteLine($"Veh not in client list nor server list registering vehicle"); vehicleList.Add(vehicles[i].Handle); } else if (vehicleList.ContainsKey(id) && !vehlist.ContainsKey(id)) { Utils.DebugWriteLine($"Veh not in client list nor server list registering vehicle"); vehicleList.Add(vehicles[i].Handle); } else if (vehicleList.ContainsKey(id) && currVeh > 0 && currVeh != id) { Utils.DebugWriteLine($"Vehicle in list but curr != id setting data from convar"); vehicleList[id].SetData(JsonConvert.DeserializeObject <ELSVehicleFSData>(vehlist[id])); ; } else if (vehicleList.ContainsKey(id) && !vehlist.ContainsKey(id)) { vehicleList.Remove(id); } } } } }