~ruther/NosSmooth.Local

ref: c0c354f151614939fa28d2d770ff75efc0c1e5c9 NosSmooth.Local/src/Core/NosSmooth.LocalBinding/Hooks/IHookManager.cs -rw-r--r-- 5.4 KiB
c0c354f1 — Rutherther ci: remove --output from dotnet pack, put output directory to Directory.Build.props 2 years ago
                                                                                
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
167
168
169
170
171
172
173
174
//
//  IHookManager.cs
//
//  Copyright (c) František Boháček. All rights reserved.
//  Licensed under the MIT license. See LICENSE file in the project root for full license information.

using Remora.Results;

namespace NosSmooth.LocalBinding.Hooks;

/// <summary>
/// A manager holding all NosTale hooks with actions to execute on all of them.
/// </summary>
public interface IHookManager
{
    /// <summary>
    /// A name of packet send hook.
    /// </summary>
    public const string PacketSendName = "NetworkManager.PacketSend";

    /// <summary>
    /// A name of packet receive hook.
    /// </summary>
    public const string PacketReceiveName = "NetworkManager.PacketReceive";

    /// <summary>
    /// A name of character walk hook.
    /// </summary>
    public const string CharacterWalkName = "CharacterManager.Walk";

    /// <summary>
    /// A name of pet walk hook.
    /// </summary>
    public const string PetWalkName = "PetManager.Walk";

    /// <summary>
    /// A name of entity follow hook.
    /// </summary>
    public const string EntityFollowName = "CharacterManager.EntityFollow";

    /// <summary>
    /// A name of entity unfollow hook.
    /// </summary>
    public const string EntityUnfollowName = "CharacterManager.EntityUnfollow";

    /// <summary>
    /// A name of entity focus hook.
    /// </summary>
    public const string EntityFocusName = "UnitManager.EntityFocus";

    /// <summary>
    /// A name of periodic hook.
    /// </summary>
    public const string PeriodicName = "Periodic";

    /// <summary>
    /// Gets the packet send hook.
    /// </summary>
    public Optional<IPacketSendHook> PacketSend { get; }

    /// <summary>
    /// Gets the packet receive hook.
    /// </summary>
    public Optional<IPacketReceiveHook> PacketReceive { get; }

    /// <summary>
    /// Gets the player walk hook.
    /// </summary>
    public Optional<IPlayerWalkHook> PlayerWalk { get; }

    /// <summary>
    /// Gets the entity follow hook.
    /// </summary>
    public Optional<IEntityFollowHook> EntityFollow { get; }

    /// <summary>
    /// Gets the entity unfollow hook.
    /// </summary>
    public Optional<IEntityUnfollowHook> EntityUnfollow { get; }

    /// <summary>
    /// Gets the player walk hook.
    /// </summary>
    public Optional<IPetWalkHook> PetWalk { get; }

    /// <summary>
    /// Gets the entity focus hook.
    /// </summary>
    public Optional<IEntityFocusHook> EntityFocus { get; }

    /// <summary>
    /// Gets the periodic function hook.
    /// </summary>
    /// <remarks>
    /// May be any function that is called periodically.
    /// This is used for synchronizing using <see cref="NosThreadSynchronizer"/>.
    /// </remarks>
    public Optional<IPeriodicHook> Periodic { get; }

    /// <summary>
    /// Gets all of the hooks.
    /// </summary>
    public IReadOnlyList<INostaleHook> Hooks { get; }

    /// <summary>
    /// Initializes all hooks.
    /// </summary>
    /// <param name="bindingManager">The binding manager.</param>
    /// <param name="browserManager">The browser manager.</param>
    /// <returns>A result that may or may not have failed.</returns>
    public IResult Initialize(NosBindingManager bindingManager, NosBrowserManager browserManager);

    /// <summary>
    /// Enable hooks from the given list.
    /// </summary>
    /// <remarks>
    /// Use constants from <see cref="IHookManager"/>,
    /// such as IHookManager.PacketSendName.
    /// </remarks>
    /// <param name="names">The hooks to enable.</param>
    public void Enable(IEnumerable<string> names);

    /// <summary>
    /// Disable hooks from the given list.
    /// </summary>
    /// <remarks>
    /// Use constants from <see cref="IHookManager"/>,
    /// such as IHookManager.PacketSendName.
    /// </remarks>
    /// <param name="names">The hooks to disable.</param>
    public void Disable(IEnumerable<string> names);

    /// <summary>
    /// Disable all hooks.
    /// </summary>
    public void DisableAll();

    /// <summary>
    /// Enable all hooks.
    /// </summary>
    public void EnableAll();

    /// <summary>
    /// Checks whether hook of the given type is loaded (there were no errors in finding the function).
    /// </summary>
    /// <typeparam name="THook">The type of the hook.</typeparam>
    /// <returns>Whether the hook is loaded/present.</returns>
    public bool IsHookLoaded<THook>()
        where THook : INostaleHook;

    /// <summary>
    /// Checks whether hook of the given type is loaded (there were no errors in finding the function)
    /// and that the wrapper function is present/usable.
    /// </summary>
    /// <typeparam name="THook">The type of the hook.</typeparam>
    /// <returns>Whether the hook is loaded/present and usable.</returns>
    public bool IsHookUsable<THook>()
        where THook : INostaleHook;

    /// <summary>
    /// Checks whether hook of the given type is loaded (there were no errors in finding the function).
    /// </summary>
    /// <param name="hookType">The type of the hook.</typeparam>
    /// <returns>Whether the hook is loaded/present.</returns>
    public bool IsHookLoaded(Type hookType);

    /// <summary>
    /// Checks whether hook of the given type is loaded (there were no errors in finding the function)
    /// and that the wrapper function is present/usable.
    /// </summary>
    /// <param name="hookType">The type of the hook.</typeparam>
    /// <returns>Whether the hook is loaded/present and usable.</returns>
    public bool IsHookUsable(Type hookType);
}
Do not follow this link