Exemplo n.º 1
0
        private void DoAutoSplits(DataReadEventArgs e)
        {
            // TODO: fix bug... when splits are add during the run, the last split seems to trigger again on save
            // setup autosplits:
            // - start game
            // - area (cold plains)
            // start game, go to cold plains (2 splits should have happened)
            // add another autosplit:
            // - area (stony fields)
            // should not trigger another split automatically, but does
            var settings = settingsService.CurrentSettings;

            if (!settings.DoAutosplit || !e.Character.IsAutosplitChar)
            {
                return;
            }

            int i = 0;

            foreach (var split in settings.Autosplits)
            {
                if (!IsCompleteableAutoSplit(split, e))
                {
                    continue;
                }

                split.IsReached = true;
                keyService.TriggerHotkey(settings.AutosplitHotkey);
                Logger.Info($"AutoSplit reached: {AutoSplitString(i++, split)}");
            }
        }
        //При поступлении новых данных
        private void _dataReader_IptDataRead(object sender, DataReadEventArgs e)
        {
            var writeThread = new Thread(WriteData);

            writeThread.Start(e);
            //Обновляем значения выбранных переменных СКУД
        }
Exemplo n.º 3
0
        public Result ReadData(ref Stream dataStream)
        {
            int fulfilledCritera = -1;
            int size, pos, c;

            char[] buffer, data;

            size   = 1;
            pos    = 0;
            buffer = new char[size];

            while ((c = dataStream.ReadByte()) != -1)
            {
                m_BytesRead++;
                if ((m_BytesRead % m_UpdateInterval) == 0 && pos > 0)
                {
                    DataReadEventArgs args = new DataReadEventArgs();
                    args.AmountRead = m_BytesRead;
                    OnDataRead(this, args);
                }

                if (pos >= (size - 1))
                {
                    size = size * 2;
                    char[] tmpBuffer = new char[size];
                    buffer.CopyTo(tmpBuffer, 0);
                    buffer = null;
                    buffer = tmpBuffer;
                }
                buffer[pos] = (char)c;

                if (pos > 0)
                {
                    int i = 0;
                    foreach (IEndCriteriaStrategy criteria in Criterias)
                    {
                        if (criteria.IsEndReached(buffer, pos))
                        {
                            fulfilledCritera = i;
                            break;
                        }
                        i++;
                    }
                }

                if (fulfilledCritera > -1)
                {
                    break;
                }
                pos++;
            }

            data = new char[pos + 1];
            Array.Copy(buffer, data, pos + 1);
            buffer = null;
            return(new Result()
            {
                Data = data, FulfilledCritera = fulfilledCritera
            });
        }
Exemplo n.º 4
0
 public static void WriteWaveData(object sender, DataReadEventArgs ea)
 {
     if (m_Writer != null)
     {
         m_Writer.Write(ea.Data, 0, (int)ea.DataSize);
     }
 }
Exemplo n.º 5
0
        private void Game_DataRead(object sender, DataReadEventArgs e)
        {
            if (!Config.Enabled)
            {
                return;
            }

            if (SendingData)
            {
                return;
            }

            var newData = RequestBody.FromDataReadEventArgs(e, di);
            var diff    = RequestBody.GetDiff(newData, PrevData);

            if (diff != null)
            {
                diff.Headers = Config.Headers;
                var json = JsonConvert.SerializeObject(
                    diff,
                    Formatting.Indented,
                    new JsonSerializerSettings {
                    NullValueHandling = NullValueHandling.Ignore
                }
                    );
                PostJson(json);
            }

            PrevData = newData;
        }
Exemplo n.º 6
0
        private void DoAutoSplits(DataReadEventArgs e)
        {
            // TODO: fix bug... when splits are add during the run, the last split seems to trigger again on save
            // setup autosplits:
            // - start game
            // - area (cold plains)
            // start game, go to cold plains (2 splits should have happened)
            // add another autosplit:
            // - area (stony fields)
            // should not trigger another split automatically, but does

            var maySplit = e.Character.IsNewChar || Config.EnabledForExistingChars;

            if (!maySplit)
            {
                return;
            }

            int i = 0;

            foreach (var split in Config.Splits)
            {
                if (!IsCompleteableAutoSplit(split, e))
                {
                    continue;
                }

                split.IsReached = true;
                keyService.TriggerHotkey(Config.Hotkey.ToKeys());
                Logger.Info($"AutoSplit reached: {AutoSplitString(i++, split)}");
            }
            ApplyChanges();
        }
Exemplo n.º 7
0
 protected void OnDataRead(object sender, DataReadEventArgs args)
 {
     if (DataRead != null)
     {
         DataRead(sender, args);
     }
 }
Exemplo n.º 8
0
 protected virtual void OnDataRead(object sender, DataReadEventArgs e)
 {
     if (DataRead != null)
     {
         DataRead(sender, e);
     }
 }
        //Обновление интерфейса
        private void UpdateUi(DataReadEventArgs e)
        {
            foreach (var signal in _selectedScud)
            {
                var val = e.Buffer.Buff[signal.Value.Index];
                _values[signal.Key] = val;
            }
            _values[Program.I1] = _current.Tok1New;
            _values[Program.I2] = _current.Tok2New;
            _values[Program.R1] = _current.Reactivity1;
            _values[Program.R2] = _current.Reactivity2;

            //Обновление списка ИПТ
            if (Program.ProgramSettings.IptListVisible)
            {
                iptListBox.InvokeEx(
                    () =>
                {
                    iptListBox.BeginUpdate();
                    iptListBox.DataSource = e.Ipt4.ToString().Split('\r');
                    iptListBox.EndUpdate();
                });
            }
            //Обновляем таблицу 30 мс
            scudPropertyGrid.InvokeEx(() =>
            {
                scudPropertyGrid.Refresh();
            });
        }
Exemplo n.º 10
0
 private void Game_DataRead(object sender, DataReadEventArgs e)
 {
     if (!Config.Enabled)
     {
         return;
     }
     _ = SendDataReadAsync(e);
 }
Exemplo n.º 11
0
        void UpdateAutoSplits(ApplicationSettings settings, DataReadEventArgs eventArgs)
        {
            // Update autosplits only if the character was a freshly started character.
            if (!eventArgs.IsAutosplitCharacter)
            {
                return;
            }


            var difficulty = eventArgs.CurrentDifficulty;
            IList <QuestCollection> gameQuests = eventArgs.Quests;
            var currentQuests = gameQuests[(int)difficulty];

            foreach (var autoSplit in settings.Autosplits)
            {
                if (autoSplit.IsReached)
                {
                    continue;
                }

                if (autoSplit.Type != AutoSplit.SplitType.Special)
                {
                    continue;
                }

                if (autoSplit.Value == (int)AutoSplit.Special.GameStart)
                {
                    CompleteAutoSplit(autoSplit);
                }

                if (autoSplit.Value == (int)AutoSplit.Special.Clear100Percent &&
                    currentQuests.IsFullyCompleted &&
                    autoSplit.MatchesDifficulty(difficulty))
                {
                    CompleteAutoSplit(autoSplit);
                }

                if (autoSplit.Value == (int)AutoSplit.Special.Clear100PercentAllDifficulties &&
                    gameQuests.All(quests => quests.IsFullyCompleted))
                {
                    CompleteAutoSplit(autoSplit);
                }
            }

            // if no unreached splits, return
            if (!HaveUnreachedSplits(settings.Autosplits, difficulty))
            {
                return;
            }

            foreach (var autoSplit in settings.Autosplits)
            {
                if (IsCompleteableAutosplit(autoSplit, currentQuests, eventArgs, difficulty))
                {
                    CompleteAutoSplit(autoSplit);
                }
            }
        }
Exemplo n.º 12
0
        private void Game_DataRead(object sender, DataReadEventArgs e)
        {
            if (!Config.Enabled)
            {
                return;
            }

            DoAutoSplits(e);
        }
Exemplo n.º 13
0
        private void Game_DataRead(object sender, DataReadEventArgs e)
        {
            if (!Config.Enabled)
            {
                return;
            }

            if (SendingData)
            {
                return;
            }

            var newData = new RequestBody()
            {
                Area                 = e.Game.Area,
                InventoryTab         = e.Game.InventoryTab,
                Difficulty           = e.Game.Difficulty,
                PlayersX             = e.Game.PlayersX,
                Seed                 = e.Game.Seed,
                GameCount            = e.Game.GameCount,
                CharCount            = e.Game.CharCount,
                Name                 = e.Character.Name,
                CharClass            = e.Character.CharClass,
                IsHardcore           = e.Character.IsHardcore,
                IsExpansion          = e.Character.IsExpansion,
                IsDead               = e.Character.IsDead,
                Deaths               = e.Character.Deaths,
                Level                = e.Character.Level,
                Experience           = e.Character.Experience,
                Strength             = e.Character.Strength,
                Dexterity            = e.Character.Dexterity,
                Vitality             = e.Character.Vitality,
                Energy               = e.Character.Energy,
                FireResist           = e.Character.FireResist,
                ColdResist           = e.Character.ColdResist,
                LightningResist      = e.Character.LightningResist,
                PoisonResist         = e.Character.PoisonResist,
                Gold                 = e.Character.Gold,
                GoldStash            = e.Character.GoldStash,
                FasterCastRate       = e.Character.FasterCastRate,
                FasterHitRecovery    = e.Character.FasterHitRecovery,
                FasterRunWalk        = e.Character.FasterRunWalk,
                IncreasedAttackSpeed = e.Character.IncreasedAttackSpeed,
                MagicFind            = e.Character.MagicFind,
                Items                = e.Character.Items,
                Quests               = e.Quests.CompletedQuestIds,
            };

            var diff = GetDiff(newData);

            if (diff != null)
            {
                PostJson(diff.ToJson());
            }

            PrevData = newData;
        }
        public void ShouldNotSplitIfDisabled()
        {
            var split = new AutoSplit(
                "one",
                AutoSplit.SplitType.CharLevel,
                10,
                (short)GameDifficulty.Normal
                );
            var appSettings = new ApplicationSettings();

            appSettings.DoAutosplit = false;
            appSettings.Autosplits.Add(split);
            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 quests = new Quests(new List <List <Quest> >
            {
                new List <Quest>(), // NORMAL
                new List <Quest>(), // NM
                new List <Quest>(), // HELL
            });

            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(new Dictionary <BodyLocation, string>());
            characterMock.SetupGet(x => x.InventoryItemIds).Returns(new List <int>());

            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 level
            gameService.triggerDataRead(null, args);
            Assert.AreEqual(false, split.IsReached);

            characterMock.SetupGet(x => x.Level).Returns(10);
            gameService.triggerDataRead(null, args);
            Assert.AreEqual(false, split.IsReached);
        }
Exemplo n.º 15
0
        void GameServiceOnDataRead(object sender, DataReadEventArgs e)
        {
            var settings = settingsService.CurrentSettings;

            if (settings.DoAutosplit)
            {
                UpdateAutoSplits(settings, e);
            }
        }
Exemplo n.º 16
0
        void GameServiceOnDataRead(object sender, DataReadEventArgs e)
        {
            if (InvokeRequired)
            {
                Invoke((Action)(() => GameServiceOnDataRead(sender, e)));
                return;
            }

            UpdateLabels(e.Character, e.Quests);
            UpdateClassRuneList(e.Character.CharClass);
            UpdateRuneDisplay(e.ItemIds);
        }
Exemplo n.º 17
0
        private void Game_DataRead(object sender, DataReadEventArgs e)
        {
            if (!Config.Enabled)
            {
                return;
            }

            var fileWriter = new TextFileWriter();
            var statWriter = new CharacterStatFileWriter(fileWriter, Config.FileFolder);
            var stats      = new CharacterStats(e.Character);

            statWriter.WriteFiles(stats);
        }
Exemplo n.º 18
0
        void GameServiceOnDataRead(object sender, DataReadEventArgs e)
        {
            if (InvokeRequired)
            {
                Invoke((Action)(() => GameServiceOnDataRead(sender, e)));
                return;
            }

            UpdateQuestData(e.Quests, GameDifficulty.Normal);
            UpdateQuestData(e.Quests, GameDifficulty.Nightmare);
            UpdateQuestData(e.Quests, GameDifficulty.Hell);

            UpdateItemStats(e.Character.Items);
        }
Exemplo n.º 19
0
        static void TXPowerResist_DataRead(object sender, DataReadEventArgs args)
        {
            float v             = float.Parse(args.Data[0]);
            float std           = float.Parse(Properties.Settings.Default.STDTXNaiGongLu);
            float externalValue = float.Parse(Properties.Settings.Default.ExternalTxPowerCaliValue);
            float calibValue    = externalValue + v - std;

            string txt = string.Format("calib txpower: {0}+{1}-{2}={3}", externalValue,
                                       v, std, calibValue);

            System.Diagnostics.Debug.WriteLine(txt);

            args.Data[0] = calibValue.ToString("F2");
        }
        void GameServiceOnDataRead(object sender, DataReadEventArgs e)
        {
            var settings = settingsService.CurrentSettings;

            if (!settings.CreateFiles)
            {
                return;
            }

            var fileWriter = new TextFileWriter();
            var statWriter = new CharacterStatFileWriter(fileWriter, settings.FileFolder);
            var stats      = new CharacterStats(e.Character);

            statWriter.WriteFiles(stats);
        }
Exemplo n.º 21
0
        private void Game_DataRead(object sender, DataReadEventArgs e)
        {
            if (!Config.Enabled)
            {
                return;
            }

            if (lastGuid != e.Character.Guid)
            {
                Logger.Info($"A new character was created. Auto splits enabled for {e.Character.Name}");
                ResetAutoSplits();
                keyService.TriggerHotkey(Config.ResetHotkey.ToKeys());

                lastGuid = e.Character.Guid;
            }

            DoAutoSplits(e);
        }
Exemplo n.º 22
0
        void GameServiceOnDataRead(object sender, DataReadEventArgs e)
        {
            if (InvokeRequired)
            {
                Invoke((Action)(() => GameServiceOnDataRead(sender, e)));
                return;
            }

            if (lastGuid != e.Character.Guid)
            {
                Reset();

                lastGuid = e.Character.Guid;
            }

            UpdateLabels(e.Character, e.Quests, e.Game);
            UpdateClassRuneList(e.Character.CharClass);
            UpdateRuneDisplay(e.Character.InventoryItemIds);
        }
Exemplo n.º 23
0
        private bool IsCompleteableAutoSplit(AutoSplit split, DataReadEventArgs args)
        {
            if (split.IsReached || !split.MatchesDifficulty(args.Game.Difficulty))
            {
                return(false);
            }

            switch (split.Type)
            {
            case AutoSplit.SplitType.Special:
                switch (split.Value)
                {
                case (int)AutoSplit.Special.GameStart:
                    return(true);

                case (int)AutoSplit.Special.Clear100Percent:
                    return(args.Quests.DifficultyFullyCompleted(args.Game.Difficulty));

                case (int)AutoSplit.Special.Clear100PercentAllDifficulties:
                    return(args.Quests.FullyCompleted());

                default:
                    return(false);
                }

            case AutoSplit.SplitType.Quest:
                return(args.Quests.QuestCompleted(args.Game.Difficulty, (QuestId)split.Value));

            case AutoSplit.SplitType.CharLevel:
                return(split.Value <= args.Character.Level);

            case AutoSplit.SplitType.Area:
                return(split.Value == args.Game.Area);

            case AutoSplit.SplitType.Item:
            case AutoSplit.SplitType.Gems:
                return(args.Character.InventoryItemIds.Contains(split.Value));

            default:
                return(false);
            }
        }
