예제 #1
0
        private void Search6_Timeline()
        {
            if (!TTT.HasSeed)
            {
                FormUtil.Error("Please Calibrate Timeline");
                return;
            }

            var timeline = TTT.gettimeline();
            int min      = Math.Max((int)Frame_min.Value, timeline.Startingframe + 2);
            int max      = (int)TimeSpan.Value * 60 + min;

            timeline.Maxframe = max;
            timeline.Generate(ForMainForm: true);
            int listlength = timeline.TinyLength;

            // Prepare
            var rng = new MersenneTwister(Seed.Value);

            for (int i = 0; i < min; i++)
            {
                rng.Next();
            }
            getsetting(rng);
            Frame.standard = (int)(TargetFrame.Value - min);

            for (int i = 0; i < listlength; i++)
            {
                var tinyframe = timeline.results[i];
                if (tinyframe.unhitable)
                {
                    continue;
                }
                if (tinyframe.framemax < min)
                {
                    continue;
                }
                RNGPool.TinySynced = tinyframe.sync == true; // For stationary
                for (int j = tinyframe.framemin + 2; j <= tinyframe.framemax; j += 2, RNGPool.AddNext(rng), RNGPool.AddNext(rng))
                {
                    while (j < min)
                    {
                        j += 2;
                    }
                    RNGPool.tinystatus = tinyframe.tinystate.Clone();
                    RNGPool.tinystatus.Currentframe = j;
                    RNGResult result = RNGPool.Generate6();
                    if (!filter.CheckResult(result))
                    {
                        continue;
                    }
                    Frames.Add(new Frame(result, frame: j, time: j - min));
                    Frames.Last()._tinystate = new PRNGState(tinyframe.tinystate.Status);
                    if (Frames.Count > MAX_RESULTS_NUM)
                    {
                        return;
                    }
                }
            }
        }
예제 #2
0
        public void AddScore(int score)
        {
            var index = 0;

            while (Frames[CurrentFrameIndex].Scores[index] != null && index < Frames[CurrentFrameIndex].Scores.Length)
            {
                index++;
            }

            if (Frames[CurrentFrameIndex].Equals(Frames.Last()))
            {
                if (score > MAX_FRAME_SCORE)
                {
                    score = MAX_FRAME_SCORE;
                }
            }
            else
            {
                if (index == 0 && score > MAX_FRAME_SCORE)
                {
                    score = MAX_FRAME_SCORE;
                }
                if (index == 1 && Frames[CurrentFrameIndex].Scores[0] + score > MAX_FRAME_SCORE)
                {
                    score = MAX_FRAME_SCORE - (int)Frames[CurrentFrameIndex].Scores[0];
                }
            }
            Frames[CurrentFrameIndex].Scores[index] = score;
        }
예제 #3
0
        private void Search6_Timeline()
        {
            if (!TTT.HasSeed)
            {
                Error("Please Calibrate Timeline");
                return;
            }

            RNGPool.timeline = TTT.gettimeline();
            int min = Math.Max((int)Frame_min.Value, RNGPool.timeline.Startingframe + 2);
            int max = (int)TimeSpan.Value * 60 + min;

            RNGPool.timeline.Maxframe = max;
            RNGPool.timeline.Generate(Method == 0); // Consider Stationary delay
            int listlength = RNGPool.timeline.TinyLength;

            // Prepare
            var rng = new MersenneTwister(Seed.Value);

            for (int i = 0; i < min; i++)
            {
                rng.Next();
            }
            getsetting(rng);

            for (int i = 0; i < listlength; i++)
            {
                var tinyframe = RNGPool.timeline.results[i];
                if (tinyframe.unhitable)
                {
                    continue;
                }
                if (tinyframe.framemax < min)
                {
                    continue;
                }
                for (int j = tinyframe.framemin + 2; j <= tinyframe.framemax; j += 2, RNGPool.AddNext(rng), RNGPool.AddNext(rng))
                {
                    while (j < min)
                    {
                        j += 2;
                    }
                    RNGPool.tinystatus = (TinyStatus)tinyframe.tinystate.DeepCopy();
                    RNGPool.tinystatus.Currentframe = j;
                    RNGResult result = RNGPool.Generate6();
                    if (!filter.CheckResult(result))
                    {
                        continue;
                    }
                    Frames.Add(new Frame(result, frame: j, time: j - min));
                    Frames.Last()._tinystate = new PRNGState(tinyframe.state);
                    if (Frames.Count > 100000)
                    {
                        return;
                    }
                }
            }
        }
