Game UI Functions
Overviewβ
The core.game_ui module provides functions for interacting with the World of Warcraft game interface. This includes accessing loot windows, battlefield information, cursor positions, and map utilities.
Loot Window Functions π°β
core.game_ui.get_loot_item_countβ
Syntax
core.game_ui.get_loot_item_count() -> integer
integer: The number of lootable items currently available in the loot window.
Retrieves the number of items currently available in the loot window.
Example Usage
local item_count = core.game_ui.get_loot_item_count()
core.log("Lootable items: " .. item_count)
core.game_ui.get_loot_item_idβ
Syntax
core.game_ui.get_loot_item_id(index: integer) -> integer
Parameters
index:integer- The index of the loot item.
integer: The ID of the lootable item.
Retrieves the item ID of a lootable item at the specified index.
Example Usage
local item_id = core.game_ui.get_loot_item_id(0)
core.log("First loot item ID: " .. item_id)
core.game_ui.get_loot_item_nameβ
Syntax
core.game_ui.get_loot_item_name(index: integer) -> string
Parameters
index:integer- The index of the loot item.
string: The name of the lootable item.
Retrieves the name of the lootable item at the specified index.
Example Usage
local item_name = core.game_ui.get_loot_item_name(0)
core.log("First loot item: " .. item_name)
core.game_ui.get_loot_is_goldβ
Syntax
core.game_ui.get_loot_is_gold(index: integer) -> boolean
Parameters
index:integer- The index of the loot item.
boolean:trueif the item is gold; otherwise,false.
Checks if the lootable item at the specified index is gold.
Example Usage
if core.game_ui.get_loot_is_gold(0) then
core.log("First loot slot contains gold!")
end
Loot Window - Complete Exampleβ
local function process_loot()
local count = core.game_ui.get_loot_item_count()
for i = 0, count - 1 do
if core.game_ui.get_loot_is_gold(i) then
core.log("Slot " .. i .. ": Gold")
else
local name = core.game_ui.get_loot_item_name(i)
local id = core.game_ui.get_loot_item_id(i)
core.log("Slot " .. i .. ": " .. name .. " (ID: " .. id .. ")")
end
end
end
Battlefield Functions βοΈβ
core.game_ui.get_battlefield_statusβ
Syntax
core.game_ui.get_battlefield_status(index: integer) -> string
Parameters
index:integer- The battlefield queue index.
string: The status of the battlefield queue.
Retrieves the status of a battlefield queue at the specified index.
Possible Return Values:
| Value | Description |
|---|---|
"confirm" | Battlefield is ready to join |
"queued" | Currently in queue |
"active" | Currently in the battlefield |
"error" | Error state |
"none" | Not queued |
Example Usage
local status = core.game_ui.get_battlefield_status(1)
if status == "confirm" then
core.log("Battlefield ready! Accept the queue.")
elseif status == "queued" then
core.log("Waiting in queue...")
end
core.game_ui.get_battlefield_stateβ
Syntax
core.game_ui.get_battlefield_state() -> integer
integer: The current state of the battlefield.
Retrieves the current state of the battlefield.
State Values:
| Value | Description |
|---|---|
2 | Preparation phase |
3 | Active/In progress |
5 | Finished |
Example Usage
local state = core.game_ui.get_battlefield_state()
if state == 2 then
core.log("Battlefield starting soon - preparation phase")
elseif state == 3 then
core.log("Battlefield in progress!")
elseif state == 5 then
core.log("Battlefield finished")
end
core.game_ui.get_battlefield_run_timeβ
Syntax
core.game_ui.get_battlefield_run_time() -> number
number: Timer in milliseconds since the battlefield started.
Retrieves the time elapsed since the battlefield started.
Example Usage
local run_time = core.game_ui.get_battlefield_run_time()
local minutes = math.floor(run_time / 60000)
local seconds = math.floor((run_time % 60000) / 1000)
core.log(string.format("Battlefield running for: %d:%02d", minutes, seconds))
core.game_ui.get_battlefield_winnerβ
Syntax
core.game_ui.get_battlefield_winner() -> integer|nil
integer|nil: The winner of the battlefield, ornilif no winner yet.
Retrieves the winner of the battlefield.
Return Values:
| Value | Description |
|---|---|
nil | No winner yet (match in progress) |
0 | Horde won |
1 | Alliance won |
2 | Tie |
Example Usage
local winner = core.game_ui.get_battlefield_winner()
if winner == nil then
core.log("Match still in progress")
elseif winner == 0 then
core.log("Horde wins!")
elseif winner == 1 then
core.log("Alliance wins!")
elseif winner == 2 then
core.log("It's a tie!")
end
Cursor Functions π±οΈβ
core.game_ui.get_wow_cursor_positionβ
Syntax
core.game_ui.get_wow_cursor_position() -> vec2
vec2: The cursor position in WoW UI coordinates.
Retrieves the current WoW cursor position in UI coordinates.
Example Usage
local cursor = core.game_ui.get_wow_cursor_position()
core.log(string.format("WoW Cursor: (%.2f, %.2f)", cursor.x, cursor.y))
core.game_ui.get_normalized_cursor_positionβ
Syntax
core.game_ui.get_normalized_cursor_position() -> vec2
vec2: The cursor position normalized to 0-1 range.
Retrieves the current cursor position in normalized coordinates (0-1 range).
Example Usage
local cursor = core.game_ui.get_normalized_cursor_position()
-- cursor.x and cursor.y will be between 0 and 1
core.log(string.format("Normalized Cursor: (%.3f, %.3f)", cursor.x, cursor.y))
core.game_ui.normalize_ui_positionβ
Syntax
core.game_ui.normalize_ui_position(pos: vec2) -> vec2
Parameters
pos:vec2- The UI position to normalize.
vec2: The normalized position (0-1 range).
Normalizes a UI position to the 0-1 range.
Example Usage
local ui_pos = vec2.new(960, 540)
local normalized = core.game_ui.normalize_ui_position(ui_pos)
core.log(string.format("Normalized: (%.3f, %.3f)", normalized.x, normalized.y))
Map Functions πΊοΈβ
core.game_ui.get_current_map_idβ
Syntax
core.game_ui.get_current_map_id() -> integer
integer: The ID of the current map.
Retrieves the ID of the current map from the game UI context.
Example Usage
local map_id = core.game_ui.get_current_map_id()
core.log("Current UI map ID: " .. map_id)
core.game_ui.is_map_openβ
Syntax
core.game_ui.is_map_open() -> boolean
boolean:trueif the world map is currently open; otherwise,false.
Checks whether the world map UI is currently open.
Example Usage
if core.game_ui.is_map_open() then
core.log("Map is open - player is checking their location")
else
core.log("Map is closed")
end
Example: Pause Navigation While Map Open
local function update_navigation()
-- Don't process movement while player is looking at the map
if core.game_ui.is_map_open() then
return
end
-- Continue with navigation logic...
movement:process()
end
core.game_ui.get_world_pos_from_map_posβ
Syntax
core.game_ui.get_world_pos_from_map_pos(map_id: integer, map_pos: vec2) -> vec2
Parameters
map_id:integer- The map ID.map_pos:vec2- The position on the map (normalized 0-1 coordinates).
vec2: The X/Y world position (Z height not included).
Converts a map position to world coordinates. Returns a vec2 with X and Y in 3D world format - note that the Z (height) component is not included.
Example Usage
local map_id = core.game_ui.get_current_map_id()
local map_pos = vec2.new(0.5, 0.5) -- Center of the map
local world_pos = core.game_ui.get_world_pos_from_map_pos(map_id, map_pos)
core.log(string.format("World position: (%.2f, %.2f)", world_pos.x, world_pos.y))
-- To get the Z coordinate, use:
local full_pos = vec3.new(world_pos.x, world_pos.y, 0)
local height = core.get_height_for_position(full_pos)
Death & Resurrection Functions πβ
core.game_ui.get_resurrect_corpse_delayβ
Syntax
core.game_ui.get_resurrect_corpse_delay() -> number
number: The delay in seconds before resurrection is possible.
Retrieves the remaining time before the player can resurrect at their corpse.
Example Usage
local delay = core.game_ui.get_resurrect_corpse_delay()
if delay > 0 then
core.log("Can resurrect in " .. delay .. " seconds")
else
core.log("Ready to resurrect!")
end
core.game_ui.get_corpse_positionβ
Syntax
core.game_ui.get_corpse_position() -> vec3
vec3: The position of the player's corpse.
Retrieves the position of the player's corpse as a 3D vector.
Example Usage
local corpse_pos = core.game_ui.get_corpse_position()
core.log(string.format("Corpse at: (%.2f, %.2f, %.2f)", corpse_pos.x, corpse_pos.y, corpse_pos.z))
-- Calculate distance to corpse
local player = core.object_manager.get_local_player()
if player then
local player_pos = player:get_position()
local distance = player_pos:dist_to(corpse_pos)
core.log("Distance to corpse: " .. string.format("%.1f", distance) .. " yards")
end
Complete Examples πβ
Example: Auto-Loot Systemβ
local function auto_loot()
local count = core.game_ui.get_loot_item_count()
if count == 0 then return end
for i = 0, count - 1 do
-- Always loot gold
if core.game_ui.get_loot_is_gold(i) then
core.input.loot_item(i)
else
local item_id = core.game_ui.get_loot_item_id(i)
-- Add your item filter logic here
if should_loot_item(item_id) then
core.input.loot_item(i)
end
end
end
end
Example: Battlefield Status Monitorβ
local function check_battlefield_status()
-- Check all queue slots
for i = 1, 3 do
local status = core.game_ui.get_battlefield_status(i)
if status == "confirm" then
core.graphics.add_notification(
"bg_ready_" .. i,
"Battlefield Ready!",
"Queue " .. i .. " is ready to join",
5000,
color.new(0, 255, 0, 255)
)
end
end
-- If in battlefield, show timer
local state = core.game_ui.get_battlefield_state()
if state == 3 then -- Active
local run_time = core.game_ui.get_battlefield_run_time()
local minutes = math.floor(run_time / 60000)
local seconds = math.floor((run_time % 60000) / 1000)
-- Display timer...
end
end
Example: Corpse Run Helperβ
local function corpse_run_helper()
local player = core.object_manager.get_local_player()
if not player or not player:is_dead() then return end
local corpse_pos = core.game_ui.get_corpse_position()
local player_pos = player:get_position()
local distance = player_pos:dist_to(corpse_pos)
-- Draw line to corpse
core.graphics.line_3d(player_pos, corpse_pos, color.new(255, 255, 0, 200), 2)
-- Draw circle at corpse
core.graphics.circle_3d(corpse_pos, 5, color.new(255, 255, 0, 200), 2)
-- Show distance
local screen_pos = core.graphics.w2s(corpse_pos)
if screen_pos then
core.graphics.text_2d(
string.format("%.0f yards", distance),
screen_pos,
16,
color.new(255, 255, 255, 255),
true
)
end
-- Check resurrection delay
local delay = core.game_ui.get_resurrect_corpse_delay()
if delay > 0 then
core.log("Wait " .. delay .. " seconds to resurrect")
end
end