public void ConfirmRequest(IUser user) { if (_pendingConfirmation.All(c => !Equals(c.User, user))) { user.SendLocalizedMessage(_wreckPlugin.Translations, "wreckingball_no_request"); return; } DestructionRequest destructionRequest = _pendingConfirmation.FirstOrDefault(c => Equals(c.User, user)); if (destructionRequest != null && (DateTime.Now - destructionRequest.RequestAdded).TotalSeconds >= 120) { _pendingConfirmation.Remove(destructionRequest); user.SendLocalizedMessage(_wreckPlugin.Translations, "wreckingball_no_request"); return; } _scanQueue.Add(destructionRequest); _pendingConfirmation.Remove(destructionRequest); user.SendLocalizedMessage(_wreckPlugin.Translations, "wreckingball_confirmed"); }
public void ScanRun() { if (_scanQueue.Count == 0) { return; } DestructionRequest request = _scanQueue.First(); int objectsFound = 0; foreach (BarricadeRegion region in BarricadeManager.regions) { foreach (BarricadeData data in region.barricades) { if (Vector3.Distance(request.Position, data.point.ToSystemVector()) > request.Radius) { continue; } if (_destroyQueue.ContainsKey(data.GetHashCode())) { continue; } if (request.SteamID != 0) { if (data.owner != request.SteamID) { continue; } if (request.WreckType != WreckType.Scan && _permissionProvider.CheckHasAnyPermission(_wreckPlugin.Container.Resolve <IPlayerManager> ().GetPlayer(request.SteamID.ToString()), "wreckingball.skip.barricade", "wreckingball.skip.*", "wreckingball.*") == PermissionResult.Grant) { continue; } } if (request.ItemID != 0) { if (data.barricade.id != request.ItemID) { continue; } } if (request.Filters != null) { if (!_wreckPlugin.ConfigurationInstance.Elements.Any(c => request.Filters.Contains(c.CategoryId) && c.Id == data.barricade.id || request.Filters.Contains('*'))) { continue; } } if (request.WreckType != WreckType.Scan && _permissionProvider.CheckHasAnyPermission(request.User, "wreckingball.skip.barricade", "wreckingball.skip.*", "wreckingball.*") == PermissionResult.Grant) { continue; } objectsFound++; if (request.WreckType == WreckType.Scan) { continue; } _destroyQueue.Add(data.GetHashCode(), data); } } foreach (StructureRegion region in StructureManager.regions) { foreach (StructureData data in region.structures) { if (Vector3.Distance(request.Position, data.point.ToSystemVector()) > request.Radius) { continue; } if (_destroyQueue.ContainsKey(data.GetHashCode())) { continue; } if (request.SteamID != 0) { if (data.owner != request.SteamID) { continue; } if (request.WreckType != WreckType.Scan && _permissionProvider.CheckHasAnyPermission(_wreckPlugin.Container.Resolve <IPlayerManager> ().GetPlayer(request.SteamID.ToString()), "wreckingball.skip.structure", "wreckingball.skip.*", "wreckingball.*") == PermissionResult.Grant) { continue; } } if (request.ItemID != 0) { if (data.structure.id != request.ItemID) { continue; } } if (request.Filters != null) { if (!_wreckPlugin.ConfigurationInstance.Elements.Any(c => request.Filters.Contains(c.CategoryId) && c.Id == data.structure.id || request.Filters.Contains('*'))) { continue; } } if (request.WreckType != WreckType.Scan && _permissionProvider.CheckHasAnyPermission(request.User, "wreckingball.skip.structure", "wreckingball.skip.*", "wreckingball.*") == PermissionResult.Grant) { continue; } objectsFound++; if (request.WreckType == WreckType.Scan) { continue; } _destroyQueue.Add(data.GetHashCode(), data); } } foreach (InteractableVehicle vehicle in VehicleManager.vehicles) { if (Vector3.Distance(request.Position, vehicle.transform.position.ToSystemVector()) > request.Radius) { continue; } if (_destroyQueue.ContainsKey(vehicle.GetHashCode())) { continue; } if (request.SteamID != 0) { if (vehicle.lockedOwner.m_SteamID != request.SteamID) { continue; } if (request.WreckType != WreckType.Scan && _permissionProvider.CheckHasAnyPermission(_wreckPlugin.Container.Resolve <IPlayerManager> ().GetPlayer(request.SteamID.ToString()), "wreckingball.skip.vehicle", "wreckingball.skip.*", "wreckingball.*") == PermissionResult.Grant) { continue; } } if (request.ItemID != 0) { if (vehicle.id != request.ItemID) { continue; } } if (request.Filters != null) { if (!_wreckPlugin.ConfigurationInstance.Elements.Any(c => request.Filters.Contains(c.CategoryId) && c.Id == vehicle.id || request.Filters.Contains('*'))) { continue; } } if (request.WreckType != WreckType.Scan && _permissionProvider.CheckHasAnyPermission(request.User, "wreckingball.skip.vehicle", "wreckingball.skip.*", "wreckingball.*") == PermissionResult.Grant) { continue; } objectsFound++; if (request.WreckType == WreckType.Scan) { continue; } _destroyQueue.Add(vehicle.GetHashCode(), vehicle); } if (request.Filters.Contains('A')) { foreach (Animal animal in AnimalManager.animals) { if (Vector3.Distance(request.Position, animal.transform.position.ToSystemVector()) > request.Radius) { continue; } if (_destroyQueue.ContainsKey(animal.GetHashCode())) { continue; } if (request.ItemID != 0) { if (animal.id != request.ItemID) { continue; } } objectsFound++; if (request.WreckType == WreckType.Scan) { continue; } _destroyQueue.Add(animal.GetHashCode(), animal); } } if (request.Filters.Contains('Z')) { foreach (ZombieRegion region in ZombieManager.regions) { foreach (Zombie zombie in region.zombies) { if (Vector3.Distance(request.Position, zombie.transform.position.ToSystemVector()) > request.Radius) { continue; } if (_destroyQueue.ContainsKey(zombie.GetHashCode())) { continue; } if (request.ItemID != 0) { if (zombie.id != request.ItemID) { continue; } } objectsFound++; if (request.WreckType == WreckType.Scan) { continue; } _destroyQueue.Add(zombie.GetHashCode(), zombie); } } } request.User.SendLocalizedMessage(_wreckPlugin.Translations, "wreckingball_scan", objectsFound); _scanQueue.Remove(request); if (request.WreckType == WreckType.Scan) { return; } request.User.SendLocalizedMessage(_wreckPlugin.Translations, "wreckingball_added_destruction", FormattedTimeUntilDestroyed()); }