Beispiel #1
0
        internal bool Sell(decimal curBallance, UnturnedPlayer player, RaycastInfo raycastInfo, out decimal totalCost, out short actualCount)
        {
            bool sufficientAmount = false;

            totalCost   = 0;
            actualCount = 0;
            InteractableVehicle vehicle = null;

            if (RestrictBuySell == RestrictBuySell.BuyOnly)
            {
                actualCount = -1;
                return(false);
            }
            VehicleInfo vInfo = DShop.Instance.Database.GetVehicleInfo((ulong)player.CSteamID, ItemID);

            if (vInfo == null)
            {
                // The car the player's looking at hasn't been bought before from them, from the shop.
                actualCount = -2;
                return(false);
            }
            else
            {
                vehicle          = raycastInfo.vehicle;
                sufficientAmount = true;
                actualCount      = 1;
                if (DShop.Instance.Configuration.Instance.VehicleSellDropElements)
                {
                    BarricadeRegion vregion = null;
                    byte            x;
                    byte            y;
                    ushort          plant;
                    if (BarricadeManager.tryGetPlant(vehicle.transform, out x, out y, out plant, out vregion))
                    {
                        for (int j = 0; j < vregion.drops.Count; j++)
                        {
                            if (j < vregion.drops.Count && vregion.barricades[j].barricade.id > 0)
                            {
                                Item item = new Item(vregion.barricades[j].barricade.id, true);
                                ItemManager.dropItem(item, vregion.drops[j].model.position, false, true, true);
                            }
                        }
                    }
                }
                DShop.Instance.Database.DeleteVehicleInfo(vInfo);
                vehicle.askDamage(ushort.MaxValue, false);
                totalCost = decimal.Multiply(BuyCost, SellMultiplier);
                DShop.Instance._OnShopSell(decimal.Add(curBallance, totalCost), player, 1, this, ItemType.Vehicle, BuyCost, totalCost, actualCount, 0);
            }
            return(sufficientAmount);
        }
        public void VehicleCapRun()
        {
            if ((DateTime.Now - _lastVehicleCapRun).TotalSeconds < _wreckPlugin.ConfigurationInstance.VehicleDestructionInterval)
            {
                return;
            }
            int runCount = 0;

            while (VehicleManager.vehicles.Count > _wreckPlugin.ConfigurationInstance.MaxVehiclesAllowed)
            {
                InteractableVehicle vehicle = VehicleManager.vehicles.FirstOrDefault();

                if (vehicle == null)
                {
                    _lastVehicleCapRun = DateTime.Now;
                    return;
                }

                if (vehicle.isLocked && _permissionProvider.CheckHasAnyPermission(_wreckPlugin.Container.Resolve <IPlayerManager> ().GetPlayer(vehicle.lockedOwner.m_SteamID.ToString()), "wreck.skip.vehicle", "wreck.skip.*", "wreck.*") == PermissionResult.Grant)
                {
                    _lastVehicleCapRun = DateTime.Now;
                    return;
                }

                bool skip  = false;
                int  count = 0;

                BarricadeManager.tryGetPlant(vehicle.transform, out byte _, out byte _, out ushort _, out BarricadeRegion region);
                count += region.barricades.Count;

                if (_wreckPlugin.ConfigurationInstance.KeepVehiclesWithSigns && region.drops.Any(c => c.interactable is InteractableSign sign && sign.text.Contains(_wreckPlugin.ConfigurationInstance.VehicleSignFlag)))
                {
                    continue;
                }

                foreach (var tranCar in vehicle.trainCars)
                {
                    BarricadeManager.tryGetPlant(tranCar.root, out _, out _, out _, out BarricadeRegion tRegion);
                    count += tRegion.barricades.Count;
                    if (_wreckPlugin.ConfigurationInstance.KeepVehiclesWithSigns && tRegion.drops.Any(c => c.interactable is InteractableSign sign && sign.text.Contains(_wreckPlugin.ConfigurationInstance.VehicleSignFlag)))
                    {
                        skip = true;
                        break;
                    }
                }

                if (_wreckPlugin.ConfigurationInstance.LowElementCountOnly)
                {
                    if (count >= _wreckPlugin.ConfigurationInstance.MinElementCount)
                    {
                        skip = true;
                    }
                }

                if (!skip)
                {
                    vehicle.askDamage(ushort.MaxValue, true);
                }

                runCount++;
                if (runCount > 15)
                {
                    break;
                }
            }

            _lastVehicleCapRun = DateTime.Now;
        }