예제 #1
0
 public void TestScriptReset(ScriptInstance instance)
 {
     lock (instance)
     {
         instance.PostEvent(new ResetScriptEvent());
     }
 }
        private void HandleScriptDialog(ScriptDialog dialog, UUID fromSceneID)
        {
            foreach (KeyValuePair <UUID, RwLockedDictionary <UUID, Func <ScriptDialog, IScriptEvent> > > kvp in m_ScriptedDialogListeners)
            {
                ObjectPart part;
                ObjectPartInventoryItem item;
                if (CurrentScene.Primitives.TryGetValue(kvp.Key, out part))
                {
                    foreach (KeyValuePair <UUID, Func <ScriptDialog, IScriptEvent> > kvpinner in kvp.Value)
                    {
                        if (part.Inventory.TryGetValue(kvpinner.Key, out item))
                        {
                            ScriptInstance instance = item.ScriptInstance;

                            /* Translate listen event to mapped channel */
                            IScriptEvent ev = kvpinner.Value(dialog);
                            if (ev != null)
                            {
                                instance?.PostEvent(ev);
                            }
                        }
                    }
                }
                else
                {
                    m_ScriptedDialogListeners.Remove(kvp.Key);
                }
            }
        }
예제 #3
0
            public override void AssetTransferComplete()
            {
                base.AssetTransferComplete();
                m_Transaction?.Commit();

                ObjectPart     part;
                SceneInterface scene;
                UGUI           sellOwner;

                if (TryGetScene(m_SceneID, out scene) &&
                    scene.Primitives.TryGetValue(m_SellingPrimitiveID, out part))
                {
                    sellOwner = part.Owner;
                    foreach (ObjectBuyListen lt in scene.m_ObjectBuyListeners.Values)
                    {
                        ObjectPartInventoryItem item;
                        if (scene.Primitives.TryGetValue(lt.PrimitiveID, out part) &&
                            part.Inventory.TryGetValue(lt.ItemID, out item) &&
                            part.Owner.EqualsGrid(sellOwner))
                        {
                            ScriptInstance script = item.ScriptInstance;
                            script?.PostEvent(new ItemSoldEvent
                            {
                                Agent      = m_DestinationAgent,
                                ObjectID   = m_SellingPrimitiveID,
                                ObjectName = part.Name
                            });
                        }
                    }
                }
            }
        public override bool IMSend(GridInstantMessage im)
        {
            if (im.Dialog == GridInstantMessageDialog.MessageFromAgent)
            {
                m_ScriptedIMSessions.Add(im.FromAgent.ID, im.IMSessionID);
            }

            if (im.Dialog == GridInstantMessageDialog.MessageFromAgent ||
                im.Dialog == GridInstantMessageDialog.MessageFromObject)
            {
                foreach (KeyValuePair <UUID, RwLockedDictionary <UUID, int> > kvp in m_ScriptedChatListeners)
                {
                    ObjectPart part;
                    ObjectPartInventoryItem item;
                    if (CurrentScene.Primitives.TryGetValue(kvp.Key, out part))
                    {
                        foreach (KeyValuePair <UUID, int> kvpinner in kvp.Value)
                        {
                            if (part.Inventory.TryGetValue(kvpinner.Key, out item))
                            {
                                ScriptInstance instance = item.ScriptInstance;

                                /* Translate IM event to mapped channel */
                                instance?.PostEvent(new ListenEvent
                                {
                                    ButtonIndex    = -1,
                                    Channel        = kvpinner.Value,
                                    Distance       = 0,
                                    GlobalPosition = Vector3.Zero,
                                    ID             = im.FromAgent.ID,
                                    Message        = im.Message,
                                    Name           = im.FromAgent.FullName,
                                    OriginSceneID  = UUID.Zero,
                                    OwnerID        = im.FromAgent.ID,
                                    SourceType     = im.Dialog == GridInstantMessageDialog.MessageFromObject ? ListenEvent.ChatSourceType.Object : ListenEvent.ChatSourceType.Agent,
                                    TargetID       = ID,
                                    Type           = ListenEvent.ChatType.Say
                                });
                            }
                        }
                    }
                    else
                    {
                        m_ScriptedIMListeners.Remove(kvp.Key);
                    }
                }
            }
            return(true);
        }
        private void OnChatReceive(ListenEvent ev)
        {
            if (ev.ID == ID)
            {
                /* if it is this npc, ignore the chat event */
                return;
            }

            foreach (KeyValuePair <UUID, RwLockedDictionary <UUID, int> > kvp in m_ScriptedChatListeners)
            {
                ObjectPart part;
                ObjectPartInventoryItem item;
                if (CurrentScene.Primitives.TryGetValue(kvp.Key, out part))
                {
                    foreach (KeyValuePair <UUID, int> kvpinner in kvp.Value)
                    {
                        if (part.Inventory.TryGetValue(kvpinner.Key, out item))
                        {
                            ScriptInstance instance = item.ScriptInstance;

                            /* Translate listen event to mapped channel */
                            instance?.PostEvent(new ListenEvent
                            {
                                ButtonIndex    = ev.ButtonIndex,
                                Channel        = kvpinner.Value,
                                Distance       = ev.Distance,
                                GlobalPosition = ev.GlobalPosition,
                                ID             = ev.ID,
                                Message        = ev.Message,
                                Name           = ev.Name,
                                OriginSceneID  = ev.OriginSceneID,
                                OwnerID        = ev.OwnerID,
                                SourceType     = ev.SourceType,
                                TargetID       = ev.TargetID,
                                Type           = ev.Type
                            });
                        }
                    }
                }
                else
                {
                    m_ScriptedChatListeners.Remove(kvp.Key);
                }
            }
        }