Read character name from select screen data and realm from CVar when the player clicks Enter World, before InitializeLogBuffer fires. Removes GUID/name-cache fallback — no more early passthrough to wrong paths.
70 lines
3.2 KiB
Zig
70 lines
3.2 KiB
Zig
//! Address constants for combat log session rotation.
|
|
|
|
// =============================================================================
|
|
// Combat log path and state
|
|
// =============================================================================
|
|
|
|
/// Path table pointer — .data section (RW), points to "Logs\WoWCombatLog.txt" string.
|
|
/// Index 0 (0x0084360c) = chat log, index 1 (0x00843610) = combat log.
|
|
/// Overwriting the u32 at this address redirects where the combat log file is created.
|
|
pub const COMBAT_LOG_PATH_PTR: usize = 0x00843610;
|
|
|
|
/// Chat log path pointer — .data section (RW), points to "Logs\WoWChatLog.txt" string.
|
|
/// Index 0 in the path table at 0x0084360c.
|
|
pub const CHAT_LOG_PATH_PTR: usize = 0x0084360c;
|
|
|
|
/// Runtime combat log buffer handle (log_handles[1], BSS).
|
|
/// Non-zero when combat logging is active. Read to check if we can write log lines.
|
|
pub const COMBAT_LOG_HANDLE: usize = 0x00b50544;
|
|
|
|
/// Runtime chat log buffer handle (log_handles[0], BSS).
|
|
pub const CHAT_LOG_HANDLE: usize = 0x00b50540;
|
|
|
|
// =============================================================================
|
|
// Realm name
|
|
// =============================================================================
|
|
|
|
/// CVar base pointer for realm name. Dereference once, then read string at +0x20.
|
|
pub const REALM_NAME_CVAR_BASE: usize = 0x00c28130;
|
|
|
|
// =============================================================================
|
|
// Log writing
|
|
// =============================================================================
|
|
|
|
/// InitializeLogBuffer — __stdcall(filePath: [*:0]const u8, flags: u32, handleOut: *u32).
|
|
/// Creates a log buffer context. Copies path into context struct (max 260 bytes).
|
|
/// Returns nonzero on success. Callee cleans stack (RET 0xC).
|
|
/// Called by EnableChatLogging (game) and CombatLogAdd (SuperWoW) with hardcoded paths.
|
|
pub const FN_INIT_LOG_BUFFER: usize = 0x0065a0c0;
|
|
|
|
/// WriteFormattedLogMessage — __stdcall(handle: u32, fmt: [*:0]const u8, va_list: *anyopaque).
|
|
/// Three fixed params, callee cleans stack (RET 0xC). Third arg is va_list pointer.
|
|
/// Writes a timestamped, formatted line to the log buffer. Auto-flushes at 48KB.
|
|
pub const FN_WRITE_FMT_LOG_MSG: usize = 0x0065ac20;
|
|
|
|
// =============================================================================
|
|
// Character select / enter world
|
|
// =============================================================================
|
|
|
|
/// HandleCharacterSelection — void(void), called by Lua EnterWorld().
|
|
/// Fires when the player clicks "Enter World" on the character select screen,
|
|
/// before world loading and log buffer initialization.
|
|
pub const FN_HANDLE_CHAR_SELECT: usize = 0x0046b500;
|
|
|
|
/// Selected character index (int) on the character select screen.
|
|
pub const CHAR_SELECT_INDEX: usize = 0x0083856c;
|
|
|
|
/// Character list base pointer. Each entry is 0x120 bytes.
|
|
/// Character name (C string) is at entry + 0x08.
|
|
pub const CHAR_LIST_BASE: usize = 0x00b42144;
|
|
|
|
/// Number of characters in the character list.
|
|
pub const CHAR_LIST_COUNT: usize = 0x00b42140;
|
|
|
|
/// Size of each character entry in the character list.
|
|
pub const CHAR_ENTRY_SIZE: usize = 0x120;
|
|
|
|
/// Offset of character name within a character entry.
|
|
pub const CHAR_NAME_OFFSET: usize = 0x08;
|
|
|