GetSimParcelLayers

This commit is contained in:
Madpeter 2024-07-21 00:16:09 +01:00
parent 977d1f4021
commit a62bff5fa6
2 changed files with 92 additions and 2 deletions

View file

@ -10,6 +10,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Project Items", "Project It
.dockerignore = .dockerignore .dockerignore = .dockerignore
.gitignore = .gitignore .gitignore = .gitignore
SecondBotEvents\Dockerfile = SecondBotEvents\Dockerfile SecondBotEvents\Dockerfile = SecondBotEvents\Dockerfile
github.autobuild.yml = github.autobuild.yml
NuGet.Config = NuGet.Config NuGet.Config = NuGet.Config
oldDockerfile = oldDockerfile oldDockerfile = oldDockerfile
README.md = README.md README.md = README.md

View file

@ -1,5 +1,6 @@
using Newtonsoft.Json; using Newtonsoft.Json;
using OpenMetaverse; using OpenMetaverse;
using OpenMetaverse.ImportExport.Collada14;
using SecondBotEvents.Services; using SecondBotEvents.Services;
using Swan; using Swan;
using System; using System;
@ -8,6 +9,7 @@ using System.Linq;
using System.Threading; using System.Threading;
using static OpenMetaverse.DirectoryManager; using static OpenMetaverse.DirectoryManager;
using static OpenMetaverse.ParcelManager; using static OpenMetaverse.ParcelManager;
using static OpenMetaverse.Stats.UtilizationStatistics;
namespace SecondBotEvents.Commands namespace SecondBotEvents.Commands
{ {
@ -25,7 +27,6 @@ namespace SecondBotEvents.Commands
public int currentprims; public int currentprims;
public string startbox; public string startbox;
public string endbox; public string endbox;
public byte[] bitmap;
} }
[ClassInfo("Control the land under our feet")] [ClassInfo("Control the land under our feet")]
@ -55,6 +56,95 @@ namespace SecondBotEvents.Commands
return BasicReply(JsonConvert.SerializeObject(reply)); return BasicReply(JsonConvert.SerializeObject(reply));
} }
[About("requests the parcel layout as a SVG\n call UpdateListOfParcels first to update list before calling")]
[ReturnHints("json encoded svg")]
public object GetSimParcelLayers()
{
Dictionary<int, Parcel> data = GetClient().Network.CurrentSim.Parcels.Copy();
Dictionary<string, Vector4> parcelbox = new Dictionary<string, Vector4>();
uint SimWidth = GetClient().Network.CurrentSim.SizeX;
uint SimHeight = GetClient().Network.CurrentSim.SizeY;
Dictionary<int,string> maps = new Dictionary<int,string>();
int lastparcelid = 0;
uint lowX = 0;
uint lowY = 0;
Random rnd = new Random();
uint startX = 4;
string svg = "<svg width=\"" + SimWidth + "\" height=\"" + SimHeight + "\" xmlns=\"http://www.w3.org/2000/svg\">";
uint boxheight = 0;
var color = "";
Parcel P = null;
string parcelname = "?";
int checkparcel = GetClient().Parcels.GetParcelLocalID(GetClient().Network.CurrentSim, new Vector3(startX, 4, 20));
while (startX < SimWidth)
{
uint startY = 4;
while (startY < SimHeight)
{
checkparcel = GetClient().Parcels.GetParcelLocalID(GetClient().Network.CurrentSim, new Vector3(startX, startY, 20));
if ((checkparcel != lastparcelid) || (startY >= SimHeight))
{
if(lastparcelid == 0)
{
lastparcelid = checkparcel;
lowX = startX - 4;
lowY = startY - 4;
}
else
{
boxheight = (startY-4) - lowY;
color = "";
if (maps.ContainsKey(lastparcelid) == false)
{
color = "rgb(" + rnd.Next(0, 256) + "," + rnd.Next(0, 256) + ",125)";
maps.Add(lastparcelid, color);
}
else
{
color = maps[lastparcelid];
}
parcelname = "?";
if (data.ContainsKey(lastparcelid) == true)
{
P = GetClient().Network.CurrentSim.Parcels[lastparcelid];
parcelname = P.Name;
}
svg = svg + "<rect data-parcel=\"" + parcelname + "\" width=\"4\" height=\"" + boxheight + "\" x=\"" + lowX + "\" y=\"" + lowY + "\" fill=\"" + color + "\" />";
lastparcelid = checkparcel;
lowX = startX - 4;
lowY = startY - 4;
}
}
startY += 4;
}
boxheight = (startY - 8) - lowY;
color = "";
if (maps.ContainsKey(lastparcelid) == false)
{
color = "rgb(" + rnd.Next(0, 256) + "," + rnd.Next(0, 256) + ",125)";
maps.Add(lastparcelid, color);
}
else
{
color = maps[lastparcelid];
}
parcelname = "?";
if (data.ContainsKey(lastparcelid) == true)
{
P = GetClient().Network.CurrentSim.Parcels[lastparcelid];
parcelname = P.Name;
}
svg = svg + "<rect data-parcel=\"" + parcelname + "\" width=\"4\" height=\"" + boxheight + "\" x=\"" + lowX + "\" y=\"" + lowY + "\" fill=\"" + color + "\" />";
lastparcelid = 0;
startX += 4;
}
svg = svg + "</svg>";
return BasicReply(svg);
}
[About("Requests a packet blob for the parcels in the current sim\n call UpdateListOfParcels first to update list before calling")] [About("Requests a packet blob for the parcels in the current sim\n call UpdateListOfParcels first to update list before calling")]
[ReturnHints("json encoded object")] [ReturnHints("json encoded object")]
public object GetListOfParcels() public object GetListOfParcels()
@ -77,7 +167,6 @@ namespace SecondBotEvents.Commands
R.currentprims = A.TotalPrims; R.currentprims = A.TotalPrims;
R.maxprims = A.MaxPrims; R.maxprims = A.MaxPrims;
R.name = A.Name; R.name = A.Name;
R.bitmap = A.Bitmap;
reply.parcels.Add(R); reply.parcels.Add(R);
} }
return BasicReply(JsonConvert.SerializeObject(reply)); return BasicReply(JsonConvert.SerializeObject(reply));