Модератор форума: staford11 |
Форум Хитрости Пиратских серверов Читы для WoW Использование Lua скриптов. |
Использование Lua скриптов. |
Цитата for a=1,3 do local partyUnit = "party"..a local enabled = GetSpellCooldown("Прыжок") local inRange = IsSpellInRange("Прыжок", partyUnit) if UnitDebuff(partyUnit, "Дезориентирующий выстрел") then if enabled==0 then if inRange==1 then RunMacro("Прыжок") end end end end end Cоответственно еще нужно создать обычный макрос с названием "Прыжок" /cast Leap /petstay
Сообщение # 663 написано 25.02.2015 в 14:12
|
Помогите пожалуйста отредактировать этот скрипт так, чтобы ловился исключительно блайнд который кинули в меня (сейчас он реагирует на все "левые" блайнды, дипфризы, койлы и тд и ванишит)
За ранее большое спасибо. С меня естественно + if not frame then frame = CreateFrame("Frame") end local onEvent = function(self, event, ...) if (event == "COMBAT_LOG_EVENT_UNFILTERED") then local timestamp, type, sourceGUID, sourceName, sourceFlags, destGUID, destName, destFlags = select(1, ...) if (type == "SPELL_CAST_SUCCESS") then local spellId, spellName, spellSchool = select(9, ...) if spellName == "Каждый за себя" or spellName == "PvP-аксессуар" and UnitName("target") == sourceName then if UnitName("target") == sourceName then CastSpellByName ("Ослепление") CastSpellByName ("Удар по почкам") CastSpellByName ("Подлый трюк") else if UnitIsEmeny("target", "player") then ClearTarget() RunMacro ("Target") end end end if spellName == "Ослепление" or spellName == "Подлый трюк" or spellName == "Удар по почкам" or spellName == "Лик смерти" or spellName == "Глубокая заморозка" or spellName == "Глубинный ужас" and UnitName("player") == destName then CastSpellByName ("Исчезновение") CastSpellByName ("Исчезновение") CastSpellByName ("Исчезновение") end end end end frame:SetScript("OnEvent", onEvent) frame:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED") frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED") frame:UnregisterEvent("UNIT_SPELLCAST_SUCCEEDED") frame:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED") ________________________________________________________________________________ |
Код if not UnitDebuff("target", "Прикосновение вампира") then CastSpellByName("Прикосновение вампира") end if not UnitDebuff("target", "Всепожирающая чума") then CastSpellByName("Всепожирающая чума","target") end if UnitDebuff("target", "Прикосновение вампира") and UnitDebuff("target", "Всепожирающая чума") then CastSpellByName("Пытка разума","target") end Добавлено (25.02.2015, 16:49) добавь условие destGUID == UnitGUID("player") или destName == UnitName("player") Добавлено (25.02.2015, 17:01) если id то без кавычек через запятую
Сообщение # 665 написано 25.02.2015 в 17:01
|
добавь условие destGUID == UnitGUID("player") или destName == UnitName("player") if spellName == "Ослепление" or spellName == "Подлый трюк" or spellName == "Удар по почкам" or spellName == "Лик смерти" or spellName == "Глубокая заморозка" or spellName == "Глубинный ужас" and UnitName("player") == destName then CastSpellByName ("Исчезновение") В конце вроде есть такое правило. Может я что то делаю не правильно. Не сочти за наглость, если тебя не затруднит исправь и процитируй правильный скрипт пожалуйста. Спасибо большое. |
PaulDousen, Спасибо понял свои ошибки, все получилось.
Код #showtooltip Прикосновение вампира /run if GetSpellCooldown("Прикосновение вампира")==0 and not UnitDebuff("target", "Прикосновение вампира") then CastSpellByName("Прикосновение вампира") end /run if GetSpellCooldown("Всепожирающая чума")==0 and not UnitDebuff("target", "Всепожирающая чума") then CastSpellByName("Всепожирающая чума","target") end /run if GetSpellCooldown("Пытка разума")==0 and UnitDebuff("target", "Прикосновение вампира") and UnitDebuff("target", "Всепожирающая чума") then RunMacroText("/cast [nochanneling:Пытка разума] Пытка разума", "target") end
Сообщение # 667 написано 25.02.2015 в 20:29
|
PaulDousen, Помоги если не трудно еще с одним вопросом.
Я на писал по образцу вот это Код function Destroy(self, elapsed) local enabled = GetSpellCooldown("Слово Тьмы: Боль") local Debuff = select(4,UnitBuff("player",GetSpellInfo(15258))) if UnitBuff("player",GetSpellInfo(15258)) then if enabled == 0 and Debuff == 5 then RunMacroText("/cast Слово Тьмы: Боль") end end end CreateFrame("Frame", "DestroyFrame") DestroyFrame:SetScript("OnUpdate", Destroy) Он спамит постоянно при тех условиях которые я задал Слово Тьмы: Боль, моих знаний не хватает чтобы заставить этот адский скрипт остановиться если есть на цели Слово Тьмы: Боль, если не трудно подскажи как это сделать или пример при веди там уже дальше сам разберусь. Или если можно как то реализовать это в вот в этом макросе Код #showtooltip Прикосновение вампира /run if GetSpellCooldown("Прикосновение вампира")==0 and not UnitDebuff("target", "Прикосновение вампира") then CastSpellByName("Прикосновение вампира") end /run if GetSpellCooldown("Всепожирающая чума")==0 and not UnitDebuff("target", "Всепожирающая чума") then CastSpellByName("Всепожирающая чума","target") end /run if GetSpellCooldown("Пытка разума")==0 and UnitDebuff("target", "Прикосновение вампира") and UnitDebuff("target", "Всепожирающая чума") then RunMacroText("/cast [nochanneling:Пытка разума] Пытка разума", "target") end /run if GetSpellCooldown("Слово Тьмы: Боль")==0 and select(4,UnitBuff("player",GetSpellInfo(15258)))==5 then CastSpellByName("Слово Тьмы: Боль", "target") end Так чтобы он не спамил его постоянно.
Сообщение # 669 написано 26.02.2015 в 01:19
|
Доброго времени суток. Помогите пожалуйста исправить вторую половину скрипта (автованиш) чтобы он ванишил только то, что дали именно в меня а не "левые". Может что дописать надо или исправить. За ранее большое спасибо. С меня +.
if not frame then frame = CreateFrame("Frame") end local onEvent = function(self, event, ...) if (event == "COMBAT_LOG_EVENT_UNFILTERED") then local timestamp, type, sourceGUID, sourceName, sourceFlags, destGUID, destName, destFlags = select(1, ...) if (type == "SPELL_CAST_SUCCESS") then local spellId, spellName, spellSchool = select(9, ...) if spellName == "Каждый за себя" or spellName == "PvP-аксессуар" and UnitName("target") == sourceName then if UnitName("target") == sourceName then CastSpellByName ("Ослепление") CastSpellByName ("Подлый трюк") CastSpellByName ("Удар по почкам") CastSpellByName ("Парализующий удар") else if UnitIsEmeny("target", "player") then ClearTarget() RunMacro ("Target") end end end if spellName == "Ослепление" or spellName == "Подлый трюк" or spellName == "Удар по почкам" or spellName == "Лик смерти" or spellName == "Глубокая заморозка" or spellName == "Глубинный ужас" and UnitName("player") == destName then CastSpellByName ("Исчезновение") CastSpellByName ("Исчезновение") CastSpellByName ("Исчезновение") end end end end frame:SetScript("OnEvent", onEvent) frame:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED") frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED") frame:UnregisterEvent("UNIT_SPELLCAST_SUCCEEDED") frame:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
Сообщение # 670 написано 26.02.2015 в 13:55
|
Pachela13 в данном скрипте несколько изъянов:
1. Ловиться абсолютно всё что указано в независимости в тебя кастовали или в маникен. 2. После того как противник юзает триню даётся блинд, но сразу же дается чип шот, удар по почкам и тд по списку не прекращаясь. Почему то после блинда каст не останавливается. Если кому то по силам исправить и довести до ума данный скрипт, огромная просьба, сделайте это пожалуйста! Или же скиньте аналогичные рабочие скрипты. В обоих случаях буду вам крайне признателен. |
Light117. А ты что считаешь себя каким то особенным? Раз на то дело пошло не надо было создавать тему. Тут люди просят о помощи а не о критике. Так что будь любезен или помоги или не пиши всякую ересь. Это то, до чего нужно дойти самому... На страницах изложены десятки видов скриптов, на основе которых можно сделать скрипты под личные нужды. Но вместо того чтобы включить мозг и попробовать разобраться, вы попрошайничаете.
Нажатие на кнопку "запомнить пароль" не поможет вам запомнить пароль
Сообщение # 678 написано 27.02.2015 в 17:31
|
А кто говорит что я не пытался? Я пытался, и не раз. Если бы у меня получилось сделать то, что я хочу то я бы не писал сюда. Я пишу не от того что мне нечего делать. Я и написал помогите разобраться. Что бы скрипт реагировал только на тебя то просто добавь в условие что destGUID(означает юнита В КОТОРОГО направлен спелл/атака) должен совпадать с твоим GUID: destGUID==UnitGUID("player") --здесь мы сравниваем цель назначения каста. Если кастуют в тебя значит условие выполнено. Для этого ты должен добавить это в одно из условий перед функцией юза спелла. Например в это: if UnitName("target") == sourceName and destGUID==UnitGUID("player") then далее.. Что бы кастовался какой то один из спелов нужно одно из этого(есть варианты и проще но они будут работать гораздо менее эффективно): 1. Добавить проверку на доступность спелов 2. Добавить проверку на то что один из спелов был произнесен 3. Какая-то экзотика на твой вариант Поэтому сначала ты должен определиться что тебе нужно. Добавлено (28.02.2015, 00:06) Парни, автофейк нынче платный? Если не сильно разбираешься в LUA, возможно ли его написать? Говорили, что не сложно... Не будет он работать на 99% серверах. И дело не только в задержке. На пример на циркуле отсутствует флайтайм у подобных атак, а если даже флайтам есть то пинг выше 80 не даст использовать его корректно. Скрипт пишется ЭЛЕМЕНТАРНО и основывается на стандартном анфильтер_лог_комбат, все просто. Условие состоит в том что если ЦЕЛЬ кастинг ИНТЕРРАПТ then SpellStopCasting() много много раз. Все. И успокойтесь пожажа. Добавлено (28.02.2015, 00:09) Ребят а есть возможность вернуть хп target, я так понял Код UnitHealth,UnitHealth только для игрока , домашним животным , и членов группы / рейда ???? Не понял вопроса, вернуть хп чье? Хп возвращают функции UnitHealth(Unit) Или о чем ты? |
Что бы скрипт реагировал только на тебя то просто добавь в условие что destGUID(означает юнита В КОТОРОГО направлен спелл/атака) должен совпадать с твоим GUID: destGUID==UnitGUID("player") --здесь мы сравниваем цель назначения каста. Если кастуют в тебя значит условие выполнено. Для этого ты должен добавить это в одно из условий перед функцией юза спелла. Например в это: if UnitName("target") == sourceName and destGUID==UnitGUID("player") then далее.. Что бы кастовался какой то один из спелов нужно одно из этого(есть варианты и проще но они будут работать гораздо менее эффективно): 1. Добавить проверку на доступность спелов 2. Добавить проверку на то что один из спелов был произнесен 3. Какая-то экзотика на твой вариант Поэтому сначала ты должен определиться что тебе нужно. Я тут попробовал упростить его сделал скрипт подобного рода: local Test = CreateFrame("Frame"); local OnEvent = function(self, event, unit, spell) if unit == "player" then return; end if UnitName("target") == sourceName and destGUID==UnitGUID("player") and spell == "Каждый за себя" or "PvP-аксессуар" then if ( event == "UNIT_SPELLCAST_SUCCEEDED" ) then CastSpellByName("Ослепление") CastSpellByName("Подлый трюк") CastSpellByName("Удар по почкам") CastSpellByName("Парализующий удар") end end end Test:SetScript("OnEvent", OnEvent) Test:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED") Его смысл в том, чтобы давать один из вышеперечисленных спелов, после того как противник прожимает триню. Покажи пожалуйста, как сделать проверку на то, что один из спелов был произнесен и чтобы кастовало в моего противника, который у меня в таргете и атакует именно меня (а не так, чтобы кастовало исключительно по таргету в независимости от того бьет меня этот игрок или нет) и после успешного завершения касты прекращались. Даже бывает такое, что иногда он вообще ничего не кастует после того как противник прожал триню. Или рандомно кидает один из кастов в ходе боя, в независимости от того использовал противник триню или нет, этот вопрос тоже остается для меня загадкой. Или для данного скрипта лучше использовать скрипт подобной формы? SpellBase = {"PvP-аксессуар" or "Каждый за себя"} SpellFrame = CreateFrame("Frame", "FrameSpell", UIParent); SpellFrame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED"); SpellFrame:SetScript("OnEvent", function(self, event, arg1, arg2, ...) if(event=="COMBAT_LOG_EVENT_UNFILTERED") then for s = 1,#SpellBase do local name = UnitName("player") if arg2 == "SPELL_CAST_SUCCESS" and name ~= arg4 and name == arg7 and arg10 == SpellBase[s] then local enabled = GetSpellCooldown("Ослепление") if enabled == 0 then CastSpellByName("Ослепление") end end end end end) Но он почему то не работатет. |
Всем добрый день!
Такой вопрос - пытался создать скрипт для шс (spell=36563) +кик (spell=1766) по фокусу, в определенные касты (в одном скрипте не получилось это все реализовать, выдавал все в чат, потому принял решение разделить, сделав в 1м скрипте вызов второго). Все бы ничего, но он работал либо на любой каст фокуса, игноря спеллы, которые я указал, либо работала только 1я часть, т.е. шс к фокусу, прочел всю тему, но так и не смог понять, где я что сделал не так За основу был взят скрипт из первого поста, он работает, но кикает, опять же, любой каст, который начинает таргет\фокус: |
PaulDousen, Ну вот к примеру
Код /run if GetSpellCooldown("Похищение души")==0 then RunMacroText("/cast [nochanneling:Похищение души] Похищение души", "target") end Можно ли добавить проверку хп чтобы кастовало при 25% ? |
Код /run if GetSpellCooldown("Похищение души")==0 and UnitHealth("target")<= 5000 then RunMacroText("/cast [nochanneling:Похищение души] Похищение души", "target") end Вроде бы так Добавлено (28.02.2015, 16:21) --------------------------------------------- Код function Kick(self, elapsed) local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("focus") local enabled = GetSpellCooldown("Пинок") local inRange = IsSpellInRange("Пинок", "focus") if spell == "Спелл" or spell == "Спелл" or spell == "Спелл" or spell == "Спелл" or spell == "Спелл" then if interrupt == false and enabled == 0 and inRange == 1 then RunMacro("Kick") end end end CreateFrame("Frame", "KickFrame") KickFrame:SetScript("OnUpdate", Kick) Там 5 "Спеллов" Пиши туда именно те, которые нужно тебе сбивать и добавляй таким же образом (or spell == "Спелл"). Создаешь макрос "Kick" ну наверное ты знаешь что там: Код /cast [target=focus] ШС /cast [target=focus] Пинок вроде должно работать как надо
Нажатие на кнопку "запомнить пароль" не поможет вам запомнить пароль
|
Либо так Код /run if GetSpellCooldown("Похищение души")==0 and 100*UnitHealth("target")/UnitHealthMax("target")<=25 then RunMacroText("/cast [nochanneling:Похищение души] Похищение души", "target") end Что бы получить хп цели в процентах: 100*UnitHealth("target")/UnitHealthMax("target") Добавлено (28.02.2015, 16:46) --------------------------------------------- SpellBase = {"PvP-аксессуар" SpellFrame = CreateFrame("Frame", "FrameSpell", UIParent); SpellFrame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED"); SpellFrame:SetScript("OnEvent", function(self, event, arg1, arg2, ...) if(event=="COMBAT_LOG_EVENT_UNFILTERED") then for s = 1,#SpellBase do local name = UnitName("player") if arg2 == "SPELL_CAST_SUCCESS" and name ~= arg4 and name == local enabled = GetSpellCooldown("Ослепление") if enabled == 0 then CastSpellByName("Ослепление") end end end end end) исправление самых явных ошибок наглядно Код SpellFrame = CreateFrame("Frame", "FrameSpell", UIParent); SpellFrame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED"); SpellFrame:SetScript("OnEvent", function(self, event, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10 ...) --объявил все до 10го аргумента, лень было делать покрасивше, но суть ты понял. if(event=="COMBAT_LOG_EVENT_UNFILTERED") then local SpellBase = {"PvP-аксессуар","Каждый за себя"} --если ты объявляешь массив то перечисление идет через запятую, а не or или and, ибо это не условие. А объявлять подобные переменные лучше в теле функции, а не до ее начала. for s = 1, #SpellBase do local name = UnitName("player") if arg2 == "SPELL_CAST_SUCCESS" and name ~= arg4 and name == arg7 and arg10 == SpellBase[s] then --здесь ты используешь arg4,7,10, но они не объявлены, значит нужно объявить, смотри 3ю строчку local enabled = GetSpellCooldown("Ослепление") if enabled == 0 then CastSpellByName("Ослепление") --к сожалению на личе не помню как, но вроде нужно указывать юнита, например CastSpellByName("Ослепление","target") end end end end end) Добавлено (28.02.2015, 16:54) Что бы произносилось в твой таргет достаточно указать 2й аргумент функции CastSpellByName(спеллнейм,цель) А вот что бы именно того который атакует тебя нужно будет добавить проверку на цельцели, но это наипростейшее решение, я обычно такими не пользовался, я привык описывать детальные условия и громоздкие, поэтому точнее не смогу сказать как нужно именно тебе Добавлено (28.02.2015, 16:55) верно Добавлено (28.02.2015, 16:56) Ответил в самом начале этого поста, думаю заметишь, там указано как получить % хп цели |
Либо так Код /run if GetSpellCooldown("Похищение души")==0 and 100*UnitHealth("target")/UnitHealthMax("target")<=25 then RunMacroText("/cast [nochanneling:Похищение души] Похищение души", "target") end Что бы получить хп цели в процентах: 100*UnitHealth("target")/UnitHealthMax("target") Я кстати на ходил это где то тут в теме но мозгов не хватило реализовать, спасибо за подсказку.
Сообщение # 687 написано 28.02.2015 в 16:57
|
Спасибо, частично скрипт начал работать именно так, как нужно, но осталась проблема - он не начинается, если таргет вне зоны действия кика, т.е. шс+кик он юзает только в зоне действия самого кика)) Подозреваю, что дело в этой части: Код if interrupt == false and enabled == 0 and inRange == 1 then Но пока не могу дотумкать, как прикрутить юз этого макро (шс+кик по фокусу) не из мили зоны, а с ренджа, когда я не достаю
Сообщение # 688 написано 28.02.2015 в 17:49
|
Кстати, а в этих скриптах возможна проверка не по таргетам, а по арена фреймам? Т.е., к примеру, делается проверка арена1-3 на блэйдшторм и туда суется дизарм, если на ком-то он есть? Видел что-то подобное тут (бш - дизарм), но моя жопорукость не позволила воспроизвести на практике=\
Добавлено (28.02.2015, 17:57)
Сообщение # 690 написано 28.02.2015 в 17:57
|
| |||