/// <summary> /// Initialise l'évènement. /// </summary> public override void Initialize() { m_destroyed = true; m_team1Timer = true; m_team2Timer = true; m_teamOwner = 0; m_lastKiller = null; m_respawnTimer = 0; // GameServer.GetScene().Constants.Events.MonsterCamp.RespawnTimer; }
/// <summary> /// Initialise l'évènement. /// </summary> public override void Initialize() { m_destroyed = true; m_team1Timer = true; m_team2Timer = true; m_teamOwner = 0; m_monsters = new List <Entities.EntityCampMonster>(); m_lastKiller = null; m_ViruspawnOffset = new Vector2(0, 2); m_respawnTimer = 0; // GameServer.GetScene().Constants.Events.MonsterCamp.RespawnTimer; }
/// <summary> /// Mets à jour l'évènement. /// </summary> public override void Update(GameTime time) { // Si le camp n'est pas détruit : on attend qu'il le soit. if (!m_destroyed) { // Si tous les monstres du camp sont tués, on donne l'ownership du camp bool allDead = m_miniboss.IsDead; if (allDead) { if (m_lastKiller == null) { throw new Exception("Problème ?"); } m_teamOwner = m_lastKiller.Type & Entities.EntityType.Teams; // Distribution du timer à la team qui a tué le camp. if (m_teamOwner == Entities.EntityType.Team1) { m_team1Timer = true; } else if (m_teamOwner == Entities.EntityType.Team2) { m_team2Timer = true; } // Attribution de la récompense au tueur m_lastKiller.PA += GameServer.GetScene().Constants.Events.RouterCamp.Reward; // Distribution du timer aux équipes ayant la vision. m_team1Timer |= GameServer.GetMap().Vision.HasVision(Entities.EntityType.Team1, m_position); m_team2Timer |= GameServer.GetMap().Vision.HasVision(Entities.EntityType.Team2, m_position); m_respawnTimer = GameServer.GetScene().Constants.Events.RouterCamp.RespawnTimer; m_destroyed = true; SpawnWard(); } } else { // Respawn du camp si le timer expire. m_respawnTimer -= (float)time.ElapsedGameTime.TotalSeconds; if (m_respawnTimer <= 0) { if (m_ward != null) { m_ward.Die(); } SpawnCamp(); m_teamOwner = 0; m_destroyed = false; } } }
public async Task AddLinks <T>( string sourceId, Entities.EntityType sourceType, Entities.LinkType linkType, string partitionId, IEnumerable <T> links) where T : Entities.Entry { Guard.AgainstNullOrWhitespace(nameof(sourceId), sourceId); Guard.AgainstNullOrWhitespace(nameof(partitionId), partitionId); await this.EnsureInitialized(); string collectionLink = UriFactory.CreateDocumentCollectionUri(this.databaseName, this.collectionName).ToString(); Entities.LinksCollection <T> result = this .client .CreateDocumentQuery <Entities.DefaultLinksCollection <T> >( collectionLink, new FeedOptions() { PartitionKey = new PartitionKey(partitionId) }) .Where(item => item.SourceId == sourceId && item.LinkType == linkType && item.SourceType == sourceType && item.IsFull == false) .ToList() .FirstOrDefault(); if (result == null) { result = Entities.LinksCollection <T> .Create <T>(sourceId, partitionId, sourceType, linkType, links); await this.Create(result); return; } foreach (T link in links) { result.TargetEntities.Add(link); } await this.Update(result); // TODO: Check if the current page collection has exceeded collection size and create a new collection accordingly. }
public async Task RemoveLink <T>( string sourceId, Entities.EntityType sourceType, Entities.LinkType linkType, string partitionId, T link) where T : Entities.Entry { Guard.AgainstNullOrWhitespace(nameof(sourceId), sourceId); Guard.AgainstNullOrWhitespace(nameof(partitionId), partitionId); await this.EnsureInitialized(); string collectionLink = UriFactory.CreateDocumentCollectionUri(this.databaseName, this.collectionName).ToString(); Entities.LinksCollection <T> result = this .client .CreateDocumentQuery <Entities.DefaultLinksCollection <T> >( collectionLink, new FeedOptions() { PartitionKey = new PartitionKey(partitionId) }) .Where(item => item.SourceId == sourceId && item.LinkType == linkType && item.SourceType == sourceType && item.TargetEntities.Contains(link)) .ToList() .FirstOrDefault(); if (result == null) { // No such link. return; } T linkToRemove = result.TargetEntities.First(item => item.id == link.id); result.TargetEntities.Remove(linkToRemove); await this.Update(result); }
/// <summary> /// Mets à jour l'évènement. /// </summary> public override void Update(GameTime time) { // Si le camp n'est pas détruit : on attend qu'il le soit. if (!m_destroyed) { // Si tous les monstres du camp sont tués, on donne l'ownership du camp bool allDead = true; foreach (Entities.EntityCampMonster monster in m_monsters) { allDead &= monster.IsDead; } if (allDead) { if (m_lastKiller == null) { throw new Exception("Problème ?"); } m_teamOwner = m_lastKiller.Type & Entities.EntityType.Teams; // Distribution du timer à la team qui a tué le camp. if (m_teamOwner == Entities.EntityType.Team1) { m_team1Timer = true; } else if (m_teamOwner == Entities.EntityType.Team2) { m_team2Timer = true; } // Attribution de la récompense au tueur m_lastKiller.PA += GameServer.GetScene().Constants.Events.MonsterCamp.Reward; // Distribution du timer aux équipes ayant la vision. m_team1Timer |= GameServer.GetMap().Vision.HasVision(Entities.EntityType.Team1, m_position); m_team2Timer |= GameServer.GetMap().Vision.HasVision(Entities.EntityType.Team2, m_position); m_respawnTimer = GameServer.GetScene().Constants.Events.MonsterCamp.RespawnTimer; m_destroyed = true; } else { // Si un monstre du camp a été aggro, fait en sorte que les autres // le soient aussi. DispatchAgro(); } } else { // Respawn du camp si le timer expire. m_respawnTimer -= (float)time.ElapsedGameTime.TotalSeconds; if (m_respawnTimer <= 0) { SpawnCamp(); m_teamOwner = 0; m_destroyed = false; } } // Si une team a l'ownership du camp, on fait spawn des sbires. if (m_teamOwner != 0) { m_ViruspawnTimer -= (float)time.ElapsedGameTime.TotalSeconds; if (m_ViruspawnTimer <= 0) { m_ViruspawnTimer = GameServer.GetScene().Constants.Events.MonsterCamp.ViruspawnInterval; SpawnVirus(); } } }