public void TestWasteNot2()
        {
            WasteNot2      waste = new WasteNot2();
            BasicSynthesis bs    = new BasicSynthesis();

            State state = Utility.CreateDefaultState();

            state.MaxDurability = 50;
            state.Durability    = 50;
            state.Craftsmanship = 10;
            state.Control       = 10;
            state.MaxProgress   = 100;

            State activeState = waste.Activate(state, true);
            State nextState   = null;

            for (int i = (int)waste.Duration; i > 0; --i)
            {
                Assert.AreEqual <uint>((uint)i, activeState.WasteNot2Turns);
                nextState = bs.Activate(activeState, true);
                Assert.AreEqual <uint>(activeState.Durability - 5U, nextState.Durability);
                activeState = nextState;
            }

            nextState = bs.Activate(activeState, true);
            Assert.AreEqual <uint>(activeState.Durability - 10U, nextState.Durability);
        }
        public void TestInnerQuiet()
        {
            InnerQuiet     iq = new InnerQuiet();
            BasicTouch     bt = new BasicTouch();
            BasicSynthesis bs = new BasicSynthesis();

            State state = Utility.CreateDefaultState();

            state.MaxQuality = 1500;
            state.Quality    = 0;

            State afteriq = iq.Activate(state, true);

            Assert.IsTrue(afteriq.InnerQuietIsActive);
            Assert.AreEqual <uint>(0, afteriq.InnerQuietStacks);

            State afterbt = bt.Activate(afteriq, true);

            Assert.AreEqual <uint>(1, afterbt.InnerQuietStacks);
            Assert.IsTrue(Compute.Control(afterbt) > Compute.Control(afteriq));
            Assert.IsTrue(Compute.Quality(afterbt, 100) > Compute.Quality(afteriq, 100));

            State afterbs = bs.Activate(afterbt, true);

            Assert.AreEqual <uint>(1, afterbs.InnerQuietStacks);
            Assert.AreEqual <uint>(Compute.Control(afterbt), Compute.Control(afterbs));
            Assert.AreEqual <uint>(Compute.Quality(afterbt, 100), Compute.Quality(afterbs, 100));
        }
        public void TestComfortZone()
        {
            ComfortZone    comfort = new ComfortZone();
            BasicSynthesis basic   = new BasicSynthesis();

            State state = Utility.CreateDefaultState();

            state.CrafterLevel  = 20;
            state.Craftsmanship = 20;
            state.SynthLevel    = 25;
            state.Progress      = 0;
            state.MaxProgress   = 120;
            state.CP            = 100;
            state.MaxCP         = 500;
            state.MaxDurability = 120;
            state.Durability    = 120;

            State comfortable = comfort.Activate(state, true);

            Assert.IsTrue(ComfortZone.IsActive(comfortable));

            for (int i = (int)comfort.Duration; i > 0; --i)
            {
                State nextState = basic.Activate(comfortable, true);
                Assert.AreEqual <uint>(comfortable.CP + 10, nextState.CP);
                comfortable = nextState;
            }
        }
        public void TestBasicSynthesis()
        {
            BasicSynthesis action = new BasicSynthesis();

            State state = Utility.CreateDefaultState();

            State success = action.Activate(state, true);
            State failure = action.Activate(state, false);

            // Test that we can use it even with 0 CP
            TestBlocks.TestCanUseWithCP(action, state, 0);

            // Test that it doesn't use any CP
            Assert.AreEqual <uint>(state.CP, success.CP);
            Assert.AreEqual <uint>(state.CP, failure.CP);

            // Test that it uses the correct amount of durability.
            Assert.AreEqual <uint>(state.Durability - action.BaseDurability, success.Durability);
            Assert.AreEqual <uint>(state.Durability - action.BaseDurability, failure.Durability);

            // Test that failure does not increase progress, but success does.
            Assert.AreEqual <uint>(state.Progress, failure.Progress);
            Assert.AreEqual <uint>(state.Progress + Compute.Progress(state, action.BaseEfficiency), success.Progress);

            // Test that nothing changed except durability, progress, and condition.
            success.Condition  = failure.Condition = state.Condition;
            success.Durability = failure.Durability = state.Durability;
            success.Progress   = failure.Progress = state.Progress;
            bool equal = state.Equals(success);

            Assert.AreEqual <State>(state, success);
            Assert.AreEqual <State>(state, failure);
        }
        public void TestGreatStridesDuration()
        {
            GreatStrides   greatStrides = new GreatStrides();
            BasicSynthesis basicSynth   = new BasicSynthesis();

            State state = Utility.CreateDefaultState();

            state.Quality       = 142;
            state.MaxQuality    = 726;
            state.Progress      = 0;
            state.MaxProgress   = 100;
            state.Durability    = 100;
            state.MaxDurability = 100;
            state.CrafterLevel  = 16;
            state.SynthLevel    = 13;
            state.Craftsmanship = 105;
            state.Control       = 102;
            state.Condition     = Condition.Normal;
            state.CP            = 55;
            state.MaxCP         = 233;

            Assert.IsTrue(greatStrides.CanUse(state));
            state = greatStrides.Activate(state, true);
            for (uint i = greatStrides.Duration; i > 0; --i)
            {
                Assert.AreEqual <uint>(i, GreatStrides.GetTurnsRemaining(state));
                state = basicSynth.Activate(state, true);
            }
            Assert.AreEqual <uint>(0U, GreatStrides.GetTurnsRemaining(state));
        }
Example #6
0
 // Construct the CarpenterActions list.
 public CarpenterActions()
 {
     ResourceLibrary = new ResourceLibrary(Settings.ResourceLocation, ClassJobType.Carpenter);
     BasicSynthesis = new BasicSynthesis(CraftActionId.crp_BasicSynthesis,
         ResourceLibrary.ClassSkillImages["crp_BasicSynthesis"]);
     StandardSynthesis = new StandardSynthesis(CraftActionId.crp_StandardSynthesis,
         ResourceLibrary.ClassSkillImages["crp_StandardSynthesis"]);
     BasicTouch = new BasicTouch(CraftActionId.crp_BasicTouch, ResourceLibrary.ClassSkillImages["crp_BasicTouch"]);
     StandardTouch = new StandardTouch(CraftActionId.crp_StandardTouch,
         ResourceLibrary.ClassSkillImages["crp_StandardTouch"]);
     AdvancedTouch = new AdvancedTouch(CraftActionId.crp_AdvancedTouch,
         ResourceLibrary.ClassSkillImages["crp_AdvancedTouch"]);
     PreciseTouch = new PreciseTouch(CraftActionId.crp_PreciseTouch,
         ResourceLibrary.ClassSkillImages["crp_PreciseTouch"]);
     MastersMend = new MastersMend(CraftActionId.crp_MastersMend);
     MastersMendII = new MastersMendII(CraftActionId.crp_MastersMendII);
     SteadyHand = new SteadyHand(CraftActionId.crp_SteadyHand);
     InnerQuiet = new InnerQuiet(CraftActionId.crp_InnerQuiet);
     GreatStrides = new GreatStrides(CraftActionId.crp_GreatStrides);
     Observe = new Observe(CraftActionId.crp_Observe);
     CollectableSynthesis = new CollectableSynthesis(CraftActionId.crp_CollectableSynthesis);
     ByregotsBrow = new ByregotsBrow(CraftActionId.crp_ByregotsBrow);
     InnovativeTouch = new InnovativeTouch(CraftActionId.crp_InnovativeTouch);
     ByregotsMiracle = new ByregotsMiracle(CraftActionId.crp_ByregotsMiracle);
     NymeiasWheel = new NymeiasWheel(CraftActionId.crp_NymeiasWheel);
     TrainedHand = new TrainedHand(CraftActionId.crp_TrainedHand);
     Satisfaction = new Satisfaction(CraftActionId.crp_Satisfaction);
     Heart = new Heart(CraftActionId.crp_Heart);
     WhistleWhileYouWork = new WhistleWhileYouWork(CraftActionId.crp_WhistleWhileYouWork);
     PHTouch = new PHTouch(CraftActionId.crp_PreciseTouch);
 }
        public void TestIngenuity2LevelReduction()
        {
            Ingenuity2     ingenuity = new Ingenuity2();
            BasicSynthesis bs        = new BasicSynthesis();

            State state = Utility.CreateDefaultState();

            state.CrafterLevel = 20;
            state.SynthLevel   = 25;
            state.Progress     = 0;
            state.MaxProgress  = 100;

            Assert.AreEqual <int>(-5, Compute.LevelSurplus(state));
            state = ingenuity.Activate(state, true);
            Assert.AreEqual <int>(3, Compute.LevelSurplus(state));
        }
        public void TestManipulationWithTenDurabilityBusts()
        {
            Manipulation   manipulation = new Manipulation();
            BasicSynthesis basic        = new BasicSynthesis();

            State state = Utility.CreateDefaultState();

            state.Durability = 10;
            State s2 = manipulation.Activate(state, true);

            Assert.AreEqual <uint>(10, s2.Durability);
            Assert.AreEqual(SynthesisStatus.IN_PROGRESS, s2.Status);

            s2 = basic.Activate(s2, true);
            Assert.AreEqual <uint>(0, s2.Durability);
            Assert.AreEqual(SynthesisStatus.BUSTED, s2.Status);
        }
Example #9
0
        public void EnsureMastersMendAtEndOfMultiStageSynth()
        {
            // By using a 4 step max analysis depth, we can check that after 3 steps, if the
            // 4th step would end the synth, a Master's Mend can be used to regain durability.
            Analyzer analyzer = new Analyzer();

            analyzer.Actions.AddAction(new BasicSynthesis());
            analyzer.Actions.AddAction(new BasicTouch());
            analyzer.Actions.AddAction(new MastersMend());
            analyzer.Actions.AddAction(new SteadyHand());
            analyzer.Actions.AddAction(new Observe());
            analyzer.Actions.AddAction(new Manipulation());
            analyzer.Actions.AddAction(new TricksOfTheTrade());
            analyzer.Actions.AddAction(new StandardTouch());

            State initialState = new State();

            initialState.Condition     = Condition.Normal;
            initialState.Control       = 115;
            initialState.Craftsmanship = 123;
            initialState.CP            = 251;
            initialState.MaxCP         = 251;
            initialState.MaxDurability = 40;
            initialState.Durability    = 40;
            initialState.MaxProgress   = 74;
            initialState.Quality       = 0;
            initialState.MaxQuality    = 1053;
            initialState.SynthLevel    = 20;
            initialState.CrafterLevel  = 18;

            analyzer.MaxAnalysisDepth = 4;

            analyzer.Run(initialState);

            BasicSynthesis basic = new BasicSynthesis();

            initialState = basic.Activate(initialState, true);
            initialState = basic.Activate(initialState, true);
            initialState = basic.Activate(initialState, true);

            Simulator.Engine.Ability bestAction = analyzer.OptimalAction(initialState);
            Assert.AreEqual <Type>(typeof(MastersMend), bestAction.GetType());
        }
        public void TestManipulation()
        {
            Manipulation   manipulation = new Manipulation();
            BasicSynthesis basic        = new BasicSynthesis();
            SteadyHand     steadyHand   = new SteadyHand();

            State state = Utility.CreateDefaultState();

            state.Durability    = 30;
            state.MaxDurability = 60;

            // Verify that Manipulation can be activated successfully.
            State s1 = manipulation.Activate(state, true);

            Assert.AreEqual <uint>(manipulation.Duration, Manipulation.GetTurnsRemaining(s1));

            // Verify that the durability has not changed simply as a result of activating manipulation.
            Assert.AreEqual <uint>(state.Durability, s1.Durability);

            // Verify that Manipulation can't be used if it's already up.
            Assert.IsFalse(manipulation.CanUse(s1));

            // Verify that using Basic Synthesis with Manipulation up doesn't decrease the durability.
            State s2 = basic.Activate(s1, true);

            Assert.AreEqual <uint>(s1.Durability, s2.Durability);
            Assert.AreEqual <uint>(2, Manipulation.GetTurnsRemaining(s2));
            Assert.IsFalse(manipulation.CanUse(s2));

            // Verify that using Steady hand with Manipulation up causes the durability to increase by 10.
            State s3 = steadyHand.Activate(s2, true);

            Assert.AreEqual <uint>(s2.Durability + 10, s3.Durability);
            Assert.AreEqual <uint>(1, Manipulation.GetTurnsRemaining(s3));
            Assert.IsFalse(manipulation.CanUse(s3));

            // Use another Basic Synthesis so we can verify that the buff de-activates.
            State s4 = basic.Activate(s3, true);

            Assert.IsTrue(manipulation.CanUse(s4));
        }
        public void TestIngenuity2Turns()
        {
            Ingenuity2     ingenuity = new Ingenuity2();
            BasicSynthesis bs        = new BasicSynthesis();

            State state = Utility.CreateDefaultState();

            state.CrafterLevel = 20;
            state.SynthLevel   = 25;
            state.Progress     = 0;
            state.MaxProgress  = 100;

            state = ingenuity.Activate(state, true);
            for (int i = 0; i < ingenuity.Duration; ++i)
            {
                Assert.AreEqual(ingenuity.Duration - i, Ingenuity2.GetTurnsRemaining(state));
                state = bs.Activate(state, true);
            }
            Assert.AreEqual <uint>(0, Ingenuity2.GetTurnsRemaining(state));
            Assert.IsFalse(Ingenuity.IsActive(state));
        }
