Модератор форума: staford11  
Использование Lua скриптов.
chaosway
Рыцарь
1

Добавлено (21.10.2015, 15:19)
---------------------------------------------

Код
function KillS(self)
local enabled = GetSpellCooldown("Убийственный выстрел")
local inRange = IsSpellInRange("Убийственный выстрел", "target")
local Thealth = 100 * UnitHealth("target") / UnitHealthMax("target")
if Thealth < 20 and enabled == 0 and inRange == 1 then
CastSpellByName("Убийственный выстрел", "target")
end
end
CreateFrame("Frame", "frameE")
frameE:SetScript("OnUpdate", KillS)

Вроде как то так должно работать
Сообщение # 1261 отредактировано chaosway - Среда, 21.10.2015, 14:56
Angelbilly
Скаут
розобрался
Сообщение # 1262 отредактировано Angelbilly - Четверг, 22.10.2015, 15:45
chaosway
Рыцарь
Kieg, в твоем скрипте указано хп только таргета, ты хочешь чтобы он стрелял по фокусу учитывая 20% хп таргета
Сообщение # 1263 написано 23.10.2015 в 16:47
Kieg
Сержант
Торопилса, не додал условие хп фокуса.
Дописал.
Сообщение # 1264 отредактировано Kieg - Пятница, 23.10.2015, 22:23
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)

иногда подвисает этот скрипт. проблема в том, что например если на цели весит баф, который можно спуржить (он прописан в условиях, например озарение), то скрипт упорно хочет спуржить и не даёт нажимать другие способности.
как сделать так, чтобы приоритет был у способностей которые я нажимаю (например скатер, трап, виверна, сакрифайс, фридом можно было нажать, а то из-за попыток скрипта постоянно использовать Усмиряющий выстрел не даёт использовать другие способности) и как дописать условие, что если цель забегает за препядствие чтобы скрипт не пытался, а использовалось только тогда когда зоне видимости и прочие условия?
Сообщение # 1265 отредактировано bananabomb - Вторник, 27.10.2015, 21:30
Kieg
Сержант
Ето условие применимо только к комбат лог евент, через он евент пока не знаю как
Сообщение # 1266 отредактировано Kieg - Понедельник, 26.10.2015, 12:46
ju5t
Скаут
Подскажите каким анлокером можно заинжектить на водемпайр? Все перепробывал, ни один не видит процесс, как ни переименовывай
Сообщение # 1267 написано 27.10.2015 в 17:12
PaulDousen
Рыцарь
Проверка ЛОСа это не маленький скрипт, а довольно большой. Как его реализовать писал ранее
Сообщение # 1268 написано 28.10.2015 в 15:53
bananabomb
Скаут
как прикрутить проверку лоса к другим спелам?
собственно вот скрипт на проверку лоса

Код
if not tLOS then tLOS={} end
if not fLOS then fLOS=CreateFrame("Frame") end

    function LineOfSight(target)
  local updateRate=1
  fLOS:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
  function fLOSOnEvent(self,event,...)
   if event=="COMBAT_LOG_EVENT_UNFILTERED" then
    local cLOG={...}
    if cLOG[2]=="SPELL_CAST_FAILED" then
     if cLOG[4]==UnitGUID("player") then
      if cLOG[15]==SPELL_FAILED_LINE_OF_SIGHT then
       tinsert(tLOS,{unit=target,time=GetTime()})
      end
     end
    else
     table.sort(tLOS,function(x,y) return x.time>y.time end)
     for i=1,#tLOS do
      local time=tLOS[i].time or GetTime()
      if GetTime()>time+updateRate then
       tremove(tLOS,i)
      end
     end
    end
   end
  end
  fLOS:SetScript("OnEvent",fLOSOnEvent)
  for i=1,#tLOS do
   if tLOS[i].unit==target then
    return true
   end
  end
    end

Добавлено (01.11.2015, 18:50)
---------------------------------------------
и как добавить к автокику, чтобы сбивал также поддерживаемые касты?

Код
local InterruptChannel = {
1120, -- Drain Soul  (channeling cast)
12051, -- Evocation  (channeling cast)
115294, -- Mana Tea  (channeling cast)
115175, -- Soothing Mist    (channeling cast)
64843, -- Divine Hymn  (channeling cast)
64901, -- Hymn of Hope  (channeling cast)
47540 -- Penance
}
function channelInt()
return InterruptChannel
end
Сообщение # 1269 написано 01.11.2015 в 18:50
snup5
Скаут
Всем привет !
есть проблема со скриптом для призыва "Призыв горгульи"  я бы хотел что-бы гаргуля при 60-рун автоматом срабатывала в таргет мой кто понимает как сделать помогите
function SummonGargoyle(self)
local enabled = GetSpellCooldown("Призыв горгульи")
local inRange = IsSpellInRange("Призыв горгульи", "target")
local count = GetRuneCount(slot) = 130 * UnitRune("playar") / UnitRuneMax("playar")
if Trune < 60 and enabled == 0 and inRange == 1 then
CastSpellByName("Призыв горгульи", "target")
end
end
CreateFrame("Frame", "frameE")
frameE:SetScript("OnUpdate", SummonGargoyle)
Сообщение # 1270 отредактировано snup5 - Четверг, 05.11.2015, 14:53
Angelbilly
Скаут
не работает где ошыбка?
/run if (not UnitDebuff("target", "Озноб", nil, "player")) then CastSpellByName("Ледяное прикосновение") end 
/run if (not UnitDebuff("target", "Кровавая чума", nil, "player")) then CastSpellByName("Удар чумы") end 
/run if UnitDebuff("target", "Озноб", nil, "player") and UnitDebuff("target", "Кровавая чума", nil, "player") then CastSpellByName("Удар плети") end
Сообщение # 1271 написано 06.11.2015 в 02:09
Kieg
Сержант
Через UnitPower реализируй

Добавлено (06.11.2015, 14:59)
---------------------------------------------
/run if not (UnitDebuff("target", "Озноб", nil, "player")) then CastSpellByName("Ледяное прикосновение") end 
/run if not (UnitDebuff("target", "Кровавая чума", nil, "player")) then CastSpellByName("Удар чумы") end 
/run if UnitDebuff("target", "Озноб", nil, "player") and UnitDebuff("target", "Кровавая чума", nil, "player") then CastSpellByName("Удар плети") end

Сообщение # 1272 написано 06.11.2015 в 14:59
surrogatd
Скаут
Всем здрасти)
Нарыл вот такой скрип у себя в чите.

Код
local g_List;
local g_BlackList = {}

local g_Interrupt_All = true;
local g_Interrupt_List = false;
local g_Interrupt_Choose = "all"

local g_IsRunning = false;
function Load()
Plus.PrintChat( "Auto Interrupt v1.0 loaded" );
   local fFrame = Frame.Create( "by zdennis", 268, 270 );
   Label.Create( fFrame, "Which spells will be interrupted:", 16, 0 );
   g_List = ListBox.Create( fFrame, 8, 20, 250, 90 );
   AddSpellNameString = TextBox.Create( fFrame, "Spell name", 8, 111,130,20,50)
   local AddButton = Button.Create( fFrame, "Add", 140, 111,59,20 );
   local RemoveButton = Button.Create( fFrame, "Remove", 200, 111,58,20 );
   
   Event.RegisterFrameCallback( "AddSpell", AddButton, "OnClick" );
   Event.RegisterFrameCallback( "RemoveSpell", RemoveButton, "OnClick" );
   
   Label.Create( fFrame, "Interrupt Spell:", 8, 141 );
   InterruptNameString = TextBox.Create( fFrame, "Kick", 129, 138.5,130,20,50)
   Button.Create( fFrame, "", 1, 164,300,0.5 );
   
   InterruptAllSpells = CheckBox.Create( fFrame, "Interrupt all Spells!", 8, 180, g_Interrupt_All );
   InterruptByLIst = CheckBox.Create( fFrame, "Interrupt by using the list!", 8, 200, g_Interrupt_List );
   
   Event.RegisterFrameCallback( "ChooseSpellWay", InterruptAllSpells, "OnClick" );
   Event.RegisterFrameCallback( "ChooseSpellWay", InterruptByLIst, "OnClick" );
   
   Event.RegisterFrameCallback( "FieldEdit", AddSpellNameString, "OnContentChanged" );
   Event.RegisterFrameCallback( "FieldEdit", InterruptNameString, "OnContentChanged" );
   
   
   Button.Create( fFrame, "", 1, 224,300,0.5 );
   
   IsRunning = Button.Create( fFrame, "Enable the interrupting", 30, 230,200,20 );
   
   Event.RegisterFrameCallback( "StartStop", IsRunning, "OnClick" );
                    
   
   AutoLoad()

   Event.RegisterSignalCallback( "AutoLoad", FRAMEEVENT_PLAYER_ENTERING_WORLD );
   Event.RegisterTimerCallback( "CheckForSpell", 10, true );
end
function Unload()
end

function CheckForSpell()

target = ObjectManager.GetCurrentTarget()
   if Plus.IsInGame() == true and target and g_IsRunning == true then   
      local InterruptSpell = InterruptNameString:GetText()
       Plus.DoString("spell, rank, displayName, icon, startTime, endTime, isTradeSkill, castID, interrupt = UnitCastingInfo('target')")
       Plus.DoString("spell2, rank2, displayName2, icon2, startTime2, endTime2, isTradeSkill2, interrupt2 = UnitChannelInfo('target')")
      local spell1 = Plus.DoString("return spell")      
      local spell2 = Plus.DoString("return spell2")      
      local interrupt = Plus.DoString("return interrupt")      
      local interrupt1 =    Plus.DoString("return interrupt2")   
      local IsMounted = Plus.DoString("return IsMounted()")   
      local attackable = Plus.DoString("return UnitCanAttack('player', 'target')")   
      local InFight = Plus.DoString("return UnitAffectingCombat('player')")   
      local Inrange =  Plus.DoString("return IsSpellInRange('" .. Пинок .."', 'target')")      
      local Cooldown1,Cooldown2,Cooldown3 = Plus.DoString("return GetSpellCooldown('".. Пинок .."')")
      if (interrupt == "false" or interrupt1 == "false") and Cooldown3 == "0" and Inrange == "1" and IsMounted == "nil" and attackable == "1" and InFight == "1" then
         if spell1 ~= "nil" then
         spell = spell1
         else
         spell = spell2
         end
         if CheckSpell(spell) == true and g_Interrupt_Choose == "list" then
            Player.CastSpell(Пинок)
         elseif g_Interrupt_Choose == "all" then
            Player.CastSpell(Пинок)
         end
      end
   
   end
end

function AutoLoad()
   if Plus.IsInGame() == true then
      local SafeFileData = "AI_" .. ObjectManager.GetActivePlayer():GetName() .. ".txt"
      value = file_exists(SafeFileData)
      if value == true then
         LoadData()
      end
   end
end

function AddSpell()
   SpellName = AddSpellNameString:GetText()
   local lbeNewEntry = ListBoxEntry.Create( g_List, SpellName );
   g_BlackList[ SpellName ] = lbeNewEntry;
   SaveData()
end

function AddSpellByName(Name)
   for k, v in pairs( g_BlackList ) do
      if    k == Name then
         v:Destroy();
         g_BlackList[ k ] = nil;
         return;
      end
   end
   SpellName = Name
   local lbeNewEntry = ListBoxEntry.Create( g_List, SpellName );
   g_BlackList[ SpellName ] = lbeNewEntry;
end

function RemoveSpell(  )
   local spell =  g_List:GetSelectedItem()
      
   local spell = spell:GetText()
   for k, v in pairs( g_BlackList ) do
      if string.lower(k) == string.lower(spell) then
         v:Destroy();
         g_BlackList[ k ] = nil;
         SaveData()
         return;
      end
   end
   
end

function CheckSpell(Name)
   for k, v in pairs( g_BlackList ) do
      if string.lower(k) == string.lower(Name) then
         return true;
      end
   end
   return false;
end

function file_exists(name)
   local f=io.open(name,"r")
   if f~=nil then io.close(f) return true else return false end
end

function FieldEdit()
SaveData()
end

function StartStop() -- IsRunning

if IsRunning:GetText() == "Enable the interrupting" then
IsRunning:SetText( "Disable the interrupting" )
g_IsRunning = true;
else
IsRunning:SetText( "Enable the interrupting" )
g_IsRunning = false;
end
SaveData()
end

function ChooseSpellWay() -- IsRunning
if g_Interrupt_Choose == "all" then
   g_Interrupt_All = false;
   g_Interrupt_List = true;
   InterruptAllSpells:SetChecked( false )
   InterruptByLIst:SetChecked( true )
g_Interrupt_Choose = "list"
else
   g_Interrupt_All = true;
   g_Interrupt_List = false;
   InterruptAllSpells:SetChecked( true )
   InterruptByLIst:SetChecked( false )
g_Interrupt_Choose = "all"
end
SaveData()
end

function LoadData()
if Plus.IsInGame() == true then
local SafeFileData = "AI_" .. ObjectManager.GetActivePlayer():GetName() .. ".txt"
   local linecount = 1
   for line in io.lines(SafeFileData) do
      if linecount == 1 then
         AddSpellNameString:SetText(line)
      elseif linecount == 2 then
         InterruptNameString:SetText(line)
      elseif linecount == 3 then
         g_Interrupt_Choose = line
      else
         
         if line ~= "End of save file" then
            AddSpellByName(line)
         
         end
         
         
      end
   linecount = linecount + 1
   end
if g_Interrupt_Choose == "list" then
   g_Interrupt_All = false;
   g_Interrupt_List = true;
   InterruptAllSpells:SetChecked( false )
   InterruptByLIst:SetChecked( true )
else
   g_Interrupt_All = true;
   g_Interrupt_List = false;
   InterruptAllSpells:SetChecked( true )
   InterruptByLIst:SetChecked( false )
end
end
end
function SaveData()
   if Plus.IsInGame() == true then
local SafeFileData = "AI_" .. ObjectManager.GetActivePlayer():GetName() .. ".txt"

local SaveList = ""
SaveList = SaveList .. AddSpellNameString:GetText() .. "\n"
SaveList = SaveList .. InterruptNameString:GetText() .. "\n"
SaveList = SaveList .. g_Interrupt_Choose .. "\n"

   for k, v in pairs( g_BlackList ) do
      if k ~= nil then
         SaveList = SaveList .. k .. "\n"
      end
   end

io.output(io.open(SafeFileData,"w"))
io.write( SaveList .. "End of save file")

io.close()
end
end


Как я понял нужно дописать в пару строчек спелы (чем сбивать и какие). Я там сам дописал пинок, а остальное не понял где. Может быть поможете разобраться?)
Сообщение # 1273 отредактировано surrogatd - Среда, 11.11.2015, 09:03
forrz
Скаут
Дайте плз скрипты на холипала 3.3.5 в пвп
Сообщение # 1274 написано 10.11.2015 в 05:50
Khenny
Скаут
Делаю скрипт, в идеале, при нажатии (по кнопке, привязка к фрейму не нужна) должен проверять ХП группы и хилить самого просаженного. Если в таргете дружелюбная цель - то в приоритете хилит ее.
Код
local raidNumber = GetNumGroupMembers()
local spellName = "Исцеляющий всплеск"
for i = 1, raidNumber do
    local HPPercent = 100 * UnitHealth("raid"..i) / UnitHealthMax("raid"..i)
    local inRange = IsSpellInRange(spellName, "raid"..i)
  if HPPercent <= 75 and inRange == 1 then
  CastSpellByName(spellName, "raid"..i)
  end
end
На деле пока не проверял, но и так видно, что тут нет проверки на самую просаженную цель, а просто идет поочередная проверка всех сопартийцев на хп < 75%. Так же не нашел как проверять цель на дружелюбие (в обычных макросах это параметр help). Есть у кого идеи?

upd. Написал такой вот вариант, вроде работает, но смущает громоздкость реализации. Может знает как все сделать лаконичнее? И все еще нужна проверка на дружелюбность.

Код
local raidNumber = GetNumGroupMembers()
local spellName = "Исцеляющий всплеск"
for i_20 = 1, raidNumber do

local HPPercent = 100 * UnitHealth("raid"..i_20) / UnitHealthMax("raid"..i_20)
local inRange = IsSpellInRange(spellName, "raid"..i_20)

   if HPPercent <= 20 and inRange == 1 then CastSpellByName(spellName, "raid"..i_20)
   elseif i_20 == raidNumber then for i_40 = 1, raidNumber do
   
   local HPPercent = 100 * UnitHealth("raid"..i_40) / UnitHealthMax("raid"..i_40)
   local inRange = IsSpellInRange(spellName, "raid"..i_40)
   
      if HPPercent <= 40 and inRange == 1 then CastSpellByName(spellName, "raid"..i_40)
      elseif i_40 == raidNumber then for i_60 = 1, raidNumber do
      
      local HPPercent = 100 * UnitHealth("raid"..i_60) / UnitHealthMax("raid"..i_60)
      local inRange = IsSpellInRange(spellName, "raid"..i_60)
      
         if HPPercent <= 60 and inRange == 1 then CastSpellByName(spellName, "raid"..i_60)
         elseif i_60 == raidNumber then for i_80 = 1, raidNumber do
         
         local HPPercent = 100 * UnitHealth("raid"..i_80) / UnitHealthMax("raid"..i_80)
         local inRange = IsSpellInRange(spellName, "raid"..i_80)
         
            if HPPercent <= 80 and inRange == 1 then CastSpellByName(spellName, "raid"..i_80)
            elseif i_80 == raidNumber then for i_100 = 1, raidNumber do
            
            local HPPercent = 100 * UnitHealth("raid"..i_100) / UnitHealthMax("raid"..i_100)
            local inRange = IsSpellInRange(spellName, "raid"..i_100)
      
               if HPPercent < 100 and inRange == 1 then CastSpellByName(spellName, "raid"..i_100)
                  
end
end
end
end
end
end
end
end
end
end
Сообщение # 1275 отредактировано Khenny - Вторник, 10.11.2015, 16:34
PaulDousen
Рыцарь
KhennyUnitIsFriend или обратное ему UnitIsEnemy

Для исцеления самой просаженной используй таблицы(массивы)
Сообщение # 1276 написано 10.11.2015 в 20:10
GaTaX
Скаут
Доброго времени суток.Нарисовалась проблема,

function Blid(self, elapsed)
local enabled = GetSpellCooldown("Кровопускание")
local rage = UnitPower("player")
local inRange = IsSpellInRange("Кровопускание", "target")
if not UnitDebuff("Кровопускание", "target")
if enabled == 0 and inRange == 1 and rage >= 10 then
RunMacroText(/cast Кровопускание)
end
end
end
CreateFrame("Frame", "BlidFrame")    
BlidFrame:SetScript("OnUpdate", Blid)

В идеале на примере, к примеру на цели вара нету кровопускания, скрипт его повесит.Вот что я накалякал по примерам, но не работает,подскажите в чём проблема.
Заранее благодарен.
Сообщение # 1277 отредактировано GaTaX - Среда, 11.11.2015, 01:09
Khenny
Скаут
PaulDousen, не разобрался с массивами (в программировании новичек), поэтому написал такой вариант:
Код
local raidNumber = GetNumGroupMembers()
local spellName = "Исцеляющий всплеск"
local a
local b
for i = 1, raidNumber do
    local HPPercent = 100 * UnitHealth("raid"..i) / UnitHealthMax("raid"..i)
    local inRange = IsSpellInRange(spellName, "raid"..i)
   
   if a == nil then
   a = HPPercent
   i = 1
   end
   
   if a >= HPPercent and inRange == 1 and HPPercent ~= 0 then
   a = HPPercent
   b = "raid"..i
   end
   
   if i == raidNumber then
      print("Самый просаженный таргет - это "..b..", и он имеет "..format("%.0f",a).."% хп.")
      CastSpellByName(spellName, b)
   end
end

Впринципе, работает, тестил на бг, но иногда не хочет срабатывать, хотя условия соблюдаются (возможно это как-то связанно с тем, что тестил на БГ "Берег древних" и там есть машины, в которых игроки не хилятся, это я позже догадался).
Проверку на дружелюбие позже прикручу, спасибо что дали оператор (это же оператор называется?).
Можете ли на примере показать как использовать таблицы (массивы?)?

Добавлено (11.11.2015, 12:22)
---------------------------------------------
GaTaX, попробуй так:

Код

function Blid(self, elapsed)
local enabled = GetSpellCooldown("Кровопускание")
local rage = UnitPower("player", 1)
local inRange = IsSpellInRange("Кровопускание", "target")
if not UnitDebuff("Кровопускание", "target") then
if enabled == 0 and inRange == 1 and rage >= 10 then
RunMacroText(/cast Кровопускание)
end
end
end
CreateFrame("Frame", "BlidFrame")     
BlidFrame:SetScript("OnUpdate", Blid)

Ты не указал тип ресурса воина (ярость - id 1) и пропустил один then (хотя может там и можно пропустить, но я поставил).
Сообщение # 1278 написано 11.11.2015 в 12:22
GaTaX
Скаут
спс.прийду домой протещу
Сообщение # 1279 написано 11.11.2015 в 13:21
Khenny
Скаут
GaTaX, вариант выше почему-то не работает, попробуй такой вариант:

Код
function Blid(self, elapsed)
local CD = GetSpellCooldown("Кровопускание")
local rage = UnitPower("player", 1)
local inRange = IsSpellInRange("Кровопускание", "target")
   if not UnitDebuff("target", "Кровопускание") and CD == 0 and inRange == 1 and rage >= 10 then CastSpellByName("Кровопускание", "target")
   end
end
CreateFrame("Frame", "BlidFrame")
BlidFrame:SetScript("OnUpdate", Blid)

Тестил, работает.
Сообщение # 1280 отредактировано Khenny - Среда, 11.11.2015, 18:49
GaTaX
Скаут
Khenny, Спасибо большое всё работает)
Сообщение # 1281 написано 11.11.2015 в 15:25
snup5
Скаут
Цитата Khenny ()
Ты не указал тип ресурса воина (ярость - id 1)

У дк тоже будет также на руну  local rage = UnitPower("player", 1)
Если не трудно напиши условия чтобы при 60-рун у ДК кастовалось призыв гаргульи

У меня стоит такой но когда беру в таргет и нет рун срабатывает постоянно каст гаргульи

function SummonGargoyle(elapsed)
            local enabled = GetSpellCooldown("Призыв горгульи")
            local inRange = IsSpellInRange("Призыв горгульи", "target")         
            if not UnitDebuff("target", "Призыв горгульи") and enabled == 0 and inRange == 1 then
            CastSpellByName("Призыв горгульи")
            end   
            end        
CreateFrame("Frame", "frameB")   
frameB:SetScript("OnUpdate", SummonGargoyle)
Сообщение # 1282 отредактировано snup5 - Среда, 11.11.2015, 16:59
GaTaX
Скаут
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.6 then
RunMacro("Reflect")
end
end
end
end
CreateFrame("Frame", "ReflektFrame")
ReflektFrame:SetScript("OnUpdate", Reflekt)

Вот еще не могу понять вроде всё правильно, клиент ошибками луа не плюётся а работать не хочет.( Заместь "спелл" подставляються названия кастов.)Макрос Рефлект тоже ровный.И да кто может подсказать ак в этот скрипт сделать так чтобы ловил спелы и с таргета и с фокуса?Заранее благодарен.

Хех всё решил проблему,убрал несколько ненужных строк кода, и вуаля всё работает вот:

function Reflect(self, elapsed)
local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("target")
local CD = GetSpellCooldown("Отражение заклинания")
if spell == "спел" or spell == "спел" or spell == "спел" or spell == "спел" or spell == "спел" or spell == "спел" or spell == "спел" or spell == "спел" then
local finish = endTime/1000 - GetTime()
if finish <= 0.6 then
RunMacro("Reflect")
end
end
end
CreateFrame("Frame", "ReflectFrame")
ReflectFrame:SetScript("OnUpdate", Reflect)

Если есть только желание, можно условие для проверки наличия раги поставить, и всё.
Но всёже у меня есть вопрос как сделать так чтоб он ловил касты и с таргета и фокуса?
Сообщение # 1283 отредактировано GaTaX - Среда, 11.11.2015, 18:46
Khenny
Скаут
snup5, http://wowwiki.wikia.com/wiki/PowerType
id силы рун 6, дальше просто замени 6 на 1 и вставь в нужное место.

Добавлено (11.11.2015, 18:47)
---------------------------------------------
GaTaX, 
Цитата
И да кто может подсказать ак в этот скрипт сделать так чтобы ловил спелы и с таргета и с фокуса?

Код
function ReflektTarget(self, elapsed)
--тело скрипта для таргета
end

function ReflektFocus(self, elapsed)
--тело скрипта для фокуса
end

CreateFrame("Frame", "ReflektFrame")
ReflektFrame:SetScript("OnUpdate", ReflektTarget)
ReflektFrame:SetScript("OnUpdate", ReflektFocus)
Думаю так.

Добавлено (11.11.2015, 18:51)
---------------------------------------------
Ищу рабочий скрипт на сбитие тотемов, либо может кто мой вариант допилит:
Код
function totemSlayer(self)
local firstTarget = UnitName("target")
local spellName = "Слово тьмы: Боль"
local CD = GetSpellCooldown(spellName)
local totem1 = "Опаляющий тотем"
local totem2 = "Тотем ветроступа"
for i = 1, 5 do
print(i)
local isEnemy = UnitIsEnemy("player", "target")
local inRange = IsSpellInRange(spellName, "target")
local targetName = GetUnitName("target")
if targetName == totem1 or totem2 and CD == 0 and isEnemy == "true" and inRange == 1 then CastSpellByName(spellName,"target")
else TargetNearestEnemy()
end
if i == 5 then TargetUnit(firstTarget) end
end
end
CreateFrame("Frame", "totemSlayerFrame")
totemSlayerFrame:SetScript("OnUpdate", totemSlayer)
Сообщение # 1284 отредактировано Khenny - Среда, 11.11.2015, 18:54
GaTaX
Скаут
Khenny, ЫЫ, всё до боли просто, только что думал и придумал)))
function Reflect(self, elapsed)
local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("target")
local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("focus")
local CD = GetSpellCooldown("Отражение заклинания")
if spell == "спел" or spell == "спел" or spell == "спел" or spell == "спел" or spell == "спел" or spell == "спел" or spell == "спел" or spell == "спел" then
local finish = endTime/1000 - GetTime()
if finish <= 0.6 then
RunMacro("Reflect")
end
end
end
CreateFrame("Frame", "ReflectFrame")
ReflectFrame:SetScript("OnUpdate", Reflect)

Добавляем только 1 строку с проверкой на каст у фокуса )
Проверял работает.
Сообщение # 1285 написано 11.11.2015 в 19:02
Khenny
Скаут
GaTaX, у тебя переменные от таргета перезаписываются переменными от фокуса, т.е. если у тебя есть фокус и таргет, и таргет что-то кастует, то рефлект не сработает (я так думаю).
Сообщение # 1286 написано 11.11.2015 в 19:10
GaTaX
Скаут
Khenny, хм... тестил таким принципом стою бъю моба, держу лока в фокусе, моба в таргете, лок кастует хаос болт скрипт рефлектит, в 3 окна не получаеться изза особенностей сервера. И интернета ХD
Сообщение # 1287 отредактировано GaTaX - Среда, 11.11.2015, 19:35
snup5
Скаут
Цитата Khenny ()
snup5, http://wowwiki.wikia.com/wiki/PowerType
id силы рун 6, дальше просто замени 6 на 1 и вставь в нужное место.


Добавил в скрипт вышло так:
function SummonGargoyle(elapsed)
local enabled = GetSpellCooldown("Призыв горгульи")
local enabled = GetRuneCooldown(RUNE_POWER_UPDATE)
local runes = UnitPower("player", 6)
local inRange = IsSpellInRange("Призыв горгульи", "target")
if not UnitDebuff("target", "Призыв горгульи") and enabled == 0 and inRange == 1 then
CastSpellByName("Призыв горгульи")
end
end
CreateFrame("Frame", "frameB")
frameB:SetScript("OnUpdate", SummonGargoyle)


