Добавлен
Возвращаемся к предыдущему вопросу, TriggerRegisterUnitInRange() не отлавливает москитов, хотя говорили что отловит, поэтому спрашиваю еще раз, как можно отлавливать встречу двух враждующих дамми?

Принятый ответ

ой сорь, забыл малость, там не событе а функция с похожим названием:
Прикладываю пример, чтобы потом не ныли что не работает...
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
20
7 лет назад
Отредактирован ssbbssc
0
LainMikoroso:
и правда, прошу прощения
немного покопался, и понял, что юнита с москитами функция не видит, был ли он добавлен на карту изначально или создан в процессе игры, и даже если был создан без москитов и потом они были добавлены - все равно не видит
Если герой подберет предмет с москитами - он также будет невидим для этой функции, но связанные с ним действия все также работают в моей миникарте, а также действия с юнитом, которого я просто записал в переменную
Это значит, что тебе нужна небольшая бд юнитов-даммиков, и нужно просто сверять их координаты
ну и само собой, это подойдет для триггерных спеллов, управлять оригинальными москитами не в пример сложнее и легче сделать кастомный аналог

наткнулся на xgm.guru/p/100/187308
читайте что вам пишут и включайте мозги
Загруженные файлы
2
14
7 лет назад
Отредактирован Uber
2
Там ответили после того как я закрыл вопрос, поэтому не заметил
1
32
7 лет назад
1
ой сорь, забыл малость, там не событе а функция с похожим названием:
Прикладываю пример, чтобы потом не ныли что не работает...
Загруженные файлы
Принятый ответ
0
15
7 лет назад
0
У меня все скиллшоты записаны в глобальную перменную с массивом. Циклом пробегаюсь по каждому, и все хорошо.
0
14
7 лет назад
0
ой сорь, забыл малость, там не событе а функция с похожим названием:
Прикладываю пример, чтобы потом не ныли что не работает...
Вечером гляну
2
27
7 лет назад
Отредактирован MpW
2
Можно еще вот это через Pick of Units (в предыдущей теме скидывал). Мб это уже было, но пригодится новичкам
код
globals
unit UNITHERO
integer CountUn = 0
endglobals

function Trig_g_Conditions takes nothing returns boolean
    return( GetSpellAbilityId() == 'A000' )
endfunction

function Trig_X takes nothing returns nothing

if UNITHERO != GetEnumUnit() then
    set CountUn = CountUn + 1
endif
endfunction

function F_D takes nothing returns boolean
local real x1 = GetUnitX(UNITHERO)
local real y1 = GetUnitY(UNITHERO)
local real x2 = GetUnitX(GetFilterUnit())
local real y2 = GetUnitY(GetFilterUnit())

local real dx = x2 - x1
local real dy = y2 - y1

local real r = 400. //здесь указываем радиус (сами укажите) !!!

return (dx*dx + dy*dx < r*r)
endfunction

function Trig_g_Actions takes nothing returns nothing
local group g = CreateGroup()
local real x = GetUnitX(GetTriggerUnit())
local real y = GetUnitY(GetTriggerUnit())
local location loc = Location(x,y)
local boolexpr f = null 
local boolexpr f1 = Condition(function F_D)
set UNITHERO = GetTriggerUnit()
set CountUn = 0
//call GroupEnumUnitsInRange(g, x, y, 400., f) //ловит всех юнитов, находящихся в радиусе от точке, но москитов не ловит
//call GroupEnumUnitsInRangeCounted(g, x, y, 400., f, 4) //аналогична GroupEnumUnitsInRange, но берет определенное кол-во юнитов. Москитов не ловит
//call GroupEnumUnitsInRangeOfLoc(g, loc,400., f) //аналогична GroupEnumUnitsInRange. Москитов не ловит.
//call GroupEnumUnitsInRangeOfLocCounted(g, loc,400., f, 4) //аналогична GroupEnumUnitsInRangeCounted. Москитов не ловит.
//call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea ,f1) //ловит всех юнитов в области. Москитов не ловит.
//call GroupEnumUnitsInRectCounted(g,bj_mapInitialPlayableArea ,f1, 4) //ловит определенное кол-во юнитов в области. Москитов не ловит. 
//call GroupEnumUnitsSelected(g,GetTriggerPlayer(),f) //ловит юнитов. выделенным игроком. Москитов. очевидно. не ловит.
call GroupEnumUnitsOfPlayer(g,GetTriggerPlayer(),f1) //ловит всех-всех юнитов игрока на карте. Москитов ловит нормально.
//call GroupEnumUnitsOfType(g,"Peasant", f) //ловит всех-всех юнитов с этим именем. Нужно писать английский аналог название (например работник = Peasant). Ловит москитов.
//call GroupEnumUnitsOfTypeCounted(g,"Peasant", f, 4) //ловит опреденное кол-во юнитов группу. Ловит Москитов.


call ForGroup(g, function Trig_X)
call BJDebugMsg("Кол-во юнитов: " + I2S(CountUn))
call RemoveLocation(loc)
call DestroyGroup(g)
call DestroyBoolExpr(f)
call DestroyBoolExpr(f1)
set g = null
set f = null
set f1 = null
set loc = null
endfunction

//===========================================================================
function InitTrig_g takes nothing returns nothing
    set gg_trg_g = CreateTrigger(  )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_g, Player(0), EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_g, Condition( function Trig_g_Conditions ) )
    call TriggerAddAction( gg_trg_g, function Trig_g_Actions )
endfunction
еще советую посмотреть наработки с отрядами (формациями как в total war), как там управляют с москитами
Загруженные файлы
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.