public void UpdatePositionCleanupTest()
        {
            var readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync();
            var entity          = new Entity(1, Vector3.Zero, 0, 2);

            AltEntitySync.AddEntity(entity);
            var createTask = readAsyncCreate.AsTask();

            createTask.Wait();
            var createResult = createTask.Result;

            Assert.AreSame(createResult.Entity, entity);

            var newPosition = new Vector3(1, 1, 1);

            entity.Position = newPosition;

            for (var i = 0; i < 100; ++i)
            {
                entity.Position = new Vector3(i, i, i);
                Thread.Sleep(50);
            }

            var readAsyncRemove = mockNetworkLayer.RemoveEventChannel.Reader;

            AltEntitySync.RemoveEntity(entity);
            readAsyncRemove.ReadAsync().AsTask().Wait();
            readAsyncRemove.ReadAsync().AsTask().Wait();
            readAsyncRemove.ReadAsync().AsTask().Wait();
            Assert.AreEqual(0, grid.GetEntityCount());
        }
        public void RemoveClientTest()
        {
            var readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync();
            var data            = new Dictionary <string, object>();

            data["bla"] = 1337;
            var entity = new Entity(1, new Vector3(1000, 1000, 1000), 0, 2, data);

            AltEntitySync.AddEntity(entity);
            var dummy      = mockNetworkLayer.AddDummyClient();
            var createTask = readAsyncCreate.AsTask();

            createTask.Wait();
            var createResult = createTask.Result;

            Assert.AreSame(createResult.Entity, entity);
            Assert.AreEqual(1, entity.GetClients().Count);
            Assert.AreEqual(1, entity.DataSnapshot.GetLastClients().Count);
            Assert.AreEqual(1, dummy.GetEntities(0).Count);

            mockNetworkLayer.RemoveDummyClient();

            Thread.Sleep(300);

            Assert.AreEqual(0, entity.DataSnapshot.GetLastClients().Count);
            Assert.AreEqual(0, entity.GetClients().Count);
            Assert.AreEqual(1, dummy.GetEntities(0).Count);

            AltEntitySync.RemoveEntity(entity);
        }
示例#3
0
        public static BlipEntity Create(Vector3 position, int dimension, uint range)
        {
            var entity = new BlipEntity(position, dimension, range);

            AltEntitySync.AddEntity(entity);
            return(entity);
        }
示例#4
0
        public async Task <bool> Initialize()
        {
            if (_initialized)
            {
                return(false);
            }

            _initialized = true;

            AltEntitySync.AddEntity(Fire);

            Alt.EmitAllClients("FireFighters:Fire:NewStarted", Fire.Id);

            await Task.Delay(Fire.FlameSpawnDelay);

            Alt.EmitAllClients("FireFighters:Fire:FlamesSpawning", Fire.Id);

            var flameBuilder = new FlameBuilder()
                               .SetPosition(Fire.Position)
                               .SetLevel(10);

            if (Fire.IsGasFire)
            {
                flameBuilder.GasFire();
            }

            Fire.MainFlame = flameBuilder.InitializeFlame();

            OnTick(); // no await!

            return(_initialized);
        }
        public void UpdateRangeTest()
        {
            var readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync();
            var entity          = new Entity(1, Vector3.One, 0, 2);

            AltEntitySync.AddEntity(entity);
            var createTask = readAsyncCreate.AsTask();

            createTask.Wait();
            var createResult = createTask.Result;

            Assert.AreSame(createResult.Entity, entity);

            var readAsyncRemove = mockNetworkLayer.RemoveEventChannel.Reader.ReadAsync();

            entity.Range = 1;
            var removeTask = readAsyncRemove.AsTask();

            removeTask.Wait();
            var removeResult = removeTask.Result;

            Assert.AreSame(removeResult.Entity, entity);

            AltEntitySync.RemoveEntity(entity);
            Thread.Sleep(500);
            Assert.AreEqual(0, grid.GetEntityCount());
        }
        /// <summary>
        /// Create a new dynamic marker
        /// </summary>
        /// <param name="markerType">The type of marker to spawn.</param>
        /// <param name="position">The position at which the marker should spawn at.</param>
        /// <param name="scale">The scale of the marker.</param>
        /// <param name="rotation">The rotation of the marker.</param>
        /// <param name="direction">The direction of the marker.</param>
        /// <param name="color">The color of the marker.</param>
        /// <param name="bobUpDown">Whether the marker should bob up and down.</param>
        /// <param name="faceCamera">Whether the marker should face the entity's camera.</param>
        /// <param name="rotate">Whether the marker should rotate on the Y axis only.</param>
        /// <param name="textureDict">An optional texture dictionary to apply to the marker.</param>
        /// <param name="textureName">An optional texture name to apply to the marker.</param>
        /// <param name="drawOnEnter">Whether it should draw the marker onto an entity that intersects with it.</param>
        /// <param name="dimension">The dimension of the marker</param>
        /// <param name="streamRange">Stream distance of the marker, default is 100.</param>
        /// <returns></returns>
        public static Marker Create(
            MarkerTypes markerType, Vector3 position, Vector3 scale, Vector3?rotation = null, Vector3?direction = null, Rgba?color = null, int dimension = 0,
            bool?bobUpDown   = false, bool?faceCamera  = false, bool?rotate = false, string textureDict = null, string textureName = null,
            bool?drawOnEnter = false, uint streamRange = 100
            )
        {
            Marker marker = new Marker(position, dimension, streamRange, 0)
            {
                Rotation    = rotation ?? new Vector3(0),
                MarkerType  = markerType,
                Direction   = direction ?? new Vector3(0),
                Scale       = scale,
                Color       = color ?? null,
                BobUpDown   = bobUpDown ?? null,
                FaceCamera  = faceCamera ?? null,
                Rotate      = rotate ?? null,
                TextureDict = textureDict ?? null,
                TextureName = textureName ?? null,
                DrawOnEnter = drawOnEnter ?? null
            };

            Marker.MarkerList.Add(marker);
            AltEntitySync.AddEntity(marker);
            return(marker);
        }
示例#7
0
 /// <summary>
 /// Destroy all created dynamic markers.
 /// </summary>
 public static void DestroyAllDynamicMarkers( )
 {
     foreach (DynamicMarker marker in GetAllDynamicMarkers( ))
     {
         AltEntitySync.RemoveEntity(marker);
     }
 }
示例#8
0
        public void RemoveTest()
        {
            var readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync();
            var data            = new Dictionary <string, object>();

            data["bla"] = 1337;
            var entity = new Entity(1, Vector3.Zero, 0, 2, data);

            AltEntitySync.AddEntity(entity);
            var createTask = readAsyncCreate.AsTask();

            createTask.Wait();
            var createResult = createTask.Result;

            Assert.AreSame(createResult.Entity, entity);

            var readAsyncRemove     = mockNetworkLayer.RemoveEventChannel.Reader.ReadAsync();
            var readAsyncClearCache = mockNetworkLayer.ClearCacheEventChannel.Reader.ReadAsync();

            AltEntitySync.RemoveEntity(entity);

            var removeTask = readAsyncRemove.AsTask();

            removeTask.Wait();
            var removeResult = removeTask.Result;

            Assert.AreSame(removeResult.Entity, entity);

            var clearCacheTask = readAsyncClearCache.AsTask();

            clearCacheTask.Wait();
            var clearCacheResult = clearCacheTask.Result;

            Assert.AreSame(clearCacheResult.Entity, entity);
        }
示例#9
0
        public void AddTest()
        {
            var entity = new Entity(1, Vector3.One, 0, 1);

            AltEntitySync.AddEntity(entity);
            AltEntitySync.RemoveEntity(entity);
        }
示例#10
0
        public override void OnStart()
        {
            AltEntitySync.Init(1, 100, false,
                               (threadCount, repository) => new ServerEventNetworkLayer(threadCount, repository),
                               (entity, threadCount) => (entity.Id % threadCount),
                               (entityId, entityType, threadCount) => (entityId % threadCount),
                               (threadId) => new LimitedGrid3(50_000, 50_000, 100, 10_000, 10_000, 300),
                               new IdProvider());

            StartDestroyedVehicleTimer();
            StartGlobalMessageTimer();
            StartLostPlayerTimer();

            Database db = new Database();

            db.LoadBattleRoyaleItem();
            db.LoadBattleRoyaleMaps();
            db.LoadBattleRoyaleItemSpawns();
            db.LoadVehicleShop();

            for (int i = 0; i < db.ColumnCount("SELECT * FROM `team`"); i++)
            {
                Team team = new Team(i + 1);
                Data.Teams.Add(i + 1, team);
                db.LoadTeamClothes(i + 1);
                db.LoadTeamProps(i + 1);
            }

            for (int i = 0; i < db.ColumnCount("SELECT * FROM `deathmatch`"); i++)
            {
                Deathmatch dmteam = new Deathmatch(i + 1);
                Data.DmTeams.Add(i + 1, dmteam);
            }
            db.LoadDuell();
        }
示例#11
0
        public void UpdatePositionTest()
        {
            var readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync();
            var entity          = new Entity(1, Vector3.Zero, 0, 2);

            AltEntitySync.AddEntity(entity);
            var createTask = readAsyncCreate.AsTask();

            createTask.Wait();
            var createResult = createTask.Result;

            Assert.AreSame(createResult.Entity, entity);

            var readAsyncPositionUpdate = mockNetworkLayer.PositionUpdateEventChannel.Reader.ReadAsync();
            var newPosition             = new Vector3(1, 1, 1);

            entity.Position = newPosition;
            var positionUpdateTask = readAsyncPositionUpdate.AsTask();

            positionUpdateTask.Wait();
            var positionUpdateResult = positionUpdateTask.Result;

            Assert.AreSame(positionUpdateResult.Entity, entity);
            Assert.AreEqual(newPosition, positionUpdateResult.Position);

            var readAsyncRemove = mockNetworkLayer.RemoveEventChannel.Reader.ReadAsync();

            AltEntitySync.RemoveEntity(entity);
            var removeTask = readAsyncRemove.AsTask();

            removeTask.Wait();
            var removeResult = removeTask.Result;

            Assert.AreSame(removeResult.Entity, entity);
        }
示例#12
0
        public override void OnStart( )
        {
            // YOU MUST ADD THIS IN THE ONSTART OF YOUR GAMEMODE, OBJECTSTREAMER WONT WORK WITHOUT IT!
            AltEntitySync.Init(1, 100,
                               repository => new ServerEventNetworkLayer(repository),
                               () => new LimitedGrid3(50_000, 50_000, 100, 10_000, 10_000, 600),
                               new IdProvider( )
                               );
            //////////////////////////

            AltAsync.OnPlayerConnect  += OnPlayerConnect;
            AltAsync.OnConsoleCommand += OnConsoleCommand;

            // Spawn markers
            CreateMarkers( );

            // Display commands in console
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("|---------------------AVAILABLE CONSOLE COMMANDS:---------------------|");
            Console.WriteLine("| dam -> Destroy all created markers.");
            Console.WriteLine("| cam -> Create all markers defined in the CreateMarkers method.");
            Console.WriteLine(" ");
            Console.WriteLine("| cp {id} -> Move a specified marker by 5 units on the Z axis(height).");
            Console.WriteLine("| cr {id} -> Rotate a specified marker by 5 units on the Z axis(yaw).");
            Console.WriteLine("| ct {id} -> Change type of the specified marker.");
            Console.WriteLine("| cd {id} -> Change direction of the specified marker.");
            Console.WriteLine(" ");
            Console.WriteLine("| do {id} -> Destroy a dynamic marker by ID(IDs start at 0).");
            Console.WriteLine("| go {id} -> Get dynamic marker data of the specified marker ID.");
            Console.WriteLine(" ");
            Console.WriteLine("| countmarker -> Get the amount of created markers.");
            Console.WriteLine("|--------------------------------------------------------------------|");
            Console.ResetColor( );
        }
 /// <summary>
 /// Destroy all created dynamic markers.
 /// </summary>
 public static void DestroyAllDynamicMarkers()
 {
     foreach (Marker marker in GetAllDynamicMarkers())
     {
         AltEntitySync.RemoveEntity(marker);
     }
     Marker.MarkerList.Clear();
 }
 /// <summary>
 /// Destroy an HelpText.
 /// </summary>
 /// <param name="dynamicTextLabel">The text label instance to destroy.</param>
 public static void DeleteHelpText(HelpText dynamicTextLabel)
 {
     mGlobal.API.RunSameThread(() =>
     {
         HelpText.HelpTextList.Remove(dynamicTextLabel);
         AltEntitySync.RemoveEntity(dynamicTextLabel);
     });
 }
 public EntityScript()
 {
     AltEntitySync.Init(1, 100, false,
                        (threadCount, repository) => new ServerEventNetworkLayer(threadCount, repository),
                        (entity, threadCount) => (entity.Id % threadCount),
                        (entityId, entityType, threadCount) => (entityId % threadCount),
                        (threadId) => new LimitedGrid3(50_000, 50_000, 100, 10_000, 10_000, 300), new IdProvider());
 }
 /// <summary>
 /// Destroy all HelpText.
 /// </summary>
 public static void DeleteAllHelpText()
 {
     foreach (HelpText obj in GetAllHelpText())
     {
         HelpText.HelpTextList.Remove(obj);
         AltEntitySync.RemoveEntity(obj);
     }
 }
示例#17
0
 public void Setup()
 {
     AltEntitySync.Init(1, 500,
                        repository => new MockNetworkLayer(repository),
                        () => new Grid(50_000, 50_000, 100, 10_000, 10_000),
                        new IdProvider());
     grid3 = new Grid3(50_000, 50_000, 100, 10_000, 10_000);
 }
示例#18
0
 public static void Entities()
 {
     for (var i = 0; i < 5000; i++)
     {
         var entity = new Entity(1, GetRandomVector3(), 0, 2);
         AltEntitySync.AddEntity(entity);
     }
     Thread.Sleep(20000);
 }
示例#19
0
 public void Setup()
 {
     AltEntitySync.Init(1, 500,
                        (threadCount, repository) => new MockNetworkLayer(threadCount, repository),
                        (entity, threadCount) => (entity.Id % threadCount),
                        (entityId, entityType, threadCount) => (entityId % threadCount),
                        (id) => new Grid2(50_000, 50_000, 100, 10_000, 10_000),
                        new IdProvider());
 }
示例#20
0
        public T Create(T entity)
        {
            ManagedEntities.Add(entity);
            AltEntitySync.AddEntity(entity);

            Logger.LogDebug($"[EntitySync] Created entity with id {entity.Id}");

            return(entity);
        }
示例#21
0
        public void OnTick(Flame flame)
        {
            if (!flame.IsPositionGroundValidated || !flame.Active)
            {
                return;
            }

            if (flame.Extinguished)
            {
                // to be sure: stop and remove all children
                flame.Children.ForEach(e =>
                {
                    e.Extinguished = true;
                    AltEntitySync.RemoveEntity(e);
                });

                AltEntitySync.RemoveEntity(flame);

                flame.Active = false;

                return;
            }

            // remove inactive flames and execute tick on every child
            flame.Children.RemoveAll(e => !e.Active);
            flame.Children.ForEach(e => OnTick(e));

            // logical tick only every 5 seconds
            if (DateTime.Now < flame.LastManagedTick + TimeSpan.FromSeconds(5d))
            {
                return;
            }

            flame.LastManagedTick = DateTime.Now;

            if (_random.Next(0, 100) <= Math.Max(30 + flame.Level, 50))
            {
                flame.Level += 1;
            }

            // create children
            if (flame.Level > 10 && flame.Level % 5 == 0 && _random.Next(0, 100) <= Math.Max(10 - flame.Level, 30))
            {
                var flamesToSpawn = _random.Next(1, Convert.ToInt32(Math.Floor(flame.Level / 7d)));

                for (var i = 0; i < flamesToSpawn; i++)
                {
                    var childFlamePos = flame.Position + new Vector3(_random.Next(0, 50) / 10f, _random.Next(0, 50) / 10f, 0);

                    var childFlame = new FlameBuilder().SetPosition(childFlamePos).InitializeFlame();
                    flame.Children.Add(childFlame);

                    Console.WriteLine($"Flame {flame.Id} generated child {childFlame.Id}");
                }
            }
        }
        /// <summary>
        /// Get a HelpText by it's ID.
        /// </summary>
        /// <param name="dynamicTextLabelId">The ID of the textlabel.</param>
        /// <returns>The dynamic textlabel or null if not found.</returns>
        public static HelpText GetHelpText(ulong dynamicTextLabelId)
        {
            if (!AltEntitySync.TryGetEntity(dynamicTextLabelId, 4, out IEntity entity))
            {
                Console.WriteLine($"[OBJECT-STREAMER] [GetDynamicTextLabel] ERROR: Entity with ID { dynamicTextLabelId } couldn't be found.");
                return(null);
            }

            return((HelpText)entity);
        }
示例#23
0
 public void Setup()
 {
     AltEntitySync.Init(1, 500, _ => true,
                        (threadCount, repository) => new MockNetworkLayer(threadCount, repository),
                        (entity, threadCount) => (entity.Id % threadCount),
                        (entityId, entityType, threadCount) => (entityId % threadCount),
                        (id) => new LimitedGrid(50_000, 50_000, 100, 10_000, 10_000, 3),
                        new IdProvider());
     grid2 = new LimitedGrid3(50_000, 50_000, 100, 10_000, 10_000, 3);
 }
示例#24
0
 public override void OnStart()
 {
     AltEntitySync.Init(2, 100,
                        (threadId) => false,
                        (threadCount, repository) => new ServerEventNetworkLayer(threadCount, repository),
                        (entity, threadCount) => (entity.Type % threadCount),
                        (entityId, entityType, threadCount) => (entityType % threadCount),
                        (threadId) => new LimitedGrid3(50_000, 50_000, 100, 10_000, 10_000, 300),
                        new IdProvider());
 }
示例#25
0
        private IEntity GetGameEntity(long id, long type)
        {
            IEntity entity;

            if (!AltEntitySync.TryGetEntity((ulong)id, (ulong)type, out entity))
            {
                return(null);
            }

            return(entity);
        }
示例#26
0
        public void DeleteAll()
        {
            foreach (var entity in ManagedEntities)
            {
                AltEntitySync.RemoveEntity(entity);
            }

            ManagedEntities.Clear();

            Logger.LogDebug($"[EntitySync] Deleted all entities");
        }
 /// <summary>
 /// Destroy all HelpText.
 /// </summary>
 public static void DeleteAllHelpText()
 {
     mGlobal.API.RunSameThread(() =>
     {
         foreach (HelpText obj in GetAllHelpText())
         {
             HelpText.HelpTextList.Remove(obj);
             AltEntitySync.RemoveEntity(obj);
         }
     });
 }
示例#28
0
 public void Setup()
 {
     AltEntitySync.Init(1, 100,
                        repository =>
     {
         mockNetworkLayer = new MockNetworkLayer(repository);
         return(mockNetworkLayer);
     },
                        () => new Grid2(50_000, 50_000, 100, 10_000, 10_000),
                        new IdProvider());
 }
        /// <summary>
        /// Destroy a dynamic marker by it's ID.
        /// </summary>
        /// <param name="dynamicMarkerId">The ID of the marker.</param>
        /// <returns>True if successful, false otherwise.</returns>
        public static bool Delete(ulong dynamicMarkerId)
        {
            Marker marker = GetMarker(dynamicMarkerId);

            if (marker == null)
                return false;

            Marker.MarkerList.Remove(marker);
            AltEntitySync.RemoveEntity(marker);
            return true;
        }
 public void OnScriptsStarted(IScript[] scripts)
 {
     AltEntitySync.Init(5, 100,
                        (repository, threadCount) => new ServerEventNetworkLayer(repository, threadCount),
                        (entity, threadCount) => entity.Type,
                        (entityId, entityType, threadCount) => entityType,
                        (threadId) =>
     {
         if (threadId == 0)     // objects
         {
             return(new LimitedGrid3(50_000, 50_000, 100, 10_000, 10_000, 350));
         }