Вопросы по Lua, XML, WoW API.  
Автор Сообщение

0
Сообщение Вопросы по Lua, XML, WoW API.
как в луа скрывается стандартный кастбар?


10 фев 2012, 23:13
Профиль Skype

0
Сообщение Вопросы по Lua, XML, WoW API.
CastingBarFrame:UnregisterAllEvents()
PetCastingBarFrame:UnregisterAllEvents()


10 фев 2012, 23:33
Профиль

0
Сообщение Вопросы по Lua, XML, WoW API.
спс


10 фев 2012, 23:42
Профиль Skype

0
Сообщение Вопросы по Lua, XML, WoW API.
Доброго времени суток всем!

Знает ли кто-нибудь, как реализовать следующее:
что есть:
когда идет инвайт на ТолБарад или ОЛО, то с заданной периодичностью (каждые несколько секунду) проигрывается мелодия в течение заданного кол-ва времени, т.е. мелодия проигрывается 4 раза в течение 20 сек
что не так:
если принять инвайт или закрыть окно инвайта в пределах 20 сек, то мелодия продолжает проигрываться
что нужно:
чтобы при принятии инвайта или при отклонении инвайта мелодия переставала проигрываться

Думал, что можно решить вопрос каким-нибудь эвентом с помощью /etrace, но фигня в том, что когда принимаешь инвайт и попадаешь в рейд, то все эвенты игры, предшествующие этому самому попаданию, пропадают, т.е. /etrace начинает писать эвенты заново с момента попадания в рейд.


16 фев 2012, 16:19
Профиль

0
Сообщение Вопросы по Lua, XML, WoW API.

Было-бы не плохо увидеть код, но есть пара идей:

 

За принятие/отклонение инвайта отвечает функция AcceptBattlefieldPort(index, accept)

Линк: http://www.wowwiki.com/API_AcceptBattlefieldPort

 

Ты перехватываешь в своем аддоне вызов этой функции, например так:

 

local OriginalAcceptBattlefieldPort=AcceptBattlefieldPort

 

AcceptBattlefieldPort=function(index, accept)

    --Тут ты вставляешь код который должен прекратить проигрывание музыки

    OriginalAcceptBattlefieldPort(index, accept)

end

 

А по поводу эвентов, вот описание одного эвента.

И вообще вот тут все эвенты, можно по категориям, можно весь список: http://www.wowpedia.org/Events_(API)

 

 

"PLAYER_ENTERING_WORLD" Category: System,Player,Instance  

Fired when the player enters the world, enters/leaves an instance, or respawns at a graveyard. Also fires any other time the player sees a loading screen.

To check if the player is entering an instance, check GetPlayerMapPosition to see if both X and Y are zero.

Correction on the above comment: When PLAYER_ENTERING_WORLD fires, you'll notice that WORLD_MAP_UPDATE fires just before it. My instincts tell that leaving an instance puts the player in void space momentarily. So for the case that you are entering AND leaving an instance, GetPlayerMapPosition always returns the coordinates [0,0] and hence there is no way to determine using the event PLAYER_ENTERING_WORLD if the player is entering an instance or not. When leaving an instance the following events fire (ignoring party/raid events).

WORLD_MAP_UPDATEPLAYER_ENTERING_WORLDWORLD_MAP_UPDATE <--- Player coordinates are non-zero here

Instances do have coordinates for units once the second WORLD_MAP_UPDATE event has fired. For the case of entering a battleground such as WSG, WORLD_MAP_UPDATE won't fire until you leave Silverwing Hold or Warsong Lumber Mill and you are outside.

 


И вопрос от меня, хочу написать аддон, который модифицировал экшенбары. Для этого мне нужно написать код который будет "перебирать" все существующие кнопки экшенбаров получая от каждой из них информацию о том:

    Хватает-ли маны на абилку,

    Если есть цель, то в зоне-ли действия абилки эта цель,

    Кд абилки,

    Выполнены-ли специфические условия для использования этой абилки.

 

Как правило большинство аддонов для каждого из этих состояний окрашивает кнопку специальным образом, а для абилок на кд - показывается кд. А я хочу, что-бы если любое из этих условий выполнено (то есть мы не можем использовать абилку по той или иной причине), то кнопка затенялась всегда одним и тем-же цветом. А в частном случае когда абилка на кд, это затенение не затрагивало само отображение кд, а просто под него подкладывалась еще дополнительная заливка затенения.

 

Есть идеи о том, как это делается?



18 фев 2012, 18:50
Профиль

0
Сообщение Вопросы по Lua, XML, WoW API.

А так-же нужно как-то научится управлять "загорающимися" абилками, которые такой двигающейся желтой рамкой подсвечиваются под проки, то есть что-бы она загоралась и тухла по моим командам, а не сама по себе.



19 фев 2012, 10:13
Профиль

0
Сообщение Вопросы по Lua, XML, WoW API.

Отрицание писал(а):

А так-же нужно как-то научится управлять "загорающимися" абилками, которые такой двигающейся желтой рамкой подсвечиваются под проки, то есть что-бы она загоралась и тухла по моим командам, а не сама по себе.

IsSpellOverlayed

 



19 фев 2012, 12:41
Профиль

0
Сообщение Вопросы по Lua, XML, WoW API.

Это относится к делу, но не управляет скрытием-показыванием, а запрашивает инфо о том играется-ли сейчас анимация.

 

Нашел в коде близзов функции запускающие и останавливающие анимацию для заданной кнопки:

 

function ActionButton_ShowOverlayGlow(self)
if ( self.overlay ) then
if ( self.overlay.animOut:IsPlaying() ) then
self.overlay.animOut:Stop();
self.overlay.animIn:Play();
end
else
self.overlay = ActionButton_GetOverlayGlow();
local frameWidth, frameHeight = self:GetSize();
self.overlay:SetParent(self);
self.overlay:ClearAllPoints();
self.overlay:SetPoint("TOPLEFT", self, "TOPLEFT", -frameWidth * 0.2, frameHeight * 0.2);
self.overlay:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", frameWidth * 0.2, -frameHeight * 0.2);
self.overlay.animIn:Play();
end
end

 

function ActionButton_HideOverlayGlow(self)
if ( self.overlay ) then
if ( self.overlay.animIn:IsPlaying() ) then
self.overlay.animIn:Stop();
end
if ( self:IsVisible() ) then
self.overlay.animOut:Play();
else
ActionButton_OverlayGlowAnimOutFinished(self.overlay.animOut); --We aren't shown anyway, so we'll instantly hide it.
end
end
end

 

 

Если в чат ввести

 

/run ActionButton_ShowOverlayGlow(КнопкаНаКоторойЗажечьАнимашку)

 

То на этой кнопке зажжется эта рамка. Что-бы узнать это имя кнопки можно воспользоватся скриптом:

 

/run print( GetMouseFocus():GetName() );

 

Наведя на фрейм кнопки ввести это, и напишет в чат название кнопки.

 

Название в функцию включения анимации вводить без кавычек, то есть не строкой, а ссылкой на объект.

 

А что-бы например убить весь механизм этой анимации (правда довольно грубо) можно сделать так:

 

/run ActionButton_ShowOverlayGlow = function() end

 

После этого на кнопках никогда не должна загоратся эта анимация.


 

Оу, я тупица можно-же так:

 

/run ActionButton_ShowOverlayGlow(GetMouseFocus())


Это будет "зажигать" те кнопки, над которыми находится курсор, в момент отправления этого скрипта в чат.

 



19 фев 2012, 18:30
Профиль



<Мёртвая Хватка>


Сервер: Азурегос
2х2: 1766
3х3: 1794
0
Сообщение Вопросы по Lua, XML, WoW API.

Отрицание писал(а):
И вопрос от меня, хочу написать аддон, который модифицировал экшенбары. Для этого мне нужно написать код который будет "перебирать" все существующие кнопки экшенбаров получая от каждой из них информацию о том:

    Хватает-ли маны на абилку,

    Если есть цель, то в зоне-ли действия абилки эта цель,

    Кд абилки,

    Выполнены-ли специфические условия для использования этой абилки.

 

Как правило большинство аддонов для каждого из этих состояний окрашивает кнопку специальным образом, а для абилок на кд - показывается кд. А я хочу, что-бы если любое из этих условий выполнено (то есть мы не можем использовать абилку по той или иной причине), то кнопка затенялась всегда одним и тем-же цветом. А в частном случае когда абилка на кд, это затенение не затрагивало само отображение кд, а просто под него подкладывалась еще дополнительная заливка затенения.

 

Есть идеи о том, как это делается?

посмотри код bBars, там это есть. Хукается setvertexcolor для normaltexture каждой кнопки. По идее можно через getmetatable __index, как и в случае с кд фреймом (омницц)



20 фев 2012, 16:48
Профиль

0
Сообщение Вопросы по Lua, XML, WoW API.

Можно ли затавить появляться бафы с лево на право?



20 фев 2012, 17:36
Профиль

0
Сообщение Вопросы по Lua, XML, WoW API.

Сейчас смотрю Bartender4, он для создания кнопок использует библиотеку LibActionButton-1.0 (апи библиотеки дает такую функцию как "сделай мне кнопку", полностью решая все вопросы с различными secure\protected execution), думаю разобратся с структурой создаваемой кнопки и решить все без хуков, темболее, что требования расширились.

 

Хочу что-бы иконка спелла всегда затенялась одинаково (как затеняется в стандартном юи при невыполненных спец условиях, только чуть темнее): для спелла на кд, при нехватке маны, при невыполненных спец условиях, при аут оф реинж. Но, при этом, что-бы для аут оф реинж рамка вокруг кнопки дополнительно окрашивалась красным, а при нехватке маны - синим. На близовских кнопках эта рамка весьма широкая, а на создаваемых LibActionButton там похоже недостает еще одной текстурки, нужно ее допилить.

 

Кстати, прикол, с этим скриптом 

/run ActionButton_ShowOverlayGlow(GetMouseFocus())

Можно "зажигать" эту рамку анимации абилки вокруг вообще любого фрейма, даже WorldFrame, забавно.

 

P.S. Написал аддон для неймплеитов, оставляя стандартный дизайн убирает уровень, агро, дополнительные рамки элиты/босса, и сокращает длинну надписей. Ну и еще показывает тотемы иконками.

 

#578

 

#578

 

#578

 

#578

 

#578

 

 


iPew писал(а):

Можно ли затавить появляться бафы с лево на право?

Думаю для стандартного юи слишком много кода перечитывать нужно что-бы разобратся где где-что перехватывать и переделывать. Может если кто-то писал аддон модифицирующий стандартные ауры, то он быстро сделать это сможет.



20 фев 2012, 17:44
Профиль



<Попа в огне>


Сервер: Черный Шрам
2х2: 1822
3х3: 1567
0
Сообщение Вопросы по Lua, XML, WoW API.

Цитата:
P.S. Написал аддон для неймплеитов, оставляя стандартный дизайн убирает уровень, агро, дополнительные рамки элиты/босса, и сокращает длинну надписей. Ну и еще показывает тотемы иконками.

А выложить этот аддон можешь, если не трудно ?



23 фев 2012, 13:07
Профиль

0
Сообщение Вопросы по Lua, XML, WoW API.

Выложил (внутри архива 2 папки, обе положить в Addons):

ChoNameplates.zip

 

Мой аддон просто немного меняет внешний вид стандартных неймплеитов, а что-бы над ними показавало всякие важные аурки как на скринах скачай еще аддон PlateBuffs



24 фев 2012, 00:57
Профиль

0
Сообщение Вопросы по Lua, XML, WoW API.

 

Хочется более глубоко понять работу всей системы в целом, для представления где и как в памяти распологаются данные.

 

1) 
Локальная ссылка на глобальные данные помещает копию этих данных в область памяти где хранятся локальные данные этой функции?
Или копия данных не создается, и это остается всего-лиш ссылкой? Но зачем тогда близзы в своем коде производят "кеширование" часто используемых глобальных функций, например, из RestrictedExecution.lua:

Код:
-- Localizes for functions that are frequently called or need to be
-- assuredly un-replaceable or unhookable.
local type = type;
local error = error;
local scrub = scrub;
local issecure = issecure;
local setfenv = setfenv;
local loadstring = loadstring;
local setmetatable = setmetatable;
local getmetatable = getmetatable;
local pcall = pcall;
local tostring = tostring;
local newproxy = newproxy;
local select = select;


2)
Нужно-ли осуществлять вручную управление жизнью переменных счетчиков цикла и итераторов полей таблиц? То есть, если у меня десятки функций, в каждой из которых используются переменные for i=x,y for k,v in pairs(table) и т.п., нужно-ли в каждом случае объявлять эти переменные и следить за тем, что-бы не могло оказатся двух функций одновременно использующих i,k,v в глобальном окружении? То есть фактически - всегда делать эти переменные локальными? Практический эксперемент и его результат:

Код:

for i=1,2
do
    print("first loop: "..i)
    for i=2,4
    do
        print("second loop: "..i)
    end
end
print(i)

Результат:

Цитата:
first loop: 1
second loop: 2
second loop: 3
second loop: 4
first loop: 2
second loop: 2
second loop: 3
second loop: 4
nil

Все работает так, как-будто это две разные переменные. Есть что-то по этому поводу в официальном мануале по луа?

 

3)
Чем является аддон с точки зрения луа? Каждый аддон это функция, или это блок кода do end или это модуль? Или-же каждый аддон это независимая программа? Но как тогда реализовано общее глобальное окружение?

 

4) 
Чем являются разнообразные функции API WoW-a? Это таблица в луа, где значениями полей являются вызываемые функции. Вот пример кода который печатает в текст все методы которые можно применять к фрейму (106 шт).

Код:
local frame = CreateFrame("Frame", nil, UIParent) 
local FrameClass=getmetatable(frame)
for k,v in pairs(FrameClass.__index)
do
    print(k)
    print(v)
end

Хотелось-бы узнать, сами эти функции, они на чем написаны? Тоже на луа, или на С? Или часть на луа, а часть на С? И если есть что-то на луа, то где можно посмотреть на реализацию этих функций, этот код входит в тот пак кода близзов, что скачивается с оффсайта? И как вызываются С функции из луа?



27 фев 2012, 17:30
Профиль



<Мёртвая Хватка>


Сервер: Азурегос
2х2: 1766
3х3: 1794
0
Сообщение Вопросы по Lua, XML, WoW API.

1. кешируют скорее всего потому, что в дальнейшем те глобальные переменные могут измениться и чтобы аддоне не "поехал" делают кеш (имхо)

2. хочешь, чтобы работало правильно - делай уникальные

3. каждый аддон это кусок кода добавленный в некое _G

4. не уверен точно, но CreateFrame - поделка близзов не на LUA точно, помоему ее даже можно запустить путем обьявления делегата (через инжектинг), а вот getmetatable - родная LUA команда написанная скорее всего на C++, print - обертка для SendChatMessage, где лежит - не помню, помоему сделана на LUA



29 фев 2012, 16:35
Профиль

0
Сообщение Вопросы по Lua, XML, WoW API.

1. Кроме того, что глобальные переменные могут изменится, в начале говорится о "Localizes for functions that are frequently called", то есть кешируются часто вызываемые функции для ускорения доступа.

Я почитал и нашел вот это:

http://www.wowace.com/addons/findglobals/

Это утилита для поиска функций которые "выгодно" кешировать. Там в описании есть такой текст, как описание одного из методов реализации этого кеширования:

Цитата:
Put a "local _G=_G" at the top of the file, and then access them through _G.SomeFunc, etc. This is actually somewhat faster than accessing them directly, believe it or not. (Direct global access involves looking up the global variable table first!)

То есть, как я понял, профит от кеширования глобальных переменных в том, что если мы обращаемся к глобальной переменной, то осуществляется ее поиск в довольно большом массиве (_G), а если мы сохранили ссылки на части этой таблицы в отдельные переменные, то мы сможем, через эти переменные напрямую обращатся к данным, не вызывая индексации огромного массива.

 

2. Так дело в том, что оно работает абсолютно правильно даже если их не делать уникальными, и то, что после цикла переменная самоуничтожается, уже точно говорит о том, что луа сама как-то следит за ними.

 

3. _G это таблица, в ней значениями могут быть функции, тогда получается, что аддоны это функции? А если они функции, тогда найдя эту функцию в _G, можно ее запустить, и таким образом загрузить какой-то аддон без перезагрузки интерфейса? Но мне кажется они скорее реализованны как модули.

 

4. Да, getmetatable родная функция луа, через метатаблицы в луа реализуется ООП, вот классная статья:

http://ilovelua.n a r o d.ru/about_lua.html (Тут какой-то парсер выедает домен народа, пришлось писать через пробелы.)

Насчет print и SendChatMessage немного наоборот, SendChatMessage обертка для print, а принт родная функция луа. То есть скорее всего API вова это функции близзов написанные, например, на С++, которые как-то вызываются из луа кода.



01 мар 2012, 00:43
Профиль

0
Сообщение Вопросы по Lua, XML, WoW API.

Нашел в теме "Ищу аддон" вот такой код:

Disality писал(а):

Код:
MainMenuBarTexture0:Hide()

MainMenuBarTexture1:Hide()

MainMenuBarTexture2:Hide()

MainMenuBarTexture3:Hide()

 

MainMenuBarLeftEndCap:Hide()

MainMenuBarRightEndCap:Hide()

 

MainMenuMaxLevelBar0:Hide()

MainMenuMaxLevelBar1:Hide()

MainMenuMaxLevelBar2:Hide()

MainMenuMaxLevelBar3:Hide()

 

BonusActionBarFrameTexture1:Hide()

BonusActionBarFrameTexture2:Hide()

BonusActionBarFrameTexture3:Hide()

BonusActionBarFrameTexture4:Hide()

Вопрос: Как скрыть еще и рамку кнопок?#674

 

#674

Нашел как называется текстура этой рамки, но не нашел как ее скрыть. Sad



09 мар 2012, 13:55
Профиль



<Лига Тьмы>


Сервер: Гордунни
0
Сообщение Вопросы по Lua, XML, WoW API.

Зайти в настройки - интерфейс - панели - оттображать всегда  :crab 



09 мар 2012, 14:32
Профиль ICQ Skype

0
Сообщение Вопросы по Lua, XML, WoW API.

Это что они были видны, если на панели ничего нет. Мне нужно чтобы были НЕ видны вообще.



09 мар 2012, 15:08
Профиль

0
Сообщение Вопросы по Lua, XML, WoW API.

Что-бы все сразу скрыть это так:

 

/run local g = {['MultiBarBottomLeftButton']=true,['ActionButton']=true,['MultiBarBottomRightButton']=true,};for k,v in pairs(g) do for i=1,12 do select(10, _G[k..i]:GetRegions()):Hide() end end

 

Что-бы скрыть эту рамку на 1 кнопке, вставляешь в чат этот скрипт (но не жмешь энтер):

/run select(10, GetMouseFocus():GetRegions()):Hide()

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


Я, кстати, наоборот искал способ вернуть эту текстурку на место в бартендер, но все лень было найти название текстурки. Без них кнопки слишком жидко и уныло выглядят по моему.



10 мар 2012, 01:50
Профиль
Начать новую тему Ответить на тему


Перейти:  

На сайте использованы материалы, принадлежащие Blizzard Entertainment. Копирование материалов возможно только c разрешения портала. В противном случае это будет называться уже другим словом.
Рейтинг@Mail.ru