XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Перад
Harald Hadrade
offline
Опыт: 120
Активность:
Event - Unit takes damage.
Есть такое Событие - Юнит получает урон.
Я заметил, что его можно использовать лишь тогда, когда юнит уже стоит на карте.
А можно как-нибудь сделать, чтобы это событие можно было использовать с переменными объектами?
Очень нужно для триггерных заклинаний, чтобы сделать к примеру - когда юнит получает урон - произошло то-то и то-то.
Старый 20.07.2006, 03:09
Korneliy
DMF
offline
Опыт: 23,443
Активность:
Можно условие - triggering unit = uHero, где uHero = твой герой.
Старый 20.07.2006, 03:41
Nethrez1m
Dat av doe
offline
Опыт: 2,123
Активность:
из всех переменных походу только типа generated globals. А почему дальше не продолжить с этим юнитом? Если неудобно, то делать лучше так, как обьяснил Korneliy
Старый 20.07.2006, 04:13
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Сообщение от Перад
А можно как-нибудь сделать, чтобы это событие можно было использовать с переменными объектами?

нет
Старый 20.07.2006, 04:19
Korneliy
DMF
offline
Опыт: 23,443
Активность:
2 Jon Но ведь можно условием! Или я где-то неправ?
З.Ы. Сорри за оффтоп, хотел давно спросить: ты тот самый джон, чью карту "Царь горы" я давно-давно тестил?
Старый 20.07.2006, 04:30
DioD

offline
Опыт: 45,134
Активность:
Делайте глобальный триггер и добовляйте в него события\действия.
Старый 20.07.2006, 04:44
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Сообщение от Korneliy
2 Jon Но ведь можно условием! Или я где-то неправ?

ты прав насчет того что ты не прав:)
Цитата:
Сообщение от Korneliy
З.Ы. Сорри за оффтоп, хотел давно спросить: ты тот самый джон, чью карту "Царь горы" я давно-давно тестил?

Эх.. эта карта мой позор... зделана в РОК-е, и при том я тогда даже незнал че такое переменые

Jon добавил:
Цитата:
Сообщение от DioD
Делайте глобальный триггер и добовляйте в него события\действия.

всеже добавить событитиями всех юнитов на карте както кривовато звучит.. несчитаеш?
Старый 20.07.2006, 04:45
Korneliy
DMF
offline
Опыт: 23,443
Активность:
2 Jon Нельзя стыдиться первых проектов - ибо все были нубами и совершали ошибки.
И, кстати, почему я не прав? Поясни, плиз.
Старый 20.07.2006, 05:00
J
expert
offline
Опыт: 48,447
Активность:
давай по другому... попробуй сам в точности обьяснить как ты хотел... и при попытки обьяснить ты поймеж что это не поможет...
Старый 20.07.2006, 05:04
DioD

offline
Опыт: 45,134
Активность:
Создаётся триггер который получает каждого юнита на карте, при уроне выводит текст так, при сметри очищает событие
Старый 20.07.2006, 05:17
Korneliy
DMF
offline
Опыт: 23,443
Активность:
События: Generic unit takes damage (на самый край можно "атакован", но тут правда проверяется приказ)
Условия: Triggering (или там attacked) unit = uHero
Действия: kill yourself by the wall
Старый 20.07.2006, 05:21
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Сообщение от Korneliy
События: Generic unit takes damage

takes damage - можно уловить полученый урон, но можно сделать только для определеного юнита
Цитата:
Сообщение от Korneliy
на самый край можно "атакован",

Это можно сделать для любого юнито.. но при этом нельзя уловит полученый урон
и призводить с ним действия

Jon добавил:
Цитата:
Сообщение от DioD
Создаётся триггер который получает каждого юнита на карте, при уроне выводит текст так, при сметри очищает событие

А как можно очистить событие?
Старый 20.07.2006, 05:31
DioD

offline
Опыт: 45,134
Активность:
function AnyUnitTakesDamage takes nothing returns nothing
your actions here
Sample Damage display:
call BJDebugMsg( "Damage: " + R2S(GetEventDamage()) )
endfunction
part 1
function AddDamageTriggers takes nothing returns nothing
local trigger takedamage = CreateTrigger()
call TriggerRegisterUnitEvent(takedamage,GetTriggerUnit(),EVENT_UNIT_DAMAGED)
call AttachObject(takedamage,"action",TriggerAddAction(takedamage,function AnyUnitTakesDamage))
call AttachObject(GetTriggerUnit(),"TakeDamageTrigger",takedamage)
endfunction
part 2
function RemoveDamageTriggers takes nothing returns nothing
local unit u = GetTriggerUnit()
local trigger me = GetAttachedTrigger(GetTriggerUnit(),"TakeDamageTrigger")
local string t = GetAttachmentTable(me)
local boolean revived = false
if not IsUnitType(u,UNIT_TYPE_HERO) then
loop
set revived = (GetWidgetLife(u)>0.405)
exitwhen revived or GetUnitTypeId(u)==0
call TriggerSleepAction(0)
endloop
endif
if not revived then
delete action and trigger
call TriggerRemoveAction(me,GetTableTriggerAction(t,"action"))
call DestroyTable(t)
call DestroyTrigger(me)
endif
set me = null
set u = null
endfunction
part 3
function InitTrig_AddDmg takes nothing returns nothing
local trigger entermap = CreateTrigger()
local group startingunits = CreateGroup()
local unit u
local trigger takedamage
local trigger upondeath = CreateTrigger()
call GroupEnumUnitsInRect(startingunits,bj_mapInitialPlayableArea,null)
loop
set u = FirstOfGroup(startingunits)
exitwhen u == null
set takedamage = CreateTrigger()
call TriggerRegisterUnitEvent(takedamage,u,EVENT_UNIT_DAMAGED)
call AttachObject(takedamage,"action",TriggerAddAction(takedamage,function AnyUnitTakesDamage))
call AttachObject(u,"TakeDamageTrigger",takedamage)
call GroupRemoveUnit(startingunits,u)
endloop
set takedamage = null
unit enters the map/revives
call TriggerRegisterAnyUnitEventBJ(entermap ,EVENT_PLAYER_HERO_REVIVE_FINISH)
call TriggerRegisterEnterRectSimple(entermap, bj_mapInitialPlayableArea)
call TriggerAddAction(entermap,function AddDamageTriggers)
unit dies
call TriggerRegisterAnyUnitEventBJ(upondeath,EVENT_PLAYER_UNIT_DEATH)
call TriggerAddAction(upondeath,function RemoveDamageTriggers)
endfunction
Старый 20.07.2006, 05:44
Перад
Harald Hadrade
offline
Опыт: 120
Активность:
Правильно говорит Jon!!!
События: Generic unit takes damage
Такого события просто не существует!
Unit takes damage нету в списке событий Generic Unit.
Только в Specific Unit.
В том то и проблема.

DioD
Извини, но я в джассе не бум-бум.
Может сделаешь пример карты, где я могу всё это лицезреть?
Старый 20.07.2006, 14:24
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Извини, но я в джассе не бум-бум.
Может сделаешь пример карты, где я могу всё это лицезреть?

я не тук тук в жазе.. но мне почемута кажется что он не "очищает событие", а "пересоздает тригер"
Старый 20.07.2006, 14:28
Перад
Harald Hadrade
offline
Опыт: 120
Активность:
Так я не понял.
Можно как-нибудь сделать, чтобы эта команда работала с переменными?
И вообще почему она не может работать?
Неужели так трудно было сделать, чтоб могла работать?
Может тут какой-то смысл скрыт?
Старый 20.07.2006, 18:23
XFaNT
Злобный Модер
offline
Опыт: 4,328
Активность:
Перад в редакторе триггеров не учтено, что получать демаг может нетолько юнит , стоящий на карте изначально =), поэтому, ставишь на карту юнита, прописываешь весь триггер на него, потом конвертируешь в текст, находишь:
call TriggerRegisterUnitEvent( gg_trg_S, gg_unit_hfoo_0000, EVENT_UNIT_DAMAGED )
здесь gg_trg_S имя твоего тригера, оно состоит из приставки gg_trg_ и названия.
gg_unit_hfoo_0000 это, имя юнита, которого ты выбрал, странное обозначение но ничё не поделаешь.
в Джассе название переменных тоже составное, udg_ и дальше собственно имя. ( например udg_unit)
тебе надо заменить имя юнита (в примере это -- gg_unit_hfoo_0000), на нужную тебе переменную, например hero (незабудь приставку udg_ ) должно быть примерно так:
call TriggerRegisterUnitEvent( gg_trg_S, udg_hero, EVENT_UNIT_DAMAGED )
воть . другого способа нет.
Старый 20.07.2006, 19:46
Перад
Harald Hadrade
offline
Опыт: 120
Активность:
Может я расскажу мою ситуацию?
Вообщем карта у меня AoS типа, т.е. вы понимаете, что постоянно респятся юниты.
Есть герои, которыми управляют игроки, и герои изначально не расположены на карте, как впрочем и юниты.
Так вот у одного героя есть триггерное умение, что каждый раз когда он атакует какой-либо юнит, запускается одно действие.
Пока что я использую Unit is attacked и проверяю врага этого героя.
Всё работает, единственное, НО, в том что когда герой только размахивается на юнита - действие уже срабатывает, и получается, что герой ещё не нанёс удар, а действие уже совершилось.
Мне же нужно, чтобы действие совершалось в тот момент, когда герой наносит урон, т.е. его оружее соприкасается с целью и наносит урон.
Я сделал небольшую задержку, но с ростом уровня героя - растёт его ловкость и паузу нужно уменьшать.
Можно конечно продолжать играться вот так с паузами.
Но я решил спросить это здесь, возможно люди знают как сделать такое действие, что когда Generic Unit takes damage. Чтоб именно так выглядело. И из него тогда исходить делать уже проверки и условия, и действия.

XFaNT
Я конечно понимаю, что весь топик перечитывать часто бывает проблемно.
Я писал, что в джассе ничего не понимаю, поэтому ничего не понял из того, что ты сказал.
Может ты лучше пример сделаешь?
Старый 20.07.2006, 19:56
XFaNT
Злобный Модер
offline
Опыт: 4,328
Активность:
Перад Generic Unit takes damage такой функции нет и зделать её такой нельзя.
без джасса такой триггер не сделаешь, я тебе могу зделать пример но он будет джассовый.

XFaNT добавил:
мде... я неправ =), оказывается можно сослать это событие на переменную.
создаёшь триггер без события, пихаешь в него что угодно, кроме события.
В другом тригере ставишь следующее
Событие
map initialization
Условие
Действие
Триггер - Add to *имя триггера без события* the event (Боевая единица - *твоя переменная* получает урон)
Аказывается всё проще чем я думал =) и никакого джасса =)
Старый 20.07.2006, 20:42
GadenbIsh
Просто Гад
offline
Опыт: 70,430
Активность:
XFaNT
а как ты будешь получать *твоя переменная* ? =))
Старый 20.07.2006, 21:48
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 13:59.