예제 #4
0
 public Player(int playerNumber)
 {
     Frames.Add(new Frame());
     for (var i = 1; i < NUMBER_FRAMES; i++)
     {
         var currentFrame = new Frame();
         Frames[i - 1].NextFrame = currentFrame;
         Frames.Add(currentFrame);
     }
     Frames.Last().Scores = new int?[3];
     this.playerNumber = playerNumber;
 }
예제 #5
0
        public override List <SceneAnimation> ExecuteEffect(EffectScript Script)
        {
            //Animations = new List<SceneAnimation>();
            //AnimationStack.Add(Animations);

            CurrentFrame = Frames.Last();
            CurrentFrame.UseFrame();

            if (!(Element == CreatureElement.EARTH && Opponent.NotEffectedByEarth.Evaluate()))
            {
                List <byte> Memory = Script.Script;
                for (int i = 0; i < Memory.Count; i++)
                {
                    OP_Decode[Memory[i] >> 4]((byte)(Memory[i] & 0x0F))();
                }
            }

            /*AnimationStack.Remove(Animations);
             *          List<SceneAnimation> Finished = Animations;
             *          if (AnimationStack.Count > 0) {
             *                  Animations = AnimationStack.Last();
             *          } else {
             *                  AnimationStack.Clear();
             *                  Animations = null;
             *          }*/

            Frames.Remove(CurrentFrame);
            List <SceneAnimation> Finished = Animations;

            if (Frames.Count > 0)
            {
                CurrentFrame = Frames.Last();
                CurrentFrame.UseFrame();
            }
            else
            {
                Frames.Clear();
                CurrentFrame = null;
            }

            return(Finished);
        }
예제 #6
0
        private void Search7_FishyTimeline()
        {
            SFMT sfmt        = new SFMT(Seed.Value);
            int  start_frame = (int)Frame_min.Value;
            int  targetframe = (int)TargetFrame.Value;

            // Advance
            for (int i = 0; i < start_frame; i++)
            {
                sfmt.Next();
            }
            // Prepare
            ModelStatus status = new ModelStatus(Modelnum, sfmt);

            status.raining = Raining.Checked;
            getsetting(sfmt);
            int totaltime = (int)TimeSpan.Value * 30;
            int frameinput1 = (int)Frame_min.Value;         // Input 1: Cast the rod
            int frameadvance, fishingdelay, frameinput2;    // Input 2: Pull the rod off water
            var fsetting   = getFishingSetting;
            int Timewindow = 2;

            // Start
            for (int i = 0; i <= totaltime; i++)
            {
                RNGPool.Save();

                // 2 Frames for delay calc
                // USUM v1.1 sub_39E2F0
                RNGPool.Rewind(0); RNGPool.CopyStatus(status);
                fishingdelay = (int)(RNGPool.getrand64 % 60) + fsetting.basedelay;
                if (Overview.Checked)
                {
                    RNGPool.Advance(1); // Keep timewindow at 2 to avoid calculation
                }
                else
                {
                    Timewindow = (int)(RNGPool.getrand64 % 15) + fsetting.platdelay + 14;
                }

                // Fishing Delay
                RNGPool.time_elapse7(fishingdelay);

                // Bitechance
                if (fsetting.suctioncups || (int)(RNGPool.getrand64 % 100) < 50)
                {
                    RNGPool.time_elapse7(1);
                    frameinput2 = RNGPool.index + frameinput1;
                    RNGPool.SaveStatus();

                    for (int j = 2; j <= Timewindow; j++)
                    {
                        RNGPool.LoadStatus();
                        RNGPool.time_elapse7(1);
                        frameinput2 += RNGPool.index;
                        RNGPool.SaveStatus();
                        RNGPool.DelayTime = fsetting.pkmdelay + Math.Max(0, fsetting.platdelay - j); //  Duplicates

                        var result = RNGPool.Generate7() as ResultW7;

                        if (!filter.CheckResult(result))
                        {
                            continue;
                        }
                        if (Overview.Checked)
                        {
                            result.RandNum = RNGPool.getsavepoint;
                        }
                        result.FrameDelayUsed += frameinput2 - frameinput1;
                        Frames.Add(new Frame(result, frame: frameinput2, time: (i + j + fishingdelay) * 2));
                        Frames.Last().FishingFrame = frameinput1;
                    }
                }

                RNGPool.Load();

                if (Frames.Count > 100000)
                {
                    break;
                }

                // Move to next Frame, Update RNGPool
                frameadvance = status.NextState();
                frameinput1 += frameadvance;
                for (int j = 0; j < frameadvance; j++)
                {
                    RNGPool.AddNext(sfmt);
                }
            }
        }