happy_horror
2 + 2 = 22 :-D
offline
Опыт:
7,818Активность: |
Generic Unit Event совместим с EVENT_UNIT_DAMAGED?
Есть два события с юнитом:
1. Specific unit Event 2. Generic Unit Event в первом есть такое событие как EVENT_UNIT_DAMAGED а во втором нет, возможно ли совместить эти 2 события "юнит получает урон" для любого юнита ? Вот например триггер: Код:
вроде ошибок не выдаётся, но тем не менее триггер не работает из-за GetAttackedUnitBJ() - это я сам вставил... Отредактировано happy_horror, 22.03.2008 в 20:06. |
22.03.2008, 19:57 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FellGuard
Losyash
offline
Опыт:
39,547Активность: |
Код:
|
22.03.2008, 21:00 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J
expert
offline
Опыт:
48,447Активность: |
По Сабжу: Ответ - "Нет" |
22.03.2008, 21:03 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
happy_horror
2 + 2 = 22 :-D
offline
Опыт:
7,818Активность: |
Порой, при всех возможностях WE и Jass нельзя сделать элементарных вещей...как жаль
Кстати можно ли сделать такой триггер:
Событие - юнит атакован
Условие - здоровье атакованного юнита изменилось Если можно, то желательно названия функций и условий...сам я такого что-то не нашёл |
22.03.2008, 21:12 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FellGuard
Losyash
offline
Опыт:
39,547Активность: |
только значение конкретной пременной. Т.е. можешь всех пикать и запихивать в массив значение здоровья)
FellGuard добавил: причем пикать постоянно... Это действительно ресурсоёмкое событие, вот почему и пишутся всякие системы по отлову демеджа. Обычно это реакция на "юнит атакован" - создается динамический тригер с отловом урона на атакованного, по истечении таймаута он удаляется. |
22.03.2008, 21:16 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J
expert
offline
Опыт:
48,447Активность: |
плохо искал
http://xgm.guru/forum/showthread.php?t=6246 |
22.03.2008, 21:17 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
happy_horror
2 + 2 = 22 :-D
offline
Опыт:
7,818Активность: |
Хехе, прими мою благодарность Jon - твой триггер работает на ура :D
Я от радости ( что у меня вообще что-то вышло) готов даже кричать, но не стану...всё вышло как я и хотел, системы аботает так: Изначально в игровых константах я поставил так, что любой тип атаки наносит любому типу брони 100% урона и начисление % сдерживания урона за единицу брони 0.00
При старте карты в кэш в ячейки string mission key "DB Armor" key "уникальный идентификатор-тип юнита" заносится значение базовой брони всех юнитов, когда юнита атакую, внутри триггера динамически создаётся ещё один триггер (та самая система Jon'a) с событием юниту ноносится урон (если юнит жив, то сработает действие)
Действие: из кэша для данного типа юнита достаётся число - равное базовой броне и здоровье атакованного юнита устанавливается в значение (текушее здоровье + I2R(броня из БД))
Но есть во всём этом одна некрасивая мелочь, видно как жизнь юнита колеблется ( при уроне отнимается, а потом восполняется на кол-во брони), можно сделать восттановление хп незаметно?
Ну и теперь самый главный вопрос, как проверять у юнита наличие предметов (дающих бонус брони), бафов (дающих бонус брони) Отредактировано happy_horror, 23.03.2008 в 01:43. |
23.03.2008, 00:49 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
sleepw
offline
Опыт:
8,449Активность: |
happy_horror
в статьях есть спелл мана щилд.. там глянь про "незаметное восстановление" |
23.03.2008, 02:02 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
happy_horror
2 + 2 = 22 :-D
offline
Опыт:
7,818Активность: |
Смотрел. только в статьях не пишется как это исправить, а ссылка на карту пример - битая
Вот кстати нырал в этой системы 1 баг, сразу же:
Если заставить одновременно нескольких юнитов бить другова, то здоровье может восстанавливаться куда больше, чем: урон (сумма уронов N юнитов) - базовая броня бнита * N атаковавших
Как решить, пока не знаю :(: |
23.03.2008, 02:24 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ZLOBICH
Kicked by XimikS
offline
Опыт:
4,727Активность: |
не заметно не получиться, т.к. кэш достаточно медленен, НО можно при получение урона первым делать call SetUnitState(GetTriggerUnit(),UNIT_STATE_LIFE,GetUnitState(GetTriggerUnit(),UNIT_STATE_LIFE)+GetEventDamage(забыл точное имя функции)), затем сторить полученную дамагу и уже ПОСЛЕ кэша начислять юниту урон, правда может получиться баг если урон больше чем здоровье юнита |
23.03.2008, 02:25 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
happy_horror
2 + 2 = 22 :-D
offline
Опыт:
7,818Активность: |
Такое не получится, потому-что изначально тригер системы реагирует на: Любой юнит атакован - а в нём нет урона, урон можно получить только в динамически созданном тригере из этого...а это время
И всё-таки самым главным остаётся баг...ну на всякий выкладываю карту, суть бага в том, что если юнит одновременно атакован несколькими юнитами, то его здоровье может восстановиться куда больше чем должно (восстановление здоровья на колючество брони в идеале) |
23.03.2008, 02:44 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ZLOBICH
Kicked by XimikS
offline
Опыт:
4,727Активность: |
омг -_- чтож..
1) оптимизация и ещё раз оптимизация.. 2) Код:
ты НИГДЕ не присваеваешь TrC и TrA значения, т.е. ты удаляешь "ничто" 3) умнег, мой способ фикса некрасивого присваения жизни идеально впишется в твою систему.. 4) Код:
5) Код:
6) Код:
7) Код:
собственно изза 7 эта фигня и происходит бтв некрасивого добавления жизни не заметил(хз может быть потому что я автоматов снёс все бж и заменил на нативки) |
23.03.2008, 04:15 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
sleepw
offline
Опыт:
8,449Активность: |
мдо афтор жжот |
23.03.2008, 06:24 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J
expert
offline
Опыт:
48,447Активность: |
вотЪ |
23.03.2008, 07:44 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
happy_horror
2 + 2 = 22 :-D
offline
Опыт:
7,818Активность: |
Респект Jon'y
На счёт PolledWait - на одном форуме кто-то написал (на XGM) что это аналог TriggerSleepAction, только он не остановиться в случае паузы игры, а TriggerSleepAction да, вот я его и юзал...
А на счёт "добило" - я ещё нубчеГ в джазе, поэтому делаю пока, лиш, как умею
Тогда всё-таки последняя проблема по этой системе - у юнита ведь могут быть: предметы, ауры, бафы - дающие бонус брони (с ловкостью я сам справлюсь) как отлавливать это? я вроде нашёл проверку на наличие конкретных итемов, а надо вообще наличие любых
Предполагаю сделать проверку до восстановления здоровья юниту - на наличие всех выше указаных объектов, если таковые будут - по сосчитать их бонусы ( возможно так же использовать кэш для хранения данных по таковым объектам) и прибавить общий бонус всех объектов к формуле восстановления здоровья от брони...
Кстати - нашёл условие, у героя есть предмет - за место предмета можно указать PickedItem, это будет какой предмет? я так полагаю выбранный для проверки? Хотя если конвертировать в текст, то в триггере ни строчки о том что это вообще герой Отредактировано happy_horror, 23.03.2008 в 12:58. |
23.03.2008, 12:11 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nethrez1m
Dat av doe
offline
Опыт:
2,123Активность: |
Цитата:
Про ауры, абилы и прочая - придется базы данных создавать, которые будут точно описывать, какой бонус к броне идет. Отредактировано Nethrez1m, 23.03.2008 в 13:28. |
|
23.03.2008, 13:21 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
happy_horror
2 + 2 = 22 :-D
offline
Опыт:
7,818Активность: |
Хм...а с предметами пример сделать првоерки наличия любого итема можеш? при условии что не будет таких юнитов которые бы просто носили предметы и не могли ими пользоваться
Базу данных сделать не сложно, через тот же кэш как и с бронёй могу намутить, а вот только как заставить функию собирать бонусы брони из БД?? В принципе ADOLF предложил это: Код:
но я что-то эту систему не догоняю...например как можно 0x42303030 сложить с реальной с - ведь тут 2 типа (integer и real)... или например как в реальную с зенесло значение 0х00 (integer) ...жаль ADOLF не онлайн, я б спросил... |
23.03.2008, 13:39 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Uk_gruby
offline
Опыт:
6,948Активность: |
happy_horrorСистема кривая так как если дмг будет больше зашиты то юниту будет дабавляться лишнии жизки тебе нада сделать когда юнит получил урон вернуть ему жизни и уронить его полученый урон - зашита
Uk_gruby добавил: и праверять если дмг меньше или равен зашите то не уронить |
23.03.2008, 13:43 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
happy_horror
2 + 2 = 22 :-D
offline
Опыт:
7,818Активность: |
Ты прав, только написал не правильно - если урон меньше брони бнита, то при атаке этого юнита он лечится ^_^ но я исправил, добавил проверку, всё равботает
happy_horror добавил: Допустим есть функции: Код:
куда вернётся значение r из функции blabla? или как его поместить в переменную? |
23.03.2008, 14:47 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Лось
offline
Опыт:
7,223Активность: |
Код:
|
23.03.2008, 14:55 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|