public void GenerateAnInitCode_ResultsInAnStringWith6Chars_Test() { // Arrange var quest = QuestFactory.Create(); // Act var initCode = quest.GenerateInitCode(); // Assert initCode.Should().HaveLength(6); }
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); }
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)); }
/// <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; } }
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); }
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); }