Модератор форума: staford11  
Использование Lua скриптов.
mikel17
Скаут
Цитата sixsixsix999 ()
проверь код у себя в сдм, возможно где-то есть лишние пробелы, потому что у меня не бьёт касты в баблы и всё остальное


у меня PQR
Сообщение # 2341 написано 12.06.2017 в 13:57
Fqlolxl
Скаут
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с если ты, например дашь рефлект в отцу, кастующуюся по фокусу в твоего хила то можешь отправиться в могилу за последующее время отката рефлекта.
Сообщение # 2342 отредактировано Fqlolxl - Вторник, 13.06.2017, 00:33
sixsixsix999
Скаут
Цитата mikel17 ()
у меня PQR

что же ты сразу не сказал?) с PQR я к сожалению не знаком
Сообщение # 2343 написано 13.06.2017 в 12:22
mikel17
Скаут
Цитата sixsixsix999 ()
что же ты сразу не сказал?) с PQR я к сожалению не знаком

я слышал там нужна какая-то программа для запуска сдм на цирцле, не подскажеш что за прога ?
Гагарин у меня не работает, поскольку процесор AMD
Сообщение # 2344 отредактировано mikel17 - Среда, 14.06.2017, 14:29
Punisher45
Капрал
Цитата Fqlolxl ()
опрос знатокам: как можно описать условие того, что целью заклинания является именно мой персонаж?

На уровне функций апи - никак, насколько я знаю
Сообщение # 2345 написано 14.06.2017 в 20:25
Babladin007
Скаут
Привет, подскажите пожалуйсто, как мне к скрипту на диспел добавить проверку дополнительных дебафов, допустим я указал при условии что еесть нейтрализующий яд, я юзаю диспел на пати/себя, как добавить проверку на условный дебаф, чтоб при условии его наличия не давал диспел ) можно в лс, буду очень признателен.
Сообщение # 2346 написано 14.06.2017 в 23:12
Fqlolxl
Скаут
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 и искать там.
Сообщение # 2347 отредактировано Fqlolxl - Четверг, 15.06.2017, 20:05
mikel17
Скаут
помогите вставить в этот автокик проверку 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

}
Сообщение # 2348 написано 17.06.2017 в 12:31
ponkal
Скаут
может кто годный пкр на вара/энха/дк скинуть? 548
Сообщение # 2349 написано 18.06.2017 в 22:14
sixsixsix999
Скаут
Решил попробовать сделать скрипт на автодиспелл для хпала, но не работает. Скрипт должен делать следующее: если у меня > 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)


Код "слепил" из частей скриптов, которые есть в этой теме ну и добавил своего не много, укажите на ошибки пожалуйста и помогите их исправить, что бы всё заработало smile Базу дебафов уже собрал, не стал вставлять её полностью сюда)
Если вдруг в теме уже выкладывался скрипт на диспелл определенных дебафов с определенных юнитов, то скиньте ппожалуйста, с меня плюсик smile
Сообщение # 2350 отредактировано sixsixsix999 - Среда, 21.06.2017, 11:42
Fqlolxl
Скаут
sixsixsix999, немного смущает условие
Код
UnitHealth(v1[i])/UnitHealthMax(v1[i]) > 50 then
это отношение не может быть больше единицы, насколько я понимаю
Сообщение # 2351 написано 25.06.2017 в 11:37
VxtMkr
Скаут
Сообщение # 2352 написано 25.06.2017 в 21:15
sixsixsix999
Скаут
всем спасибо за ответы, чуть позже проверю всё и отпишу о результате smile

Добавлено (26.06.2017, 02:04)
---------------------------------------------
отлично работает, спасибо за помощь smile плюсики кинул)

Добавлено (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)


попытался добавить боп и фридом к диспеллу, работает, но сильно падает фпс, как только беру кого нибудь в таргет.
для бопа и фридома отдельные базы дебафов, я попытался сделать всё что приходило на ум, но к сожалению в синтаксисе шарю не сильно sad
прошу знатоков помочь smile с меня плюсик
Сообщение # 2353 отредактировано sixsixsix999 - Вторник, 27.06.2017, 17:10
snup5
Скаут

Код
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
Сообщение # 2354 написано 28.06.2017 в 10:37
ganus1993
Сержант
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
Сообщение # 2355 написано 28.06.2017 в 19:28
snup5
Скаут
Цитата ganus1993 ()
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
макрос мне не походит мне нужно просто чтобы он удалял 3 вещи которые я укажу а скрипт я лепил с этих макросов что вы выложили
вот первый макрос он удаляет 1 хлам можно туда добавить еще 2 хлама ?
Сообщение # 2356 написано 29.06.2017 в 08:54
Punisher45
Капрал
Цитата snup5 ()
макрос мне не походит мне нужно просто чтобы он удалял 3 вещи которые я укажу а скрипт я лепил с этих макросов что вы выложиливот первый макрос он удаляет 1 хлам можно туда добавить еще 2 хлама ?

Капитан очевидность подсказывает, что если погуглить, то на первой же ссылке (а именно на близовском батл нет) лежит уже готовый код



Так же под его мудрым руководством можно догадаться, что достаточно создать три макроса с этим кодом, где в каждом будет определенная ненужная шмотка

либо так:

Сообщение # 2357 отредактировано Punisher45 - Четверг, 29.06.2017, 17:24
Fqlolxl
Скаут
sixsixsix999, а значение party5 в массиве это что должно значить? Насколько я помню группа в вов состоит из 5 человек, т.е. { "player" "party1" "party2" "party3"
"party4" }
Возможно, если выпилить "party5" то и фпс садиться не будет. Как проверите отпишитесь пожалуйста в теме.
Сообщение # 2358 написано 29.06.2017 в 18:17
sixsixsix999
Скаут
Fqlolxl,
ок попробую
ну а вообще дополнительные базы дебафов я правильно вписал? я просто подозреваю, что из-за возможных ошибок в синтаксисе фпс падает. всё таки я начинающий в этом деле, но учусь быстро smile
щас попробую без party5 и отпишу

Добавлено (29.06.2017, 19:09)
---------------------------------------------
теперь скрипт вообще ничего не делает, фпс стабильный... не знаю в чем дело

Сообщение # 2359 отредактировано sixsixsix999 - Четверг, 29.06.2017, 18:39
VxtMkr
Скаут


Цитата sixsixsix999 ()
сильно падает фпс


Причина - неправильное построение вложенных циклов и перепутанные итераторы.

Цитата sixsixsix999 ()
UnitExists(v1[с])


Если перебираешь массив 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)
---------------------------------------------

Цитата snup5 ()
можно туда добавить еще 2 хлама ?


Вариант через таблицу, с возможностью удаления неограниченного количества определенных вещей. Для безопасности вырубил возможность удаления белого и зеленого шмота. Что бы включить, нужно булеву переменную ["Имя вещи"] = 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)
Сообщение # 2360 написано 29.06.2017 в 20:02
sixsixsix999
Скаут
VxtMkr, спасибо большое за помощь) теперь буду знать про итераторы smile насчет бопа - боп спасает только от физ урона, и дебафы для бопа я подобрал именно от миликов, не хотелось бы юзать боп против кастеров)
Сообщение # 2361 написано 29.06.2017 в 22:26
snup5
Скаут
Цитата Punisher45 ()
/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)
Сообщение # 2362 отредактировано snup5 - Пятница, 30.06.2017, 01:36
Punisher45
Капрал
Цитата snup5 ()
ты проверял его ?


нет конечно, не было времени
у меня для всякой подобной хрени всегда был аддон trashcan
Сообщение # 2363 написано 01.07.2017 в 14:01
Fqlolxl
Скаут
Может кто подсказать как описать проверку на класс юнита? В плане, воин, шаман, друид и т.п. Покопался в api, ничего кроме неописанных функций не нашел.
Сообщение # 2364 написано 02.07.2017 в 20:05
Kieg
Сержант
Цитата Fqlolxl ()
Может кто подсказать как описать проверку на класс юнита? В плане, воин, шаман, друид и т.п. Покопался в api, ничего кроме неописанных функций не нашел.


http://wowprogramming.com/docs/api/UnitClass
Сообщение # 2365 отредактировано Kieg - Воскресенье, 02.07.2017, 21:08
sixsixsix999
Скаут
Ребята, пишу скрипт на захил для дц, никак не могу придумать как выбирать из v1 юнита с самым низким количеством хп, вот код:


Код
function Penance(self, elapsed)
  local v1, v2, v3, v4
  v1 = { "player", "party1", "party2", "party3", "party4", "raid1", "raid2", "raid3", "raid4", "raid5", "raid6", "raid7", "raid8", "raid9", "raid10", "raid11", "raid12", "raid13", "raid14", "raid15", "raid16", "raid17", "raid18", "raid19", "raid20", "raid21", "raid22", "raid23", "raid24", "raid25", "raid26", "raid27", "raid28", "raid29", "raid30", "raid31", "raid32", "raid33", "raid34", "raid35", "raid36", "raid37", "raid38", "raid39", "raid40" }
  for i = 1, #v1 do
    if UnitHealth(v1[i]) / UnitHealthMax(v1[i]) * 100 <= 90 and UnitHealth(v1[i]) / UnitHealthMax(v1[i]) * 100 >= 50 and UnitExists(v1[i]) and UnitIsDeadOrGhost(v1[i])~=1 and UnitCanAttack("player", v1[i]) == nil and UnitDebuff(v1[i],"Смерч") == nil and IsMounted() == nil and UnitChannelInfo("player")==nil and IsSpellInRange("Исповедь", v1[i]) == 1 and GetSpellCooldown("Исповедь")==0 then
      CastSpellByName("Исповедь", v1[i])
        end
      end
end

CreateFrame("Frame", "PenanceFrame")
PenanceFrame:SetScript("OnUpdate", Penance)

еще в замесах часто падает фпс до 20... в чем может быть проблема и как её устранить? мне кажется, что из-за того что скрипт пытается хилить всех у кого хп меньше 90% и больше 50%, вместо того, что бы выбирать самого просаженного по хп
Примерно по такому же принципу хочу добавить и все остальные хилящие спеллы.
В другой теме по скриптам есть такой способ вычисления самого просаженного юнита в рейде:

Код
/run t="raid"; nps=1; npe=GetNumRaidMembers(); if npe==0 then t="party"; nps=0; npe=GetNumPartyMembers() end; m=0; w=f; for i=nps,npe do if i==0 then tt="player" else tt=t..i end; if UnitExists(tt) and UnitInRange(tt)==1 and UnitIsDeadOrGhost(tt)~=1 and not UnitDebuff(tt,"Неконтролируемое бешенство") and not UnitDebuff(tt,"Ледяной склеп") and not UnitDebuff(tt,"Господство над разумом") and not UnitDebuff(tt,"Каменная хватка") and not UnitDebuff(tt,"Безумие") and not UnitDebuff(tt,"Морозная стрела") and not UnitDebuff("tt","Цепи Кел'Тузада") and not UnitDebuff(tt,"Изгнание") and not UnitDebuff(tt,"Смертельная рана") and not UnitDebuff(tt,"Смерч") and not UnitDebuff(tt,"Изгнание Тьмы") and not UnitDebuff(tt,"Мутация") then a=UnitHealthMax(tt)-UnitHealth(tt); if a>m then m=a w=tt end end end; if m>100 then RunMacroText("/target "..w.."") end
Но такой способ мне не подходит, потому что он постоянно меняет таргеты, но я бы хотел что бы захил осуществлялся по фреймам, а не таргетам. Плюсик гарантирую за помощь smile

Добавлено (13.07.2017, 10:58)
---------------------------------------------
путём проб и тестов я выявил, что фпс падает из-за другого скрипта) но просьба научить скрипт выбирать юнит по минимальному кол-ву хп еще актуальна

Добавлено (13.07.2017, 13:13)
---------------------------------------------
вот из-за этого скрипта падает фпс, помогите найти ошибку пожалуйста:

Код
function Dispell2(self, elapsed)
  local v1, v2, v3
  v1 = { "party1", "party2", "party3", "party4", "raid1", "raid2", "raid3", "raid4", "raid5", "raid6", "raid7", "raid8", "raid9", "raid10", "raid11", "raid12", "raid13", "raid14", "raid15", "raid16", "raid17", "raid18", "raid19", "raid20", "raid21", "raid22", "raid23", "raid24", "raid25", "raid26", "raid27", "raid28", "raid29", "raid30", "raid31", "raid32", "raid33", "raid34", "raid35", "raid36", "raid37", "raid38", "raid39", "raid40" }
  v2 = { "target", "arena1", "arena2", "arena3", "arenapet1", "arenapet2", "arenapet3", "party1target", "party2target", "party3target", "party4target", "raid1target", "raid2target", "raid3target", "raid4target", "raid5target", "raid6target", "raid7target", "raid8target", "raid9target", "raid10target", "raid11target", "raid12target", "raid13target", "raid14target", "raid15target", "raid16target", "raid17target", "raid18target", "raid19target", "raid20target", "raid21target", "raid22target", "raid23target", "raid24target", "raid25target", "raid26target", "raid27target", "raid28target", "raid29target", "raid30target", "raid31target", "raid32target", "raid33target", "raid34target", "raid35target", "raid36target", "raid37target", "raid38target", "raid39target", "raid40target" }
  v3 = {"Святая клятва", "Священный щит", "Омоложение", "Слово силы: Щит", "Быстрота хищника", "Длань защиты", "Длань свободы", "Длань жертвенности", "Божественное просветление", "Гнев карателя", "Озарение", "Хватка природы", "Устранение яда", "Защита от страха"}
  for i = 1, #v1 do
    if UnitExists(v1[i]) and IsMounted() == nil and UnitHealth(v1[i]) / UnitHealthMax(v1[i]) * 100 >= 80 and UnitHealth("player") / UnitHealthMax("player") * 100 >= 80 then
      for j = 1, #v2 do
        if UnitExists(v2[j]) and IsSpellInRange("Рассеивание заклинаний", v2[j]) == 1 and UnitChannelInfo("player")==nil then
      for k = 1, #v3 do
      if UnitBuff(v2[j], v3[k]) and UnitExists(v2[j]) and IsSpellInRange("Рассеивание заклинаний", v2[j]) == 1 and UnitChannelInfo("player")==nil and UnitCanAttack("player", v2[j]) and UnitDebuff(v2[j],"Смерч") == nil and UnitBuff(v2[j],"Божественный щит") == nil and UnitBuff(v2[j],"Ледяная глыба") == nil and UnitBuff(v2[j],"Антимагический панцирь") == nil and IsMounted() == nil then
          CastSpellByName("Рассеивание заклинаний", v2[j])
        end
      end
      end
     end
end
end
end

CreateFrame("Frame", "Dispell2Frame")
Dispell2Frame:SetScript("OnUpdate", Dispell2)


суть скрипта в том, что бы диспеллить на бг вражеские таргеты всего рейда(когда у рейда больше80% хп)+свой таргет и всё работает, но падает фпс, как только я попадаю на бг или в любой рейд, и судя по всему он не учитывает хп рейда
Сообщение # 2366 отредактировано sixsixsix999 - Четверг, 13.07.2017, 14:23
Fqlolxl
Скаут
sixsixsix999, у меня из за этого вычисления почему то фпс падал всегда.

Код
/run t="raid"; nps=1; npe=GetNumRaidMembers(); if npe==0 then t="party"; nps=0; npe=GetNumPartyMembers() end; m=0; w=f; for i=nps,npe do if i==0 then tt="player" else tt=t..i end; if UnitExists(tt) and UnitInRange(tt)==1 and UnitIsDeadOrGhost(tt)~=1 and not UnitDebuff(tt,"Неконтролируемое бешенство") and not UnitDebuff(tt,"Ледяной склеп") and not UnitDebuff(tt,"Господство над разумом") and not UnitDebuff(tt,"Каменная хватка") and not UnitDebuff(tt,"Безумие") and not UnitDebuff(tt,"Морозная стрела") and not UnitDebuff("tt","Цепи Кел'Тузада") and not UnitDebuff(tt,"Изгнание") and not UnitDebuff(tt,"Смертельная рана") and not UnitDebuff(tt,"Смерч") and not UnitDebuff(tt,"Изгнание Тьмы") and not UnitDebuff(tt,"Мутация") then a=UnitHealthMax(tt)-UnitHealth(tt); if a>m then m=a w=tt end end end; if m>100 then RunMacroText("/target "..w.."") end

А у тебя из за какого скрипта фпс падал и по какой причине?
Сообщение # 2367 написано 13.07.2017 в 15:44
sixsixsix999
Скаут
Fqlolxl
Цитата Fqlolxl ()
у меня из за этого вычисления почему то фпс падал всегда.

Код
/run t="raid"; nps=1; npe=GetNumRaidMembers(); if npe==0 then t="party"; nps=0; npe=GetNumPartyMembers() end; m=0; w=f; for i=nps,npe do if i==0 then tt="player" else tt=t..i end; if UnitExists(tt) and UnitInRange(tt)==1 and UnitIsDeadOrGhost(tt)~=1 and not UnitDebuff(tt,"Неконтролируемое бешенство") and not UnitDebuff(tt,"Ледяной склеп") and not UnitDebuff(tt,"Господство над разумом") and not UnitDebuff(tt,"Каменная хватка") and not UnitDebuff(tt,"Безумие") and not UnitDebuff(tt,"Морозная стрела") and not UnitDebuff("tt","Цепи Кел'Тузада") and not UnitDebuff(tt,"Изгнание") and not UnitDebuff(tt,"Смертельная рана") and not UnitDebuff(tt,"Смерч") and not UnitDebuff(tt,"Изгнание Тьмы") and not UnitDebuff(tt,"Мутация") then a=UnitHealthMax(tt)-UnitHealth(tt); if a>m then m=a w=tt end end end; if m>100 then RunMacroText("/target "..w.."") end

у меня как раз таки скрипты с таким "подбором" таргета не влияют на фпс

у меня проблема с диспеллом вражеских таргетов рейда (raid1target и т.д.), диспелл как бы идёт, но фпс дико падает, неиграбельно становится.
ну и никак не придумаю как выбирать из всего рейда юнит с самым минимальным кол-вом хп. я пытаюсь сделать так, что бы скрипт хилил по фреймам рейда, типа raid1, raid2 и т.д. без смены таргета
Сообщение # 2368 отредактировано sixsixsix999 - Четверг, 13.07.2017, 16:45
ganus1993
Сержант
Цитата sixsixsix999 ()
ну и никак не придумаю как выбирать из всего рейда юнит с самым минимальным кол-вом хп. я пытаюсь сделать так, что бы скрипт хилил по фреймам рейда, типа raid1, raid2 и т.д. без смены таргета
если внимательно читали мою соседню тему есть такой способ
/run for r=1,40 doGetNumRaidMembers(); 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) else r=r+1 end end
с условием поиграешься как тебе надо
80% =0.8
Пишу макросы и профили PQR
Моя подборка пве скриптов-ротаций 3.3.5
Сообщение # 2369 отредактировано ganus1993 - Суббота, 15.07.2017, 09:00
sixsixsix999
Скаут
Цитата ganus1993 ()
если внимательно читали мою соседню тему

да smile очень внимательно читал, уже сделал нечто такое:
Код
function Penance(self, elapsed)
t="raid"
nps=1
npe=GetNumRaidMembers()
if npe==0 then
t="party"
nps=0
npe=GetNumPartyMembers()
end
m=0
w=f
for i=nps,npe do
if i==0 then tt="player" else tt=t..i
end
if UnitExists(tt) and UnitInRange(tt)==1 and UnitIsDeadOrGhost(tt)~=1 and UnitDebuff(tt,"Изгнание") == nil and UnitDebuff(tt,"Смерч") == nil then
a=UnitHealthMax(tt)-UnitHealth(tt)
if a>m then
m=a
w=tt
end
end
end
if m>100 and UnitHealth(w) / UnitHealthMax(w) * 100 <= 99 and IsMounted() == nil and UnitChannelInfo("player")==nil and UnitCastingInfo("player")==nil and IsSpellInRange("Слово силы: Щит", w) == 1 and UnitDebuff(w,"Ослабленная душа") == nil and UnitBuff(w,"Слово силы: Щит") == nil and GetSpellCooldown("Слово силы: Щит")==0 then
CastSpellByName("Слово силы: Щит", w)
end
if m>100 and UnitHealth(w) / UnitHealthMax(w) * 100 <= 90 and UnitHealth(w) / UnitHealthMax(w) * 100 >= 40 and IsMounted() == nil and UnitChannelInfo("player")==nil and IsSpellInRange("Исповедь", w) == 1 and GetSpellCooldown("Исповедь")==0 then
CastSpellByName("Исповедь", w)
end
if m>100 and UnitHealth(w) / UnitHealthMax(w) * 100 <= 89 and UnitHealth(w) / UnitHealthMax(w) * 100 >= 39 and IsMounted() == nil and UnitChannelInfo("player")==nil and IsSpellInRange("Молитва восстановления", w) == 1 and not UnitBuff(w,"Молитва восстановления") and GetSpellCooldown("Молитва восстановления")==0 then
CastSpellByName("Молитва восстановления", w)
end
if m>100 and UnitHealth(w) / UnitHealthMax(w) * 100 <= 80 and UnitHealth("player") / UnitHealthMax("player") * 100 <= 80 and IsMounted() == nil and UnitChannelInfo("player")==nil and IsSpellInRange("Связующее исцеление", w) == 1 and GetSpellCooldown("Связующее исцеление")==0 then
CastSpellByName("Связующее исцеление", w)
end
if m>100 and UnitHealth(w) / UnitHealthMax(w) * 100 <= 79 and IsMounted() == nil and UnitChannelInfo("player")==nil and IsSpellInRange("Быстрое исцеление", w) == 1 and GetSpellCooldown("Быстрое исцеление")==0 then
CastSpellByName("Быстрое исцеление", w)
end
if m>100 and UnitHealth("player") / UnitHealthMax("player") * 100 <= 40 and IsMounted() == nil and UnitChannelInfo("player")==nil and UnitCastingInfo("player")==nil and IsSpellInRange("Молитва отчаяния", w) == 1 and GetSpellCooldown("Молитва отчаяния")==0 then
CastSpellByName("Молитва отчаяния", w)
end
if m>100 and UnitHealth(w) / UnitHealthMax(w) * 100 <= 35 and IsMounted() == nil and UnitChannelInfo("player")==nil and GetItemCooldown("Подвеска истинной крови")==0 then
UseItemByName("Подвеска истинной крови", w)
end
end

CreateFrame("Frame", "PenanceFrame")
PenanceFrame:SetScript("OnUpdate", Penance)
думаю ты понял откуда я взял это вычисление, не много подумав придумал как заставить кастовать по фрейму, который выбирает скрипт) всё работает)
Сообщение # 2370 отредактировано sixsixsix999 - Суббота, 15.07.2017, 15:20
Поиск: