Модератор форума: staford11  
Использование Lua скриптов.
korenme
Сержант
На сервере котом я сейчас играю, работает такой вот скрипт.
Код

SpellBase = {"Ослепление", "Превращение", "Глубокая заморозкw", "Покаяние", "Парализующий удар"}
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("Слово Тьмы: Смерть(Уровень 4)")
      if enabled == 0 then
       CastSpellByName("Слово Тьмы: Смерть(Уровень 4)")
       print(arg1,arg2,...)
      end
     end
     end
end
end)

Помогите сделать что бы он отслеживал юзание {"Ослепление", "Превращение", "Глубокая заморозкw", "Покаяние", "Парализующий удар"} с фокуса, собственно что бы и швд давал в фокус.
И да, в шип что то тоже не хочет давать швд
Сообщение # 1231 отредактировано korenme - Понедельник, 12.10.2015, 17:23
bananabomb
Скаут
Всё ещё ищу рабочие скрипты для охотника / шамана версия wow 5.4.8
Сообщение # 1232 написано 12.10.2015 в 16:36
ganus1993
Сержант
Цитата korenme ()
{"Ослепление", "Превращение", "Глубокая заморозкw", "Покаяние", "Парализующий удар"}

1) Зачем здесь заморозка? Швд не сбивает данный стан
2) Хоть бы читали что написали "Глубокая заморозкw"
Пишу макросы и профили PQR
Моя подборка пве скриптов-ротаций 3.3.5
Сообщение # 1233 написано 12.10.2015 в 18:14
chaosway
Рыцарь
korenme, нужно попытаться осмыслить что представляет из себя скрипт и его возможности

Добавлено (12.10.2015, 18:17)
---------------------------------------------
bananabomb, Они не отличаются от скриптов на 3.3.5, разве что названиями спеллов в редких исключениях

Сообщение # 1234 написано 12.10.2015 в 18:17
Kieg
Сержант
Цитата bananabomb ()
Всё ещё ищу рабочие скрипты для охотника / шамана версия wow 5.4.8


Нзвание скилов другое иногда и все
Сообщение # 1235 написано 12.10.2015 в 20:02
korenme
Сержант
Цитата chaosway ()
korenme, нужно попытаться осмыслить что представляет из себя скрипт и его возможности

Если бы не пробовал осмыслить и поковырять его, не отписался бы sad
Сообщение # 1236 написано 12.10.2015 в 22:41
bananabomb
Скаут
Ребята, подскажите
1)как объединить 2 скрипта в 1?
2)будут ли они работать вместе, если например запускать по отдельности через /smd run
Суть идеи автокик по фокусу и цель.
Код
function Kick(self, elapsed)
                      local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("target")                        
                      local enabled = GetSpellCooldown("Встречный выстрел")                        
                      local inRange = IsSpellInRange("Встречный выстрел", "target")                      
                      if spell then
                       if interrupt == false and enabled == 0 and inRange == 1 then                      
                        local finish = endTime/1000 - GetTime()
                        if finish <= 0.6 then
                         RunMacroText("/cast Встречный выстрел")                        
                        end
                       end
                      end                           
end                      
CreateFrame("Frame", "KickFrame")
KickFrame:SetScript("OnUpdate", Kick)


Код
function Kick(self, elapsed)
                      local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("focus")                          
                      local enabled = GetSpellCooldown("Встречный выстрел")                      
                      local inRange = IsSpellInRange("Встречный выстрел", "focus")                      
                      if spell then                      
                       if interrupt == false and enabled == 0 and inRange == 1 then                      
                        RunMacroText("/cast Встречный выстрел")                      
                       end
                      end                          
end                      
CreateFrame("Frame", "KickFrame")
KickFrame:SetScript("OnUpdate", Kick)

Добавлено (13.10.2015, 12:46)
---------------------------------------------
что то написано не так.
для дк и война работает (если использовать 1 скрипт по цели), а для охотника нет.
наверное что то не так, нужно что то исправить в скриптах. наверное прописать условие /stopcasting , и что то ещё чтобы заработало и по цели и по фокусу. фокус в приоритете.

Сообщение # 1237 написано 13.10.2015 в 12:46
chaosway
Рыцарь
korenme, тот скрипт что ты указал, действует через комбат лог и реагирует на инстант спеллы, превращение не инстант спелл, на него нужен швд по таймингу, то есть идет каст и в опреденное время каста используется швд
Сообщение # 1238 написано 13.10.2015 в 15:48
Angelbilly
Скаут
Ребята объясните плиз, включаю Гагарина вкл луа анлокер ввожу \bp ввожу скрипт нажимаю запуск и должно работать, непойму.
Сообщение # 1239 написано 14.10.2015 в 22:07
bananabomb
Скаут
Есть идеи как настроить скрипт чтобы сбивал по фокусу и цели?
По фокусу не хочет сбивать.
Сообщение # 1240 написано 15.10.2015 в 14:19
chaosway
Рыцарь
bananabomb, можно и вместе и поотдельности. Если поотдельности то смени везде название функции Kick
function Kick(self, elapsed)
CreateFrame("Frame", "KickFrame")
KickFrame:SetScript("OnUpdate", Kick)
На любое другое название, например Kickf
Сообщение # 1241 написано 15.10.2015 в 15:01
Angelbilly
Скаут
Работают ли скрипты сейчас на цыркуле на фане?
Сообщение # 1242 написано 15.10.2015 в 20:39
chaosway
Рыцарь
Angelbilly, да
Сообщение # 1243 написано 16.10.2015 в 07:33
bananabomb
Скаут
Спасибо за помощь. Плюсанул.
Ребята, а как написать скрипт на автоматический Усмиряющий выстрел (снимает 1 эффект иступления и 1 эффект магический эффект ) ? Может у кого есть на авто Purge ?
Код
local purgePriority = 0
  if CanHit("Усмиряющий выстрел") then
   purgePriority = GetPurgePriority()
  end

local dangerousBuffs = {"Озарение", "Слово силы: Щит", "Ледяная преграда", "Гнев карателя", "Берсерк", "Длань защиты", "Длань свободы", "Божественное одобрение", "Придание сил"}
function CanUse(spell)
    if IsUsableSpell(spell) and GetSpellCooldown(spell) == 0 and ReadyToCast(spell) then
        return true
    else
        return false
    end
end

function CanHit(spell)
    if CanUse(spell) and CanReach(spell) and not EnemyIsImmuneToSpell(spell) then
        return true
    else
        return false
    end
end

function BuffInfo(spell, unit, own)
    if own then
        return UnitBuff(unit, spell, nil, unit)
    else
        return UnitBuff(unit, spell)
    end
end
function TargetHasBuff(spell, own)
    if BuffInfo(spell, target, own) then
        return true
    else
        return false
    end
end

function HasBuffToPurge(count)
    for j=1,count do
  local buff,_,_,_,buffType = UnitBuff(target,j);
  if buff and (buffType == "" or buffType == "Magic") then
   return true
  end
    end
    return false
end

function GetPurgePriority()
    local foundBuff = false
    local dontPurge = false
    for j=1,10 do
  local buffName,_,_,_,buffType = UnitBuff(target,j);
  -- все берсерки имеют тип "", бафы без категории nil
  if buffName and (buffType == "" or buffType == "Magic") then
   if tContains(dangerousBuffs, buffName) then
    return 2
   elseif buffName == "Жизнецвет" then
    dontPurge = true
   end
   foundBuff = true
  end
    end
    if foundBuff and not dontPurge then
  return 1
    else
  return 0
    end
end

function EnemyHasBuff(spell, own)
    if UnitCanAttack(me, target) and TargetHasBuff(spell, own) then
        return true
    else
        return false
    end
end

function HasBuff(spell, mine)
    if BuffInfo(spell, me, mine) then
        return true
    else
        return false
    end
end

function HasStacksOfBuff(spell, stacks, mine)
    local name,_,_,count = BuffInfo(spell,me,mine)
    if name and count >= stacks then
        return true
    else
        return false
    end
end

function GetBuffDuration(spell, unit)
    local buffName,_,_,_,_,_,endTime = BuffInfo(spell, unit, false)
    if buffName then
  return endTime - GetTime()
    else
  return 0
    end
end

function EnemyIsImmuneToSpell(spell)

if EnemyHasBuff("Ледяная глыба") or EnemyHasBuff("Божественный щит") or EnemyHasBuff("Сдерживание") or TargetHasDebuff("Смерч") or EnemyHasBuff("Плащ теней") or EnemyHasBuff("Антимагический панцирь") then
        return true
    else
        return false
    end
end


И не будет ли скрипт мешать использовать другие способности? Например если я хочу использовать другую способность, чтобы давало возможность использовать (а не зацикливало на постоянном использовании Усмиряющего выстрела, в попытке спурджить) ?
Сообщение # 1244 написано 17.10.2015 в 02:43
chaosway
Рыцарь
bananabomb, У тебя все слишком сложно... Проще взять за основу простой скрипт и дописать в него свои условия:
Код
function PurgeSrc(self)
local enabled = GetSpellCooldown("Усмиряющий выстрел")
local inRange = IsSpellInRange("Усмиряющий выстрел", "target")
if UnitBuff("target", "Озарение") or UnitBuff("target", "Озарение") and not UnitBuff("target", "Ледяная глыба") and not UnitBuff("target", "Ледяная глыба") and enabled == 0 and inRange == 1 then           
CastSpellByName("Усмиряющий выстрел", "target")
           end
end

CreateFrame("Frame", "frameB")
frameB:SetScript("OnUpdate", PurgeSrc)

Там где дважды написано "Озарение" - ты сам добавляешь баффы которые тебе нужно пуржить, там где "ледяная глыба" это бафы при которых скрипт не будет пуржить. Добавлять их аналогично or UnitBuff("target", "Озарение") или and not UnitBuff("target", "Ледяная глыба")
Сообщение # 1245 отредактировано chaosway - Суббота, 17.10.2015, 12:11
bananabomb
Скаут
Chaosway, спасибо !

А как написать скрипт, чтобы если у цели меньше 20% хп использовался Убийственный выстрел

Код
function KillS(self)
local enabled = GetSpellCooldown("Убийственный выстрел")
local inRange = IsSpellInRange("Убийственный выстрел", "target")
if UnitHealth(target) < 20% then
CastSpellByName("Убийственный выстрел", "target")
end
end

CreateFrame("Frame", "frameE")
frameE:SetScript("OnUpdate", KillS)
Сообщение # 1246 написано 18.10.2015 в 14:30
iiapanouk
Скаут
Понимаю что не по теме, но все же, наверняка тут многие слышали про harm макросы для RvR.
Так вот, хотелось бы узнать что это и с чем его едят) Ну и пару рабочих примеров желательно, заранее благодарю)
р.s. пользовался из любопытства скриптами на ваниш, и быстро заметил как теряю интерес к рвр, поэтому решил перейти на макросы)

Добавлено (18.10.2015, 16:58)
---------------------------------------------
Сообщение # 1247 отредактировано iiapanouk - Воскресенье, 18.10.2015, 16:59
chaosway
Рыцарь
iiapanouk, Не слышал о таких макросах, не увлекался рвр, ни разу не играл за разбойника. Подскажи в чем суть и как примерно реализовать, если возможно то помогу

Добавлено (19.10.2015, 18:39)
---------------------------------------------
bananabomb, там где if UnitHealth(target) < 20% добавить and and enabled == 0 and inRange == 1 then

Сообщение # 1248 написано 19.10.2015 в 18:39
PaulDousen
Рыцарь
chaosway, UnitHealth() это не в процентах как бы
Сообщение # 1249 отредактировано PaulDousen - Вторник, 20.10.2015, 02:56
bananabomb
Скаут
Что то не работает, попробовал переписать по-другому... Будет ли такой вариант работать? Нужно что то изменить? Или у кого то есть готовый вариант для килшота (Убийственный выстрел) ?

Код
HealthFrame = CreateFrame("Frame", "HealthF", UIParent);  
HealthFrame:RegisterEvent("TARGET_HEALTH");  
HealthFrame:SetScript("OnEvent", function(self, event, arg1, arg2, ...)  
if(event=="TARGET_HEALTH") then  
  if arg1 == "target" then  
   health = TargetHealth("target")
   healthMax =  TargetHealthMax("target")
   percentHealth = health * 100 /  healthMax
   if percentHealth <= 20 and enabled == 0 and inRange == 1 then
CastSpellByName("Убийственный выстрел", "target")
end
end
Сообщение # 1250 написано 20.10.2015 в 03:18
Kieg
Сержант
Цитата bananabomb ()
HealthFrame = CreateFrame("Frame", "HealthF", UIParent);
HealthFrame:RegisterEvent("TARGET_HEALTH");
HealthFrame:SetScript("OnEvent", function(self, event, arg1, arg2, ...)
if(event=="TARGET_HEALTH") then
if arg1 == "target" then
health = TargetHealth("target")
healthMax =  TargetHealthMax("target")
percentHealth = health * 100 /  healthMax
enabled = GetSpellCooldown("Убийственный выстрел")
inRange = IsSpellInRange("Убийственный выстрел", "target")
if percentHealth <= 20 and enabled == 0 and inRange == 1 then
CastSpellByName("Убийственный выстрел", "target")
end
end
end)
Сообщение # 1251 отредактировано Kieg - Вторник, 20.10.2015, 13:16
bananabomb
Скаут
Спасибо за помощь, вы супер!

Как прописать условие, чтобы не только по цели отслеживалось но и по фокусу. Например если цель и фокус применяет нехорошее заклинание притворялся мёртвым.

Код
function Reflekt(self, elapsed)     
local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("target")      
local name = UnitName("targettarget")
local myname = UnitName("player")
     if spell == "Сглаз" or spell == "Превращение" or spell == "Смерч" or spell == "Стрела хаоса" or spell == "Изгнание зла" or spell == "Звездный огонь" or spell == "Господство над разумом" or spell == "Слепящий свет" then                
      if name == myname then
       local finish = endTime/1000 - GetTime()     
       if finish <= 0.5 then     
        RunMacroText("/cast Притвориться мертвым")                      
       end
      end
     end                       
end                
CreateFrame("Frame", "ReflektFrame")     
ReflektFrame:SetScript("OnUpdate", Reflekt)


Добавлено (20.10.2015, 15:24)
---------------------------------------------
Kieg и Chaosway, попробовал как вы написали и так и так не работает (скрипт на килшот). online2long
Сообщение # 1252 отредактировано bananabomb - Вторник, 20.10.2015, 15:24
Kieg
Сержант
Цитата bananabomb ()
Kieg и Chaosway, попробовал как вы написали и так и так не работает (скрипт на килшот).


HealthFrame = CreateFrame("Frame", "HealthF", UIParent);
HealthFrame:RegisterEvent("TARGET_HEALTH");
HealthFrame:SetScript("OnEvent", function(self, event, arg1, arg2, ...)
if(event=="TARGET_HEALTH") then
if arg1 == "target" then
health = TargetHealth("target")
healthMax = TargetHealthMax("target")
percentHealth = health * 100 / healthMax
enabled = GetSpellCooldown("Убийственный выстрел")
inRange = IsSpellInRange("Убийственный выстрел", "target")
if percentHealth <= 20 and enabled == 0 and inRange == 1 then
CastSpellByName("Убийственный выстрел", "target")
end
end
end
end)

Пробуй
Сообщение # 1253 написано 20.10.2015 в 16:21
PaulDousen
Рыцарь
Цитата Kieg ()
if(event=="TARGET_HEALTH") then


Серьезно?
Сообщение # 1254 написано 20.10.2015 в 17:05
Kieg
Сержант
Цитата PaulDousen ()
if(event=="TARGET_HEALTH") then

Серьезно?


HealthFrame:RegisterEvent("UNIT_HEALTH");
HealthFrame:SetScript("OnEvent", function(self, event, arg1, arg2, ...)
if(event=="UNIT_HEALTH") then
if arg1 == "target" then
health = TargetHealth("target")
healthMax = TargetHealthMax("target")
percentHealth = health * 100 / healthMax
enabled = GetSpellCooldown("Убийственный выстрел")
inRange = IsSpellInRange("Убийственный выстрел", "target")
if percentHealth <= 20 and enabled == 0 and inRange == 1 then
CastSpellByName("Убийственный выстрел", "target")
end
end
end
end)
Сообщение # 1255 отредактировано Kieg - Вторник, 20.10.2015, 17:50
PaulDousen
Рыцарь
Kieg, то что вы хотите сделать, реализуется не через onEvent, а через onUpdate.
Сообщение # 1256 написано 20.10.2015 в 21:42
Kieg
Сержант
Цитата PaulDousen ()
Kieg, то что вы хотите сделать, реализуется не через onEvent, а через onUpdate.


Я хоть как-то хочу помочь человеку.

Я ищу условие видимости для кика...
Сообщение # 1257 написано 20.10.2015 в 22:23
PaulDousen
Рыцарь
Цитата Kieg ()
Я ищу условие видимости для кика...


Подробнее, мб помогу
Сообщение # 1258 написано 21.10.2015 в 01:24
bananabomb
Скаут
PaulDousen, cпособность (убийственный выстрел) можно использовать только против целей, запас здоровья которых меньше 20%. Нужно значит прописать условие проверки количества хп в процентах у цели и возможность применения данной способности (в зоне досягаемости и не на кд).
Как это реализовать не знаю. Кстати, у тебя нет идеи как в 1 скрипте реализовать отслеживание как по цели, так и по фокусу (для того чтобы если противник цель, либо фокус применял контролирующее заклинание в этот момент использовалось заклинание притвориться мёртвым), по цели вроде как работает, нужно добавить условие по фокусу или это невозможно? Нужно использовать 2 скрипта : 1) по цели 2) по фокусу ?
Сообщение # 1259 написано 21.10.2015 в 11:20
Kieg
Сержант
Цитата PaulDousen ()
Подробнее, мб помогу


function Kick(self, elapsed)
local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("target")
local enabled = GetSpellCooldown("Заморозка разума")
local inRange = IsSpellInRange("Заморозка разума", "target")
if spell then
if interrupt == false and enabled == 0 and inRange == 1 then
local finish = endTime/1000 - GetTime()
if finish <= 0.6 then
RunMacroText("/cast Заморозка разума")
end
end
end
end
CreateFrame("Frame", "KickFrame")
KickFrame:SetScript("OnUpdate", Kick)

Но если цель заходит, например за дерево, и кастует то ниче не могу зделать, ввсегда пишет што цель в не поле зрение.
Нужно добавить проверку што не кастовалса скрипт если цель за текстурами или за сстеной/деревом и т.п.

Добавлено (21.10.2015, 12:41)
---------------------------------------------
Цитата bananabomb ()
PaulDousen, cпособность (убийственный выстрел) можно использовать только против целей, запас здоровья которых меньше 20%. Нужно значит прописать условие проверки количества хп в процентах у цели и возможность применения данной способности (в зоне досягаемости и не на кд).
Как это реализовать не знаю. Кстати, у тебя нет идеи как в 1 скрипте реализовать отслеживание как по цели, так и по фокусу (для того чтобы если противник цель, либо фокус применял контролирующее заклинание в этот момент использовалось заклинание притвориться мёртвым), по цели вроде как работает, нужно добавить условие по фокусу или это невозможно? Нужно использовать 2 скрипта : 1) по цели 2) по фокусу ?


function KillS(self)
local enabled = GetSpellCooldown("Убийственный выстрел")
local inRange = IsSpellInRange("Убийственный выстрел", "target")
local finRange = IsSpellInRange("Убийственный выстрел", "focus")
healtht = TargetHealth("target")
healthMaxt = TargetHealthMax("target")
percentHealtht = healtht * 100 / healthMaxt
healthf = TargetHealth("focus")
healthMaxf = TargetHealthMax("focus")
percentHealthtf = healthf * 100 / healthMaxf
if enabled==0 and inRange==1 and percentHealtht < 20 then CastSpellByName("Убийственный выстрел", "target")
end
if enabled==0 and finRange==1 and percentHealthf < 20 then CastSpellByName("Убийственный выстрел", "focus")
end
end
CreateFrame("Frame", "frameE")
frameE:SetScript("OnUpdate", KillS)

Пока ето тестани
Сообщение # 1260 отредактировано Kieg - Пятница, 23.10.2015, 18:42
Поиск: