Как передать структуру в действие триггера?

Добавлен
Я создаю систему снарядов. У меня возникли проблемы с "детонацией" снаряда. Чтобы определить, должен ли снаряд взорваться, я динамически регистрирую событие:
call TriggerRegisterUnitInRange(<универсальный триггер>, <конкретный юнит-снаряд>, <радиус>, null)
Данные о снаряде хранятся в структуре: дамми юнит, скорость, урон, радиус и прочее. Когда событие диспетчеризируется, мне нужны все эти данные. Спрашивается, как в действии триггера мне запросить структуру?
Подробнее
Создается снаряд. На нём регистрируется событие:
call TriggerRegisterUnitInRange(<триггер>, <созданный снаряд>, <радиус>, <тут может быть фильтр>)
Когда в обозначенный <радиус> входит юнит, мне нужно произвести ряд действий, для которых мне требуется структура. И как мне эту структуру запросить?
Я вижу только два пути.
Во-первых, это хэш. Однако непонятно, какой ключ нужно использовать для сохранения и как потом загрузить именно ту структуру, которую нужно.
Во-вторых, сохранять созданную структуру в массив. Но опять не понятно, как потом запросить именно ту структуру, которую нужно. Да и с удалением могут возникнуть проблемы.
Возможно я что-то принципиально делаю не так. Просветите меня, пожалуйста.

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

bladget, блин, посмотри как все делают, примеров 100500.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
1
24
11 лет назад
1
bladget, блин, посмотри как все делают, примеров 100500.
Принятый ответ
1
28
11 лет назад
1
согласен
если не найдёш не 1 из 100500 примеров пиши в личку сделаю для тебя пример
1
28
11 лет назад
1
вот пример
Загруженные файлы
1
22
11 лет назад
Отредактирован Zahanc
1
Большое спасибо за пример, но это не то. У Вас сделано так, что таймер проверяет наличие рядом юнита (насколько я понял), а я пытался сделать с помощью динамической регистрации события (вхождения юнита в радиус от снаряда), чтобы не было много таймеров с малым периодом. Изначально у меня было сделано приблизительно как у Вас.
1
28
11 лет назад
1
а движение у тебя как сделано?
если так как ты хочешь то только перебор все снарядов находящихся в радиусе который указан в событие от тригерюнит
1
22
11 лет назад
1
Вот так:
Код

function MoveMissile takes nothing returns nothing
        //Объявление локальных переменных.
    local timer t = GetExpiredTimer()
    local integer id = GetHandleId(t)
    local custombolt missile = LoadInteger(ht, id, StringHash("missile"))
            //Данные для движения.
    local real missileX = GetUnitX(missile.dummy)
    local real missileY = GetUnitY(missile.dummy)
    local real angle = Atan2(missileY-missile.targetY, missileX-missile.targetX)
    local real newX = missileX-missile.speed*Cos(angle)
    local real newY = missileY-missile.speed*Sin(angle)      
            
        //Непосредственно движение.
    if missile.dist > missile.speed and GetUnitState(missile.dummy, UNIT_STATE_LIFE) > 0.425 and not IsTerrainPathable(newX, newY, PATHING_TYPE_WALKABILITY) and not IsUnitInRange(missile.dummy, missile.victim, missile.range) then 
        call SetUnitX(missile.dummy, newX)
        call SetUnitY(missile.dummy, newY)
        set missile.dist = missile.dist-missile.speed
    else
            // Движение окончено.
        call missile.destroyBolt( )
        call FlushChildHashtable(ht, id)
        call DestroyTimer(t)
    endif 
        
        set t = null
endfunction 
Но движения может и не быть — снаряд может сразу оказаться в точке назначения. Также, снаряд вовсе не обязательно уничтожается по окончании движения.
1
28
11 лет назад
1
ты все равно используешь таймер и хэш
1
22
11 лет назад
1
Если я буду использовать в таймере ещё и перебор юнитов, при условии что после окончания движения снаряд может продолжать существовать, то нагрузка ощутимо увеличится.
1
28
11 лет назад
1
тогда делай через радиус от тригер юнит с поиском вражеского юнита снаряда
других способов я не вижу да и нагрузка будет значительно меньше чем от перебора в таймере
1
22
11 лет назад
1
Тогда в моём случае мне проще регистрировать это событие в юните-цели. Но я ещё попробую другие варианты.
1
28
11 лет назад
1
можно изменить событие на юнит входит в регион и вместе со снарядом перемещать и регион а потом по хэндлу региона обращаться к снаряду и прочему
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.