Ninbous
Jass progress >>>>>35/100
offline
Опыт:
5,674Активность: |
Нанести урон группе юнитов, если в событии нет тригеринг юнита
Давно делал заклинание Ад у магички из Диабло2, и вот спустя пол года решил доделать спелл, память уже не та, и сейчас в своем коде разобрался с трудом.
Заклинание включается(Приказ ЖарПреисподнии) создает даммиков которые движутся от лица заклинателя образую бесконечный поток даммиков. В это время заклинатель не может ходить но может поворачиваться. Хочу сделать урон юнитам попавшим в радиус даммиков, но блин мозги не варят как... Функция Damage незаконченная, нужно загрузить юнита dummy использую Хеш, но вот как непомню =/
|
16.11.2010, 01:19 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FKoFF
Venomancer 89lvl. Europe
offline
Опыт:
5,975Активность: |
глобалку используй, к примеру что нибудь в роде temp_unit |
16.11.2010, 01:42 | #2
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ninbous
Jass progress >>>>>35/100
offline
Опыт:
5,674Активность: |
Если использовать глобалки то придется юзать массивы, а я не дружу с массивами, они для меня слишком сложны :) Есть другой варинат? Отредактировано Ninbous, 16.11.2010 в 13:00. |
16.11.2010, 11:46 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JassMan
свободен
offline
Опыт:
4,193Активность: |
Функция ForGroup (то есть Damage) является продолжением той функции откуда этот ForGroup запустили. Ибо это всего лишь цикл, который просто находится снаружи от функции.
И поэтому все события и "функции по событию" (такие как GetTriggeringTrigger() ), которые сработали функции EEE, сработают и внутри Damage функции. Проще говоря, функция ForGroup является прямым продолжением функции откуда её вызвали. |
16.11.2010, 15:50 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ninbous
Jass progress >>>>>35/100
offline
Опыт:
5,674Активность: |
О_о правда? Спасибо огромное, незнал, тогда совсем легко =) |
16.11.2010, 17:08 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Klop
Папа римский
offline
Опыт:
13,006Активность: |
Цитата:
так давайте это докажем))) Когда мы используем пик в триггерах,то создаётся новая функция в джаззе,но в триггерах мы этого не видим и используем того же триггеринг юнит,но в джаззе думаем новая функция параметры туда не передавались откуда там триггеринг юнит,знание триггеров иногда тоже помогает)) |
|
16.11.2010, 17:15 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JassMan
свободен
offline
Опыт:
4,193Активность: |
А да, это еще также относиться к фильтрациям, тоесть эти функции тоже связанны напрямую |
16.11.2010, 21:01 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ninbous
Jass progress >>>>>35/100
offline
Опыт:
5,674Активность: |
Спасибо огромное сделал) Вот тока лагает при если врубить сразу у троих героев) Незнаю как оптимизировать, вроде все правильно, значит само по себе ресурсоёмкий триггер.
Посмотрите есть ли утечки? И как все это оптимизировать >_<
Оцените, помоему клево получилось =)
Ninbous добавил: Хеш намного проще) Массивы это пипец, как там люди находят нужную ячейку я непонимаю, а когда ячейка не нужна еще надо все остальные сдвигать и ограничение в 8192 мну неустраивает, было бы бесконечно то загружал бы в ячейку соответствующюю номеру хендла и тогда поиск ячейки был бы намного проще, а тут уууу... |
17.11.2010, 00:38 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JassMan
свободен
offline
Опыт:
4,193Активность: |
В общем исправлять долго, это твоя задача. Я только прочитаю мини лекцию про использование локалок:
Если локальная переменная используется 1 раз (и не используется в циклах), то её лучше не создавать, а сразу писать её значение в нужное место, ибо на инициализацию переменной тоже тратятся ресурсы оперативки. К примеру, GetUnitX() и Y() можно было писать сразу в то место, где они нужны, не создавая для них локалок, так код работает быстрее.
Еще хотелось бы сказать пару слов о таймерах.
Ты создаёшь лишние триггеры, лишние эвенты (события), когда можно было использовать по проще алгоритм.
В общем всё как у тебя, только проще — без создания лишних объектов (триггеров) и забивания памяти.
И сохранять данные в хеш таблице лучше на хендл таймера (указываем в категории).
call SaveUnitHandle(udg_Hash,GetHandleId(t),1,u) ячейку берём произвольно, — я поставил единицу следующее данное можно сохранять во второй ячейке и т.д. А в функции таймера (в нашем случае в функции 000) :
Через этот таймер выгружать данные
Это куда удобнее и менее запутанно. При этом сохраняется MUI, так как таймер локальный и при новом срабатывании способности будет генерироваться новый таймер. И уже тогда на него будут сохраняться данные. То есть не будет коллизий (совпадений, наложений). Отредактировано JassMan, 18.11.2010 в 04:05. |
17.11.2010, 01:05 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ninbous
Jass progress >>>>>35/100
offline
Опыт:
5,674Активность: |
Оптимизирую...
JassMan, перехожу на таймеры вместо тригерров (как я сам недодумался) и вот незнаю как загрузить сохраненный таймер =/ Знаю что можно глобалками, но блин хочу через хеш, как мне связать созданные таймер и триггер в функции Trig_FireOfThePit_Actions?
|
18.11.2010, 01:28 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JassMan
свободен
offline
Опыт:
4,193Активность: |
Я же всё тебе написал — читать надо внимательно и, желательно, не один раз.
Связываешь через функцию GetExpiredTimer() — это тот самый таймер который запустили внизу, а в этой функции он ка бы истекает и мы через GetExpiredTimer() можем к нему обратиться.
Образец:
И еще раз прочти мою мини лекцию про локалки Отредактировано JassMan, 18.11.2010 в 04:04. |
18.11.2010, 03:43 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ninbous
Jass progress >>>>>35/100
offline
Опыт:
5,674Активность: |
JassMan, это я зделал, видмо я неправильно сформулировал вопрос, мне нужнен и тригер и таймер. Таймер нужен для действия и для проверки, есть ли мана у кастера и живой ли он, а тригер нужен для того чтобы отловить приказ "unimmolation" и чтобы вырубить таймер. (это прервет заклинание) Мне нужен и ТАЙМЕР и ТРИГГЕР создавать. P.S. я не такой тупой как ты думаеш)) |
18.11.2010, 12:56 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JassMan
свободен
offline
Опыт:
4,193Активность: |
Тогда расскажи вообще что этот код должен делать? — Какова была цель изначально? |
18.11.2010, 15:20 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ninbous
Jass progress >>>>>35/100
offline
Опыт:
5,674Активность: |
Юнит применяет способность, включается таймер1 (там каждую 0.05 сек создаются даммики) и создается триггер1 (там удаляется таймер1 при событии "Юнит выключает способность "unimmolation").
В таймере1 создается, для каждого созданного даммика, таймер2 (который каждуые 0.05 сек двигает даммика и наносит урон в радиусе даммика)
Вопрос как удалить нужный мне таймер1 в триггере1 с помощью хеша? Глобалками нехочу... |
18.11.2010, 15:35 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JassMan
свободен
offline
Опыт:
4,193Активность: |
А урон лучше наносить, дав каждому дамми юниту способность "жар преисподней (постоянный)" пассивная Отредактировано JassMan, 22.11.2010 в 01:46. |
18.11.2010, 16:59 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ninbous
Jass progress >>>>>35/100
offline
Опыт:
5,674Активность: |
Спасибо, дома посмотрю) Урон мне нужен триггерный, потому что у абилки 20 уровней и урон должен скалирвоаться от интеллекта (на 0.01% за 1 еденицу интеллекта) Насчет абилки Жара Преисподней (пасиивный) я тоже думал)) |
18.11.2010, 17:09 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JassMan
свободен
offline
Опыт:
4,193Активность: |
Тогда придётся генерировать каждый раз группу и выбирать вокруг каждого даммика и наносить урон — это примерно еще 2-3 функции добавить надо.
Кстати я писал прямо здесь, поэтому не могу гарантировать, что тут нету опечаток. . . |
18.11.2010, 17:13 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ninbous
Jass progress >>>>>35/100
offline
Опыт:
5,674Активность: |
Разберемся спасибо)) |
18.11.2010, 17:23 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
bee
vjass.optimizer
offline
Опыт:
16,615Активность: |
GetEnumUnit(), для callback-функции; GetFilterUnit(), для фильтра-функции. |
18.11.2010, 18:18 | #19
+0/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Banzay89
offline
Опыт:
11,155Активность: |
омг.. даешь юниту невидимую ауру, которая действует только на противников в определенном радиусе. потом триггерно дэмажешь всех у кого есть бафф этой ауры.. Оо зачем вообще дамми юниты то? |
23.11.2010, 03:51 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|