Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Enigma.D3.MapHack/D3/Bootloader/App.cs | 7 +-
- Enigma.D3.MapHack/D3/MapHack/CharacterInfo.cs | 282 +++++++++++++++++++++
- Enigma.D3.MapHack/D3/MapHack/ControlHelper.cs | 24 +-
- .../D3/MapHack/Markers/CharacterMarker.cs | 132 ++++++++++
- .../D3/MapHack/Markers/MapMarkerOptions.cs | 5 +-
- Enigma.D3.MapHack/D3/MapHack/Shell.xaml | 3 +-
- Enigma.D3.MapHack/D3/MapHack/character.xaml | 39 +++
- Enigma.D3.MapHack/D3/MapHack/character.xaml.cs | 26 ++
- Enigma.D3.MapHack/Enigma.D3.MapHack.csproj | 11 +
- 9 files changed, 522 insertions(+), 7 deletions(-)
- diff --git a/Enigma.D3.MapHack/D3/Bootloader/App.cs b/Enigma.D3.MapHack/D3/Bootloader/App.cs
- index 64cfc5a..cf4fba7 100644
- --- a/Enigma.D3.MapHack/D3/Bootloader/App.cs
- +++ b/Enigma.D3.MapHack/D3/Bootloader/App.cs
- @@ -25,12 +25,12 @@ namespace Enigma.D3.Bootloader
- {
- if (!e.Args.Any(x => x.ToLowerInvariant() == "--no-eula-prompt"))
- {
- - if (MessageBox.Show("The use of this software breaks Blizzard EULA and may result in your account getting banned. This software may also cause the game client to crash.\r\n\r\n" +
- + /*if (MessageBox.Show("The use of this software breaks Blizzard EULA and may result in your account getting banned. This software may also cause the game client to crash.\r\n\r\n" +
- "Continue at your own risk.", "Warning", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation) != MessageBoxResult.OK)
- {
- Shutdown();
- return;
- - }
- + }*/
- }
- MapMarkerOptions.Instance.Load();
- @@ -50,6 +50,7 @@ namespace Enigma.D3.Bootloader
- Shell.Instance.IsAttached = true;
- Minimap minimap = null;
- + CharacterInfo characterinfo = null;
- OverlayWindow overlay = null;
- Execute.OnUIThread(() =>
- {
- @@ -57,8 +58,10 @@ namespace Enigma.D3.Bootloader
- overlay = OverlayWindow.Create((ctx.Memory.Reader as ProcessMemoryReader).Process, canvas);
- overlay.Show();
- minimap = new Minimap(canvas);
- + characterinfo = new CharacterInfo(canvas);
- });
- watcher.AddTask(minimap.Update);
- + watcher.AddTask(characterinfo.Update);
- watcher.Start();
- (ctx.Memory.Reader as ProcessMemoryReader).Process.WaitForExit();
- Execute.OnUIThread(() => overlay.Close());
- diff --git a/Enigma.D3.MapHack/D3/MapHack/CharacterInfo.cs b/Enigma.D3.MapHack/D3/MapHack/CharacterInfo.cs
- new file mode 100644
- index 0000000..ef0e9aa
- --- /dev/null
- +++ b/Enigma.D3.MapHack/D3/MapHack/CharacterInfo.cs
- @@ -0,0 +1,282 @@
- +using System;
- +using System.Collections.Generic;
- +using System.Linq;
- +using System.Text;
- +using System.Windows.Controls;
- +using System.Windows.Media;
- +using System.Diagnostics;
- +using System.Collections.ObjectModel;
- +using Enigma.Wpf;
- +using System.Windows.Data;
- +using System.Windows.Markup;
- +using System.Windows;
- +using System.Windows.Media.Media3D;
- +using Enigma.D3.MapHack.Markers;
- +using Enigma.D3.MemoryModel;
- +using Enigma.D3.MemoryModel.Core;
- +using Enigma.D3.MemoryModel.Caching;
- +using Enigma.D3.MemoryModel.Assets;
- +using Enigma.D3.Enums;
- +using Enigma.D3.AttributeModel;
- +namespace Enigma.D3.MapHack
- +{
- + internal class CharacterInfo : NotifyingObject
- + {
- + private readonly ObservableCollection<CharacterMarker> _characterInfo;
- + private readonly CharacterControl _characterControl;
- + private readonly Canvas _window;
- + private readonly Canvas _root;
- + private int _previousFrame;
- + private ACD _playerAcd;
- + private ContainerCache<ACD> _acdsObserver;
- + private ObjectManager _objectManager;
- + private bool _isLocalActorReady;
- +
- + public static CharacterInfo Instance;
- +
- + public ObservableCollection<CharacterMarker> CharacterMarkers => _characterInfo;
- +
- + public MapMarkerOptions Options { get; } = MapMarkerOptions.Instance;
- +
- + public CharacterInfo(Canvas overlay)
- + {
- + if (overlay == null)
- + throw new ArgumentNullException(nameof(overlay));
- +
- + _characterInfo = new ObservableCollection<CharacterMarker>();
- +
- + _root = new Canvas() { Height = (int)(PresentationSource.FromVisual(overlay).CompositionTarget.TransformToDevice.M22 * 1200 + 0.5) };
- + _window = overlay;
- + _window.Children.Add(_root);
- + _window.SizeChanged += (s, e) => UpdateSizeAndPosition();
- +
- + _root.Children.Add(_characterControl = new CharacterControl { DataContext = this });
- + UpdateSizeAndPosition();
- + Instance = this;
- + CreateMarkers();
- + }
- + private void UpdateSizeAndPosition()
- + {
- + var uiScale = _window.ActualHeight / 1200d;
- + _root.Width = _window.ActualWidth / uiScale;
- + _root.RenderTransform = new ScaleTransform(uiScale, uiScale, 0, 0);
- + }
- + private void CreateMarkers()
- + {
- + //add default marker like health and mana here
- + //health
- + _characterInfo.Add(new CharacterMarker("",
- + 40,
- + Brushes.White,
- + 325,//left
- + 1057, //top
- + "health"
- + ));
- + _characterInfo.Add(new CharacterMarker("",
- + 20,
- + Brushes.White,
- + 840,//left
- + 70, //top
- + "monster%"
- + ));
- + _characterInfo.Add(new CharacterMarker("",
- + 40,
- + Brushes.Red,
- + 1275,//left
- + 1057, //top
- + "mana"
- + ));
- + }
- +
- +
- +
- + #region "helpers"
- + private ACD GetLocalPlayerACD(MemoryContext ctx)
- + {
- + return _acdsObserver.Items[(short)ctx.DataSegment.ObjectManager.PlayerDataManager[ctx.DataSegment.ObjectManager.Player.LocalPlayerIndex].ACDID];
- + }
- +
- + private bool IsObjectManagerOnNewFrame(MemoryContext ctx)
- + {
- + _objectManager = _objectManager ?? ctx.DataSegment.ObjectManager;
- +
- + // Don't do anything unless game updated frame.
- + int currentFrame = _objectManager.RenderTick;
- + if (currentFrame == _previousFrame)
- + return false;
- +
- + if (currentFrame < _previousFrame)
- + {
- + // Lesser frame than before = left game probably.
- + Reset();
- + return false;
- + }
- + _previousFrame = currentFrame;
- + return true;
- + }
- +
- + private bool IsLocalActorValid(MemoryContext ctx)
- + {
- + var valid = ctx.DataSegment.ObjectManager.PlayerDataManager[ctx.DataSegment.ObjectManager.Player.LocalPlayerIndex].ActorID != -1;
- + if (valid)
- + {
- + if (!_isLocalActorReady)
- + {
- + _isLocalActorReady = true;
- + }
- + return true;
- + }
- + else
- + {
- + if (_isLocalActorReady)
- + {
- + _isLocalActorReady = false;
- + }
- + return false;
- + }
- + }
- + #endregion
- + public void Update(MemoryContext ctx)
- + {
- + if (ctx == null)
- + throw new ArgumentNullException(nameof(ctx));
- + ctx.Memory.Reader.ResetCounters();
- + try
- + {
- + if (!IsLocalActorValid(ctx))
- + return;
- +
- + if (!IsObjectManagerOnNewFrame(ctx))
- + return;
- +
- + _acdsObserver = _acdsObserver ?? new ContainerCache<ACD>(ctx.DataSegment.ObjectManager.ACDManager.ActorCommonData);
- + _acdsObserver.Update();
- +
- + // Must have a local ACD to base coords on.
- + if (_playerAcd == null || _playerAcd.ActorType != ActorType.Player)
- + _playerAcd = GetLocalPlayerACD(ctx);
- +
- + var ui = _objectManager.UIManager;
- + var uimap = ui.PtrControlsMap.Dereference();
- +
- +
- +
- + /************Character info ********************/
- + /************Character info ********************/
- + /************Character info ********************/
- + if (Options.ShowManaPool)
- + {
- +
- + var acd = ctx.DataSegment.ObjectManager.ACDManager.ActorCommonData.First(x => x.ActorType == ActorType.Player);
- + int mana = 0;
- + var attributes = AttributeReader.Instance.GetAttributes(acd.FastAttribGroupID);
- + //find a better to search in the dictionnary of attributes
- +
- +
- + foreach (KeyValuePair<AttributeKey, double> attr in attributes)
- + {
- + if (attr.Key.Id == AttributeId.ResourceCur) mana = (int)System.Math.Floor(attr.Value);
- +
- + }
- +
- + //if (_characterInfo.Count() > 0) Execute.OnUIThread(() => _characterInfo.Clear());
- +
- + //mouse over health %
- + var mouseover_acd_id = MemoryContext.Current.DataSegment.ObjectManager.UIManager.TargetACDID;
- + if (mouseover_acd_id != -1)
- + {
- + //var acdm = MemoryContext.Current.DataSegment.ObjectManager.ACDManager.ActorCommonData[(short)mouseover_acd_id];
- + var acdm = MemoryContext.Current.DataSegment.ObjectManager.ACDManager.ActorCommonData[(short)mouseover_acd_id];
- + double monsterlife = acdm.Hitpoints;
- + double fulllife = 0;
- + double percent;
- + //find a better to search in the dictionnary of attributes
- + foreach (KeyValuePair<AttributeKey, double> attr in attributes)
- + {
- + if (attr.Key.Id == AttributeId.HitpointsMaxTotal)
- + fulllife = attr.Value;
- + else if (attr.Key.Id == AttributeId.HitpointsCur)
- + monsterlife = attr.Value;
- +
- + }
- + if (monsterlife > 0)
- + {
- + percent = (monsterlife / fulllife) * 100;
- + string strpercent = percent.ToString();
- + if (strpercent.Contains(".")) strpercent = strpercent.Substring(0, strpercent.IndexOf(".") + 3);
- +
- + CharacterMarker monstermarker = _characterInfo.FirstOrDefault(a => a.strMarkerName.Equals("monster%"));
- + Execute.OnUIThread(() =>
- + {
- + monstermarker.tblock.Text = strpercent.ToString() + "%";
- + monstermarker.SetVisibility(true);
- + });
- + }
- + }
- + else
- + {
- + CharacterMarker monstermarker = _characterInfo.FirstOrDefault(a => a.strMarkerName.Equals("monster%"));
- + Execute.OnUIThread(() =>
- + {
- + monstermarker.SetVisibility(false);
- + monstermarker.tblock.Text = "";
- + });
- + }
- +
- +
- + CharacterMarker mrkhealth = _characterInfo.FirstOrDefault(a => a.strMarkerName.Equals("mana"));
- + CharacterMarker mrkmana = _characterInfo.FirstOrDefault(a => a.strMarkerName.Equals("health"));
- + Execute.OnUIThread(() =>
- + {
- +
- +
- + mrkhealth.tblock.Text = mana.ToString();
- +
- +
- + mrkmana.tblock.Text = ((int)System.Math.Floor(acd.Hitpoints)).ToString();
- +
- +
- + });
- + }
- + else
- + {
- + _characterControl.Visibility = System.Windows.Visibility.Hidden;
- + }
- +
- +
- +
- +
- +
- + UpdateUI();
- + }
- + catch (Exception exception)
- + {
- + OnUpdateException(exception);
- + }
- +
- + //_sw.Stop();
- + }
- + private void UpdateUI()
- + {
- + if (_playerAcd != null)
- + {
- + Execute.OnUIThread(() =>
- + {
- + foreach (var info in _characterInfo)
- + info.Update(_playerAcd.SWorldID, new Point3D(_playerAcd.Position.X, _playerAcd.Position.Y, _playerAcd.Position.Z));
- + });
- + }
- + }
- + private void OnUpdateException(Exception exception)
- + {
- + Trace.WriteLine(exception.Message);
- + Reset();
- + }
- + private void Reset()
- + {
- + _acdsObserver = null;
- + _playerAcd = null;
- + _isLocalActorReady = false;
- + }
- + }
- +}
- diff --git a/Enigma.D3.MapHack/D3/MapHack/ControlHelper.cs b/Enigma.D3.MapHack/D3/MapHack/ControlHelper.cs
- index 9b0d709..7a32ff7 100644
- --- a/Enigma.D3.MapHack/D3/MapHack/ControlHelper.cs
- +++ b/Enigma.D3.MapHack/D3/MapHack/ControlHelper.cs
- @@ -134,11 +134,12 @@ namespace Enigma.D3.MapHack
- public static Ellipse CreateCircle(double diameter, Brush fill, Brush stroke = null, double strokeThickness = double.NaN)
- {
- diameter -= strokeThickness / 2;
- -
- +
- var control = new Ellipse();
- control.BeginInit();
- -
- - control.Width = diameter;
- + if (diameter < 0)
- + diameter = .5;
- + control.Width = diameter;
- control.Height = diameter;
- control.Stroke = stroke;
- control.StrokeThickness = strokeThickness;
- @@ -156,6 +157,23 @@ namespace Enigma.D3.MapHack
- return control;
- }
- + public static TextBlock CreateTextBlock(string text,int fontsize,Brush color)
- + {
- + var control = new TextBlock();
- + control.BeginInit();
- + //control.TextAlignment = TextAlignment.Center;
- + control.TextWrapping = TextWrapping.Wrap;
- + //control.Width = 200;
- + //control.Height = 200;
- + control.FontWeight = FontWeights.Bold;
- + control.Text = text;
- + control.FontSize = fontsize;
- + control.Foreground = color;
- + control.Opacity = 0.8;
- + control.EndInit();
- + return control;
- + }
- +
- public static Ellipse CreateEllipse(double width, double height, Brush fill, Brush stroke = null, double strokeThickness = double.NaN)
- {
- var control = new Ellipse();
- diff --git a/Enigma.D3.MapHack/D3/MapHack/Markers/CharacterMarker.cs b/Enigma.D3.MapHack/D3/MapHack/Markers/CharacterMarker.cs
- new file mode 100644
- index 0000000..797dee4
- --- /dev/null
- +++ b/Enigma.D3.MapHack/D3/MapHack/Markers/CharacterMarker.cs
- @@ -0,0 +1,132 @@
- +using Enigma.D3.AttributeModel;
- +using Enigma.D3.Enums;
- +using Enigma.D3.MemoryModel.Core;
- +using Enigma.Memory;
- +using System;
- +using System.Collections.Generic;
- +using System.Linq;
- +using System.Text;
- +using System.Threading.Tasks;
- +using System.Windows;
- +using System.Windows.Controls;
- +using System.Windows.Media;
- +using System.Windows.Media.Imaging;
- +using System.Windows.Media.Media3D;
- +
- +namespace Enigma.D3.MapHack.Markers
- +{
- + public class CharacterMarker : MapMarkerBase
- + {
- + private bool _isVisibleInCharacter;
- + private string _text;
- + private Brush _brush;
- + private int _left, _top, _fontsize;
- + public TextBlock tblock;
- + public string strMarkerName;
- +
- +
- + public CharacterMarker(string text, int fontsize, Brush brush, int left, int top, string info)
- + : base(1)
- + {
- +
- + _text = text;
- + _brush = brush;
- + _left = left;
- + _top = top;
- + _fontsize = fontsize;
- +
- + _isVisibleInCharacter = true;
- + IsVisible = false;
- + strMarkerName = info;
- + }
- +
- + public bool IsVisibleInCharacter
- + {
- + get
- + {
- + return _isVisibleInCharacter;
- + }
- + set
- + {
- + if (_isVisibleInCharacter != value)
- + {
- + _isVisibleInCharacter = value;
- + Refresh(nameof(IsVisibleInCharacter));
- + }
- + }
- + }
- +
- + public void SetVisibility(bool visibility)
- + {
- + if (visibility)
- + tblock.Visibility = Visibility.Visible;
- + else
- + tblock.Visibility = Visibility.Hidden;
- + }
- +
- + public override object CreateControl()
- + {
- + //var panel = new StackPanel();
- + tblock = ControlHelper.CreateTextBlock(_text, _fontsize, _brush);
- +
- + //tblock.Visibility = Visibility.Visible;
- + //panel.Children.Add(tblock);
- +
- + X = _left;
- + Y = _top;
- + return tblock;
- +
- + }
- +
- + public override void Update(int worldId, Point3D origo)
- + {
- +
- + if (MapMarkerOptions.Instance.ShowManaPool == false)
- + {
- + IsVisible = false;
- + IsVisibleInCharacter = false;
- +
- + return;
- + }
- + tblock.Visibility = Visibility.Visible;
- +
- + //TextBlock tblock = (TextBlock)this.Control;
- +
- +
- +
- + //tblock.Text = _text;
- + //_isVisibleInCharacter = true;
- +
- + //elli.Visibility = 0;
- + X = _left;// 270;
- + Y = _top;// 628;
- + IsVisible = true;
- +
- + }
- +
- + class CharacterVisual : UIElement
- + {
- + private readonly Assets.Scene.NavCell[] _cells;
- + private readonly double _width;
- + private readonly double _height;
- +
- + public CharacterVisual(double width, double height, Assets.Scene.NavCell[] cells)
- + {
- + _width = width;
- + _height = height;
- + _cells = cells;
- + }
- +
- + protected override void OnRender(DrawingContext drawingContext)
- + {
- + base.OnRender(drawingContext);
- +
- + var dc = drawingContext;
- +
- + }
- +
- +
- +
- + }
- + }
- +}
- diff --git a/Enigma.D3.MapHack/D3/MapHack/Markers/MapMarkerOptions.cs b/Enigma.D3.MapHack/D3/MapHack/Markers/MapMarkerOptions.cs
- index efa9317..598043c 100644
- --- a/Enigma.D3.MapHack/D3/MapHack/Markers/MapMarkerOptions.cs
- +++ b/Enigma.D3.MapHack/D3/MapHack/Markers/MapMarkerOptions.cs
- @@ -32,6 +32,7 @@ namespace Enigma.D3.MapHack.Markers
- private bool _showDeathBreaths = true;
- private bool _showPoolsOfReflection = true;
- private bool _showAncientRank = true;
- + private bool _showManaPool = true;
- private bool _isInitialized = true;
- public event PropertyChangedEventHandler PropertyChanged = delegate { };
- @@ -62,7 +63,9 @@ namespace Enigma.D3.MapHack.Markers
- public bool ShowPoolsOfReflection { get { return _showPoolsOfReflection; } set { if (_showPoolsOfReflection != value) { _showPoolsOfReflection = value; Refresh(nameof(ShowPoolsOfReflection)); } } }
- [DataMember]
- public bool ShowAncientRank { get { return _showAncientRank; } set { if (_showAncientRank != value) { _showAncientRank = value; Refresh(nameof(ShowAncientRank)); } } }
- -
- + [DataMember]
- + public bool ShowManaPool { get { return _showManaPool; } set { if (_showManaPool != value) { _showManaPool = value; Refresh(nameof(ShowManaPool)); } } }
- +
- private void Refresh(string propertyName)
- {
- if (_isInitialized == false) // This variable is false if instance was created through serializer.
- diff --git a/Enigma.D3.MapHack/D3/MapHack/Shell.xaml b/Enigma.D3.MapHack/D3/MapHack/Shell.xaml
- index 2101ead..c125724 100644
- --- a/Enigma.D3.MapHack/D3/MapHack/Shell.xaml
- +++ b/Enigma.D3.MapHack/D3/MapHack/Shell.xaml
- @@ -1,7 +1,7 @@
- <Window x:Class="Enigma.D3.MapHack.Shell"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- - Title="Enigma.D3.MapHack" Width="300" SizeToContent="WidthAndHeight" SnapsToDevicePixels="True" WindowStartupLocation="CenterScreen" ResizeMode="CanMinimize" Icon="/Enigma.D3.MapHack;component/enigma_icon.ico">
- + Title="Enigma.D3.MapHack" Width="300" SizeToContent="WidthAndHeight" SnapsToDevicePixels="True" WindowStartupLocation="CenterScreen" ResizeMode="CanMinimize" Icon="/Enigma.D3.MapHack;component/enigma_icon.ico" Height="475">
- <TabControl>
- <TabItem Header="App">
- <StackPanel Background="WhiteSmoke" Width="300">
- @@ -51,6 +51,7 @@
- </DockPanel>
- <Separator />
- <CheckBox Content="Show Ancient Rank" IsChecked="{Binding Options.ShowAncientRank}" Margin="10,5" />
- + <CheckBox Content="Show Mana Pool" IsChecked="{Binding Options.ShowManaPool}" Margin="10,5" />
- </StackPanel>
- </TabItem>
- <TabItem Header="Log">
- diff --git a/Enigma.D3.MapHack/D3/MapHack/character.xaml b/Enigma.D3.MapHack/D3/MapHack/character.xaml
- new file mode 100644
- index 0000000..1dd4c97
- --- /dev/null
- +++ b/Enigma.D3.MapHack/D3/MapHack/character.xaml
- @@ -0,0 +1,39 @@
- +<UserControl x:Class="Enigma.D3.MapHack.CharacterControl"
- + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- + xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- + xmlns:local="clr-namespace:Enigma.D3.MapHack"
- + mc:Ignorable="d"
- + d:DesignHeight="1080" d:DesignWidth="1920" Width="1920" Height="1080" Canvas.Right="0">
- + <UserControl.Resources>
- + <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
- + </UserControl.Resources>
- + <Grid Visibility="Visible">
- + <ItemsControl ItemsSource="{Binding CharacterMarkers}">
- + <ItemsControl.ItemsPanel>
- + <ItemsPanelTemplate>
- + <Canvas />
- + </ItemsPanelTemplate>
- + </ItemsControl.ItemsPanel>
- + <ItemsControl.ItemContainerStyle>
- + <Style TargetType="{x:Type ContentPresenter}">
- + <Setter Property="Canvas.Left" Value="{Binding X}" />
- + <Setter Property="Canvas.Top" Value="{Binding Y}" />
- + <Setter Property="Canvas.ZIndex" Value="{Binding ZIndex, Mode=OneTime}" />
- + <Setter Property="Visibility" Value="{Binding IsVisibleInCharacter, Converter={StaticResource BooleanToVisibilityConverter}}" />
- + <!--<Setter Property="CacheMode">
- + <Setter.Value>
- + <BitmapCache RenderOptions.BitmapScalingMode="HighQuality" />
- + </Setter.Value>
- + </Setter>-->
- + </Style>
- + </ItemsControl.ItemContainerStyle>
- + <ItemsControl.ItemTemplate>
- + <DataTemplate>
- + <ContentPresenter Content="{Binding Control}" />
- + </DataTemplate>
- + </ItemsControl.ItemTemplate>
- + </ItemsControl>
- + </Grid>
- +</UserControl>
- diff --git a/Enigma.D3.MapHack/D3/MapHack/character.xaml.cs b/Enigma.D3.MapHack/D3/MapHack/character.xaml.cs
- new file mode 100644
- index 0000000..969c880
- --- /dev/null
- +++ b/Enigma.D3.MapHack/D3/MapHack/character.xaml.cs
- @@ -0,0 +1,26 @@
- +using System;
- +using System.Collections.Generic;
- +using System.Linq;
- +using System.Text;
- +using System.Threading.Tasks;
- +using System.Windows;
- +using System.Windows.Controls;
- +using System.Windows.Data;
- +using System.Windows.Documents;
- +using System.Windows.Input;
- +using System.Windows.Media;
- +using System.Windows.Media.Imaging;
- +using System.Windows.Navigation;
- +using System.Windows.Shapes;
- +
- +namespace Enigma.D3.MapHack
- +{
- + public partial class CharacterControl : UserControl
- + {
- + public CharacterControl()
- + {
- + InitializeComponent();
- + }
- +
- + }
- +}
- diff --git a/Enigma.D3.MapHack/Enigma.D3.MapHack.csproj b/Enigma.D3.MapHack/Enigma.D3.MapHack.csproj
- index c50f051..58ccbf9 100644
- --- a/Enigma.D3.MapHack/Enigma.D3.MapHack.csproj
- +++ b/Enigma.D3.MapHack/Enigma.D3.MapHack.csproj
- @@ -63,7 +63,9 @@
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Data" />
- + <Reference Include="System.Drawing" />
- <Reference Include="System.Runtime.Serialization" />
- + <Reference Include="System.Windows.Forms" />
- <Reference Include="System.Xml" />
- <Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Core" />
- @@ -78,6 +80,11 @@
- </ItemGroup>
- <ItemGroup>
- <Compile Include="D3\Bootloader\App.cs" />
- + <Compile Include="D3\MapHack\character.xaml.cs">
- + <DependentUpon>character.xaml</DependentUpon>
- + </Compile>
- + <Compile Include="D3\MapHack\CharacterInfo.cs" />
- + <Compile Include="D3\MapHack\Markers\CharacterMarker.cs" />
- <Compile Include="D3\MapHack\Stash.xaml.cs">
- <DependentUpon>Stash.xaml</DependentUpon>
- </Compile>
- @@ -137,6 +144,10 @@
- <AppDesigner Include="Properties\" />
- </ItemGroup>
- <ItemGroup>
- + <Page Include="D3\MapHack\character.xaml">
- + <Generator>MSBuild:Compile</Generator>
- + <SubType>Designer</SubType>
- + </Page>
- <Page Include="D3\MapHack\Stash.xaml">
- <Generator>MSBuild:Compile</Generator>
- <SubType>Designer</SubType>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement