Решено Как сделать так, чтобы trigger_dota реагировал только на отдельного крипа?

fabio_longo

Пользователь
13 Июн 2021
30
1
Проект
Chen's Training
Делаю карту, где нужно играть за чена. Нужно, чтобы триггер реагировал только на одного определённого крипа, приручённого ченом. Как так сделать?
 

vulkantsk

Супермодератор
Команда форума
21 Июн 2017
863
145
www.dotabuff.com
Проект
Roshan defense
Если захват кастомный, то при захвате крипа
Код:
unit.hero = caster
А когда юнит встаёт на триггер, то делаешь проверку

Код:
if unit.hero and unit.hero:GetUnitName()=="npc_dota_hero_chen" then
...
end
 

fabio_longo

Пользователь
13 Июн 2021
30
1
Проект
Chen's Training
Если захват кастомный, то при захвате крипа
Код:
unit.hero = caster
А когда юнит встаёт на триггер, то делаешь проверку

Код:
if unit.hero and unit.hero:GetUnitName()=="npc_dota_hero_chen" then
...
end
А если у меня приручено пять крипов, и нужно, чтобы каждый отдельный триггер реагировал только на одного крипа?)
 

vulkantsk

Супермодератор
Команда форума
21 Июн 2017
863
145
www.dotabuff.com
Проект
Roshan defense
Либо делай переключатель для триггера, либо для юнита
trigger.activated = true
unit.activated = true
 

fabio_longo

Пользователь
13 Июн 2021
30
1
Проект
Chen's Training
Нет, копайся дальше ;)
Всё-таки докопался.
Код:
    if math.abs(point.x - point1.x) <= 128 and math.abs(point.y - point1.y) <= 128 then -- 128 - размер хитбокса триггера, point - положение крипа, point1 - положение триггера
Таким образом, игра проверяет, находится ли определённый крип в хитбоксе триггера, и если да, то запускает последующий скрипт
 
  • Нравится
Реакции: vulkantsk

bobi

Активный
24 Июл 2017
97
16
Взял из билдинг хелпера как раз подойдет под твои нужды чтобы не выставлять в ручную размер триггера.

Lua:
-- Used to find if a position is insde the trigger entity bounds
function BuildingHelper:IsInsideEntityBounds(entity, location)  --   entity = trigger  |  location = UnitPos
    local origin = entity:GetAbsOrigin()
    local bounds = entity:GetBounds()
    local min = bounds.Mins
    local max = bounds.Maxs
    local X = location.x
    local Y = location.y
    local minX = min.x + origin.x
    local minY = min.y + origin.y
    local maxX = max.x + origin.x
    local maxY = max.y + origin.y
    local betweenX = X >= minX and X <= maxX
    local betweenY = Y >= minY and Y <= maxY

    return betweenX and betweenY
end
 
  • Нравится
Реакции: -ExotiC- и fabio_longo

fabio_longo

Пользователь
13 Июн 2021
30
1
Проект
Chen's Training
Взял из билдинг хелпера как раз подойдет под твои нужды чтобы не выставлять в ручную размер триггера.

Lua:
-- Used to find if a position is insde the trigger entity bounds
function BuildingHelper:IsInsideEntityBounds(entity, location)  --   entity = trigger  |  location = UnitPos
    local origin = entity:GetAbsOrigin()
    local bounds = entity:GetBounds()
    local min = bounds.Mins
    local max = bounds.Maxs
    local X = location.x
    local Y = location.y
    local minX = min.x + origin.x
    local minY = min.y + origin.y
    local maxX = max.x + origin.x
    local maxY = max.y + origin.y
    local betweenX = X >= minX and X <= maxX
    local betweenY = Y >= minY and Y <= maxY

    return betweenX and betweenY
end
О, круто, спасибо! А то уже устал кастылить)
 
Реклама: