Пасивка войда
|
|
sumert | Дата: Воскресенье, 06 Января 2013, 19:09:46 | Сообщение # 26 |
10 уровень
Группа: Проверенные
Сообщений: 2330
Награды: 2
Репутация: 1094
Блокировки:
| Цитата (Ty3uK) За 4 его спеллами кроется 4 пассивки. Хм, ну, уворот наверно написан сразу для физ и маг атак. А вот баш... Тут хитрее, ибо с какой-то версии, если я правильно помню, под куполом урон от баша в два раза больше. Да и стан у него нестандартный - паузит юнитов. Но все равно это от силы 3 пассивки. Цитата (Extremator) если выпадет 10/15/20/25 или меньше, то дать герою столько здоровья, сколько урона ему было нанесенно Если 3-я пассивка нужна, то вот правильный ответ (4 сообщение). Только есть маленький недочет. Это не будет работать, когда войд с полными хп. Нужно еще кое-что: сделать условие на то, что если текущее здоровье+полученный дамаг>макс здоровья, то запустить функцию Nt: if ( GetUnitStateSwap(UNIT_STATE_LIFE, u) >= ( GetUnitStateSwap(UNIT_STATE_MAX_LIFE, u) - damagefinal ) ) then set udg_r = GetEventDamage() call NT() Также важно, что нам нужна переменная r, которая содержит число полученного урона. Сама эта функция: function NT takes nothing returns nothing local trigger tr set tr = CreateTrigger( ) call TriggerRegisterUnitLifeEvent( tr, GetTriggerUnit(), LESS_THAN, GetUnitStateSwap(UNIT_STATE_LIFE, GetTriggerUnit())-0.01 ) call TriggerAddAction( tr, function AddLife ) set tr=null endfunction В крации: создаем триггер tr и пихаем в него событие, когда у юнита становится хп меньше текущего, и пихаем в него действия функции AddLife. Сама функция AddLife: function AddLife takes nothing returns nothing call SetUnitLifeBJ( GetTriggerUnit(), ( GetUnitStateSwap(UNIT_STATE_LIFE, GetTriggerUnit()) + udg_r ) ) call DestroyTrigger(GetTriggeringTrigger()) endfunction Тут все просто, когда у юнита хп станет меньше текущего, ему добавится число хп, равное r. Зачем это нужно? Например, если это не делать, то если у войда 900/1000 хп, а ему нанесут 300 урона, то у войда останется 700 хп, ибо 900+300=1200, а у него макс 1000, то есть получится 1000-300=700 хп, а должно быть 900. Эти две функции исправляют это дело. Эти функции я писал сам для своего проекта и это работает. И утечек нету. А если и есть, то небольшие, ибо у меня после 40 минут игры не лагало.
|
|
|
|
Ty3uK | Дата: Воскресенье, 06 Января 2013, 19:14:24 | Сообщение # 27 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Крутой код
|
|
|
|
Imba_pvL | Дата: Воскресенье, 06 Января 2013, 19:18:09 | Сообщение # 28 |
10 уровень
Группа: Проверенные
Сообщений: 3151
Награды: 1
Репутация: 1260
Блокировки:
| sumert, молодец что постарался но если никто не видел я уже кинул автор сказал норм...
|
|
|
|
SirNikolas | Дата: Воскресенье, 06 Января 2013, 19:30:21 | Сообщение # 29 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Цитата (sumert) Вкратце: создаем триггер tr и пихаем в него событие, когда у юнита становится хп меньше текущего, и пихаем в него действия функции AddLife. Лучше запустить таймер на .0
|
|
|
|
Impregnable | Дата: Воскресенье, 06 Января 2013, 19:46:26 | Сообщение # 30 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Цитата (Extremator) Что????какие 4 пассивки? Ты о чём? Которые можно видеть и менять в РО - AInv, AHbh, Aamk, AUts
Sumert, и это не идеально: если урон будет больше макс. ХП, то не сработает. Поэтому надо делать через увеличение ХП.
Если долго мучиться, то может, все равно нихуя не получится.
|
|
|
|
SirNikolas | Дата: Воскресенье, 06 Января 2013, 19:52:05 | Сообщение # 31 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Точно! Не думал, что ты это к пассивкам отнесешь.
|
|
|
|
Impregnable | Дата: Воскресенье, 06 Января 2013, 19:56:20 | Сообщение # 32 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Цитата (SirNikolas) Не думал, что ты это к пассивкам отнесешь Я вообще непредсказуемый... А куда еще ее отнести? Она просто открывает слот в рюкзаке.
Если долго мучиться, то может, все равно нихуя не получится.
|
|
|
|
sumert | Дата: Воскресенье, 06 Января 2013, 21:21:05 | Сообщение # 33 |
10 уровень
Группа: Проверенные
Сообщений: 2330
Награды: 2
Репутация: 1094
Блокировки:
| Сарказм? Без смайлика непонятно. Цитата (SirNikolas) Лучше запустить таймер на .0 Честно, не пробовал. Мне тогда казалось, что событие, когда хп меньше текущего выглядит надежнее запуска таймера с долей секунды. Цитата (Impregnable) и это не идеально: если урон будет больше макс. ХП, то не сработает. В доте это не учитывалось. Но решение звучит геморойно. Если ты это пробовал, скажи: невооруженным глазом видно, что хп меняется? Цитата (Imba_pvL) но если никто не видел я уже кинул автор сказал норм... Не видел. Ну, ок.
|
|
|
|
Impregnable | Дата: Воскресенье, 06 Января 2013, 21:59:32 | Сообщение # 34 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Цитата (sumert) Мне тогда казалось, что событие, когда хп меньше текущего выглядит надежнее запуска таймера с долей секунды. Почти одно и тоже (и никаких долей нету).
Цитата (sumert) скажи: невооруженным глазом видно, что хп меняется? Нет, не видно.
Если долго мучиться, то может, все равно нихуя не получится.
|
|
|
|
Ty3uK | Дата: Воскресенье, 06 Января 2013, 22:24:33 | Сообщение # 35 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Угу. На коленке можно и лучше.
|
|
|
|
Extremator | Дата: Воскресенье, 06 Января 2013, 22:34:01 | Сообщение # 36 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| Цитата (Facering) Пассивка на отражение любого физического удара!
Нет, не только физического, а любого...
. . .
Раньше у воида были такие скиллы 1 - тёмная стая, волна дамага кароч ) 2 - уворот, обычный такой, шанс там был вроде 7/14/21/28% 3 - баш 4 - стомп на всю карту со станом на ~5 сек :DD
|
|
|
|
sumert | Дата: Понедельник, 07 Января 2013, 09:00:48 | Сообщение # 37 |
10 уровень
Группа: Проверенные
Сообщений: 2330
Награды: 2
Репутация: 1094
Блокировки:
| Цитата (Ty3uK) Угу. На коленке можно и лучше. Критикуешь - предлагай.
|
|
|
|
SirNikolas | Дата: Понедельник, 07 Января 2013, 09:14:01 | Сообщение # 38 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Цитата (sumert) GetUnitStateSwap(UNIT_STATE_LIFE, u) GetWidgetLifeЦитата (sumert) SetUnitLifeBJ SetWidgetLife Ну и вместо триггера использовать нулевой таймер.Цитата (Impregnable) если урон будет больше макс. ХП, то не сработает. В Доте так и сделано: Войд гарантированно погибает под ультом Axe'а.
|
|
|
|
Ty3uK | Дата: Понедельник, 07 Января 2013, 10:01:27 | Сообщение # 39 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| sumert, не успел - Ник все написал.
|
|
|
|
sumert | Дата: Понедельник, 07 Января 2013, 10:17:08 | Сообщение # 40 |
10 уровень
Группа: Проверенные
Сообщений: 2330
Награды: 2
Репутация: 1094
Блокировки:
| Вот так? Код function AddLife takes nothing returns nothing local timer t = GetExpiredTimer() local integer hid = GetHandleId(t) local unit b = LoadUnitHandle(udg_Hash, hid, 0) call SetWidgetLife( b, ( GetWidgetLife(b) + udg_r ) ) call PauseTimer(t) call DestroyTimer(t) call FlushChildHashtable(udg_Hash, hid) set t = null set b = null endfunction
function NT takes nothing returns nothing local timer t = CreateTimer() local integer hid = GetHandleId(t) call SaveUnitHandle(udg_Hash, hid, 0, GetTriggerUnit()) call TimerStart(t, 0.0, false, function AddLife) set t = null endfunction
Сообщение отредактировал sumert - Понедельник, 07 Января 2013, 10:17:47 |
|
|
|
Ty3uK | Дата: Понедельник, 07 Января 2013, 10:45:44 | Сообщение # 41 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Цитата (sumert) call SaveUnitHandle(udg_Hash, hid, 0, GetTriggerUnit()) SaveAgentHandle Да, так.
|
|
|
|
Impregnable | Дата: Понедельник, 07 Января 2013, 11:02:28 | Сообщение # 42 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Цитата (SirNikolas) В Доте так и сделано: Войд гарантированно погибает под ультом Axe'а. Это противоречит описанию пасивы Войда.
Цитата (Ty3uK) SaveAgentHandle Да, так. Ох уж эти злостные оптимизаторы.
Если долго мучиться, то может, все равно нихуя не получится.
|
|
|
|
Ty3uK | Дата: Понедельник, 07 Января 2013, 11:05:53 | Сообщение # 43 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Цитата (Impregnable) Ох уж эти злостные оптимизаторы. А Вы, Андрей, будто бы не такой? : D Лучше сделать сразу хорошо, чем спустя некоторое время править свой код. Мы же не в Индии
|
|
|
|
Extremator | Дата: Понедельник, 07 Января 2013, 11:08:59 | Сообщение # 44 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| Цитата (Ty3uK) Мы же не в Индии А теперь время спеть!
|
|
|
|
Ty3uK | Дата: Понедельник, 07 Января 2013, 11:10:05 | Сообщение # 45 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| *Тут должна была быть шутка про индийских кодеров*
|
|
|
|
Srezi | Дата: Понедельник, 07 Января 2013, 14:43:00 | Сообщение # 46 |
7 уровень
Группа: Проверенные
Сообщений: 414
Награды: 0
Репутация: 116
Блокировки:
| Вы делаете наработку для типичного нуба, которому сойдёт и простая гуишная. Но нет, вы блин на Jassе сделали и ещё оптимизируете и ссоритесь из-за этого
Нет места чести на войне, Враг церемониться не будет, Убей его любым путём, Ведь победителей не судят.
|
|
|
|
Imba_pvL | Дата: Понедельник, 07 Января 2013, 14:44:47 | Сообщение # 47 |
10 уровень
Группа: Проверенные
Сообщений: 3151
Награды: 1
Репутация: 1260
Блокировки:
| Srezi, понимаешь ли так всегда Обычная легкая тема... потом кто-нить даст наработку она пойдет для автора И тут все игноря это пишут свое.. на джасс на гуи потом из-за одной ошибки спорят..)))
|
|
|
|
Extremator | Дата: Понедельник, 07 Января 2013, 14:53:20 | Сообщение # 48 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| на гуях для просточка сойдёт и ваит 0.1 сек в случаи если выхилять верх нельзя, в противном случаи хил идёт сразу (до дамага)
если дамаг будет смертельным - то какая разница хильнём мы его или нет? он так и так здохнет
другое дело если делать скилл на впитывание дамага больше самого хп...
|
|
|
|
Naturekid | Дата: Понедельник, 07 Января 2013, 14:56:59 | Сообщение # 49 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| Цитата (Extremator) впитывание дамага больше самого хп... при поучении дамага делать триггерно юнит неуязвимым на 0.00 сек. урон не нанесётся.
|
|
|
|
Extremator | Дата: Понедельник, 07 Января 2013, 14:59:25 | Сообщение # 50 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| Цитата (Naturekid) при поучении дамага делать триггерно юнит неуязвимым на 0.00 сек. урон не нанесётся. ну это впринципе да... а я делал через добавление +9999999 хп на 0.00 сек :DD + запоминанеи хп до, и выставление на ту же отметку после
Сообщение отредактировал Extremator - Понедельник, 07 Января 2013, 14:59:57 |
|
|
|