7 октября 2011 г.

Продвинутые скрипты


Продвинутые скрипты
1. Чего не могут скрипты
Скрипты очень мощный инструмент, позволяющий принимать сложные решения на основе каких-то критериев. Из-за этой мощи, Blizzard ограничил тип дозволенных вещей, чтобы запретить макросам и аддонам выполнять действия, которые должен выполнять сам игрок. Я начинаю этот раздел с ограничений, чтобы у вас не было неоправданных надежд. Хотя скрипты полезны во многом, вы не можете использовать их чтобы читать заклинания, применять предметы, менять страницы панелей действий или влиять на вашу цель. Вы ограничены набором «безопасных» команд, уже описанных нами выше.

2. Что такое скрипт?
WoW UI контролируется кодом написанным на скриптовом языке Lua. Можно воспользоваться преимуществом скриптовой системы в макросах посредством команды /run или /script (но /run позволяет сэкономить пару символов). Весь скрипт должен находиться в одной строке, хотя дозволено иметь множество команд /run в одном макросе.
Полный курс Lua и программирование, безусловно, вне пределов этого руководства.
Blizzard предоставляет множество функций (именуемых API), которые могут использовать Lua скрипты, чтобы контролировать UI. Вы можете просмотреть API и другие возможности системы UI по ссылке http://www.wowwiki.com/Interface_Customization (если вы начнете писать скрипты и аддоны, то обнаружите WoWWiki незаменимым ресурсом в этом деле). Я не могу открыть вам все детали окружения UI, потому просто приведу в пример одного из моих любимых скриптов.
Следующий макрос (его я положил в основу моего аддона CCWarn), прошепчет всем в вашем рейде просьбу сменить цель, если она совпадает с вашей. Это поможет им избежать сбивания с монстра состояния овцы, которое накладывает этот макрос.

/cast Polymorph
/run for i=1,GetNumRaidMembers()-1 do local u,t=”raid”..i,”target”if UnitIsUnit(u..t,t)then SendChatMessage(”Change targets! Trying to sheep…”,”WHISPER”,nil,UnitName(u))end end



Есть две причины, по которым все выглядит крайне запутанным. Первая – ограничение в 255 символов; вам часто придется «срезать углы» чтобы засунуть ваш макрос в этот предел. Вторая – необходимо чтобы весь скрипт находился на в одной строке. При более идеальных условиях, этот скрипт мог бы выглядеть так:
for i = 1, GetNumRaidMembers() - 1 do
local unit = “raid”..i
if UnitIsUnit(unit..”target”, “target”) then
SendChatMessage(”Change targets! Trying to sheep…”, “WHISPER”, nil, UnitName(unit))
end
end
__________________

Комментариев нет:

Отправить комментарий