public Inviter() { name2CID = new Dictionary <string, long> { }; Config = Interface.GetPluginConfig() as Configuration ?? new Configuration(); Config.Initialize(Interface); var easierProcessInvitePtr = SigScanner.ScanText("E8 ?? ?? ?? ?? EB 3E 44 0F B7 83 ?? ?? ?? ??"); var easierProcessEurekaInvitePtr = SigScanner.ScanText("E8 ?? ?? ?? ?? E9 ?? ?? ?? ?? 48 8B 83 ?? ?? ?? ?? 48 85 C0 74 62"); var easierProcessCIDPtr = SigScanner.ScanText("40 53 48 83 EC 20 48 8B DA 48 8D 0D ?? ?? ?? ?? 8B 52 08"); getUIModulePtr = SigScanner.ScanText("E8 ?? ?? ?? ?? 48 83 7F ?? 00 48 8B F0"); uiModulePtr = SigScanner.GetStaticAddressFromSig("48 8B 0D ?? ?? ?? ?? 48 8D 54 24 ?? 48 83 C1 10 E8 ?? ?? ?? ??"); InitUi(); groupManagerAddress = SigScanner.GetStaticAddressFromSig("48 8D 0D ?? ?? ?? ?? 44 8B E7"); PluginLog.Log("===== I N V I T E R ====="); PluginLog.Log("Process Invite address {Address}", easierProcessInvitePtr); PluginLog.Log("Process CID address {Address}", easierProcessCIDPtr); PluginLog.Log("uiModule address {Address}", uiModule); PluginLog.Log("uiInvite address {Address}", uiInvite); PluginLog.Log("groupManager address {Address}", groupManagerAddress); //Log($"EurekaInvite:{easierProcessEurekaInvitePtr}"); //Interface.Framework.Gui.Chat.OnChatMessageRaw += Chat_OnChatMessageRaw; _EasierProcessInvite = Marshal.GetDelegateForFunctionPointer <EasierProcessInviteDelegate>(easierProcessInvitePtr); _EasierProcessEurekaInvite = Marshal.GetDelegateForFunctionPointer <EasierProcessEurekaInviteDelegate>(easierProcessEurekaInvitePtr); /* * easierProcessEurekaInviteHook = new Hook<EasierProcessEurekaInviteDelegate>(easierProcessEurekaInvitePtr, * new EasierProcessEurekaInviteDelegate(EasierProcessEurekaInviteDetour), * this); */ easierProcessCIDHook = new Hook <EasierProcessCIDDelegate>(easierProcessCIDPtr, new EasierProcessCIDDelegate(EasierProcessCIDDetour)); easierProcessCIDHook.Enable(); //easierProcessEurekaInviteHook.Enable(); CmdManager.AddHandler("/xinvite", new CommandInfo(CommandHandler) { HelpMessage = "/xinvite - open the inviter panel.\n" + "/xinvite <on/off> - turn the auto invite on/off.\n" + "/xinvite <minutes> - enable temporary auto invite for certain amount of time in minutes.\n" + "/xinvite <minutes> <attempts> - enable temporary auto invite for certain amount of time in minutes and finish it after certain amount of invite attempts.\n" }); Gui = new PluginUi(this); ChatGui.ChatMessage += Chat_OnChatMessage; // Interface.Framework.Network.OnNetworkMessage += Chat_OnNetworkMessage; ClientState.TerritoryChanged += TerritoryChanged; timedRecruitment = new TimedEnable(this); }