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); //Обновляем значения выбранных переменных СКУД }
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 }); }
public static void WriteWaveData(object sender, DataReadEventArgs ea) { if (m_Writer != null) { m_Writer.Write(ea.Data, 0, (int)ea.DataSize); } }
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; }
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(); }
protected void OnDataRead(object sender, DataReadEventArgs args) { if (DataRead != null) { DataRead(sender, args); } }
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(); }); }
private void Game_DataRead(object sender, DataReadEventArgs e) { if (!Config.Enabled) { return; } _ = SendDataReadAsync(e); }
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); } } }
private void Game_DataRead(object sender, DataReadEventArgs e) { if (!Config.Enabled) { return; } DoAutoSplits(e); }
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); }
void GameServiceOnDataRead(object sender, DataReadEventArgs e) { var settings = settingsService.CurrentSettings; if (settings.DoAutosplit) { UpdateAutoSplits(settings, e); } }
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); }
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); }
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); }
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); }
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); }
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); }
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); } }
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); }
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; }
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; }
private static void ShutDownShuanJianLast(object sender, DataReadEventArgs args) { SwitchController.Default.CurrentSwitch = SwitchSetting.PostTxPower; Helper.Sleep(Properties.Settings.Default.ItemSwitchHoldTime); }
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, }); }
static void TXChaSun_DataRead(object sender, DataReadEventArgs args) { Helper.MinusBaseForTxChaSun(args.Data); }
/// <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); }
static void RXGeLiDu_DataRead(object sender, DataReadEventArgs args) { Helper.MinusBaseForRxChaSun(args.Data); }
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; } } }
void client_DataRead(object sender, DataReadEventArgs args) { this.SetValue((int)args.AmountRead); SetBytesLabel(args.AmountRead.ToString()); }