Страница 1 из 1

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

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

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

Добавлено: 26 ноя 2023, 18:52
noname123
Привет. Это приколюха от близов, итемы в бою теперь не возвращают дистанцию.

Можно конечно сделать проверку через какой нибудь из своих спеллов до неймплейтов, но у вара такого спелла вроде нету. Если тебя устроит, то могу предложить сделать наоборот, проверить сколько неймплейтов в бою не попадают в радиус твоего спелла ("Героический бросок" 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

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

Добавлено: 28 авг 2024, 13:51
eminsk
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 потом можно убрать это как отладочная информация после того как отладишь все.
Чтобы не выводить лишнюю информацию