Pepa
WRobot user-
Posts
32 -
Joined
-
Last visited
Pepa's Achievements
-
Banned on Warmane.
Pepa replied to varendew's topic in WRobot for Wow Wrath of the Lich King - Help and support
The injector Documentation : wow_capture — Technical Documentation Hardware-breakpoint based capture tool for the .zdata RCE payload used by Warmane to detect third-party tools inside Wow.exe 3.3.5.12340. 1. Purpose wow_capture is a diagnostic instrument. Its single job is to observe what code Warmane actually executes inside the Wow.exe process, without modifying the client binary on disk and without letting Warmane notice it is being observed. It answers one yes/no question: “Does Warmane's anti-bot detection run as code inside Wow.exe via the .zdata RCE mechanism, or does it use some other channel?” The answer determines which class of countermeasure is actually needed. It consists of two small 32-bit native binaries that live next to Wow.exe: • wow_capture_launcher.exe — a launcher that starts Wow.exe in a suspended state, injects the capture DLL, then resumes it. • wow_capture.dll — the capture payload itself: installs a vectored exception handler, arms a hardware breakpoint on the .zdata section's first byte, and dumps the 4 KB section to disk every time anything executes inside it. 2. Background: the .zdata RCE mechanism Wow.exe 3.3.5.12340 contains a non-standard PE section called .zdata, intentionally created by Blizzard. It is 4 KB in size (one page), located at virtual address 0x009D1000, and in its original unpatched form has the characteristics 0xE0000040 — readable, writable, and executable (RWX). On disk the section is a block of zero bytes; it exists purely as a pre-allocated in-memory staging area that server-delivered code can be written into and executed from. On retail this mechanism was used by Blizzard's Warden anti-cheat to stage scan modules. Private servers such as Warmane re-use the same RWX page as a remote-code-execution channel for their own anti-bot detection: the server sends a shellcode blob, the client writes it into .zdata, jumps to it, the shellcode inspects the process (checking for hardware breakpoints, debug ports, loaded modules, specific memory patterns), and reports results back. If the shellcode is prevented from running — for example by stripping the execute bit via the well-known RCEPatcher — the client crashes or hangs, and the server bans on the disconnect pattern. A static header patch therefore does not solve the problem. The correct first step is to see, empirically and in full, what the server actually sends. That is what wow_capture does. 3. Architecture overview At a high level the tool works as follows: [wow_capture_launcher.exe] | | 1. CreateProcessW(Wow.exe, CREATE_SUSPENDED) v [Wow.exe, suspended, 1 thread] | | 2. VirtualAllocEx + WriteProcessMemory | (write UTF-16 path 'wow_capture.dll') | | 3. CreateRemoteThread(target=LoadLibraryW, | arg=remote path ptr) v [Wow.exe now has wow_capture.dll mapped] | | 4. DllMain runs: | - installs VEH | - arms DR3 (execute) on all threads at 0x009D1000 | - starts monitor thread (re-arms every 200 ms) | | 5. ResumeThread(main) v [Wow.exe runs normally; user logs in, plays] | | 6. Warmane writes RCE payload into .zdata and jumps to it | 7. CPU fetches instruction at 0x009D1000 | -> HWBP DR3 matches -> #DB exception | 8. VEH fires: | - dumps full .zdata to wow_rce_dump_<ts>.bin | - logs the hit | - sets EFlags.RF (Resume Flag) | 9. EXCEPTION_CONTINUE_EXECUTION v [Warmane's payload executes normally, Warmane sees expected reply, DR3 stays armed for subsequent hits] 4. Component 1: the launcher 4.1 Why suspended creation Standard DLL injection via CreateRemoteThread on an already-running process always has a race: the target's main thread starts executing WinMain the moment CreateProcessW returns, and by the time you allocate remote memory and spawn the injection thread, Wow.exe has already run thousands of instructions. For this tool that race is fatal — we need our VEH and HWBPs armed before any network traffic reaches Warmane. So the launcher passes CREATE_SUSPENDED to CreateProcessW, which hands back a process whose main thread is parked at the very first instruction of the image entrypoint. Nothing Blizzard-side has executed yet. 4.2 Injection via LoadLibraryW The injection itself is the classic three-step technique: • Allocate a small writable region inside Wow.exe using VirtualAllocEx, large enough to hold the full wide-character path to wow_capture.dll. • Copy the path into that region with WriteProcessMemory. • Create a remote thread whose entrypoint is LoadLibraryW and whose single argument is the pointer to the remote path string. Windows' thread entry ABI is DWORD WINAPI fn(LPVOID), which matches LoadLibraryW's signature exactly — so the remote thread, when it runs, behaves identically to having called LoadLibraryW(L"wow_capture.dll") from within Wow.exe. This works because kernel32.dll is mapped at the same base address in every same-bitness process on a given Windows session (it is a known DLL with shared image). GetProcAddress(GetModuleHandle(L"kernel32"), "LoadLibraryW") in the launcher therefore returns the exact address at which LoadLibraryW lives inside Wow.exe too. 4.3 Waiting and resuming WaitForSingleObject(hRemoteThread, INFINITE) blocks until LoadLibraryW returns, which in turn happens only after our DLL's DllMain has finished. GetExitCodeThread retrieves LoadLibraryW's return value — the base address of the loaded DLL, or NULL on failure. A NULL return means something went wrong (missing DLL, missing dependency, DllMain returned FALSE), and the launcher aborts by terminating the suspended process. On success it frees the remote path buffer and calls ResumeThread on the main thread — only then does Wow.exe actually start executing its entrypoint, with our VEH already installed and HWBPs already armed. 5. Component 2: the capture DLL 5.1 The vectored exception handler A vectored exception handler (VEH) is a process-wide callback installed via AddVectoredExceptionHandler. Unlike structured exception handling (SEH), which is per-frame and requires __try/__except blocks on the call stack, a VEH is global: it sees every exception raised in the process, on any thread, before any SEH handler gets a chance. That property matters here for two reasons: • The instruction that triggers our HWBP lives in .zdata, not in any __try block we control — only a process-wide handler can intercept the resulting #DB exception. • We want first right of refusal, so the firstHandler=1 flag passed to AddVectoredExceptionHandler places our VEH at the head of the chain. The handler's body is deliberately minimal. It filters on EXCEPTION_SINGLE_STEP (code 0x80000004, which is how x86 reports hardware-breakpoint hits) and on the fault address being inside the .zdata range. Anything else is passed through with EXCEPTION_CONTINUE_SEARCH, so legitimate Blizzard exception machinery — Lua error recovery, Warden's own scan handlers, crash dump generation — is entirely unaffected. 5.2 Hardware breakpoints (DR0–DR7) The x86 debug registers offer four hardware breakpoints, each capable of firing on execute, write, or read/write accesses at any 1, 2, 4, or 8-byte aligned address. Their state is held in registers DR0–DR3 (the four breakpoint addresses) and DR7 (the control register, encoding enable bits, access types, and lengths). Relevant DR7 bit layout: bit 0 : L0 local enable for DR0 bit 1 : G0 global enable for DR0 bit 2 : L1 ... bit 3 : G1 bit 4 : L2 bit 5 : G2 bit 6 : L3 local enable for DR3 bit 7 : G3 global enable for DR3 bits 16-17 : RW0 access type for DR0 (00=exec, 01=write, 11=rw) bits 18-19 : LEN0 length for DR0 (00=1B, 01=2B, 10=8B, 11=4B) bits 20-21 : RW1 bits 22-23 : LEN1 bits 24-25 : RW2 bits 26-27 : LEN2 bits 28-29 : RW3 bits 30-31 : LEN3 For our purposes we want DR3 to fire on execute at 0x009D1000, so RW3=00, LEN3=00 (length must be 1 byte in execute mode), L3=1. That gives DR7 |= 0x40 with the high nibble bits 28–31 cleared to zero. 5.3 Why DR3 and not DR0 WRobot itself uses hardware breakpoints for its memory hook infrastructure and tends to claim lower debug registers first. Using DR3 leaves DR0–DR2 free for any future coexistence with WRobot in the same wow.exe instance. For the initial capture test no WRobot is needed and no conflict is possible. 5.4 Per-thread nature and the monitor loop A critical subtlety of hardware breakpoints is that they are per-thread, not per-process: each thread has its own copy of the debug registers. Setting DR3 on thread A has no effect on thread B, and a newly created thread inherits nothing. Wow.exe is aggressively multi-threaded and creates threads throughout its lifetime (render, sound, network, job workers). To get full coverage, the DLL takes two complementary actions: • On load (while the main thread is still parked by the launcher's CREATE_SUSPENDED), it enumerates all existing threads in the current process via CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD) and arms DR3 on each of them using SuspendThread / GetThreadContext / SetThreadContext / ResumeThread. • It then starts a dedicated monitor thread that repeats the same enumeration every 200 ms. Any newly spawned thread is armed on the next tick. New threads will not trigger an HWBP during their first ≤20 0 ms of life, but since Warmane's payload typically runs on long-lived threads (not freshly created ones), this is acceptable. 5.5 Arming without clobbering other state GetThreadContext with ContextFlags = CONTEXT_DEBUG_REGISTERS reads the current DR0–DR7 values. The arming code checks whether DR3 already equals our target address — if yes, it is already armed from a previous pass and nothing is written, avoiding useless SetThreadContext calls. Otherwise it writes only DR3 and the relevant DR7 bits, preserving whatever the lower breakpoints contain. 5.6 The Resume Flag trick When a HWBP on execute fires, the exception is raised before the target instruction retires. If the VEH simply returns EXCEPTION_CONTINUE_EXECUTION without any extra handling, the CPU re-fetches the same instruction, re-matches the HWBP, and raises the same exception again — an infinite loop. The x86 architecture provides a purpose-built escape hatch: EFlags.RF (the Resume Flag, bit 16). When RF is set on return from an exception, the CPU temporarily suppresses instruction-breakpoint matching for exactly one instruction, then automatically clears RF as that instruction retires. This gives us the behaviour we actually want: the very first instruction of Warmane's shellcode runs once unhindered, the shellcode then executes through the rest of .zdata normally, and if anything later re-enters .zdata at the same address (another call, another payload overwrite) the HWBP fires again and produces a new dump. DR3 stays armed the entire time. 5.7 Dumping the payload Inside the handler, dump_zdata reads the full 4 KB of .zdata into a local buffer byte-by-byte via a volatile pointer (wrapped in __try/__except as a cheap safety net) and writes that buffer to a new file. The filename encodes a millisecond-precision timestamp and a monotonically-incrementing hit counter, so multiple fires during one session produce distinct files and can be ordered precisely. 6. Why hardware breakpoints, not hooks or software breakpoints Several alternative instrumentation techniques exist. Each was rejected in favour of HWBP for specific reasons: • Software breakpoint (`INT3`, opcode `0xCC`) — would require writing 0xCC into .zdata, which is exactly what Warmane's payload is going to overwrite a moment later. We would either clobber their write or have our breakpoint clobbered first. Either way, no capture. • Inline hook (patch a few bytes with a `JMP`) — same problem. Whatever we write into .zdata is ephemeral. • Page permission flip via `VirtualProtect` — setting .zdata to PAGE_READWRITE and catching the access violation on execute would work, but the ensuing AV is a guest state change that Warmane's payload, or its caller, could conceivably detect. HWBPs are invisible to normal code: they are debug-register state, not memory state, and no VirtualQuery or pointer-read reveals them. • API hook on `RtlExitUserThread` / `VirtualAlloc` / similar — too far removed from the actual event of interest and would miss payloads delivered without those APIs. HWBPs are the right tool precisely because they trigger on the CPU's instruction fetch stage, leave zero footprint in memory, and cost literally nothing (one comparator per breakpoint, checked in hardware). 7. Output files All output is written next to the DLL, which is the Wow.exe directory. 7.1 wow_capture_log.txt A plain-text UTF-16LE log. One line per event, formatted as: [YYYY-MM-DD HH:MM:SS.mmm tid=NNNN] message Expected lines during a healthy session: • One loaded; .zdata: Base=... Size=... Protect=... State=... line immediately after injection. If Protect reads 0x40 (PAGE_EXECUTE_READWRITE) the client is unpatched; 0x04/0x02 (PAGE_READWRITE/PAGE_READONLY) means the header patch stripped the execute bit. • Zero or more HWBP hit #N @ 0x009D1000 ... lines — one per capture, with a monotonically increasing N. 7.2 wow_rce_dump_<timestamp>_hit<N>.bin Raw binary dump of the full 4 KB .zdata section at the instant the HWBP fired. Filename format: wow_rce_dump_YYYYMMDD_HHMMSS_mmm_hitN.bin Analyse these with a disassembler of your choice. Good first commands: objdump -D -b binary -m i386 -M intel \ wow_rce_dump_<...>.bin | less # or in Ghidra/IDA: import as raw x86, base 0x009D1000 # quick visual scan for obvious API names: strings -a -n 5 wow_rce_dump_<...>.bin Typical giveaways of anti-bot logic in the dump: references to NtQueryInformationProcess, GetThreadContext, CheckRemoteDebuggerPresent, or string fragments of window titles and process names the scanner is looking for. 8. Building from source The build is plain MSVC; no external dependencies. From a developer command prompt with the 32-bit toolchain active: cd "...\wow_capture" build.bat build.bat produces wow_capture.dll and wow_capture_launcher.exe one directory up, next to Wow.exe. The _build_with_vcvars.bat wrapper sets up PATH / INCLUDE / LIB manually for the specific VS 2022 BuildTools install on this machine and then invokes build.bat; it avoids the dependency on vswhere.exe that the stock vcvars32 chain has. The toolchain assumptions are encoded at the top of the wrapper and are easy to bump if the VS or Windows SDK version changes. 9. Running the tool • Make sure WRobot is not running for the first capture. This rules out debug-register conflicts with WRobot's own hooks and establishes the baseline behaviour of the server against a stock client. • Double-click wow_capture_launcher.exe (or run it from a console to see the diagnostic lines). Wow.exe starts through the launcher with the capture DLL already mapped. • Log into Warmane and play normally. No special actions required; the capture is entirely passive. • Wait until something observable happens: either a disconnection, a ban, or simply your own decision to end the session after a defined period (say two hours). • Close Wow.exe. Inspect the Wow.exe directory for wow_capture_log.txt and any wow_rce_dump_*.bin files. 10. Interpreting the results There are three possible outcomes: 10.1 No dump files, no ban for the whole session Warmane's anti-bot detection is not running as code inside Wow.exe via .zdata at all. The detection path is something else — most likely behavioural analysis (movement entropy, action timing, playtime, GM whisper responses) or server-side packet heuristics. In this case the entire .zdata research avenue is a dead end; effort should move to humanising WRobot's in-game behaviour instead of hooking the client. 10.2 One or more dump files, eventually a ban Warmane does use the .zdata RCE and we now have the exact payload on disk. Disassemble the dumps, identify the API calls and memory reads the shellcode performs, and use that knowledge to build a targeted VEH that stubs out whatever check the payload is making — for example, returning a zeroed CONTEXT from GetThreadContext, or flipping NtQueryInformationProcess(ProcessDebugPort) replies to zero. The capture tool itself can be extended to do this in place by replacing the dump-and-continue handler with a patch-and-continue handler. 10.3 No dump files and the log line is missing Something went wrong at injection time. Check that wow_capture.dll sits next to wow_capture_launcher.exe, that both are 32-bit (launcher output reports the loaded base on success), and that no antivirus has quarantined the DLL. Running the launcher from a console window surfaces the diagnostic text. 11. Limitations and caveats • First ~200 ms per thread: new threads created by Wow.exe after load are not armed until the monitor's next tick. Highly improbable that Warmane's payload runs on a throw-away thread in its first 200 ms of existence, but theoretically possible. • HWBP is single-address: we trap on the first byte of .zdata only. If the server ever wrote payloads that started at a non-zero offset within the section, we would miss the trap on the first call. In practice payloads start at the section base because that is the address the server hands to its client-side dispatcher. • No analysis of the payload in flight: the capture is passive. It snapshots .zdata, lets the code run, and moves on. If the payload mutates itself in memory during execution, we see only the pre-execution state. This is fine for 99%% of real-world shellcodes but would miss a self-modifying staged loader. • Coexistence with WRobot: WRobot uses some DR registers itself. Running this tool *with* WRobot attached may produce partial coverage or conflicts. Recommended procedure is to first capture without WRobot, disassemble the payload, then design a coexistence strategy informed by what the payload actually does. • Antivirus noise: CreateRemoteThread + LoadLibraryW is a textbook injection pattern and some real-time scanners flag it. Whitelist the Wow.exe directory or disable scanning for these two binaries if you hit false positives. 12. File inventory • Wow.exe — the stock client, unpatched (restored from its original 0xE0000040 .zdata characteristics). • wow_capture_launcher.exe — 32-bit launcher, placed directly in the Wow.exe directory. • wow_capture.dll — 32-bit capture DLL, placed directly in the Wow.exe directory. • wow_capture/wow_launcher.c — launcher source. • wow_capture/wow_capture.c — DLL source. • wow_capture/build.bat — MSVC build script, outputs binaries one level up. • wow_capture/_build_with_vcvars.bat — environment-bootstrapping wrapper for the MSVC 2022 BuildTools install on this machine. -
Banned on Warmane.
Pepa replied to varendew's topic in WRobot for Wow Wrath of the Lich King - Help and support
Try this dll injector for what Warmane does with the wowo client, I don't play on a pvp server. USE VPN and soma thrash TESTing wow account !!! wow_launcher.c /* * wow_capture_launcher.exe - spawns Wow.exe suspended, injects * wow_capture.dll via CreateRemoteThread/LoadLibraryW, resumes. * * 32-bit. wow.exe path is hardcoded below - edit WOW_EXE_PATH if needed. */ #include <windows.h> #include <stdio.h> static void die(const wchar_t *what, DWORD err, HANDLE proc) { wprintf(L"[!] %s failed: %lu\n", what, err); if (proc) TerminateProcess(proc, 1); ExitProcess(1); } int main(void) { wchar_t self_dir[MAX_PATH]; wchar_t dll_path[MAX_PATH]; wchar_t wow_path[MAX_PATH]; wchar_t wow_dir [MAX_PATH]; /* directory of this launcher */ GetModuleFileNameW(NULL, self_dir, MAX_PATH); for (int i = (int)lstrlenW(self_dir) - 1; i >= 0; i--) { if (self_dir[i] == L'\\' || self_dir[i] == L'/') { self_dir[i + 1] = 0; break; } } lstrcpyW(dll_path, self_dir); lstrcatW(dll_path, L"wow_capture.dll"); /* verify DLL exists */ DWORD attr = GetFileAttributesW(dll_path); if (attr == INVALID_FILE_ATTRIBUTES) { wprintf(L"[!] wow_capture.dll not found next to launcher\n %s\n", dll_path); return 1; } /* Wow.exe is expected next to the launcher. */ lstrcpyW(wow_path, self_dir); lstrcatW(wow_path, L"Wow.exe"); /* Working directory = launcher's own directory, without trailing slash. */ lstrcpyW(wow_dir, self_dir); int wd_len = (int)lstrlenW(wow_dir); if (wd_len > 0 && (wow_dir[wd_len - 1] == L'\\' || wow_dir[wd_len - 1] == L'/')) wow_dir[wd_len - 1] = 0; /* Verify Wow.exe exists next to us. */ if (GetFileAttributesW(wow_path) == INVALID_FILE_ATTRIBUTES) { wprintf(L"[!] Wow.exe not found next to launcher\n %s\n", wow_path); return 1; } wprintf(L"[+] wow.exe = %s\n", wow_path); wprintf(L"[+] wow_capture = %s\n", dll_path); /* spawn suspended */ STARTUPINFOW si = { sizeof(si) }; PROCESS_INFORMATION pi = {0}; if (!CreateProcessW(wow_path, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, wow_dir, &si, &pi)) { die(L"CreateProcessW", GetLastError(), NULL); } wprintf(L"[+] wow.exe PID=%lu (suspended)\n", pi.dwProcessId); /* allocate remote buffer for DLL path */ SIZE_T path_bytes = (lstrlenW(dll_path) + 1) * sizeof(wchar_t); LPVOID remote = VirtualAllocEx(pi.hProcess, NULL, path_bytes, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); if (!remote) die(L"VirtualAllocEx", GetLastError(), pi.hProcess); SIZE_T written = 0; if (!WriteProcessMemory(pi.hProcess, remote, dll_path, path_bytes, &written)) die(L"WriteProcessMemory", GetLastError(), pi.hProcess); /* kernel32 base is identical across same-bitness processes (shared), * so LoadLibraryW's address in this process == its address in wow.exe. */ HMODULE k32 = GetModuleHandleW(L"kernel32.dll"); LPTHREAD_START_ROUTINE loadlib = (LPTHREAD_START_ROUTINE)GetProcAddress(k32, "LoadLibraryW"); if (!loadlib) die(L"GetProcAddress(LoadLibraryW)", GetLastError(), pi.hProcess); HANDLE th = CreateRemoteThread(pi.hProcess, NULL, 0, loadlib, remote, 0, NULL); if (!th) die(L"CreateRemoteThread", GetLastError(), pi.hProcess); wprintf(L"[+] waiting for LoadLibraryW in target...\n"); WaitForSingleObject(th, INFINITE); DWORD dll_base = 0; GetExitCodeThread(th, &dll_base); CloseHandle(th); if (!dll_base) { wprintf(L"[!] LoadLibraryW returned NULL - DLL not loaded\n"); TerminateProcess(pi.hProcess, 1); return 1; } wprintf(L"[+] wow_capture.dll loaded at 0x%08X\n", dll_base); VirtualFreeEx(pi.hProcess, remote, 0, MEM_RELEASE); wprintf(L"[+] resuming main thread\n"); ResumeThread(pi.hThread); CloseHandle(pi.hThread); CloseHandle(pi.hProcess); wprintf(L"[+] done. Play normally until ban.\n" L" Capture output: %s\n", self_dir); return 0; } wow_capture.c /* * wow_capture.dll - RCE payload capture for Wow.exe 3.3.5.12340 * * Injected into wow.exe at start by wow_capture_launcher.exe. * Installs a hardware breakpoint (DR3, execute) on the .zdata entry * (0x009D1000). When anything executes there - which is the RCE payload * Warmane writes into .zdata - the VEH fires, dumps the full 4 KB of * .zdata to disk with a timestamp, logs the hit, sets the Resume Flag, * and lets execution continue normally. DR3 stays armed, so subsequent * calls are also captured. * * Output files (next to the DLL): * wow_capture_log.txt - timestamped event log * wow_rce_dump_<ts>_hit<N>.bin - one 4 KB dump per HWBP hit */ #include <windows.h> #include <tlhelp32.h> #define ZDATA_VA 0x009D1000UL #define ZDATA_SIZE 0x1000UL static HMODULE g_self = NULL; static PVOID g_veh = NULL; static volatile LONG g_hit_count = 0; static CRITICAL_SECTION g_cs; /* ------------------------------------------------------------------ */ /* Paths / logging */ /* ------------------------------------------------------------------ */ static void dll_dir(wchar_t *out, DWORD cap) { GetModuleFileNameW(g_self, out, cap); for (int i = (int)lstrlenW(out) - 1; i >= 0; i--) { if (out[i] == L'\\' || out[i] == L'/') { out[i + 1] = 0; return; } } } static void log_line(const wchar_t *msg) { wchar_t path[MAX_PATH]; dll_dir(path, MAX_PATH); lstrcatW(path, L"wow_capture_log.txt"); HANDLE f = CreateFileW(path, FILE_APPEND_DATA, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (f == INVALID_HANDLE_VALUE) return; SetFilePointer(f, 0, NULL, FILE_END); SYSTEMTIME st; GetLocalTime(&st); wchar_t buf[512]; int n = wsprintfW(buf, L"[%04d-%02d-%02d %02d:%02d:%02d.%03d tid=%lu] %s\r\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, GetCurrentThreadId(), msg); DWORD written; WriteFile(f, buf, n * sizeof(wchar_t), &written, NULL); CloseHandle(f); } static void dump_zdata(LONG hit_no) { wchar_t path[MAX_PATH]; dll_dir(path, MAX_PATH); SYSTEMTIME st; GetLocalTime(&st); wchar_t name[96]; wsprintfW(name, L"wow_rce_dump_%04d%02d%02d_%02d%02d%02d_%03d_hit%ld.bin", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, hit_no); lstrcatW(path, name); HANDLE f = CreateFileW(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (f == INVALID_HANDLE_VALUE) return; /* Read via SEH-safe copy just in case a future patch makes .zdata * unreadable; on stock wow.exe .zdata is fully readable. */ BYTE tmp[ZDATA_SIZE]; __try { for (DWORD i = 0; i < ZDATA_SIZE; i++) tmp[i] = ((volatile BYTE *)ZDATA_VA)[i]; } __except (EXCEPTION_EXECUTE_HANDLER) { CloseHandle(f); return; } DWORD written; WriteFile(f, tmp, ZDATA_SIZE, &written, NULL); CloseHandle(f); } /* ------------------------------------------------------------------ */ /* Vectored exception handler */ /* ------------------------------------------------------------------ */ static LONG CALLBACK veh(EXCEPTION_POINTERS *ep) { if (ep->ExceptionRecord->ExceptionCode != EXCEPTION_SINGLE_STEP) return EXCEPTION_CONTINUE_SEARCH; DWORD addr = (DWORD)(DWORD_PTR)ep->ExceptionRecord->ExceptionAddress; if (addr < ZDATA_VA || addr >= ZDATA_VA + ZDATA_SIZE) return EXCEPTION_CONTINUE_SEARCH; EnterCriticalSection(&g_cs); LONG n = InterlockedIncrement(&g_hit_count); dump_zdata(n); wchar_t msg[256]; wsprintfW(msg, L"HWBP hit #%ld @ 0x%08X (dumped .zdata 4096B)", n, addr); log_line(msg); LeaveCriticalSection(&g_cs); /* Resume Flag: CPU skips the HWBP for exactly one instruction, * then DR3 stays armed for future hits. Shellcode executes * normally after this single-instruction grace period. Any * re-entry to .zdata later will trap again. */ ep->ContextRecord->EFlags |= 0x10000; return EXCEPTION_CONTINUE_EXECUTION; } /* ------------------------------------------------------------------ */ /* HWBP arming */ /* ------------------------------------------------------------------ */ static void arm_thread(DWORD tid) { HANDLE t = OpenThread( THREAD_GET_CONTEXT | THREAD_SET_CONTEXT | THREAD_SUSPEND_RESUME, FALSE, tid); if (!t) return; SuspendThread(t); CONTEXT ctx; ZeroMemory(&ctx, sizeof(ctx)); ctx.ContextFlags = CONTEXT_DEBUG_REGISTERS; if (GetThreadContext(t, &ctx)) { if (ctx.Dr3 != ZDATA_VA) { ctx.Dr3 = ZDATA_VA; /* DR7: * L3 (bit 6) = 1 enable DR3 local * RW3 (bits 28-29) = 00 execute * LEN3 (bits 30-31) = 00 one byte (required for exec) */ ctx.Dr7 &= ~((DWORD)0xF0000000u); /* clear RW3 + LEN3 */ ctx.Dr7 &= ~((DWORD)(1u << 7)); /* clear G3 */ ctx.Dr7 |= ((DWORD)(1u << 6)); /* set L3 */ SetThreadContext(t, &ctx); } } ResumeThread(t); CloseHandle(t); } static void arm_all_threads(void) { DWORD self_tid = GetCurrentThreadId(); DWORD self_pid = GetCurrentProcessId(); HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); if (snap == INVALID_HANDLE_VALUE) return; THREADENTRY32 te; te.dwSize = sizeof(te); if (Thread32First(snap, &te)) { do { if (te.th32OwnerProcessID == self_pid && te.th32ThreadID != self_tid) { arm_thread(te.th32ThreadID); } } while (Thread32Next(snap, &te)); } CloseHandle(snap); } static DWORD WINAPI monitor_thread(LPVOID p) { (void)p; for (;;) { arm_all_threads(); Sleep(200); } } /* ------------------------------------------------------------------ */ /* DllMain */ /* ------------------------------------------------------------------ */ BOOL WINAPI DllMain(HINSTANCE h, DWORD reason, LPVOID r) { (void)r; if (reason != DLL_PROCESS_ATTACH) return TRUE; g_self = h; DisableThreadLibraryCalls(h); InitializeCriticalSection(&g_cs); g_veh = AddVectoredExceptionHandler(1, veh); /* Diagnostic: snapshot .zdata page state at load time. */ MEMORY_BASIC_INFORMATION mbi; if (VirtualQuery((LPCVOID)ZDATA_VA, &mbi, sizeof(mbi))) { wchar_t msg[256]; wsprintfW(msg, L"loaded; .zdata: Base=0x%08X Size=0x%X Protect=0x%08X State=0x%08X", (DWORD)(DWORD_PTR)mbi.BaseAddress, (DWORD)mbi.RegionSize, (DWORD)mbi.Protect, (DWORD)mbi.State); log_line(msg); } else { log_line(L"loaded; VirtualQuery(.zdata) failed"); } /* Initial arm before launcher resumes the main thread. */ arm_all_threads(); CreateThread(NULL, 0, monitor_thread, NULL, 0, NULL); return TRUE; } -
Banned on Warmane.
Pepa replied to varendew's topic in WRobot for Wow Wrath of the Lich King - Help and support
is this what it does: ?: Blizzard reserved a 4 KB RWX memory page inside wow.exe named .zdata -
DerDD reacted to a file:
feral druid Dungeon TANK - BETA
-
MATRASUS reacted to a file:
Universal Tank Fight Class Generator
-
-
Maybe sometime in the future. Tank is currently the priority. But I can advise you how to easily modify this fight class under the GPT Codex in Visual Studio. When you enter the task to change the rotation from tanking to maximum DPS. Don't forget to backup your fight class before editing and copy any compilation errors from the wrobot log and the GPT Codex will fix it automatically in Visual Studio in the working directory where you allowed access to the GPT agent
-
Resto Shaman v10.0 - Predictive Anti-Overheal Edition [BETA]
Pepa commented on Pepa's file in Fight Classes - Wotlk
-
Resto Shaman v10.0 - Predictive Anti-Overheal Edition [BETA]
Pepa commented on Pepa's file in Fight Classes - Wotlk
Nahrál jsem novou rychlou verzi a můžete si ji zkusit vyladit v kódu pomocí Microsoft Visual Studia. Vše si můžete přizpůsobit svému hernímu stylu atd. Průvodce léčením a rotací : The Chat GPT codex can you help with modifications . Dont forget BACKUPS !!!! Riptide ( Resto shaman _Optimized_Calaude_241_AI _Threads_DEBUG.cs (řádek 3262) ) Okamžité otevření, když cíli chybí HoT, klesne pod ~75 % HP nebo se nachází v nouzovém režimu. Zajišťuje, aby Řetězové léčení a Malá léčivá vlna profitovaly z Přílivových vln. Řetězové léčení ( 3226 , 3315-3386 ) Preferované, když jsou zraněni alespoň dva spojenci. Extra priorita, pokud má primární cíl Zpětný tah, během plošných útoků nebo když je průměrné zdraví skupiny <78 %. Malá léčivá vlna ( 3379-3412 ) Rychlé lokální léčení tanků nebo cílů, které jsou již pod tlakem Riptide. Vyžaduje ~7 % efektivní potřeby (5 % u tanků), pokud nepřevládnou nouzové podmínky. Léčivá vlna ( 3414-3432 ) Větší seslání vyhrazeno pro tanky nebo kriticky slabé spojence. Potřebuje ~12 % efektivní potřeby na netankových hráčích (9 % na tankech). Nouzové stavy uvolňují prahové hodnoty. Dar Naaru ( 3434-3444 ) Aktivní, když je mana nízká (<35 %) nebo v nouzových/nízkých fázích. Poskytuje bezplatné doplňkové léčení s minimálním povoleným přeléčením. Kombinace Rychlost přírody ( 3560-3602 ) Spouští se pod silným tlakem: sešle NS + HW/LHW na tanky nebo cíle <50 % HP (nebo <35 % předpokládaných) pro okamžitou stabilizaci výbuchu. Bodování řetězového léčení ( 3315-3386 ) Vyhodnocuje až tři skoky a uděluje bonusy za každý další přispěvatel, kotvy Riptide a plošné zásahy; škáluje se s fází many pro inteligentnější spalování zdrojů. Modifikátory fáze many ( 3604-3626 ) Skóre každého kouzla se škáluje podle aktuální fáze many: konzervativní v Nouzové/Nízké, tolerantní v Pohodlné/Přetečné, což zajišťuje trvalé léčení bez přechodu do stavu OOM. Ošetření přerušení ( 4058-4112 ) Střih větru se provede pouze v případě, že již máte nepřítele zacíleného; nedochází k automatickému přepínání cílů, takže ruční výběr řídí použití přerušení. Ochranné prvky provedení ( 3610-3653 ) Před sesláním ověří platnost cíle, připravenost k Rychlosti přírody/Síle přílivu a minimální chybějící HP; zaznamenává přeskakování, aby se zabránilo zbytečným sesláním a zvýšila se efektivita sledování. -
Resto Shaman v10.0 - Predictive Anti-Overheal Edition [BETA]
Pepa commented on Pepa's file in Fight Classes - Wotlk
I plan to add totem summoning using Call of the Elements. BUT I haven't solved the API problems yet. Yeah, the movement code is still there, junk code from the tank fight class conversion. There IS code for interrupting spells. I'll check it out next week when the chat gpt limit expires (The Codex in my Visual Studio). -
torenka reacted to a file:
Warrior Tank for Dungeons (BETA)
-
Pepa reacted to a review on a file:
📘 Blood Death Knight Tank (BETA)
-
Lokomotive reacted to a comment on a file:
📘 Blood Death Knight Tank (BETA)
-
1. to deactivate the ghoul find and comment out the line : SpellManager.CastSpellByNameLUA(RAISE_DEAD); to // SpellManager.CastSpellByNameLUA(RAISE_DEAD); 3-4 this system have manual controll by WSAD keys detection detection as falback to override AI in dangers . Iam still workig on Movement AI how improve it .
-
Lokomotive reacted to a file:
📘 Blood Death Knight Tank (BETA)
-
Lokomotive reacted to a comment on a file:
📘 Blood Death Knight Tank (BETA)
-
-
Pepa started following 📘 Blood Death Knight Tank (BETA) , 🛡️ Paladin Tank – Blessings AI (BETA) , Universal Tank Fight Class Generator and 2 others
-
Version 1.0.386
111 downloads
Paladin Tank Fight Class — wRobot Documentation ⚠️ WARNING: BETA VERSION This fight class is currently in beta. It may contain bugs, unfinished features, or unstable behavior. Use at your own risk. Feedback and bug reports are welcome. Overview Paladin Tank is an advanced wRobot fight class for Protection Paladin (WotLK / 3.3.5). It features a multi-threaded architecture with a lock-free AI movement system, intelligent blessing management, and smart combat positioning — all designed to maximize threat generation and party survival. Features ⚡ Multi-Threaded Architecture The fight class runs three independent background threads: Rotation Thread — handles spell casting and out-of-combat logic Movement AI Thread — manages smart positioning and gap closing Combat Rotation AI Thread — runs the priority-based DPS/threat rotation All threads use a lock-free design with volatile reference swaps, meaning zero blocking and maximum responsiveness. ✈️ Pilot Override System Manual player movement (W, A, S, D, Q, E) takes absolute priority over AI control: All AI movement stops immediately when you press movement keys Pathfinding is halted After releasing keys, AI waits ~1 second before resuming Smooth, conflict-free transition — the player always wins 🤺 Combat Rotation The rotation follows a priority-based system optimized for Threat Per Second (TPS): Priority Spell 1 Holy Shield 2 Hammer of Wrath (execute phase) 3 Hammer of Justice (AoE / stun) 4 Avenger's Shield (pull / AoE) 5 Holy Wrath (Undead/Demons) 6 Hammer of the Righteous (AoE threat) 7 Shield of Righteousness 8 Judgement of Light / Wisdom 9 Consecration (mana permitting) 🤝 Blessing System The class features a fully automated intelligent blessing manager: Applies and refreshes Blessing of Kings, Sanctuary, Wisdom, or Might based on party member class and role Supports Greater Blessings for large groups Uses a buff cache (5-second TTL) to avoid spamming Lua calls Cooldown tracking prevents double-blessing Handles edge cases like timezone-related timer bugs 🛡️ Aura Management Automatically maintains the appropriate aura: Devotion Aura (default tank aura) Retribution, Concentration, Crusader, and Resistance Auras based on context Righteous Fury always kept active 🔒 Seal Management Dynamically selects and maintains the best Seal: Seal of Vengeance / Corruption for sustained threat Seal of Wisdom / Light for mana recovery when needed 💊 Defensive Cooldowns Automated usage of defensive abilities: Ardent Defender — at low HP Divine Protection — emergency Lay on Hands — critical HP threshold Sacred Shield — maintained on self Divine Plea — used when mana is low (configurable threshold) 🙏 Party Support The class actively monitors and supports party members: Righteous Defense — taunts enemies off party members Hand of Reckoning — single-target taunt Hand of Freedom — removes movement-impairing debuffs Hand of Protection / Sacrifice / Salvation — situational party cooldowns Cleanse — removes harmful debuffs Divine Intervention / Divine Sacrifice — emergency party saves 📍 Smart Positioning AI 5–30 yards: Uses pathfinding (MovementManager.MoveTo) for gap closing 0–5 yards: Uses direct movement (forward/turn/backward) for fine positioning Anti-oscillation system prevents jerky back-and-forth movement Configurable turn threshold, hysteresis, and stabilization delay Configuration Key settings can be adjusted in the PaladinTankConfig class at the top of the file: Setting Default Description TurnThreshold 0.35 Angular tolerance before turning (radians) TurnHysteresis 0.30 Hysteresis to prevent jitter MovementStabilizationMs 400ms Cooldown between movement decisions AIControlReturnDelayMs 1000ms Delay before AI resumes after manual input LowManaThreshold 30% Triggers mana-saving behavior EmergencyHPThreshold 20% Triggers emergency defensive cooldowns ConsecrationManaThreshold 40% Minimum mana to cast Consecration BlessingRefreshThreshold 120s Refresh blessing if less than this time remains Logging verbosity can also be toggled individually (EnableAIDebugLogs, EnableApproachLogs, EnableBlessingDebugLogs). Requirements wRobot with custom fight class support Protection Paladin (WotLK 3.3.5) Recommended talent build: standard 53/5/13 or similar Prot spec Holy Shield, Consecration, Avenger's Shield, and Hammer of the Righteous must be trained Known Limitations (Beta) Some buff timer detection may be unreliable in certain server configurations (timezone issue workaround is included) Party role detection (Tank/Healer/DPS) is heuristic-based and may not always be accurate Death Grip reference exists in the code but belongs to Death Knight — this may be a leftover from testing Divine Shield is defined but emergency auto-use conditions may need tuning per use case Fight class version: v374 (internal AI version: v212 lock-free) -
Version 1.0.0
54 downloads
Purpose This prompt generates complete WRobot fight classes for WoW - change your wow version in promts !! tank specializations with advanced movement AI. It creates production-ready code from scratch - no existing code needed. How To Use Basic Usage Step 1: Fill in the template Generate a complete WRobot fight class for [CLASS/SPEC] tank in WoW 3.3.5 (WotLK) with advanced movement AI. CLASS/SPEC INFORMATION: - Class: Protection Paladin - Primary Resource: Mana - Key Tanking Mechanics: Holy Shield, Avenger's Shield, Blessing of Sanctuary - Threat Generation: Shield of Righteousness > Hammer of Righteousness > Judgement Step 2: Submit to Claude Paste the entire prompt with your filled-in information. Step 3: Receive complete code Claude will generate 1500-2000 lines of compilable C# code. Supported Classes WotLK Tank Specs: Protection Warrior - Rage, Shield Block Protection Paladin - Mana, Holy Shield Blood Death Knight - Runes/Runic Power, Bone Shield Feral Druid (Bear) - Rage, Savage Defense (Guardian Druid for later expansions) What You Need To Provide Required Information: 1. Class/Spec Name Class: Protection Paladin 2. Primary Resource Primary Resource: Mana Options: Mana, Rage, Energy, Runes, Runic Power, Holy Power (Cata+) 3. Key Tanking Mechanics Key Tanking Mechanics: Holy Shield (damage reduction buff), Avenger's Shield (ranged pull), Blessing of Sanctuary List 2-4 core defensive abilities that define the tank playstyle. 4. Threat Generation Priority Threat Generation: Shield of Righteousness > Hammer of Righteousness > Judgement > Consecration (AoE) List abilities in order of TPS (threat per second) priority. Optional (Advanced): 5. Cooldown Priority Emergency Cooldowns: - ≤20% HP: Divine Protection, Lay on Hands - ≤40% HP: Guardian of Ancient Kings, Ardent Defender - ≤60% HP: Holy Shield refresh 6. Special Mechanics Special Mechanics: - Maintain Seal of Vengeance at all times - Judge on cooldown for mana return - Divine Plea when mana < 50% What Gets Generated Complete Package Includes: 1. Main Class (ICustomClass implementation) Thread initialization Proper disposal WRobot integration 2. Rotation Class (Core logic) Resource management Spell priority system Buff/debuff tracking Emergency handlers 3. Movement AI System (3 classes, ~800 lines) TankMovementAI: Positioning logic TurnCommandArbiter: Turn control with hysteresis WRobotCoordinator: Thread coordination 4. Helper Classes Timer: For ability cooldown tracking ThreatInfo: For threat management EnemyData: For enemy tracking 5. Systems Auto-targeting (switches to dangerous enemies) Threat management (taunts off-target) Fear detection & breaking Auto-looting Party buff management Emergency cooldown usage Understanding The Output Code Structure: Main // Entry point └── [Class]TankRotation // Core rotation logic ├── TankMovementAI // Positioning system ├── TurnCommandArbiter // Turn control ├── WRobotCoordinator // Thread coordination ├── PulseRotation() // Main 50ms loop ├── ExecuteMainRotation() // Spell casting └── Helper methods // Utilities Thread Model: Rotation Thread: 50ms pulse - handles spell casting Movement Thread: 30ms pulse - handles positioning/turning Both threads are synchronized via thread-safe coordinators. Key Features Explained 1. Manual Control Detection Detects WASD+QE keypresses A/D keys get 300ms priority over AI turning Seamless handoff between player and AI 2. Dual-Threshold Hysteresis START turning: When off-angle > 17° (0.30 rad) STOP turning: When off-angle < 7° (0.12 rad) Prevents oscillation/jittering 3. Approach With Defense Uses WRobot pathfinding to reach target During approach, AI handles enemies attacking from behind Auto-releases control when in melee range 4. Threat Management Scans party members every 250ms Prioritizes: Casting enemies > Healers > DPS Auto-taunts threats off allies 5. Emergency System HP-based thresholds: 20%, 40%, 60%, 80% Cooldown priority (major → minor) Special handling for multiple enemies Customization Points After Generation, You Can Modify: Easy Customizations: Spell Priority - Reorder in ExecuteMainRotation() HP Thresholds - Change in HandleEmergency() Timer Intervals - Adjust in constructor Buff List - Add/remove in BuffPartyMembersOutOfCombat() Advanced Customizations: Movement Distances - MIN_DISTANCE, IDEAL_DISTANCE, MAX_DISTANCE Smoothing Parameters - TurnSmoothness, MoveSmoothness Threat Weights - Modify CalculateThreatWeight() ⚠️ DO NOT MODIFY: START_TURN_THRESHOLD (0.30) STOP_TURN_THRESHOLD (0.12) Thread sleep intervals (30ms/50ms) Lock objects or synchronization Troubleshooting Common Issues: "Class doesn't cast spells" Check spell names match WoW 3.3.5 exactly (case-sensitive) Verify character knows the spells Check resource availability (mana/rage/runes) "Movement AI doesn't work" Ensure not manually controlling (release WASD) Check combat is active Verify enemies are within 40 yards "Character oscillates/jitters" Don't modify hysteresis thresholds Ensure thread sleep intervals are correct Check for conflicting WRobot products "Compilation errors" Verify all using statements present Check WRobot version compatibility Ensure class names match throughout Example Prompts Minimal Example: Generate fight class for Protection Paladin tank CLASS/SPEC INFORMATION: - Class: Protection Paladin - Primary Resource: Mana - Key Tanking Mechanics: Holy Shield, Avenger's Shield - Threat Generation: Shield of Righteousness > Hammer of Righteousness > Judgement Detailed Example: Generate fight class for Blood Death Knight tank CLASS/SPEC INFORMATION: - Class: Blood Death Knight - Primary Resource: Runes and Runic Power - Key Tanking Mechanics: Bone Shield (damage reduction), Vampiric Blood (healing), Rune Tap (self-heal), Dancing Rune Weapon (threat) - Threat Generation: Heart Strike > Death Strike > Rune Strike (RP dump) > Blood Boil (AoE) > Death and Decay (AoE sustained) Special mechanics: - Maintain Frost Fever and Blood Plague on all targets - Use Pestilence to spread diseases in AoE - Death Strike for healing when < 70% HP - Empower Rune Weapon when all runes on CD - Lichborne + Death Coil self-heal combo when < 60% HP Technical Specifications Performance: CPU Usage: ~2-3% on modern hardware Memory: ~50MB additional Latency: <10ms decision time Tick Rates: Movement: 33 ticks/sec (30ms) Rotation: 20 ticks/sec (50ms) Thread Safety: All enemy access through cacheLock Turn control through arbiterLock Coordinator requests through lockObj No race conditions or deadlocks Compatibility: WoW Version: 3.3.5a (WotLK) WRobot: 1.7.2+ .NET Framework: 4.0+ OS: Windows 7+ Best Practices For Best Results: Be Specific: Provide exact spell names as they appear in WoW Priority Order: List abilities in actual TPS priority Test Incrementally: Test basic rotation → movement → advanced features Monitor Logs: Check WRobot log for errors Backup: Keep working versions before modifications Common Mistakes: ❌ Wrong spell names ("Shield Slam" vs "Slam") ❌ Modifying hysteresis constants ❌ Removing thread synchronization ❌ Incorrect resource type (Rage vs Mana) ❌ Forgetting class-specific buffs FAQ Q: Can I use this for DPS specs? A: No, this is specifically for tank specs. Movement AI is designed for defensive positioning, not DPS rotations. Q: Does it work in raids? A: Yes, scales up to 40 players. Threat management handles raid-size parties. Q: Can I disable movement AI? A: Just hold WASD - manual control has full priority. Q: How does it compare to manual play? A: Positioning is near-optimal. Rotation depends on how well you specify spell priority. Q: Can I combine with other WRobot products? A: Yes, but avoid conflicting movement/rotation products. Q: Does it handle line of sight issues? A: Basic LoS through WRobot pathfinding. Complex terrain may require manual control. Support & Updates Getting Help: Check generated code for inline comments Review this manual for configuration Check WRobot forums for WRobot-specific issues Test with single enemy before dungeons/raids Version Information: Manual Version: 1.0 AI Version: Advanced Movement AI v2.0 Last Updated: 2025 Legal & Disclaimer This generator creates automation tools for World of Warcraft. Usage may violate Blizzard's Terms of Service. Use at your own risk. The authors are not responsible for account actions. -
Version 1.0.241
43 downloads
⚠️ BETA WARNING ⚠️ This is a BETA version of the fight class. While extensively tested, it may contain bugs or unexpected behavior. CRITICAL REQUIREMENT: You MUST have a backup healing addon installed and ready to use manually. Recommended addons: HealBot Vuhdo Grid + Clique Elvui Keep your backup healing addon active and be prepared to take over manual healing if the fight class malfunctions or in critical situations. This is automation assistance, not a replacement for player awareness. Overview Advanced Restoration Shaman fight class featuring predictive damage analysis, anti-overheal mechanics, emergency totem protection, and intelligent drinking detection. Built with multi-threaded architecture for optimal CPU performance. Version: 12.1 Game Version: WotLK 3.3.5a Bot: WRobot Class: Shaman (Restoration spec only) Key Features 🔮 Predictive Healing System Damage Pattern Analysis - Tracks incoming damage and predicts future damage patterns (AoE, Spike, Steady) Anti-Overheal Engine - Calculates actual heal need by accounting for incoming heals, HoTs, and Earth Shield Smart Spell Selection - Chooses optimal heal based on efficiency scoring and predicted damage Emergency Detection - Predicts potential deaths before they happen 💧 Intelligent Drinking System (NEW!) Automatic Detection - Detects Drink/Food buffs on player Activity Pause - Stops all totem placement, buffs, interrupts, and dispels while drinking Emergency Override - Continues critical healing (<30% HP) using only instant spells: Nature's Swiftness combo Riptide instant heal Zero Mana Waste - Ensures full mana regeneration during drinking 🗿 Emergency Totem Protection Protected Emergency Totems - Mana Tide, Earth Elemental, Grounding, Stoneclaw cannot be overwritten by normal totems Smart Placement - Only places totems after 2+ seconds stationary Automatic Recall - Recalls totems when out of range (except emergency totems) ⚡ Performance Optimization Multi-threaded Architecture - Separate threads for healing (20ms), totems (250ms), utility (2000ms) Multi-tier Cache System - L1/L2 cache reduces Lua calls by ~30% Batch Operations - Checks multiple party members in single Lua call Thread-safe Design - All operations properly locked and synchronized 🎯 Priority Healing Nature's Swiftness - Auto-cast for predicted deaths (<15% HP after incoming damage) Tidal Force - Emergency crit healing for <25% HP situations Chain Heal - Optimal targeting for AoE damage situations (3+ injured) Tank Priority - Increased healing priority for identified tanks 🛡️ Automatic Utilities Wind Shear Interrupts - Priority list (heals > CC > damage spells) Cure Toxins - Automatic dispel of Poison/Disease when safe Water Shield - Maintains buff at all times Earth Shield - Monitors charges on tank, refreshes at ≤2 charges Earthliving Weapon - Automatic enchant application Mana Management Thresholds The fight class adapts behavior based on mana percentage: Mana % Behavior < 20% Emergency only - Mana Tide Totem, critical heals only 20-30% Conservative - Basic water totems, essential healing 30-35% Water + utility totems, moderate healing 35-85% Full earth totems, optimal healing rotation 85%+ All totems including air buffs (Windfury/Wrath of Air) Installation Download the .cs file Place in: WRobot/FightClass/ Launch WRobot Select the fight class from the dropdown menu IMPORTANT: Configure your backup healing addon (HealBot/Vuhdo/etc.) Requirements Mandatory WRobot (latest version) Restoration spec Shaman Backup healing addon installed and configured Recommended: 2000+ spell power for optimal performance Recommended Addons Omen - Threat monitoring DBM/BigWigs - Boss mechanics awareness HealBot/Vuhdo - Manual healing backup (REQUIRED) Configuration No configuration needed - the fight class adapts automatically based on: Party composition (melee vs caster ratio for air totems) Combat situation (damage patterns, health levels) Mana available (threshold-based behavior) Drinking status (activity pause/resume) Totem Durations Water Totems: Healing Stream: 300s (5 min) Mana Spring: 300s (5 min) Mana Tide: 12s (emergency) Cleansing: 300s (5 min) Earth Totems: Stoneskin: 120s (2 min) Strength of Earth: 300s (5 min) Earth Elemental: 120s (2 min, emergency) Tremor: 300s (5 min) Air Totems: Windfury: 300s (5 min) Wrath of Air: 300s (5 min) Grounding: 15s (emergency) Expected Performance Improvements Based on testing: 10-20% reduction in overhealing 15-25% mana efficiency improvement 20-30% CPU usage reduction 100% emergency totem protection Faster response time in critical situations Zero mana waste during drinking Known Limitations Beta Status - May contain undiscovered bugs Party Size - Optimized for 5-man content No Raid Frames - Works with default party frames and WRobot's detection Manual Intervention Required - Complex boss mechanics may need manual control Spec Specific - Restoration spec only, will not work with other specs Troubleshooting Fight class not healing: Verify Restoration spec is active Check WRobot product is started Ensure you're not mounted Verify party members are within 40 yards Too much overhealing: System is learning - give it 5-10 minutes Check spell power (needs 2000+ for accurate predictions) Totems not placing: Stand still for 2+ seconds Check mana threshold (needs 30%+ for most totems) Verify spells are learned Drinking detection not working: Ensure you're using standard food/drink items Check for conflicting addons that modify buff detection Support & Feedback This is a community project in beta testing. Please report: Bugs and errors Performance issues Suggestions for improvement Successful dungeon/raid completions Remember: Always have manual healing ready as backup. This bot assists you, it does not replace your awareness and decision-making. Credits Advanced anti-overheal prediction system Emergency totem protection logic Multi-threaded performance optimization Drinking-aware activity management Use at your own risk. Bot responsibly. -
Version 1.0.54
23 downloads
Restoration Shaman Fight Class v8.1 FINAL - BETA Documentation ⚠️ CRITICAL DISCLAIMERS BETA STATUS This fight class is in BETA testing phase. While functional, it may contain bugs or unexpected behavior. DO NOT rely on this as your only healing solution. MANDATORY BACKUP REQUIREMENT You MUST have a manual healing system running simultaneously: HealBot (recommended) VuhDo Grid + Clique Manual keybinds The bot can fail, disconnect, or behave unexpectedly. Your party/raid depends on you having a backup. CODE MODIFICATION WARNING This system contains intentionally designed race conditions between threads to simulate human-like reaction delays and imperfect decision-making. The threading model creates non-deterministic behavior patterns that mimic human healers. ⚠️ MODIFYING THE CODE CAN BREAK THE HEURISTICS: Thread timing adjustments may cause deadlocks or over-aggressive behavior Changing priority systems can make healing completely non-functional The multi-threaded architecture is fragile by design Test ALL changes extensively in solo content first If you modify anything, you're on your own. The threading system is tuned to create realistic human-like behavior patterns. Expected Log Behavior Thread Errors Are Normal You will see occasional errors in the WRobot log such as: [HEAL THREAD] Error: ... [TOTEM THREAD] Error: ... [UTILITY THREAD] Error: ... These errors are expected and can be ignored in most cases. The multi-threaded architecture intentionally operates with race conditions that occasionally produce logged errors. This is part of the design to simulate human reaction variance. When to Worry About Errors Normal: 1-5 errors per minute scattered across threads Acceptable: Brief error spikes during loading screens or zone transitions Problem: Continuous error spam (10+ per second) that doesn't stop Critical: Fight class stops functioning (no healing, no totems) If errors spam continuously for more than 30 seconds, restart WRobot. Otherwise, ignore them and watch your in-game healing performance instead. What To Monitor Instead of watching the log, monitor: Are party members being healed? Are totems being placed when stationary? Is mana management working? Are emergency abilities firing when needed? If yes to all = ignore the log errors. Overview This is a sophisticated multi-threaded Restoration Shaman fight class for WRobot (WotLK 3.3.5a). It features intelligent movement detection, smart totem management, predictive healing, and automatic interrupt/dispel systems. Key Features 🔄 Multi-Threading Architecture Healing Thread: 20ms tick rate (Highest priority) Totem Thread: 250ms tick rate (Normal priority) Utility Thread: 2000ms tick rate (Below normal priority) Race conditions between threads create 50-200ms variance in reaction times, simulating human behavior. 🚶 Smart Movement System Tracks player movement every 200ms 2 second stationary requirement before placing normal totems Emergency totems work while moving (Stoneclaw, Earthbind, Earth Elemental, Mana Tide, Grounding) Automatic Totemic Recall when moving away from totems 🗿 Intelligent Totem Management Normal Totems (Require Stationary): Water: Healing Stream (high damage) / Mana Spring (low mana) Earth: Stoneskin (high damage) / Strength of Earth (default) Fire: Smart selection based on mana and enemy count Air: Wrath of Air (default) / Resistance totems (boss-specific) Emergency Totems (Work While Moving): Stoneclaw: Healer under attack + <60% HP Earthbind: 3+ enemies near healer Earth Elemental: Party average <30% HP, 3+ enemies Mana Tide: <30% mana (3 min cooldown) Grounding: Enemy casting any spell within 30 yards (20s cooldown) Fire Totem Logic: <70% mana: Flametongue only (buff, no mana cost) 70%+ mana: Searing Totem (attacks) No enemies: Flametongue for buff Auto-reposition: After 5 seconds out of range 💧 Advanced Healing System Emergency Response: Nature's Swiftness: Instant cast at <18% HP Tidal Force: Critical heals at <25% HP Emergency threshold: <35% HP Smart Spell Selection: Riptide: Always first, instant HoT Chain Heal: 2+ targets below threshold Healing Wave: Critical situations, tanks Lesser Healing Wave: Quick response, moderate damage Predictive Healing: Tracks incoming damage patterns Pre-applies Riptide to targets about to take damage Anticipates group-wide damage 🛡️ Utility Features Auto-interrupt: Wind Shear on priority casts (heals, CC, high damage) Auto-dispel: Cure Toxins on poison/disease Buff maintenance: Water Shield, Earth Shield on tank Weapon enchant: Earthliving Weapon Grounding Totem: Automatically cast when any enemy begins casting Mana Management The system has four mana thresholds: Mana % Behavior <30% CRITICAL: Mana Tide Totem emergency, Mana Spring priority 30-50% Mana Spring priority, conservative healing 50-70% Mana Spring priority, Flametongue only (no attack totems) 70%+ Full offensive totem setup allowed Installation Download the .cs file Place in WRobot/FightClass/ directory Launch WRobot Select "Resto_Shaman_v8_Final" from fight class dropdown Configure your backup healing addon (HealBot, etc.) Start botting Ignore thread errors in the log (see section above) Configuration No external configuration needed. All logic is automatic: Movement detection: Automatic Totem placement: Automatic based on combat situation Healing priorities: Dynamic based on party health/damage Mana management: Automatic threshold-based Boss-Specific Features Auto-detects dungeons and adjusts totems: Loken (Halls of Lightning): Nature Resistance Totem Garfrost (Pit of Saron): Frost Resistance Totem Generic heroics: Standard totem setup Performance Monitoring The system logs status every 2 minutes: Healing pulse rate (target: 45-55 pulses/sec) Current mana percentage Group DPS (damage taken) Average party health Movement status Combat statistics Check logs for "PERFORMANCE" entries. Troubleshooting Seeing Thread Errors in Log Symptom: [HEAL THREAD] Error: messages appearing Cause: Normal race conditions in multi-threaded design Solution: Ignore them. Only worry if they spam non-stop or healing stops working. Totems Not Placing Symptom: No totems being cast Cause: Movement detection thinks you're still moving Solution: Stand completely still for 3+ seconds. Check logs for "MOVEMENT" entries. Over-aggressive Grounding Totem Symptom: Grounding every 20 seconds Cause: Working as intended - blocks any enemy cast Solution: This is normal behavior. Grounding has 20s cooldown built in. Low Healing Rate Symptom: <45 pulses/second in logs Cause: High latency or CPU bottleneck Solution: Close other programs, reduce WRobot settings, check your FPS/latency Totems Recalled Immediately Symptom: Places totems then recalls right away Cause: Bot thinks you're moving away from them Solution: Disable auto-follow, reduce movement speed during combat Not Using Mana Tide Symptom: Running OOM, no Mana Tide cast Cause: 3 minute cooldown restriction Solution: Working as intended. Mana Tide only every 3 minutes. Healing Stopped Completely Symptom: No heals being cast, party dying Cause: Critical thread failure or API disconnect Solution: Stop and restart WRobot immediately. This is why you need HealBot backup. Known Issues Thread errors in log: Intentional race conditions create occasional logged errors (see above section) Occasional totem spam: When rapidly starting/stopping movement Tank detection heuristics: May misidentify tank in unusual group compositions Fire totem repositioning: May be aggressive in high-movement fights Grounding cooldown: Will not fire more than once per 20 seconds even if multiple enemies casting Technical Details Thread Safety All shared data protected by locks Cached data expires after 300-1000ms Lua calls wrapped in try-catch blocks Spell cooldown tracking prevents spam Performance Optimization Party/enemy data cached to reduce API calls Buff/debuff checks cached 300-500ms Movement checks throttled to 200ms intervals Dungeon detection cached 30 seconds Spell Priority System Priority 0: Grounding Totem (enemy casting within 30yd) Priority 1: Nature's Swiftness (<18% HP emergency) Priority 2: Emergency healing (<35% HP) Priority 3: Totemic Recall (totems out of range) Priority 4: Emergency totems (danger situations) Priority 5: Normal healing rotation Priority 6: Normal totem placement (stationary only) Priority 7: Utility (buffs, dispels, interrupts) FAQ Q: Should I worry about errors in the log? A: No. Thread errors are expected. Only worry if healing stops working or errors spam continuously. Q: Can I change healing thresholds? A: Yes, but TEST THOROUGHLY. Modify GetCriticalThreshold(), GetPriorityThreshold(), etc. in EnhancedHealingEngine. Changing thresholds may break the heuristics. Q: Can I disable Grounding auto-cast? A: Comment out the HandleGroundingTotem() call in SmartTotemManager.PulseTotems(). Q: Why won't it place totems while moving? A: By design. Only emergency totems work while moving. Stand still 2+ seconds for normal totems. Q: Can I adjust the stationary timer? A: Change STATIONARY_TIME_FOR_TOTEMS in MovementTracker class. Default: 2.0 seconds. May break totem placement behavior. Q: Does this work in raids? A: Designed for 5-man dungeons. May work in raids but untested. Healing logic caps at 5 party members. Q: Why is my FPS dropping? A: Three threads running constantly. Reduce tick rates or disable utility thread if needed. Q: Is it normal for Grounding to cast constantly? A: It casts whenever enemies cast spells, limited by 20s cooldown. This is intended behavior. Q: The fight class stopped working completely, what do I do? A: Stop WRobot, restart it, reload the fight class. Use your backup healing addon until bot is stable. If it keeps happening, disable the fight class and heal manually. Safety Reminders Always have HealBot or similar running - This is not optional Watch your party's health bars - Don't blindly trust the bot Ignore thread errors in log - They're cosmetic unless healing stops Test in normal dungeons first - Don't jump straight into heroics Stay at keyboard - AFKing with a healing bot gets you reported Manual intervention required - Some mechanics need human response Credits This fight class uses intentionally designed race conditions and heuristic systems to simulate human healing patterns. The architecture is complex and fragile - modifications require understanding of multi-threaded programming and WRobot API behavior. Use at your own risk. Always have manual backup healing ready. Thread errors in the log are a feature, not a bug. They simulate human imperfection. -
Version 1.0.285
71 downloads
🧪 [BETA] Advanced Blood Death Knight Tank 2.0 – Clean AI Movement & Smart Rotation Author: Calaude Class: Death Knight – Blood (Tank) Version: 2.0 BETA (LoS + Debug Build) Compatibility: WRobot for WoW 3.3.5a (Wrath of the Lich King) ⚠️ This is a BETA release. While stable in most scenarios, it is still under active testing and optimization. Please report any issues, stuck behavior, or unexpected AI movements so they can be refined for version 2.1. 🔥 Overview This fight class is a fully re-engineered Blood DK Tank AI, designed to simulate realistic, intelligent combat behavior. It features a complete custom movement AI, adaptive decision making, and multi-threaded control logic for smooth, human-like reactions. Unlike traditional FightClasses, this one runs its own AI movement layer, coordinating with WRobot’s movement manager without conflicting or “fighting” for control. 🧠 Key Features 🧍♂️ Clean Movement AI Fully autonomous positioning system adapted from the Warrior AI project Predictive enemy tracking and movement anticipation using Kalman filtering Intelligent facing, strafing, and backstep control Adaptive hysteresis thresholds that adjust based on FPS and network latency Smooth transitions between AI control and manual player input (WASD detection) ⚔️ Advanced Combat Behavior Rotational logic for tanking: Icy Touch, Plague Strike, Death Strike, Heart Strike, Rune Strike, Blood Boil, Death and Decay Full defensive cooldown usage: Icebound Fortitude, Vampiric Blood, Rune Tap, AMS, Bone Shield, Dancing Rune Weapon Intelligent Death Grip logic that detects isolated targets and chooses the best pull strategy Automatic Horn of Winter and buff upkeep 🧭 Smart Targeting & Positioning AI constantly monitors enemy centroid, spread angle, and threat vectors Repositions automatically when enemies surround the player or attack from behind Pathfinding optimizer creates emergency escape paths based on enemy distribution Handles corner cases like teleports, new pulls, and multi-target engagements 🧩 Defensive Awareness “Danger Detection System” continuously evaluates: Enemies casting or attacking from behind Player health and incoming damage density Safe zones for retreat or repositioning Automatically engages defensive control when critical conditions are met ⚙️ Technical Highlights Dual-thread architecture: Rotation Thread – executes combat rotation Movement Thread – runs AI movement logic Thread-safe with proper locking and graceful shutdown Built-in performance metrics for real-time profiling Debug and diagnostic output for tuning behavior 🧰 Requirements WRobot for WoW 3.3.5a Death Knight level 80 (Blood Spec recommended) Tanking role (defensive gear and presence) English or localized client (spells auto-detected via string names) 🧪 Debug Options Inside the code you can enable or disable specific debug sections: private const bool ENABLE_DANGER_LOGS = true; private const bool ENABLE_AI_DEBUG_LOGS = false; private const bool ENABLE_DEATH_GRIP_LOGS = true; Set these to true or false to toggle: DANGER_LOGS: Prints warnings when surrounded, low HP, or in unsafe conditions AI_DEBUG_LOGS: Detailed positioning and smoothing diagnostics DEATH_GRIP_LOGS: Information about pull and engagement logic 🛠 Installation Download the .cs file Place it into: WRobot\FightClass\
