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();
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #7
0
 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);
 }
Example #8
0
 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;
                 }
 }
Example #9
0
 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;
         }
     }
 }
Example #10
0
        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);
            });
        }
Example #11
0
 public void InternOnRegion(WorldObjects world)
 {
     if (!needPush) return;
     needPush = false;
     world.SendNewRegionEvent(SimEventType.DATA_UPDATE, "OnAssetInfo", this);
 }
Example #12
0
 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 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);
        }
        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;
                               });
        }