public SavedMacroState(PlayerMacroState macroState) { if (macroState == null) throw new ArgumentNullException("macroState"); CharacterName = macroState.Client.Name; if (macroState.Client.HasHotkey) { HotkeyModifiers = macroState.Client.Hotkey.Modifiers; HotkeyKey = macroState.Client.Hotkey.Key; } UseLyliacVineyard = macroState.UseLyliacVineyard; FlowerAlternateCharacters = macroState.FlowerAlternateCharacters; foreach (var skillName in macroState.Client.Skillbook.ActiveSkills) skills.Add(new SavedSkillState(skillName)); foreach (var spell in macroState.QueuedSpells) spells.Add(new SavedSpellState(spell)); foreach (var flower in macroState.FlowerTargets) flowers.Add(new SavedFlowerState(flower)); }
public PlayerMacroState GetMacroState(Player player) { if (isLockedDown) throw new InvalidOperationException("Macro virtual machine is currently locked down."); if (clientMacros.ContainsKey(player.Process.ProcessId)) return clientMacros[player.Process.ProcessId]; var state = new PlayerMacroState(player); clientMacros[player.Process.ProcessId] = state; return state; }
void clientListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { var listBox = sender as ListBox; if (listBox == null) { if (selectedMacro != null) selectedMacro.PropertyChanged -= SelectedMacro_PropertyChanged; this.Title = "SleepHunter"; selectedMacro = null; ToggleSpellQueue(false); ToggleSkills(false); ToggleSpells(false); ToggleFlower(); return; } var player = listBox.SelectedItem as Player; if (player == null) { if (selectedMacro != null) selectedMacro.PropertyChanged -= SelectedMacro_PropertyChanged; this.Title = "SleepHunter"; selectedMacro = null; ToggleSpellQueue(false); ToggleSkills(false); ToggleSpells(false); ToggleFlower(); return; } var macroState = MacroManager.Instance.GetMacroState(player); if (player.IsLoggedIn) this.Title = string.Format("SleepHunter - {0}", player.Name); else this.Title = "SleepHunter"; if (macroState == null) { if (selectedMacro != null) selectedMacro.PropertyChanged -= SelectedMacro_PropertyChanged; selectedMacro = null; startMacroButton.IsEnabled = pauseMacroButton.IsEnabled = stopMacroButton.IsEnabled = false; return; } if (selectedMacro != null) { selectedMacro.PropertyChanged -= SelectedMacro_PropertyChanged; selectedMacro.SpellAdded -= selectedMacro_SpellQueueChanged; selectedMacro.SpellUpdated -= selectedMacro_SpellQueueChanged; selectedMacro.SpellRemoved -= selectedMacro_SpellQueueChanged; selectedMacro.FlowerTargetAdded -= selectedMacro_FlowerQueueChanged; selectedMacro.FlowerTargetUpdated -= selectedMacro_FlowerQueueChanged; selectedMacro.FlowerTargetRemoved -= selectedMacro_FlowerQueueChanged; } selectedMacro = macroState; if (selectedMacro != null) { selectedMacro.PropertyChanged += SelectedMacro_PropertyChanged; selectedMacro.SpellAdded += selectedMacro_SpellQueueChanged; selectedMacro.SpellUpdated += selectedMacro_SpellQueueChanged; selectedMacro.SpellRemoved += selectedMacro_SpellQueueChanged; selectedMacro.FlowerTargetAdded += selectedMacro_FlowerQueueChanged; selectedMacro.FlowerTargetUpdated += selectedMacro_FlowerQueueChanged; selectedMacro.FlowerTargetRemoved += selectedMacro_FlowerQueueChanged; } tabControl.SelectedIndex = selectedMacro.Client.SelectedTabIndex; ToggleSkills(player.IsLoggedIn); ToggleSpells(player.IsLoggedIn); ToggleFlower(player.HasLyliacPlant, player.HasLyliacVineyard); UpdateUIForMacroStatus(selectedMacro.Status); if (selectedMacro != null) { ToggleSpellQueue(tabControl.SelectedIndex == SpellsTabIndex && selectedMacro.TotalSpellsCount > 0); spellQueueListBox.ItemsSource = selectedMacro.QueuedSpells; flowerListBox.ItemsSource = selectedMacro.FlowerTargets; flowerVineyardCheckBox.IsChecked = selectedMacro.UseLyliacVineyard && player.HasLyliacVineyard; flowerAlternateCharactersCheckBox.IsChecked = selectedMacro.FlowerAlternateCharacters && player.HasLyliacPlant; foreach (var spell in selectedMacro.QueuedSpells) spell.IsUndefined = !SpellMetadataManager.Instance.ContainsSpell(spell.Name); } }
void SaveMacroState(PlayerMacroState macro) { if (macro == null) throw new ArgumentNullException("macro"); var filename = Path.Combine("saves", string.Format("{0}.xml", macro.Client.Name.Trim())); var state = new SavedMacroState(macro); state.SaveToFile(filename); }