work around some osgrid (mb others) null group titles

This commit is contained in:
UbitUmarov
2025-04-30 17:35:39 +01:00
parent 93c81360c0
commit 83d3ce8a1a
2 changed files with 58 additions and 10 deletions

View File

@@ -2111,7 +2111,6 @@ namespace OpenSim.Region.ClientStack.Linden
int memberCount = members.Count;
Dictionary<string,int> titles = new Dictionary<string,int>();
int i = 0;
ulong defaultPowers = 0;
@@ -2119,26 +2118,49 @@ namespace OpenSim.Region.ClientStack.Linden
// build titles array and index
roles.Sort(CompareRolesByMembersDesc);
int i = 0;
OSDArray osdtitles = new OSDArray();
foreach(GroupRolesData grd in roles)
{
if(grd.Title == null)
continue;
string title = grd.Title;
if(i==0)
defaultPowers = grd.Powers;
if(!titles.ContainsKey(title))
if(!titles.ContainsKey(grd.Title))
{
titles[title] = i++;
osdtitles.Add(new OSDString(title));
titles[grd.Title] = i++;
osdtitles.Add(new OSDString(grd.Title));
}
}
if(titles.Count == 0 && roles.Count > 0)
{
i = 0;
foreach(GroupRolesData grd in roles)
{
string fallbackTitle = grd.Name switch
{
"Owners" => "Owner",
"Everyone" => "Member",
_ => "Member"
};
if(i==0)
defaultPowers = grd.Powers;
if(!titles.ContainsKey(fallbackTitle))
{
titles[fallbackTitle] = i++;
osdtitles.Add(new OSDString(fallbackTitle));
}
}
}
if(titles.Count == 0)
break;
OSDMap osdmembers = new OSDMap();
OSDMap osdmembers = new();
foreach(GroupMembersData gmd in members)
{
OSDMap m = new OSDMap();
@@ -2146,8 +2168,13 @@ namespace OpenSim.Region.ClientStack.Linden
m["last_login"] = new OSDString(gmd.OnlineStatus);
if(gmd.AgentPowers != defaultPowers)
m["powers"] = new OSDString((gmd.AgentPowers).ToString("X"));
if(gmd.Title != null && titles.ContainsKey(gmd.Title) && titles[gmd.Title] != 0)
m["title"] = new OSDInteger(titles[gmd.Title]);
if(gmd.Title != null)
{
if(titles.TryGetValue(gmd.Title, out int value) && value != 0)
m["title"] = new OSDInteger(value);
}
else if(gmd.IsOwner && titles.TryGetValue("Owner", out int ovalue) && ovalue != 0)
m["title"] = new OSDInteger(ovalue);
if(gmd.IsOwner)
m["owner"] = new OSDString("true");
if(gmd.Contribution != 0)

View File

@@ -11692,13 +11692,23 @@ namespace OpenSim.Region.ClientStack.LindenUDP
for (int i = 0; i < blockCount; i++)
{
GroupMembersData m = members[indx++];
string title;
if(m.Title == null)
{
if(m.IsOwner)
title = "Owner";
else
title = "Member";
}
else
title = m.Title;
groupMembersReply.MemberData[i] = new GroupMembersReplyPacket.MemberDataBlock
{
AgentID = m.AgentID,
Contribution = m.Contribution,
OnlineStatus = Util.StringToBytes256(m.OnlineStatus),
AgentPowers = m.AgentPowers,
Title = Util.StringToBytes256(m.Title),
Title = Util.StringToBytes256(title),
IsOwner = m.IsOwner
};
}
@@ -11728,11 +11738,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP
int i = 0;
foreach (GroupRolesData d in titles)
{
string title;
if(d.Title == null)
{
if("Owners".Equals(d.Name))
title = "Owner";
else
title = "Member";
}
else
title = d.Title;
groupRolesReply.RoleData[i] = new GroupRoleDataReplyPacket.RoleDataBlock
{
RoleID = d.RoleID,
Name = Util.StringToBytes256(d.Name),
Title = Util.StringToBytes256(d.Title),
Title = Util.StringToBytes256(title),
Description = Util.StringToBytes1024(d.Description),
Powers = d.Powers,
Members = (uint)d.Members