• Страница 1 из 1
  • 1
Работа с GameTooltip
Nyll
Здравствуйте. Сегодня мы с вами сделаем маленький аддон который будет показывать GUID игрока, ID нпц.
Идею этого аддона (и код тоже) Я нашел в интернете тык.

Инструкция по созданию toc файла - тык
Ссылка на предыдущие статью - тык
Скачать notepad++ - тык
API функции - тык

Преступим сразу к коду.

*Маленькое инфо*: В одном из уроков я показывал игровую команду /eventtrace, с помощью которой можно посмотреть игровые ивенты. Дак вот она нам понадобится.

Создаем локальную функцию в которой будет все добро находится.

Code
local function F()


Дальше создаем переменную из которой будем получать всю информацию.

Code
local d = UnitGUID("mouseover")


Из нее выходит непонятный нам код: 0xF13000ABE003E3EA (У каждого свой), потом этот код конвертируется в то что нам нужно.

Теперь получаем номер. Это нужно чтобы определить кто это, Нпц или игрок или пет.

Code
local B = tonumber(d:sub(5,5), 16) % 8


Номера:
0 - Игрок (player)
3 - Нпц (Существо)
4 - Пет (Питомец игрока)

Дальше получаем ID пета.

Code
local C = tonumber(d:sub(6,12), 16)


Теперь ID нпц.

Code
local D = tonumber(d:sub(9,12), 16)


И GUID игрока.

Code
local E = tonumber(d:sub(13,18), 16)


GUID это как номер игрока, у каждого игрока он свой... (Сори если что написал что думаю :D)

Дальше переводим GameTooltip в g (Для удобства.)

Code
local g = GameTooltip


Теперь выводим всю информацию что мы получили на GameTooltip.

Выводим информацию о персонаже, а именно player GUID.

Code
if g:IsShown() then  
if B==0 then  
g:AddLine("Player GUID: "..E)
end


Тут мы говорим: Если B равно 0 то мы пишем g:AddLine("Player GUID: "..E)

Теперь выводим информацию о пете.

Code
if B==4 then  
g:AddLine("Пет ID: "..C)
end


Дальше информацию о НПЦ.

Code
if B==3 then  
g:AddLine("Нпц ID: "..D)
end


Теперь все это закрываем.

Code
end
g:AppendText("")
end
end


И приступим к фрейме.

Создаем фрейму которая будет запускать наш ГеймТолтип при наведении курсора на что либо smile

Code
local f=CreateFrame("frame");


Дальше указываем ивент при включении которого наша функция будет запускаться.

Code
f:RegisterEvent("UPDATE_MOUSEOVER_UNIT");


А дальше указываем: если ивент запустился то выполняем запуск F.

Code
f:SetScript("OnEvent",F)


Прошу заметить что название у фреймы и функции одинаково. Но как я говорил Lua чувствителен к регистру по этому у нас не выходят конфликты кода.

Готовый код:

Code
local function F()  
local d = UnitGUID("mouseover")
local B = tonumber(d:sub(5,5), 16) % 8
local C = tonumber(d:sub(6,12), 16)
local D = tonumber(d:sub(9,12), 16)
local E = tonumber(d:sub(13,18), 16)
local g = GameTooltip
   
if g:IsShown() then  
if B==0 then  
g:AddLine("Player GUID: "..E)
end
if B==4 then  
g:AddLine("Пет ID: "..C)
end
if B==3 then  
g:AddLine("Нпц ID: "..D)
end
g:AppendText("")
end
end

local f=CreateFrame("frame");
f:RegisterEvent("UPDATE_MOUSEOVER_UNIT");
f:SetScript("OnEvent",F)


Это на сегодня все. Удачи вам.
Маме беркута привет!
Сообщение # 1 написано 26.05.2012 в 10:36
Ascreed
•°•Very Nice•°•
Работает)
упростит работу гмам на команду npc target
Сообщение # 2 написано 26.05.2012 в 11:50
_F4RR3LL_
Dos santos _H[a]ck_
Не плохой аддон , сейчас скачаю и посмотрю
Сообщение # 3 написано 28.05.2012 в 17:36
  • Страница 1 из 1
  • 1
Поиск: