shuraken007 345 Report post Posted July 1, 2016 ну можно я думаю, но это будет зависеть от кастбара, ведь много есть разных аддонов, что его могут модифицировать, а разве стандартный кастбар показывает автошот? 0 Share this post Link to post Share on other sites
girk 2 Report post Posted July 2, 2016 ну можно я думаю, но это будет зависеть от кастбара, ведь много есть разных аддонов, что его могут модифицировать, а разве стандартный кастбар показывает автошот? Стандартный не показывает, я пользуюсь rais_AutoShot, он более стабильно работает чем bigtrouble. 0 Share this post Link to post Share on other sites
фткyн 1,469 Report post Posted July 2, 2016 ^автор писал что он по другому алгоритму работает, специально под пиратки писался. 0 Share this post Link to post Share on other sites
iki201 7 Report post Posted July 2, 2016 подскажите как взять значение из декурсива (arg1 == SPELL_FAILED_LINE_OF_SIGHT) в макрос, а вообще можно в макрос брать значения из аддонов (чтобы не писать отдельный аддон) /script arg1 = Dcr_OnEvent (event) if arg1 == 0 then CastSpellByName("Multi Shot") end function Dcr_OnEvent (event) local Frame = this; -- Dcr_debug_bis ("Event was catch: " .. event); if (event == "UNIT_PET" and arg1 == "player" and not Dcr_CheckingPET) then Dcr_CheckingPET = true; Dcr_debug_bis ("PLAYER pet detected! Poll in 2 seconds"); return; elseif (event == "UNIT_PET" and (arg1 ~= "player" or Dcr_CheckingPET)) then return; elseif (event == "PLAYER_ENTER_COMBAT") then Dcr_EnterCombat(); return; elseif (event == "PLAYER_LEAVE_COMBAT") then Dcr_LeaveCombat(); return; elseif (event == "UI_ERROR_MESSAGE") then if (arg1 == SPELL_FAILED_LINE_OF_SIGHT) then Dcr_errln("Out of sight!"); Dcr_SpellCastFailed(); end спасибо 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted July 2, 2016 (edited) Очевидно что надо в аддоне куда-то записать в нужный момент значение, по другому никак. Если ты часто такой трюк будешь проворачивать - заведи массив для подобных переменных, к примеру VarsForMacro={} и сделать вставку if not VarsForMacro then VarsForMacro = {} end VarsForMacro.ErrorMessage = nil function Dcr_OnEvent (event) ............................ ну и в нужный момент записывать elseif (event == "UI_ERROR_MESSAGE") then VarsForMacro.ErrorMessage = arg1 if (arg1 == SPELL_FAILED_LINE_OF_SIGHT) then Dcr_errln("Out of sight!"); Dcr_SpellCastFailed(); end Соответственно из макроса видно массив этот, пользуйся там VarsForMacro.ErrorMessage Если переменная не локальная - она видна отовсюду - оно всё варится в одном котле так сказать. Edited July 2, 2016 by shuraken007 0 Share this post Link to post Share on other sites
Eynschteyn 0 Report post Posted July 3, 2016 Всем привет. Помогите с макросом для друида ферала хочу что то на подобии такого макроса (/cast [nostealth] Shred; [stealth] Ravage) сделать 2 способности на одну кнопку этот макрос не работает сам пробовал на англ клиенте в общем помогите кто может ) 0 Share this post Link to post Share on other sites
фткyн 1,469 Report post Posted July 3, 2016 /каст раваж /каст шред 1 Share this post Link to post Share on other sites
Beermen 253 Report post Posted July 3, 2016 (edited) /script time_to_shoot = TestAddon.GetTimeToShoot() if time_to_shoot > 0.5 then CastSpellByName("Multi Shot") end ну или какой там зазор времени надо, больше 0.5 наверное, сколько там мультик кастится там просили за аймедшот, мы немного подровняли скрипт script time_to_shoot = TestAddon.GetTimeToShoot() if time_to_shoot > 0.9 then CastSpellByName("Aimed Shot") end очень удобная штука, единственный недостаток нельзя начать пул с аймеда Edited July 3, 2016 by Beermen 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted July 3, 2016 (edited) Ну так это легко подправить. В TestAddon.autoshot хранится инфа - врублен ли автошот или нет. if time_to_shoot > 0.9 or (not TestAddon.autoshot) then ... end Может скобки () лишние, не у компа ща. Edited July 3, 2016 by shuraken007 1 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted July 5, 2016 Прикрутил аимд шот к стандартному кастбару, обозвав аддон заодно Better Aimed Shot. если кому интересно - может глянуть код, там идет перехват(hook) функции UseAction чтобы узнать когда клацнули на каст, потом рассчитывается коэффециент изменение скорости (стандартная берется из описания пушки и описания колчана, а модифицированная бафами всякими на скорость возвращает функция известная, и еще сделал учет пинга в 0.2). Далее запускается на кастбар, кусок на запуск кастбара скопирован из близзардовского одноименного аддона, который по умолчанию. макрос в новых условиях /script time_to_shoot = BAS.GetTimeToShoot() if time_to_shoot > 0.9 or (not BAS.autoshot) then CastSpellByName("Aimed Shot") end BAS.zip 3 Share this post Link to post Share on other sites
фткyн 1,469 Report post Posted July 5, 2016 Шура, а к агуфу можешь патитаргет прикрутить? Луна коряво почему-то работает и не нравится. 0 Share this post Link to post Share on other sites
girk 2 Report post Posted July 6, 2016 Подскажите что означает каждая цифра for i = 1,10,1 do Target... 0 Share this post Link to post Share on other sites
girk 2 Report post Posted July 7, 2016 (edited) Почитал я про loop, назначение цифр понятно, однако появились вопросы с синтаксисом скрипта. Пытаюсь задать скрипт вылавливающий врагов целью которых я не являюсь и переключающийся атаковать эти цели если они найдены, если нет лупит прежнюю цель, но клиент при работе скрипта начинает тормозить. Edited July 7, 2016 by girk 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted July 7, 2016 (edited) ты когда на макрос клацаешь клиент его выполняет, то есть он перестаёт работать и выполняет только твой скрипт. Соответственно если тупо прописать какой-нибудь цикл на 100500 пустых итераций - клиент зафризит. При переборе таргетов вызывается близзардовский аддон, и это дело надо хукать и отрубать, чтобы снять нагрузку. Пример в хантовском аддоне ICU.(Всмысле на каждой смене таргета идёт перерисовка фрейма, и это сильно само по себе уже тормозит) И надо поставить задержки от спама через GetTime() хотя бы, чтобы ты мог прожать макрос раз в 0.01 секунду например, или что-нить в этом духе. Я бы вобще не рисковал брать больше одной цели за одно нажатие. Edited July 7, 2016 by shuraken007 0 Share this post Link to post Share on other sites
girk 2 Report post Posted July 8, 2016 (edited) shuraken007 Переделал я твой первый аддон для аимеда под варовский Slam, только почему то нивкакую не хочет выполнять условие UnitMana("player") >= 20 лупит им когда вздумается, иногда при 15 раги, а иногда (видимо из за пинга) доходит до 30+ раги и лупит несколько слэмов подрят, соответственно белый дамаг пропускается. Вроде другие скрипты подхватывают условие на количество раги. Edited July 8, 2016 by girk 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted July 8, 2016 (edited) Ну пока я не увижу макрос, и переделанный аддон - я не пойму что не так, UnitMana должна корректно возвращать. По идее каст должен корректно ловить - я специально извращался чтобы не было привязки к конкретному спеллу. А вот автоатаки не уверен, что ловит, кажется автошоты отличаются от автоатаки. И ещё - нахрена мой аддон приделывать к Слэму - там ведь и так кастбар пашет. Надо что ли, чтобы он с мейнхенда, а не оффхенды работал? Edited July 9, 2016 by shuraken007 0 Share this post Link to post Share on other sites
girk 2 Report post Posted July 9, 2016 (edited) Ну пока я не увижу макрос, и переделанный аддон - я не пойму что не так, UnitMana должна корректно возвращать. По идее каст должен корректно ловить - я специально извращался чтобы не было привязки к конкретному спеллу. А вот автоатаки не уверен, что ловит, кажется автошоты отличаются от автоатаки. И ещё - нахрена мой аддон приделывать к Слэму - там ведь и так кастбар пашет. Надо что ли, чтобы он с мейнхенда, а не оффхенды работал? То есть PLAYER_ENTER_COMBAT и PLAYER_LEAVE_COMBAT будет криво снимать показания?(по сути только эти ивенты заменены и все ну и mainSpeed = UnitAttackSpeed("player")) По поводу зачем слэм прикручивать, дело в том что нужно кастить слэм как можно ближе к вылету мили атаки, потому что следующий мили начинает рассчитываться с самого начала после окончания слэма. (хз может это особенность пираток) Edited July 9, 2016 by girk 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted July 9, 2016 (edited) Достаточно поставить аддон AttackBar. local mh, oh if not Abar_Mhr.et then mh = 0 else mh= Abar_Mhr.et-GetTime() end if not Abar_Oh.et then oh = 0 else oh= Abar_Oh.et-GetTime() end if not mh or mh < 0 then mh = 0 end if not oh or oh < 0 then oh = 0 end Вот отсюда можно узнать сколько осталось до удара основной рукой, и офххендной, значения mh и oh Можно легко отсюда сделать твой рассчет. if mh <= 1.5 or (oh > 0 and oh <= 1.5) and UnitMana("player") >= 20 then CastSpellByName("Slam") end код выше либо оформить в функцию, запихнув в какой-нить аддон function TestAddon.GetMhOh() local mh, oh if not Abar_Mhr.et then mh = 0 else mh= Abar_Mhr.et-GetTime() end if not Abar_Oh.et then oh = 0 else oh= Abar_Oh.et-GetTime() end if not mh or mh < 0 then mh = 0 end if not oh or oh < 0 then oh = 0 end return mh, oh end /script local mh,oh = TestAddon.GetMhOh() if mh <= 1.5 or (oh > 0 and oh < 1.5) and UnitMana("player") >= 20 then CastSpellByName("Slam") end либо в супермакро так вбить, разумеется в одной строке /script local mh, oh if not Abar_Mhr.et then mh = 0 else mh= Abar_Mhr.et-GetTime() end if not Abar_Oh.et then oh = 0 else oh= Abar_Oh.et-GetTime() end if not mh or mh < 0 then mh = 0 end if not oh or oh < 0 then oh = 0 end if mh <= 1.5 or (oh > 0 and oh < 1.5) and UnitMana("player") >= 20 then CastSpellByName("Slam") end Мне кажется переделывать тот аддон мало смысла, там сильная привязка к хантам все таки. Edited July 9, 2016 by shuraken007 0 Share this post Link to post Share on other sites
girk 2 Report post Posted July 9, 2016 Достаточно поставить аддон AttackBar. Вот отсюда можно узнать сколько осталось до удара основной рукой, и офххендной, значения mh и oh Можно легко отсюда сделать твой рассчет. if mh <= 1.5 or (oh > 0 and oh <= 1.5) and UnitMana("player") >= 20 then CastSpellByName("Slam") end код выше либо оформить в функцию, запихнув в какой-нить аддон /script local mh, oh = TestAddon.GetMhOh() if mh <= 1.5 or (oh > 0 and oh < 1.5) and UnitMana("player") >= 20 then CastSpellByName("Slam") end Чет ошибку выдает. 0 Share this post Link to post Share on other sites
girk 2 Report post Posted July 9, 2016 TestAddon.GetMhOh() (a nil value) 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted July 9, 2016 (edited) Потому что ты эту функцию никуда не вставил, или если и вставлял то не в аддон TestAddon. Просто ради удобства в начале аддона заводят массив с его именем. Например TestAddon={} И потом туда пихают и переменные:TestAddon.a = 10 и функции: function TestAddon.testfunc() ... end Таким образом исключают возможность пересечения имён переменных и функций с другими аддонами, да и обращение к глобальным переменным идёт дольше. Если ты запихивал в BAS аддон, то пиши function BAS.GetMhOh() ... end Edited July 9, 2016 by shuraken007 1 Share this post Link to post Share on other sites
girk 2 Report post Posted July 9, 2016 (edited) или если и вставлял то не в аддон TestAddon. Ок, спасибо (просто ты написал в какойнить адддон я в любой и впихнул) Но в других аддонах я создаю функции с любым именем (ну конешно стараюсь с необычным) и всегда их подхватывало, не нужно было вставлять в одноименный. Edited July 9, 2016 by girk 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted July 9, 2016 (edited) Оффтоп Я вобщем тут наднях копался с Ace библиотекой, и забрёл вот сюды: http://old.wowace.com/Coding_TipsТут говорится, что доступ к локальным переменным за O(1), а к глобальным за O(log n)ctrl+f+ _G Edited July 10, 2016 by shuraken007 0 Share this post Link to post Share on other sites
lilia 1 Report post Posted July 12, 2016 Помогите с макросом - замучалась уже Нужно на Tab сделать - Цель Ближайший враг + автоатака и что бы при повторном нажатии на tab цель менялась если их несколько, а автоатака не выключалась спасибо 1 Share this post Link to post Share on other sites
feycot 172 Report post Posted July 12, 2016 /script TargetNearestEnemy() /script if not IsCurrentAction(X) then AttackTarget() end; Где X - номер слота экшнбара в котором автоатака. 0 Share this post Link to post Share on other sites