| Модератор форума: staford11 |
| Форум Хитрости Пиратских серверов Читы для WoW Использование Lua скриптов. |
| Использование Lua скриптов. |
Код 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
Сообщение # 1267 написано 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
Сообщение # 1269 написано 06.11.2015 в 02:09
|
Через UnitPower реализируй
Добавлено (06.11.2015, 14:59)
Сообщение # 1270 написано 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
Для исцеления самой просаженной используй таблицы(массивы)
Сообщение # 1274 написано 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 (хотя может там и можно пропустить, но я поставил).
Сообщение # 1276 написано 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 строку с проверкой на каст у фокуса ) Проверял работает.
Сообщение # 1283 написано 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)
Сообщение # 1287 написано 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 |
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, Твой скрипт можно улучшить, добавлением условия наличия прока триней или талантов |
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 я тоже с таблицами на вы, а точнее не знаю как добавлять туда, так было бы еще проще через один фор. а еще можно добавить туда петов группы/рейда. |
| |||




