Нужна помощь в преобразовании глобальной переменной в локальную, но без всех этих трюков с С = С+1 ; юнит (С)... и т.п. Мне просто нужно преобразовать глобальную функцию "выбранный юнит" в локальную "триггер юнит". Дальше игра сама все сделает. Возможно ли это?
В идеале было бы так: выбранный юнит = триггер юнит.
И дальше обращаться уже к триггер юниту
`
ОЖИДАНИЕ РЕКЛАМЫ...
Этот комментарий удален
26
Вообще тебя не понял.
Триггер юнит это скорее всего GetTriggerUnit() - тот кто вызывает срабатывание ивента/события.
Выбранный юнит это скорее всего GetEnumUnit() - перебираемые юниты из ForGroup
Дальше что-то не могу уловить мысль куда тебе нужно двигаться.
25
В чем проблема сделать:
lucal unit u = GetEnumUnit()
или
lucal unit u = GetTriggerUnit()
В зависимости от того, кто тебе нужен, и далее используй локальную переменную u. В чем проблема?) Простая операция присвоения. Или объяснись получше, если проблема в другом. Можешь на конкретном примере с конкретной задачей и как ты пытался ее решить.

Если что, Гуишный "триггерный юнит" ты никак поменять не сможешь. Поэтому используй свои переменные. Хоть и в виде кода, если говорить про локалки.
1
Так как речь идет о гуи, смею предположить, что в качестве аргументов используемых функций в выпадающем списке аргументов этих функций нет общего для этих функций аргумента.
Решение:
заведите глобальную переменную типа ЮНИТ
присвойте вышеупомянутой переменной необходимое вам "выбранный юнит"
подставьте эту глобальную переменную дальше по коду
Также рекомендую ознакомиться с нативными функциями джасса(для понимания происходящего)
Лично мне помогли просто файлы common.j blizzard.j
Вытащить их из вашего клиента можно руковдствуясь ответом на вопрос по ссылке
Ответы (7)
25
ttoni, я так понял он хочет именно локальную переменную для триггера получить в гуишном виде, а глобалка уже не будет локальной.
1
ttoni, я так понял он хочет именно локальную переменную для триггера получить в гуишном виде, а глобалка уже не будет локальной.
Поясню другими словами, что я понял:
В одной функции он выбрал в качестве аргумента: "выбранный юнит"
А в другой функции, дальше по коду, этого аргумента в списке выбора нет, но есть "триггер юнит"
Естесственно, эти аргументы ссылаются на разные переменные, под словом "преобразовать", он банально хочет приравнять их, то есть, чтобы они ссылались на одного и того же юнита.
По сути: нужна просто локальная переменная типа ЮНИТ, которой присвоят значение "выбранный юнит", а потом эту переменную дальше использовать по коду.(а не подменять функции), что и предложил konvan5
Но на ГУИ так нельзя(исключаем кастом код), поэтому я и предложил использовать глобальную переменную в качестве локальной, если так можно сказать...
3
ttoni, спасибо за ответ, но все это не то.
Проблема до боли проста: нужно удалять юнита из отряда через 7 игровых секунд. Если бы в коде я мог ссылаться на триггер юнит, то он удалялся бы, но он ссылается на выбранного юнита, то есть на глобальную ссылку, поэтому удаляется последний юнит, а не в порядке очереди добавления юнитов в отряд.
26
WingSpan, что мешает записать всех "выбранных" юнитов в группу G и спустя 7 секунд сослаться на каждого юнита внутри этой группы?
Ты уверен что речь идет именно о выбранном юните?
3
Extremator, да, у меня там сложный спелл, кидается шадовстрайк, если чел под ядом дохнет, то триггер выбирает всех в радиусе 350 и бросается еще раз множество шадовстрайков, а потом еще раз (итого 3 волны), при этом мне нужно сделать, чтобы он дважды в одного не бросался, поэтому я добавляю этих юнитов в отряд, который исключает их из списка целей на 7 секунд.
Твой совет сложно реализовать, так как мне нельзя просто взять и исключить всех из группы. Нужна очередность.
26
WingSpan, можешь исключать не всех, а только тех кого нужно. Или это не решает твою проблему?
3
Extremator, походу, один гений подсказал мне простое и гениальное решение.
You have empty queue. C = 0, X = 0.
You add a unit (Unit_A) into queue:
C = C + 1 = 1
Unit[C] = Unit[1] = Unit_A
Now starts the 10 second wait
2 seconds after adding Unit_A you add another unit into queue (Unit_B):
C = C + 1 = 2
Unit[C] = Unit[2] = Unit_B
Now starts the 10 second wait for Unit_B
8 seconds after adding Unit_B to queue Unit_A's time is up:
X = X + 1 = 1
Unit_to_remove = Unit[X] = Unit[1] = Unit_A
After another 2 seconds Unit_B's time is up:
X = X + 1 = 2
Unit_to_remove = Unit[X] = Unit[2] = Unit_B
Чтобы оставить комментарий, пожалуйста, войдите на сайт.