godlike_playing 852 Report post Posted September 27, 2014 наваяйте ктонить макрос на екип оружия в оффхенд пожалуйста 0 Share this post Link to post Share on other sites
Darniuss 495 Report post Posted October 1, 2014 Тебе же уже Анрей писал /eqoff [77.7 dps dagger]SuperMacro нужен. 0 Share this post Link to post Share on other sites
фткyн 1469 Report post Posted October 1, 2014 Только он немного коряво работает, я не помню что там коряво, но коряво. 0 Share this post Link to post Share on other sites
crucialdude 31 Report post Posted October 4, 2014 Можно ли сделать макрос, позволяющий отображать серверное время в чат, а также делать это с оффсетом (то есть накидывать +час, + 5 мин и.т.д) ? Также нужна помощь с макросом на отображение секунд с последнего каста спирит хилера на бг, в API что-то есть такое, но сделать рабочий макрос не могу. 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted October 9, 2014 http://www.wowwiki.com/World_of_Warcraft_API?oldid=335546 вот все функции для взаимодействия с клиентом судя по всему так, или иначе - кликнуть на вещь придётся, а потом уже обработка клика идёт - можно и эту функцию вызвать, подтверждение, что вещь привяжется и т.д. Пересмотрел всё - можно все макросы, спеллы на панельках перемещать, вещи в сумках, а из лута нельзя. 2 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted October 9, 2014 (edited) crucialdude - а что касается тебя, то /script DEFAULT_CHAT_FRAME:AddMessage(GetAreaSpiritHealerTime()) Возвращает время в секундах, либо 0, либо что-то осмысленное когда мёртв и рядом с духом. /script local UTC = 120 local h, m = GetGameTime() all_t = h*60 + m + UTC h = ceil(all_t/60) - 1 if h >= 24 then h = h - 24 all_t = all_t - 24*60 end m = all_t - h*60 msg="124cff00FFFF["..h..":"..m.."]124r" DEFAULT_CHAT_FRAME:AddMessage(msg) Выводит время серверное со сдвигом UTC в минутах. Т.е. UTC = 125 - время со сдвигом в 2 часа с лишним к примеру(разумеется и назад тоже можно). Адекватно переводится в часо-минуты с учётом 00:00 перехода. Edited October 9, 2014 by shuraken007 3 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted October 9, 2014 (edited) А ещё можно получше сделать, но это потребует подключение аддона SuperMacro /script SLASH_SERVTIME1 = "/servtime" SLASH_SERVTIME2 = "/st" SlashCmdList["SERVTIME"] = function(message) _, _, UTC = string.find(message, "(%d+)") if not UTC then UTC = 0 end local h, m = GetGameTime() all_t = h*60 + m + UTC h = ceil(all_t/60) - 1 if h >= 24 then h = h - 24 all_t = all_t - 24*60 end m = all_t - h*60 msg="124cff00FFFF["..h..":"..m.."]124r" Printd(msg) end одно нажатие макроса - и можно писать в чат команды /st UTC /servtime UTS ну например /st - без сдвига, /st 45 - с 45-минутным сдвигом, если сдвиг не хочется каждый раз писать - то можно в макросе написать вместо if not UTC then UTC = 0 end ------> if not UTC then UTC = 45 end Update: /script SLASH_SERVTIME1 = "/servtime" SLASH_SERVTIME2 = "/st" SlashCmdList["SERVTIME"] = function(message) _, _, UTC = string.find(message, "(%d+)") if not UTC then UTC = 0 end local h, m = GetGameTime() all_t = h*60 + m + UTC h = ceil(all_t/60) - 1 if h >= 24 then h = h - 24 all_t = all_t - 24*60 end if h < 0 then h = h + 24 all_t = all_t + 24*60 end m = all_t - h*60 if h < 10 then h = "0"..tostring(h) end if m < 10 then m = "0"..tostring(m) end msg="124cff00FFFF["..h..":"..m.."]124r" Printd(msg) Edited October 9, 2014 by shuraken007 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted October 9, 2014 (edited) А вот - думаю наибольшая польза от такого макроса будет, ежели он сам будет в чат спамить с каким-то промеждутком время(опять таки нужен SuperMacro аддон. Дабы с бонгосами всякими не было конфликтов - убирай в настройках у аддона всё кроме показать кнопку в меню/на миникарте). Заодно нашёл пару ошибок - не читался отрицательный сдвиг и при скачке назад 00:00 были некорректные данные. /script SLASH_SERVTIME1 = "/servtime" SLASH_SERVTIME2 = "/st" SlashCmdList["SERVTIME"] = function(message) _, _, UTC = string.find(message, "([0-9%-]+)") if not UTC then UTC = 0 end SM_IN(10, [[/script local h, m = GetGameTime() all_t = h*60 + m + UTC h = ceil(all_t/60) - 1 if h >= 24 then h = h - 24 all_t = all_t - 24*60 end if h < 0 then h = h + 24 all_t = all_t + 24*60 end m = all_t - h*60 if h < 10 then h = "0"..tostring(h) end if m < 10 then m = "0"..tostring(m) end msg="124cff00FFFF["..h..":"..m.."]124r" Printd(msg)]], 1) end Тут где SM_IN(10, .......) вместо 10 надо вставить своё время - ну например раз в 3 минуты - вставь 180. жмякаешь макрос, нажимаешь например /st -60 и через 3 минуты появляется первое напечатанное время. В чат команду более одного раза не пиши - ибо в 2 раза чаще будут сообщения приходить. Дабы убрать это безумие - пропиши в чате /script ReloadUI() Edited October 10, 2014 by shuraken007 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted October 9, 2014 (edited) наваяйте ктонить макрос на екип оружия в оффхенд пожалуйста ну..без всяких доп аддонов оно выглядит не особо приятно - надо пройтись по всем сумкам - найти нужную вещь - поместить её на курсор, а затем надеть, как-то так: /run item_n = "Argent Avenger" for i=0,4 do for j=1,GetContainerNumSlots(i) do _,_,name = string.find(GetContainerItemLink(i,j) or "","%[(.+)%]") if(name==item_n) then PickupContainerItem(i,j) AutoEquipCursorItem() end end end Где вместо "Argent Avenger" своё имя вставляй, этим макросом достигается эффект клацанья правой мышкой по предмету с тем названием. А вообще проще поставить аддон Weapon Quick Swap дабы одеть два конкретных одноруча - пиши нечто вроде /script WeaponSwap("пуха1", "пуха2") если в руке ничего нет - это "" если похрен что там, то "*" т.е. одеть токо оффхенд без мейнхенда WeaponSwap("", "пуха2") оставить мейнхенд WeaponSwap("*", "пуха2") если надо переключаться между наборами пушек - то WeaponSwap("сет1_пуха1", "сет1_пуха2", "сет2_пуха1", "сет2_пуха2", "сет3_пух.."...) например двуруч указвается как "двуруч", "" readme почитай - там всё есть вобщем Edited October 10, 2014 by shuraken007 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted October 9, 2014 (edited) Почему не работает мини-аддон http://eu.battle.net/wow/en/forum/topic/3061919039 ?Я нашёл одну причину - использование IsStealthed() - и вроде исправил, но он всё равно не работает. Подозреваю, что дело в UPDATE_STEALTH, вернее в его отсутствии, и нужно использовать COMBAT_LOG_EVENT и SPELL_AURA_APPLIED. Я прав? Хелп! У нас нету функции IsStealthed(), InCombatLockdown(), time(), нет ивента "UPDATE_STEALTH", также (event, arg1, ...) , аргументы и троеточия не из этой оперы. Оно из новой версии луа, которую наш клиент не поддерживает. И вообще вроде написано всё через одно место. Зачем он настраивал невидимый фрейм тоже непонятно. Я подправил - теперь он работает, но с описанием не совпадает немного - хотя афкшить и периодически доставать/прятать пухи - довольно интересная идея, зачем оно в стелсе - ума не приложу, делать что ле нечего было. Мне лень дальше копаться, но думаю тебе будет интересно. Я там использовал PLAYER_AURAS_CHANGED - при получении/снятия стелса или любого другого бафа вызовется - ну и там нет проблем проверить - получил ты стелс или он пропал, ориентираясь на WasStealth. Хотя при переполнении строки бафов возможно актуальнее комбат лог, впрочем сомнительно, что стелс вытеснится. Нужен супермакро аддон, я использовал его ф-ю buffed Аддон: Sheats = {}local DotheSheat = time()function Sheats.OnLoad() this:RegisterEvent("PLAYER_AURAS_CHANGED") this:RegisterEvent("LOOT_OPENED") this:RegisterEvent("PLAYER_LEAVE_COMBAT") if buffed("Stealth", "player") then WasStealth = 1 endendfunction Sheats.OnEvent(event) if event == "PLAYER_AURAS_CHANGED" then if buffed("Stealth", "player") then DoSheat = -1 WasStealth = 1 else if WasStealth == 1 then DoSheat = 0; end WasStealth = 0 end elseif event == "LOOT_OPENED" then DoSheat = 0 elseif event == "PLAYER_LEAVE_COMBAT" then DotheSheat = GetTime() DoSheat = 1 endendfunction Sheats.OnUpdate() local what_class, _ = UnitClass("player"); if DoSheat == -1 then if GetTime() - DotheSheat > 2 then ToggleSheath(); DoSheat = 0; end elseif DoSheat == -2 then if GetTime() - DotheSheat > 2 then ToggleSheath(); DoSheat = -1; end end if DoSheat == 1 then if UnitAffectingCombat("player") then DotheSheat = GetTime(); else if what_class == "Rogue" then DoSheat = -2; ToggleSheath(); DotheSheat = GetTime(); elseif what_class == "Shaman" then DoSheat = 0; ToggleSheath(); DotheSheat = GetTime(); else DoSheat = -1; ToggleSheath(); DotheSheat = GetTime(); end end end end <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/....FrameXMLUI.xsd"> <Script file="WeaponSheat.lua"/> <Frame name="WeaponSheats_toggler" parent="UIParent" enableMouse="false" frameStrata="LOW" hidden="false" > <Size> <AbsDimension x="1" y="1" /> </Size> <Anchors> <Anchor point="CENTER" relativeTo="UIParent" > <Offset> <AbsDimension x="0" y="0" /> </Offset> </Anchor> </Anchors> <Scripts> <OnLoad> Sheats.OnLoad() </OnLoad> <OnEvent> Sheats.OnEvent(event) </OnEvent> <OnUpdate> Sheats.OnUpdate() </OnUpdate> </Scripts> </Frame></Ui> Хотя лучше даже <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/....FrameXMLUI.xsd"> <Script file="WeaponSheat.lua"/> <Frame name="WeaponSheatsFrame"> <Scripts> <OnLoad> Sheats.OnLoad() </OnLoad> <OnEvent> Sheats.OnEvent(event) </OnEvent> <OnUpdate> Sheats.OnUpdate() </OnUpdate> </Scripts> </Frame></Ui> ## Interface: 11200## Title: WeaponSheat## Notes: WeaponSheat## SavedVariables: ## SavedVariablesPerCharacter:WeaponSheat.luaWeaponSheat.xml А вот могу тебе ещё подкинуть пару своих функций для работы со временем: Таймеры: ShurakenPack.Timers={}function ShurakenPack.NewTimer(shuraken_pack_timer, shuraken_pack_time) ShurakenPack.Timers[shuraken_pack_timer] = {[1]=GetTime(), [2]=shuraken_pack_time}endfunction ShurakenPack.GetTimer(shuraken_pack_timer) local return_value if not ShurakenPack.Timers[shuraken_pack_timer] then return_value = nil else return_value = ShurakenPack.Timers[shuraken_pack_timer][2] - (GetTime() - ShurakenPack.Timers[shuraken_pack_timer][1]) if return_value<0 then return_value = nil tremove(ShurakenPack.Timers[shuraken_pack_timer]) tremove(ShurakenPack.Timers[shuraken_pack_timer]) ShurakenPack.Timers[shuraken_pack_timer] = nil end end return return_valueendfunction ShurakenPack.PrintTimers() for key, value in pairs(ShurakenPack.Timers) do if ShurakenPack.GetTimer(key) then Printd(key..": "..ShurakenPack.GetTimer(key)) end endend пример работы с ними: ShurakenPack.NewTimer("AntiSpam", 2) if not ShurakenPack.GetTimer("AntiSpam") then ... и ещё секундумеры ShurakenPack = {}ShurakenPack.Stopwatchs = {}function ShurakenPack.Stopwatch(stopwatch, start_or_stop) if start_or_stop and start_or_stop == "start" then if not ShurakenPack.Stopwatchs[stopwatch] then ShurakenPack.Stopwatchs[stopwatch] = {[1] = 0, [2] = GetTime(), [3] = 1} else if ShurakenPack.Stopwatchs[stopwatch][3] == 0 then ShurakenPack.Stopwatchs[stopwatch][2] = GetTime() ShurakenPack.Stopwatchs[stopwatch][3] = 1 end end elseif start_or_stop and start_or_stop == "stop" then if ShurakenPack.Stopwatchs[stopwatch] then ShurakenPack.Stopwatchs[stopwatch][1] = ShurakenPack.Stopwatchs[stopwatch][1] + ShurakenPack.Stopwatchs[stopwatch][3]*(GetTime() - ShurakenPack.Stopwatchs[stopwatch][2]) ShurakenPack.Stopwatchs[stopwatch][3] = 0 end endendfunction ShurakenPack.GetStopwatch(stopwatch) local return_value if not ShurakenPack.Stopwatchs[stopwatch] then return_value = nil else return_value = ShurakenPack.Stopwatchs[stopwatch][1] + ShurakenPack.Stopwatchs[stopwatch][3]*(GetTime() - ShurakenPack.Stopwatchs[stopwatch][2]) end return return_valueendfunction ShurakenPack.DelStopwatch(stopwatch) if ShurakenPack.Stopwatchs[stopwatch] then ShurakenPack.Stopwatchs[stopwatch][1] = nil ShurakenPack.Stopwatchs[stopwatch][2] = nil ShurakenPack.Stopwatchs[stopwatch][3] = nil ShurakenPack.Stopwatchs[stopwatch] = nil endendfunction ShurakenPack.PrintStopwatchs() for key, value in pairs(ShurakenPack.Stopwatchs) do if ShurakenPack.GetStopwatch(key) then Printd(key..": "..ShurakenPack.GetStopwatch(key)) end endend аналогично ShurakenPack.DelStopwatch("combat") ShurakenPack.Stopwatch("combat", "stop") ShurakenPack.Stopwatch("combat", "start") ShurakenPack.GetStopwatch("combat") Вобщем если это дело прихреначить к тому, то получится более понятная картина, удобнее должно быть. Edited October 10, 2014 by shuraken007 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted October 10, 2014 (edited) Да - оно из SuperMacro, лень было писать вручную, можешь написать так: первый макрос - вывод названия иконок - чтобы узнать как зовут иконку со стелсом /script i=1 while( UnitBuff("player", i) ) do icon, _ = UnitBuff("player", i) DEFAULT_CHAT_FRAME:AddMessage(icon) i = i + 1 end а в коде тогда уже вместо buffed нечто вроде i = 1Stealth = 0while(UnitBuff("player", i)) do icon, _ = UnitBuff("player", i) if string.find(icon, "Spell_Holy_DevotionAura") then (или "DevotionAura" - паловская бронеаура) Stealth = 1 break endendif Stealth == 1 then...end А вот в супермакро похитрее поступают - ведь можно читать надписи на всех иконках, если знать куда подключиться, в кратце оно выглядит как-то так /script SM_Tooltip:SetOwner(UIParent, "ANCHOR_NONE") SM_Tooltip:SetUnitBuff("player", 1) b = getglobal(SM_Tooltip:GetName().."TextLeft1"):GetText() DEFAULT_CHAT_FRAME:AddMessage( где SM_Tooltip <GameTooltip name="SM_Tooltip" frameStrata="TOOLTIP" hidden="true" parent="UIParent" inherits="GameTooltipTemplate"> <Scripts> <OnLoad> this:SetOwner(WorldFrame, "ANCHOR_NONE"); </OnLoad> </Scripts></GameTooltip> функция FindBuff( obuff, unit, item) в файле SM_Slash.lua, фрейм в SuperMacro.xml Edited October 10, 2014 by shuraken007 0 Share this post Link to post Share on other sites
crucialdude 31 Report post Posted February 6, 2015 Нужна помощь с макросом на /whisper с текстом текущему таргету, возможно ли такой сделать? 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted February 6, 2015 (edited) /script msg = "ку краб" tar_name = UnitName("target") if tar_name then SendChatMessage(msg, "WHISPER", "COMMON", tar_name) end Что-нить в этом духе. Если за орду, то "COMMON" смени на "ORCISH" Edited February 6, 2015 by shuraken007 2 Share this post Link to post Share on other sites
crucialdude 31 Report post Posted February 6, 2015 Спасибо, как всегда выручил 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted February 6, 2015 Можно даже сделать, чтобы по нажатию макроса всё что пишешь в чате переправлялось в личку таргета, по нажатию второму вновь чат нормализовался. 0 Share this post Link to post Share on other sites
crucialdude 31 Report post Posted February 7, 2015 Да не, это уже лишнее 0 Share this post Link to post Share on other sites
tunecx 3 Report post Posted February 7, 2015 было ли что то проверить владельца курса? 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted February 7, 2015 На дебафах ведь не написано кто хозяин? Надо отслеживать комбат лог внимательно, за временем следить, если есть мобы с одинаковыми именами, то это вобще почти нереально. Вобщем это аддончег надо пилить. 0 Share this post Link to post Share on other sites
Osiris62ru 0 Report post Posted February 9, 2015 Как сделать макрос с проверкой спелла на КД? Т.е. чтобы по умолчанию кастовать например mind blist, а если он на кд то Smite. /cast mind blast /cast smite работает, но всегда вылазит красное сообщение в центре экрана и это напрягает 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted February 9, 2015 (edited) чтоб узнать кд, надо знать номер спелла в спеллбуке /run sp="Mind BLast" i=1 while true do local spellN = GetSpellName(i, BOOKTYPE_SPELL) if not spellN then break end if string.find(spellN, sp) then SPELLN=i end i=i+1 end DEFAULT_CHAT_FRAME:AddMessage(SPELLN) тогда макрос выглядит как-то так, где mindblast_num число, найденное при юзе предыдущего макроса /script start, duration = GetSpellCooldown(mindblast_num, BOOKTYPE_SPELL) if duration and duration > 0 then CastSpellByName("Smite") else CastSpellByName("Mind BLast") end Можно написать макрос, который и сам найдет mindblast_num , точнее объеденить два предыдущих, но он уже больше 255 символов, нужен супермакро аддон p.s. мог перепутать имена спеллов малость, если что сам подправь Edited February 9, 2015 by shuraken007 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted February 10, 2015 (edited) Я бы не советовал запускать макрос от товарища выше, у вас удалятся все вещи в сумках. И вобще советую просматривать макросы на наличие DeleteCursorItem(). Да и штука эта, если не брать в рассчет удаление вещей - привязана к спеллу на 1-м слоте - там должен быть майндбласт, что неудобно, ибо надо 1 кнопко вместо 2-х, а тут всё равно 2. Понахватались тут всяких гадостей от меня. "Не дай Бог с дураком найти!" p.s. И вобще суммоню модератора какого-нить. Edited February 10, 2015 by shuraken007 0 Share this post Link to post Share on other sites
shuraken007 345 Report post Posted February 10, 2015 А ты уверен что у макросов корректно кулдаун отображается? Иногда это наибольшее кд спелла, что там кастится, но это в более менее простом коде. Часто вобще кд нету, ты проверял и пашет? 0 Share this post Link to post Share on other sites
Maus 855 Report post Posted February 11, 2015 Jorn Skyseer Очень отличная шутка с макросом на удаление всех вещей. Я его попробовал использовать и у меня почему-то удалилось ваше сообщение. Извините. 1 Share this post Link to post Share on other sites
Osiris62ru 0 Report post Posted February 11, 2015 (edited) чтоб узнать кд, надо знать номер спелла в спеллбуке /run sp="Mind BLast" i=1 while true do local spellN = GetSpellName(i, BOOKTYPE_SPELL) if not spellN then break end if string.find(spellN, sp) then SPELLN=i end i=i+1 end DEFAULT_CHAT_FRAME:AddMessage(SPELLN) тогда макрос выглядит как-то так, где mindblast_num число, найденное при юзе предыдущего макроса /script start, duration = GetSpellCooldown(mindblast_num, BOOKTYPE_SPELL) if duration and duration > 0 then CastSpellByName("Smite") else CastSpellByName("Mind BLast") end Можно написать макрос, который и сам найдет mindblast_num , точнее объеденить два предыдущих, но он уже больше 255 символов, нужен супермакро аддон p.s. мог перепутать имена спеллов малость, если что сам подправь Огромное спасибо! второй макрос работает как надо. по нажатии первого ничего не происходит. Поэтому номер спелла высчитал вручную в книге спеллов) Может кому пригодится: номер считается с первой страницы, сверху вниз, слева направо. При изучении нового заклинания номер может измениться Edited February 11, 2015 by Osiris62ru 0 Share this post Link to post Share on other sites
tunecx 3 Report post Posted February 11, 2015 (edited) макрос для БГ /script for i=1,10 do TargetNearestEnemy(); проверка UnitClass() и наличие дебафа, каст Curse;начинает притормаживать когда рядом много врагов. Что можно придумать вместо перебирания всех врагов заново на каждом нажатии? (Хотя в этом есть свой бонуст, т.к постоянно диспелят).Может лучше создавать список потенциальных целей каждые несколько секунд, и обновлять их? к тому же у нас есть окно в 1 ГКД.Если есть какие нибудь альтернативные подходы- пишите. Edited February 11, 2015 by tunecx 0 Share this post Link to post Share on other sites