示例#1
0
        public void Save()
        {
            DbModel.Health                = GameVehicle.Health;
            DbModel.Door1Damage           = GameVehicle.IsDoorBroken(1);
            DbModel.Door2Damage           = GameVehicle.IsDoorBroken(2);
            DbModel.Door3Damage           = GameVehicle.IsDoorBroken(3);
            DbModel.Door4Damage           = GameVehicle.IsDoorBroken(4);
            DbModel.Window1Damage         = GameVehicle.IsWindowBroken(1);
            DbModel.Window2Damage         = GameVehicle.IsWindowBroken(2);
            DbModel.Window3Damage         = GameVehicle.IsWindowBroken(3);
            DbModel.Window4Damage         = GameVehicle.IsWindowBroken(4);
            DbModel.PrimaryColor          = GameVehicle.CustomPrimaryColor.ToHex();
            DbModel.SecondaryColor        = GameVehicle.CustomSecondaryColor.ToHex();
            DbModel.EnginePowerMultiplier = GameVehicle.EnginePowerMultiplier;
            DbModel.NumberPlateStyle      = GameVehicle.NumberPlateStyle;
            DbModel.NumberPlate           = GameVehicle.NumberPlate;
            DbModel.Fuel            = GameVehicle.GetSharedData("fuel");
            DbModel.FuelConsumption = GameVehicle.GetSharedData("fuelConsumption");
            DbModel.Milage          = GameVehicle.GetSharedData("milage");

            if (_nonDbVehicle)
            {
                return;
            }
            RoleplayContext ctx = Singletons.RoleplayContextFactory.Create();

            using (VehiclesRepository repository = new VehiclesRepository(ctx))
            {
                repository.Update(DbModel);
                repository.Save();
            }
        }
示例#2
0
        public void Dispose()
        {
            if (!_nonDbVehicle)
            {
                Save();
            }


            GameVehicle.Remove();
        }
示例#3
0
 public static void ClearVehicleMods(GameVehicle veh)
 {
     foreach (var type in ModTypes.Keys)
     {
         API.Shared.RemoveVehicleMod(veh.Entity, type);
     }
     API.Shared.SetVehicleCustomPrimaryColor(veh.Entity, 0, 0, 0);
     API.Shared.SetVehicleCustomSecondaryColor(veh.Entity, 0, 0, 0);
     API.Shared.SetVehicleTyreSmokeColor(veh.Entity, new GTANetworkAPI.Color(0, 0, 0));
     API.Shared.SetVehicleNeonColor(veh.Entity, 0, 0, 0);
     API.Shared.SetVehicleWindowTint(veh.Entity, 0);
 }
示例#4
0
        public void VehicleEditRespawn(Player player, params object[] arguments)
        {
            GameVehicle veh = NAPI.Data.GetEntityData(player, "EDIT_VEH");

            if (veh == null)
            {
                NAPI.Chat.SendChatMessageToPlayer(player, "~r~Vehicle editor error. Null vehicle.");
                return;
            }

            VehicleManager.respawn_vehicle(veh);
            NAPI.Data.ResetEntityData(player, "EDIT_VEH");
            NAPI.Chat.SendChatMessageToPlayer(player, "~g~Vehicle respawned!");
            NAPI.ClientEvent.TriggerClientEvent(player, "finish_veh_edit");
        }
示例#5
0
        void AddVehicleMod(GameVehicle veh, int type, string mod)
        {
            if (veh.VehMods == null)
            {
                veh.VehMods = new Dictionary <string, string>();
            }

            if (veh.VehMods.ContainsKey(type.ToString()))
            {
                veh.VehMods[type.ToString()] = mod;
            }
            else
            {
                veh.VehMods.Add(type.ToString(), mod);
            }
        }
示例#6
0
        public void EditVehDelete(Player player, params object[] arguments)
        {
            GameVehicle veh = NAPI.Data.GetEntityData(player, "EDIT_VEH");

            if (veh == null)
            {
                NAPI.Chat.SendChatMessageToPlayer(player, "~r~Vehicle editor error. Null vehicle.");
                return;
            }

            VehicleManager.despawn_vehicle(veh);
            veh.Delete();
            NAPI.Chat.SendChatMessageToPlayer(player, "Vehicle deleted successfully!");
            NAPI.ClientEvent.TriggerClientEvent(player, "finish_veh_edit");
            NAPI.Data.ResetEntityData(player, "EDIT_VEH");
        }
示例#7
0
        public void VehicleEditChangeSpawn(Player player, params object[] arguments)
        {
            GameVehicle veh = NAPI.Data.GetEntityData(player, "EDIT_VEH");

            if (veh == null)
            {
                NAPI.Chat.SendChatMessageToPlayer(player, "~r~Vehicle editor error. Null vehicle.");
                return;
            }

            veh.SpawnPos       = NAPI.Entity.GetEntityPosition(veh.Entity);
            veh.SpawnRot       = NAPI.Entity.GetEntityRotation(veh.Entity);
            veh.SpawnDimension = (int)NAPI.Entity.GetEntityDimension(veh.Entity);
            veh.Save();

            NAPI.Chat.SendChatMessageToPlayer(player, "Vehicle position spawn saved to current location.");
        }
示例#8
0
 public void Repair()
 {
     GameVehicle.Repair();
     if (_nonDbVehicle)
     {
         return;
     }
     DbModel.Door1Damage   = false;
     DbModel.Door2Damage   = false;
     DbModel.Door3Damage   = false;
     DbModel.Door4Damage   = false;
     DbModel.Window1Damage = false;
     DbModel.Window2Damage = false;
     DbModel.Window3Damage = false;
     DbModel.Window4Damage = false;
     DbModel.Health        = 1000f;
     Save();
 }
示例#9
0
        public void Spawn()
        {
            GameVehicle                     = Alt.CreateVehicle(DbModel.Model.ToString(), new Position(DbModel.PosX, DbModel.PosY, DbModel.PosZ), new Rotation(DbModel.RotPitch, DbModel.RotPitch, DbModel.RotYaw));
            GameVehicle.EngineOn            = false;
            GameVehicle.ManualEngineControl = true;
            GameVehicle.ModKit              = 1;



            GameVehicle.PrimaryColorRgb = new Rgba((byte)DbModel.R, (byte)DbModel.G, (byte)DbModel.B, 1);
            GameVehicle.NumberplateText = $"LS {DbModel.Id}";

            GameVehicle.SetData("vehicle:data", this);
            GameVehicle.SetData("vehicle:id", DbModel.Id);
            GameVehicle.SetSyncedMetaData("vehicle:syncedData", DbModel);

            if (_nonDbVehicle)
            {
                return;
            }

            foreach (ItemModel upgrade in DbModel.VehicleUpgrades)
            {
                if ((TuningType)upgrade.FirstParameter == TuningType.Wheels)
                {
                    GameVehicle.SetWheels((byte)upgrade.SecondParameter, (byte)upgrade.ThirdParameter);
                }
                else
                {
                    GameVehicle.SetMod((VehicleModType)upgrade.SecondParameter, (byte)upgrade.ThirdParameter);
                }
            }


            //Save();
        }
示例#10
0
        public override void Spawn()
        {
            GameVehicle = NAPI.Vehicle.CreateVehicle(NAPI.Util.VehicleNameToModel(DbModel.VehicleHash),
                                                     new Vector3(DbModel.SpawnPositionX, DbModel.SpawnPositionY, DbModel.SpawnPositionZ),
                                                     DbModel.SpawnPositionX, DbModel.PrimaryColor.ToColor(),
                                                     DbModel.SecondaryColor.ToColor(),
                                                     DbModel.NumberPlate, 255, true);
            GameVehicle.Rotation = new Vector3(DbModel.SpawnRotationX,
                                               DbModel.SpawnRotationY,
                                               DbModel.SpawnRotationZ);
            GameVehicle.NumberPlateStyle       = DbModel.NumberPlateStyle;
            GameVehicle.EnginePowerMultiplier  = DbModel.EnginePowerMultiplier;
            GameVehicle.EngineTorqueMultiplier = DbModel.EngineTorqueMultiplier;
            GameVehicle.WheelType    = DbModel.WheelType;
            GameVehicle.WheelColor   = DbModel.WheelColor;
            GameVehicle.EngineStatus = false;
            DbModel.IsSpawned        = true;
            NAPI.Vehicle.BreakVehicleDoor(GameVehicle, 1, DbModel.Door1Damage);
            NAPI.Vehicle.BreakVehicleDoor(GameVehicle, 2, DbModel.Door2Damage);
            NAPI.Vehicle.BreakVehicleDoor(GameVehicle, 3, DbModel.Door3Damage);
            NAPI.Vehicle.BreakVehicleDoor(GameVehicle, 4, DbModel.Door4Damage);
            NAPI.Vehicle.BreakVehicleWindow(GameVehicle, 1, DbModel.Window1Damage);
            NAPI.Vehicle.BreakVehicleWindow(GameVehicle, 2, DbModel.Window2Damage);
            NAPI.Vehicle.BreakVehicleWindow(GameVehicle, 3, DbModel.Window3Damage);
            NAPI.Vehicle.BreakVehicleWindow(GameVehicle, 4, DbModel.Window4Damage);

            //Dodajemy tuning do pojazdu
            float engineMultipier = 0f;
            float torqueMultipier = 0f;

            foreach (ItemModel tuning in DbModel.ItemsInVehicle)
            {
                if (tuning.ItemEntityType == ItemEntityType.Tuning && tuning.FourthParameter.HasValue)
                {
                    if (tuning.FirstParameter != null && (TuningType)tuning.FirstParameter == TuningType.Speed)
                    {
                        if (tuning.SecondParameter != null)
                        {
                            engineMultipier += (float)tuning.SecondParameter;
                        }
                        if (tuning.ThirdParameter != null)
                        {
                            torqueMultipier += (float)tuning.ThirdParameter;
                        }
                    }
                }
            }

            //Te metody działają tak, że ujemny mnożnik zmniejsza | 0 to normalnie | a dodatni poprawia
            //Pola są potrzebne, ponieważ w salonie będą dostępne 3 wersje pojazdu
            //TODO: tańsza o 10% zmniejszone osiągi o -5f
            //TODO: normalna
            //TODO: droższa o 25% zwiększone osiągi o 5f
            NAPI.Vehicle.SetVehicleEnginePowerMultiplier(GameVehicle, engineMultipier);
            NAPI.Vehicle.SetVehicleEngineTorqueMultiplier(GameVehicle, torqueMultipier);

            //NAPI.Data.SetEntitySharedData(GameVehicle.Handle, "_maxfuel", DbModel.Fuel);
            //NAPI.Data.SetEntitySharedData(GameVehicle.Handle, "_fuel", DbModel.Fuel);
            //NAPI.Data.SetEntitySharedData(GameVehicle.Handle, "_fuelConsumption", DbModel.FuelConsumption);
            //NAPI.Data.SetEntitySharedData(GameVehicle.Handle, "_milage", DbModel.Milage);
            GameVehicle.SetData("VehicleEntity", this);
            GameVehicle.SetSharedData("Id", DbModel.Id);
            GameVehicle.SetSharedData("milage", DbModel.Milage);
            GameVehicle.SetSharedData("fuel", DbModel.Fuel);
            GameVehicle.SetSharedData("fuelConsumption", DbModel.FuelConsumption);
            GameVehicle.SetSharedData("maxFuel", DbModel.FuelTank);
            EntityHelper.Add(this);
            Save();
        }
示例#11
0
        public static void ApplyVehicleMods(GameVehicle veh)
        {
            foreach (var mod in veh.VehMods ?? new Dictionary <string, string>())
            {
                var modid = Convert.ToInt32(mod.Key);
                if (modid == PrimaryColorId)
                {
                    var clrs = ((string)mod.Value).Split('|');
                    if (clrs.Length == 1)
                    {
                        API.Shared.SetVehiclePrimaryColor(veh.Entity, Convert.ToInt32(clrs[0]));
                    }
                    else
                    {
                        API.Shared.SetVehicleCustomPrimaryColor(veh.Entity, Convert.ToInt32(clrs[0]), Convert.ToInt32(clrs[1]), Convert.ToInt32(clrs[2]));
                    }
                }
                else if (modid == SecondryColorId)
                {
                    var clrs = ((string)mod.Value).Split('|');
                    if (clrs.Length == 1)
                    {
                        API.Shared.SetVehicleSecondaryColor(veh.Entity, Convert.ToInt32(clrs[0]));
                    }
                    else
                    {
                        API.Shared.SetVehicleCustomSecondaryColor(veh.Entity, Convert.ToInt32(clrs[0]), Convert.ToInt32(clrs[1]), Convert.ToInt32(clrs[2]));
                    }
                }
                else if (modid == TyresSmokeColorId)
                {
                    var clrs = ((string)mod.Value).Split('|');
                    API.Shared.SetVehicleTyreSmokeColor(veh.Entity, new GTANetworkAPI.Color(Convert.ToInt32(clrs[0]),
                                                                                            Convert.ToInt32(clrs[1]), Convert.ToInt32(clrs[2])));

                    foreach (var p in API.Shared.GetAllPlayers())
                    {
                        if (p == null)
                        {
                            continue;
                        }

                        if (API.Shared.GetEntityPosition(veh.Entity)
                            .DistanceTo(p.Position) <= 500)
                        {
                            if (Convert.ToInt32(clrs[1]) == 0 && Convert.ToInt32(clrs[1]) == 0 &&
                                Convert.ToInt32(clrs[1]) == 0)
                            {
                                API.Shared.SendNativeToPlayer(p,
                                                              Hash.TOGGLE_VEHICLE_MOD, veh.Entity, 20, false);
                            }
                            else
                            {
                                API.Shared.SendNativeToPlayer(p,
                                                              Hash.TOGGLE_VEHICLE_MOD, veh.Entity, 20, true);
                            }
                        }
                    }
                }
                else if (modid == NeonColorId)
                {
                    var clrs = ((string)mod.Value).Split('|');
                    API.Shared.SetVehicleNeonColor(veh.Entity, Convert.ToInt32(clrs[0]), Convert.ToInt32(clrs[1]),
                                                   Convert.ToInt32(clrs[2]));
                }
                else if (modid == WindowTintId)
                {
                    API.Shared.SetVehicleWindowTint(veh.Entity, Convert.ToInt32(mod.Value));
                }
                else
                {
                    API.Shared.SetVehicleMod(veh.Entity, modid, Convert.ToInt32(mod.Value));

                    if (modid == 14) //Horns
                    {
                        foreach (var p in API.Shared.GetAllPlayers())
                        {
                            if (p == null)
                            {
                                continue;
                            }

                            if (API.Shared.GetEntityPosition(veh.Entity)
                                .DistanceTo(p.Position) <= 500)
                            {
                                API.Shared.SendNativeToPlayer(p,
                                                              Hash.SET_VEHICLE_MOD, veh.Entity, 14, Convert.ToInt32(mod.Value));
                            }
                        }
                    }
                }
            }
        }
