Модератор форума: staford11  
Использование Lua скриптов.
nurovez777
Скаут
Цитата ganus1993 ()
nurovez777,  пробуйте ещё COMBAT_LOG_EVENT_UNFILTERED


COMBAT_LOG_EVENT_UNFILTERED отсутствует на ванилле, вот слепил простейший скрипт на основе "UNIT_COMBAT"


который ни в какую не хочет работать, и ошибок не выдает и не работает. Может я что то не то делаю - аддон MegaMacro (BindBP на ванилле не пашет), скрипт вставляю где Extended Lua Code. Тут есть одно но - автоматика на ванилле не работает, тобишь запускать скрипт надо кликом (да я и не против), только вот как его запустить другим макросом?

Punisher45, молодец, и разобрался сам и поделился!
Сообщение # 1561 отредактировано nurovez777 - Вторник, 05.04.2016, 19:13
chaosway
Рыцарь
nurovez777, вместо комбат лога попробуй перехватывать сообщение об ошибках (UI_ERROR_MESSAGE) об уклонении врага
Сообщение # 1562 написано 06.04.2016 в 10:47
nurovez777
Скаут
Цитата chaosway ()
nurovez777, вместо комбат лога попробуй перехватывать сообщение об ошибках (UI_ERROR_MESSAGE) об уклонении врага

Не совсем понял, какие могут быть ошибки при уклонении врага... а вот ошибки при использовании Overpower действительно можно отследить. Если овер не активен, то при нажатии получаем ошибку You can't  do that yet, если активен и мы не в боевой стойке то Must be in Battle Stance.

В общем попробовал проверить ловит ли (UI_ERROR_MESSAGE) ошибки или нет - 


тыкаю этот макрос, получаю ошибку You can't  do that yet, Bloodrage не заводится....короче не ловит нифига, или я не знаю как там правильно arg1 вписать. Может на ванилле вообще нельзя эвенты отследить?
Сообщение # 1563 написано 06.04.2016 в 14:11
chaosway
Рыцарь
nurovez777
Цитата nurovez777 ()
Ну или как то отслеживать активен овер или нет
На класике овер прокает не от бафа в талантах? На осуществляется проверка при наличии бафа
Сообщение # 1564 написано 06.04.2016 в 15:20
nurovez777
Скаут
nurovez777
Цитата chaosway ()
На класике овер прокает не от бафа в талантах? На осуществляется проверка при наличии бафа


Не не, баффа никакого нету, только при доджах активируется.
Сообщение # 1565 написано 06.04.2016 в 16:11
ilovelua
Скаут
1)Автошвд

if not cpoinit then
cpoinit = true
--Amount of Cooldown that remains
function cdRemains(spellid)
if select(2,GetSpellCooldown(spellid)) + (select(1,GetSpellCooldown(spellid)) - GetTime()) > 0
then return select(2,GetSpellCooldown(spellid)) + (select(1,GetSpellCooldown(spellid)) - GetTime())
else return 0
end
end

SWD = 48158
FEARWARD = 6346

-- Spell event table
spells = {
-- Hunter
[19503] = {SWD}, -- Scatter

-- Paladin
[20066]   = {SWD}, -- Repentance

-- Rogue
[2094]  = {SWD}, -- Blind
[1776]  = {SWD}, -- Gouge

-- Priest
[10890]  = {SWD}, -- Psyc Scream
}

local SIN_PlayerGUID = UnitGUID("player")
local SIN_InterruptFrame = CreateFrame("FRAME", nil, UIParent)
SIN_InterruptFrame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
SIN_InterruptFrame:SetScript("OnEvent",
function(self, event, _, type,  sourceGUID, sourceNAME, _, destGUID, destNAME, _, spellID)
if type == "SPELL_CAST_SUCCESS" and destGUID == SIN_PlayerGUID and spells [spellID]then

SpellStopCasting()
TargetNearestEnemy()
CastSpellByID(SWD)
--print("trying to cast SWD")
--RaidNotice_AddMessage(RaidWarningFrame, "\124cFFF00000\<Interrupt attempt by "..sourceName..">", ChatTypeInfo["RAID_WARNING"])

end
end)
--print("SWD Frame Inilitized")
end

2)авто швд на шип

if not cTar
then
cTar = {"target","focus","mouseover","arena1","arena2","arena3","arena4","arena5","arenapet1","arenapet2","arenapet3","arenapet4","arenapet5","pettarget"}
end

local InterruptSpells = {
12826, -- Polymorph
12824, -- Polymorph
12825, -- Polymorph
118, -- Polymorph
61305, -- Polymorph: Black Cat
28272, -- Polymorph: Pig
61721, -- Polymorph: Rabbit
61780, -- Polymorph: Turkey
28271, -- Polymorph: Turtle
31865,30850,29490,20407,6359,6358 --Succubus

}

if PQR_SpellAvailable(48158) then
for i=1, #cTar do
if UnitExists(cTar) then
local spellName, _, _, _, _, endCast, _, _, canInterrupt = UnitCastingInfo(cTar)
for _, v in ipairs(InterruptSpells) do
if GetSpellInfo(v) == spellName  then
if ((endCast/1000) - GetTime()) < 0.3  then
SpellStopCasting()
SpellStopCasting()
SpellStopCasting()
CastSpellByID(48158, cTar
)
end
end
end
end
end
end

работает через бота PQR
Сообщение # 1566 отредактировано ilovelua - Пятница, 08.04.2016, 10:08
chaosway
Рыцарь
Цитата ilovelua ()
FEARWARD = 6346

Цитата ilovelua ()
[10890]  = {SWD}, -- Psyc Scream

лол, надо было хотя бы сделать чтобы работало как нужно... А то копипастить ерунду
Второй вообще лол, если кто нибудь додумается кастовать заклинание на уровень меньше то бб, да и по имени заклинания а не id было бы в разы проще
Сообщение # 1567 написано 08.04.2016 в 16:21
Wwwexp
Скаут
псс, пацаны
отпишите пару скриптов на лока/рога
Сообщение # 1568 отредактировано Wwwexp - Суббота, 09.04.2016, 20:30
Midvay3
Скаут
Народ есть у кого рабочий скрипт на Граудинг? для MoP рылся в теме, что-то не нашел sad
Сообщение # 1569 написано 10.04.2016 в 12:34
dibrov
Скаут
Предлагаю вашему вниманию скрипт для Ханта ссылка
Сообщение # 1570 отредактировано dibrov - Понедельник, 11.04.2016, 01:13
Midvay3
Скаут
SWD = CreateFrame("Frame", "SWD", UIParent);
SWD:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
SWD:SetScript("OnEvent", function(self, event, arg1, arg2)
SpellBase = {"Покаяние","Ослепление","Дезориентирующий выстрел","Ошеломление","Парализующий удар","Превращение"}
local cd = GetSpellCooldown("Слово Тьмы: Смерть")
for v = 1,#SpellBase do
local args = {arg1, arg2}
if (arg1 == "target" and arg2 == SpellBase[v]) then
if cd == 0 then
CastSpellByName("Слово Тьмы: Смерть")
end
end
end
end)

Ребят помогите с данным скриптом, взятым постом выше.
В общем как сделать так, чтоб данный скрипт бил в фокус либо же в арена фреймы (Arena1-Arena2)  А еще было бы круто, чтоб автоматом бил в ближайшего противника. Буду очень благодарен
Сообщение # 1571 отредактировано Midvay3 - Понедельник, 11.04.2016, 00:12
gett_lock
Скаут
Подскажите пожалуйста макрос, допустим: если абилка Божественная буря на кд, то будет жаться Героический удар. Или к примеру, если божественная буря не на кд, то всегда она юзается первой, а после нее уже Героический удар или что-нибудь еще
Сообщение # 1572 отредактировано gett_lock - Воскресенье, 29.05.2016, 23:30
staford11
^s†af0rd f0rever^
gett_lock, попробуй:
Код
/run local _,cd,_ = GetSpellCooldown("Божественная буря") if (cd==0) then CastSpellByName("Божественная буря") else CastSpellByName("Героический удар") end
Победоносная @ Галакронд
Мои сборки под 3.3.5а 12340

Исправительные работы: в наличии.
Сообщение # 1573 написано 11.04.2016 в 14:23
ganus1993
Сержант
Цитата gett_lock ()
Подскажите пожалуйста макрос или скрипт, допустим: если абилка Божественная буря на кд, то будет жаться Героический удар. Или к примеру, если божественная буря не на кд, то всегда она юзается первой, а после нее уже Героический удар или что-нибудь еще/run if если божественная буря на Кулдауне then CastSpellByName("героический удар") end , а также /run if если божественная буря НЕ на Кулдауне then CastSpellByName("Божественная буря")
/run if GetSpellCooldown("Божественная буря") no cd или что надо писать? нужно 2 скрипта, с кд и без кд


Код
/run if GetSpellCooldown("Божественная буря")==0 and IsUsableSpell("Божественная буря") and IsSpellInRange("Удар воина Света","target") then CastSpellByName("Божественная буря") end
/run if GetSpellCooldown("Правосудие мудрости")==0 and IsUsableSpell("Правосудие мудрости") and IsSpellInRange("Правосудие мудрости","target") then CastSpellByName("Правосудие мудрости") end
/run if GetSpellCooldown("Удар воина Света")==0 and IsUsableSpell("Удар воина Света") and IsSpellInRange("Удар воина Света","target") then CastSpellByName("Удар воина Света") end

Допилите как вам надо самостоятельно. Привел часть ротации ретрика 3.3.5
Пишу макросы и профили PQR
Моя подборка пве скриптов-ротаций 3.3.5
Сообщение # 1574 написано 11.04.2016 в 15:44
gett_lock
Скаут
ganus1993, staford11. Спасибо обоим за развернутый ответ, все отлично функционирует.
Сообщение # 1575 отредактировано gett_lock - Воскресенье, 29.05.2016, 23:27
bananabomb
Скаут
Создал отдельные темы, но их почему то удаляют. Спрашивается зачем?
1)Ищу скрипт, либо дополнение для PQR на автотрапу: чтобы при нажатии кидалась ровно под ноги по фокусу.
2)Ищу рабочую авторотацию (потипу PQR) для WoW 6.2.3 (PE почему то не хочет работать).
Нужно для сурв охотника / армс воина, какую нибудь крутую для PVP.
Сообщение # 1576 написано 13.04.2016 в 18:49
PaulDousen
Рыцарь
bananabomb

1) Не реализуемо через луа.
2) PE требует луа-анлокер.
Сообщение # 1577 написано 14.04.2016 в 13:20
nurovez777
Скаут
А на ваниллу существует анлокер?
Сообщение # 1578 написано 15.04.2016 в 21:39
porabetazz
Скаут
Возможно ли сделать скрипт для шп, который проверял бы сколько осталось на цели до окончания действия доты Прикосновение вампира и если осталось меньше 1 сек., то начинал бы кастовать снова эту доту?
Сообщение # 1579 написано 16.04.2016 в 03:47
Roxritex
Скаут
function BuffSrc(self) 
   for i = 1, 5 do   
   enabled = GetSpellCooldown("Долой оружие") 
   inRange = IsSpellInRange("Долой оружие", "focus") 
   if UnitBuff("arena"..i, "Вихрь клинков") and enabled == 0 and inRange == 1 then   
    CastSpellByName("Долой оружие", "arena"..i) 
   end 
   end 
end 

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

Можно сделать такое для дизарма вара чтоб дизармил по макросу?если да то подскажите пожалуйста
Сообщение # 1580 написано 16.04.2016 в 04:46
incubator
Скаут
Цитата Roxritex ()
Можно сделать такое для дизарма вара чтоб дизармил по макросу?если да то подскажите пожалуйста
/cast Разоружение
smile
Сообщение # 1581 написано 16.04.2016 в 10:11
Kieg
Сержант
Цитата porabetazz ()
Возможно ли сделать скрипт для шп, который проверял бы сколько осталось на цели до окончания действия доты Прикосновение вампира и если осталось меньше 1 сек., то начинал бы кастовать снова эту доту?
http://wowprogramming.com/docs/api/UnitBuff  expires
Сообщение # 1582 написано 16.04.2016 в 17:08
Roxritex
Скаут
Нужно еще стойку поменятьincubator,
Сообщение # 1583 написано 16.04.2016 в 18:04
porabetazz
Скаут
Цитата Kieg ()
http://wowprogramming.com/docs/api/UnitBuff  expires
Вижу, а как будет выглядеть пример можешь написать? если не трудно

Добавлено (16.04.2016, 23:23)
---------------------------------------------
Помогите пожалуйста сделать скрипт на шп, который будет проверять сколько осталось до окончания доты Вампирика и если меньше 0.8, то кастовал эту доту

Сообщение # 1584 написано 16.04.2016 в 23:23
bananabomb
Скаут
Цитата PaulDousen ()
1) Не реализуемо через луа.2) PE требует луа-анлокер.
1)а для PQR есть?
2)анлокер есть, проверил в SDM вставил автокик - работает. но PE не хочет работать :/ или какая версия PE работает на 6.2.3?
Сообщение # 1585 написано 17.04.2016 в 22:38
surrogatd
Скаут
Привет всем, в консоли анлокера, когда запускаю через него скрипт, вылетает ошибка:

scripts\Interrupt.lua:21: Usage: RegisterFrameCallback( Handler, Control, "Type";

В чем проблема?

В самом скрипте тонна текста. Кому интересно, вот:

Код
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('" .. InterruptSpell .."', 'target')")  
  local Cooldown1,Cooldown2,Cooldown3 = Plus.DoString("return GetSpellCooldown('".. InterruptSpell .."')")
  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(InterruptSpell)
   elseif g_Interrupt_Choose == "all" then
    Player.CastSpell(InterruptSpell)
   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
Сообщение # 1586 отредактировано surrogatd - Понедельник, 18.04.2016, 02:53
PaulDousen
Рыцарь
Цитата bananabomb ()
1)а для PQR есть?2)анлокер есть, проверил в SDM вставил автокик - работает. но PE не хочет работать :/ или какая версия PE работает на 6.2.3?

1) PQR Работает только через луа, с памятью он не работает, поэтому не реализуемо.
2) Баг в PE был только с демолоками, в остальном я не обнаружил багов. Видимо ты что-то не так делаешь.
Сообщение # 1587 написано 19.04.2016 в 09:32
cheburator2000
Скаут
Всем привет) Подскажите пожалуйста возможно написать макрос такой что бы когда я находился за спиной цели юзался "Удар в спину" , а когда я стою лицом к лицу цели то юзалось "Кровоизлияние" ?))Буду очень благодарен) Пробовал сам написать не ничего не вышло((
Код
/run if  IsUsableSpell("Удар в спину") then CastSpellByName("Удар в спину") end
/run if  not IsUsableSpell("Удар в спину") then CastSpellByName("Кровоизлияние") end
Сообщение # 1588 написано 19.04.2016 в 16:08
PaulDousen
Рыцарь
Цитата cheburator2000 ()
Буду очень благодарен) Пробовал сам написать не ничего не вышло((


Для этого нужно парсить сообщния об ошибках в игре, и дальше уже состовлять условие использования
Сообщение # 1589 написано 20.04.2016 в 09:17
Kieg
Сержант
В комбат логе реализируй.
Сообщение # 1590 написано 20.04.2016 в 10:16
Поиск: