MrSigma
愛 - XGM
offline
Опыт:
2,429Активность: |
И снова Damage Detection!
Достаточно давно не занимался моддингом, посему совершенно все забыл. Не так давно решил позаниматься написанием чего нибудь, и пришла мысль в голову... Да вот только с мыслью ничего по части теории не вспомнилось. Собственно вопрос мой таков:
Мне нужен триггер, отлавливающий каким либо образом получаемый урон. Обязательно ли для этого создавать для каждого юнита свой триггер? Мой код таков: Код:
С помощью функции AddTraceableUnit я добавляю в события триггера "Юнит получает урон" для нужных мне юнитов. А триггер, срабатывая, выполняет какие либо действия. И атакованного юнита я получаю через GetTriggerUnit(). Только вот эта схема почему-то не работает. Будет ли он работать вообще, или может в мой код закралась ошибка? |
27.12.2011, 03:18 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
bee
vjass.optimizer
offline
Опыт:
16,615Активность: |
да, либо создай один триггер. и добавляй условия для каждого юнита свой triggercondition
по идее, в твоем коде нет ошибок, либо я слеп. единственное - он будет выполнять действия для всех добавленных туда воинов. |
27.12.2011, 06:54 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
hexing
offline
Опыт:
110Активность: |
твой код +
[code]
function MakeAllUnitsTraseable takes nothing returns nothing local group g = CreateGroup() local unit u call GroupEnumUnitsInRect(g, bj_mapInitialPlayableArea, null) можно добавить условие и выбрать только некоторых юнитов loop set u = FirstOfGroup(g) exitwhen(u == null) call AddTraceableUnit(u) call GroupRemoveUnit(g, u) endloop call DestroyGroup(g) set g = null set u = null endfunction[/code] |
27.12.2011, 08:04 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MrSigma
愛 - XGM
offline
Опыт:
2,429Активность: |
hexing, насчет добавления в список тех юнитов, урон от которых нужно отслеживать, я разберусь. Это не совсем то, что мне нужно...
bee, В последствии я буду проверять в условиях, является ли цель атаки героем игрока, или же эта цель атакуется игроком. Но это уже блок условий. В любом случае с GetTriggerUnit я получу именно того юнита, который был атакован, даже если в событиях будут все юниты карты. Любой из них может вызывать срабатываение триггера, но не любой будет допущен в блок действий по условию. Собственно этого я и добиаюсь. Меня интересует почему же он не работает) Я подозреваю, что я неправильно добавляю для триггера события, потому как даже после того, как добавленный юнит атакован, действия не срабатывают. |
27.12.2011, 12:37 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Clamp
Lost in space
offline
Опыт:
71,258Активность: |
|
27.12.2011, 12:56 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MrSigma
愛 - XGM
offline
Опыт:
2,429Активность: |
Clamp, это конечно очень и очень интересно. Но не будут ли проблемы, если после смерти юнита он удалится из памяти, а хэндл на него останется в событии триггера? Все таки ты события ни коим образом не удаляешь. А учитывая, что юнитов со временем может быть много...
MrSigma добавил: Да и к тому же, я получаю удовольствие работая над собственным кодом) Для меня процесс его написания есть наслаждение, и я не собираюсь брать на вооружение чужие системы) |
27.12.2011, 13:08 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Clamp
Lost in space
offline
Опыт:
71,258Активность: |
Clamp сказал:
ух ты, а ты удаляешь? научишь? Clamp добавил:
в смысле событие нельзя удалить, оно привязано к объекту события и удаляется из памяти вместе с ним Clamp добавил:
я и так не уверен, есть ли смысл ограничивать количество событий на одного юнита Clamp добавил:
а не, туплю, чтобы не было многократного вызова надо Clamp добавил: и да, короче и функциональнее ты не напишешь |
27.12.2011, 13:13 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MrSigma
愛 - XGM
offline
Опыт:
2,429Активность: |
В любом случае... Мой код делает то же самое, что и твой, только не добавляет в событие всех юнитов на карте. Просто AddTraceableUnit делает это более избирательно) Ладно. Я просто перепишу весь код еще раз. Но на сей раз на cJass. Бывало, это помогало)
|
27.12.2011, 13:15 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
События занимают не так много памяти, как вы думаете. Закрывать? |
27.12.2011, 13:17 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Clamp
Lost in space
offline
Опыт:
71,258Активность: |
MrSigma:
у меня была цель сделать систему глобального отлова урона, чего я и добился. а для отдельных юнитов в крайнем случае локальный триггер Clamp добавил: хотя док любит называть этот метод раковым =D |
27.12.2011, 13:20 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MrSigma
愛 - XGM
offline
Опыт:
2,429Активность: |
Clamp, Ладно. Попробую заюзать твою системку. Кстати, она не вызовет многократного срабатывания триггера, потому что один и тот же юнит может войти на карту лишь единожды. Как исключение - герои. Я подозреваю, что они после воскрешения будут вызывать срабатывание... ТАк что тебе еще стоит пофиксить эту проблемку)
|
27.12.2011, 13:22 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Clamp
Lost in space
offline
Опыт:
71,258Активность: |
для решения проблемы многократной регистрации событий в подобных системах на основе события атаки я и написал совершенно по-другому, на основе входа на территорию Герой не разлагается => не покидает территорию карты пора бы знать |
27.12.2011, 13:24 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MyRtZ
offline
Опыт:
6,530Активность: |
Вот как код такой системы должен выглядить в cJass + vJass
Также убрал утечки, исправил Вашу кривоту в познаниях английского
То, что функция DamageTrace является кондишном дает нам возможность или увеличить здоровье, или дать неуязвимость и многое другое еще до нанисение урона. Отредактировано MyRtZ, 27.12.2011 в 14:30. |
27.12.2011, 14:22 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MrSigma
愛 - XGM
offline
Опыт:
2,429Активность: |
MyRtZ, премного благодарен, товарищ... Однако Вы уж слишком саркастичны и самонадеянны) Однако не Вам указывать на мою "кривоту в познаниях английского". Более того, пока Вы раздувались от осознания собственной важности, Вы обнулили строку... Хотя она в том не нуждается)
Так-же я не уверен, нужно ли обнулять переменную u, которая содержит передаваемое функции значение, но на всякий случай обнулил бы... Просто для профилактики. MrSigma добавил: И к тому-же... Ничто не мешает некоторым людям начать цитировать ваши нелепые орфографические ошибки, которые к тому же выделены... (Кстати. Если уж на то пошло, ошибки в моем написании нет. Я использовал время Past Ind, которое именно так и образуется...) Что касается героев, да, Clamp, вы правы. Я провел эксперимент только что) MrSigma добавил: Любите вы оффтоп, сударь... Если я вас чем-то обидел, то уж простите. Я понял в чем дело. Я сделал функцию, создающую триггер, но не вызывал ее при инициализации карты. Код:
Это + вызов dtsInit() где нибудь при инициализации помогает. Спасибо всем за оказанную помощь) |
27.12.2011, 15:48 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
Десять лет обнуляю int, никакой зависимости. Закрыто. |
27.12.2011, 15:49 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|