public void SetupSettings(TruckConfig config, Truck truck)
    {
        this.Config = config;
        var skin = ChooseSkin(config.Skins);

        _truckView.SetupView(truck, skin);
    }
Beispiel #2
0
 private bool VerifyBelowTruckLimit(IPlayer player, TruckConfig truckConfig)
 {
     if (GetPlayerData(player.Id).GetTruckCount(truckConfig.Name) >= truckConfig.SpawnLimit)
     {
         ReplyToPlayer(player, "Command.Spawn.Error.TooManyOfType", truckConfig.SpawnLimit);
         return(false);
     }
     return(true);
 }
Beispiel #3
0
 private bool VerifyTruckConfigDefined(IPlayer player, string truckName, out TruckConfig truckConfig)
 {
     truckConfig = GetTruckConfig(truckName);
     if (truckConfig == null)
     {
         ReplyToPlayer(player, "Command.Spawn.Error.NotFound", truckName);
         return(false);
     }
     return(true);
 }
Beispiel #4
0
        private bool VerifyOffCooldown(IPlayer player, TruckConfig truckConfig)
        {
            var secondsRemaining = GetPlayerRemainingCooldownSeconds(player.Id, truckConfig);

            if (secondsRemaining > 0)
            {
                ReplyToPlayer(player, "Generic.Error.Cooldown", FormatTime(secondsRemaining));
                return(false);
            }
            return(true);
        }
Beispiel #5
0
        private double GetPlayerRemainingCooldownSeconds(string userID, TruckConfig truckConfig)
        {
            var playerCooldowns = GetPlayerData(userID).Cooldowns;

            if (!playerCooldowns.ContainsKey(truckConfig.Name))
            {
                return(0);
            }

            long lastUsed         = playerCooldowns[truckConfig.Name];
            long cooldownDuration = truckConfig.CooldownSeconds;
            long currentTime      = DateTimeOffset.UtcNow.ToUnixTimeSeconds();

            return(lastUsed + cooldownDuration - currentTime);
        }
Beispiel #6
0
        private void SpawnBombTruck(BasePlayer player, TruckConfig truckConfig)
        {
            var position = GetIdealCarPosition(player);

            if (position == null)
            {
                return;
            }

            ModularCar car = (ModularCar)GameManager.server.CreateEntity(PrefabSockets3, position, GetIdealCarRotation(player));

            car.spawnSettings = BombTruckSpawnSettings;
            car.Spawn();

            if (permission.UserHasPermission(player.UserIDString, PermissionDriveUnderwater))
            {
                EnableCarUnderwater(car);
            }

            car.OwnerID = player.userID;

            UpdatePlayerCooldown(player.UserIDString, truckConfig.Name);
            GetPlayerData(player.UserIDString).BombTrucks.Add(new PlayerTruckData
            {
                Name = truckConfig.Name,
                ID   = car.net.ID
            });
            SaveData();

            NextTick(() =>
            {
                car.AdminFixUp(truckConfig.EnginePartsTier);
                car.fuelSystem.GetFuelContainer().SetFlag(BaseEntity.Flags.Locked, true);

                foreach (var module in car.AttachedModuleEntities)
                {
                    var storageContainer = (module as VehicleModuleStorage)?.GetContainer();
                    if (storageContainer != null)
                    {
                        storageContainer.inventory.SetLocked(true);
                    }
                }
            });
        }
Beispiel #7
0
        private ModularCar SpawnBombTruck(BasePlayer player, TruckConfig truckConfig, bool shouldTrack = false)
        {
            if (!VerifyDependencies())
            {
                return(null);
            }

            var car = SpawnModularCar.Call("API_SpawnPresetCar", player, new Dictionary <string, object>
            {
                ["EnginePartsTier"] = truckConfig.EnginePartsTier,
                ["FuelAmount"]      = -1,
                ["Modules"]         = truckConfig.Modules
            }) as ModularCar;

            if (car == null)
            {
                return(null);
            }

            car.fuelSystem.GetFuelContainer().SetFlag(BaseEntity.Flags.Locked, true);

            foreach (var module in car.AttachedModuleEntities)
            {
                var engineStorage = GetEngineStorage(module);
                if (engineStorage != null)
                {
                    engineStorage.inventory.SetLocked(true);
                    engineStorage.internalDamageMultiplier = 0;
                }
            }

            var message = GetMessage(player.IPlayer, "Command.Spawn.Success");

            if (truckConfig.AttachRFReceiver)
            {
                int frequency;
                var hasDetonator = HasExistingDetonator(player, out frequency);

                var receiver = AttachRFReceiver(car, frequency);
                if (receiver != null)
                {
                    // Get the current frequency of the RF receiver, in case a new one was generated.
                    frequency = receiver.GetFrequency();

                    if (!hasDetonator && permission.UserHasPermission(player.UserIDString, PermissionFreeDetonator))
                    {
                        var detonatorItem = CreateRFTransmitter(frequency);
                        if (detonatorItem != null)
                        {
                            player.GiveItem(detonatorItem);
                        }
                    }

                    message += " " + GetMessage(player.IPlayer, "Command.Spawn.Success.Frequency", frequency);
                }
            }

            player.IPlayer.Reply(message);

            if (shouldTrack)
            {
                UpdatePlayerCooldown(player.UserIDString, truckConfig.Name);
            }

            GetPlayerData(player.UserIDString).BombTrucks.Add(new PlayerTruckData
            {
                Name    = truckConfig.Name,
                ID      = car.net.ID,
                Tracked = shouldTrack
            });

            SaveData();

            return(car);
        }
 public void Construct(TruckConfig config)
 {
     transform.position = _plantControl.StartPointForTruck.position;
     _truckEngine.SetNavmesh(config.Speed, _plantControl.FinishPointForTruck.position);
 }