Определение количесва врагов в радиусе

Ответить
kio57
Сообщения: 269
Зарегистрирован: 14 дек 2017, 13:01

Определение количесва врагов в радиусе

Сообщение kio57 » 24 ноя 2023, 21:42

Привет народ. на всех сборках перестало определять мобцов рядом по условию "количество панелей существ в радиусе"
Всё остальное работает исправно( Подскажите куда копать? в сборках ничего не менялось. Новые создавал для проверки- не помогло.
Вложения
Снимок экрана 2023-11-25 003749.png
Снимок экрана 2023-11-25 003749.png (17.03 КБ) 4944 просмотра

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

Re: Определение количесва врагов в радиусе

Сообщение noname123 » 26 ноя 2023, 18:52

Привет. Это приколюха от близов, итемы в бою теперь не возвращают дистанцию.

Можно конечно сделать проверку через какой нибудь из своих спеллов до неймплейтов, но у вара такого спелла вроде нету. Если тебя устроит, то могу предложить сделать наоборот, проверить сколько неймплейтов в бою не попадают в радиус твоего спелла ("Героический бросок" 8-30м). Получается условие будет срабатывать когда мобы находятся возле тебя до 8 метров или если дальше 30. Не думаю что сильно часто будет ситуация встречаться когда второй моб на такой большой дистанции будет стоять.

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

function CheckUnitsIsNotInRange(spellid)
 local UnitsInRange = 0
 for i = 1,40 do
  if UnitExists("nameplate"..i) then
   if MyIsSpellInRange(spellid, "nameplate"..i) == 0 and UnitAffectingCombat("nameplate"..i) then
    UnitsInRange = UnitsInRange + 1
   end
  end
 end
 return UnitsInRange
end
UPD

если к этому добавить второе условие с проверкой дистанции до неймплейтов спелла ("Провокация" 0-30м) тогда будет всё нормально работать в любой ситуации.
Изображение

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

function CheckUnitsInSpellRange(spellid)
 local UnitsInRange = 0
 for i = 1,40 do
  if UnitExists("nameplate"..i) then
   if MyIsSpellInRange(spellid, "nameplate"..i) == 1 and UnitAffectingCombat("nameplate"..i) then
    UnitsInRange = UnitsInRange + 1
   end
  end
 end
 return UnitsInRange
end

eminsk
Сообщения: 287
Зарегистрирован: 19 фев 2016, 17:15

Re: Определение количесва врагов в радиусе

Сообщение eminsk » 28 авг 2024, 13:51

kio57 писал(а):
24 ноя 2023, 21:42
Привет народ. на всех сборках перестало определять мобцов рядом по условию "количество панелей существ в радиусе"
Всё остальное работает исправно( Подскажите куда копать? в сборках ничего не менялось. Новые создавал для проверки- не помогло.

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

function CountNearbyMobs(radius)
    local count = 0
    local units = {"target", "focus", "mouseover"} -- Базовые цели для проверки
    local playerX, playerY, playerZ = UnitPosition("player")

    for i = 1, GetNumGroupMembers() do
        local unit = "party" .. i
        if UnitExists(unit) and not UnitIsDead(unit) and not UnitIsPlayer(unit) then
            local unitX, unitY, unitZ = UnitPosition(unit)
            local distance = math.sqrt((unitX - playerX)^2 + (unitY - playerY)^2 + (unitZ - playerZ)^2)
            if distance <= radius then
                count = count + 1
            end
        end
    end

    for _, unit in ipairs(units) do
        if UnitExists(unit) and not UnitIsDead(unit) and not UnitIsPlayer(unit) then
            local unitX, unitY, unitZ = UnitPosition(unit)
            local distance = math.sqrt((unitX - playerX)^2 + (unitY - playerY)^2 + (unitZ - playerZ)^2)
            if distance <= radius then
                count = count + 1
            end
        end
    end

    print("Количество существ в радиусе " .. radius .. ": " .. count)
    return count
end

Команду print потом можно убрать это как отладочная информация после того как отладишь все.
Чтобы не выводить лишнюю информацию

Ответить

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

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