Ejemplo n.º 1
0
 public void SendSetScriptRunning(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     LSLKey objectID,
     LSLKey itemID,
     int isRunning)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             viewerCircuit.SendMessage(new SetScriptRunning
             {
                 AgentID   = agent.AgentID,
                 SessionID = viewerCircuit.SessionID,
                 ObjectID  = objectID,
                 ItemID    = itemID,
                 IsRunning = isRunning != 0
             });
         }
     }
 }
        public void SendParcelSelectObjects(
            ScriptInstance instance,
            ViewerAgentAccessor agent,
            int localID,
            int returnType,
            AnArray returnIds)
        {
            lock (instance)
            {
                ViewerConnection vc;
                ViewerCircuit    viewerCircuit;
                if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
                    vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
                {
                    var msg = new ParcelSelectObjects
                    {
                        AgentID    = agent.AgentID,
                        SessionID  = viewerCircuit.SessionID,
                        LocalID    = localID,
                        ReturnType = (ObjectReturnType)returnType
                    };

                    foreach (IValue iv in returnIds)
                    {
                        msg.ReturnIDs.Add(iv.AsUUID);
                    }

                    viewerCircuit.SendMessage(msg);
                }
            }
        }
 public void SendParcelAccessListRequest(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     int sequenceId,
     int flags,
     int localID)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             viewerCircuit.SendMessage(new ParcelAccessListRequest
             {
                 AgentID    = agent.AgentID,
                 SessionID  = viewerCircuit.SessionID,
                 SequenceID = sequenceId,
                 Flags      = (ParcelAccessList)flags,
                 LocalID    = localID
             });
         }
     }
 }
Ejemplo n.º 4
0
        public void Undo()
        {
            Context.InitWithDefault();

            var asm = Context.Current.Document;

            // Create one body -> State 1
            var body1 = TestGeomGenerator.CreateBox().Body;

            asm.AddChild(body1);
            Context.Current.UndoHandler.Commit();
            var state1 = Serializer.Serialize(asm, new SerializationContext());

            // Run Script -> State 2
            var script = ScriptInstance.LoadScriptFromFile(GetScriptFilename("CreateBoxBody.csx"));

            Assert.IsNotNull(script);
            Assert.IsTrue(script.Run());
            Assert.IsTrue(Context.Current.UndoHandler.CanUndo);
            Assert.IsFalse(Context.Current.UndoHandler.CanRedo);

            // Undo -> State 1
            Context.Current.UndoHandler.DoUndo(1);
            Assert.IsTrue(Context.Current.UndoHandler.CanUndo);
            Assert.IsTrue(Context.Current.UndoHandler.CanRedo);
            var state1a = Serializer.Serialize(asm, new SerializationContext());

            // LastNameSuffix has changed, this is intended. Decrement it to match again in serialization string.
            state1a = state1a.Replace("LastNameSuffices:{\"Box\":2}", "LastNameSuffices:{\"Box\":1}");
            Assert.AreEqual(state1, state1a);
        }
Ejemplo n.º 5
0
 public int CheckAssetExists(ScriptInstance instance, LSLKey assetid)
 {
     lock (instance)
     {
         return(instance.Part.ObjectGroup.AssetService.Exists(assetid.AsUUID) ? 1 : 0);
     }
 }
Ejemplo n.º 6
0
 public void SendEstateChangeInfo(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     string estateName,
     int estateFlags,
     double sunPos)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID   = agent.AgentID,
                 SessionID = viewerCircuit.SessionID,
                 Method    = "estatechangeinfo"
             };
             uint actSunPos = (uint)((sunPos + 6) * 1024.0);
             msg.ParamList.Add(estateName.ToUTF8Bytes());
             msg.ParamList.Add(((uint)estateFlags).ToString().ToUTF8Bytes());
             msg.ParamList.Add(actSunPos.ToString().ToUTF8Bytes());
             viewerCircuit.SendMessage(msg);
         }
     }
 }
Ejemplo n.º 7
0
        public void GacReference()
        {
            var script = ScriptInstance.LoadScriptFromFile(GetScriptFilename("GacReference.csx"));

            Assert.IsNotNull(script);
            Assert.IsTrue(script.Run());
        }
Ejemplo n.º 8
0
 public VehicleInstance GetInstance(ScriptInstance instance)
 {
     lock (instance)
     {
         return(new VehicleInstance(instance.Part.ObjectGroup.Scene.ID));
     }
 }
 public void SendEstateTerrainDetail(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     AnArray list)
 {
     if (list.Count % 2 != 0)
     {
         return;
     }
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID   = agent.AgentID,
                 SessionID = viewerCircuit.SessionID,
                 Method    = "texturedetail"
             };
             for (int i = 0; i < list.Count; i += 2)
             {
                 msg.ParamList.Add($"{list[i].AsInt} {list[i + 1].AsUUID}".ToUTF8Bytes());
             }
             viewerCircuit.SendMessage(msg);
         }
     }
 }
 public void SendTeleportLocationRequest(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     Vector3 gridLocation,
     Vector3 position,
     Vector3 lookAt
     )
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             viewerCircuit.SendMessage(new TeleportLocationRequest
             {
                 AgentID      = viewerCircuit.AgentID,
                 SessionID    = viewerCircuit.SessionID,
                 GridPosition = new GridVector((uint)gridLocation.X, (uint)gridLocation.Y),
                 Position     = position,
                 LookAt       = lookAt
             });
         }
     }
 }
Ejemplo n.º 11
0
        public void Replace(string name, ObjectPartInventoryItem newItem, bool onlyIfExists = false)
        {
            ObjectPartInventoryItem oldItem;
            ScriptInstance          script = null;

            newItem.Name = name;
            lock (m_DataLock)
            {
                if (TryGetValue(name, out oldItem))
                {
                    script = oldItem.RemoveScriptInstance;
                    Remove(name);
                }
                else if (onlyIfExists)
                {
                    throw new KeyNotFoundException();
                }
                if (ContainsKey(newItem.ID))
                {
                    newItem.SetNewID(UUID.Random);
                }
                Add(newItem, false);
            }
            script?.Remove();
            Interlocked.Increment(ref InventorySerial);
            if (oldItem != null)
            {
                oldItem.UpdateInfo.SetRemovedItem();
                OnInventoryUpdate?.Invoke(oldItem.UpdateInfo);
            }
            OnInventoryUpdate?.Invoke(newItem.UpdateInfo);
            OnChange?.Invoke(ChangeAction.Add, PartID, newItem.ID, newItem.Name);
        }
 public void SendTeleportRequest(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     LSLKey regionId,
     Vector3 position,
     Vector3 lookAt)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             viewerCircuit.SendMessage(new TeleportRequest
             {
                 AgentID   = viewerCircuit.AgentID,
                 SessionID = viewerCircuit.SessionID,
                 RegionID  = regionId.AsUUID,
                 Position  = position,
                 LookAt    = lookAt
             });
         }
     }
 }
        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);
                }
            }
        }
Ejemplo n.º 14
0
 public void SendMoneyTransferRequest(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     LSLKey sourceID,
     LSLKey destID,
     int flags,
     int amount,
     int aggregatePermNextOwner,
     int aggregatePermInventory,
     int transactionType,
     string description)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             viewerCircuit.SendMessage(new MoneyTransferRequest
             {
                 AgentID   = agent.AgentID,
                 SessionID = viewerCircuit.SessionID,
                 SourceID  = sourceID.AsUUID,
                 DestID    = destID.AsUUID,
                 Flags     = (byte)flags,
                 Amount    = amount,
                 AggregatePermNextOwner = (byte)aggregatePermNextOwner,
                 AggregatePermInventory = (byte)aggregatePermInventory,
                 TransactionType        = transactionType,
                 Description            = description
             });
         }
     }
 }
Ejemplo n.º 15
0
 public void SendEstateInstantMessage(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     string message)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID   = agent.AgentID,
                 SessionID = viewerCircuit.SessionID,
                 Method    = "instantmessage"
             };
             /* first four are unused for that case */
             msg.ParamList.Add(string.Empty.ToUTF8Bytes());
             msg.ParamList.Add(string.Empty.ToUTF8Bytes());
             msg.ParamList.Add(string.Empty.ToUTF8Bytes());
             msg.ParamList.Add(string.Empty.ToUTF8Bytes());
             msg.ParamList.Add(message.ToUTF8Bytes());
             viewerCircuit.SendMessage(msg);
         }
     }
 }
 public void SendEstateTerrainHeights(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     AnArray list)
 {
     if (list.Count % 3 != 0)
     {
         return;
     }
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID   = agent.AgentID,
                 SessionID = viewerCircuit.SessionID,
                 Method    = "textureheights"
             };
             for (int i = 0; i < list.Count; i += 3)
             {
                 double lowVal  = list[i + 1].AsReal;
                 double highVal = list[i + 2].AsReal;
                 msg.ParamList.Add(string.Format(CultureInfo.InvariantCulture, "{0} {1} {2}", list[i].AsInt, lowVal, highVal).ToUTF8Bytes());
             }
             viewerCircuit.SendMessage(msg);
         }
     }
 }
Ejemplo n.º 17
0
 public void SendSetRegionDebug(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     int disableScripts,
     int disableCollision,
     int disablePhysics)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID   = agent.AgentID,
                 SessionID = viewerCircuit.SessionID,
                 Method    = "setregiondebug"
             };
             msg.ParamList.Add(disableScripts.Clamp(0, 1).ToString().ToUTF8Bytes());
             msg.ParamList.Add(disableCollision.Clamp(0, 1).ToString().ToUTF8Bytes());
             msg.ParamList.Add(disablePhysics.Clamp(0, 1).ToString().ToUTF8Bytes());
             viewerCircuit.SendMessage(msg);
         }
     }
 }
Ejemplo n.º 18
0
 public void TestSetServerParam(ScriptInstance instance, string paraname, string paravalue)
 {
     lock (instance)
     {
         m_Loader.GetServerParamStorage()[UUID.Zero, paraname] = paravalue;
     }
 }
 public void SendObjectDeselect(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     AnArray objectlocalids)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new ObjectDeselect
             {
                 AgentID   = viewerCircuit.AgentID,
                 SessionID = viewerCircuit.SessionID,
             };
             foreach (IValue iv in objectlocalids)
             {
                 msg.ObjectData.Add(iv.AsUInt);
             }
             viewerCircuit.SendMessage(msg);
         }
     }
 }
Ejemplo n.º 20
0
 public void TestScriptReset(ScriptInstance instance)
 {
     lock (instance)
     {
         instance.PostEvent(new ResetScriptEvent());
     }
 }
Ejemplo n.º 21
0
        public void PreProcessorComments()
        {
            var script = ScriptInstance.LoadScriptFromFile(GetScriptFilename("PreProcessorComments.csx"));

            Assert.IsNotNull(script);
            Assert.IsTrue(script.Run());
        }
Ejemplo n.º 22
0
 public void TestResult(ScriptInstance instance, int result)
 {
     lock (instance)
     {
         m_TestRunner.OtherThreadResult = (result != 0);
     }
 }
 public void SendSoundTrigger(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     LSLKey soundID,
     LSLKey ownerID,
     LSLKey objectID,
     LSLKey parentID,
     int gridX,
     int gridY,
     Vector3 position,
     double gain)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             viewerCircuit.SendMessage(new SoundTrigger
             {
                 SoundID      = soundID,
                 OwnerID      = ownerID,
                 ObjectID     = objectID,
                 ParentID     = parentID,
                 GridPosition = new GridVector((uint)gridX, (uint)gridY),
                 Position     = position,
                 Gain         = gain
             });
         }
     }
 }
Ejemplo n.º 24
0
        public void Log(ScriptInstance instance, int logLevel, string message)
        {
            switch (logLevel)
            {
            case LOG_WARN:
                m_Log.Warn(message);
                break;

            case LOG_ERROR:
                m_Log.Error(message);
                break;

            case LOG_FATAL:
                m_Log.Fatal(message);
                break;

            case LOG_DEBUG:
                m_Log.Debug(message);
                break;

            case LOG_INFO:
            default:
                m_Log.Info(message);
                break;
            }
        }
 public void SendParcelBuy(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     int localID,
     LSLKey groupID,
     int isGroupOwned,
     int removeContribution,
     int isFinal,
     int price,
     int area)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             viewerCircuit.SendMessage(new ParcelBuy
             {
                 AgentID            = agent.AgentID,
                 SessionID          = viewerCircuit.SessionID,
                 GroupID            = groupID,
                 IsGroupOwned       = isGroupOwned != 0,
                 RemoveContribution = removeContribution != 0,
                 LocalID            = localID,
                 IsFinal            = isFinal != 0,
                 Price = price,
                 Area  = area
             });
         }
     }
 }
Ejemplo n.º 26
0
 public void InjectCollisionEnd(ScriptInstance instance,
                                LSLKey targetPrim,
                                LSLKey sourceLinkset,
                                string name,
                                int objType,
                                Vector3 position,
                                Quaternion rotation,
                                Vector3 velocity,
                                int linkNumber)
 {
     lock (instance)
     {
         ObjectPart part;
         if (instance.Part.ObjectGroup.Scene.Primitives.TryGetValue(targetPrim, out part))
         {
             var di = new DetectInfo
             {
                 Key        = sourceLinkset,
                 Name       = name,
                 Group      = UGI.Unknown,
                 ObjType    = (DetectedTypeFlags)objType,
                 Owner      = instance.Part.Owner,
                 Position   = position,
                 Rotation   = rotation,
                 Velocity   = velocity,
                 LinkNumber = linkNumber
             };
             var ev = new CollisionEvent {
                 Type = CollisionEvent.CollisionType.End
             };
             ev.Detected.Add(di);
             part.PostEvent(ev);
         }
     }
 }
 public void SendParcelJoin(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     double west,
     double south,
     double east,
     double north)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             viewerCircuit.SendMessage(new ParcelJoin
             {
                 AgentID   = agent.AgentID,
                 SessionID = viewerCircuit.SessionID,
                 West      = west,
                 South     = south,
                 East      = east,
                 North     = north
             });
         }
     }
 }
Ejemplo n.º 28
0
 public void SendEstateGetInfo(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     LSLKey transactionID,
     LSLKey invoice)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID       = agent.AgentID,
                 SessionID     = viewerCircuit.SessionID,
                 Method        = "getinfo",
                 TransactionID = transactionID,
                 Invoice       = invoice
             };
             viewerCircuit.SendMessage(msg);
         }
     }
 }
Ejemplo n.º 29
0
 public void SendRezSingleAttachmentFromInv(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     RezObjectData rezdata)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             viewerCircuit.SendMessage(new RezSingleAttachmentFromInv
             {
                 AgentID         = agent.AgentID,
                 SessionID       = viewerCircuit.SessionID,
                 ItemID          = rezdata.ItemID.AsUUID,
                 OwnerID         = agent.AgentID,
                 AttachmentPoint = (AttachmentPoint)rezdata.AttachmentPoint,
                 ItemFlags       = (uint)rezdata.ItemFlags,
                 GroupMask       = (InventoryPermissionsMask)rezdata.GroupMask,
                 EveryoneMask    = (InventoryPermissionsMask)rezdata.EveryoneMask,
                 NextOwnerMask   = (InventoryPermissionsMask)rezdata.NextOwnerMask,
                 Name            = rezdata.Name,
                 Description     = rezdata.Description
             });
         }
     }
 }
Ejemplo n.º 30
0
 public void SendScriptDialogReply(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     LSLKey objectID,
     int chatChannel,
     int buttonIndex,
     string buttonLabel)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             viewerCircuit.SendMessage(new ScriptDialogReply
             {
                 AgentID     = agent.AgentID,
                 SessionID   = viewerCircuit.SessionID,
                 ObjectID    = objectID,
                 ChatChannel = chatChannel,
                 ButtonIndex = buttonIndex,
                 ButtonLabel = buttonLabel
             });
         }
     }
 }