Модератор форума: staford11  
Использование Lua скриптов.
Kelwin
Сержант
Цитата araboxteam ()
Kelwin, эх, жму "New" а тут ошибку луа выдает или просто игнорит.(

Содержание ошибки в студию ^^
Сообщение # 511 написано 25.01.2015 в 10:37
DREMUS
Скаут
не юзает с первого раза рефлект только когда одноручка и щит в руках юзаеться, с первого раза одевает только одноручку и щит не жмет рефлект . помогите пожалуйста в чем ошибка
print("Режим Берсерка Активирован.")
local ScriptAddon = CreateFrame("Frame", "vanish1", nil)
function ScriptAddon:OnEvent(event, ...) -- functions created in "object:method"-style have an implicit first parameter of "self", which points to object
self[event](self, ...) -- route event parameters to ScriptAddon:event methods
end
ScriptAddon:SetScript("OnEvent", ScriptAddon.OnEvent)
ScriptAddon:RegisterEvent("UNIT_SPELLCAST_START")

function ScriptAddon:UNIT_SPELLCAST_START(unit)
local spell, rank, displayName, icon, startTime, endTime, isTradeSkill = UnitCastingInfo(unit)
if not spell then return end
if displayName == "Стрела Хаоса" or displayName == "Страх" or displayName == "Смерч" or displayName == "Гнев деревьев" or displayName == "Прикосновение вампира" or displayName == "Превращение" or displayName == "Контроль над разумом" then
self:SetScript("OnUpdate", self.OnUpdate)
self.unit = unit
self.total = 0
self.endTime = endTime/1000 -- this is equal to GetTime() at which the cast will end
self.unitName = UnitName(unit)
end
end

function ScriptAddon:OnUpdate(elapsed)
self.total = self.total + elapsed
-- only call function every 50ms to improve performance
if self.total >= 0.05 then
self.total = 0
local spell, rank, displayName, icon, startTime, endTime, isTradeSkill = UnitCastingInfo(self.unit)
if endTime and endTime/1000 - GetTime() <= 0.4 then
-- stop using performance heavy onupdate function if no spellcast is currently going on
self:SetScript("OnUpdate", nil)
TargetUnit(self.unit)
elseif self.endTime-0.2 <= GetTime() then -- lost Unit (changed target e.g.), guessing cast timer
self:SetScript("OnUpdate", nil)
TargetUnit(self.unitName)
RunMacro("scr")
end
end
end
Сообщение # 512 написано 25.01.2015 в 12:26
h3yAlias
Чемпион
Прописал как скрипт в анлокере для 6.х.х
Код
AutoKick = CreateFrame("Frame", "AutoKick", UIParent);  
AutoKick:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED");  
AutoKick:SetScript("OnEvent", function(self, event, arg1, arg2, ...)  
if(event=="COMBAT_LOG_EVENT_UNFILTERED") then  
       local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("target")    
       if spell then        
        if interrupt == false then    
         local enabled = GetSpellCooldown("Заморозка разума")    
         if enabled == 0 then    
          inRange = IsSpellInRange("Заморозка разума", "target")    
          if inRange==1 then    
            RunMacroText("/cast Заморозка разума")    
          end    
         end    
        end    
       end    
end  
end)

Как этим дальше-то пользоваться?
Делал через SDM
Сообщение # 513 написано 25.01.2015 в 15:16
Kelwin
Сержант
Цитата h3yAlias ()
Как этим дальше-то пользоваться?

В sdm создаешь скрипт. После этого, при входе в игру (или когда пожелаешь) прописываешь в чат /sdm run "название скрипта"

Скрипт будет работать до тех пор пока не выйдешь из игрового мира.
Сообщение # 514 написано 25.01.2015 в 15:19
h3yAlias
Чемпион
И нужно создавать дополнительные макросы к нему?
Если объяснишь дальнейший принцип работы, то буду очень благодарен

Добавлено (25.01.2015, 15:54)
---------------------------------------------
Так понимаю суть в этом?
RunMacroText("/cast Антимагия")
Т.е. он будет искать такое название, или в самом макросе данную строчку?
А если еще куча приписей есть после "cast"
?

Сообщение # 515 написано 25.01.2015 в 15:54
Kelwin
Сержант
Цитата h3yAlias ()
И нужно создавать дополнительные макросы к нему?

RunMacroText(" ") это всего лишь функция, которая позволяет запустить макро-команду.
Никакие макросы создавать не нужно. Лично я, при написании скриптов, использую CastSpellByName("название спелла") вместо RunMacroText("/cast название спелла").

Код
local spellname = "Заморозка разума"
AutoKick = CreateFrame("Frame", "AutoKick", UIParent);   
AutoKick:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED");   
AutoKick:SetScript("OnEvent", function(self, event, arg1, arg2, ...)   
if(event=="COMBAT_LOG_EVENT_UNFILTERED") then   
        local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("target")     
        if spell then         
         if interrupt == false then     
          local enabled = GetSpellCooldown(spellname)     
          if enabled == 0 then     
           inRange = IsSpellInRange(spellname, "target")     
           if inRange==1 then     
             CastSpellByName(spellname)   
           end     
          end     
         end     
        end     
end   
end)

Вот мой вариант этого скрипта. Вместо Заморозки разума можно вписать любой интеррапт.

Добавлено (25.01.2015, 16:07)
---------------------------------------------
Алгоритм запуска:
1. Создать скрипт в sdm и поместить туда код.
2. Запустить скрипт при помощи /sdm run "название скрипта"
3. Наслаждаться работой скрипта.

Сообщение # 516 написано 25.01.2015 в 16:07
h3yAlias
Чемпион
Ага, т.е. откуда бы я не юзал интеррапт, на него будет как бы "накладываться" данный скрипт?
Сообщение # 517 написано 25.01.2015 в 16:30
light117
Рыцарь
Ты не будешь юзать интерапт, скрипт сам увидит что цель кастует, и собьет каст
Нажатие на кнопку "запомнить пароль" не поможет вам запомнить пароль
Сообщение # 518 написано 25.01.2015 в 17:56
tobmaps
Капрал
Цитата light117 ()
Ты не будешь юзать интерапт, скрипт сам увидит что цель кастует, и собьет каст

он не прожмется если враг не в LoS, проверка на него желательна, и это есть в PQR. Также скрипт не собъет каст из-за ГКД на школе интеррапта. Следовательно тут лучше применять цикличные проверки и попытки сбить каст, например как выше вечно предлагают использовать Update фрейма или же можно просто применить аддон Repeater (он же модифицированный SlashIn) который я не раз выкладывал ранее. Но тут надо быть осторожным, если это рендж интеррапт то когда враг окажется за препятствием зацикленый скрипт будет судорожно спамить спелл, а на некоторых серверах из-за проблем с пингом и криво реализованным гкд может вовсе не дать ничего другого прожать пока враг не докастует, опять же это касается недостающей проверки на LoS
reverse engineering your soul... балуюсь C++, C#, SQL, LUA. Владыка 1C. Окончательно забил на emuDev
Сообщение # 519 отредактировано tobmaps - Воскресенье, 25.01.2015, 18:16
h3yAlias
Чемпион
Код
local spellname = "Антимагия"  
AutoKick = CreateFrame("Frame", "AutoKick", UIParent);    
AutoKick:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED");    
AutoKick:SetScript("OnEvent", function(self, event, arg1, arg2, ...)    
if(event=="COMBAT_LOG_EVENT_UNFILTERED") then    
         local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("target")      
         if spell then          
          if interrupt == false then      
           local enabled = GetSpellCooldown("Антимагия")      
           if enabled == 0 then      
            inRange = IsSpellInRange("Антимагия", "target")      
            if inRange==1 then      
              CastSpellByName("Антимагия")    
            end      
           end      
          end      
         end      
end    
end)

Вот что вышло
Все правильно в скобочках и ковычках?

Добавлено (25.01.2015, 19:51)
---------------------------------------------
Ато что-то не работает

Сообщение # 520 написано 25.01.2015 в 19:51
Kelwin
Сержант
Вот.
Код
local spellname = "Антимагия"   
AutoKick = CreateFrame("Frame", "AutoKick", UIParent);     
AutoKick:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED");     
AutoKick:SetScript("OnEvent", function(self, event, arg1, arg2, ...)     
if(event=="COMBAT_LOG_EVENT_UNFILTERED") then     
          local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("target")       
          if spell then           
           if interrupt == false then       
            local enabled = GetSpellCooldown(spellname)       
            if enabled == 0 then       
             inRange = IsSpellInRange(spellname, "target")       
             if inRange==1 then       
               CastSpellByName(spellname)     
             end       
            end       
           end       
          end       
end     
end)
Сообщение # 521 отредактировано Kelwin - Воскресенье, 25.01.2015, 19:58
h3yAlias
Чемпион
Странно, не работает
Сообщение # 522 написано 25.01.2015 в 22:45
Kelwin
Сержант
Цитата h3yAlias ()
Странно, не работает

Напиши версию клиента, язык клиента.

Добавлено (25.01.2015, 22:49)
---------------------------------------------
А также как ты тестируешь?

Сообщение # 523 написано 25.01.2015 в 22:49
h3yAlias
Чемпион
6.0.3
Ру
Бг/дуэли/прошу кастить и т.д.
Сообщение # 524 написано 25.01.2015 в 23:06
Kelwin
Сержант
Хорошо. Поступим следующим образом. Я пишу код, ты его запускаешь и говоришь мне отображаемые в чате данные.
Код
local spellname = "Антимагия"    
AutoKick = CreateFrame("Frame", "AutoKick", UIParent);      
AutoKick:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED");      
AutoKick:SetScript("OnEvent", function(self, event, arg1, arg2, ...)      
if(event=="COMBAT_LOG_EVENT_UNFILTERED") then      
           print("EVENT WORKS")
           local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("target")     
           print("Spell: "..spell)    
           if spell then            
            if interrupt == false then        
             local enabled = GetSpellCooldown(spellname)
             print("Enabled: "..enabled)        
             if enabled == 0 then        
              inRange = IsSpellInRange(spellname, "target")   
              print("Range: "..inRange)      
              if inRange==1 then  
                CastSpellByName(spellname)   
                 print("CastDone: "..spellname)    
              end        
             end        
            end        
           end        
end      
end)

Чтобы протестировать код нужен всего лишь 1 каст, не более. Запусти скрипт и кинь дуэль игроку, попроси его сделать всего 1 каст. Когда он начнет кастовать в чате появится информация. Копируй эти строки сюда.
Сообщение # 525 написано 25.01.2015 в 23:14
h3yAlias
Чемпион
Ковырял старые скрипты
В общем получаю постоянно event works в чат
И спайки в игре
Spell:вспышка света
Enabled: 0
Сообщение # 526 написано 26.01.2015 в 00:05
Kelwin
Сержант
Попробуй так.
Код
local spellname = "Антимагия"    
AutoKick = CreateFrame("Frame", "AutoKick", UIParent);      
AutoKick:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED");      
AutoKick:SetScript("OnEvent", function(self, event, arg1, arg2, ...)      
if(event=="COMBAT_LOG_EVENT_UNFILTERED") then      
           local spell, _, _, _, _, endTime, _, _, interrupt = UnitCastingInfo("target")        
           if spell then            
            if interrupt == false then        
             local enabled = GetSpellCooldown(spellname)        
             if enabled == 0 then        
                CastSpellByName(spellname)           
             end        
            end        
           end        
end      
end)


Если это не сработает включи отображение lua-ошибок в настройках.
Сообщение # 527 написано 26.01.2015 в 00:16
h3yAlias
Чемпион
В общем еще самый первый вариант почему-то заработал
Не суть
Сбивается теперь каст на 0,1с
Это можно поправить?
И, кстати, ты можешь объяснить суть работы автофейка?
Сообщение # 528 написано 26.01.2015 в 01:30
Kelwin
Сержант
Цитата h3yAlias ()
Это можно поправить?

Вот пример другого кика. Вместо Антимагии можно задать любой спелл. Переменная kicktime = 0.3 это время интеррапта до окончания каста. 0.3 это 300 милисекунд, если интеррапт запаздывает из-за пинга - необходимо увеличить значение.
Код
function Kick(self, elapsed)     
         local spname = "Антимагия"
         local kicktime = 0.3     
         local spell, _, _, _, startTime, endTime, _, _, interrupt = UnitCastingInfo("target")        
         local enabled = GetSpellCooldown(spname)        
         local inRange = IsSpellInRange(spname, "target")        
         if spell then        
              if interrupt == false and enabled == 0 and inRange == 1 then        
                   local finish = (endTime/1000) - GetTime()      
                   if finish <= kicktime then        
                        CastSpellByName(spname)      
                   end        
              end        
         end        
end        
CreateFrame("Frame", "KickFrame")        
KickFrame:SetScript("OnUpdate", Kick)


Цитата h3yAlias ()
И, кстати, ты можешь объяснить суть работы автофейка?

Автофейки бывают разные, зеленые, синие, красные. Я на предыдущей странице описал несколько вариантов реализации.
Сообщение # 529 отредактировано Kelwin - Понедельник, 26.01.2015, 01:50
h3yAlias
Чемпион
Цитата Kelwin ()
Вариант №1. Инстант фейк. Срабатывает только при использовании врагом интеррапта. Требует хорошего пинга, фпс и работает не на всех серверах.

А поподробней можешь про этот вариант?
Сообщение # 530 написано 26.01.2015 в 01:57
Kelwin
Сержант
Цитата h3yAlias ()
А поподробней можешь про этот вариант?

Все довольно-таки просто на первый взгляд. Каст прерывается четко в момент использования интеррапта. Но существует несколько проблем, таких как: принцип работы интеррапта на сервере, пинг и фпс. Если хотя бы одно из условий не выполняется - автофейк не сработает.
Сообщение # 531 написано 26.01.2015 в 02:03
h3yAlias
Чемпион
Ну оф же
Как выглядит в целом скрипт?
Можешь в личку, например, скинуть, посмотреть?
Работает на какие-то опр. заклинания, вписанные в скрипт или на все?
Сообщение # 532 написано 26.01.2015 в 02:21
Kelwin
Сержант
На офе не тестировал.
В паблике этого скрипта нет и сливать его бессмысленно.

Цитата h3yAlias ()
Работает на какие-то опр. заклинания, вписанные в скрипт или на все?

Если ты говоришь о интерраптах, то работает только по списку заклинаний внесенных в таблицу скрипта.

Добавлено (26.01.2015, 02:30)
---------------------------------------------
Кстати говоря, как прошел тест второго интеррапта?

Сообщение # 533 написано 26.01.2015 в 02:30
h3yAlias
Чемпион
Второй интеррапт не тестил, ответил в личку
Сообщение # 534 написано 26.01.2015 в 02:57
araboxteam
Скаут
Kelwin, вот содеражание ошибки на ту версию SDM которую ты кидал на странице до этого для WotLK.
Message: Interface\AddOns\SuperDuperMacro\SuperDuperMacro.lua:697: Usage: GetMacroIconInfo(index)
Time: 01/25/15 20:40:21
Count: 1
Stack: [C]: in function `GetMacroIconInfo'
Interface\AddOns\SuperDuperMacro\SuperDuperMacro.lua:697: in function `sdm_UpdateList'
[string "*:OnShow"]:4: in function <[string "*:OnShow"]:1>
[C]: in function `Show'
Interface\AddOns\SuperDuperMacro\SuperDuperMacro.lua:1261: in function <Interface\AddOns\SuperDuperMacro\SuperDuperMacro.lua:1261>

Locals: (*temporary) = "INV_MISC_QUESTIONMARK"
Message: Interface\AddOns\SuperDuperMacro\SuperDuperMacro.lua:697: Usage: GetMacroIconInfo(index)
Time: 01/25/15 20:40:42
Count: 5
Stack: [C]: in function `GetMacroIconInfo'
Interface\AddOns\SuperDuperMacro\SuperDuperMacro.lua:697: in function `sdm_UpdateList'
Interface\AddOns\SuperDuperMacro\SuperDuperMacro.lua:529: in function `sdm_SelectItem'
[string "sdm_SelectItem(nil) sdm_newFrame:Show() sdm..."]:1: in main chunk
[C]: in function `RunScript'
Interface\AddOns\SuperDuperMacro\SuperDuperMacro.lua:968: in function `sdm_SaveConfirmationBox'
Interface\AddOns\SuperDuperMacro\SuperDuperMacro.lua:464: in function `sdm_NewButtonClicked'
[string "*:OnClick"]:1: in function <[string "*:OnClick"]:1>

Locals: (*temporary) = "INV_MISC_QUESTIONMARK"
Сообщение # 535 написано 26.01.2015 в 07:41
Kelwin
Сержант
araboxteam, найди в папке WTF файлы SDM и удали их. После этого попробуй запустить.
Сообщение # 536 написано 26.01.2015 в 13:19
fraer325
Скаут
Ребята,обшарил все страницы,так и не понял,кто нибудь может поделиться скриптом на ловлю трапы,дкшским петом,и может кто нить вообще объяснить суть как куда вставлять,какие проги скачивать,чтобы это всё работала,кому не сложно,напишите свой скайп в лс,или в данную тему
Сообщение # 537 написано 26.01.2015 в 14:08
Kokshetay
Скаут
Добрый Вечер, подскажите плз скрипт на автокик вара, чтобы сам одевал одноручку и щит и сбивал, если такой вообще есть)) Буду благодарен))
Сообщение # 538 написано 26.01.2015 в 17:48
Fuckyouz
Скаут
Цитата Kokshetay ()
Добрый Вечер, подскажите плз скрипт на автокик вара, чтобы сам одевал одноручку и щит и сбивал, если такой вообще есть)) Буду благодарен))

Прежде чем создавать подобные темы полистай форум
Сообщение # 539 отредактировано Fuckyouz - Понедельник, 26.01.2015, 18:17
araboxteam
Скаут
for a=1,3 do
local partyUnit = "party"..a
local enabled = GetSpellCooldown("Leap")
local inRange = IsSpellInRange("Leap", partyUnit)
if UnitDebuff(partyUnit, "Scatter Shot") then
if enabled==0 then
if inRange==1 then
RunMacro("Leap")
end
end
end
end
end

подскажите пожалуйста, это рабочий скрипт на дк чтобы трапу ловил?
Сообщение # 540 написано 27.01.2015 в 06:22
Поиск: