public ScriptEventListener(ScriptInterpreter interp, BotClient client) { taskInterperter = interp; taskInterperter.Intern("Client", client); taskInterperter.Intern("thisClient", client); if (client != null) WorldSystem = client.WorldSystem; thrJobQueue = new Thread(jobManager); thrJobQueue.Name = string.Format("ScriptEventListener Thread for {0}", (client ?? (Object)"ClientManager")); thrJobQueue.Start(); }
public static SimPosition GetSimPositionByName(string arg) { int argsUsed; WorldObjects wo = WorldObjects.GridMaster; string[] args = Parser.Parse(arg); SimPosition prim = wo.GetSimObjectS(args, out argsUsed); if (prim != null) { return(prim); } prim = wo.GetVector(args, out argsUsed); return(prim); }
internal void OnAssetDownloaded(UUID uUID, Asset asset) { EnsureCached(asset, uUID); WorldObjects.RegisterUUIDMaybe(uUID, asset); SimAsset A = SimAssetStore.FindOrCreateAsset(uUID, asset.AssetType); A.SetAsset(asset); //A.TypeData = asset.AssetData; if (false) { BotClient Client = this.client; AutoResetEvent UploadCompleteEvent = new AutoResetEvent(false); if (Client.AnimationFolder == UUID.Zero) { Client.AnimationFolder = Client.Inventory.FindFolderForType(AssetType.Animation); } DateTime start = new DateTime(); Client.Inventory.RequestCreateItemFromAsset(asset.AssetData, A.Name, "Anim captured " + uUID, AssetType.Animation, InventoryType.Animation, Client.AnimationFolder, delegate(bool success, string status, UUID itemID, UUID assetID) { WriteLine( String.Format( "RequestCreateItemFromAsset() returned: Success={0}, Status={1}, ItemID={2}, AssetID={3}", success, status, itemID, assetID)); WriteLine(String.Format("Upload took {0}", DateTime.Now. Subtract(start))); UploadCompleteEvent.Set(); }); UploadCompleteEvent.WaitOne(); //A.Name //SetAnimationName(asset.AssetID, s); } // Debug(s); // RegisterUUID(asset.AssetID, s); }
//public volatile static WorldObjects Master; public void SetWorldMaster(bool isMaster) { lock (WorldObjectsMasterLock) { if (isMaster) { GridMaster = this; } if (MasteringRegions.Count > 0 && !isMaster) { throw new ArgumentException("Cant un-master!"); } isMaster = true; client.Settings.ALWAYS_DECODE_OBJECTS = isMaster; client.Settings.ALWAYS_REQUEST_OBJECTS = isMaster; client.Settings.ALWAYS_REQUEST_PARCEL_ACL = isMaster; client.Settings.ALWAYS_REQUEST_PARCEL_DWELL = isMaster; client.Settings.STORE_LAND_PATCHES = isMaster; client.Settings.OBJECT_TRACKING = isMaster; client.Settings.PARCEL_TRACKING = isMaster; client.Settings.MULTIPLE_SIMS = true; client.Settings.USE_INTERPOLATION_TIMER = false; client.Settings.ALWAYS_REQUEST_OBJECTS = true; client.Settings.ALWAYS_DECODE_OBJECTS = true; client.Settings.OBJECT_TRACKING = true; client.Settings.ENABLE_SIMSTATS = true; client.Settings.FETCH_MISSING_INVENTORY = true; client.Settings.SEND_AGENT_THROTTLE = true; client.Settings.SEND_AGENT_UPDATES = true; client.Settings.STORE_LAND_PATCHES = true; // client.Settings.OBJECT_TRACKING = isMaster; if (isMaster) { RegisterAll(); } else { UnregisterAll(); } } }
public override void Network_OnDisconnected(object sender, DisconnectedEventArgs e) { { foreach (var simulator in AllSimulators) { if (simulator.Client != client.gridClient) { if (GridMaster == this && simulator.Connected) { GridMaster = BotClientFor(simulator.Client).WorldSystem; Debug("Changed GridMaster to " + GridMaster); } continue; } RemoveSim(simulator); SimRegion.GetRegion(simulator).RemoveSim(simulator); LeaveSimulator(simulator); } } base.Network_OnDisconnected(sender, e); }
private void Self_OnInstantMessage(object sender, InstantMessageEventArgs e) { InstantMessage im = e.IM; WorldObjects.GetMemberValues("", im); ChatType Type = ChatType.Normal; switch (im.Dialog) { case InstantMessageDialog.StartTyping: Type = ChatType.StartTyping; break; case InstantMessageDialog.StopTyping: Type = ChatType.StopTyping; break; } Self_OnMessage(im.FromAgentName, im.FromAgentID, im.ToAgentID, im.Message, im.IMSessionID, im.GroupIM, im.RegionID, im.Position, im.Dialog, Type, e); }
public SimAvatarImpl(UUID id, WorldObjects objectSystem, Simulator sim) : base(id, objectSystem, sim) { Affordances.ObjectType.SuperType.Add(SimTypeSystem.GetObjectType("Avatar")); _knownTypeUsages = new ListAsSet<SimTypeUsage>(); WorldSystem.AddAvatar(this, id); }
internal SimObject CreateSimObject(UUID uuid, WorldObjects WO, Simulator simulator) { if (uuid == UUID.Zero) { throw new NullReferenceException("UUID.Zero!"); } // lock (GetSimObjectLock) SimObject obj0 = GetSimObjectFromUUID(uuid); if (obj0 != null) return obj0; simulator = simulator ?? client.Network.CurrentSim; lock (GetSimLock(simulator ?? client.Network.CurrentSim)) //lock (UUIDTypeObjectLock) // lock (SimObjects) // lock (SimAvatars) { obj0 = GetSimObjectFromUUID(uuid); if (obj0 != null) return obj0; obj0 = new SimObjectImpl(uuid, WO, simulator); SimObjects.AddTo(obj0); RegisterUUID(uuid, obj0); return obj0; } }
internal SimAvatarImpl CreateSimAvatar(UUID uuid, WorldObjects objects, Simulator simulator) { if (uuid == UUID.Zero) { throw new NullReferenceException("UUID.Zero!"); } // Request all of the packets that make up an avatar profile // lock (GetSimObjectLock) if (client.Self.AgentID == uuid) { return TheSimAvatar; } SimAvatarImpl obj0 = GetSimObjectFromUUID(uuid) as SimAvatarImpl; if (obj0 != null) return (SimAvatarImpl)obj0; object getSimLock = GetSimLock(simulator ?? client.Network.CurrentSim); lock (getSimLock) { lock (UUIDTypeObjectLock) //lock (SimObjects) // lock (SimAvatars) { SimObject simObj = GetSimObjectFromUUID(uuid); obj0 = simObj as SimAvatarImpl; if (obj0 != null) return (SimAvatarImpl) obj0; if (simObj != null) { Debug("SimObj->SimAvatar!?! " + simObj); } obj0 = new SimAvatarClient(uuid, objects, simulator); AddAvatar(obj0,uuid); obj0.PollForPrim(this, simulator); return (SimAvatarImpl)obj0; } } }
public DefaultWorldGroupProvider(WorldObjects objects) { world = objects; AddObjectGroup("selected", "set of currently selected objects", () => { SimActor avatar = this.avatar; if (avatar == null) { return(null); } return(avatar.GetSelectedObjects()); }); AddObjectGroup("none", "empty list", () => new List <SimObject>()); AddObjectGroup("assets", "known assets", () => WorldObjects.SimRootObjects.CopyOf()); AddObjectGroup("objects", "known sim root objects", () => WorldObjects.SimRootObjects.CopyOf()); AddObjectGroup("caller", "current command caller", () => { UUID callerID = BotClient.SessionToCallerId( objects.client.CurrentCommand. CurrentRequest.CallerAgent); if (callerID == UUID.Zero) { return(null); } var o = WorldObjects.GetSimObjectFromUUID(callerID); if (o == null) { return(null); } return(SingleNameValue.AsCollection(o)); }); AddObjectGroup("prims", "all prims (attached and otherwise and avatars etc)", () => WorldObjects.SimObjects.CopyOf()); AddObjectGroup("childprims", "known childs rez in world not attachments", () => WorldObjects.SimChildObjects.CopyOf()); AddObjectGroup("attachments", "known attacments (everyones)", () => WorldObjects.SimAttachmentObjects.CopyOf()); // all known accounts AddObjectGroup("accounts", "known accounts", () => WorldObjects.SimAccounts.CopyOf()); // all known avatars AddObjectGroup("avatars", "known avatars", () => WorldObjects.SimAvatars.CopyOf()); // this bot's master(s) AddObjectGroup("master", "known masters", () => { var v = new List <object>(); if (objects.client.MasterKey != UUID.Zero) { v.Add(objects.CreateSimAvatar( objects.client.MasterKey, objects, null)); } else { v.Add(objects.client.MasterName); } return(v); }); // the current bot AddObjectGroup("self", "the robot's avatar", () => { SimActor avatar = this.avatar; if (avatar == null) { return(null); } var v = new List <SimObject> { avatar }; return(v); }); AddObjectGroup("nearest", "nearest root prim", () => { var sortme = WorldObjects.SimRootObjects.CopyOf(); if (sortme.Count == 0) { return(null); } sortme.Sort(this.avatar.CompareDistance); var v = new List <SimObject> { sortme[0] }; return(v); }); AddObjectGroup("regionprims", "list of all av's, attachments, and objects in this region used in 'moveprim $regionprims <0,0,-1>'", () => { List <SimObject> here = new List <SimObject>(); SimActor avatar = this.avatar; if (avatar == null) { return(null); } ulong areg = avatar.RegionHandle; foreach (SimObject o in WorldObjects.SimObjects.CopyOf()) { if (o.RegionHandle == areg) { here.Add(o); } } return(here); }); AddObjectGroup("allprims", "list of all av's, attachments, and objects known to system", () => WorldObjects.SimObjects.CopyOf()); AddObjectGroup("selfknownprims", "list of all objects that have an affordance or makes sense for the bot to know about", () => { SimActor avatar = this.avatar; if (avatar == null) { return(null); } return(avatar.GetKnownObjects()); }); // the 'current object' - the current object is determined in a complex way // but is generally the last object acted upon by the av. it's only allowed to be changed every 30 sec // and might be overwritten by aiml. // the intent is to support the notion of a pronoun 'it' // if the bot's head is free (not being animated) it will look at target AddObjectGroup("lasteventprim", "the 'current object' - the current object is determined in a complex way", () => { SimActor avatar = this.avatar; if (avatar == null) { return(null); } var v = new List <SimPosition>(); var a = avatar.CurrentAction; if (a != null && a.Target != null) { v.Add(a.Target); return(v); } SimPosition p = null; // avatar.ApproachPosition; if (p != null) { v.Add(p); return(v); } var r = GetTargetInEvent(v, avatar); if (r != null) { return(r); } if (objects.client.MasterKey != UUID.Zero) { var master = WorldObjects.GetSimObjectFromUUID(objects.client.MasterKey); if (master != null) { return(GetTargetInEvent(v, master)); } } return(null); }); }
public void InternOnRegion(WorldObjects world) { if (!needPush) return; needPush = false; world.SendNewRegionEvent(SimEventType.DATA_UPDATE, "OnAssetInfo", this); }
public SimAvatarClient(UUID id, WorldObjects objectSystem, Simulator reg) : base(id, objectSystem, reg) { SingleInstance = this; Affordances.ObjectType.SuperType.Add(SimTypeSystem.GetObjectType("PlayerAvatar")); //try //{ // AspectName = slAvatar.Name; //} //catch (Exception) //{ // AspectName += objectSystem.client + "_Avatar_" + slAvatar.LocalID; //} //MakeEnterable(this); WorldSystem.AddAvatar(this,id); }
//public volatile static WorldObjects Master; public void SetWorldMaster(bool isMaster) { lock (WorldObjectsMasterLock) { if (isMaster) GridMaster = this; if (MasteringRegions.Count > 0 && !isMaster) throw new ArgumentException("Cant un-master!"); isMaster = true; client.Settings.ALWAYS_DECODE_OBJECTS = isMaster; client.Settings.ALWAYS_REQUEST_OBJECTS = isMaster; client.Settings.ALWAYS_REQUEST_PARCEL_ACL = isMaster; client.Settings.ALWAYS_REQUEST_PARCEL_DWELL = isMaster; client.Settings.STORE_LAND_PATCHES = isMaster; client.Settings.OBJECT_TRACKING = isMaster; client.Settings.PARCEL_TRACKING = isMaster; client.Settings.MULTIPLE_SIMS = true; client.Settings.USE_INTERPOLATION_TIMER = false; client.Settings.ALWAYS_REQUEST_OBJECTS = true; client.Settings.ALWAYS_DECODE_OBJECTS = true; client.Settings.OBJECT_TRACKING = true; client.Settings.ENABLE_SIMSTATS = true; client.Settings.FETCH_MISSING_INVENTORY = true; client.Settings.SEND_AGENT_THROTTLE = true; client.Settings.SEND_AGENT_UPDATES = true; client.Settings.STORE_LAND_PATCHES = true; // client.Settings.OBJECT_TRACKING = isMaster; if (isMaster) RegisterAll(); else UnregisterAll(); } }
public DefaultWorldGroupProvider(WorldObjects objects) { world = objects; AddObjectGroup("selected", "set of currently selected objects", () => { SimActor avatar = this.avatar; if (avatar == null) return null; return avatar.GetSelectedObjects(); }); AddObjectGroup("none", "empty list", () => new List<SimObject>()); AddObjectGroup("assets", "known assets", () => WorldObjects.SimRootObjects.CopyOf()); AddObjectGroup("objects", "known sim root objects", () => WorldObjects.SimRootObjects.CopyOf()); AddObjectGroup("caller", "current command caller", () => { UUID callerID = BotClient.SessionToCallerId( objects.client.CurrentCommand. CurrentRequest.CallerAgent); if (callerID == UUID.Zero) return null; var o = WorldObjects.GetSimObjectFromUUID(callerID); if (o == null) return null; return SingleNameValue.AsCollection(o); }); AddObjectGroup("prims", "all prims (attached and otherwise and avatars etc)", () => WorldObjects.SimObjects.CopyOf()); AddObjectGroup("childprims", "known childs rez in world not attachments", () => WorldObjects.SimChildObjects.CopyOf()); AddObjectGroup("attachments", "known attacments (everyones)", () => WorldObjects.SimAttachmentObjects.CopyOf()); // all known accounts AddObjectGroup("accounts", "known accounts", () => WorldObjects.SimAccounts.CopyOf()); // all known avatars AddObjectGroup("avatars", "known avatars", () => WorldObjects.SimAvatars.CopyOf()); // this bot's master(s) AddObjectGroup("master", "known masters", () => { var v = new List<object>(); if (objects.client.MasterKey != UUID.Zero) { v.Add(objects.CreateSimAvatar( objects.client.MasterKey, objects, null)); } else { v.Add(objects.client.MasterName); } return v; }); // the current bot AddObjectGroup("self", "the robot's avatar", () => { SimActor avatar = this.avatar; if (avatar == null) return null; var v = new List<SimObject> {avatar}; return v; }); AddObjectGroup("nearest", "nearest root prim", () => { var sortme = WorldObjects.SimRootObjects.CopyOf(); if (sortme.Count == 0) return null; sortme.Sort(this.avatar.CompareDistance); var v = new List<SimObject> {sortme[0]}; return v; }); AddObjectGroup("regionprims", "list of all av's, attachments, and objects in this region used in 'moveprim $regionprims <0,0,-1>'", () => { List<SimObject> here = new List<SimObject>(); SimActor avatar = this.avatar; if (avatar == null) return null; ulong areg = avatar.RegionHandle; foreach (SimObject o in WorldObjects.SimObjects.CopyOf()) { if (o.RegionHandle == areg) here.Add(o); } return here; }); AddObjectGroup("allprims", "list of all av's, attachments, and objects known to system", () => WorldObjects.SimObjects.CopyOf()); AddObjectGroup("selfknownprims", "list of all objects that have an affordance or makes sense for the bot to know about", () => { SimActor avatar = this.avatar; if (avatar == null) return null; return avatar.GetKnownObjects(); }); // the 'current object' - the current object is determined in a complex way // but is generally the last object acted upon by the av. it's only allowed to be changed every 30 sec // and might be overwritten by aiml. // the intent is to support the notion of a pronoun 'it' // if the bot's head is free (not being animated) it will look at target AddObjectGroup("lasteventprim", "the 'current object' - the current object is determined in a complex way", () => { SimActor avatar = this.avatar; if (avatar == null) return null; var v = new List<SimPosition>(); var a = avatar.CurrentAction; if (a != null && a.Target != null) { v.Add(a.Target); return v; } SimPosition p = null; // avatar.ApproachPosition; if (p != null) { v.Add(p); return v; } var r = GetTargetInEvent(v, avatar); if (r != null) return r; if (objects.client.MasterKey != UUID.Zero) { var master = WorldObjects.GetSimObjectFromUUID(objects.client.MasterKey); if (master != null) { return GetTargetInEvent(v, master); } } return null; }); }