Example #12
0
        public void TestUrgentCompletion2()
        {
            Analyzer       analyzer = new Analyzer();
            BasicSynthesis bs       = new BasicSynthesis();
            SteadyHand     sh       = new SteadyHand();

            analyzer.Actions.AddAction(bs);
            //analyzer.Actions.AddAction(new BasicTouch());
            //analyzer.Actions.AddAction(new MastersMend());
            analyzer.Actions.AddAction(sh);
            //analyzer.Actions.AddAction(new Observe());

            State state = Utility.CreateDefaultState();

            // Make sure we don't have enough CP to run Master's Mend.
            state.CP         = Compute.CP(SynthAction <SynthActionAttribute, MastersMend> .Attributes.CP, state) - 1;
            state.Durability = 20;

            // Make sure exactly 2 Basic Synthesis' are required to finish the synth.
            state.Progress    = 0;
            state.MaxProgress = 2 * Compute.Progress(state, bs.BaseEfficiency);

            analyzer.Run(state);

            // The best sequence is Steady Hand -> Basic Synthesis -> Basic Synthesis
            Simulator.Engine.Ability bestAction = analyzer.OptimalAction(state);
            Assert.AreEqual <Type>(typeof(SteadyHand), bestAction.GetType());

            state      = sh.Activate(state, true);
            bestAction = analyzer.OptimalAction(state);
            Assert.AreEqual <Type>(typeof(BasicSynthesis), bestAction.GetType());

            state      = bs.Activate(state, true);
            bestAction = analyzer.OptimalAction(state);
            Assert.AreEqual <Type>(typeof(BasicSynthesis), bestAction.GetType());

            state = bs.Activate(state, true);
            Assert.AreEqual(SynthesisStatus.COMPLETED, state.Status);
        }