wip
This commit is contained in:
parent
6eaa112f81
commit
f761eacbe9
1 changed files with 155 additions and 17 deletions
|
|
@ -1,8 +1,11 @@
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
|
using OpenMetaverse.Rendering;
|
||||||
using SecondBotEvents.Config;
|
using SecondBotEvents.Config;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Reflection.Metadata.Ecma335;
|
||||||
|
|
||||||
namespace SecondBotEvents.Services
|
namespace SecondBotEvents.Services
|
||||||
{
|
{
|
||||||
|
|
@ -128,6 +131,7 @@ namespace SecondBotEvents.Services
|
||||||
if (GetClient() != null)
|
if (GetClient() != null)
|
||||||
{
|
{
|
||||||
GetClient().Self.IM -= BotImMessage;
|
GetClient().Self.IM -= BotImMessage;
|
||||||
|
GetClient().Groups.GroupMembersReply -= BotGroupMembers;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -135,6 +139,125 @@ namespace SecondBotEvents.Services
|
||||||
protected void AttachEvents()
|
protected void AttachEvents()
|
||||||
{
|
{
|
||||||
GetClient().Self.IM += BotImMessage;
|
GetClient().Self.IM += BotImMessage;
|
||||||
|
GetClient().Groups.GroupMembersReply += BotGroupMembers;
|
||||||
|
GetClient().Groups.CurrentGroups += BotGroupsCurrent;
|
||||||
|
GetClient().Groups.RequestCurrentGroups();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void BotGroupsCurrent(object o, CurrentGroupsEventArgs e)
|
||||||
|
{
|
||||||
|
lock (GroupMembership) lock (GroupMembershipUpdated) lock(GroupNames)
|
||||||
|
{
|
||||||
|
foreach(Group G in e.Groups.Values)
|
||||||
|
{
|
||||||
|
if (GroupNames.ContainsKey(G.ID) == true)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
GroupNames.Add(G.ID, G.Name);
|
||||||
|
GroupMembership.Add(G.ID, new List<UUID>());
|
||||||
|
GroupMembershipUpdated.Add(G.ID, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Dictionary<UUID, List<UUID>> GroupMembership = new Dictionary<UUID, List<UUID>>();
|
||||||
|
protected Dictionary<UUID, string> GroupNames = new Dictionary<UUID, string>();
|
||||||
|
protected Dictionary<UUID, long> GroupMembershipUpdated = new Dictionary<UUID, long>();
|
||||||
|
protected long lastGroupMembershipUpdate = 0;
|
||||||
|
// request group membership updates max of once per 60 secs
|
||||||
|
// request membership update for group once every 15 mins
|
||||||
|
protected void GroupMembershipUpkeep()
|
||||||
|
{
|
||||||
|
lock (GroupMembershipUpdated)
|
||||||
|
{
|
||||||
|
long dif = SecondbotHelpers.UnixTimeNow() - lastGroupMembershipUpdate;
|
||||||
|
if (dif < 60)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
UUID updateGroup = UUID.Zero;
|
||||||
|
foreach (KeyValuePair<UUID, long> entry in GroupMembershipUpdated)
|
||||||
|
{
|
||||||
|
dif = SecondbotHelpers.UnixTimeNow() - entry.Value;
|
||||||
|
if (dif > (15 * 60))
|
||||||
|
{
|
||||||
|
updateGroup = entry.Key;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (updateGroup != UUID.Zero)
|
||||||
|
{
|
||||||
|
lastGroupMembershipUpdate = SecondbotHelpers.UnixTimeNow();
|
||||||
|
GroupMembershipUpdated[updateGroup] = SecondbotHelpers.UnixTimeNow();
|
||||||
|
GetClient().Groups.RequestGroupMembers(updateGroup);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void BotGroupMembers(object sender, GroupMembersReplyEventArgs e)
|
||||||
|
{
|
||||||
|
lock (GroupMembership) lock(GroupMembershipUpdated)
|
||||||
|
{
|
||||||
|
bool GroupLoaded = false;
|
||||||
|
if (GroupMembership.ContainsKey(e.GroupID) == true)
|
||||||
|
{
|
||||||
|
if (GroupMembership[e.GroupID].Count > 0)
|
||||||
|
{
|
||||||
|
GroupLoaded = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (GroupLoaded == false)
|
||||||
|
{
|
||||||
|
foreach (GroupMember a in e.Members.Values)
|
||||||
|
{
|
||||||
|
GroupMembership[e.GroupID].Add(a.ID);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<UUID> joined = new List<UUID>();
|
||||||
|
List<UUID> tracked = new List<UUID>();
|
||||||
|
foreach (UUID a in GroupMembership[e.GroupID])
|
||||||
|
{
|
||||||
|
tracked.Add(a);
|
||||||
|
}
|
||||||
|
master.DataStoreService.GetAvatarNames(tracked);
|
||||||
|
foreach (UUID a in e.Members.Keys)
|
||||||
|
{
|
||||||
|
if (tracked.Contains(a) == true)
|
||||||
|
{
|
||||||
|
tracked.Remove(a);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
joined.Add(a);
|
||||||
|
|
||||||
|
}
|
||||||
|
string groupname = "none";
|
||||||
|
if(GroupNames.ContainsKey(e.GroupID) == true)
|
||||||
|
{
|
||||||
|
groupname = GroupNames[e.GroupID];
|
||||||
|
}
|
||||||
|
foreach (UUID a in tracked)
|
||||||
|
{
|
||||||
|
// leave
|
||||||
|
GroupMembership[e.GroupID].Remove(a);
|
||||||
|
TriggerEvent("GroupMemberLeave", new Dictionary<string, string>() {
|
||||||
|
{ "groupuuid", e.GroupID.ToString()},
|
||||||
|
{ "groupname", groupname },
|
||||||
|
{ "avataruuid", a.ToString() }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
foreach (UUID a in joined)
|
||||||
|
{
|
||||||
|
// join
|
||||||
|
GroupMembership[e.GroupID].Add(a);
|
||||||
|
TriggerEvent("GroupMemberJoin", new Dictionary<string, string>() {
|
||||||
|
{ "groupuuid", e.GroupID.ToString()},
|
||||||
|
{ "groupname", groupname },
|
||||||
|
{ "avataruuid", a.ToString() }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected string GetAvName(string avataruuid)
|
protected string GetAvName(string avataruuid)
|
||||||
|
|
@ -224,26 +347,40 @@ namespace SecondBotEvents.Services
|
||||||
{
|
{
|
||||||
avataruuid = args["avataruuid"];
|
avataruuid = args["avataruuid"];
|
||||||
}
|
}
|
||||||
Dictionary<string, string> values = new Dictionary<string, string>();
|
string groupuuid = "none";
|
||||||
values.Add("eventype", eventName);
|
string groupname = "none";
|
||||||
values.Add("avatarname", GetAvName(avataruuid));
|
if (args.ContainsKey("groupuuid") == true)
|
||||||
values.Add("avatarparcel", GetAvParcel(avataruuid));
|
{
|
||||||
values.Add("botsim", GetClient().Network.CurrentSim.Name);
|
groupuuid = args["groupuuid"];
|
||||||
values.Add("botparcel", GetBotParcel());
|
}
|
||||||
|
if (args.ContainsKey("groupname") == true)
|
||||||
|
{
|
||||||
|
groupname = args["groupname"];
|
||||||
|
}
|
||||||
List<int> AvPos = GetAvPos(avataruuid);
|
List<int> AvPos = GetAvPos(avataruuid);
|
||||||
values.Add("avatarx", AvPos[0].ToString());
|
|
||||||
values.Add("avatary", AvPos[1].ToString());
|
|
||||||
values.Add("avatarz", AvPos[2].ToString());
|
|
||||||
values.Add("avatardistance", AvPos[3].ToString());
|
|
||||||
Vector3 A = GetClient().Self.SimPosition;
|
Vector3 A = GetClient().Self.SimPosition;
|
||||||
List<int> BotPos = new List<int>() { (int)Math.Round(A.X), (int)Math.Round(A.Y), (int)Math.Round(A.Z) };
|
List<int> BotPos = new List<int>() { (int)Math.Round(A.X), (int)Math.Round(A.Y), (int)Math.Round(A.Z) };
|
||||||
values.Add("botx", AvPos[0].ToString());
|
Dictionary<string, string> values = new Dictionary<string, string>
|
||||||
values.Add("boty", AvPos[1].ToString());
|
{
|
||||||
values.Add("botz", AvPos[2].ToString());
|
{ "eventype", eventName },
|
||||||
values.Add("clockhour", DateTime.Now.ToString("HH"));
|
{ "groupuuid", groupuuid },
|
||||||
values.Add("clockmin", DateTime.Now.ToString("mm"));
|
{ "groupname", groupname },
|
||||||
values.Add("dayofweek", ((int)DateTime.Now.DayOfWeek).ToString());
|
{ "avatarname", GetAvName(avataruuid) },
|
||||||
|
{ "avatarparcel", GetAvParcel(avataruuid) },
|
||||||
|
{ "botsim", GetClient().Network.CurrentSim.Name },
|
||||||
|
{ "botparcel", GetBotParcel() },
|
||||||
|
{ "avatarx", AvPos[0].ToString() },
|
||||||
|
{ "avatary", AvPos[1].ToString() },
|
||||||
|
{ "avatarz", AvPos[2].ToString() },
|
||||||
|
{ "avatardistance", AvPos[3].ToString() },
|
||||||
|
{ "botx", AvPos[0].ToString() },
|
||||||
|
{ "boty", AvPos[1].ToString() },
|
||||||
|
{ "botz", AvPos[2].ToString() },
|
||||||
|
{ "clockhour", DateTime.Now.ToString("HH") },
|
||||||
|
{ "clockmin", DateTime.Now.ToString("mm") },
|
||||||
|
{ "dayofweek", ((int)DateTime.Now.DayOfWeek).ToString() }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
if (avataruuid == null)
|
if (avataruuid == null)
|
||||||
{
|
{
|
||||||
|
|
@ -474,6 +611,7 @@ namespace SecondBotEvents.Services
|
||||||
TrackAvatarsOnParcel();
|
TrackAvatarsOnParcel();
|
||||||
CleanLockouts();
|
CleanLockouts();
|
||||||
ClockEvent();
|
ClockEvent();
|
||||||
|
GroupMembershipUpkeep();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Status()
|
public override string Status()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue