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 }); } } }
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); }
public int CheckAssetExists(ScriptInstance instance, LSLKey assetid) { lock (instance) { return(instance.Part.ObjectGroup.AssetService.Exists(assetid.AsUUID) ? 1 : 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); } } }
public void GacReference() { var script = ScriptInstance.LoadScriptFromFile(GetScriptFilename("GacReference.csx")); Assert.IsNotNull(script); Assert.IsTrue(script.Run()); }
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 }); } } }
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); } } }
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 }); } } }
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); } } }
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); } } }
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); } } }
public void TestScriptReset(ScriptInstance instance) { lock (instance) { instance.PostEvent(new ResetScriptEvent()); } }
public void PreProcessorComments() { var script = ScriptInstance.LoadScriptFromFile(GetScriptFilename("PreProcessorComments.csx")); Assert.IsNotNull(script); Assert.IsTrue(script.Run()); }
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 }); } } }
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 }); } } }
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 }); } } }
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); } } }
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 }); } } }
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 }); } } }