From 10e935f7b755e75605a4e25ad42f95e61b7c156d Mon Sep 17 00:00:00 2001 From: Madpeterz <57852827+Madpeterz@users.noreply.github.com> Date: Tue, 9 Feb 2021 22:53:45 +0000 Subject: [PATCH] Create ParcelBan.cs --- Core/Commands/Parcel/ParcelBan.cs | 91 +++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 Core/Commands/Parcel/ParcelBan.cs diff --git a/Core/Commands/Parcel/ParcelBan.cs b/Core/Commands/Parcel/ParcelBan.cs new file mode 100644 index 0000000..0702dde --- /dev/null +++ b/Core/Commands/Parcel/ParcelBan.cs @@ -0,0 +1,91 @@ +using OpenMetaverse; +using static OpenMetaverse.ParcelManager; + +namespace BSB.Commands.CMD_Parcel +{ + public class ParcelBan : CoreCommand_1arg + { + public override string[] ArgTypes { get { return new[] { "Avatar", "True|False" }; } } + public override string[] ArgHints { get { return new[] { "Avatar [UUID or Firstname Lastname]", "Type" }; } } + public override string Helpfile { get { return "Bans an avatar [ARG 1] from a parcel
by setting Type to False you can unban"; } } + + protected bool ban_target(OpenMetaverse.Parcel p, UUID target) + { + bool alreadyBanned = false; + foreach (ParcelAccessEntry E in p.AccessBlackList) + { + if (E.AgentID == target) + { + alreadyBanned = true; + break; + } + } + if (alreadyBanned == true) + { + return Failed("Target is in the blacklist"); + } + ParcelAccessEntry entry = new ParcelAccessEntry(); + entry.AgentID = target; + entry.Flags = AccessList.Ban; + entry.Time = new System.DateTime(3030, 03, 03); + p.AccessBlackList.Add(entry); + p.Update(bot.GetClient.Network.CurrentSim, false); + return true; + } + + protected bool unban_target(OpenMetaverse.Parcel p, UUID target) + { + bool alreadyBanned = false; + ParcelAccessEntry removeme = new ParcelAccessEntry(); + foreach (ParcelAccessEntry E in p.AccessBlackList) + { + if (E.AgentID == target) + { + alreadyBanned = true; + removeme = E; + break; + } + } + if (alreadyBanned == false) + { + return Failed("Target is NOT in the blacklist"); + } + p.AccessBlackList.Remove(removeme); + p.Update(bot.GetClient.Network.CurrentSim, false); + return true; + } + + + + public override bool CallFunction(string[] args) + { + if (base.CallFunction(args) == false) + { + return false; + } + if (UUID.TryParse(args[0], out UUID target) == false) + { + return Failed("Arg 0 requires UUID"); + } + bool banuser = true; + if (args.Length == 2) + { + if (args[1] == "False") + { + banuser = false; + } + } + int localid = bot.GetClient.Parcels.GetParcelLocalID(bot.GetClient.Network.CurrentSim, bot.GetClient.Self.SimPosition); + if (bot.GetClient.Network.CurrentSim.Parcels.ContainsKey(localid) == false) + { + return Failed("Unable to get parcel details"); + } + OpenMetaverse.Parcel p = bot.GetClient.Network.CurrentSim.Parcels[localid]; + if (banuser == true) + { + return ban_target(p, target); + } + return unban_target(p, target); + } + } +}