Модератор форума: staford11  
Использование Lua скриптов.
Valvedoto
Скаут
Цитата xGhostx ()
и это зря, когда свои спеллы отслеживаете, то лучше юзать "UNIT_SPELLCAST_SUCCEEDED" с проверкой плеера и спелла. намного шустрее будет.


Это вроде уже от сервера зависит.

Кто нибудь знает как сделать проверку спелла в скрипте с использованием ивентов UNIT_ENERGY/MANA/etc ? Возможно ли это вообще?
Сообщение # 2161 написано 23.03.2017 в 22:28
Punisher45
Капрал
Цитата Valvedoto ()
Кто нибудь знает как сделать проверку спелла в скрипте с использованием ивентов UNIT_ENERGY/MANA/etc ? Возможно ли это вообще?

Чем тебе функция UnitPower не угодила, какая проверка и зачем ивент?

Добавлено (24.03.2017, 01:10)
---------------------------------------------

Цитата Valvedoto ()
Всем привет, нужна помощь в реализации автокика для комбат роги.Если цель в досягаемости способности Пинок и он не на кд, юзаем пинок в 0.3 до конца каста, если же Пинок в кд, кастуем Смертельный бросок в 0.9 до конца каста. Если цель вне досягаемости пинка юзаем Смертельный бросок в 0.9 до конца каста. Может кто помочь?


пробуй


Код
function Auk( self, elapsed )
spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("target")
finish = endTime/1000 - GetTime()
enabled = GetSpellCooldown("Пинок")                      
inRange = IsSpellInRange("Пинок", "target") 
if spell and enabled and inRange and interrupt == false and finish <= 0.3 then  
CastSpellByName("Пинок")                      
elseif enabled ~= 0 or not inRange and finish <= 0.9 then
CastSpellByName("Смертельный бросок")   
end  
end   
CreateFrame("Frame", "AukFrame")
AukFrame:SetScript("OnUpdate", Auk)
Сообщение # 2162 написано 24.03.2017 в 01:10
Valvedoto
Скаут
Цитата Punisher45 ()
Чем тебе функция UnitPower не угодила, какая проверка и зачем ивент?

ивент для реализации скрипта для чтобы ловить контроль, я играю на сервере где реализация анти сс возможна ТОЛЬКО через UNIT_ENERGY/MANA/etc есть рабочий скрипт, нужна проверка на то какой спелл юзается, чтобы ловить определенные спеллы, а не все подряд

Код
local f=CreateFrame("Frame","f")
f:UnregisterEvent("UNIT_ENERGY")
f:RegisterEvent("UNIT_ENERGY")
f:SetScript("OnEvent", self, elapsed, function() cheat() end)
local enabled = true
local lastEnergy = 0
function cheat()
if enabled then
if (event == "UNIT_ENERGY") then
if UnitPower("target") < lastEnergy and (UnitIsEnemy("player","target")) then
CastSpellByName("Исчезновение")
end
lastEnergy = UnitPower("target")
end
end
end


скрипт на кик уже давно сделал, но все равно спасибо, твой протестирую мб лучше зайдет
Сообщение # 2163 отредактировано Valvedoto - Пятница, 24.03.2017, 06:19
Punisher45
Капрал
Цитата Valvedoto ()
ивент для реализации скрипта для чтобы ловить контроль, я играю на сервере где реализация анти сс возможна ТОЛЬКО через UNIT_ENERGY/MANA/etc есть рабочий скрипт, нужна проверка на то какой спелл юзается, чтобы ловить определенные спеллы, а не все подряд

Ну хорошо, сравнил ты что у мага например стало на 2к маны меньше после использования предположим фрост болта, дальше что? Скрипт все равно будет жать ваниш. Не очень мне понятно каким образом можно словить что-то определенное через такой ивент, скрипт просто будет жать ваниш при изменении ресурса, что бы это ни было и скорее всего у кого бы то ни было из врагов которые рядом.

Ивенты которые приходят в голову по которым можно отследить спелы это UNIT_SPELLCAST_SUCCEEDED и COMBAT_LOG_EVENT_UNFILTERED
но если они не работают, то остается проверка разницы ресурса, то есть если например было 15к маны к примеру а потом маг юзнул полиморф и у него осталось 13 к примеру, то разность (стоимость) полиморфа допустим 2к, если разность энергии будет составлять стоимость полиморфа то можно жать ваниш. Довольно топорно и не гарантирует что какой либо спелл не будет стоить столько же, но можно попробовать. Я конечно могу ошибаться, но это так, чисто мои мысли.
Сообщение # 2164 отредактировано Punisher45 - Пятница, 24.03.2017, 11:51
prn
Скаут
да с тем же успехом можно повесить и на onupdate
lastunitenergy-UnitEnergy()==20, 20 стоимость блайнда в енергии
lastenergy=UnitEnergy();
Сообщение # 2165 отредактировано prn - Пятница, 24.03.2017, 12:33
Punisher45
Капрал
Цитата Omaygad ()
Просьба к знатокам , помогите исправить данный скрипт , он работает не как надо , то-есть если взять в цель охотника и он даст Дезориентирующий выстрел , то Слово Тьмы: Смерть сработает , а если я буду держать в цели другого игрока , будь то напарник мой или же напарник врага , то проигнорирует .


Код
SWD = CreateFrame("Frame", "SWD", UIParent);        
SWD:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")        
SWD:SetScript("OnEvent", function(self, event, arg1, arg2)        
SpellBase = {"Дезориентирующий выстрел","Грубый прием","Превращение","Покаяние","Ослепление","Ошеломление","Ненасытная стужа"}   
local cd = GetSpellCooldown("Слово Тьмы: Смерть")     
for v = 1,#SpellBase do        
local args = {arg1, arg2}        
if (arg1 == "target" and arg2 == SpellBase[v]) then
if cd == 0 then
CastSpellByName("Слово Тьмы: Смерть")
end
elseif (arg1 == "focus" and arg2 == SpellBase[v]) then
if cd == 0 then
CastSpellByName("Слово Тьмы: Смерть","focus")
end
elseif (arg1 == "arena1" and arg2 == SpellBase[v]) then
if cd == 0 then
CastSpellByName("Слово Тьмы: Смерть","arena1")
end
elseif (arg1 == "arena2" and arg2 == SpellBase[v]) then
if cd == 0 then
CastSpellByName("Слово Тьмы: Смерть","arena2")
end
elseif (arg1 == "arena3" and arg2 == SpellBase[v]) then
if cd == 0 then
CastSpellByName("Слово Тьмы: Смерть","arena3")
end
elseif (arg1 == "arena4" and arg2 == SpellBase[v]) then
if cd == 0 then
CastSpellByName("Слово Тьмы: Смерть","arena4")
end
elseif (arg1 == "arena5" and arg2 == SpellBase[v]) then
if cd == 0 then
CastSpellByName("Слово Тьмы: Смерть","arena5")
end    
end        
end        
end)


Самое простое решение которое приходит в голову, будет работать или нет - не знаю) По крайней мере на арене должно работать, проверка таргета, фокуса, арена целей. Кстати, грубый прием дает обезьянка, а не твой таргет фокус и так далее, поэтому я не уверен что будет жаться швд на спел пета.
Сообщение # 2166 отредактировано Punisher45 - Пятница, 24.03.2017, 14:00
prn
Скаут
кстати насчет отслеживания колонн ящиков и что цель находится за текстурой и тд,тут предлагался вариант через COMBAT_LOG_EVENT_UNFILTERED проверять ошибки когда спел не может быть скастован изза колонны или по другим причинам и потом блокировать этот спел на пару сек,но таким образом не сделать хороший срипт на арене,ибо любая попытка использывания спела будет вызывать гкд,а если целей много на которых надо раскидать дотки например афли лок,а цели две из 3 находятся за колоннами то до 3 цели очередь может и недойти вообще,
попробую расписать свой вариант ,может кому нить будет полезно смысл в том чтобы создать свою геодату для каждой арены,представим что колонна на арене это круг,заходим на арену подходим к этой колонне впритык и оббегаем ее вокруг вписываем координаты линий в массив,те получится окружность вписанная в многоугольник,а в массиве mas_line={{1,2},{7,8},{9,0},{30,10}} -- массив отрезков {1,2} ху первого отрезка 7,8 его окончание ,таким образом что у нас есть массив координат отрезков вокруг каждой колонны или ящика на аренах,координаты player,party1,party2
GetPlayerMapPosition("unit"),а теперь смотрим в цикле если есть пересечение отрезка playerx,playery....party1x,party1y с любым из отрезков в массиве то цель находится за текстурой и ее похилить нельзя

function Intersection(ax1,ay2,ax2,ay2,bx1,by1,bx2,by2)
   v1:=(bx2-bx1)*(ay1-by1)-(by2-by1)*(ax1-bx1);
   v2:=(bx2-bx1)*(ay2-by1)-(by2-by1)*(ax2-bx1);
   v3:=(ax2-ax1)*(by1-ay1)-(ay2-ay1)*(bx1-ax1);
   v4:=(ax2-ax1)*(by2-ay1)-(ay2-ay1)*(bx2-ax1);
   if (v1*v2<0) and (v3*v4<0) then
    return true
   else
    return false
end

функция для определения пересечения отрезков ,таким образом мы всегда можем отпределить находится ли дружественная цель за текстурой,а не пытаться кастить спелл и получать гкд и не тратить время на каст,

к сожалению в рамках скрипта можно сделать только с дружественными целями тк как GetPlayerMapPosition("unit") пашет толко с целяи в пати,чтобы сделать определение координат таргета арены1 и тд надо уже перебирать обьекты на экране в памяти процесса,кому интересно могу рассказать
Сообщение # 2167 написано 24.03.2017 в 13:21
Punisher45
Капрал
Цитата sensual ()
Кто может написать скрипт на сбитие каста мага и седакт суккубы? сначала облик мишки далее чардж по фокусу. с меня +. За ранее спасибо!


Код
function Bear( self, elapsed )
spell, _, _, _, _, _, _, _, interrupt = UnitCastingInfo("focus")
enabled = GetSpellCooldown("Лобовая атака")                      
inRange = IsSpellInRange("Лобовая атака", "focus") 
if spell == "Соблазн" or spell == "Превращение" and enabled and inRange and interrupt == false then 
if not UnitBuff("player","Облик медведя") then
CastSpellByName("Облик медведя")                      
end
CastSpellByName("Лобовая атака")
end  
end   
CreateFrame("Frame", "BearFrame")
BearFrame:SetScript("OnUpdate", Bear)

Автоматически сбивает касты соблазн или превращение, при этом суккуба или маг обязательно должны быть у тебя в фокусе, вроде так ты хотел, если я понял задачу
Сообщение # 2168 написано 24.03.2017 в 15:52
Valvedoto
Скаут
Цитата Punisher45 ()
Ну хорошо, сравнил ты что у мага например стало на 2к маны меньше после использования предположим фрост болта, дальше что? Скрипт все равно будет жать ваниш. Не очень мне понятно каким образом можно словить что-то определенное через такой ивент, скрипт просто будет жать ваниш при изменении ресурса, что бы это ни было и скорее всего у кого бы то ни было из врагов которые рядом.

Ивенты которые приходят в голову по которым можно отследить спелы это UNIT_SPELLCAST_SUCCEEDED и COMBAT_LOG_EVENT_UNFILTERED
но если они не работают, то остается проверка разницы ресурса, то есть если например было 15к маны к примеру а потом маг юзнул полиморф и у него осталось 13 к примеру, то разность (стоимость) полиморфа допустим 2к, если разность энергии будет составлять стоимость полиморфа то можно жать ваниш. Довольно топорно и не гарантирует что какой либо спелл не будет стоить столько же, но можно попробовать. Я конечно могу ошибаться, но это так, чисто мои мысли.


правильно думаешь, ваниш кастоваться будет только от изменения юнитповера противника который в тартегете (UnitIsEnemy("player","target")), видимо остается только вычисление по стоимости спеллов.

Цитата prn ()
да с тем же успехом можно повесить и на onupdate
lastunitenergy-UnitEnergy()==20, 20 стоимость блайнда в енергии
lastenergy=UnitEnergy();


Код
local f=CreateFrame("Frame","f")
f:SetScript("OnUpdate", self, elapsed, function() cheat() end)
local enabled = true
local lastEnergy = 20
function cheat()
if enabled then
if UnitPower("target") == lastEnergy and (UnitIsEnemy("player","target")) then
CastSpellByName("Исчезновение")
end
lastEnergy = UnitPower("target")
end
end


так? не работает (
Сообщение # 2169 написано 24.03.2017 в 18:10
prn
Скаут
Цитата Valvedoto4254970ocal f=CreateFrame("Frame","f")
f:SetScript("OnUpdate", self, elapsed, function() cheat() end)
local enabled = true
local lastEnergy = 20  ----- ну и lastenergy у тебя постоянно будет 20,вынеси его в глобальные переменные
function cheat()
if enabled then
if UnitPower("target") == lastEnergy and (UnitIsEnemy("player","target")) then --UnitPower("target") == lastEnergy ???у  тебя написано кастить исчезновение когда енергия цели 20
CastSpellByName("Исчезновение")
end
lastEnergy = UnitPower("target")
end
end
Сообщение # 2170 отредактировано prn - Пятница, 24.03.2017, 18:22
xGhostx
Скаут
Цитата Valvedoto ()
ивент для реализации скрипта для чтобы ловить контроль, я играю на сервере где реализация анти сс возможна ТОЛЬКО через UNIT_ENERGY/MANA/etc есть рабочий скрипт, нужна проверка на то какой спелл юзается, чтобы ловить определенные спеллы, а не все подряд

похоже на бред. UNIT_ENERGYMANA/etc приходят позже UNIT_SPELLCAST_SUCCEEDED, ну про информативность и говорить не стоит. так нафига их юзать?

Цитата prn ()
кстати насчет отслеживания колонн ящиков и что цель находится за текстурой и тд,тут предлагался вариант через COMBAT_LOG_EVENT_UNFILTERED проверять ошибки когда спел не может быть скастован изза колонны или по другим причинам и потом блокировать этот спел на пару сек,но таким образом не сделать хороший срипт на арене,ибо любая попытка использывания спела будет вызывать гкд,а если целей много на которых надо раскидать дотки например афли лок,а цели две из 3 находятся за колоннами то до 3 цели очередь может и недойти вообще,

даже в клиенте нету такой фигни, тупо запрос к серверу, по ошибкам реализовать можно легко(не через комбатлог), например, кастуешь в первую цель, ждешь ответа от сервера, если пришла ошибка, то цель перемещается в конец очереди и следующий каст идет в другого. все же просто, чуть медленнее в зависимости от пинга, но без сложных таблиц с расчетами.
Сообщение # 2171 отредактировано xGhostx - Суббота, 25.03.2017, 03:20
Valvedoto
Скаут
Цитата xGhostx ()
похоже на бред. UNIT_ENERGYMANA/etc приходят позже UNIT_SPELLCAST_SUCCEEDED, ну про информативность и говорить не стоит. так нафига их юзать?

на ате (warmane) идет только UNIT_ENERGYMANA/etc ивенты и только после делея в ~0.1 sec идут ивенты UNIT_SPELLCAST_SUCCEEDED и прочее. Из - за этого делея в 0.1 сек скрипты по типу UNIT_SPELLCAST_SUCCEEDED/комбатлоганфильтред просто не успевают сработать.
Сообщение # 2172 написано 25.03.2017 в 11:25
prn
Скаут
Цитата xGhostx ()
даже в клиенте нету такой фигни, тупо запрос к серверу, по ошибкам реализовать можно легко(не через комбатлог), например, кастуешь в первую цель, ждешь ответа от сервера, если пришла ошибка, то цель перемещается в конец очереди и следующий каст идет в другого. все же просто, чуть медленнее в зависимости от пинга, но без сложных таблиц с расчетами.


ага,только попытка этого каста вызывает гкд,скастил на арена1 вызвало ошибку,перешел к следующему опять ошибка,потерял 1 секунду из-за гкд,не очень ок,для простых скриптов может и сойдет блокировка по ошибке,но когда делаешь фул ротацию на 3 таргета под арену+ 2 таргета party1 party2,да еще твой чар не мелик а рдд или хил какой-нить то это весьма критично
Сообщение # 2173 написано 25.03.2017 в 13:06
wanek3132
Скаут
Всем привет, может кто скинуть рабочий, настроенный, SDM или BindBP для патча 3.3.5.
Сообщение # 2174 написано 25.03.2017 в 13:54
sess
Скаут
Цитата prn ()
даже в клиенте нету такой фигни, тупо запрос к серверу, по ошибкам реализовать можно легко(не через комбатлог), например, кастуешь в первую цель, ждешь ответа от сервера, если пришла ошибка, то цель перемещается в конец очереди и следующий каст идет в другого. все же просто, чуть медленнее в зависимости от пинга, но без сложных таблиц с расчетами.

ага,только попытка этого каста вызывает гкд,скастил на арена1 вызвало ошибку,перешел к следующему опять ошибка,потерял 1 секунду из-за гкд,не очень ок,для простых скриптов может и сойдет блокировка по ошибке,но когда делаешь фул ротацию на 3 таргета под арену+ 2 таргета party1 party2,да еще твой чар не мелик а рдд или хил какой-нить то это весьма критично


неудачная попытка каста не запускает гкд
проблема в том, что на 3.3.5 в эвенте COMBAT_LOG_EVENT // "Target not in line of sight" в графе имя и гуид цели нули
т.е. ошибку то поймать можно, но заносить в черный список целей в лосе некого

надо как-то "запомнить" цель, к которой будет применяться каст, и при ошибке уже заносить ее в список и переходить к следующей
Сообщение # 2175 отредактировано sess - Суббота, 25.03.2017, 14:36
xGhostx
Скаут
Цитата Valvedoto ()
на ате (warmane) идет только UNIT_ENERGYMANA/etc ивенты и только после делея в ~0.1 sec идут ивенты UNIT_SPELLCAST_SUCCEEDED и прочее. Из - за этого делея в 0.1 сек скрипты по типу UNIT_SPELLCAST_SUCCEEDED/комбатлоганфильтред просто не успевают сработать.

0.1 это нормально с пингом 100мс. или UNIT_ENERGY приходит с 0.1, а еще через 0.1 приходит UNIT_SPELLCAST_SUCCEEDED?
зачем тада играть на таком сломаном сервере?
Цитата prn ()
ага,только попытка этого каста вызывает гкд,скастил на арена1 вызвало ошибку,перешел к следующему опять ошибка,потерял 1 секунду из-за гкд,не очень ок,для простых скриптов может и сойдет блокировка по ошибке,но когда делаешь фул ротацию на 3 таргета под арену+ 2 таргета party1 party2,да еще твой чар не мелик а рдд или хил какой-нить то это весьма критично

если в клиенте абилка проходит проверку, то отправляет на сервер и тут же запускает гкд, если с сервера приходит ошибка, то гкд отменяется. то есть потеря каждой проверки с ошибкой равняется величине пинга. с пингом 100мс нужно 10 ошибок получить чтобы потерять 1сек..
ну ладно я понимаю если один столб обрисовать, но не все арены же? а как быть с Z-координатой? а как быть со столбами которые двигаются? плюс ко всему, если брать координаты юнита, нужно тоже учитывать что там он был пинг назад..
Сообщение # 2176 написано 25.03.2017 в 15:26
prn
Скаут
Цитата xGhostx ()
неудачная попытка каста не запускает гкд
проблема в том, что на 3.3.5 в эвенте COMBAT_LOG_EVENT // "Target not in line of sight" в графе имя и гуид цели нули
т.е. ошибку то поймать можно, но заносить в черный список целей в лосе некого

надо как-то "запомнить" цель, к которой будет применяться каст, и при ошибке уже заносить ее в список и переходить к следующей


попробую по-другому,если ты нажал на кнопку и попытался скастить спелл то в течении 0.3 -0.5 сек все остальные попытки скастить другой спелл будут неудачны,может быть не из-за гкд а по другой причине но это факт, если таких целей много и все они будут за текстурой то до нужной цели может и не дойти тк как будет 0.3+0.3+0.3 ,к этому есть время на которое блокируется таргет если он за текстурой,скажем это 1 сек, и не факт,это все будет потеря времени дамага контроля,вместо того чтобы скрипт кинул что нить полезное он будет тратить время по приоритету в скрипте перебирая таргеты 0.3 0.3 0.3 вместо того чтобы точно зная в кого что и когда кастить
да и если ставить блок спелов при ошибке на target, то изза глюков серва пинга и тд получается что ошибка сработала, цель вышла изза колонны ,а скрипт тупо курит пару сек пока блок не пройдет

проблема в том, что на 3.3.5 в эвенте COMBAT_LOG_EVENT // "Target not in line of sight" в графе имя и гуид цели нули
не проблема ,тут можно запоминать последнее действие в скрипте в какую цель(target arena1 и тд) было последнее действие скрипта и если через скажем 0.1 сек появилась ошибка блочить

с z координатой надо уже высчитывать пересечение отрезка с плоскостью,неудобно заносить такое в массив и долго считать,с отрезками удобнее намного,есть конечно аренки двууровневые или с ящиками,но она вроде всего 1,если делать с z,в wow api нет вроде по z,я делал так создавал переменную в аддоне например z=456352234,вообщем уникальное значение,дальше прогой из памяти вытаскивал z координату,искал в памяти 456352234 это уникальное значение в wow.exe ,записывал в адрес этой переменной координату z в цикле и уже можно было в скрипте аддоне чтото делать с ней
а создать массив координат колонн ящиков достаточно быстро за часик можно на стычках все обьекты вписать
Сообщение # 2177 отредактировано prn - Суббота, 25.03.2017, 16:14
Punisher45
Капрал
Даже со скриптом касты по большей части не инстантны и легко прерываются повторным лосом за колонну, стоит ли вся эта возня, собственно, свечей? Километры кода, миллион проверок и прогонов по массивам не сделают этот скрипт особо шустрым, поэтому не вижу смысла в этом ,проще самому следить за положением своей цели/фокуса на арене)
Сообщение # 2178 написано 25.03.2017 в 17:29
prn
Скаут
Цитата Punisher45 ()
Даже со скриптом касты по большей части не инстантны и легко прерываются повторным лосом за колонну, стоит ли вся эта возня, собственно, свечей? Километры кода, миллион проверок и прогонов по массивам не сделают этот скрипт особо шустрым, поэтому не вижу смысла в этом ,проще самому следить за положением своей цели/фокуса на арене)
лучше 100% чем с проверкой на ошибку,проверкой количества нажатий на кнопку,скрипт почти никогда не зацикливается не пытается нажать по нескольку раз на один и тот же спелл,да и к примеру пристовский фир если надо вписать в скрипт,и будет ситуация когда цель за текстурой но в радиусе действия фира, если не учитывать колонны фир вникуда уходит, также швд например в тебя кастит овцу маг находясь у тебя за спиной,и скрипт пытается кинуть в него же швд вместо того чтобы кидать его в другую цель без учета колон
сейчас пытаюсь сделать проверку на нахождение цели за спиной или того что цель не может быть атакована из-за того цель находится позади вас, не придумать алгоритм когда даны две координаты игрока и цели и угол наклона игрока относительно севера
Впринципе если сделаю,будет решена проблема с кастом спелов как дыхание дракона у мага где важна позиция игрока относительно цели чтобы спелл не уходил вникуда
Сообщение # 2179 отредактировано prn - Суббота, 25.03.2017, 18:04
xGhostx
Скаут
Цитата prn ()
0.3+0.3+0.3

а не проще найти спеллы/спеллы итемов которые не вызывают гкд? например у дк хватка смерти одна из таких, но она с кулдауном и не годится. может снежками или кожанными мячиками запастись и кидатся в друг друга, чтоб узнать за текстами или нет?))
Сообщение # 2180 написано 25.03.2017 в 19:03
prn
Скаут
Цитата xGhostx ()
а не проще найти спеллы/спеллы итемов которые не вызывают гкд? например у дк хватка смерти одна из таких, но она с кулдауном и не годится. может снежками или кожанными мячиками запастись и кидатся в друг друга, чтоб узнать за текстами или нет?))

ну как вариант,но на арене то не будут вообще работать итемы мячики и тд,хватку пытаться скастить для проверки колонны тоже весьма сомнительно она может и сработать просто притянув ненужную цель,а так вообще да возможно в цикле пытаться скастить на каждый таргет этот спел ,результат ошибки заносить в таблицу,и потом уже смотреть какая цель в лосе какая нет,да и итем или спел должен быть такой чтобы не влиять на общее гкд ,кастица на арене и тд
Сообщение # 2181 написано 25.03.2017 в 19:16
Omaygad
Скаут
Код
/run if (not UnitBuff("target", "Защита от страха")) and (not UnitBuff("target", "Плащ Теней")) and (not UnitBuff("target", "Сдерживание")) and (not UnitBuff("target", "Антимагический панцирь")) then RunMacroText("/cast Ментальный крик")end

Ребята выручайте вот скрипт который блокирует фир , если на противнике следующие бафы , работает чуток не правильно , если я держу в таргете цель ту которая применяет магию допустим рога юзнул кош , то фир блокируется это хорошо , но если я держу в таргете себя или напа фир проходит все ровно , помогите исправить .
Сообщение # 2182 отредактировано Omaygad - Вторник, 28.03.2017, 10:39
Punisher45
Капрал
Цитата Omaygad ()
Ребята выручайте вот скрипт который блокирует фир , если на противнике следующие бафы , работает чуток не правильно , если я держу в таргете цель ту которая применяет магию допустим рога юзнул кош , то фир блокируется это хорошо , но если я держу в таргете себя или напа фир проходит все ровно , помогите исправить .

Концепция макроса "на все случаи жизни" это конечно здорово, но я лично вижу 2 варианта

Вариант 1
Ты фокусишь цель в которую намерен выдавать контроли и фиряешь ее по кд скриптом

Код
if not UnitBuff("focus", "Защита от страха") and not UnitBuff("focus", "Плащ Теней") and not UnitBuff("focus", "Сдерживание") and not UnitBuff("focus", "Антимагический панцирь") then
   CastSpellByName("Ментальный крик")
end

В принципе этот вариант неплох, но имеет недостатки, например если на фокусе будет фирвард, а тебе надо фирнуть сразу двоих, (они стоят вплотную друг к другу) то макрос не сработает. Так же если в фокусе быдлоинвизер то фокус будет спадать (это и касается любителей покайтить вроде магов прыгунов и хантеров, при увеличении дистанции фокус слетает) в принципе это лечится двумя отдельными биндами на первом просто фир, на второй расширенный со скриптом, либо через модифер

Вариант 2

Код
local buffbase = {"Защита от страха","Плащ Теней","Сдерживание","Антимагический панцирь","Божественный щит","Ледяная глыба","Ярость берсерка"}
local objbase = {"arena1","arena2","arena3","arena4","arena5"}
for i=1,#objbase do
   for j=1,#buffbase do
      if not UnitBuff(objbase[i],buffbase[j]) and IsSpellInRange("Ментальный крик",objbase[i]) then
         CastSpellByName("Ментальный крик")
      end
   end
end

Я не знаю, будет ли это работать, но суть примерно такая: идет перебор в 2 циклах всех арена фреймов на заданные баффы в массиве, если совпадения на указанные баффы нет, то идет фир. Минусы в том что цикл схлопнется после первого срабатывания, то есть на какой то определенный арена фрейм нет привязки, ты то конечно в любом случае кого-то фирнешь, но не того кого надо, тоесть если скажем на arena1 есть фир вард, то цикл пропустит этот фрейм, но если на arena2 нет ничего то фир все равно кастанется, поэтому вариант с фокусом намного уместнее ибо тут дополнительно нужна проверка на расстояние от  твоего персонажа до конечной цели, чтобы фир не разряжался куда попало, но я лично не видел такой функции поэтому предлагаю попробовать через функцию IsSpellInRange, хотя не уверен что она работает для спелов по области вроде ментального крика, в общем над вторым вариантом надо крепко думать и дорабатывать
Сообщение # 2183 отредактировано Punisher45 - Вторник, 28.03.2017, 17:08
Omaygad
Скаут
От души , завтра по тестирую , ибо щас чёт уже спать охото , но я уже вижу большие надежды на второй вариант ;))) завтра ещё отдам знакомому на доработку .
Сообщение # 2184 отредактировано Omaygad - Вторник, 28.03.2017, 23:07
guma193
#WarlockForBugs
Есть подобное для офа по типу Yasb ? готов отдать бота с ключом но сам бот обновлялся в последний раз для дренора , А все сервера чита мертвы)
#WarlockForBugs Русская команда багеров
http://vk.com/warlockforbugs
Сообщение # 2185 отредактировано guma193 - Среда, 29.03.2017, 13:16
Kieg
Сержант
Какой аддон для скриптов работает на офе?
Сообщение # 2186 написано 29.03.2017 в 16:01
rival123
Скаут
Товарищи, нужна помощь.
Не смог уместить все в один макрос (bind pad). Как можно решить мою проблему? Можно как-то запускать одновременно 2 макроса?
Возможно где-то было уже, но поиск работает очень криво. Не нашел.
Сообщение # 2187 написано 02.04.2017 в 00:29
Omaygad
Скаут
Добрый день знатоки , вот скрипт .

Код
SWD = CreateFrame("Frame", "SWD", UIParent);        
SWD:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")        
SWD:SetScript("OnEvent", function(self, event, arg1, arg2)        
SpellBase = {"Дезориентирующий выстрел","Грубый прием","Превращение","Покаяние","Ослепление","Ошеломление","Ненасытная стужа"}   
local cd = GetSpellCooldown("Слово Тьмы: Смерть")     
for v = 1,#SpellBase do        
local args = {arg1, arg2}        
if (arg1 == "target" and arg2 == SpellBase[v]) then
if cd == 0 then     
CastSpellByName("Слово Тьмы: Смерть") 
end    
end        
end        
end)

Кто поможет вставить в него следующие команды .
/cancelaura Слово силы: Щит
/cancelaura Божественное покровительство
p/s всем добра , с меня спасибки .
Сообщение # 2188 написано 02.04.2017 в 08:13
Punisher45
Капрал
Цитата Omaygad ()
Кто поможет вставить в него следующие команды .


Элементарно

Код
SWD = CreateFrame("Frame", "SWD", UIParent);        
SWD:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")        
SWD:SetScript("OnEvent", function(self, event, arg1, arg2)        
SpellBase = {"Дезориентирующий выстрел","Грубый прием","Превращение","Покаяние","Ослепление","Ошеломление","Ненасытная стужа"}   
local cd = GetSpellCooldown("Слово Тьмы: Смерть")     
for v = 1,#SpellBase do        
local args = {arg1, arg2}        
if (arg1 == "target" and arg2 == SpellBase[v]) then
if cd == 0 then  
if UnitBuff("player","Слово силы: Щит")  then
CancelUnitBuff("player","Слово силы: Щит");
elseif UnitBuff("player","Божественное покровительство")  then
CancelUnitBuff("player","Божественное покровительство");
end
CastSpellByName("Слово Тьмы: Смерть")
end    
end        
end        
end)
Сообщение # 2189 написано 02.04.2017 в 15:27
guma193
#WarlockForBugs
Это очень примитивно но возможно поможет просто сделай два макроса и используй макро геймер для одновременного нажатия
#WarlockForBugs Русская команда багеров
http://vk.com/warlockforbugs
Сообщение # 2190 отредактировано guma193 - Воскресенье, 02.04.2017, 15:29
Поиск: