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); }
public static BlipEntity Create(Vector3 position, int dimension, uint range) { var entity = new BlipEntity(position, dimension, range); AltEntitySync.AddEntity(entity); return(entity); }
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); }
/// <summary> /// Destroy all created dynamic markers. /// </summary> public static void DestroyAllDynamicMarkers( ) { foreach (DynamicMarker marker in GetAllDynamicMarkers( )) { AltEntitySync.RemoveEntity(marker); } }
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); }
public void AddTest() { var entity = new Entity(1, Vector3.One, 0, 1); AltEntitySync.AddEntity(entity); AltEntitySync.RemoveEntity(entity); }
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(); }
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); }
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); } }
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); }
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); }
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()); }
public T Create(T entity) { ManagedEntities.Add(entity); AltEntitySync.AddEntity(entity); Logger.LogDebug($"[EntitySync] Created entity with id {entity.Id}"); return(entity); }
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); }
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); }
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()); }
private IEntity GetGameEntity(long id, long type) { IEntity entity; if (!AltEntitySync.TryGetEntity((ulong)id, (ulong)type, out entity)) { return(null); } return(entity); }
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); } }); }
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)); }