Jump to content
abeliq

Поиск и вопросы по макросам

Recommended Posts

 

поставь аддон супермакро 

https://elysium-project.org/forum/index.php?showtopic=16970&page=2#entry219112

там правда небольшой уклон для англоязычного клиента - я учитываю что за спеллом может быть (Rank №)

string.find(spellName .. '(Rank ' .. spellRank .. ')', spell)

так что поменяй - как там оно на рус клиенте в спеллбуке с рангом пишется всмысле (Ранг ) или (Уровень )  - хз

 

 

ну вот так - каст иммолейта, если на противнике дебаф, то шедо болт

/script local rotation = {"Immolate","Shadow Bolt"} if not FindInBook then function FindInBook(spell) local i = 1 local SPELLNUM = nil while true do local spellName, spellRank = GetSpellName(i, BOOKTYPE_SPELL) if not spellName then break end if string.find(spellName .. '(Rank ' .. spellRank .. ')', spell) then SPELLNUM = i end i = i + 1 end return SPELLNUM end end if not FindInBar then function FindInBar(spell) local lActionSlot for lActionSlot = 1, 120 do GameTooltip:SetOwner(GameTooltip, "ANCHOR_NONE") GameTooltip:SetAction(lActionSlot) result = "" leftline = getglobal("GameTooltipTextLeft"..1):GetText() or "" rightline = getglobal("GameTooltipTextRight"..1):IsVisible() if rightline then rightline = getglobal("GameTooltipTextRight"..1):GetText() end result = leftline if rightline and string.find(rightline, "Rank") then rightline = "("..rightline..")" result = result..rightline elseif rightline and leftline ~= "" then result = result.." "..rightline end if string.find(result, spell) then return lActionSlot end GameTooltip:Hide() GameTooltip:ClearLines() end return nil end end if not cd then cd = {} for i = 1, getn(rotation) do cd[i] = {} cd[i].name = rotation[i] cd[i].spellnum = FindInBook(cd[i].name) cd[i].slot = FindInBar(cd[i].name) end end for i = 1, getn(cd) do start, duration = GetSpellCooldown(cd[i].spellnum, BOOKTYPE_SPELL) if duration ~= 0 then cd[i].cd = duration - GetTime() + start else cd[i].cd = 0 end end if buffed("Immolate", "target") then cd[1].cd = 10 end for i = 1, getn(cd) do if cd[i].cd == 0 and IsUsableAction(cd[i].slot) then cast(cd[i].name) break end end

т.е. первый по приоритету Immolate, второй Shadow Bolt

и приписка в конце

if buffed("Immolate", "target") then cd[1].cd = 10 end

которая означает, что если на нашей цели дебаф от иммолейта, то мы ставим кулдаун для 1-го спелла из списка(иммолейт), поэтому он пропустится и скастится шедоболт

 

Да да, это все можно написать в две строчки, но с этим макросом можно последовательность из 20-ти спеллов сделать за пару минут(и проверка на возможность каста адекватная). Так сказать поппуляризирую, ибо 80% вопросов по макросам именно на эту тему.

 

(Еще раз логика макроса - кастим то, что можно первым скастить из списка, ежели нам что-то кастить не надо - то по условию в конце перед последним циклом for..end ставим условия, дабы кд насильно повесить, к слову сказать если надо проверить баф на себе, то вместо "target" "player")

 

рЕБЯТА нашол вот такой скрипт в этой теме

старый нарыл, но не работает 

Я не очень дружу с супер макро можно как то реализовать без него?

http://s019.radikal.ru/i625/1610/52/a7099417daa7.png

 

a7099417daa7t.jpg[/url]

 

 

Edited by Farela

Share this post


Link to post
Share on other sites

Прикрутил аимд шот к стандартному кастбару, обозвав аддон заодно Better Aimed Shot.

если кому интересно - может глянуть код, там идет перехват(hook) функции UseAction чтобы узнать когда клацнули на каст, потом рассчитывается коэффециент изменение скорости

(стандартная берется из описания пушки и описания колчана, а модифицированная бафами всякими на скорость возвращает функция известная, и еще сделал учет пинга в 0.2).

Далее запускается на кастбар, кусок на запуск кастбара скопирован из близзардовского одноименного аддона, который по умолчанию.

 

макрос в новых условиях

/script time_to_shoot = BAS.GetTimeToShoot() if time_to_shoot > 0.9 or (not BAS.autoshot) then CastSpellByName("Aimed Shot") end
При использовании абилок пета, ивент кастстоп тоже срабатывает и кулдаун автошота неправильно срабатывает, есть идеи как исправить? Чтобы отслеживался ивент только для автошота, а не в целом?

Share this post


Link to post
Share on other sites

рЕБЯТА нашол вот такой скрипт в этой теме

старый нарыл, но не работает 

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

 

для последовательности Immolate, CoE, Corruption, Conflagrate к примеру выглядит так

/script local rotation = {"Immolate","Curse of the Elements", "Corruption", "Conflagrate"} if not FindInBook then function FindInBook(spell) local i = 1 local SPELLNUM = nil while true do local spellName, spellRank = GetSpellName(i, BOOKTYPE_SPELL) if not spellName then break end if string.find(spellName .. '(Rank ' .. spellRank .. ')', spell) then SPELLNUM = i end i = i + 1 end return SPELLNUM end end if not FindInBar then function FindInBar(spell) local lActionSlot for lActionSlot = 1, 120 do GameTooltip:SetOwner(GameTooltip, "ANCHOR_NONE") GameTooltip:SetAction(lActionSlot) result = "" leftline = getglobal("GameTooltipTextLeft"..1):GetText() or "" rightline = getglobal("GameTooltipTextRight"..1):IsVisible() if rightline then rightline = getglobal("GameTooltipTextRight"..1):GetText() end result = leftline if rightline and string.find(rightline, "Rank") then rightline = "("..rightline..")" result = result..rightline elseif rightline and leftline ~= "" then result = result.." "..rightline end if string.find(result, spell) then return lActionSlot end GameTooltip:Hide() GameTooltip:ClearLines() end return nil end end if not cd then cd = {} for i = 1, getn(rotation) do cd[i] = {} cd[i].name = rotation[i] cd[i].spellnum = FindInBook(cd[i].name) cd[i].slot = FindInBar(cd[i].name) end end for i = 1, getn(cd) do start, duration = GetSpellCooldown(cd[i].spellnum, BOOKTYPE_SPELL) if duration ~= 0 then cd[i].cd = duration - GetTime() + start else cd[i].cd = 0 end end if buffed("Curse of the Elements", "target") then cd[2].cd = 10 end if buffed("Corruption", "target") then cd[3].cd = 10 end if buffed("Immolate", "target") and not (cd[2].cd~=0 and cd[3].cd~=0 and cd[4].cd~=0) then cd[1].cd = 10 end for i = 1, getn(cd) do if cd[i].cd == 0 and IsUsableAction(cd[i].slot) then cast(cd[i].name) break end end

проще можно - опять же при подключенном супермакро

/script if buffed("Immolate", "target") then cast("Shadow Bolt") else cast("Immolate") end

без супермакро - сложно, надо в цикле проверять на наличие дебафа иммолейт

Edited by shuraken007

Share this post


Link to post
Share on other sites

При использовании абилок пета, ивент кастстоп тоже срабатывает и кулдаун автошота неправильно срабатывает, есть идеи как исправить? Чтобы отслеживался ивент только для автошота, а не в целом?

ну так фишка в том, что для автошота коряво шлются ивенты, и понять что автошот закончился можно только по стопкасту -

надо добавить отслеживание кастов петов, если надо - могу покопаться, тогда кинь в личку пета этого с кастом хотя бы

Edited by shuraken007

Share this post


Link to post
Share on other sites

Видимо, что я делаю что-то не так.) Юзаю на гвардов, пишет тоже самое, Spell_Holy_Dizzy.

/run if UnitDebuff("target",i) then SendChatMessage("resists Shadow and Frost", s) else SendChatMessage("resists Arcane and Fire", s);end Edited by SeconDDooM

Share this post


Link to post
Share on other sites

Здравствуйте, давно ищу макрос, чтобы 1й кнопкой вешать несколько моментальных дот на противника. Вся проблема в том, что первая дота иногда вешается 2 раза подряд, а потом уже вешается вторая. Помогите с макросом! Может задержку между наложением дот сделать или еще чего((

Мне нужен макрос чтобы на 1 кнопку было 2 доты, бегу от моба  спамлю кнопку, и доты обновляются если они завершили свое действие, Если же на цели обе доты то ничего не должно происходить, ну и желательно чтобы все таки первая дота по несколько раз не накладывалась(

Share this post


Link to post
Share on other sites


/script local a, b a = buff("дебафф от первой доты - которое в тултипе при наведении мышкой", "target") b = buff("дебафф от второй доты", "target") if not a then cast("первое закл") elseif not b then cast("второе закл") end

Edited by shuraken007

Share this post


Link to post
Share on other sites

Подскажите, есть ли макрос для охотника, чтобы  при нажатии пр кнопки мыши по противнику, включалась бы автоатака? (Автоматическая атака дальнего боя) И если нет, то может ли кто-нибудь скинуть макрос на автоатаку 2 в 1 (ближний бой+дальний бой)

Edited by stubbzero

Share this post


Link to post
Share on other sites

Даже тяжело представить, зачем это нужно. Если у тебя активирован автошот и ты выбираешь/меняешь цель - у тебя он автоматом начнет в неё стрелять.

Share this post


Link to post
Share on other sites

Даже тяжело представить, зачем это нужно. Если у тебя активирован автошот и ты выбираешь/меняешь цель - у тебя он автоматом начнет в неё стрелять.

Есть смысл,ты не понял постановку вопроса.Он имел виду,когда сокращается расстояние и сбивает автошот можно было той же кнопкой переключиться на мили.Ты задашься вопросов за чем если раптор включает мили,объясняю когда маны нет тогда загвоздка,ибо автошот или мили это от 300-1200 урона.

Share this post


Link to post
Share on other sites

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

И можно ли сделать так чтобы диспелил он именно то что мне нужно из всего букета?

Share this post


Link to post
Share on other sites

Есть смысл,ты не понял постановку вопроса.Он имел виду,когда сокращается расстояние и сбивает автошот можно было той же кнопкой переключиться на мили.Ты задашься вопросов за чем если раптор включает мили,объясняю когда маны нет тогда загвоздка,ибо автошот или мили это от 300-1200 урона.

 

 

У меня макрос с вингклипом, ранг выбирается автоматически в зависимости от текущего кол-ва маны+раптор туда же. Кому как проще, конечно, но, оыбчно, в мили всё равно приходится вингклипом спамить, если пвп билд со вкачанным или там еще контратака.

 

Подскажите, есть ли макрос для охотника, чтобы  при нажатии пр кнопки мыши по противнику, включалась бы автоатака?

 

 

Тут нужен аддон, а не макрос

 

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

И можно ли сделать так чтобы диспелил он именно то что мне нужно из всего букета?

 

 

1) /run CastSpellByName("диспел_собаки");SpellTargetUnit("player");

 

Дальше сам проверяй, мб что-то придется дописать, но должно работать и так.

 

2) А не дохера ли ты хочешь?^

Share this post


Link to post
Share on other sites

Еще один нюанс - у тебя не должно быть никого в таргете, соответственно надо сначала очистить таргет, а потом вернуть последний, всё в 1 макросе. Так же, хз как там будет щас, но раньше на вальке нужно было еще собаку сначала отозвать с текущей цели(если она кого-то била, например). Так что добавь ClearTarget() и TargetLastTarget() как минимум, чтобы было юзабельно.

Share this post


Link to post
Share on other sites

Я для диспела использую этот:
 

/run local x = IsShiftKeyDown(); if x == nil then CastSpellByName('Devour Magic(Rank 4)', 1) else CastSpellByName('Devour Magic(Rank 4)'); end;

Если просто нажать, диспел с таргета. Если зажать shift то диспел с себя.

IsShiftKeyDown можно заменить на IsAltKeyDown или IsControlKeyDown

Share this post


Link to post
Share on other sites

Всем доброго дня. Сегодня решил занятся макросами и столкнулся с интересной проблемой. у меня установлен аддон SuperMacro с помощью которого я пытался написать для роги следующий макрос - 

/script if not buffed("Stealth") then cast("Stealth"); else
if (UnitCanAttack("player","target")) then cast("Sap");
end;end
 

макрос заключается в том чтобы при активации макроса персонаж уходил в стелс, при повторном нажатии он стелс не снимал но если есть возможность сапнуть таргет то он его сапает. Проблема в том, что первую строку кода он якобы читает, но остальное выводит в чат. Может кто сможет помочь с исправлением?

Share this post


Link to post
Share on other sites

/script local c=CastSpellByName if UnitAffectingCombat("player") then c("Vanish") else if not buffed("Stealth") then c("Stealth") else c("Sap") end end

ваниш конечно лишний, при спаме легко кд потерять, поэтому вот без него

/script local c=CastSpellByName if not buffed("Stealth") then c("Stealth") else c("Sap") end

Edited by monteo

Share this post


Link to post
Share on other sites

Всем привет! Помогите написать макрос для паладина.
Цель. Хилить себя при нажатии самым высоким по рангу Holy Light  если жизнь меньше 30%, если же жизнь больше 30% хилить Holy Light (rank "_"), Если маны не хватает на хил то применить заклинание Lay of Hand.

Share this post


Link to post
Share on other sites

ну, можно написать что-нить в этом духе, нужен супермакро чтобы это всё туды запихать, а то буковок много

	local bh = 0
	local mult_heal = 1
	local mana_last_rang = 660
	local heal = {(39+48)/2, (76+91)/2, (159+188)/2, (310+357)/2, (491+554)/2, (698+781)/2, (945+1054)/2, (1246+1389)/2, (1519+1771)/2}
	local hp = UnitHealthMax("player") - UnitHealth("player")
	local mana = UnitMana("player")
	TargetUnit("player")
	if UnitHealth("player")/UnitHealthMax("player") <= 0.3 then
		if mana >= mana_last_rang then
			cast("Holy Light")
		else
			cast("Lay on Hands")
		end
	else
		for i = 1, getn(heal) do
			local cur_heal = mult_heal*heal[i]+2.5/3.5*bh
			if hp < cur_heal or i == getn(heal) then
				cast("Holy Light(Rank "..i..")")
			end
		end
	end

соответственно

bh - это бонус хил, если поставить аддон BonusScanner, можно автоматически рассчитывать

bh = BonusScanner:GetBonus("HEAL")

можно ещё учитывать прожатые триньки, типа зг, с вб, квестовая у аргентумов

		if(buffed("Ages", "player")) then
			bh = bh + 350
		end
		buff, id = buffed("Unstable", "player")
		if(buff == "buff") then
			_ ,num = UnitBuff("player", id)
			bh = bh + 34*num
		end
		buff, id = buffed("Ascendance", "player")
		if(buff == "buff") then 
			_ ,num = UnitBuff("player", id)
			bh = bh + 75*(6-num)
		end 

mult_heal - это коэффициент, действующий на базовый хил (в талах например можно взять +15%, и вписать 1.15 вместо 1)

mana_last_rang - это сколько стоит ласт ранг холи лайта, 9-й ранг стоит 660

Так что итоговый макрос без бонус сканера:

/script local bh = 0 local mult_heal = 1 local mana_last_rang = 660 local heal = {(39+48)/2, (76+91)/2, (159+188)/2, (310+357)/2, (491+554)/2, (698+781)/2, (945+1054)/2, (1246+1389)/2, (1519+1771)/2} local hp = UnitHealthMax("player") - UnitHealth("player") local mana = UnitMana("player") TargetUnit("player") if UnitHealth("player")/UnitHealthMax("player") <= 0.3 then if mana >= mana_last_rang then cast("Holy Light") else cast("Lay on Hands") end else for i = 1, getn(heal) do local cur_heal = mult_heal*heal[i]+2.5/3.5*bh if hp < cur_heal or i == getn(heal) then cast("Holy Light(Rank "..i..")") end end end

А с бонус хилом, врублённым BonusScanner - ом

/script local mult_heal = 1 local mana_last_rang = 660 local bh = BonusScanner:GetBonus("HEAL") local buff,num,id if(buffed("Ages", "player")) then bh = bh + 350 end buff, id = buffed("Unstable", "player") if(buff == "buff") then _ ,num = UnitBuff("player", id) bh = bh + 34*num end buff, id = buffed("Ascendance", "player") if(buff == "buff") then _ ,num = UnitBuff("player", id) bh = bh + 75*(6-num) end local heal = {(39+48)/2, (76+91)/2, (159+188)/2, (310+357)/2, (491+554)/2, (698+781)/2, (945+1054)/2, (1246+1389)/2, (1519+1771)/2} local hp = UnitHealthMax("player") - UnitHealth("player") local mana = UnitMana("player") TargetUnit("player") if UnitHealth("player")/UnitHealthMax("player") <= 0.3 then if mana >= mana_last_rang then cast("Holy Light") else cast("Lay on Hands") end else for i = 1, getn(heal) do local cur_heal = mult_heal*heal[i]+2.5/3.5*bh if hp < cur_heal or i == getn(heal) then cast("Holy Light(Rank "..i..")") end end end

лох кидается только если хп меньше 30% и маны не хватает

я не проверял корректность с бх, есть шанс косяка

Edited by shuraken007

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×