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; }