string command = "DoEmote(\"Dance\")";
uint Frame_Execute_Offset = (uint)Offsets.EndScene.FrameScript_ExecuteBuffer + (uint)wowBase; // Lua_DoString
Memory.OpenProcess(MyPid);
//uint ret = Memory.VirtualAllocEx(Memory.ProcessHandle, 0, 1024, Memory.MemoryAllocType.MEM_COMMIT | Memory.MemoryAllocType.MEM_RESERVE, Memory.MemoryProtectType.PAGE_EXECUTE_READWRITE);
uint ret = Memory.AllocateMemory(Encoding.UTF8.GetBytes(command).Length + 1);
Memory.WriteBytes(ret, Encoding.UTF8.GetBytes(command));
String[] asm = new String[]
{
"mov eax, " + ret,
"push 0",
"push eax",
"push eax",
"mov eax, " + Frame_Execute_Offset,
"call eax",
"add esp, 0xC",
"retn",
};
uint D3D9_Device;
D3D9_Device = Memory.Read<uint>((uint)Memory.BaseAddress + (uint)Offsets.EndScene.Direct3D9__Device);
D3D9_Device = Memory.Read<uint>(D3D9_Device + (uint)Offsets.EndScene.Direct3D9__Device__OffsetA);
D3D9_Device = Memory.Read<uint>(D3D9_Device);
D3D9_Device = Memory.Read<uint>(D3D9_Device + (uint)Offsets.EndScene.Direct3D9__Device__OffsetB);
Hook.Apply(D3D9_Device, (uint)Offsets.EndScene.ClntObjMgrGetActivePlayerObj, (uint)Offsets.EndScene.FrameScript_ExecuteBuffer, (uint)Offsets.EndScene.FrameScript__GetLocalizedText);
Hook.InjectAndExecute(asm);
Hook.Restore();