-
Notifications
You must be signed in to change notification settings - Fork 21
/
Plugin.cs
166 lines (149 loc) · 6.22 KB
/
Plugin.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
using Serilog;
using Serilog.Events;
using System;
using System.IO;
using System.Reflection;
using System.Windows;
using Trinity.DbProvider;
using Trinity.Framework;
using Trinity.Framework.Helpers;
using Trinity.Framework.Reference;
using Trinity.Settings;
using Trinity.UI;
using Trinity.UI.Visualizer;
using Zeta.Bot;
using Zeta.Bot.Navigation;
using Zeta.Bot.Settings;
using Zeta.Common;
using Zeta.Common.Plugins;
using Zeta.Game;
using Application = System.Windows.Application;
namespace Trinity
{
public class Plugin : IPlugin
{
private static readonly ILogger s_logger = Logger.GetLoggerInstanceForType();
private static Plugin _instance;
public static Plugin Instance => _instance ?? (_instance = new Plugin());
public static bool IsEnabled { get; private set; }
public string Name { get; } = typeof(Plugin).Assembly.GetCustomAttribute<AssemblyTitleAttribute>().Title;
public Version Version { get; } = new Version(typeof(Plugin).Assembly.GetCustomAttribute<AssemblyFileVersionAttribute>().Version);
public string Author => "xzjv, TarasBulba, rrrix, jubisman, Phelon and many more";
public string Description { get; } = typeof(Plugin).Assembly.GetCustomAttribute<AssemblyDescriptionAttribute>().Description;
public Window DisplayWindow => UILoader.GetDisplayWindow(Path.Combine(FileManager.PluginPath, "UI"));
public bool Equals(IPlugin other) => other?.Name == Name && other?.Version == Version;
public bool IsInitialized { get; private set; }
public Plugin()
{
_instance = this;
Logger.Enricher.AddOrUpdate(Name, () => new ScalarValue(Version));
UILoader.Preload();
PluginManager.OnPluginsReloaded += PluginManager_OnPluginsReloaded;
InstallRoutine();
}
/// <summary>
/// Copy db provider routine to Db\Routines\. This is required for hooks and YAR Relogger.
/// The routine does not actually doing anything except route a settings button click.
/// </summary>
private static void InstallRoutine()
{
var routineDirectory = Path.GetDirectoryName(FileManager.CombatRoutineDestinationPath);
if (routineDirectory != null && !Directory.Exists(routineDirectory))
Directory.CreateDirectory(routineDirectory);
if (File.Exists(FileManager.CombatRoutineSourcePath))
File.Copy(FileManager.CombatRoutineSourcePath, FileManager.CombatRoutineDestinationPath, true);
}
/// <summary>
/// Makes sure trinity plugin is enabled.
/// </summary>
private void PluginManager_OnPluginsReloaded(object sender, EventArgs e)
{
foreach (var plugin in PluginManager.Plugins)
{
if (plugin.Plugin == this && !plugin.Enabled)
{
plugin.Enabled = true;
}
}
}
public void OnInitialize()
{
if (IsInitialized) return;
IsInitialized = true;
}
private void OnStart(IBot bot)
{
HookManager.CheckHooks();
}
public void OnPulse()
{
if (ZetaDia.CurrentQuest == null || ZetaDia.CurrentQuest.QuestSnoId == SNOQuest.Invalid)
{
s_logger.Verbose("Waiting while Quest is invalid (-1)");
BotMain.PauseFor(TimeSpan.FromSeconds(1));
}
HookManager.CheckHooks();
GameUI.SafeClickUIButtons();
VisualizerViewModel.Instance.UpdateVisualizer();
}
public void OnEnabled()
{
using (ZetaDia.Memory.AcquireFrame())
{
if (IsEnabled || !Application.Current.CheckAccess())
return;
Core.Init();
BotMain.OnStart += OnStart;
BotMain.OnStop += OnStop;
TrinitySettings.InitializeSettings();
SkillUtils.UpdateActiveSkills();
HookManager.CheckHooks();
TabUi.InstallTab();
SetupDemonBuddy();
UILoader.PreLoadWindowContent();
ModuleManager.Enable();
s_logger.Information($@"{Name} v{Version} is now ENABLED.
{Description}");
IsEnabled = true;
}
}
/// <summary>
/// Install empty providers to Demonbuddy otherwise it will try to use its
/// in-built default ones and interfere with Trinity operations.
/// </summary>
private static void SetupDemonBuddy()
{
Navigator.PlayerMover = Core.PlayerMover;
Navigator.StuckHandler = Core.StuckHandler;
ItemManager.Current = new BlankItemManager();
CombatTargeting.Instance.Provider = new TrinityCombatProvider();
LootTargeting.Instance.Provider = new BlankLootProvider();
ObstacleTargeting.Instance.Provider = new BlankObstacleProvider();
GlobalSettings.Instance.LogoutInactivityTime = 0;
}
public void OnDisabled()
{
IsEnabled = false;
BotMain.OnStart -= OnStart;
BotMain.OnStop -= OnStop;
TabUi.RemoveTab();
HookManager.CheckHooks();
Navigator.PlayerMover = new DefaultPlayerMover();
Navigator.StuckHandler = new DefaultStuckHandler();
CombatTargeting.Instance.Provider = new DefaultCombatTargetingProvider();
LootTargeting.Instance.Provider = new DefaultLootTargetingProvider();
ObstacleTargeting.Instance.Provider = new DefaultObstacleTargetingProvider();
ItemManager.Current = new BlankItemManager();
Zeta.Bot.RoutineManager.Current = null;
ModuleManager.Disable();
s_logger.Information($@"{Name} v{Version} is now DISABLED.");
}
private static void OnStop(IBot bot)
{
BotMain.SetCurrentStatusTextProvider(null);
}
public void OnShutdown()
{
}
}
}