Модератор форума: staford11  
Использование Lua скриптов.
Punisher45
Капрал
Цитата sanfishman22 ()
может есть идеи?
 лично у меня нет, но у других могут и быть, я не вижу логических ошибок в коде, да и для кастеров прежде ничего особенного не писал.
Сообщение # 1921 написано 12.09.2016 в 22:25
sanfishman22
Капрал
Может кому то надо, пве ротация ханта. Для тех кому лень жать кнопки как и мне)
Код
/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
Сообщение # 1922 отредактировано sanfishman22 - Вторник, 13.09.2016, 09:24
Kieg
Сержант
Цитата Punisher45 ()
Суть в том, что если спамить скрипт, то попадешь в тот промежуток, когда старая дота обновляется новой, и в этот момент на цели ее как бы нет, поэтому выполняется самое первое уусловие и из-за этого кастуется прикосновение дважды(я так понял, на самом деле хз как оно там), поэтому после каста вампирика надо делать маленькую паузу, а потом нажимать дальше, больше решения не вижу. Плюс причесал это безобразие, уменьшив размер.

аааа, ребята. Не усложняйте жызнь. Есть http://wow.gamepedia.com/COMBAT_LOG_EVENT и там указано об SPELL_CAST_SUCCESS. Поставьте разницу между временем когда был прменен спел и текущем временем, также сохраните цель, чтоб совпадало. 

Автосбивание тотемов в суто в Lua не реализуемо.

На щет совуха, там там совсем по другому зделать можна, или ты хочеш чтоб скрипт сам все жал? Я сам жму и от того такой был и есть баф меняеться каст в 1! кнопке
Сообщение # 1923 написано 13.09.2016 в 12:30
Punisher45
Капрал
Цитата sanfishman22 ()
А вот тут, на мункина проблемка. Как сделать чтоб он кастовал после конца Лунного затмения "Звездным огнем" до прока Солнечного затмения,и так же После конца прока Солнечного затмения кастовал "Гнев" до следующего прока Лунного затмения, ибо приходится в ручную кастовать до следующего затмения


Вот тебе затравочка, ничего не проверял, если что, сам потестишь и исправишь
Код
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
Сообщение # 1924 отредактировано Punisher45 - Вторник, 13.09.2016, 13:23
Kieg
Сержант
Цитата Punisher45 ()
Вот тебе затравочка, ничего не проверял, если что, сам потестишь и исправишь


У тебя всегда такие скрипты?
Сообщение # 1925 написано 13.09.2016 в 13:21
Punisher45
Капрал
Цитата Kieg ()
У тебя всегда такие скрипты?


А я должен все сам сделать?
Сообщение # 1926 написано 13.09.2016 в 13:24
Kieg
Сержант
Цитата Punisher45 ()
А я должен все сам сделать?


Ну ето уже твое решение. Но смысл писать бред?
Сообщение # 1927 написано 13.09.2016 в 13:33
Punisher45
Капрал
Цитата Kieg ()
Но смысл писать бред?
 Это ты уже у себя спроси, умник  biggrin

Можешь написать не бред, пожалуйста, правда я ни одной строки кода не вижу с твоей стороны, почему - то)))00
Ну я думаю, ты понял, куда тебе пойти
Сообщение # 1928 написано 13.09.2016 в 13:37
sanfishman22
Капрал
Цитата Punisher45 ()
Вот тебе затравочка, ничего не проверял, если что, сам потестишь и исправишь

вобщем поковырявшись к толковому ничему не привело, итог таков
Код
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


спамит рандом спелл, но не всегда прокатывает, как бы отследить кд затмений, что бы кастовался потом определенный спелл, но затмения как их отследить я хз, у них то внутреннее кд как я понимаю? пока убери каст рандом спелла, надо поискать решение проблемы
Сообщение # 1929 отредактировано sanfishman22 - Вторник, 13.09.2016, 15:11
Punisher45
Капрал
Цитата sanfishman22 ()
у них то внутреннее кд как я понимаю?


Играю на кате, понятия не имею о чем ты

Добавлено (13.09.2016, 16:44)
---------------------------------------------

Цитата sanfishman22 ()
к толковому ничему не привело

Поковырялся я некоторое время, и сделал ротацию, но я понятия не имею на каком ты патче играешь, на кате работает нормально (с кастерами оказывается столько геморроя)

Код
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
sanfishman22
Капрал
Цитата Punisher45 ()
Поковырялся я некоторое время, и сделал ротацию, но я понятия не имею на каком ты патче играешь

на личе сижу, пытаюсь твой переделать. Пока не успешно) Удаляю катовские скиллы, зацикливается на лунном огне.
Сообщение # 1931 отредактировано sanfishman22 - Вторник, 13.09.2016, 21:14
Punisher45
Капрал
Цитата sanfishman22 ()
на личе сижу

Не играл на личе, понятия не имею что там за талы и скилы у сов, сорян, так бы норм написал
Сообщение # 1932 написано 13.09.2016 в 21:59
sanfishman22
Капрал
а на счёт ШП, окончательный вариант
Код
/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
chaosway
Рыцарь
spamcik, пет будет прыгать в трапу только на ат, на остальных пиратках это невозможно из за того что это пиратки и они не работают... Мор легко сделать, палить рогу по аое невозможно, так как в логе не пишется то, что в инвизе
Сообщение # 1934 написано 14.09.2016 в 22:42
sanfishman22
Капрал
Ребят а как сюда добавить проверку на расстояние 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
Kieg
Сержант
Цитата Punisher45 ()
я ни одной строки кода не вижу с твоей стороны

Поищи раньше, что мог то и кидал.
Сообщение # 1936 написано 18.09.2016 в 01:16
chaosway
Рыцарь
Не понимаю что тут за сборище отстающих? За первые 30 страниц расписаны и разжеваны абсолютно все виды скриптов, осталось только вписать туда свои спеллы и танцевать... Но еще 30 страниц наполнены повторным пережевыванием... Теперь снова всё повторяется
Сообщение # 1937 написано 18.09.2016 в 02:15
LegendeR
Скаут
Ребят помогите написать скрипт на авто мор у дк, хрен знает как реализовать,нужен шарющий красавчик..
Сообщение # 1938 отредактировано LegendeR - Среда, 21.09.2016, 22:26
Kieg
Сержант
Цитата LegendeR ()
Ребят помогите написать скрипт на авто мор у дк, хрен знает как реализовать,нужен шарющий красавчик..

Я так понимаю чтоб обновлял дот?
Сообщение # 1939 написано 22.09.2016 в 10:44
LegendeR
Скаут
Да,совершенно верно.Чтоб как в pqr пару секунд до конца окончания их.Или можно задать параметры макросы чтоб <40 % окончания то обновляет болезни > то бьёт кровавым ударом.

Добавлено (25.09.2016, 14:51)
---------------------------------------------
Ап,подскажите хоть как запилить проверку на % кд дебафа (болезни).

Сообщение # 1940 отредактировано LegendeR - Четверг, 22.09.2016, 14:53
summerhaze
Скаут
Кукулити!
Существует ли скрипт на /roll, где сролленое число я могу выбрать сам?
Сообщение # 1941 написано 26.09.2016 в 15:04
PaulDousen
Рыцарь
summerhaze, нет
Сообщение # 1942 написано 26.09.2016 в 18:40
LegendeR
Скаут
Цитата Kieg ()
Я так понимаю чтоб обновлял дот?
Что тут не правильно ?
function Avtomor(self)    
local n,_,_,_,_,_,x = UnitDebuff("target", "Черная чума") elseif -1*(GetTime()-x) <= 5 then RunMacroText("/cast Мор") 
   end   
end
CreateFrame("Frame", "AvtomorFrame")   
FvtomorFrame:SetScript("OnUpdate", Avtomor)
Сообщение # 1943 написано 04.10.2016 в 15:40
sess
Скаут
как получить время произнесения потокового спела?

в GetSpellInfo есть параметр CastTime, но для потоковых он равен 0
например, у мага в тултипе  Arcane Missiles написано

Цитата
Launches Arcane Missiles at the enemy, causing __ Arcane damage every __ sec for 4.72 sec
вот эти 4.72 сек - это то, что хотелось бы получить
вариант с UnitCHannelInfo endtime-starttime не подходит, т.к. работает только если абилка уже кастуется
может, есть какие функции на сканирование текста в тултипе?
Сообщение # 1944 отредактировано sess - Четверг, 06.10.2016, 01:04
tobmaps
Капрал
Цитата sess ()
вот эти 4.72 сек - это то, что хотелось бы получить
Не проверял, поэтому не уверен что вернет данные с учетом хасты, но стоит попробовать 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
Zandragon2236
Скаут
это законно ?
Сообщение # 1946 написано 14.10.2016 в 19:40
greenapple111
Скаут
есть куски кода, помогите до ума довести
Код
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)



Сообщение # 1947 отредактировано greenapple111 - Четверг, 20.10.2016, 19:20
Omaygad
Скаут
Всем привет помогите с данным скриптом , всё отлично работает но есть одно но , принцип работы его таков если я не держу в таргете  не кого он срабатывает если держу вражескую цель тоже срабатывает , но если я держу допустим себя или напарника в таргете либо другую дружественную цель он не срабатывает , так вот хотелось бы что бы срабатывал ) выручайте ребята с меня плюсики вот сам скрипт .
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)
Сообщение # 1948 отредактировано Omaygad - Пятница, 21.10.2016, 03:47
mdma
Скаут
скиньте скрипты пве-ротации на любые классы (лучше конечно лок, сова, шп) через bindpad на wow cata 4.3.4 (какие у кого имеются, пожалуйста!!!)
Сообщение # 1949 написано 21.10.2016 в 14:52
RUSisakov
Скаут
Господа скритеры можно ли добавить в этот скрипт  ещо и проверку на хп ?
тоесть грубо говоря если у цели 100% хп он не вешал омоложение
/run if not UnitBuff("target", "омоложение", nil, "PLAYER") then CastSpellByName("омоложение") end
Сообщение # 1950 отредактировано RUSisakov - Пятница, 21.10.2016, 16:44
Поиск: