Модератор форума: staford11 |
Форум Хитрости Пиратских серверов Читы для WoW Использование Lua скриптов. |
Использование Lua скриптов. |
На сервере котом я сейчас играю, работает такой вот скрипт.
Код SpellBase = {"Ослепление", "Превращение", "Глубокая заморозкw", "Покаяние", "Парализующий удар"} SpellFrame = CreateFrame("Frame", "FrameSpell", UIParent); SpellFrame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED"); SpellFrame:SetScript("OnEvent", function(self, event, arg1, arg2, ...) if(event=="COMBAT_LOG_EVENT_UNFILTERED") then for s = 1,#SpellBase do local name = UnitName("player") if arg2 == "SPELL_CAST_SUCCESS" and name ~= arg4 and name == arg7 and arg10 == SpellBase[s] then local enabled = GetSpellCooldown("Слово Тьмы: Смерть(Уровень 4)") if enabled == 0 then CastSpellByName("Слово Тьмы: Смерть(Уровень 4)") print(arg1,arg2,...) end end end end end) Помогите сделать что бы он отслеживал юзание {"Ослепление", "Превращение", "Глубокая заморозкw", "Покаяние", "Парализующий удар"} с фокуса, собственно что бы и швд давал в фокус. И да, в шип что то тоже не хочет давать швд |
{"Ослепление", "Превращение", "Глубокая заморозкw", "Покаяние", "Парализующий удар"} 1) Зачем здесь заморозка? Швд не сбивает данный стан 2) Хоть бы читали что написали "Глубокая заморозкw"
Пишу макросы и профили PQR
Моя подборка пве скриптов-ротаций 3.3.5
Сообщение # 1233 написано 12.10.2015 в 18:14
|
korenme, нужно попытаться осмыслить что представляет из себя скрипт и его возможности
Добавлено (12.10.2015, 18:17)
Сообщение # 1234 написано 12.10.2015 в 18:17
|
Ребята, подскажите
1)как объединить 2 скрипта в 1? 2)будут ли они работать вместе, если например запускать по отдельности через /smd run Суть идеи автокик по фокусу и цель. Код function Kick(self, elapsed) local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("target") local enabled = GetSpellCooldown("Встречный выстрел") local inRange = IsSpellInRange("Встречный выстрел", "target") if spell then if interrupt == false and enabled == 0 and inRange == 1 then local finish = endTime/1000 - GetTime() if finish <= 0.6 then RunMacroText("/cast Встречный выстрел") end end end end CreateFrame("Frame", "KickFrame") KickFrame:SetScript("OnUpdate", Kick) Код function Kick(self, elapsed) local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("focus") local enabled = GetSpellCooldown("Встречный выстрел") local inRange = IsSpellInRange("Встречный выстрел", "focus") if spell then if interrupt == false and enabled == 0 and inRange == 1 then RunMacroText("/cast Встречный выстрел") end end end CreateFrame("Frame", "KickFrame") KickFrame:SetScript("OnUpdate", Kick) Добавлено (13.10.2015, 12:46)
Сообщение # 1237 написано 13.10.2015 в 12:46
|
bananabomb, можно и вместе и поотдельности. Если поотдельности то смени везде название функции Kick
function Kick(self, elapsed) CreateFrame("Frame", "KickFrame") KickFrame:SetScript("OnUpdate", Kick) На любое другое название, например Kickf
Сообщение # 1241 написано 15.10.2015 в 15:01
|
Спасибо за помощь. Плюсанул.
Ребята, а как написать скрипт на автоматический Усмиряющий выстрел (снимает 1 эффект иступления и 1 эффект магический эффект ) ? Может у кого есть на авто Purge ? Код local purgePriority = 0 if CanHit("Усмиряющий выстрел") then purgePriority = GetPurgePriority() end local dangerousBuffs = {"Озарение", "Слово силы: Щит", "Ледяная преграда", "Гнев карателя", "Берсерк", "Длань защиты", "Длань свободы", "Божественное одобрение", "Придание сил"} function CanUse(spell) if IsUsableSpell(spell) and GetSpellCooldown(spell) == 0 and ReadyToCast(spell) then return true else return false end end function CanHit(spell) if CanUse(spell) and CanReach(spell) and not EnemyIsImmuneToSpell(spell) then return true else return false end end function BuffInfo(spell, unit, own) if own then return UnitBuff(unit, spell, nil, unit) else return UnitBuff(unit, spell) end end function TargetHasBuff(spell, own) if BuffInfo(spell, target, own) then return true else return false end end function HasBuffToPurge(count) for j=1,count do local buff,_,_,_,buffType = UnitBuff(target,j); if buff and (buffType == "" or buffType == "Magic") then return true end end return false end function GetPurgePriority() local foundBuff = false local dontPurge = false for j=1,10 do local buffName,_,_,_,buffType = UnitBuff(target,j); -- все берсерки имеют тип "", бафы без категории nil if buffName and (buffType == "" or buffType == "Magic") then if tContains(dangerousBuffs, buffName) then return 2 elseif buffName == "Жизнецвет" then dontPurge = true end foundBuff = true end end if foundBuff and not dontPurge then return 1 else return 0 end end function EnemyHasBuff(spell, own) if UnitCanAttack(me, target) and TargetHasBuff(spell, own) then return true else return false end end function HasBuff(spell, mine) if BuffInfo(spell, me, mine) then return true else return false end end function HasStacksOfBuff(spell, stacks, mine) local name,_,_,count = BuffInfo(spell,me,mine) if name and count >= stacks then return true else return false end end function GetBuffDuration(spell, unit) local buffName,_,_,_,_,_,endTime = BuffInfo(spell, unit, false) if buffName then return endTime - GetTime() else return 0 end end function EnemyIsImmuneToSpell(spell) if EnemyHasBuff("Ледяная глыба") or EnemyHasBuff("Божественный щит") or EnemyHasBuff("Сдерживание") or TargetHasDebuff("Смерч") or EnemyHasBuff("Плащ теней") or EnemyHasBuff("Антимагический панцирь") then return true else return false end end И не будет ли скрипт мешать использовать другие способности? Например если я хочу использовать другую способность, чтобы давало возможность использовать (а не зацикливало на постоянном использовании Усмиряющего выстрела, в попытке спурджить) ?
Сообщение # 1244 написано 17.10.2015 в 02:43
|
bananabomb, У тебя все слишком сложно... Проще взять за основу простой скрипт и дописать в него свои условия:
Код function PurgeSrc(self) local enabled = GetSpellCooldown("Усмиряющий выстрел") local inRange = IsSpellInRange("Усмиряющий выстрел", "target") if UnitBuff("target", "Озарение") or UnitBuff("target", "Озарение") and not UnitBuff("target", "Ледяная глыба") and not UnitBuff("target", "Ледяная глыба") and enabled == 0 and inRange == 1 then CastSpellByName("Усмиряющий выстрел", "target") end end CreateFrame("Frame", "frameB") frameB:SetScript("OnUpdate", PurgeSrc) Там где дважды написано "Озарение" - ты сам добавляешь баффы которые тебе нужно пуржить, там где "ледяная глыба" это бафы при которых скрипт не будет пуржить. Добавлять их аналогично or UnitBuff("target", "Озарение") или and not UnitBuff("target", "Ледяная глыба") |
Chaosway, спасибо !
А как написать скрипт, чтобы если у цели меньше 20% хп использовался Убийственный выстрел Код function KillS(self) local enabled = GetSpellCooldown("Убийственный выстрел") local inRange = IsSpellInRange("Убийственный выстрел", "target") if UnitHealth(target) < 20% then CastSpellByName("Убийственный выстрел", "target") end end CreateFrame("Frame", "frameE") frameE:SetScript("OnUpdate", KillS)
Сообщение # 1246 написано 18.10.2015 в 14:30
|
Понимаю что не по теме, но все же, наверняка тут многие слышали про harm макросы для RvR.
Так вот, хотелось бы узнать что это и с чем его едят) Ну и пару рабочих примеров желательно, заранее благодарю) р.s. пользовался из любопытства скриптами на ваниш, и быстро заметил как теряю интерес к рвр, поэтому решил перейти на макросы) Добавлено (18.10.2015, 16:58) --------------------------------------------- |
iiapanouk, Не слышал о таких макросах, не увлекался рвр, ни разу не играл за разбойника. Подскажи в чем суть и как примерно реализовать, если возможно то помогу
Добавлено (19.10.2015, 18:39)
Сообщение # 1248 написано 19.10.2015 в 18:39
|
Что то не работает, попробовал переписать по-другому... Будет ли такой вариант работать? Нужно что то изменить? Или у кого то есть готовый вариант для килшота (Убийственный выстрел) ?
Код HealthFrame = CreateFrame("Frame", "HealthF", UIParent); HealthFrame:RegisterEvent("TARGET_HEALTH"); HealthFrame:SetScript("OnEvent", function(self, event, arg1, arg2, ...) if(event=="TARGET_HEALTH") then if arg1 == "target" then health = TargetHealth("target") healthMax = TargetHealthMax("target") percentHealth = health * 100 / healthMax if percentHealth <= 20 and enabled == 0 and inRange == 1 then CastSpellByName("Убийственный выстрел", "target") end end
Сообщение # 1250 написано 20.10.2015 в 03:18
|
HealthFrame = CreateFrame("Frame", "HealthF", UIParent); HealthFrame:RegisterEvent("TARGET_HEALTH"); HealthFrame:SetScript("OnEvent", function(self, event, arg1, arg2, ...) if(event=="TARGET_HEALTH") then if arg1 == "target" then health = TargetHealth("target") healthMax = TargetHealthMax("target") percentHealth = health * 100 / healthMax enabled = GetSpellCooldown("Убийственный выстрел") inRange = IsSpellInRange("Убийственный выстрел", "target") if percentHealth <= 20 and enabled == 0 and inRange == 1 then CastSpellByName("Убийственный выстрел", "target") end end end) |
Спасибо за помощь, вы супер!
Как прописать условие, чтобы не только по цели отслеживалось но и по фокусу. Например если цель и фокус применяет нехорошее заклинание притворялся мёртвым. Код function Reflekt(self, elapsed) local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("target") local name = UnitName("targettarget") local myname = UnitName("player") if spell == "Сглаз" or spell == "Превращение" or spell == "Смерч" or spell == "Стрела хаоса" or spell == "Изгнание зла" or spell == "Звездный огонь" or spell == "Господство над разумом" or spell == "Слепящий свет" then if name == myname then local finish = endTime/1000 - GetTime() if finish <= 0.5 then RunMacroText("/cast Притвориться мертвым") end end end end CreateFrame("Frame", "ReflektFrame") ReflektFrame:SetScript("OnUpdate", Reflekt) Добавлено (20.10.2015, 15:24) --------------------------------------------- Kieg и Chaosway, попробовал как вы написали и так и так не работает (скрипт на килшот). |
Kieg и Chaosway, попробовал как вы написали и так и так не работает (скрипт на килшот). HealthFrame = CreateFrame("Frame", "HealthF", UIParent); HealthFrame:RegisterEvent("TARGET_HEALTH"); HealthFrame:SetScript("OnEvent", function(self, event, arg1, arg2, ...) if(event=="TARGET_HEALTH") then if arg1 == "target" then health = TargetHealth("target") healthMax = TargetHealthMax("target") percentHealth = health * 100 / healthMax enabled = GetSpellCooldown("Убийственный выстрел") inRange = IsSpellInRange("Убийственный выстрел", "target") if percentHealth <= 20 and enabled == 0 and inRange == 1 then CastSpellByName("Убийственный выстрел", "target") end end end end) Пробуй
Сообщение # 1253 написано 20.10.2015 в 16:21
|
HealthFrame:RegisterEvent("UNIT_HEALTH"); HealthFrame:SetScript("OnEvent", function(self, event, arg1, arg2, ...) if(event=="UNIT_HEALTH") then if arg1 == "target" then health = TargetHealth("target") healthMax = TargetHealthMax("target") percentHealth = health * 100 / healthMax enabled = GetSpellCooldown("Убийственный выстрел") inRange = IsSpellInRange("Убийственный выстрел", "target") if percentHealth <= 20 and enabled == 0 and inRange == 1 then CastSpellByName("Убийственный выстрел", "target") end end end end) |
PaulDousen, cпособность (убийственный выстрел) можно использовать только против целей, запас здоровья которых меньше 20%. Нужно значит прописать условие проверки количества хп в процентах у цели и возможность применения данной способности (в зоне досягаемости и не на кд).
Как это реализовать не знаю. Кстати, у тебя нет идеи как в 1 скрипте реализовать отслеживание как по цели, так и по фокусу (для того чтобы если противник цель, либо фокус применял контролирующее заклинание в этот момент использовалось заклинание притвориться мёртвым), по цели вроде как работает, нужно добавить условие по фокусу или это невозможно? Нужно использовать 2 скрипта : 1) по цели 2) по фокусу ?
Сообщение # 1259 написано 21.10.2015 в 11:20
|
function Kick(self, elapsed) local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("target") local enabled = GetSpellCooldown("Заморозка разума") local inRange = IsSpellInRange("Заморозка разума", "target") if spell then if interrupt == false and enabled == 0 and inRange == 1 then local finish = endTime/1000 - GetTime() if finish <= 0.6 then RunMacroText("/cast Заморозка разума") end end end end CreateFrame("Frame", "KickFrame") KickFrame:SetScript("OnUpdate", Kick) Но если цель заходит, например за дерево, и кастует то ниче не могу зделать, ввсегда пишет што цель в не поле зрение. Нужно добавить проверку што не кастовалса скрипт если цель за текстурами или за сстеной/деревом и т.п. Добавлено (21.10.2015, 12:41) --------------------------------------------- PaulDousen, cпособность (убийственный выстрел) можно использовать только против целей, запас здоровья которых меньше 20%. Нужно значит прописать условие проверки количества хп в процентах у цели и возможность применения данной способности (в зоне досягаемости и не на кд). Как это реализовать не знаю. Кстати, у тебя нет идеи как в 1 скрипте реализовать отслеживание как по цели, так и по фокусу (для того чтобы если противник цель, либо фокус применял контролирующее заклинание в этот момент использовалось заклинание притвориться мёртвым), по цели вроде как работает, нужно добавить условие по фокусу или это невозможно? Нужно использовать 2 скрипта : 1) по цели 2) по фокусу ? function KillS(self) local enabled = GetSpellCooldown("Убийственный выстрел") local inRange = IsSpellInRange("Убийственный выстрел", "target") local finRange = IsSpellInRange("Убийственный выстрел", "focus") healtht = TargetHealth("target") healthMaxt = TargetHealthMax("target") percentHealtht = healtht * 100 / healthMaxt healthf = TargetHealth("focus") healthMaxf = TargetHealthMax("focus") percentHealthtf = healthf * 100 / healthMaxf if enabled==0 and inRange==1 and percentHealtht < 20 then CastSpellByName("Убийственный выстрел", "target") end if enabled==0 and finRange==1 and percentHealthf < 20 then CastSpellByName("Убийственный выстрел", "focus") end end CreateFrame("Frame", "frameE") frameE:SetScript("OnUpdate", KillS) Пока ето тестани |
| |||