Esempio n. 1
0
        /*
         * TODO
         *   On-Avatar-Sit-Changed
         *  simulator: "OpenSim Test"
         *  avatar: '(avatar "Nephrael Rae")
         *  sittingOn: 3135593693
         *  oldSeat: 0
         */
        public override void Objects_OnAvatarSitChanged(object sender, AvatarSitChangedEventArgs e)
        {
            var simulator = e.Simulator;

            if (!IsMaster(simulator))
            {
                return;
            }
            var avatar    = e.Avatar;
            var sittingOn = e.SittingOn;
            var oldSeat   = e.OldSeat;

            if (avatar != null)
            {
                DeclareAvatar(avatar.ID);
            }
            if (!MaintainActions)
            {
                return;
            }
            EventQueue.Enqueue("Objects_OnAvatarSitChanged", () =>
            {
                SimObject user    = GetSimObject(avatar, simulator);
                SimObject newSit  = GetSimObject(sittingOn, simulator);
                SimObject oldSit  = GetSimObject(oldSeat, simulator);
                string newSitName = null;
                string oldSitName = null;
                if (newSit != null)
                {
                    newSitName = newSit.SitName;
                }
                if (newSitName == null)
                {
                    newSitName = "SitOnObject";
                }
                if (oldSit != null)
                {
                    oldSitName = oldSit.SitName;
                }
                if (oldSitName == null)
                {
                    oldSitName = "SitOnObject";
                }

                //if (SendAllEvents)
                // SendNewEvent("On-Avatar-Sit-Changed", user, newSit, oldSit);
                if (user != null)
                {
                    if (oldSeat != 0)
                    {
                        LogSitEvent(user, SimEventType.Stop, oldSitName,
                                    ToParameter("doneBy", user),
                                    ToParameter("objectActedOn", oldSit));
                    }
                    if (sittingOn != 0)
                    {
                        LogSitEvent(user, SimEventType.Start, newSitName,
                                    ToParameter("doneBy", user),
                                    ToParameter("objectActedOn", newSit));
                    }
                    if (sittingOn + oldSeat == 0)
                    {
                        LogSitEvent(user, SimEventType.Once, "SitChangedUnknown", ToParameter("doneBy", user));
                    }
                }
                else
                {
                    //object[] eventArgs = new object[] { user, newSit, oldSit };
                    if (oldSit != null)
                    {
                        oldSit.AddCanBeTargetOf(1, SendPipelineEvent(
                                                    ACogbotEvent.CreateEvent(sender, SimEventType.Stop, newSitName,
                                                                             SimEventType.SIT | SimEventType.REGIONAL,
                                                                             ToParameter("doneBy", avatar),
                                                                             ToParameter("objectActedOn", oldSit))));
                    }
                    if (newSit != null)
                    {
                        newSit.AddCanBeTargetOf(1, SendPipelineEvent(
                                                    ACogbotEvent.CreateEvent(sender, SimEventType.Start, newSitName,
                                                                             SimEventType.SIT | SimEventType.REGIONAL,
                                                                             ToParameter("doneBy", avatar),
                                                                             ToParameter("objectActedOn", newSit))));
                    }
                }
            });
        }