Уничтожение тотемов

Ответить
FoeReaper
Сообщения: 11
Зарегистрирован: 11 мар 2023, 21:54

Уничтожение тотемов

Сообщение FoeReaper » 06 мар 2024, 16:18

Всем привет! Можно ли как-то сделать чтобы бот отслеживал тотемы цели arena 1 и если цель установила например тотем контрудара чтобы бот автоматом выбирал его в качестве цели? Так же интересует можно ли добавить отслеживание находится ли игрок в группе или нет.

noname123
Сообщения: 127
Зарегистрирован: 19 мар 2020, 09:15

Re: Уничтожение тотемов

Сообщение noname123 » 08 мар 2024, 14:23

FoeReaper писал(а):
06 мар 2024, 16:18
Всем привет! Можно ли как-то сделать чтобы бот отслеживал тотемы цели arena 1 и если цель установила например тотем контрудара чтобы бот автоматом выбирал его в качестве цели? Так же интересует можно ли добавить отслеживание находится ли игрок в группе или нет.
Привет. А по дебафу тотема контрудара от arena1 отслеживать не получается ?
Изображение

Есть вариант отслеживать через наличие нэймплэйта на экране с конкретным именем, в данном случае "Тотем контрудара". И в радиусе действия твоего атакующего спелла.
p.s. в блоке c CheckTotemInSpellRange(8921) заменить 8921 на ID своего атакующего спелла для проверки рэнджи доступной для атаки.
Изображение

Код: Выделить всё

function CheckTotemInSpellRange(spellid)
 local UnitsInRange = 0
 for i = 1,40 do
  if UnitExists("nameplate"..i) then
   if MyIsSpellInRange(spellid, "nameplate"..i) == 1 and UnitCanAttack("player", "nameplate"..i) == true and UnitName("nameplate"..i) == "Тотем контрудара" then
    UnitsInRange = UnitsInRange + 1
   end
  end
 end
 return UnitsInRange
end

FoeReaper
Сообщения: 11
Зарегистрирован: 11 мар 2023, 21:54

Re: Уничтожение тотемов

Сообщение FoeReaper » 10 мар 2024, 16:42

изначально вся проблема в том что начиная с лк таргетить тотемы макросом /target тотем нельзя. Но я уверен что должны быть еще варианты

noname123
Сообщения: 127
Зарегистрирован: 19 мар 2020, 09:15

Re: Уничтожение тотемов

Сообщение noname123 » 10 мар 2024, 17:59

Понял тебя. Ну из доступных (не запрещенных) вариантов в таком случае остаётся перебор таргетов через таб или атака по маусоверу.
В моём втором варианте если заменить "/target Тотем контрудара" на /targetenemy то при появлении тотема должен начаться спам кнопки таб пока в цель не попадёт тотем. Со стороны палевно наверно будет выглядеть, но сомневаюсь что есть другой легальный способ.

FoeReaper
Сообщения: 11
Зарегистрирован: 11 мар 2023, 21:54

Re: Уничтожение тотемов

Сообщение FoeReaper » 10 мар 2024, 18:50

Спасибо, ну я лучше тоже ничего не придумал, прост был опыт использования софта AimSharp и там какимт образом было это настроенно, тотемы сразу берутся в таргет автоматом без спама Табом, увы вскрыть и посмотреть нельзя, ротации там с закрытыми исходниками. Ну ладно этот вопрос можно опустить пока что, сейчас я немного изменил код чтобы можно было в нем прописать любой тотем, изначально я хотел сделать список тотемов и чтобы он выбирал тотемы по приоритету я не придумал ничего лучше как продублировать код для каждого тотема отдельно и в условиях упорядочить их по приоритетам исключениями. Есть идеи как это сделать более лаконично? А то мне мозгов не хватает:(. Спасибо еще раз что отозвался по мочь, мое дело хоть с мертвой точки сдвинулось:)

noname123
Сообщения: 127
Зарегистрирован: 19 мар 2020, 09:15

Re: Уничтожение тотемов

Сообщение noname123 » 10 мар 2024, 19:34

Может там анлокер встроенный был по дефолту, странно довольно.
т.е. ты хочешь чтобы в одном коде у тебя было прописано несколько тотемов которые будут возвращать true при наличии их на экране ?

Немного доработал идею с перебором таргетов, чтобы не выглядело палевно.
Изображение

Код: Выделить всё

function CheckTotemInSpellRange(spellid)
 local UnitsInRange = 0
 for i = 1,40 do
  if UnitExists("nameplate"..i) then
   if MyIsSpellInRange(spellid, "nameplate"..i) == 1 and UnitCanAttack("player", "nameplate"..i) == true  and UnitName("nameplate"..i) == "Тотем контрудара" then
    UnitsInRange = UnitsInRange + 1
     if ((Timers['CMD_AAA'] ~= nil) and 1 or 0) == 0 then
     Timers['CMD_AAA'] = math.random(2,4)/10
    end
   end
  end
 end
 return UnitsInRange
end
Смысл в том что будет запускаться макрос команда (в данном случае она у меня названа "AAA") и она будет действовать случайное количество времени (у меня выставлено 0.2-0.4) когда это время будет заканчиваться, то прога будет табать макросом и по новой запускать случайный таймер до следующего нажатия 0.2-0.4с. И так будет пока в цель не возьмётся тотем с указанным именем.

В этой строке кода можно задержку под себя изменить Timers['CMD_AAA'] = math.random(2,4)/10

FoeReaper
Сообщения: 11
Зарегистрирован: 11 мар 2023, 21:54

Re: Уничтожение тотемов

Сообщение FoeReaper » 10 мар 2024, 20:07

Ты правильно понял что я хотел в общем, я сидел думал думал и придумал

Код: Выделить всё

function CheckTotemInSpellRange(spellid, totemName)
 local UnitsInRange = 0
 for i = 1, 40 do
  if UnitExists("nameplate"..i) then
   local nameplate = "nameplate"..i
   if MyIsSpellInRange(spellid, nameplate) == 1 and UnitCanAttack("player", nameplate) == true and UnitName(nameplate) == totemName then
    UnitsInRange = UnitsInRange + 1
   end
  end
 end
 return UnitsInRange
end
231.PNG
231.PNG (31.32 КБ) 1098 просмотров
только вот прикол с макросом у тебя в коде я не понял как им пользоваться

noname123
Сообщения: 127
Зарегистрирован: 19 мар 2020, 09:15

Re: Уничтожение тотемов

Сообщение noname123 » 10 мар 2024, 21:50

Ну да, збс решение если надо несколько тотемов искать.

Добавил несколько вещей...
Изображение

Код: Выделить всё

function CheckTotemInSpellRange(spellid, totemName)
 local UnitsInRange = 0
 for i = 1, 40 do
  if UnitExists("nameplate"..i) then
   local nameplate = "nameplate"..i
   if MyIsSpellInRange(spellid, nameplate) == 1 and UnitCanAttack("player", nameplate) == true and UnitName(nameplate) == totemName and UnitName("target") ~= totemName then
    UnitsInRange = UnitsInRange + 1
     if ((Timers['CMD_AAA'] ~= nil) and 1 or 0) == 0 then
     Timers['CMD_AAA'] = math.random(2,4)/10
    end
   end
  end
 end
 return UnitsInRange
end
в код UnitName("target") ~= totemName чтобы не дублировать каждый раз затычку на антиспам если в таргете уже нужный тотем находится.

по поводу макроса...
Скорее всего знаешь что в игре есть функция активации макрос команды. Например чатная команда (которая используется через макрос в игре) /blackdps cmd 3000 STUN, отправляешь эту команду в чат и у тебя в течении 3 секунд будет активен блок в боте с условием "Макрос команда STUN == TRUE", как правило в блок с этим условием спелл на стан ставят и не нужно с ботом воевать на нажатие стана.
Изображение
Когда эта команда /blackdps cmd 3000 STUN в самом боте обрабатывается, то она уже выглядит как Timers['CMD_STUN'] = 3. Зная это ты можешь этот макрос запускать/создавать через пользовательский код. Собственно что я и сделал.

В твой код добавлено:
if ((Timers['CMD_AAA'] ~= nil) and 1 or 0) == 0 then -- проверяет активен ли макрос "AAA", если нет, то выполняет действия ниже.
Timers['CMD_AAA'] = math.random(2,4)/10
end

AAA - это название макроса, можно написать абсолютно любое.
Timers['CMD_AAA'] - запуск макрос команды c названием "AAA"
math.random(2,4)/10 - это выбор случайного числа в заданном промежутке. В данном случае это 0.2 и 0.4

получается что Timers['CMD_AAA'] = math.random(2,4)/10 - делает активным блок с макрос командой AAA на случайное время 0.2-0.4
а вот это условие
Изображение
не даёт запускаться макросу /targetenemy пока время действия макроса AAA не закончится (которое у нас постоянно меняется 0.2-0.4)

FoeReaper
Сообщения: 11
Зарегистрирован: 11 мар 2023, 21:54

Re: Уничтожение тотемов

Сообщение FoeReaper » 11 мар 2024, 12:06

Спасибо что разъяснил с макросами, теперь все стало более понятно, я даже улучшил некоторые другие элементы в своей ротации добавив в них делей так же опять переделал код который ты написал. Вместо того чтобы в функции писать имя тотема и плодить куча болоков с нужными тебе тотемами, лучше чтобы таблица была в коде и еще я туда затолкал определение цели, если это цель из списка то код стопается.

Код: Выделить всё

local TotemPriorityList = {
    "Тотем конденсации",
    "Тотем контрудара",
    "Тотем духовной связи",
    "Тотем заземления",
    "Тотем земляного щита",
}
function CheckTotemInSpellRange(spellid)
    local UnitsInRange = 0
    local currentTarget = UnitName("target")
    for _, totemName in ipairs(TotemPriorityList) do
        if currentTarget == totemName then
            return -1
        end
    end
    for _, totemName in ipairs(TotemPriorityList) do
        for i = 1, 40 do
            local nameplate = "nameplate"..i
            if UnitExists(nameplate) and MyIsSpellInRange(spellid, nameplate) == 1 and UnitCanAttack("player", nameplate) and UnitName(nameplate) == totemName then
                UnitsInRange = UnitsInRange + 1
                if not Timers['CMD_AAA'] then
                    Timers['CMD_AAA'] = math.random(2,4)/10
                end
                break
            end
        end
        if UnitsInRange > 0 then break end
    end   
    return UnitsInRange
end
И тогда хватит одного такого маленького блока который будет искать все нужные тотемы. так же если рядом стоят несколько тотемов из списка но скрипт зацепился не за тот что нужно можно понажимать таб и он поймает тот что нужен, с небольшой каплей рандома, но это работает
231.PNG
231.PNG (5.57 КБ) 1047 просмотров

noname123
Сообщения: 127
Зарегистрирован: 19 мар 2020, 09:15

Re: Уничтожение тотемов

Сообщение noname123 » 11 мар 2024, 14:37

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

Дэлэйчик рандомный вообще тема, самое оно на диспелы и спеллы без гкд прикрутить. Тем более если в пвп играть постоянно.
Если интересно, то вот пример на рандомный диспелл (0.5-1с) по такой же схеме. Может пригодится)
Изображение

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость