Модератор форума: staford11 |
Форум Хитрости Пиратских серверов Читы для WoW Использование Lua скриптов. |
Использование Lua скриптов. |
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) Вроде как то так должно работать |
Код 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) иногда подвисает этот скрипт. проблема в том, что например если на цели весит баф, который можно спуржить (он прописан в условиях, например озарение), то скрипт упорно хочет спуржить и не даёт нажимать другие способности. как сделать так, чтобы приоритет был у способностей которые я нажимаю (например скатер, трап, виверна, сакрифайс, фридом можно было нажать, а то из-за попыток скрипта постоянно использовать Усмиряющий выстрел не даёт использовать другие способности) и как дописать условие, что если цель забегает за препядствие чтобы скрипт не пытался, а использовалось только тогда когда зоне видимости и прочие условия? |
как прикрутить проверку лоса к другим спелам?
собственно вот скрипт на проверку лоса Код 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
|
Всем привет !
есть проблема со скриптом для призыва "Призыв горгульи" я бы хотел что-бы гаргуля при 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) |
не работает где ошыбка?
/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
|
Через UnitPower реализируй
Добавлено (06.11.2015, 14:59)
Сообщение # 1272 написано 06.11.2015 в 14:59
|
Всем здрасти)
Нарыл вот такой скрип у себя в чите. Код 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 Как я понял нужно дописать в пару строчек спелы (чем сбивать и какие). Я там сам дописал пинок, а остальное не понял где. Может быть поможете разобраться?) |
Делаю скрипт, в идеале, при нажатии (по кнопке, привязка к фрейму не нужна) должен проверять ХП группы и хилить самого просаженного. Если в таргете дружелюбная цель - то в приоритете хилит ее.
Код 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 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 |
Khenny, UnitIsFriend или обратное ему UnitIsEnemy
Для исцеления самой просаженной используй таблицы(массивы)
Сообщение # 1276 написано 10.11.2015 в 20:10
|
Доброго времени суток.Нарисовалась проблема,
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) В идеале на примере, к примеру на цели вара нету кровопускания, скрипт его повесит.Вот что я накалякал по примерам, но не работает,подскажите в чём проблема. Заранее благодарен. |
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) Код 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, вариант выше почему-то не работает, попробуй такой вариант:
Код 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) Тестил, работает. |
У дк тоже будет также на руну 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) |
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) Если есть только желание, можно условие для проверки наличия раги поставить, и всё. Но всёже у меня есть вопрос как сделать так чтоб он ловил касты и с таргета и фокуса? |
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) |
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
|
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 |
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) Добавлено (11.11.2015, 21:46)
Сообщение # 1289 написано 11.11.2015 в 21:46
|
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) --------------------------------------------- Я пробовал делать но у меня знаний луа нету вот лазил по аддонам наткнулся положение тотемов вокруг игрока в радиусах, порядок, огонь,земля,вода,воздух 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 |
| |||