Выбила ошибка помогите исправить надо что бы "Призыв горгульи" срабатовал при 60 рун либо чтобы проверка и шла на достаточность рун для вызова гаргульи :

Message: [string "function SummonGargoyle(elapsed)..."]:3: Usage: GetRuneCooldown(slot)
Time: 11/11/15 19:38:26
Count: 159
Stack:
: in function `GetRuneCooldown'
[string "function SummonGargoyle(elapsed)..."]:3: in function <[string "function SummonGargoyle(elapsed)..."]:1>

Locals: (*temporary) = nil
Сообщение # 1288 отредактировано snup5 - Среда, 11.11.2015, 19:44
Khenny
Скаут
snup5, во-первых, у тебя две переменные "enabled" (local enabled = GetSpellCooldown("Призыв горгульи") и local enabled = GetRuneCooldown(RUNE_POWER_UPDATE)), во-вторых, зачем тебе вообще "GetRuneCooldown"?, в-третьих, ты добавил "local runes = UnitPower("player", 6)", но в проверке условий его не добавил, т.е. ты обозначил переменную, но не задействовал ее нигде, ну и в-четвертых, имхо UnitDebuff("target", "Призыв горгульи") лишнее, так как является взаимоисключающим с GetSpellCooldown("Призыв горгульи"), да и конфликтовать с чужими гаргульями будет.

Добавлено (11.11.2015, 21:42)
---------------------------------------------
Я бы мог тебе написать готовый скрипт, но будет куда лучше, если ты сам до него дойдешь. smile

Добавлено (11.11.2015, 21:46)
---------------------------------------------
GaTaX, а если будет наоборот, в фокусе моба, а в таргете лока? Думаю вот тогда то работать и не будет.

Сообщение # 1289 написано 11.11.2015 в 21:46
snup5
Скаут
Цитата Khenny ()
snup5, во-первых, у тебя две переменные "enabled" (local enabled = GetSpellCooldown("Призыв горгульи") и local enabled = GetRuneCooldown(RUNE_POWER_UPDATE)), во-вторых, зачем тебе вообще "GetRuneCooldown"?, в-третьих, ты добавил "local runes = UnitPower("player", 6)", но в проверке условий его не добавил, т.е. ты обозначил переменную, но не задействовал ее нигде, ну и в-четвертых, имхо UnitDebuff("target", "Призыв горгульи") лишнее, так как является взаимоисключающим с GetSpellCooldown("Призыв горгульи"), да и конфликтовать с чужими гаргульями будет.
Добавлено (11.11.2015, 21:42)


Спасибо тебе все растолковал вмят но работает
function SummonGargoyle(elapsed)
local enabled = GetSpellCooldown("Призыв горгульи")
local inRange = IsSpellInRange("Призыв горгульи", "target")
local runes = UnitPower("player", 6)
if enabled == 0 and inRange == 1 and runes >= 60 then
CastSpellByName("Призыв горгульи")
end
end
CreateFrame("Frame", "frameB")
frameB:SetScript("OnUpdate", SummonGargoyle)


Добавлено (11.11.2015, 23:05)
---------------------------------------------
Цитата Khenny ()
Ищу рабочий скрипт на сбитие тотемов, либо может кто мой вариант допилит:

Я пробовал делать но у меня знаний луа нету вот лазил по аддонам наткнулся

положение тотемов вокруг игрока в радиусах, порядок, огонь,земля,вода,воздух

local TotemPositions = {[1]={x=0,y=0},[2]={x=0,y=0},[3]={x=0,y=0},[4]={x=0,y=0},}

local TotemOffsets = {0.7354,5.4978,3.927,2.3562,}

local sin, cos = math.sin, math.cos

function TotemTimers.SetTotemPosition(element)
   local x,y = GetPlayerMapPosition("player")
   x = x * mapWidth
   y = y * mapHeight
   local facing = GetPlayerFacing()
   local offsetX = -sin(facing+TotemOffsets[element])
   local offsetY = cos(facing+TotemOffsets[element])
   TotemPositions[element].x = x+offsetX
   TotemPositions[element].y = y+offsetY
end
Сообщение # 1290 отредактировано snup5 - Среда, 11.11.2015, 23:09
Поиск: