Модератор форума: staford11  
Использование Lua скриптов.
chaosway
Рыцарь
Kieg, в твоем скрипте указано хп только таргета, ты хочешь чтобы он стрелял по фокусу учитывая 20% хп таргета
Сообщение # 1261 написано 23.10.2015 в 16:47
Kieg
Сержант
Торопилса, не додал условие хп фокуса.
Дописал.
Сообщение # 1262 отредактировано 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)

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

Сообщение # 1270 написано 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


Как я понял нужно дописать в пару строчек спелы (чем сбивать и какие). Я там сам дописал пинок, а остальное не понял где. Может быть поможете разобраться?)
Сообщение # 1271 отредактировано surrogatd - Среда, 11.11.2015, 09:03
forrz
Скаут
Дайте плз скрипты на холипала 3.3.5 в пвп
Сообщение # 1272 написано 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
Сообщение # 1273 отредактировано Khenny - Вторник, 10.11.2015, 16:34
PaulDousen
Рыцарь
KhennyUnitIsFriend или обратное ему UnitIsEnemy

Для исцеления самой просаженной используй таблицы(массивы)
Сообщение # 1274 написано 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)

В идеале на примере, к примеру на цели вара нету кровопускания, скрипт его повесит.Вот что я накалякал по примерам, но не работает,подскажите в чём проблема.
Заранее благодарен.
Сообщение # 1275 отредактировано 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 (хотя может там и можно пропустить, но я поставил).
Сообщение # 1276 написано 11.11.2015 в 12:22
GaTaX
Скаут
спс.прийду домой протещу
Сообщение # 1277 написано 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)

Тестил, работает.
Сообщение # 1278 отредактировано Khenny - Среда, 11.11.2015, 18:49
GaTaX
Скаут
Khenny, Спасибо большое всё работает)
Сообщение # 1279 написано 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)
Сообщение # 1280 отредактировано 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)

Если есть только желание, можно условие для проверки наличия раги поставить, и всё.
Но всёже у меня есть вопрос как сделать так чтоб он ловил касты и с таргета и фокуса?
Сообщение # 1281 отредактировано 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)
Сообщение # 1282 отредактировано 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 строку с проверкой на каст у фокуса )
Проверял работает.
Сообщение # 1283 написано 11.11.2015 в 19:02
Khenny
Скаут
GaTaX, у тебя переменные от таргета перезаписываются переменными от фокуса, т.е. если у тебя есть фокус и таргет, и таргет что-то кастует, то рефлект не сработает (я так думаю).
Сообщение # 1284 написано 11.11.2015 в 19:10
GaTaX
Скаут
Khenny, хм... тестил таким принципом стою бъю моба, держу лока в фокусе, моба в таргете, лок кастует хаос болт скрипт рефлектит, в 3 окна не получаеться изза особенностей сервера. И интернета ХD
Сообщение # 1285 отредактировано 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
Сообщение # 1286 отредактировано 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, а если будет наоборот, в фокусе моба, а в таргете лока? Думаю вот тогда то работать и не будет.

Сообщение # 1287 написано 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
Сообщение # 1288 отредактировано snup5 - Среда, 11.11.2015, 23:09
chaosway
Рыцарь
Khenny, попробуй так, если в моусовере увидит тотем то ударит болью по нему

Код
function Totem(self)      
name = UnitName("mouseover")
if name == "Опаляющий тотем" or name == "Тотем ветроступа" then
CastSpellByName("Слово тьмы: Боль" , "mouseover")
end  

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


Добавлено (18.11.2015, 19:58)
---------------------------------------------
GaTaX, Два твоих скрипта рефлекта не работали, потому что это 2 разных скрипта но на каждом из них одинаковая функция "function Reflect(self, elapsed)". Работает только один из них, тот который ты запустил позднее. Тебе нужно изменить название функции, например "function Reflectfocus(self, elapsed)" во всех местах где написана эта функция, тогда работать будут оба скрипта

Добавлено (18.11.2015, 19:59)
---------------------------------------------
snup5, Твой скрипт можно улучшить, добавлением условия наличия прока триней или талантов
Сообщение # 1289 отредактировано chaosway - Среда, 18.11.2015, 20:00
UnitIsGhost
Скаут
Khenny, я чуть по другому ищу лоухп:
Код
local function hP(unit) return UnitHealthMax(unit) - UnitHealth(unit) end
local rNum,grouP,mem,memHP,TarFoc = GetNumPartyMembers(),"party","player",0,{"target","focus"}
if GetNumRaidMembers() > 0 then rNum,grouP = GetNumRaidMembers(),"raid" end
for i=0,rNum do
   local m=grouP..tostring(i) if i=0 then m="player" end
   if UnitInRange("player",m) and UnitIsFriend(m) and not UnitIsDeadOrGhost(m)
   and hP(m) >= memHP then mem,memHP = m,hP(m) end
end
for _,v in ipairs(TarFoc) do
   if UnitExists(v) and UnitIsFriend(v) and UnitInRange("player",v) and not UnitPlayerOrPetInRaid(v)
   and not UnitPlayerOrPetInParty(v) and not UnitIsDeadOrGhost(v) and hP(v) >= memHP then mem,memHP = v,hP(v) end
end
if memHP > 15000 then CastSpellByName("Имя закл..", mem) end

я тоже с таблицами на вы, а точнее не знаю как добавлять туда, так было бы еще проще через один фор. а еще можно добавить туда петов группы/рейда.
Сообщение # 1290 отредактировано UnitIsGhost - Четверг, 19.11.2015, 13:18
Поиск: