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

fabio_longo

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

vulkantsk

Супермодератор
Команда форума
21 Июн 2017
1,137
195
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
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking Training
Если захват кастомный, то при захвате крипа
Код:
unit.hero = caster
А когда юнит встаёт на триггер, то делаешь проверку

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

vulkantsk

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

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking Training
Либо делай переключатель для триггера, либо для юнита
trigger.activated = true
unit.activated = true
Я в скриптинге только второй день копаюсь) Если у тебя есть время, то можно немного подробней?)
 

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking 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
99
18
Взял из билдинг хелпера как раз подойдет под твои нужды чтобы не выставлять в ручную размер триггера.

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
 

fabio_longo

Продвинутый
13 Июн 2021
152
18
steamcommunity.com
Проект
Chen's Training, Creep Stacking 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
О, круто, спасибо! А то уже устал кастылить)
 
Реклама: