Exemple #1
0
        /// <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()]);
                    }
                }
            }
        }
Exemple #2
0
        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);
                        }
                    }
                }
            }
        }