Модератор форума: staford11 |
Форум Хитрости Пиратских серверов Читы для WoW Использование Lua скриптов. |
Использование Lua скриптов. |
Не надо придумывать велосипед и перебирать все возможные баблы и прочее. UnitCastingInfo возвращает переменную о защищенности каста, true(1) - защищенный false(0) - не защищен. Ну например можно это использовать в простенькой проверке в блоке условия: Код spell, _, _, _, _, _, _, _, interrupt = UnitCastingInfo("unit") if spell and not interrupt then CastSpellByName("Зуботычина") end Можеш вставить эту проверку UnitCastingInfo в этот скрипт ? Я не могу понять куда её вставить. В луа новичок. Код function Kick(self, elapsed) local v1, v2, v3, v4, v5, v6, v7 v1 = { "target", "focus", "mouseover", "targettarget", "pettarget", "arena1", "arena2", "arena3", "arena4", "arena5", "arenapet1", "arenapet2", "arenapet3", "arenapet4", "arenapet5" } for i = 1, #v1 do if UnitExists(v1[i]) and UnitCanAttack("player", v1[i]) then v2, _, _, _, _, v3, _, _, v4 = UnitCastingInfo(v1[i]) v5 = { 1766 } v6 = { 0.5 } for j = 1, #v5 do if GetSpellCooldown(v5[j]) == 0 and IsSpellInRange(GetSpellInfo(v5[j]), v1[i]) == 1 then if v4 == false or v4 == true and v5 [j]== 47481 then v7 = v3/1000 - GetTime() if v7 <= v6 [j]then CastSpellByName(GetSpellInfo(v5[j]), v1[i]) end end end end end end end CreateFrame("Frame", "KickFrame") KickFrame:SetScript("OnUpdate", Kick) |
Здравствуйте. Может кто-то подсказать каким образом можно описать в скрипте использование определенного предмета противником (именно предмета, а не заклинания)? Несколько раз пролистал статьи wowprogramming по api и ивентам но ничего подходящего не нашел. Самый грубый пример использования: тринкет - блайнд. Рассчитываю на вашу помощь).
И еще один вопрос. есть ли какие-то различия между скриптами на 3.3.5а и 5.4.8? |
Здравствуйте. Может кто-то подсказать каким образом можно описать в скрипте использование определенного предмета противником (именно предмета, а не заклинания)? Несколько раз пролистал статьи wowprogramming по api и ивентам но ничего подходящего не нашел. Самый грубый пример использования: тринкет - блайнд. Рассчитываю на вашу помощь).
Сообщение # 2346 написано 12.06.2017 в 13:07
|
xGhostx, спасибо за разъяснение. Может теперь кто то проверить данный скрипт на наличие ошибок? Возможности проверить самому пока нет.
Код 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 v1, v2, v3 v1 = { "target", "focus", "mouseover", "targettarget", "pettarget", "arena1", "arena2", "arena3", "arena4", "arena5", "arenapet1", "arenapet2", "arenapet3", "arenapet4", "arenapet5" } for i = 1, #v1 do if UnitExists(v1[i]) and UnitCanAttack("player", v1[i]) then local name = UnitName("player") if arg2 == "SPELL_CAST_SUCCESS" and name ~= arg4 and name == arg7 and arg10 == SpellBase [s]then local enabled = GetSpellCooldown("Ослепление") v2 = { 48160, 48125, 48300, 53382, 48676, 48672 } for j=1,#v2 do v3 = UnitDebuff(v1[i], v2[j]) if v3 == 0 then if enabled == 0 then CastSpellByName("Ослепление", v1[i]) end end end end end end end end end) И опрос знатокам: как можно описать условие того, что целью заклинания является именно мой персонаж? Возможно конечно сделать проверку на то кто находится в таргете противника, но это черевато проблемами, т.к. в 3с если ты, например дашь рефлект в отцу, кастующуюся по фокусу в твоего хила то можешь отправиться в могилу за последующее время отката рефлекта. |
Привет, подскажите пожалуйсто, как мне к скрипту на диспел добавить проверку дополнительных дебафов, допустим я указал при условии что еесть нейтрализующий яд, я юзаю диспел на пати/себя, как добавить проверку на условный дебаф, чтоб при условии его наличия не давал диспел ) можно в лс, буду очень признателен.
Сообщение # 2352 написано 14.06.2017 в 23:12
|
Babladin007,
Signature: name, rank, icon, count, dispelType, duration, expires, caster, isStealable, nameplateShowPersonal, spellID, canApplyAura, isBossDebuff, _, nameplateShowAll, timeMod, value1, value2, value3 = UnitDebuff("unit", index [, "filter"]) or UnitDebuff("unit", "name" [, "rank" [, "filter"]]) В дальнейшем советую использовать wowprogramming и искать там. |
помогите вставить в этот автокик проверку if InteruptEverything чтобы не сбивать все подряд а выбрать только нужные заклинания
Код function Kick(self, elapsed) local v1, v2, v3, v4, v5, v6, v7 v1 = { "target", "focus", "mouseover", "targettarget", "pettarget", "arena1", "arena2", "arena3", "arena4", "arena5", "arenapet1", "arenapet2", "arenapet3", "arenapet4", "arenapet5" } for i = 1, #v1 do if UnitExists(v1[i]) and UnitCanAttack("player", v1[i]) then v2, _, _, _, _, v3, _, _, v4 = UnitCastingInfo(v1[i]) v5 = { 57994 } v6 = { 0.5 } for j = 1, #v5 do if GetSpellCooldown(v5[j]) == 0 and IsSpellInRange(GetSpellInfo(v5[j]), v1[i]) == 1 then if v4 == false or v4 == true and v5 [j]== 47481 then v7 = v3/1000 - GetTime() if v7 <= v6 [j]then CastSpellByName(GetSpellInfo(v5[j]), v1[i]) end end end end end end end CreateFrame("Frame", "KickFrame") KickFrame:SetScript("OnUpdate", Kick) у меня PQR , в нем есть вот такие условия Код InteruptEverything = true --Set to true to interupt everything. --The bot will only interupt the below spells if the above setting is set to false. InteruptList = { --Here you need to add the spell ids of what you want to interupt. seperate with comma 49276,48782,48785,50464,48378,48443,48071,48063,49273,55458,53007,59172,53759,48160,60043 --Lesser Healing Wave : Rank 9 }
Сообщение # 2354 написано 17.06.2017 в 12:31
|
Решил попробовать сделать скрипт на автодиспелл для хпала, но не работает. Скрипт должен делать следующее: если у меня > 50% хп и у юнита из базы v1, на котором висит дебаф из debuffbase, тоже > 50% хп, то каст "очищение" на нужный юнит. Проверка на хп необходима, что бы диспелл не спамился в те моменты, когда нужно хилить. Еще хотелось бы добавить проверку на враждебность таргета, что бы скрипт не пытался диспелить с врагов (очищение диспелит только с союзников)
Вот код, который я сделал: Код function Dispell(self, elapsed) local v1, debuffbase v1 = { "target", "player", "party1", "party2", "party3", "party4", "party5" } for i = 1, #v1 do if UnitHealth("player")/UnitHealthMax("player") > 0.50 and UnitHealth(v1[i])/UnitHealthMax(v1[i]) > 50 then debuffbase = {"Кольцо льда", "Лик смерти", "Глубокая заморозка", "Превращение", "Молот правосудия"} for j = 1, #debuffbase do if IsSpellInRange("Очищение", v1[i]) == 1 and UnitDebuff(v1[i], debuffbase[j]) then CastSpellByName("Очищение", v1[i]) end end end end end CreateFrame("Frame", "DispellFrame") DispellFrame:SetScript("OnUpdate", Dispell) Код "слепил" из частей скриптов, которые есть в этой теме ну и добавил своего не много, укажите на ошибки пожалуйста и помогите их исправить, что бы всё заработало Базу дебафов уже собрал, не стал вставлять её полностью сюда) Если вдруг в теме уже выкладывался скрипт на диспелл определенных дебафов с определенных юнитов, то скиньте ппожалуйста, с меня плюсик |
всем спасибо за ответы, чуть позже проверю всё и отпишу о результате
Добавлено (26.06.2017, 02:04) --------------------------------------------- отлично работает, спасибо за помощь плюсики кинул) Добавлено (27.06.2017, 17:07) --------------------------------------------- ребят, кто поможет найти и исправить ошибку? Код function Dispell(self, elapsed) local v1, v2, v3, v4 v1 = { "target", "player", "party1", "party2", "party3", "party4", "party5" } for i = 1, #v1 do if UnitExists(v1[i]) and not UnitDebuff(v1[i],"Смерч") then v2 = {"Кольцо льда", "Лик смерти", "Глубокая заморозка", "Превращение", "Молот правосудия", "Обморожение", "Ледяная стрела", "Конус холода", "Ледяные оковы", "Ненасытная стужа", "Замедление", "Стрела ледяного огня", "Окоченение", "Глубинный ужас", "Ментальный крик", "Калечащий яд", "Нейтрализующий яд VII", "Гнев деревьев", "Символ пламени тьмы", "Страх", "Соблазн", "Неистовство тьмы", "Огненный шлейф", "Всепожирающая чума", "Оковы земли", "Эффект замораживающей стрелы", "Дыхание дракона", "Щит мстителя", "Жертвенный огонь", "Укус змеи", "Удержание", "Зараженные раны", "Хватка земли", "Вой ужаса", "Ледяной шок", "Ночной кошмар", "Шип", "Покаяние", "Сеть"} for j = 1, #v2 do if UnitHealth("target") / UnitHealthMax("target") * 100 >= 50 and UnitHealth(v1[i]) / UnitHealthMax(v1[i]) * 100 >= 50 and UnitDebuff(v1[i], v2[j]) and not UnitDebuff(v1[i],"Нестабильное колдовство") and IsSpellInRange("Очищение", v1[i]) == 1 then CastSpellByName("Очищение", v1[i]) end for с = 1, #v1 do if UnitExists(v1[с]) and not UnitDebuff(v1[с],"Смерч") then v3 = {"Кольцо льда", "Обморожение", "Ледяная стрела", "Конус холода", "Стрела ледяного огня", "Окоченение","Калечащий яд", "Удержание", "Зараженные раны", "Хватка земли", "Пронзительный вой", "Аура ледяной ловушки", "Засада", "Осквернение"} for f = 1, #v3 do if UnitHealth(v1[с]) / UnitHealthMax(v1[с]) * 100 >= 25 and UnitDebuff(v1[с], v3[f]) and GetSpellCooldown("Длань свободы")==0 and IsSpellInRange("Длань свободы", v1[с]) == 1 then CastSpellByName("Длань свободы", v1[с]) end for e = 1, #v1 do if UnitExists(v1[e]) and not UnitDebuff(v1[e],"Смерч") then v4 = {"Смертельный удар", "Прицельный выстрел", "Нейтрализующий яд VII", "Зараженные раны", "Пронзительный вой", "Подрезать сухожилия", "Засада", "Раскол брони"} for b = 1, #v4 do if UnitHealth(v1[e]) / UnitHealthMax(v1[e]) * 100 <= 35 and not UnitDebuff(v1[e],"Воздержанность") and GetSpellCooldown("Длань защиты")==0 and IsSpellInRange("Длань защиты", v1[e]) == 1 and UnitDebuff(v1[e], v4[b]) then CastSpellByName("Длань защиты", v1[e]) end end end end end end end end end end end CreateFrame("Frame", "DispellFrame") DispellFrame:SetScript("OnUpdate", Dispell) попытался добавить боп и фридом к диспеллу, работает, но сильно падает фпс, как только беру кого нибудь в таргет. для бопа и фридома отдельные базы дебафов, я попытался сделать всё что приходило на ум, но к сожалению в синтаксисе шарю не сильно прошу знатоков помочь с меня плюсик |
Код function Suww(elapsed) for bag = 0,4,1 do for slot = 1, 32, 1 do local name = GetContainerItemLink(bag,slot) if name and string.find(name,"название хлама") then PickupContainerItem(bag,slot) DeleteCursorItem() end end end return true end CreateFrame("Frame", "frameB") frameB:SetScript("OnUpdate", Suww) пробовал так не хочет ошибка Код if name and string.find(name,"название хлама", and string.find(name,"название хлама") then
Сообщение # 2360 написано 28.06.2017 в 10:37
|
snup5, /run for bag = 0,4 do for slot = 1,GetContainerNumSlots(bag) do local item = GetContainerItemLink(bag,slot) if item and item:find("хлам") then PickupContainerItem(bag,slot) DeleteCursorItem() end end end
Серые вещи /script ClearCursor()local g,i,j,s,a,b=gsub;for i=0,4 do for j=1,GetContainerNumSlots(i)do s=GetContainerItemLink(i,j)if(s)then a,b,s=GetItemInfo(g(g(s,".*\124H",""),"\124h.*","" ))if(s==0)then PickupContainerItem(i,j)DeleteCursorItem()end;end; end;end Белые вещи /run for bag = 0,4,1 do for slot = 1, 32, 1 do local name = GetContainerItemLink(bag,slot); if name and string.find(name,"cffffffff") then PickupContainerItem(bag,slot); DeleteCursorItem(); end; end; end Зелёные вещи /run for bag = 0,4,1 do for slot = 1, 32, 1 do local name = GetContainerItemLink(bag,slot); if name and string.find(name,"cff1eff00") then PickupContainerItem(bag,slot); DeleteCursorItem(); end; end; end
Пишу макросы и профили PQR
Моя подборка пве скриптов-ротаций 3.3.5
Сообщение # 2361 написано 28.06.2017 в 19:28
|
snup5, /run for bag = 0,4 do for slot = 1,GetContainerNumSlots(bag) do local item = GetContainerItemLink(bag,slot) if item and item:find("хлам") then PickupContainerItem(bag,slot) DeleteCursorItem() end end endСерые вещи /script ClearCursor()local g,i,j,s,a,b=gsub;for i=0,4 do for j=1,GetContainerNumSlots(i)do s=GetContainerItemLink(i,j)if(s)then a,b,s=GetItemInfo(g(g(s,".*\124H",""),"\124h.*","" ))if(s==0)then PickupContainerItem(i,j)DeleteCursorItem()end;end; end;end Белые вещи /run for bag = 0,4,1 do for slot = 1, 32, 1 do local name = GetContainerItemLink(bag,slot); if name and string.find(name,"cffffffff") then PickupContainerItem(bag,slot); DeleteCursorItem(); end; end; end Зелёные вещи /run for bag = 0,4,1 do for slot = 1, 32, 1 do local name = GetContainerItemLink(bag,slot); if name and string.find(name,"cff1eff00") then PickupContainerItem(bag,slot); DeleteCursorItem(); end; end; end вот первый макрос он удаляет 1 хлам можно туда добавить еще 2 хлама ?
Сообщение # 2362 написано 29.06.2017 в 08:54
|
макрос мне не походит мне нужно просто чтобы он удалял 3 вещи которые я укажу а скрипт я лепил с этих макросов что вы выложиливот первый макрос он удаляет 1 хлам можно туда добавить еще 2 хлама ? Капитан очевидность подсказывает, что если погуглить, то на первой же ссылке (а именно на близовском батл нет) лежит уже готовый код Так же под его мудрым руководством можно догадаться, что достаточно создать три макроса с этим кодом, где в каждом будет определенная ненужная шмотка либо так: |
sixsixsix999, а значение party5 в массиве это что должно значить? Насколько я помню группа в вов состоит из 5 человек, т.е. { "player" "party1" "party2" "party3"
"party4" } Возможно, если выпилить "party5" то и фпс садиться не будет. Как проверите отпишитесь пожалуйста в теме.
Сообщение # 2364 написано 29.06.2017 в 18:17
|
Fqlolxl,
ок попробую ну а вообще дополнительные базы дебафов я правильно вписал? я просто подозреваю, что из-за возможных ошибок в синтаксисе фпс падает. всё таки я начинающий в этом деле, но учусь быстро щас попробую без party5 и отпишу Добавлено (29.06.2017, 19:09) |
Причина - неправильное построение вложенных циклов и перепутанные итераторы. Если перебираешь массив v1, то итератор, который внутри квадратных скобок, всегда должен быть из его родного цикла, здесь это - i. Боп лучше кидать не по дебафам + хп юнита, а проверяя в бою ли он + хп, меньше нагрузка. Код function Dispell(self, elapsed) local v1, v2, v3 v1 = { "player", "target", "targettarget", "mouseover", "mouseovertarget", "party1", "party2", "party3", "party4" } for i = 1, #v1 do if UnitExists(v1[i]) and UnitCanAttack("player", v1[i]) == nil and UnitDebuff(v1[i],"Смерч") == nil then v2 = {"Кольцо льда", "Лик смерти", "Глубокая заморозка", "Превращение", "Молот правосудия", "Обморожение", "Ледяная стрела", "Конус холода", "Ледяные оковы", "Ненасытная стужа", "Замедление", "Стрела ледяного огня", "Окоченение", "Глубинный ужас", "Ментальный крик", "Калечащий яд", "Нейтрализующий яд VII", "Гнев деревьев", "Символ пламени тьмы", "Страх", "Соблазн", "Неистовство тьмы", "Огненный шлейф", "Всепожирающая чума", "Оковы земли", "Эффект замораживающей стрелы", "Дыхание дракона", "Щит мстителя", "Жертвенный огонь", "Укус змеи", "Удержание", "Зараженные раны", "Хватка земли", "Вой ужаса", "Ледяной шок", "Ночной кошмар", "Шип", "Покаяние", "Сеть"} v3 = {"Кольцо льда", "Обморожение", "Ледяная стрела", "Конус холода", "Стрела ледяного огня", "Окоченение","Калечащий яд", "Удержание", "Зараженные раны", "Хватка земли", "Пронзительный вой", "Аура ледяной ловушки", "Засада", "Осквернение"} for j = 1, #v2 do if UnitHealth("player") / UnitHealthMax("player") * 100 >= 50 and UnitHealth(v1[i]) / UnitHealthMax(v1[i]) * 100 >= 50 and UnitDebuff(v1[i], v2[j]) and UnitDebuff(v1[i], "Нестабильное колдовство") == nil and IsSpellInRange("Очищение", v1[i]) == 1 then CastSpellByName("Очищение", v1[i]) end end for j = 1, #v3 do if UnitHealth(v1[i]) / UnitHealthMax(v1[i]) * 100 >= 25 and UnitDebuff(v1[i], v3[j]) and GetSpellCooldown("Длань свободы") <= 2 and IsSpellInRange("Длань свободы", v1[i]) == 1 then CastSpellByName("Длань свободы", v1[i]) end end if UnitAffectingCombat(v1[i]) and UnitHealth(v1[i]) / UnitHealthMax(v1[i]) * 100 <= 35 and UnitDebuff(v1[i],"Воздержанность") == nil and GetSpellCooldown("Длань защиты") <= 2 and IsSpellInRange("Длань защиты", v1[i]) == 1 then CastSpellByName("Длань защиты", v1[i]) end end end end CreateFrame("Frame", "DispellFrame") DispellFrame:SetScript("OnUpdate", Dispell) Добавлено (29.06.2017, 20:02) Вариант через таблицу, с возможностью удаления неограниченного количества определенных вещей. Для безопасности вырубил возможность удаления белого и зеленого шмота. Что бы включить, нужно булеву переменную ["Имя вещи"] = false заменить на ["Имя вещи"] = true, соблюдая нижний регистр. Код function Suww(elapsed) -- 9d9d9d - серые, cffffffff - белые, cff1eff00 - зеленые local v1 = { ["9d9d9d"] = true, ["cffffffff"] = false, ["cff1eff00"] = false, ["Большой медвежий зуб"] = true, ["Имя вещи"] = true } for bag = 0, 4, 1 do for slot = 1, GetContainerNumSlots(bag), 1 do local v2 = GetContainerItemLink(bag, slot) if v2 then for i, j in pairs(v1) do if string.find(v2, i) and j then ClearCursor() PickupContainerItem(bag, slot) DeleteCursorItem() end end end end end end CreateFrame("Frame", "frameB") frameB:SetScript("OnUpdate", Suww)
Сообщение # 2366 написано 29.06.2017 в 20:02
|
/run a=string.find for b=0,4 do for s=1,32 do n=GetContainerItemLink(b,s);if n and a(n,"название шмотки1") or a(n,"название шмотки2") or a(n,"название шмотки3") then PickupContainerItem(b,s);DeleteCursorItem();end;end;end; А за or спасибо Вот рабочий Код function Suwwwq(elapsed) for bag = 0,4,1 do for slot = 1, 32, 1 do local name = GetContainerItemLink(bag,slot) if name and a(name,"Сырой шалфокунь") or name and a(name,"Белый ром Ромси") or name and a(name,"Сырой радужный тунец") then PickupContainerItem(bag,slot) DeleteCursorItem() end end end return true end CreateFrame("Frame", "frameB") frameB:SetScript("OnUpdate", Suwwwq) |
| |||