diff --git a/Core/Commands/Parcel/ParcelSetMedia.cs b/Core/Commands/Parcel/ParcelSetMedia.cs new file mode 100644 index 0000000..269de0f --- /dev/null +++ b/Core/Commands/Parcel/ParcelSetMedia.cs @@ -0,0 +1,183 @@ +using BetterSecondBotShared.Static; +using OpenMetaverse; +using System; +using System.Collections.Generic; +using System.Text; + +namespace BSB.Commands.CMD_Parcel +{ + class ParcelSetMedia : CoreCommand + { + public override string[] ArgTypes { get { return new[] { "Flag [Repeatable]" }; } } + public override string[] ArgHints { get { return new[] { "See flags table" }; } } + public override int MinArgs { get { return 1; } } + public override string Helpfile { get { return "Supports updating one or multiple media options for the current parcel
Example: ParcelSetMedia|||MediaURL=http://google.com~#~MediaDesc=Google.com website
Flags: " + helpers.create_dirty_table(parcel_static.get_flag_names()) + "
"; } } + + public override bool CallFunction(string[] args) + { + if (base.CallFunction(args) == true) + { + int localid = bot.GetClient.Parcels.GetParcelLocalID(bot.GetClient.Network.CurrentSim, bot.GetClient.Self.SimPosition); + Parcel p = bot.GetClient.Network.CurrentSim.Parcels[localid]; + if(parcel_static.has_parcel_perm(p,bot) == true) + { + bool all_flags_ok = true; + string why_failed = ""; + int loop = 1; + foreach (string A in args) + { + bool format_failed = false; + string[] bits = A.Split('='); + if (bits.Length == 2) + { + switch (bits[0]) + { + case "MediaType": + { + if (bits[1] == "IMG-PNG") + { + p.Media.MediaType = "image/png"; + } + else if (bits[1] == "IMG-JPG") + { + p.Media.MediaType = "image/jpeg"; + } + else if (bits[1] == "VID-MP4") + { + p.Media.MediaType = "video/mp4"; + } + else if (bits[1] == "VID-AVI") + { + p.Media.MediaType = "video/x-msvideo"; + } + else if(bits[1].StartsWith("Custom-") == true) + { + string mime = bits[1]; + mime = mime.Replace("Custom-", ""); + p.Media.MediaType = mime; + } + else + { + format_failed = true; + } + break; + } + case "MediaWidth": + case "MediaHeight": + { + if (int.TryParse(bits[1], out int size) == true) + { + if ((size >= 256) || (size <= 1024)) + { + if (bits[0] == "MediaHeight") + { + p.Media.MediaHeight = size; + } + else if (bits[0] == "MediaWidth") + { + p.Media.MediaWidth = size; + } + else + { + format_failed = true; // not sure how this happened + } + } + else + { + format_failed = true; + } + } + else + { + format_failed = true; + } + break; + } + case "MediaID": + { + if (UUID.TryParse(bits[1], out UUID texture) == true) + { + p.Media.MediaID = texture; + } + else + { + format_failed = true; + } + break; + } + case "MediaURL": + { + p.Media.MediaURL = bits[1]; + break; + } + case "MediaDesc": + { + p.Media.MediaDesc = bits[1]; + break; + } + case "MediaAutoScale": + { + if(bool.TryParse(bits[1],out bool output) == true) + { + p.Media.MediaAutoScale = output; + } + else + { + format_failed = true; + } + break; + } + case "MediaLoop": + { + if (bool.TryParse(bits[1], out bool output) == true) + { + p.Media.MediaLoop = output; + } + else + { + format_failed = true; + } + break; + } + default: + { + why_failed = "Arg:" + loop.ToString() + " is not a supported media option!"; + all_flags_ok = false; + break; + } + } + } + else + { + format_failed = true; + } + if(format_failed == true) + { + why_failed = "Arg:" + loop.ToString() + " Not formated correctly"; + all_flags_ok = false; + } + if (all_flags_ok == false) + { + break; + } + loop++; + } + if(all_flags_ok == true) + { + p.Update(bot.GetClient.Network.CurrentSim, false); + return true; + } + else + { + return Failed(why_failed); + } + } + else + { + return Failed("Do not have expected perms for this parcel!"); + } + } + return false; + } + } +} diff --git a/Core/Static/parcel.cs b/Core/Static/parcel.cs index 2e40f38..b6d8356 100644 --- a/Core/Static/parcel.cs +++ b/Core/Static/parcel.cs @@ -39,6 +39,20 @@ namespace BSB flagnames.Remove("None"); return flagnames.ToArray(); } + + public static Dictionary get_media_list() + { + Dictionary flags = new Dictionary(); + flags.Add("MediaAutoScale", "Bool (True|False)"); + flags.Add("MediaLoop", "Bool (True|False)"); + flags.Add("MediaID", "UUID (Texture)"); + flags.Add("MediaURL", "String"); + flags.Add("MediaDesc", "String"); + flags.Add("MediaHeight", "Int (256 to 1024)"); + flags.Add("MediaWidth", "Int (256 to 1024)"); + flags.Add("MediaType", "String [\"IMG-PNG\",\"IMG-JPG\",\"VID-MP4\",\"VID-AVI\" or \"Custom-MIME_TYPE_CODE\"]"); + return flags; + } public static Dictionary get_flags_list() { Dictionary flags = new Dictionary();