protected override void Execute(List <GameEntity> entities)
        {
            LogKilledEntities(entities);

            switch (alivePlayersAndBotsGroup.count)
            {
            case 0:
                //последние игроки погибли в одном кадре
                matchRemover.MarkMatchAsFinished(matchId);
                break;

            case 1:
                //есть победитель
                matchRemover.MarkMatchAsFinished(matchId);
                break;
            }

            if (alivePlayersGroup.count == 0)
            {
                //живых игроков не осталось. остались только боты
                //чем закончится драка ботов неинтересно матч можно завершать
                log.Info("Живые игроки в матче кончились.");
                matchRemover.MarkMatchAsFinished(matchId);
            }
        }
        protected override void Execute(List <InputEntity> entities)
        {
            log.Warn("Вызов реактивной системы для преждевременном удалении игрока из матча");
            foreach (var inputEntity in entities)
            {
                var temporaryId  = inputEntity.player.id;
                var playerEntity = gameContext.GetEntityWithPlayer(temporaryId);
                if (playerEntity == null || !playerEntity.hasAccount)
                {
                    log.Warn($"Попытка удалить несуществующего (удалённого?) игрока из матча {nameof(temporaryId)} {temporaryId}");
                }
                var accountId = playerEntity.account.id;
                log.Warn($"преждевременное удаление игрока из матча {nameof(temporaryId)} {temporaryId} {nameof(accountId)} {accountId}");
                TurnIntoBot(temporaryId);
                SendDeathMessage(accountId, temporaryId);
            }

            if (alivePlayersGroup.count == 0)
            {
                //живых игроков не осталось. остались только боты
                //чем закончится драка ботов неинтересно матч можно завершать
                log.Info("Живые игроки в матче кончились.");
                matchRemover.MarkMatchAsFinished(matchId);
            }
        }
Esempio n. 3
0
 public void FinishAllMatches()
 {
     //TODO возможно lock поможет от одновременного вызова систем
     lock (matchRemover)
     {
         foreach (var match in matchStorage.GetAllMatches())
         {
             matchRemover.MarkMatchAsFinished(match.matchId);
         }
         matchRemover.DeleteFinishedMatches();
     }
     //Жду, чтобы rudp о удалении матчей точно дошли до игроков
     Task.Delay(1500).Wait();
 }