Hares
полупротосс
offline
Опыт:
6,966Активность: |
Event: Generic Unit - Получает урон
Поскольку постоянно спрашивают, как это делать, предлагаю событие. Написано на гибриде C# и cJass.
» Сам код.
Если в карте этого нет, то добавьте:
((код
define
{ bool = boolean; void = nothing; int = integer; } )) Непосредственно: ((код
globals
trigger array Owners; int OwnerBounty = 0; group array RegistredUnits; endglobals bool UnitTakesDamage_Filter()
{ unit u = GetFilterUnit(); if (u == null) {u = GetEnumUnit()} int i = 0; loop { exitwhen i >= OwnerBounty if !(IsUnitInGroup(u, RegistredUnits[i])) { TriggerRegisterUnitEvent(Owners[i], u, EVENT_UNIT_DAMAGED); GroupAddUnit(RegistredUnits[i], u); } i++; } u = null; return false; } event TriggerAddEventUnitTakesDamage(trigger Owner) { if (OwnerBounty == 0) { trigger t = CreateTrigger(); region r = CreateRegion(); RegionAddRect(r, bj_mapInitialCameraBounds); TriggerRegisterEnterRegion(t, r, function UnitTakesDamage_Filter); } RegistredUnits[OwnerBounty] = CreateGroup(); Owners[OwnerBounty] = Owner; OwnerBounty++; group g = CreateGroup(); GroupEnumUnitsInRect(g, bj_mapInitialPlayableArea, null); ForGroup(g, function UnitTakesDamage_Filter); DestroyGroup(g); t = null; r = null; g = null; return null; } )) Всё проверено, работает. В ближайшем времени выложу карту-пример и систему отображения урона (texttag'ами). Хотя нет, пожалуй напишу систему энергощитов для юнитов. =) Отредактировано Hares, 03.01.2012 в 00:50. |
02.01.2012, 01:36 | #1
+2/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
Омфг глупо и вооще глупо. Зачем столько проверок. |
02.01.2012, 01:42 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MyRtZ
offline
Опыт:
6,530Активность: |
Знали бы ты сколько таких систем - не вылаживали бы
Где инициализация переменных
Почему вырван код? Приведите его в нормальное состояние
Куда пропало DestroyGroup(Any) ?
Что это за очистка переменных при условии?
Код дикий по своей специфике работы, легче создать триггер который регистрирует в группу и в главный триггер как event в случае вхождения юнита в область, если тот не в группе Отредактировано MyRtZ, 02.01.2012 в 02:44. |
02.01.2012, 01:50 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hares
полупротосс
offline
Опыт:
6,966Активность: |
Doc:
Что глупо то? Проверок мало. MyRtZ:
Вот это - единственное, с чем согласен. Потерял, просто много вариантов было. MyRtZ:
Знаю. Далеко не все - нормальные. MyRtZ:
Это не условие, а действие. MyRtZ:
Если Вы читали мануал Адольфа, то поняли бы, что никакого конфликта не возникает. Слева вместо t могло стоять и zu, но тогда же он и стояло бы справа.
MyRtZ:
Что именно вырвано? Это - целиком и полностью написанная функция. Карту пока выкладывать смысле нет. СОРИ.
Забыл про кусок кода, он просто вверху был. отредактировал пост. Hares добавил: Хотя в том коде всего 2 строки. |
02.01.2012, 02:37 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MyRtZ
offline
Опыт:
6,530Активность: |
Проверок чуть больше, чем много
Чистка происходит в блоке оператора if, в этом случае переменные очищаются тогда, когда юнит не в группе |
02.01.2012, 02:49 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hares
полупротосс
offline
Опыт:
6,966Активность: |
MyRtZ:
Понял. Исправим. MyRtZ:
Ровно столько, столько надо. Или Вы знаете другой способ проверить всех юнитов, не приписывая всем подряд условие? Hares добавил: Ничего. На ошибках учатся. |
02.01.2012, 02:55 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MyRtZ
offline
Опыт:
6,530Активность: |
Hares:
Имеются ввиду эти операции:
Это выполняется в твоем коде каждые 0.01 сек.
Представь что в карте 175 едениц пускай даже с PERIODIC равном 0.05, что будет? Hares:
MyRtZ:
|
02.01.2012, 03:08 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Elf_Stratigo
offline
Опыт:
4,599Активность: |
омг, вырывать бы руки за такой код посмотрите другие аналогичные системы, там затрачивается в разы меньше ресурсов, при этом достигается нужный результат |
02.01.2012, 12:53 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MyRtZ
offline
Опыт:
6,530Активность: |
мне больше эта строчка понравилась:
Каждый раз когда когда запускаем мы инитиализируем хэш-таблицу снова.
» Внимание, правильный ответ для автора(другие поймут)
|
02.01.2012, 14:42 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hares
полупротосс
offline
Опыт:
6,966Активность: |
MyRtZ:
Я проверял. При битве 48 на 48 даже не лагало. При условии, что у меня была запущена Мозила, жрущая 300 мб памяти и учитывая то, что у меня очень-приочень глючной комп. (он глючил даже тогда, пока я набирал это) MyRtZ:
Это событие дольше срабатывает. Ибо Вару приходится каждое мгновение проверять, не зашёл ли наш юнит в регион "Вся карта", при этом всё равно берутся все юниты в массив и проверяются их координаты. Работать будет одинаково по времени. MyRtZ:
Когда 10 000 раз исправляешь один и тот же код (до его публикации), легко что-то потерять. Ибо присвоение когда-то было. |
02.01.2012, 19:45 | #10
+0/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
Hares, напомню, что в нормальных картах обычно присутствуют НЕСКОЛЬКО систем. А вот как вар проверяет, это уже не ваше дело, native код в любом случае быстрее. |
02.01.2012, 19:51 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MyRtZ
offline
Опыт:
6,530Активность: |
Процессор, а не оперативка Почему другие не теряют Ну это оптимальнее ещемоментного пика юнитов, т.к там на движке все идет |
02.01.2012, 19:53 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hares
полупротосс
offline
Опыт:
6,966Активность: |
Ну ладно. Принимайте новую версию. |
03.01.2012, 00:48 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MyRtZ
offline
Опыт:
6,530Активность: |
Hares:
Глуповато ставить exitwhen в этой ситуации до i++ т.к это лишняя проверка, но такую мелочь можно не брать во внимание, но напоследок знай.
Переменные t и r чистить надо в условии, т.к только там они принимают значение, но тоже мелочь.
В целом это больше подходит не для барахолки, а для библиотеки функций. Не думаю что она будет востребована, но за работу спасибо |
03.01.2012, 01:29 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hares
полупротосс
offline
Опыт:
6,966Активность: |
MyRtZ:
Это Вам спасибо. Столько со мной мучились. В ближайшем времени будет сделана система энергетических щитов, как в старкрафте. |
04.01.2012, 00:42 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
Перед удалением группы - чистить, небольшой прирост производительности, а если серьезно, то зачем 100500 групп? - создать 1 группу и работать только с ней, + запилить триггер реагирующий на появление новых юнитов и добавляющий их в уже имеющуюся группу. |
04.01.2012, 02:37 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MyRtZ
offline
Опыт:
6,530Активность: |
Faion:
Может кроме моих сообщений в этой теме ты и первое посмотришь или это не твой стиль?
на практике убедился? |
04.01.2012, 02:38 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
|
04.01.2012, 02:49 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MyRtZ
offline
Опыт:
6,530Активность: |
невижу в первом посте стопицот групп, стопицот групп только в третьем, моем, посте. |
04.01.2012, 03:11 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
в глобалках group array RegistredUnits - не? |
04.01.2012, 15:30 | #20
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|