Модератор форума: staford11 |
Форум Хитрости Пиратских серверов Читы для WoW Использование Lua скриптов. |
Использование Lua скриптов. |
Может кому то надо, пве ротация ханта. Для тех кому лень жать кнопки как и мне)
Код /run CastSpellByName("!Автоматическая стрельба");s="Глушащий выстрел";if(GetSpellCooldown(s)==0)then CastSpellByName(s)end;s="Убийственный выстрел";if(GetSpellCooldown(s)==0 and IsUsableSpell(s))then CastSpellByName(s)end;RunMacro("Hunt2")") Содержание макроса Hunt2 Код /run cd=GetSpellCooldown;s="Выстрел химеры";if(cd(s)==0)then CastSpellByName(s)end;s="Прицельный выстрел";if(cd(s)==0)then CastSpellByName(s)end;s="Команда \"Взять!";if(cd(s)==0)then CastSpellByName(s)end;CastSpellByName("Верный выстрел")") Код #showtooltip Омоложение /run for r=0,24 do GetNumRaidMembers(); if (UnitHealth("raid"..r)/UnitHealthMax("raid"..r)) <0.95 and IsSpellInRange("Омоложение", "raid"..r) and (not UnitBuff("raid"..r, "Омоложение")) then CastSpellByName("Омоложение","raid"..r) end end if (UnitHealth("player")/UnitHealthMax("player")) <0.95 and IsSpellInRange("Омоложение", "player") and (not UnitBuff("player","Омоложение")) then CastSpellByName("Омоложение","player") end /run for r=0,24 do GetNumRaidMembers(); if (UnitHealth("raid"..r)/UnitHealthMax("raid"..r)) <0.95 and IsSpellInRange("Буйный рост", "raid"..r) and (not UnitBuff("raid"..r, "Буйный рост")) then CastSpellByName("Буйный рост","raid"..r) end end if (UnitHealth("player")/UnitHealthMax("player")) <0.95 and IsSpellInRange("Буйный рост", "player") and (not UnitBuff("player","Буйный рост")) then CastSpellByName("Буйный рост","player") end /run for r=0,24 do GetNumRaidMembers(); if (UnitHealth("raid"..r)/UnitHealthMax("raid"..r)) <0.80 and IsSpellInRange("Быстрое восстановление", "raid"..r) and (UnitBuff("raid"..r, "Омоложение")) then CastSpellByName("Быстрое восстановление","raid"..r) end end if (UnitHealth("player")/UnitHealthMax("player")) <0.80 and IsSpellInRange("Быстрое восстановление", "player") and (UnitBuff("player","Омоложение")) then CastSpellByName("Быстрое восстановление","player") end А вот тут, на мункина проблемка. Как сделать чтоб он кастовал после конца Лунного затмения "Звездным огнем" до прока Солнечного затмения,и так же После конца прока Солнечного затмения кастовал "Гнев" до следующего прока Лунного затмения, ибо приходится в ручную кастовать до следующего затмения Код function FuryRotation(self,elapsed) if (not UnitDebuff("target", "Лунный огонь", nil, "PLAYER")) then CastSpellByName("Лунный огонь") elseif (not UnitDebuff("target", "Рой насекомых", nil, "PLAYER")) then CastSpellByName("Рой насекомых") elseif GetSpellCooldown("Звездопад") == 0 and UnitDebuff("target", "Лунный огонь") then CastSpellByName("Звездопад") elseif GetSpellCooldown("Гнев") == 0 and UnitDebuff("target", "Рой насекомых") and GetSpellCooldown("Звездопад") > 0 and UnitBuff("player", "Солнечное затмение") then CastSpellByName("Гнев") end end if not FuryRotationFrame then CreateFrame("Frame", "FuryRotationFrame") FuryRotationFrame:SetScript("OnUpdate", FuryRotation) end |
Суть в том, что если спамить скрипт, то попадешь в тот промежуток, когда старая дота обновляется новой, и в этот момент на цели ее как бы нет, поэтому выполняется самое первое уусловие и из-за этого кастуется прикосновение дважды(я так понял, на самом деле хз как оно там), поэтому после каста вампирика надо делать маленькую паузу, а потом нажимать дальше, больше решения не вижу. Плюс причесал это безобразие, уменьшив размер. аааа, ребята. Не усложняйте жызнь. Есть http://wow.gamepedia.com/COMBAT_LOG_EVENT и там указано об SPELL_CAST_SUCCESS. Поставьте разницу между временем когда был прменен спел и текущем временем, также сохраните цель, чтоб совпадало. Автосбивание тотемов в суто в Lua не реализуемо. На щет совуха, там там совсем по другому зделать можна, или ты хочеш чтоб скрипт сам все жал? Я сам жму и от того такой был и есть баф меняеться каст в 1! кнопке
Сообщение # 1923 написано 13.09.2016 в 12:30
|
А вот тут, на мункина проблемка. Как сделать чтоб он кастовал после конца Лунного затмения "Звездным огнем" до прока Солнечного затмения,и так же После конца прока Солнечного затмения кастовал "Гнев" до следующего прока Лунного затмения, ибо приходится в ручную кастовать до следующего затмения Вот тебе затравочка, ничего не проверял, если что, сам потестишь и исправишь Код function FuryRotation(self,elapsed) if not UnitDebuff("target", "Лунный огонь", nil, "PLAYER") then CastSpellByName("Лунный огонь") elseif not UnitDebuff("target", "Рой насекомых", nil, "PLAYER") then CastSpellByName("Рой насекомых") elseif GetSpellCooldown("Звездопад") == 0 and UnitDebuff("target", "Лунный огонь") then CastSpellByName("Звездопад") elseif UnitBuff("player","Падающие звезды") then CastSpellByName("Звездный поток") end if UnitPower("player" , 8) == 0 then RunMacroText("/castrandom Гнев, Лунный огонь") elseif UnitPower("player" , 8) > 0 then CastSpellByName("Звездный огонь") elseif UnitPower("player" , 8) == 100 and UnitBuff("player","Солнечное затмение") then if UnitPower("player" , 8) <= 100 and UnitPower("player" , 8) ~= 0 then CastSpellByName("Гнев") end elseif UnitPower("player" , 8) < 0 then CastSpellByName("Гнев") elseif UnitPower("player" , 8) == -100 and UnitBuff("player","Лунное затмение") then if UnitPower("player" , 8) >= -100 and UnitPower("player" , 8) ~= 0 then CastSpellByName("Звездный огонь") end end end |
вобщем поковырявшись к толковому ничему не привело, итог таков Код function FuryRotation(self,elapsed) if (not UnitDebuff("target", "Лунный огонь", nil, "PLAYER")) then CastSpellByName("Лунный огонь") elseif (not UnitDebuff("target", "Рой насекомых", nil, "PLAYER")) then CastSpellByName("Рой насекомых") elseif GetSpellCooldown("Звездопад") == 0 and UnitDebuff("target", "Лунный огонь") then CastSpellByName("Звездопад") elseif GetSpellCooldown("Гнев") == 0 and UnitDebuff("target", "Рой насекомых") and GetSpellCooldown("Звездопад") > 0 and UnitBuff("player", "Солнечное затмение") then CastSpellByName("Гнев") elseif UnitBuff("player", "Лунное затмение") then CastSpellByName("Звездный огонь") end if UnitPower("player" , 8) == 0 then RunMacroText("/castrandom Гнев, звездный огонь") end end if not FuryRotationFrame then CreateFrame("Frame", "FuryRotationFrame") FuryRotationFrame:SetScript("OnUpdate", FuryRotation) end спамит рандом спелл, но не всегда прокатывает, как бы отследить кд затмений, что бы кастовался потом определенный спелл, но затмения как их отследить я хз, у них то внутреннее кд как я понимаю? пока убери каст рандом спелла, надо поискать решение проблемы |
Играю на кате, понятия не имею о чем ты Добавлено (13.09.2016, 16:44) Поковырялся я некоторое время, и сделал ротацию, но я понятия не имею на каком ты патче играешь, на кате работает нормально (с кастерами оказывается столько геморроя) Код function MRotate(self,elapsed) UP = UnitPower UB = UnitBuff UDB = UnitDebuff UCI = UnitCastingInfo GSC = GetSpellCooldown if not UDB("target", "Лунный огонь") and not UDB("target", "Солнечный огонь") and GSC("Лунный Огонь") == 0 and not UCI("player") then CastSpellByName("Лунный огонь") elseif not UDB("target", "Рой насекомых") and GSC("Рой насекомых") == 0 and not UCI("player") then CastSpellByName("Рой насекомых") elseif GSC("Звездопад") == 0 then CastSpellByName("Звездопад") elseif UB("player","Падающие звезды") and GSC("Звездный поток") == 0 then if UCI("player") then SpellStopCasting() end CastSpellByName("Звездный поток") end if UDB("target", "Лунный огонь") and UDB("target", "Рой насекомых") or UDB("target", "Солнечный огонь") and UDB("target", "Рой насекомых") then if UP("player", 8) == 0 and not UCI("player") and GSC("Лунный Огонь") == 0 then CastSpellByName("Лунный огонь") elseif UP("player", 8) > 0 and not UB("player","Солнечное затмение") and not UCI("player") and GSC("Лунный Огонь") == 0 then CastSpellByName("Звездный огонь") elseif UP("player", 8) ~= 0 and UB("player","Солнечное затмение") and not UCI("player") and GSC("Лунный Огонь") == 0 then CastSpellByName("Гнев") elseif UP("player", 8) < 0 and not UB("player","Лунное затмение") and not UCI("player") and GSC("Лунный Огонь") == 0 then CastSpellByName("Гнев") elseif UP("player", 8) ~= 0 and UB("player","Лунное затмение") and not UCI("player") and GSC("Лунный Огонь") == 0 then CastSpellByName("Звездный огонь") elseif UP("player", 8) == 100 and UCI("player") == "Звездный огонь" then SpellStopCasting() elseif UP("player", 8) == -100 and UCI("player") == "Гнев" then SpellStopCasting() end end end if not MRotateFrame then CreateFrame("Frame", "MRotateFrame") MRotateFrame:SetScript("OnUpdate", MRotate) end
Сообщение # 1930 написано 13.09.2016 в 16:44
|
а на счёт ШП, окончательный вариант
Код /run local n,_,_,_,_,_,x = UnitDebuff("target","Прикосновение вампира") if not UnitDebuff("target", "Прикосновение вампира", nil, "PLAYER") then RunMacroText("/castsequence reset=2 Прикосновение вампира") end if UnitDebuff("target","Прикосновение вампира") and -1*(GetTime()-x) <= 1.05 then RunMacroText("/castsequence reset=2 Прикосновение вампира") end /run if not UnitDebuff("target", "Всепожирающая чума", nil, "PLAYER") then CastSpellByName("Всепожирающая чума","target") end if UnitDebuff("target", "Прикосновение вампира") and UnitDebuff("target", "Всепожирающая чума") then RunMacroText("/cast [nochanneling:Пытка разума] Пытка разума") end вроде не кастует 2 раза, но ещё буду тестить, пока времени нет
Сообщение # 1933 написано 14.09.2016 в 00:12
|
spamcik, пет будет прыгать в трапу только на ат, на остальных пиратках это невозможно из за того что это пиратки и они не работают... Мор легко сделать, палить рогу по аое невозможно, так как в логе не пишется то, что в инвизе
Сообщение # 1934 написано 14.09.2016 в 22:42
|
Ребят а как сюда добавить проверку на расстояние 40 метров и если цель допустим находится за колонной?
Код /run for r=0,24 do GetNumRaidMembers(); if (UnitHealth("raid"..r)/UnitHealthMax("raid"..r)) <=1 and IsSpellInRange("Слово силы: Щит", "raid"..r) and (not UnitBuff("raid"..r, "Слово силы: Щит")) and (not UnitDebuff("raid"..r, "Ослабленная душа")) then CastSpellByName("Слово силы: Щит","raid"..r) end end if (UnitHealth("player")/UnitHealthMax("player")) <=1 and IsSpellInRange("Слово силы: Щит", "player") and (not UnitBuff("player","Слово силы: Щит")) and (not UnitDebuff("player", "Ослабленная душа")) then CastSpellByName("Слово силы: Щит","player") end
Сообщение # 1935 написано 16.09.2016 в 22:34
|
Не понимаю что тут за сборище отстающих? За первые 30 страниц расписаны и разжеваны абсолютно все виды скриптов, осталось только вписать туда свои спеллы и танцевать... Но еще 30 страниц наполнены повторным пережевыванием... Теперь снова всё повторяется
Сообщение # 1937 написано 18.09.2016 в 02:15
|
Да,совершенно верно.Чтоб как в pqr пару секунд до конца окончания их.Или можно задать параметры макросы чтоб <40 % окончания то обновляет болезни > то бьёт кровавым ударом.
Добавлено (25.09.2016, 14:51) |
Сообщение # 1943 написано 04.10.2016 в 15:40
|
как получить время произнесения потокового спела?
в GetSpellInfo есть параметр CastTime, но для потоковых он равен 0 например, у мага в тултипе Arcane Missiles написано Цитата Launches Arcane Missiles at the enemy, causing __ Arcane damage every __ sec for 4.72 sec вариант с UnitCHannelInfo endtime-starttime не подходит, т.к. работает только если абилка уже кастуется может, есть какие функции на сканирование текста в тултипе? |
Не проверял, поэтому не уверен что вернет данные с учетом хасты, но стоит попробовать http://wowprogramming.com/docs/api/GetSpellInfo
оттуда параметр Цитата castingTime - Casting time of the spell in milliseconds (number)
reverse engineering your soul... балуюсь C++, C#, SQL, LUA. Владыка 1C. Окончательно забил на emuDev
Сообщение # 1945 написано 06.10.2016 в 06:48
|
есть куски кода, помогите до ума довести
Код SpellBase = {"Сглаз", "Превращение", "Смерч", "Страх", "Покаяние"} 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("Тотем заземления") print(arg1,arg2,...) end end end end end) |
Всем привет помогите с данным скриптом , всё отлично работает но есть одно но , принцип работы его таков если я не держу в таргете не кого он срабатывает если держу вражескую цель тоже срабатывает , но если я держу допустим себя или напарника в таргете либо другую дружественную цель он не срабатывает , так вот хотелось бы что бы срабатывал ) выручайте ребята с меня плюсики вот сам скрипт .
Antifear = CreateFrame("Frame", "Antifear", UIParent); Antifear:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED"); Antifear:SetScript("OnEvent", function(self, event, arg1, arg2, ...) if(event=="UNIT_SPELLCAST_SUCCEEDED") then if arg2==("Ослепление") then SpellStopCasting() RunMacroText("/cast Слово Тьмы: Смерть") end end end) |
Господа скритеры можно ли добавить в этот скрипт ещо и проверку на хп ?
тоесть грубо говоря если у цели 100% хп он не вешал омоложение /run if not UnitBuff("target", "омоложение", nil, "PLAYER") then CastSpellByName("омоложение") end |
| |||