So I've got interact working, and it works great. However, sometimes (I'd say about one in twenty) the Blizzard UI blocks it, for some reason.

Note how it says that Bartender4 has been blocked. Its a seemingly random addon every time this message comes up (last time it said Questhelper had been blocked.)
This is how I'm calling Interact() (a bit ugly, maybe.)
Code:
publicstaticvoid Interact(WowObject obj)
{
// create a code cave for our injected code
uint codeCave = ObjectManager.WowReader.AllocateMemory();
// find the address of the interact function of our object
uint interactAddress = ObjectManager.WowReader.ReadUInt(ObjectManager.WowReader.ReadUInt(obj.BaseAddress) + (36 * 4));
// clear out any previous asm
ObjectManager.WowReader.Asm.Clear();
// write out the code
ObjectManager.WowReader.Asm.AddLine("fs mov eax, [0x2C]");
ObjectManager.WowReader.Asm.AddLine("mov eax, [eax]");
ObjectManager.WowReader.Asm.AddLine("add eax, 8");
ObjectManager.WowReader.Asm.AddLine("mov dword [eax], {0}", ObjectManager.objectManagerBase);
ObjectManager.WowReader.Asm.AddLine("mov ecx, {0}", obj.BaseAddress);
ObjectManager.WowReader.Asm.AddLine("call {0}", interactAddress); //read pointer to Interact method
ObjectManager.WowReader.Asm.AddLine("retn");
// find wows main thread
Process[] wowProcesses = Process.GetProcessesByName("Wow");
IntPtr threadHandle = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)wowProcesses[0].Threads[0].Id);
// suspend wows main thread
SuspendThread(threadHandle);
// do our funky injection
ObjectManager.WowReader.Asm.InjectAndExecute(codeCave);
// resume wows main thread
ResumeThread(threadHandle);
// clean up
ObjectManager.WowReader.FreeMemory(codeCave);
}
Just wondering if this happens / has happened to anyone else? Its not like its a bot-killer (I can just check whether the mine has disappeared and call it again if it hasnt) but I'm curious as to why it doesnt happen ALL the time, only sometimes.
Cheers.