Exemplo n.º 1
0
        public void GenerateAnInitCode_ResultsInAnStringWith6Chars_Test()
        {
            // Arrange
            var quest = QuestFactory.Create();

            // Act
            var initCode = quest.GenerateInitCode();

            // Assert
            initCode.Should().HaveLength(6);
        }
Exemplo n.º 2
0
        public void GenerateAnInitCode_ResultsInAnUrlEncodedString_Test()
        {
            // Arrange
            var quest = QuestFactory.Create();

            // Act
            var initCode           = quest.GenerateInitCode();
            var urlEncodedInitCode = HttpUtility.UrlEncode(initCode);

            // Assert
            initCode.Should().BeEquivalentTo(urlEncodedInitCode);
        }
Exemplo n.º 3
0
        public void StartJourney_ResultsInGeneratedGame_AndReturnsGameId_Test()
        {
            // Arrange
            var gameStore = new VolatileGameStore();
            var quest     = QuestFactory.Create(gameStore);

            // Act
            var gameId = quest.StartJourney();

            // Assert
            Assert.NotEqual(Guid.Empty, gameId);
            Assert.NotNull(gameStore.Get(gameId));
        }
Exemplo n.º 4
0
        /// <summary>
        /// Create a named autosplit for the specified quest and difficulty.
        /// </summary>
        /// <param name="questId">The quest.</param>
        /// <param name="difficulty">Difficulty for quest.</param>
        /// <returns>An autosplit for a specific quest.</returns>
        AutoSplit CreateForQuest(QuestId questId, GameDifficulty difficulty)
        {
            var quest = QuestFactory.Create(questId, 0);
            var name  = quest != null ? quest.CommonName : "Quest";

            // Add difficulty to name if above normal.
            if (difficulty == GameDifficulty.Nightmare)
            {
                name += " (NM)";
            }
            if (difficulty == GameDifficulty.Hell)
            {
                name += " (H)";
            }

            return(new AutoSplit(name, AutoSplit.SplitType.Quest, (short)questId, (short)difficulty));
        }
        private void FillComboBoxes(AutoSplit autosplit)
        {
            if (autosplit.IsDifficultyIgnored())
            {
                cmbDifficulty.Hide();
            }
            else
            {
                cmbDifficulty.Show();
                cmbDifficulty.SelectedIndex = autosplit.Difficulty;
            }

            cmbValue.Items.Clear();
            switch (autosplit.Type)
            {
            case AutoSplit.SplitType.CharLevel:
                for (int i = 1; i < 100; i++)
                {
                    cmbValue.Items.Add(new Item("" + i, i));
                }
                break;

            case AutoSplit.SplitType.Area:
                foreach (Area area in Area.getAreaList())
                {
                    if (area.Id > 0)
                    {
                        cmbValue.Items.Add(new Item(area.ToString(), area.Id));
                    }
                }
                break;

            case AutoSplit.SplitType.Item:
                cmbValue.Items.Add(new Item(LABEL_HORADRIC_CUBE, (int)D2Data.ItemId.HORADRIC_CUBE));
                cmbValue.Items.Add(new Item(LABEL_HORADRIC_SHAFT, (int)D2Data.ItemId.HORADRIC_SHAFT));
                cmbValue.Items.Add(new Item(LABEL_HORADRIC_AMULET, (int)D2Data.ItemId.HORADRIC_AMULET));
                cmbValue.Items.Add(new Item(LABEL_KHALIMS_EYE, (int)D2Data.ItemId.KHALIM_EYE));
                cmbValue.Items.Add(new Item(LABEL_KHALIMS_HEART, (int)D2Data.ItemId.KHALIM_HEART));
                cmbValue.Items.Add(new Item(LABEL_KHALIMS_BRAIN, (int)D2Data.ItemId.KHALIM_BRAIN));
                break;

            case AutoSplit.SplitType.Quest:
                foreach (QuestId questId in Enum.GetValues(typeof(QuestId)))
                {
                    var quest = QuestFactory.Create(questId, 0);
                    var name  = (quest.IsBossQuest ? "" : $"Act {quest.Act} - ") + quest.CommonName;

                    cmbValue.Items.Add(new Item(name, (int)questId));
                }
                break;

            case AutoSplit.SplitType.Special:
                cmbValue.Items.Add(new Item(LABEL_GAME_START, (int)AutoSplit.Special.GameStart));
                cmbValue.Items.Add(new Item(LABEL_CLEAR_100_PERCENT, (int)AutoSplit.Special.Clear100Percent));
                cmbValue.Items.Add(new Item(LABEL_CLEAR_100_PERCENT_ALL, (int)AutoSplit.Special.Clear100PercentAllDifficulties));
                break;

            case AutoSplit.SplitType.Gems:
                foreach (Gem gem in Enum.GetValues(typeof(Gem)))
                {
                    var name = Regex.Replace(gem.ToString(), @"(\B[A-Z])", " $1");
                    cmbValue.Items.Add(new Item(name, (int)gem));
                }

                break;
            }
        }
Exemplo n.º 6
0
        public void ShouldReachAutosplits()
        {
            var splitOnGameStart = new AutoSplit(
                "game start",
                AutoSplit.SplitType.Special,
                1,
                (short)GameDifficulty.Normal
                );
            var splitOnGameClear = new AutoSplit(
                "100% done",
                AutoSplit.SplitType.Special,
                2,
                (short)GameDifficulty.Normal
                );
            var splitOnGameClearAllDifficulties = new AutoSplit(
                "100% done all difficulties",
                AutoSplit.SplitType.Special,
                3,
                (short)GameDifficulty.Normal
                );
            var splitOnCharLevel10 = new AutoSplit(
                "char level 10",
                AutoSplit.SplitType.CharLevel,
                10,
                (short)GameDifficulty.Normal
                );
            var splitOnArea1 = new AutoSplit(
                "area 1",
                AutoSplit.SplitType.Area,
                (int)Area.ROGUE_ENCAMPMENT,
                (short)GameDifficulty.Normal
                );
            var splitOnItem1 = new AutoSplit(
                "item 1",
                AutoSplit.SplitType.Item,
                1,
                (short)GameDifficulty.Normal
                );
            var splitOnGem1 = new AutoSplit(
                "gem 1",
                AutoSplit.SplitType.Gems,
                1,
                (short)GameDifficulty.Normal
                );
            var splitOnQuest81 = new AutoSplit(
                "quest 81 (den of evil)",
                AutoSplit.SplitType.Quest,
                81,
                (short)GameDifficulty.Normal
                );

            var cfg = new Config();

            cfg.Enabled = true;
            cfg.Splits  = new List <AutoSplit>();
            cfg.Splits.Add(splitOnGameStart);
            cfg.Splits.Add(splitOnGameClear);
            cfg.Splits.Add(splitOnGameClearAllDifficulties);
            cfg.Splits.Add(splitOnCharLevel10);
            cfg.Splits.Add(splitOnArea1);
            cfg.Splits.Add(splitOnItem1);
            cfg.Splits.Add(splitOnGem1);
            cfg.Splits.Add(splitOnQuest81);

            var config = new Mock <ApplicationConfig>();

            config.Setup(x => x.PluginConf(It.IsAny <string>())).Returns(cfg);
            var configService = new Mock <IConfigService>();

            configService.SetupGet(x => x.CurrentConfig).Returns(config.Object);

            var gameService = new Mock <IGameService>();

            var diabloInterface = new Mock <IDiabloInterface>();

            diabloInterface.Setup(x => x.configService).Returns(configService.Object);
            diabloInterface.Setup(x => x.game).Returns(gameService.Object);

            var autoSplitService = new Plugin();

            autoSplitService.Initialize(diabloInterface.Object);

            var normalQuests = new List <Quest>()
            {
                QuestFactory.Create(QuestId.DenOfEvil, 0),
                QuestFactory.Create(QuestId.Andariel, 0),
            };

            var nightmareQuests = new List <Quest>()
            {
                QuestFactory.Create(QuestId.DenOfEvil, 0),
                QuestFactory.Create(QuestId.Andariel, 0),
            };

            var hellQuests = new List <Quest>()
            {
                QuestFactory.Create(QuestId.DenOfEvil, 0),
                QuestFactory.Create(QuestId.Andariel, 0),
            };

            var quests = new Quests(new List <List <Quest> >
            {
                normalQuests,
                nightmareQuests,
                hellQuests,
            });

            var itemStrings = new Dictionary <BodyLocation, string>();
            var itemsIds    = new List <int>();

            var characterMock = new Mock <Character>();

            characterMock.SetupGet(x => x.Level).Returns(9);
            characterMock.SetupGet(x => x.IsNewChar).Returns(true);
            characterMock.SetupGet(x => x.InventoryItemIds).Returns(itemsIds);

            var processInfo = new ProcessInfo();

            var game = new Game();

            game.Area       = 0;
            game.Difficulty = GameDifficulty.Normal;
            game.PlayersX   = 1;
            game.GameCount  = 0;
            game.CharCount  = 0;
            game.Character  = characterMock.Object;
            game.Quests     = quests;

            List <Monster> killedMonsters = null;
            var            args           = new DataReadEventArgs(processInfo, game, killedMonsters);

            // test autosplit by game start
            Assert.AreEqual(false, splitOnGameStart.IsReached);
            gameService.Raise(g => g.DataRead += null, args);
            Assert.AreEqual(true, splitOnGameStart.IsReached);

            // test autosplit by level
            Assert.AreEqual(false, splitOnCharLevel10.IsReached);
            gameService.Raise(g => g.DataRead += null, args);
            Assert.AreEqual(false, splitOnCharLevel10.IsReached);

            characterMock.SetupGet(x => x.Level).Returns(10);
            gameService.Raise(g => g.DataRead += null, args);
            Assert.AreEqual(true, splitOnCharLevel10.IsReached);

            // test autosplit by area
            Assert.AreEqual(false, splitOnArea1.IsReached);
            game.Area = (int)Area.ROGUE_ENCAMPMENT;
            gameService.Raise(g => g.DataRead += null, args);
            game.Area = (int)Area.ROGUE_ENCAMPMENT + 1;
            Assert.AreEqual(true, splitOnArea1.IsReached);

            // test autosplit by item
            Assert.AreEqual(false, splitOnItem1.IsReached);
            Assert.AreEqual(false, splitOnGem1.IsReached);
            itemsIds.Add(1);
            gameService.Raise(g => g.DataRead += null, args);
            Assert.AreEqual(true, splitOnItem1.IsReached);
            Assert.AreEqual(true, splitOnGem1.IsReached);

            // test autosplit by quest
            Assert.AreEqual(false, splitOnQuest81.IsReached);
            normalQuests.Clear();
            normalQuests.Add(QuestFactory.Create(QuestId.DenOfEvil, 1 << 0));
            normalQuests.Add(QuestFactory.Create(QuestId.Andariel, 0));
            gameService.Raise(g => g.DataRead += null, args);
            Assert.AreEqual(true, splitOnQuest81.IsReached);

            // test autosplit on game clear
            Assert.AreEqual(false, splitOnGameClear.IsReached);
            normalQuests.Clear();
            normalQuests.Add(QuestFactory.Create(QuestId.DenOfEvil, 1 << 0));
            normalQuests.Add(QuestFactory.Create(QuestId.Andariel, 1 << 0));
            gameService.Raise(g => g.DataRead += null, args);
            Assert.AreEqual(true, splitOnGameClear.IsReached);

            // test autosplit on game clear all difficulties
            Assert.AreEqual(false, splitOnGameClearAllDifficulties.IsReached);
            nightmareQuests.Clear();
            nightmareQuests.Add(QuestFactory.Create(QuestId.DenOfEvil, 1 << 0));
            nightmareQuests.Add(QuestFactory.Create(QuestId.Andariel, 1 << 0));
            gameService.Raise(g => g.DataRead += null, args);
            Assert.AreEqual(false, splitOnGameClearAllDifficulties.IsReached);
            hellQuests.Clear();
            hellQuests.Add(QuestFactory.Create(QuestId.DenOfEvil, 1 << 0));
            hellQuests.Add(QuestFactory.Create(QuestId.Andariel, 1 << 0));
            gameService.Raise(g => g.DataRead += null, args);
            Assert.AreEqual(true, splitOnGameClearAllDifficulties.IsReached);
        }
Exemplo n.º 7
0
        private string QuestName(QuestId questId)
        {
            var quest = QuestFactory.Create(questId, 0);

            return((quest.IsBossQuest ? "" : $"Act {quest.Act} - ") + quest.CommonName);
        }
        public void ShouldReachAutosplits()
        {
            var splitOnGameStart = new AutoSplit(
                "game start",
                AutoSplit.SplitType.Special,
                1,
                (short)GameDifficulty.Normal
                );
            var splitOnGameClear = new AutoSplit(
                "100% done",
                AutoSplit.SplitType.Special,
                2,
                (short)GameDifficulty.Normal
                );
            var splitOnGameClearAllDifficulties = new AutoSplit(
                "100% done all difficulties",
                AutoSplit.SplitType.Special,
                3,
                (short)GameDifficulty.Normal
                );
            var splitOnCharLevel10 = new AutoSplit(
                "char level 10",
                AutoSplit.SplitType.CharLevel,
                10,
                (short)GameDifficulty.Normal
                );
            var splitOnArea1 = new AutoSplit(
                "area 1",
                AutoSplit.SplitType.Area,
                1,
                (short)GameDifficulty.Normal
                );
            var splitOnItem1 = new AutoSplit(
                "item 1",
                AutoSplit.SplitType.Item,
                1,
                (short)GameDifficulty.Normal
                );
            var splitOnGem1 = new AutoSplit(
                "gem 1",
                AutoSplit.SplitType.Gems,
                1,
                (short)GameDifficulty.Normal
                );
            var splitOnQuest81 = new AutoSplit(
                "quest 81 (den of evil)",
                AutoSplit.SplitType.Quest,
                81,
                (short)GameDifficulty.Normal
                );
            var appSettings = new ApplicationSettings();

            appSettings.DoAutosplit = true;
            appSettings.Autosplits.Add(splitOnGameStart);
            appSettings.Autosplits.Add(splitOnGameClear);
            appSettings.Autosplits.Add(splitOnGameClearAllDifficulties);
            appSettings.Autosplits.Add(splitOnCharLevel10);
            appSettings.Autosplits.Add(splitOnArea1);
            appSettings.Autosplits.Add(splitOnItem1);
            appSettings.Autosplits.Add(splitOnGem1);
            appSettings.Autosplits.Add(splitOnQuest81);
            var settingsServiceMock = new Mock <ISettingsService>();

            settingsServiceMock.SetupGet(x => x.CurrentSettings).Returns(appSettings);
            var gameService = new GameServiceMock();
            AutoSplitService autoSplitService = new AutoSplitService(
                settingsServiceMock.Object,
                gameService,
                new Mock <KeyService>().Object
                );

            var normalQuests = new List <Quest>()
            {
                QuestFactory.Create(QuestId.DenOfEvil, 0),
                QuestFactory.Create(QuestId.Andariel, 0),
            };

            var nightmareQuests = new List <Quest>()
            {
                QuestFactory.Create(QuestId.DenOfEvil, 0),
                QuestFactory.Create(QuestId.Andariel, 0),
            };

            var hellQuests = new List <Quest>()
            {
                QuestFactory.Create(QuestId.DenOfEvil, 0),
                QuestFactory.Create(QuestId.Andariel, 0),
            };

            var quests = new Quests(new List <List <Quest> >
            {
                normalQuests,
                nightmareQuests,
                hellQuests,
            });

            var itemStrings = new Dictionary <BodyLocation, string>();
            var itemsIds    = new List <int>();

            var characterMock = new Mock <Character>();

            characterMock.SetupGet(x => x.Level).Returns(9);
            characterMock.SetupGet(x => x.IsAutosplitChar).Returns(true);
            characterMock.SetupGet(x => x.EquippedItemStrings).Returns(itemStrings);
            characterMock.SetupGet(x => x.InventoryItemIds).Returns(itemsIds);

            var game = new Game();

            game.Area       = 0;
            game.Difficulty = GameDifficulty.Normal;
            game.PlayersX   = 1;
            game.GameCount  = 0;
            game.CharCount  = 0;

            var args = new DataReadEventArgs(
                characterMock.Object,
                game,
                quests
                );

            // test autosplit by game start
            Assert.AreEqual(false, splitOnGameStart.IsReached);
            gameService.triggerDataRead(null, args);
            Assert.AreEqual(true, splitOnGameStart.IsReached);

            // test autosplit by level
            Assert.AreEqual(false, splitOnCharLevel10.IsReached);
            gameService.triggerDataRead(null, args);
            Assert.AreEqual(false, splitOnCharLevel10.IsReached);

            characterMock.SetupGet(x => x.Level).Returns(10);
            gameService.triggerDataRead(null, args);
            Assert.AreEqual(true, splitOnCharLevel10.IsReached);

            // test autosplit by area
            Assert.AreEqual(false, splitOnArea1.IsReached);
            game.Area = 1;
            gameService.triggerDataRead(null, args);
            game.Area = 0;
            Assert.AreEqual(true, splitOnArea1.IsReached);

            // test autosplit by item
            Assert.AreEqual(false, splitOnItem1.IsReached);
            Assert.AreEqual(false, splitOnGem1.IsReached);
            itemsIds.Add(1);
            gameService.triggerDataRead(null, args);
            Assert.AreEqual(true, splitOnItem1.IsReached);
            Assert.AreEqual(true, splitOnGem1.IsReached);

            // test autosplit by quest
            Assert.AreEqual(false, splitOnQuest81.IsReached);
            normalQuests.Clear();
            normalQuests.Add(QuestFactory.Create(QuestId.DenOfEvil, 1 << 0));
            normalQuests.Add(QuestFactory.Create(QuestId.Andariel, 0));
            gameService.triggerDataRead(null, args);
            Assert.AreEqual(true, splitOnQuest81.IsReached);

            // test autosplit on game clear
            Assert.AreEqual(false, splitOnGameClear.IsReached);
            normalQuests.Clear();
            normalQuests.Add(QuestFactory.Create(QuestId.DenOfEvil, 1 << 0));
            normalQuests.Add(QuestFactory.Create(QuestId.Andariel, 1 << 0));
            gameService.triggerDataRead(null, args);
            Assert.AreEqual(true, splitOnGameClear.IsReached);

            // test autosplit on game clear all difficulties
            Assert.AreEqual(false, splitOnGameClearAllDifficulties.IsReached);
            nightmareQuests.Clear();
            nightmareQuests.Add(QuestFactory.Create(QuestId.DenOfEvil, 1 << 0));
            nightmareQuests.Add(QuestFactory.Create(QuestId.Andariel, 1 << 0));
            gameService.triggerDataRead(null, args);
            Assert.AreEqual(false, splitOnGameClearAllDifficulties.IsReached);
            hellQuests.Clear();
            hellQuests.Add(QuestFactory.Create(QuestId.DenOfEvil, 1 << 0));
            hellQuests.Add(QuestFactory.Create(QuestId.Andariel, 1 << 0));
            gameService.triggerDataRead(null, args);
            Assert.AreEqual(true, splitOnGameClearAllDifficulties.IsReached);
        }