|
|
|
|
Получил урон
|
|
SunCreep | Дата: Вторник, 31 Мая 2011, 21:45:41 | Сообщение # 1 |
9 уровень
Группа: Проверенные
Сообщений: 1136
Награды: 0
Репутация: 141
Блокировки:
| Мне нужно выбрать юнит,которого я атакую.Я думаю,что нужно сделать так:Создать группу юнитов,все юниты на карте.И каждую секунду из неё всех удалять,и заново всех на карте вставлять.Это поможет поймать тех юнитов,которые были созданы позже начала игры.Я понятия не имею как это осуществить.Если у кого-то есть 2 минуты свободного времени - скинте наработку.Ну,а если нет - опишите всё так))
|
|
|
|
Nan0 | Дата: Вторник, 31 Мая 2011, 21:47:46 | Сообщение # 2 |
10 уровень
Группа: Проверенные
Сообщений: 2828
Награды: 2
Репутация: 280
Блокировки:
| Юнит атакован юнит = х
|
|
|
|
SunCreep | Дата: Вторник, 31 Мая 2011, 21:49:33 | Сообщение # 3 |
9 уровень
Группа: Проверенные
Сообщений: 1136
Награды: 0
Репутация: 141
Блокировки:
| Nan0, ? Событие Получил урон,будет реагировать на юнита которого атакуют,но не на юнита который атакует.
|
|
|
|
SirNikolas | Дата: Среда, 01 Июня 2011, 07:04:40 | Сообщение # 4 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| SunCreep, это делается немного по-другому.
Триггер 001: События: Map initialization Действия: Отряд - Pick every unit in (Units in (Playable map area)) and do (Actions) __Триггер - Add to Нужный триггер <gen> the event: ((Picked unit) Получает урон)
Триггер 002: События: Боевая единица - A unit enters (Playable map area) Действия: Триггер - Add to Нужный триггер <gen> the event: ((Triggering unit) Получает урон)
Правда, при долгой игре это образует утечку событий, но, чтобы этого не было, нужно использовать JASS, а мне лень делать эту наработку.
|
|
|
|
FkoFF | Дата: Среда, 01 Июня 2011, 08:38:57 | Сообщение # 5 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (SirNikolas) Правда, при долгой игре это образует утечку событий, но, чтобы этого не было, нужно использовать JASS, а мне лень делать эту наработку. на Jass нету действия "удалить событие".
|
|
|
|
[DS] | Дата: Среда, 01 Июня 2011, 08:50:06 | Сообщение # 6 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| Есть же удалить действия
|
|
|
|
FkoFF | Дата: Среда, 01 Июня 2011, 08:58:57 | Сообщение # 7 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| [DS], нативку на удаление событий в студию. Добавлено (01-06-2011, 08:58) --------------------------------------------- вообще, чисто в теории, destroytrigger должен удалять триггер и события, однако, как показывает практика, либо он этого не делает вообще - либо делает не правильно; в результате, в любом случае, при разрушении триггера есть утечки, а это значит что могут утекать только события.
Хотя кэп-программист подсказывает что утекают вовсе не события а место в памяти выделенное для работы триггера.
|
|
|
|
SirNikolas | Дата: Среда, 01 Июня 2011, 09:00:45 | Сообщение # 8 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (FkoFF) нативку на удаление событий в студию. Code native DestroyTrigger takes trigger whichTrigger returns nothing Проверь сам.Добавлено (01-06-2011, 09:00) ---------------------------------------------
Quote (FkoFF) при разрушении триггера есть утечки Возможно, это triggeraction. Когда я тестировал, у меня не утекало ничего - не тригеры, не условия, ни действия, ни даже события.
|
|
|
|
FkoFF | Дата: Среда, 01 Июня 2011, 09:04:59 | Сообщение # 9 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (SirNikolas) Возможно, это triggeraction. Когда я тестировал, у меня не утекало ничего - не тригеры, не условия, ни действия, ни даже события. плохо тестировал. в данном случае надо смотреть на вес процесса в памяти, а не на количество хэндлов. Quote (SirNikolas) Проверь сам. и что ты предлагаешь? удалять весь триггер и перезаписывать события?
Короче. Каждое событие добавленное в триггер - расширяет вес триггера в памяти, так же как и каждое действие в триггере расширяет вес триггера в памяти. Таким образом добавив 5000 событий в триггер и удалив его после этого ты не освободишь память, выделенную для работы этого триггера, хоть его, фактически, существовать не будет. И да, событие из триггера невозможно удалить.
|
|
|
|
CHLSN | Дата: Среда, 01 Июня 2011, 09:11:42 | Сообщение # 10 |
10 уровень
Группа: Проверенные
Сообщений: 1627
Награды: 0
Репутация: 132
Блокировки:
| FkoFF, а TriggerClearActions(Conditions) очищают то, что должны очистить?
Я в контакте и на warcraft3ft.info. Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
|
|
|
|
[DS] | Дата: Среда, 01 Июня 2011, 09:36:43 | Сообщение # 11 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| Я говорю удаления действия - TriggerRemoveActions(trigger, action)
|
|
|
|
SirNikolas | Дата: Среда, 01 Июня 2011, 11:16:25 | Сообщение # 12 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (FkoFF) в данном случае надо смотреть на вес процесса в памяти, а не на количество хэндлов. Хм... Похоже, здесь ты прав.Quote (FkoFF) и что ты предлагаешь? Удалять весь триггер и перезаписывать события? Да, я думал, это поможет.Quote (CHLSN) TriggerClearActions (Conditions) очищают то, что должны очистить? Они просто делают так, что при запуске триггера не запускаются ранее привязанные к нему действия (условия).Quote (|DS|) Я говорю удаления действия - TriggerRemoveActions(trigger, action) Никто и не спорит, но мы говорим про события.
|
|
|
|
FkoFF | Дата: Среда, 01 Июня 2011, 11:19:12 | Сообщение # 13 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| CHLSN, эмм. Как бы то объяснить. У объекта "триггер" 3 ячейки, ссылка на функцию "condition", ссылка на функцию "action" и эвенты. Так вот эти самые condition и action - в единственном числе, по сути практически закреплены как в хэш-таблице, а вот ивенты приписываются навсегда, как события, активирующие триггер. И, если бы ивенты являлись функцией - их можно было бы удалять из триггера и заменять, однако так как это безвозвратно аттачащийся элемент - их удалить можно лишь вместе с триггером. Бтв, заменить в триггере события тоже невозможно, однако возможно заменить кондишн и экшн функции..
[DS], это при чем?
на самом деле в этом есть свой большой ништяк.
Можно запилить одну невероятно удобную вещь, если правильно поднапрячься - грамотно слепленный инит.
Условно говоря - на гуи, когда мы делаем герою навыки - мы создаем триггеры и там делаем "ништяк". На джасс мы можем написать функцию, которая, по мере надобности, создаст триггер, из общего кода добавит для него события и действия, таким образом мы обойдем инициализацию триггеров при старте карты. Карта же, в свою очередь, будет грузиться в несколько раз быстрее.
|
|
|
|
SirNikolas | Дата: Среда, 01 Июня 2011, 11:22:25 | Сообщение # 14 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| FkoFF, ты хочешь сказать, что можно сделать один триггер на всю карту?)
|
|
|
|
FkoFF | Дата: Среда, 01 Июня 2011, 11:29:31 | Сообщение # 15 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| SirNikolas, ну не один, но самое большое количество триггеров нам дают герои, и вот именно их количество можно сократить до нужного минимума путем создания триггера и добавления условий лишь в тот момент когда герой был выбран в игре; я себе собираюсь такую систему запилить для удобства). Кстати там же можно прелоадить все скиллы для этого героя (что бы в момент первого изучения мультилевелного двойного скилла игра не подвисала).
|
|
|
|
SunCreep | Дата: Среда, 01 Июня 2011, 12:17:52 | Сообщение # 16 |
9 уровень
Группа: Проверенные
Сообщений: 1136
Награды: 0
Репутация: 141
Блокировки:
| Блин,я видимо какой-то особенный.Всегда в темах которые я создаю начинаются дебаты,а основная тема остаётся забытой.На самом деле,меня больше интересует,как занести отряд в переменную,и потом из этой переменной удалять и вставлять юнитов,которых тоже следует занести в переменную.
|
|
|
|
FkoFF | Дата: Среда, 01 Июня 2011, 13:26:10 | Сообщение # 17 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (SunCreep) Блин,я видимо какой-то особенный.Всегда в темах которые я создаю начинаются дебаты,а основная тема остаётся забытой.На самом деле,меня больше интересует,как занести отряд в переменную,и потом из этой переменной удалять и вставлять юнитов,которых тоже следует занести в переменную. - создай переменную типа "Отряд"
- создай два триггера - по образу и подобию тех триггеров, чьи скрины выше по треду
- добавляй юнитов в отряд, собственно все.
|
|
|
|
SunCreep | Дата: Среда, 01 Июня 2011, 14:05:19 | Сообщение # 18 |
9 уровень
Группа: Проверенные
Сообщений: 1136
Награды: 0
Репутация: 141
Блокировки:
| Хм,все мои попытки были четны,потом я вспомнил одну наработку,которая присутствует у меня в карте,она то и помогла мне решить проблему. "001" - триггер,который делает всё действие.AU - переменная типа отряд. Code 1)С: каждую секунду Д: выбрать каждого юнита в области игровая карта Добавить к "001" событие выбранный юнит атакован Добавить выбранный юнит к "AU"
2)С: Д: call ResetTrigger( gg_trg_Effect ) удалить всех юнитов из "AU"
3)С: отряд вошёл в зону игровой карты У: входящий юнит в "AU" равно нет Д: добавить к "001" событие выбранный юнит атакован
Как работает понятия не имею,но работает.Не работает на тех юнитов,что стоят изначально на карте,но это мне и не нужно.И вот ещё,почему у 2 триггера нет события?И работает ли он?
Сообщение отредактировал SunCreep - Среда, 01 Июня 2011, 14:05:42 |
|
|
|
[DS] | Дата: Среда, 01 Июня 2011, 14:20:46 | Сообщение # 19 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| у 2 триггера нет события, потому что в 1 триггере добавляется событие к триггеру 2.
|
|
|
|
SunCreep | Дата: Среда, 01 Июня 2011, 14:26:51 | Сообщение # 20 |
9 уровень
Группа: Проверенные
Сообщений: 1136
Награды: 0
Репутация: 141
Блокировки:
| [DS], ой,ошибочка вышла.Секунду исправлю. Добавлено (01-06-2011, 14:26) --------------------------------------------- Стоп,нет, читай внимательнее.Там добавляется событие к триггеру "001",а те триггеры что я перечислил имеют название "1)";"2)";"3)" То бишь триггер "001" среди этих трёх не присутствует,он делает то событие ради которого созданы эти три триггера.
|
|
|
|
FkoFF | Дата: Среда, 01 Июня 2011, 14:29:57 | Сообщение # 21 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (SunCreep) Как работает понятия не имею,но работает.Не работает на тех юнитов,что стоят изначально на карте,но это мне и не нужно.И вот ещё,почему у 2 триггера нет события?И работает ли он?
ошибка 1: С: каждую секунду[\s] Инициализация карты У: -- Действие:
Для всех юнитов на карте: Добавить "взятый юнит" в UA Добавить событие "взятый юнит получает урон" в триггер "т2"
[s]Удалить всех юнитов из UA
3)С: отряд вошёл в зону игровой карты У: входящий юнит в "AU" равно нет Д: добавить к "001" событие выбранный юнит атакован
В противном случае на одного и того же юнита действия триггера будут срабатывать столько раз, сколько раз он был удален и заного добавлен в группу. А это - эпический фейл.
|
|
|
|
SunCreep | Дата: Среда, 01 Июня 2011, 14:36:03 | Сообщение # 22 |
9 уровень
Группа: Проверенные
Сообщений: 1136
Награды: 0
Репутация: 141
Блокировки:
| FkoFF, я тебя боюсь.Ты говоришь эпичными фразами и я тебя не понимаю)).То есть надо оставить из всего этого хлама только 3 триггер?В этом случае событий будет в одном триггере слишком много(опять подымаем прошлую тему).И разве не все эти события триггер не будет отвечать несколько раз?То бишь как только юнит создался будет добавлено событие и на каждое событие получившему урон и совпавшему по условиям юниту будет нанесён урон столько раз,сколько событий.Просто я думал что этот "заумный" код( call ResetTrigger( gg_trg_Effect ) ) что-то делает с триггером,чтоб избежать этого.
|
|
|
|
SirNikolas | Дата: Среда, 01 Июня 2011, 14:43:19 | Сообщение # 23 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (SunCreep) Просто я думал, что этот "заумный" код ( call ResetTrigger( gg_trg_Effect ) ) что-то делает с триггером, чтоб избежать этого. Покажи эту функцию. А в методе FkoFF'а все верно.
Сообщение отредактировал SirNikolas - Среда, 01 Июня 2011, 14:44:04 |
|
|
|
SunCreep | Дата: Среда, 01 Июня 2011, 14:51:54 | Сообщение # 24 |
9 уровень
Группа: Проверенные
Сообщений: 1136
Награды: 0
Репутация: 141
Блокировки:
| То есть триггер выглядеть должен так: Quote (FkoFF) С: отряд вошёл в зону игровой карты Quote (SunCreep) выбрать каждого юнита в области игровая карта Quote (FkoFF) добавить к "001" событие выбранный юнит атакован А почему то что я описал в коде - Quote (FkoFF) эпический фейл
|
|
|
|
SirNikolas | Дата: Среда, 01 Июня 2011, 17:34:35 | Сообщение # 25 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (FkoFF) С: отряд вошёл в зону игровой карты Quote (FkoFF) Д: добавить к "001" событие "переключающий юнит атакован"
|
|
|
|
|
|
|
|
|
|
|