public void Execute(IRocketPlayer caller, params string[] command) { if (!LIGHT.Instance.Configuration.Instance.KitsEnabled) { return; } string[] permission = {}; string[] Kits; Kits = LIGHT.Instance.Database.GetPlayerKitName(LIGHT.Instance.Database.CheckUserGroup(caller.Id)); bool hasPerm = false; bool console = (caller is ConsolePlayer); if (!console) { if (caller.HasPermission("kits") || caller.HasPermission("kits.*") || caller.HasPermission("*")) { hasPerm = true; } if (!hasPerm && !(caller.IsAdmin)) { UnturnedChat.Say(caller, LIGHT.Instance.Translate("lpx_no_perm")); return; } } if (command.Length == 0) { string ListKit = ""; for (int x = 0; x < Kits.Length; x++) { if (x < (Kits.Length - 1)) { ListKit += Kits[x] + ", "; } else { ListKit += Kits[x] + "."; } } UnturnedChat.Say(caller, LIGHT.Instance.Translate("kit_list", ListKit)); return; } if (command.Length >= 1) { hasPerm = false; switch (command[0].ToLower()) { case "all": if (caller.HasPermission("kits.all") || caller.HasPermission("kits.*") || caller.HasPermission("*")) { hasPerm = true; } if (!hasPerm && !console && !(caller.IsAdmin)) { UnturnedChat.Say(caller, LIGHT.Instance.Translate("lpx_no_perm")); return; } else { Kits = LIGHT.Instance.Database.GetAllKitName(); string[] cooldown = new string[Kits.Length]; string ALL = ""; for (int x = 0; x < Kits.Length; x++) { cooldown[x] = LIGHT.Instance.Database.GetKitCooldown(Kits[x]).ToString(); if (x < (Kits.Length - 1)) { ALL += Kits[x] + " Cooldown: " + cooldown[x] + ", "; } else { ALL += Kits[x] + " Cooldown: " + cooldown[x]; } } UnturnedChat.Say(caller, LIGHT.Instance.Translate("kit_list_all", ALL)); } break; case "cooldown": if (caller.HasPermission("kits.cd") || caller.HasPermission("kits.*") || caller.HasPermission("*")) { hasPerm = true; } if (!hasPerm && !console && !(caller.IsAdmin)) { UnturnedChat.Say(caller, LIGHT.Instance.Translate("lpx_no_perm")); return; } else { if (command.Length == 1) { UnturnedChat.Say(caller, LIGHT.Instance.Translate("kits_chngcd_help")); return; } if (command.Length == 2) { UnturnedChat.Say(caller, LIGHT.Instance.Translate("kits_chngcd_help2")); return; } if (command.Length > 2) { string KitName = ""; double NewCD = 60.00; for (int x = 1; x < command.Length - 1; x++) { KitName += command[x] + " "; } KitName = KitName.Trim(); if (double.TryParse(command[command.Length - 1], out NewCD)) { if (LIGHT.Instance.Database.SetKitsCooldown(KitName, NewCD)) { UnturnedChat.Say(caller, LIGHT.Instance.Translate("kits_success_chngcd", KitName, NewCD)); } else { UnturnedChat.Say(caller, LIGHT.Instance.Translate("kits_failed_chngcd", KitName)); return; } } else { UnturnedChat.Say(caller, LIGHT.Instance.Translate("kits_error_cooldown", KitName)); return; } } } break; case "add": if (caller.HasPermission("kits.add") || caller.HasPermission("kits.*") || caller.HasPermission("*")) { hasPerm = true; } if (!hasPerm && !console && !(caller.IsAdmin)) { UnturnedChat.Say(caller, LIGHT.Instance.Translate("lpx_no_perm")); return; } else { if (command.Length == 1) { UnturnedChat.Say(caller, LIGHT.Instance.Translate("kits_add_help")); return; } if (command.Length >= 2) { string KitName = ""; string itemID = ""; double NewCD = 60.00; for (int x = 1; x < command.Length; x++) { if (!command[x].Contains("/")) { KitName += command[x] + " "; } else { itemID += command[x] + " "; } } KitName = KitName.Trim(); itemID = itemID.Trim(); if (LIGHT.Instance.Database.AddKit(KitName, itemID, NewCD)) { UnturnedChat.Say(caller, LIGHT.Instance.Translate("kits_add_success", KitName)); } else { UnturnedChat.Say(caller, LIGHT.Instance.Translate("kits_add_failed", KitName)); return; } } } break; case "remove": if (caller.HasPermission("kits.remove") || caller.HasPermission("kits.*") || caller.HasPermission("*")) { hasPerm = true; } if (!hasPerm && !console && !(caller.IsAdmin)) { UnturnedChat.Say(caller, LIGHT.Instance.Translate("lpx_no_perm")); return; } else { if (command.Length == 1) { UnturnedChat.Say(caller, LIGHT.Instance.Translate("kits_remove_help")); return; } if (command.Length >= 2) { string KitName = ""; for (int x = 1; x < command.Length; x++) { KitName += command[x] + " "; } KitName = KitName.Trim(); if (LIGHT.Instance.Database.CheckKit(KitName)) { if (LIGHT.Instance.Database.RemoveKit(KitName)) { UnturnedChat.Say(caller, LIGHT.Instance.Translate("kits_remove_success", KitName)); } else { UnturnedChat.Say(caller, LIGHT.Instance.Translate("kits_remove_failed", KitName)); return; } } else { UnturnedChat.Say(caller, LIGHT.Instance.Translate("kit_notexist")); return; } } } break; default: break; } } }
public void Execute(IRocketPlayer caller, string[] command) { if (AdminToolsPlugin.Config.DisableAbusableCommands) { UnturnedChat.Say(caller, "Fail_Command_Disabled".Translate()); return; } UnturnedPlayer Player = (UnturnedPlayer)caller; if (command.Length > 0) { if (Player.Player.equipment.state == null || Player.Player.equipment.state.Length < 12 || Player.Player.equipment.asset == null || Player.Player.equipment.asset.type != EItemType.GUN) { UnturnedChat.Say(caller, "SetAttachment_Fail_Gun".Translate()); return; } ItemAsset Item = null; if (ushort.TryParse(command[0], out ushort ItemID)) { Asset SelectAsset = Assets.find(EAssetType.ITEM, ItemID); if (SelectAsset != null && typeof(ItemAsset).IsAssignableFrom(SelectAsset.GetType()) && Types.Contains(((ItemAsset)SelectAsset).type)) { Item = (ItemAsset)SelectAsset; } } if (Item == null) { ItemAsset[] Ast = Assets.find(EAssetType.ITEM).Where(x => typeof(ItemAsset).IsAssignableFrom(x.GetType()) && Types.Contains(((ItemAsset)x).type) && ((ItemAsset)x).itemName.ToLower().Contains(command[0].ToLower())) .Cast <ItemAsset>() .ToArray(); if (Ast.Length != 0) { Item = Ast[0]; } } if (Item != null) { if (AdminToolsPlugin.Config.BlacklistedAttachments.Contains(Item.id)) { UnturnedChat.Say(caller, "SetAttachment_Fail_Blacklist".Translate()); return; } byte pos = 255; if (Item.type == EItemType.SIGHT) { pos = 0; } else if (Item.type == EItemType.TACTICAL) { pos = 2; } else if (Item.type == EItemType.GRIP) { pos = 4; } else if (Item.type == EItemType.BARREL) { pos = 6; } else if (Item.type == EItemType.MAGAZINE) { pos = 8; } if (pos == 255) { return; } byte[] ID = BitConverter.GetBytes(Item.id); Array.Copy(ID, 0, Player.Player.equipment.state, pos, 2); Player.Player.equipment.sendUpdateState(); UnturnedChat.Say(caller, "SetAttachment_GaveAttachment".Translate(Item.itemName)); } else { UnturnedChat.Say(caller, "SetAttachment_Fail_Item".Translate()); } } else { UnturnedChat.Say(caller, Syntax); } }
public void Execute(IRocketPlayer caller, string[] command) { var pluginInstance = BaseClusteringPlugin.Instance; if (pluginInstance == null) { throw new NullReferenceException("BaseClusteringPlugin.Instance is null. Cannot execute command."); } var args = command.ToList(); var barricades = args.CheckArgsIncludeString("b", out var index); if (index > -1) { args.RemoveAt(index); } var structs = args.CheckArgsIncludeString("s", out index); if (index > -1) { args.RemoveAt(index); } var plants = args.CheckArgsIncludeString("v", out index); if (index > -1) { args.RemoveAt(index); } var target = args.GetIRocketPlayer(out index); if (index > -1) { args.RemoveAt(index); } var itemAssetInput = pluginInstance.Translate("not_available"); var itemAssets = args.GetMultipleItemAssets(out index); var assetCount = itemAssets.Count; if (index > -1) { itemAssetInput = args[index]; args.RemoveAt(index); } var radius = args.GetFloat(out index); if (index > -1) { args.RemoveAt(index); } var builds = BuildableDirectory.GetBuildables(includePlants: plants); if (target != null) { builds = builds.Where(k => k.Owner.ToString().Equals(target.Id)); } if (barricades) { builds = builds.Where(k => k.Asset is ItemBarricadeAsset); } else if (structs) { builds = builds.Where(k => k.Asset is ItemStructureAsset); } if (assetCount > 0) { builds = builds.Where(k => itemAssets.Exists(l => k.AssetId == l.id)); } if (!float.IsNegativeInfinity(radius)) { if (!(caller is UnturnedPlayer cPlayer)) { UnturnedChat.Say(caller, pluginInstance.Translate("cannot_be_executed_from_console")); return; } builds = builds.Where(k => (k.Position - cPlayer.Position).sqrMagnitude <= Mathf.Pow(radius, 2)); } var itemAssetName = pluginInstance.Translate("not_available"); if (assetCount == 1) { itemAssetName = itemAssets.First().itemName; } else if (assetCount > 1) { itemAssetName = itemAssetInput; } UnturnedChat.Say(caller, pluginInstance.Translate("build_count", builds.Count(), itemAssetName, !float.IsNegativeInfinity(radius) ? radius.ToString(CultureInfo.CurrentCulture) : pluginInstance.Translate("not_available"), target != null ? target.DisplayName : pluginInstance.Translate("not_available"), plants, barricades, structs)); }
public void Execute(IRocketPlayer caller, string[] command) { float radius = 0; UnturnedPlayer player = null; if (!(caller is ConsolePlayer)) { if (command.GetFloatParameter(0) == null) { UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_lv_help")); return; } player = (UnturnedPlayer)caller; radius = (float)command.GetFloatParameter(0); } foreach (InteractableVehicle vehicle in VehicleManager.vehicles) { int count = 0; bool getPInfo = false; // skip the vehicle in the list if it is destroyed or drowned. if (vehicle.isDead || vehicle.isDrowned) { continue; } if (WreckingBall.Instance.Configuration.Instance.EnablePlayerInfo && WreckingBall.isPlayerInfoLibPresent && WreckingBall.isPlayerInfoLibLoaded) { getPInfo = true; } string lockedBy = getPInfo ? WreckingBall.Instance.PInfoGenerateMessage((ulong)vehicle.lockedOwner) : vehicle.lockedOwner.ToString(); ulong signOwner = 0; string signBy = string.Empty; bool showSignBy = false; if (BarricadeManager.tryGetPlant(vehicle.transform, out byte x, out byte y, out ushort plant, out BarricadeRegion barricadeRegion)) { count = barricadeRegion.drops.Count; } if (caller is ConsolePlayer || Vector3.Distance(vehicle.transform.position, player.Position) <= radius) { showSignBy = DestructionProcessing.HasFlaggedElement(vehicle.transform, out signOwner); if (showSignBy) { signBy = getPInfo ? WreckingBall.Instance.PInfoGenerateMessage(signOwner) : signOwner.ToString(); } ProcessMessages(caller, vehicle.transform, vehicle.asset, vehicle.instanceID, count, lockedBy, vehicle.isLocked, signBy, showSignBy); } // Handle train cars too, if in range. if (vehicle.asset.engine == EEngine.TRAIN && vehicle.trainCars != null && vehicle.trainCars.Length > 1) { for (int i = 1; i < vehicle.trainCars.Length; i++) { if (caller is ConsolePlayer || Vector3.Distance(vehicle.trainCars[i].root.transform.position, player.Position) <= radius) { if (BarricadeManager.tryGetPlant(vehicle.trainCars[i].root, out x, out y, out plant, out barricadeRegion)) { count = barricadeRegion.drops.Count; } showSignBy = DestructionProcessing.HasFlaggedElement(vehicle.trainCars[i].root, out signOwner); if (showSignBy) { signBy = getPInfo ? WreckingBall.Instance.PInfoGenerateMessage(signOwner) : signOwner.ToString(); } ProcessMessages(caller, vehicle.trainCars[i].root, null, vehicle.instanceID, count, lockedBy, false, signBy, showSignBy, true, i); } } } } }
public void Execute(IRocketPlayer caller, string[] command) { UnturnedPlayer player = (UnturnedPlayer)caller; if (command.Length == 0 || command.Length > 2) { UnturnedChat.Say(player, U.Translate("command_generic_invalid_parameter")); throw new WrongUsageOfCommandException(caller, this); } ushort id = 0; byte amount = 1; string itemString = command[0].ToString(); if (!ushort.TryParse(itemString, out id)) { List <ItemAsset> sortedAssets = new List <ItemAsset>(SDG.Unturned.Assets.find(EAssetType.ITEM).Cast <ItemAsset>()); ItemAsset asset = sortedAssets.Where(i => i.itemName != null).OrderBy(i => i.itemName.Length).Where(i => i.itemName.ToLower().Contains(itemString.ToLower())).FirstOrDefault(); if (asset != null) { id = asset.id; } if (String.IsNullOrEmpty(itemString.Trim()) || id == 0) { UnturnedChat.Say(player, U.Translate("command_generic_invalid_parameter")); throw new WrongUsageOfCommandException(caller, this); } } Asset a = SDG.Unturned.Assets.find(EAssetType.ITEM, id); if (command.Length == 2 && !byte.TryParse(command[1].ToString(), out amount) || a == null) { UnturnedChat.Say(player, U.Translate("command_generic_invalid_parameter")); throw new WrongUsageOfCommandException(caller, this); } string assetName = ((ItemAsset)a).itemName; if (U.Settings.Instance.EnableItemBlacklist && !player.HasPermission("itemblacklist.bypass")) { for (int i = 0; i < U.Settings.Instance.Items.Count; i++) { Blacklist Item = U.Settings.Instance.Items[i]; if (id == Item.id) { UnturnedChat.Say(player, U.Translate("command_i_blacklisted")); return; } } } if (U.Settings.Instance.EnableItemSpawnLimit && !player.HasPermission("itemspawnlimit.bypass")) { if (amount > U.Settings.Instance.MaxSpawnAmount) { UnturnedChat.Say(player, U.Translate("command_i_too_much", U.Settings.Instance.MaxSpawnAmount)); return; } } if (player.GiveItem(id, amount)) { Logger.Log(U.Translate("command_i_giving_console", player.DisplayName, id, amount)); UnturnedChat.Say(player, U.Translate("command_i_giving_private", amount, assetName, id)); } else { UnturnedChat.Say(player, U.Translate("command_i_giving_failed_private", amount, assetName, id)); } }
public void Execute(IRocketPlayer caller, string[] command) { UnturnedPlayer player = (UnturnedPlayer)caller; if (command.Length == 0) // /jail { UnturnedChat.Say(player, $"{JailTimePlugin.Instance.Translate("jail.syntax")}", Color.red); return; } UnturnedPlayer toPlayer = UnturnedPlayer.FromName(command[0]); if (command.Length == 1) // /jail [playername] { if (toPlayer == null) { UnturnedChat.Say(player, $"{JailTimePlugin.Instance.Translate("jail.player.not.found", command[0])}", Color.red); return; } if (toPlayer.CSteamID == player.CSteamID) { UnturnedChat.Say(player, $"{JailTimePlugin.Instance.Translate("jail.player.self")}", Color.red); return; } UnturnedChat.Say(player, $"{JailTimePlugin.Instance.Translate("jail.syntax")}", Color.red); return; } int.TryParse(command[1], out int resultDuration); if (command.Length == 2) // /jail [playername] [duration] { if (toPlayer == null) { UnturnedChat.Say(player, $"{JailTimePlugin.Instance.Translate("jail.player.not.found", command[0])}", Color.red); return; } if (toPlayer.HasPermission(Permissions[0])) // есть ли у другого игрока пермишен иммунитета { UnturnedChat.Say(player, $"{JailTimePlugin.Instance.Translate("jail.player.immune", toPlayer.CharacterName)}", Color.red); return; } if (JailTimePlugin.Instance.Prison.IsPlayerContains(toPlayer.CSteamID)) // находится ли игрок в тюрьме { UnturnedChat.Say(player, $"{JailTimePlugin.Instance.Translate("jail.player.arrested", toPlayer.CharacterName, resultDuration)}", Color.red); return; } if (toPlayer.CSteamID == player.CSteamID) // проверка на само jail { UnturnedChat.Say(player, $"{JailTimePlugin.Instance.Translate("jail.player.self")}", Color.red); return; } // одеть наручники на игрока JailTimePlugin.Instance.Prison.HandcuffToPlayer(toPlayer.CSteamID); JailTimePlugin.Instance.Prison.ArrestPlayer(toPlayer.CSteamID, resultDuration); UnturnedChat.Say(player, $"{JailTimePlugin.Instance.Translate("jail.successful.arrested", toPlayer.CharacterName, resultDuration)}", Color.yellow); UnturnedChat.Say(toPlayer, $"{JailTimePlugin.Instance.Translate("jail.player.arrested.message", player.CharacterName, resultDuration)}", Color.red); } }
internal static void DestructionLoop(WreckType type) { try { int i = 0; EPlayerKill pKill; uint xp; while (((dIdx < dIdxCount && type == WreckType.Wreck) || (cdIdx < cdIdxCount && type == WreckType.Cleanup)) && i < WreckingBall.Instance.Configuration.Instance.DestructionsPerInterval) { Destructible element = type == WreckType.Wreck ? destroyList[dIdx] : cleanupList[cdIdx]; if (element.Type == ElementType.Structure) { try { if (WreckingBall.Instance.Configuration.Instance.EnableDestroyedElementDrop) { try { Item item = new Item(element.ItemID, true); ItemManager.dropItem(item, element.Transform.position, false, true, true); } catch (Exception ex) { Logger.LogException(ex, "Error in dropping an item for a destroyed structure."); } } StructureManager.damage(element.Transform, element.Transform.position, ushort.MaxValue, 1, false); } catch (Exception ex) { Logger.LogException(ex, "Error in destroying structure."); } } else if (element.Type == ElementType.Barricade || element.Type == ElementType.VehicleBarricade) { try { if ((element.Type == ElementType.VehicleBarricade && WreckingBall.Instance.Configuration.Instance.EnableVehicleElementDrop) || (element.Type == ElementType.Barricade && WreckingBall.Instance.Configuration.Instance.EnableDestroyedElementDrop)) { try { Item item = new Item(element.ItemID, true); ItemManager.dropItem(item, element.Transform.position, false, true, true); } catch (Exception ex) { Logger.LogException(ex, "Error in dropping an item for a destroyed" + (element.Type == ElementType.VehicleBarricade ? " vehicle" : string.Empty) + " barricade."); } } BarricadeManager.damage(element.Transform, ushort.MaxValue, 1, false); } catch (Exception ex) { Logger.LogException(ex, "Error in destroying barricade."); } } else if (element.Type == ElementType.Vehicle) { try { // Output log entry if a vehicle is destroyed by a cleanup. if (type == WreckType.Cleanup) { bool getPInfo = WreckingBall.isPlayerInfoLibLoaded; Logger.Log(string.Format("Cleanup: Vehicle with InstanceID: {0}, and Type: {1}({2}), at position: {3} destroyed, Element count: {4}, Sign By: {5}, Locked By: {6}.", element.Vehicle.instanceID, element.Vehicle.asset.vehicleName, element.Vehicle.asset.id, element.Vehicle.transform.position.ToString(), BarricadeManager.tryGetPlant(element.Vehicle.transform, out byte x, out byte y, out ushort plant, out BarricadeRegion barricadeRegion) ? barricadeRegion.drops.Count : 0, HasFlaggedElement(element.Vehicle.transform, out ulong vFlagOwner) ? (getPInfo ? WreckingBall.Instance.PInfoGenerateMessage(vFlagOwner) : vFlagOwner.ToString()) : "N/A", element.Vehicle.isLocked ? (getPInfo ? WreckingBall.Instance.PInfoGenerateMessage((ulong)element.Vehicle.lockedOwner) : element.Vehicle.lockedOwner.ToString()) : "N/A")); } if (WreckingBall.Instance.Configuration.Instance.EnableVehicleBuyBack && WreckingBall.isDynShopLoaded && WreckingBall.isUconomyLoaded) { WreckingBall.Instance.VehicleBuyBack(element.Vehicle); } else if (WreckingBall.Instance.Configuration.Instance.EnableVehicleBuyBack) { Logger.LogWarning("EnableVehicleBuyBack was enabled, but either/both the plugins, Uconomy and DynShop, aren't present/loaded."); } if (WreckingBall.Instance.Configuration.Instance.EnableVehicleElementDrop) { if (element.Vehicle.asset.engine == EEngine.TRAIN && element.Vehicle.trainCars != null && element.Vehicle.trainCars.Count() > 1) { foreach (TrainCar car in element.Vehicle.trainCars) { WreckingBall.Instance.VehicleElementDrop(element.Vehicle, true, car.root); } } else { WreckingBall.Instance.VehicleElementDrop(element.Vehicle); } } if (!element.Vehicle.isDead) { VehicleManager.askVehicleDestroy(element.Vehicle); } } catch (Exception ex) { Logger.LogException(ex, "Error in destroying vehicle."); } } else if (element.Type == ElementType.Zombie) { try { for (int z = 0; z < 1000 && !element.Zombie.isDead; z++) { element.Zombie.askDamage(ushort.MaxValue, element.Zombie.transform.up, out pKill, out xp); } } catch (Exception ex) { Logger.LogException(ex, "Error in killing zombie."); } } else if (element.Type == ElementType.Animal) { try { for (int a = 0; a < 1000 && !element.Animal.isDead; a++) { element.Animal.askDamage(ushort.MaxValue, element.Animal.transform.up, out pKill, out xp); } } catch (Exception ex) { Logger.LogException(ex, "Error in killing animal."); } } if (type == WreckType.Wreck) { dIdx++; } else { cdIdx++; } i++; } if (destroyList.Count == dIdx && type == WreckType.Wreck) { if (originalCaller != null) { UnturnedChat.Say(originalCaller, WreckingBall.Instance.Translate("wreckingball_complete", dIdx)); } else { Logger.Log(WreckingBall.Instance.Translate("wreckingball_complete", dIdx)); } SaveManager.save(); Abort(WreckType.Wreck); } } catch (Exception ex) { Logger.LogException(ex, "General destruction loop error."); } }
internal static void Wreck(IRocketPlayer caller, string filter, float radius, Vector3 position, WreckType type, FlagType flagtype, ulong steamID, ushort itemID) { bool pInfoLibLoaded = false; syncError = false; if (type == WreckType.Wreck) { if (DestructionProcessing.processing) { UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_processing", originalCaller != null ? originalCaller.CharacterName : "???", (dIdxCount - dIdx), CalcProcessTime())); return; } Abort(WreckType.Wreck); } else if (type == WreckType.Scan) { WreckingBall.ElementData.reportLists[BuildableType.Element].Clear(); WreckingBall.ElementData.reportLists[BuildableType.VehicleElement].Clear(); if (WreckingBall.Instance.Configuration.Instance.EnablePlayerInfo && WreckingBall.isPlayerInfoLibPresent && WreckingBall.isPlayerInfoLibLoaded) { pInfoLibLoaded = true; } } UnturnedPlayer Player = null; if (!(caller is ConsolePlayer) && type != WreckType.Cleanup) { Player = (UnturnedPlayer)caller; if (Player.IsInVehicle) { position = Player.CurrentVehicle.transform.position; } else { position = Player.Position; } } List <char> Filter = new List <char>(); Filter.AddRange(filter.ToCharArray()); float distance = 0; float vdistance = 0; StructureRegion structureRegion; BarricadeRegion barricadeRegion; for (int k = 0; k < StructureManager.regions.GetLength(0); k++) { for (int l = 0; l < StructureManager.regions.GetLength(1); l++) { // check to see if the region is out of range, skip if it is. if (!radius.IsNaN() && position.RegionOutOfRange(k, l, radius) && type != WreckType.Cleanup && type != WreckType.Counts) { continue; } structureRegion = StructureManager.regions[k, l]; ProcessElements(caller, itemID, radius, type, flagtype, Filter, pInfoLibLoaded, structureRegion, position, steamID, BuildableType.Element); } } for (int k = 0; k < BarricadeManager.BarricadeRegions.GetLength(0); k++) { for (int l = 0; l < BarricadeManager.BarricadeRegions.GetLength(1); l++) { // check to see if the region is out of range, skip if it is. if (!radius.IsNaN() && position.RegionOutOfRange(k, l, radius) && type != WreckType.Cleanup && type != WreckType.Counts) { continue; } barricadeRegion = BarricadeManager.BarricadeRegions[k, l]; ProcessElements(caller, itemID, radius, type, flagtype, Filter, pInfoLibLoaded, barricadeRegion, position, steamID, BuildableType.Element); } } foreach (InteractableVehicle vehicle in VehicleManager.vehicles) { bool validVehicleElements = BarricadeManager.tryGetPlant(vehicle.transform, out byte x, out byte y, out ushort plant, out barricadeRegion); // Process Vehicles. if ((Filter.Contains('V') || Filter.Contains('*')) && type != WreckType.Cleanup && type != WreckType.Counts && (flagtype == FlagType.Normal || (flagtype == FlagType.SteamID && vehicle.isLocked && vehicle.lockedOwner == (CSteamID)steamID))) { vdistance = Vector3.Distance(vehicle.transform.position, position); if ((!radius.IsNaN() && vdistance <= radius) || (radius.IsNaN() && (vehicle.transform.position.x.IsNaN() || vehicle.transform.position.y.IsNaN() || vehicle.transform.position.z.IsNaN()))) { WreckProcess(caller, 999, vdistance, pInfoLibLoaded, BuildableType.Vehicle, type, vehicle, vehicle.transform, !validVehicleElements ? 0 : barricadeRegion.drops.Count, vehicle.isLocked ? (ulong)vehicle.lockedOwner : 0); } if (vehicle.asset.engine == EEngine.TRAIN && vehicle.trainCars != null && vehicle.trainCars.Length > 1) { for (int i = 1; i < vehicle.trainCars.Length; i++) { if (BarricadeManager.tryGetPlant(vehicle.trainCars[i].root, out x, out y, out plant, out BarricadeRegion barricadeRegion2)) { float tcdistance = Vector3.Distance(vehicle.trainCars[i].root.position, position); if (tcdistance <= radius) { WreckProcess(caller, 999, tcdistance, pInfoLibLoaded, BuildableType.Vehicle, type, vehicle, vehicle.transform, barricadeRegion2 == null ? 0 : barricadeRegion2.drops.Count, 0, i); } } } } } if (type == WreckType.Cleanup && vehicle.asset.engine != EEngine.TRAIN && WreckingBall.Instance.Configuration.Instance.CleanupLockedCars && vehicle.isLocked && vehicle.lockedOwner == (CSteamID)steamID) { cleanupList.Add(new Destructible(vehicle.transform, ElementType.Vehicle, vehicle.asset.id, vehicle)); } // Add Locked vehicles to the top players count, if the cleanup locked vehicles feature is active. if (type == WreckType.Counts && vehicle.asset.engine != EEngine.TRAIN && WreckingBall.Instance.Configuration.Instance.CleanupLockedCars && vehicle.isLocked) { ulong vOwner = (ulong)vehicle.lockedOwner; if (pElementCounts.ContainsKey(vOwner)) { pElementCounts[vOwner]++; } else { pElementCounts.Add(vOwner, 1); } } // Process vehicles elements, remove distance limiting on vehicle placement for element scanning, to handle massively misplaced elements on vehicles. if (validVehicleElements) { ProcessElements(caller, itemID, radius, type, flagtype, Filter, pInfoLibLoaded, barricadeRegion, position, steamID, BuildableType.VehicleElement); } if (vehicle.asset.engine == EEngine.TRAIN && vehicle.trainCars != null && vehicle.trainCars.Length > 1) { for (int i = 1; i < vehicle.trainCars.Length; i++) { if (BarricadeManager.tryGetPlant(vehicle.trainCars[i].root, out x, out y, out plant, out BarricadeRegion barricadeRegion2)) { ProcessElements(caller, itemID, radius, type, flagtype, Filter, pInfoLibLoaded, barricadeRegion2, position, steamID, BuildableType.VehicleElement); } } } } if (Filter.Contains('Z')) { for (int z = 0; z < ZombieManager.regions.Length; z++) { foreach (Zombie zombie in ZombieManager.regions[z].zombies) { distance = Vector3.Distance(zombie.transform.position, position); if (distance < radius) { WreckProcess(caller, 998, distance, pInfoLibLoaded, BuildableType.Element, type, zombie, zombie.transform); } } } } if (Filter.Contains('A')) { foreach (Animal animal in AnimalManager.animals) { distance = Vector3.Distance(animal.transform.position, position); if (distance <= radius) { WreckProcess(caller, 997, distance, pInfoLibLoaded, BuildableType.Element, type, animal, animal.transform); } } } if (type == WreckType.Scan) { uint totalCount = 0; if (WreckingBall.ElementData.reportLists[BuildableType.Element].Count > 0 || WreckingBall.ElementData.reportLists[BuildableType.VehicleElement].Count > 0) { foreach (KeyValuePair <BuildableType, Dictionary <char, uint> > reportDictionary in WreckingBall.ElementData.reportLists) { if (reportDictionary.Value.Count == 0) { continue; } foreach (KeyValuePair <char, uint> reportFilter in reportDictionary.Value) { totalCount += reportFilter.Value; } } } Logger.Log(string.Format("Player: {0}, ran scan at: {1}, with Radius: {7}, with Flag type: {2}, with Flags: {3}, with ItemID: {4}, with SteamID: {5}, number of elements scanned: {6}", caller is ConsolePlayer ? "Console" : Player.CharacterName + " [" + Player.SteamName + "] (" + Player.CSteamID.ToString() + ")", caller is ConsolePlayer ? "N/A" : Player.Position.ToString(), flagtype.ToString(), Filter.Count > 0 ? string.Join("", Filter.Select(i => i.ToString()).ToArray()) : "N/A", itemID, steamID, totalCount, radius.IsNaN() ? "NaN(NaN Check)" : radius.ToString())); return; } if (destroyList.Count >= 1 && type == WreckType.Wreck) { Logger.Log(string.Format("Player {0}, queued wreck at: {1}, with Radius: {7}, with Flag type: {2}, with Flags: {3}, with itemID: {4}, with StermID: {5}, number of elements queued: {6}", caller is ConsolePlayer ? "Console" : Player.CharacterName + " [" + Player.SteamName + "] (" + Player.CSteamID.ToString() + ")", caller is ConsolePlayer ? "N/A" : Player.Position.ToString(), flagtype.ToString(), Filter.Count > 0 ? string.Join("", Filter.Select(i => i.ToString()).ToArray()) : "N/A", itemID, steamID, destroyList.Count, radius.IsNaN() ? "NaN(NaN Check)" : radius.ToString())); dIdxCount = destroyList.Count; WreckingBall.Instance.Instruct(caller); } else if (type == WreckType.Cleanup) { cdIdxCount = cleanupList.Count; } else if (type != WreckType.Counts) { UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_not_found", radius)); } }