Exemplo n.º 24
0
        void GameServiceOnDataRead(object sender, DataReadEventArgs e)
        {
            if (InvokeRequired)
            {
                Invoke((Action)(() => GameServiceOnDataRead(sender, e)));
                return;
            }

            foreach (GameDifficulty difficulty in Enum.GetValues(typeof(GameDifficulty)))
            {
                var quests = e.Quests.ByDifficulty(difficulty);
                if (quests == null)
                {
                    continue;
                }

                UpdateQuestData(quests, difficulty);
            }

            UpdateItemStats(e.Character.EquippedItemStrings);
        }
Exemplo n.º 25
0
        async private Task SendDataReadAsync(DataReadEventArgs e)
        {
            if (SendingDataRead)
            {
                return;
            }

            var newData = RequestBody.FromDataReadEventArgs(e, di);
            var diff    = RequestBody.GetDiff(newData, PrevData);

            if (diff != null)
            {
                diff.Headers    = Config.Headers;
                SendingDataRead = true;
                await PostJson(RequestBodyToJsonString(diff));

                SendingDataRead = false;
            }

            PrevData = newData;
        }
Exemplo n.º 26
0
        private void Game_DataRead(object sender, DataReadEventArgs e)
        {
            if (!Config.Enabled)
            {
                return;
            }

            if (SendingData)
            {
                return;
            }

            var newData = new RequestBody()
            {
                Area                 = e.Game.Area,
                InventoryTab         = e.Game.InventoryTab,
                Difficulty           = e.Game.Difficulty,
                PlayersX             = e.Game.PlayersX,
                Seed                 = e.Game.Seed,
                SeedIsArg            = e.Game.SeedIsArg,
                GameCount            = e.Game.GameCount,
                CharCount            = e.Game.CharCount,
                Name                 = e.Character.Name,
                Guid                 = e.Character.Guid,
                CharClass            = e.Character.CharClass,
                IsHardcore           = e.Character.IsHardcore,
                IsExpansion          = e.Character.IsExpansion,
                IsDead               = e.Character.IsDead,
                Deaths               = e.Character.Deaths,
                Level                = e.Character.Level,
                Experience           = e.Character.Experience,
                Strength             = e.Character.Strength,
                Dexterity            = e.Character.Dexterity,
                Vitality             = e.Character.Vitality,
                Energy               = e.Character.Energy,
                Life                 = e.Character.Life,
                LifeMax              = e.Character.LifeMax,
                Mana                 = e.Character.Mana,
                ManaMax              = e.Character.ManaMax,
                FireResist           = e.Character.FireResist,
                ColdResist           = e.Character.ColdResist,
                LightningResist      = e.Character.LightningResist,
                PoisonResist         = e.Character.PoisonResist,
                Gold                 = e.Character.Gold,
                GoldStash            = e.Character.GoldStash,
                FasterCastRate       = e.Character.FasterCastRate,
                FasterHitRecovery    = e.Character.FasterHitRecovery,
                FasterRunWalk        = e.Character.FasterRunWalk,
                IncreasedAttackSpeed = e.Character.IncreasedAttackSpeed,
                MagicFind            = e.Character.MagicFind,
                Items                = e.Character.Items,
                Quests               = e.Quests.CompletedQuestIds,
                Hireling             = new HirelingDiff
                {
                    Name            = e.Game.Hireling?.Name,
                    Class           = e.Game.Hireling?.Class,
                    SkillIds        = e.Game.Hireling?.SkillIds,
                    Level           = e.Game.Hireling?.Level,
                    Experience      = e.Game.Hireling?.Experience,
                    Strength        = e.Game.Hireling?.Strength,
                    Dexterity       = e.Game.Hireling?.Dexterity,
                    FireResist      = e.Game.Hireling?.FireResist,
                    ColdResist      = e.Game.Hireling?.ColdResist,
                    LightningResist = e.Game.Hireling?.LightningResist,
                    PoisonResist    = e.Game.Hireling?.PoisonResist,
                    Items           = e.Game.Hireling?.Items
                },
                KilledMonsters    = e.KilledMonsters,
                D2ProcessInfo     = e.ProcessInfo,
                DIApplicationInfo = di.appInfo,
            };

            var diff = GetDiff(newData, PrevData);

            if (diff != null)
            {
                var json = JsonConvert.SerializeObject(
                    diff,
                    Formatting.Indented,
                    new JsonSerializerSettings {
                    NullValueHandling = NullValueHandling.Ignore
                }
                    );
                PostJson(json);
            }

            PrevData = newData;
        }
Exemplo n.º 27
0
 private static void ShutDownShuanJianLast(object sender, DataReadEventArgs args)
 {
     SwitchController.Default.CurrentSwitch = SwitchSetting.PostTxPower;
     Helper.Sleep(Properties.Settings.Default.ItemSwitchHoldTime);
 }
Exemplo n.º 28
0
 public static RequestBody FromDataReadEventArgs(DataReadEventArgs e, IDiabloInterface di)
 {
     return(new RequestBody()
     {
         Area = e.Game.Area,
         InventoryTab = e.Game.InventoryTab,
         Difficulty = e.Game.Difficulty,
         PlayersX = e.Game.PlayersX,
         Seed = e.Game.Seed,
         SeedIsArg = e.Game.SeedIsArg,
         GameCount = e.Game.GameCount,
         CharCount = e.Game.CharCount,
         Name = e.Character.Name,
         Guid = e.Character.Guid,
         CharClass = e.Character.CharClass,
         IsHardcore = e.Character.IsHardcore,
         IsExpansion = e.Character.IsExpansion,
         IsDead = e.Character.IsDead,
         Deaths = e.Character.Deaths,
         Level = e.Character.Level,
         Experience = e.Character.Experience,
         Strength = e.Character.Strength,
         Dexterity = e.Character.Dexterity,
         Vitality = e.Character.Vitality,
         Energy = e.Character.Energy,
         Life = e.Character.Life,
         LifeMax = e.Character.LifeMax,
         Mana = e.Character.Mana,
         ManaMax = e.Character.ManaMax,
         FireResist = e.Character.FireResist,
         ColdResist = e.Character.ColdResist,
         LightningResist = e.Character.LightningResist,
         PoisonResist = e.Character.PoisonResist,
         Gold = e.Character.Gold,
         GoldStash = e.Character.GoldStash,
         FasterCastRate = e.Character.FasterCastRate,
         FasterHitRecovery = e.Character.FasterHitRecovery,
         FasterRunWalk = e.Character.FasterRunWalk,
         IncreasedAttackSpeed = e.Character.IncreasedAttackSpeed,
         MagicFind = e.Character.MagicFind,
         Items = e.Character.Items,
         Quests = e.Quests.CompletedQuestIds,
         Hireling = new HirelingDiff
         {
             Name = e.Game.Hireling?.Name,
             Class = e.Game.Hireling?.Class,
             SkillIds = e.Game.Hireling?.SkillIds,
             Level = e.Game.Hireling?.Level,
             Experience = e.Game.Hireling?.Experience,
             Strength = e.Game.Hireling?.Strength,
             Dexterity = e.Game.Hireling?.Dexterity,
             FireResist = e.Game.Hireling?.FireResist,
             ColdResist = e.Game.Hireling?.ColdResist,
             LightningResist = e.Game.Hireling?.LightningResist,
             PoisonResist = e.Game.Hireling?.PoisonResist,
             Items = e.Game.Hireling?.Items
         },
         KilledMonsters = e.KilledMonsters,
         D2ProcessInfo = e.ProcessInfo,
         DIApplicationInfo = di.appInfo,
     });
 }
Exemplo n.º 29
0
 static void TXChaSun_DataRead(object sender, DataReadEventArgs args)
 {
     Helper.MinusBaseForTxChaSun(args.Data);
 }
Exemplo n.º 30
0
        static void TXPowerResist_DataRead(object sender, DataReadEventArgs args)
        {
            float v = float.Parse(args.Data[0]);
            float std = float.Parse(Properties.Settings.Default.STDTXNaiGongLu);
            float externalValue = float.Parse(Properties.Settings.Default.ExternalTxPowerCaliValue);
            float calibValue = externalValue + v - std;

            string txt = string.Format("calib txpower: {0}+{1}-{2}={3}", externalValue,
                v, std, calibValue);

            System.Diagnostics.Debug.WriteLine(txt);

            args.Data[0] = calibValue.ToString("F2");
        }
Exemplo n.º 31
0
        /// <summary>
        /// 从数据流中读数据直到发现指定的结尾
        /// </summary>
        /// <param name="dataStream">数据流</param>
        /// <param name="criterias">结尾的描述</param>
        /// <param name="fulfilledCritera">说明是哪一个结尾描述接口匹配功能的</param>
        /// <returns>所读取的数据</returns>
        protected char[] ReadData(ref Stream dataStream, IList <IEndCriteriaStrategy> criterias, out int fulfilledCritera)
        {
            fulfilledCritera = -1;
            int size, pos, c;

            char[] buffer, data;

            size   = 1;
            pos    = 0;
            buffer = new char[size];

            while ((c = dataStream.ReadByte()) != -1)
            {
                m_BytesRead++;
                if ((m_BytesRead % m_UpdateInterval) == 0 && pos > 0)
                {
                    DataReadEventArgs args = new DataReadEventArgs();
                    args.AmountRead = m_BytesRead;
                    OnDataRead(this, args);
                }

                if (pos >= (size - 1))
                {// 空间不够,重分配内存
                    size = size * 2;
                    char[] tmpBuffer = new char[size];
                    buffer.CopyTo(tmpBuffer, 0);
                    buffer = null;
                    buffer = tmpBuffer;
                }
                buffer[pos] = (char)c;

// 此处两种功能是一致,第一个容易读
#if READ
                if (pos > 0 && IsEndCriteria(buffer, pos, criterias, out fulfilledCritera))
                {
                    break;// 检测是不是结束了
                }
#else
                if (pos > 0)
                {// 检测是不是结束了
                    int i = 0;
                    foreach (IEndCriteriaStrategy criteria in criterias)
                    {
                        if (criteria.IsEndReached(buffer, pos))
                        {
                            fulfilledCritera = i;
                            break;
                        }
                        i++;
                    }
                }

                if (fulfilledCritera > -1)
                {
                    break;
                }
#endif
                pos++;
            }

            data = new char[pos + 1];
            Array.Copy(buffer, data, pos + 1);
            buffer = null;
            return(data);
        }
Exemplo n.º 32
0
 static void RXGeLiDu_DataRead(object sender, DataReadEventArgs args)
 {
     Helper.MinusBaseForRxChaSun(args.Data);
 }
Exemplo n.º 33
0
        void UpdateAutoSplits(ApplicationSettings settings, DataReadEventArgs eventArgs)
        {
            // Update autosplits only if the character was a freshly started character.
            if (!eventArgs.IsAutosplitCharacter)
            {
                return;
            }


            var difficulty = eventArgs.CurrentDifficulty;
            IList <QuestCollection> gameQuests = eventArgs.Quests;
            var currentQuests = gameQuests[(int)difficulty];

            foreach (var autoSplit in settings.Autosplits)
            {
                if (autoSplit.IsReached)
                {
                    continue;
                }

                if (autoSplit.Type != AutoSplit.SplitType.Special)
                {
                    continue;
                }

                if (autoSplit.Value == (int)AutoSplit.Special.GameStart)
                {
                    CompleteAutoSplit(autoSplit);
                }

                if (autoSplit.Value == (int)AutoSplit.Special.Clear100Percent &&
                    currentQuests.IsFullyCompleted &&
                    autoSplit.MatchesDifficulty(difficulty))
                {
                    CompleteAutoSplit(autoSplit);
                }

                if (autoSplit.Value == (int)AutoSplit.Special.Clear100PercentAllDifficulties &&
                    gameQuests.All(quests => quests.IsFullyCompleted))
                {
                    CompleteAutoSplit(autoSplit);
                }
            }

            bool haveUnreachedCharLevelSplits = false;
            bool haveUnreachedAreaSplits      = false;
            bool haveUnreachedItemSplits      = false;
            bool haveUnreachedQuestSplits     = false;
            bool haveUnreachedGemSplits       = false;

            foreach (var autoSplit in settings.Autosplits)
            {
                if (autoSplit.IsReached || !autoSplit.MatchesDifficulty(difficulty))
                {
                    continue;
                }

                switch (autoSplit.Type)
                {
                case AutoSplit.SplitType.CharLevel:
                    haveUnreachedCharLevelSplits = true;
                    break;

                case AutoSplit.SplitType.Area:
                    haveUnreachedAreaSplits = true;
                    break;

                case AutoSplit.SplitType.Item:
                    haveUnreachedItemSplits = true;
                    break;

                case AutoSplit.SplitType.Quest:
                    haveUnreachedQuestSplits = true;
                    break;

                case AutoSplit.SplitType.Gems:
                    haveUnreachedGemSplits = true;
                    break;
                }
            }

            // if no unreached splits, return
            if (!(haveUnreachedCharLevelSplits ||
                  haveUnreachedAreaSplits ||
                  haveUnreachedItemSplits ||
                  haveUnreachedQuestSplits ||
                  haveUnreachedGemSplits))
            {
                return;
            }

            var character = eventArgs.Character;

            foreach (var autoSplit in settings.Autosplits)
            {
                if (autoSplit.IsReached || !autoSplit.MatchesDifficulty(difficulty))
                {
                    continue;
                }

                switch (autoSplit.Type)
                {
                case AutoSplit.SplitType.CharLevel:
                    if (autoSplit.Value <= character.Level)
                    {
                        CompleteAutoSplit(autoSplit);
                    }

                    break;

                case AutoSplit.SplitType.Area:
                    if (autoSplit.Value == eventArgs.CurrentArea)
                    {
                        CompleteAutoSplit(autoSplit);
                    }

                    break;

                case AutoSplit.SplitType.Item:
                    if (eventArgs.ItemIds.Contains(autoSplit.Value))
                    {
                        CompleteAutoSplit(autoSplit);
                    }

                    break;

                case AutoSplit.SplitType.Quest:
                    if (currentQuests == null)
                    {
                        continue;
                    }
                    if (currentQuests.IsQuestCompleted((QuestId)autoSplit.Value))
                    {
                        CompleteAutoSplit(autoSplit);
                    }

                    break;

                case AutoSplit.SplitType.Gems:
                    if (eventArgs.ItemIds.Contains(autoSplit.Value))
                    {
                        CompleteAutoSplit(autoSplit);
                    }

                    break;
                }
            }
        }
Exemplo n.º 34
0
 void client_DataRead(object sender, DataReadEventArgs args)
 {
     this.SetValue((int)args.AmountRead);
     SetBytesLabel(args.AmountRead.ToString());
 }