示例#12
0
        public void VehicleEditSave(Player player, params object[] arguments)
        {
            GameVehicle veh = NAPI.Data.GetEntityData(player, "EDIT_VEH");

            if (veh == null)
            {
                NAPI.Chat.SendChatMessageToPlayer(player, "~r~Vehicle editor error. Null vehicle.");
                return;
            }

            var vehId        = Convert.ToInt32(arguments[0]);
            var model        = Convert.ToString(arguments[1]);
            var owner        = Convert.ToString(arguments[2]);
            var licensePlate = Convert.ToString(arguments[3]);
            var color1       = (string)arguments[4];
            var color2       = (string)arguments[5];
            var respawnDelay = Convert.ToInt32(arguments[6]);
            var jobId        = Convert.ToInt32(arguments[7]);
            var groupId      = Convert.ToInt32(arguments[8]);

            if (veh.Id != vehId)
            {
                NAPI.Chat.SendChatMessageToPlayer(player, "~r~Vehicle editor error. Vehicle edit IDs are not equal.");
                return;
            }

            var modelHash = NAPI.Util.VehicleNameToModel(model);

            if (modelHash == 0)
            {
                NAPI.ClientEvent.TriggerClientEvent(player, "send_veh_edit_error", "Invalid vehicle model entered!");
                return;
            }

            if (!Character.IsCharacterRegistered(owner) && owner != "NONE")
            {
                NAPI.ClientEvent.TriggerClientEvent(player, "send_veh_edit_error",
                                                    "Invalid owner entered. (Character name does not exist.)");
                return;
            }

            if (JobManager.GetJobById(jobId) == null && jobId != 0)
            {
                NAPI.ClientEvent.TriggerClientEvent(player, "send_veh_edit_error", "Invalid job ID entered!");
                return;
            }

            if (GroupManager.GetGroupById(groupId) == null && groupId != 0)
            {
                NAPI.ClientEvent.TriggerClientEvent(player, "send_veh_edit_error", "Invalid group ID entered!");
                return;
            }

            if (owner == "NONE")
            {
                veh.OwnerId = 0;
            }
            else
            {
                veh.OwnerId = PlayerManager.Players.Single(x => x.CharacterName == owner).Id;
            }

            veh.VehModel     = modelHash;
            veh.LicensePlate = licensePlate;
            veh.VehMods[ModdingManager.PrimaryColorId.ToString()]  = color1;
            veh.VehMods[ModdingManager.SecondryColorId.ToString()] = color2;
            veh.RespawnDelay = TimeSpan.FromMinutes(respawnDelay);
            veh.JobId        = jobId;
            veh.Job          = JobManager.GetJobById(veh.JobId);
            veh.Group        = GroupManager.GetGroupById(veh.GroupId);
            veh.GroupId      = groupId;

            VehicleManager.respawn_vehicle(veh, NAPI.Entity.GetEntityPosition(veh.Entity));
            NAPI.Player.SetPlayerIntoVehicle(player, veh.Entity, -1);

            veh.Save();
            NAPI.Chat.SendChatMessageToPlayer(player, "Vehicle editor changes saved!");
            NAPI.ClientEvent.TriggerClientEvent(player, "finish_veh_edit");
        }