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

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

Закрытая тема
 
Zkay

offline
Опыт: 5,576
Активность:
Немогу исправить утечку в триггере (Юнит получает урон).
Здравствуйте.
В событие "юнит получает урон" и в действие "установить здоровье юнита в значении" не срабатывает нормально. Я знаю, что событие работает быстрей и есть решение, но это меня не устраивает. (проблемный метод) (Событие юнит здоровье становится меньше №)
Есть ли ёщё способы отловить момент отнимания здоровья?
Поиск я перерыл и даже смотрел на джасее, но пользы мне это не принесло.
Если есть способ на нём, то подскажите, как использовать его, в личном сценарии. Чтобы, хотя бы, не парится с триггерным кодом.
Пожалуйста, помогите.
Старый 11.02.2013, 23:31
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Zkay, Нормальных способов нет.
Старый 11.02.2013, 23:36
DimanTOoBS

offline
Опыт: 5,791
Активность:
Zkay, при событии "получает урон" запускаешь таймер с временем 0,00 и там действия на лечение, если найду где я это использовал скину пример
Старый 11.02.2013, 23:55
DimanTOoBS

offline
Опыт: 5,791
Активность:
Zkay, вот сделал примерчик с комментами
Прикрепленные файлы
Тип файла: w3x Barrier.w3x (11.0 Кбайт, 17 просмотров )
Старый 12.02.2013, 00:45
sasuke325

offline
Опыт: 657
Активность:
DimanTOoBS, Работа "мастера"
Старый 12.02.2013, 01:09
Zkay

offline
Опыт: 5,576
Активность:
Vadik29:
, Используй вариант, который предлагает DimanTOoBS, он самый надежный.
DimanTOoBS,
А почему - это так работает? О_О Я такое впервые вижу и самое главное, работает.
Хотя можешь не отвечать. Это ведь Blizzardы делали редактор. Сними, не соскучишься. =\
Да, чуть не забыл: Благодарю DimanTOoBS, выручил. =)
Старый 12.02.2013, 15:35
ScorpioT1000
Работаем
online
Опыт: отключен
Вот здесь тоже рассказывается, как создать новый поток xgm.ru/p/wc3/code-flow-and-data-access-op-limit#h0.1.1
Старый 12.02.2013, 15:40
Zkay

offline
Опыт: 5,576
Активность:
Спасибо ScorpioT1000,
Это: у меня есть небольшой вопрос (извиняюсь, что не в новой теме).
Есть возможность вылечить юнита, когда урон больше здоровья и так, чтобы он не умер?
(Про неуязвимость, я знаю (У неё есть небольшие одёргивания и в некоторых случаях юнит погибает)) (Ещё есть варианты.)
Старый 13.02.2013, 20:29
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Zkay,
У неё есть небольшие одёргивания и в некоторых случаях юнит погибает
Никогда не сталкивался....
Старый 13.02.2013, 20:36
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
нету там небольших одергиваний и не умирает юнит в каких то специфических случаях
Старый 13.02.2013, 20:36
Zkay

offline
Опыт: 5,576
Активность:
У меня было такое.
Я давал неуязвимость юниту перед тем как урон должен был убить.
Юнит умирал в 25% случаях.
При первом разе триггер работал нормально, а вот при втором разе юнит умирал.
(Всё происходило при обычной атаке)
При выделения юнита в 3-д портрете видел одёргивание.
(Извиняюсь, что сразу не написал. =\ )
Старый 13.02.2013, 21:12
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Zkay, значит все криво делал.
Старый 13.02.2013, 21:22
Zkay

offline
Опыт: 5,576
Активность:
Vadik29, Показать код или скрин триггера на гуи?
Старый 13.02.2013, 21:39
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Zkay, Это нужно делать на хеше через локальный таймер, на хендл которого, ты сохраняешь юнита и делаешь его неуязвимым, а через 0 сек., делаешь уязвимым.
На Jass это выглядит вот так:
function Block_Damage takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer id = GetHandleId(t)
    call SetUnitInvulnerable(LoadUnitHandle(h, id, 0), false)
    call PauseTimer(t)
    call DestroyTimer(t)
    call FlushChildHashtable(h, id)
    set t = null
endfunction


function TakesDamge takes nothing returns nothing
    local timer t = CreateTimer()
    local int id = GetHandleId(t)
    local unit u = GetTriggerUnit()
    call SetUnitInvulnerable(u, true)
    call SaveUnitHandle(h, id, 0, u)
    call TimerStart(t, 0, false, function Block_Damage)
    set u = null
    set t = null 
endfunction
P.S своему другу гуишнику я сделал функцию, которую он через CS вызывает.

Отредактировано Vadik29, 13.02.2013 в 22:01.
Старый 13.02.2013, 21:45
ScorpioT1000
Работаем
online
Опыт: отключен
На Jass это выглядит вот так
это не Jass, а непонятная смесь cJass с Jass
Старый 13.02.2013, 21:57
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
ScorpioT1000, блин, хотел написать на обычном джассе, написал на смеси, просто уже на автомате пишу без call, local и.д. Щас исправлю.
Старый 13.02.2013, 21:59
Zkay

offline
Опыт: 5,576
Активность:
Гуи (Картинка)
Код (Картинка =( ) (Vadik29, Как ты засунул код в цитату? У меня нечего не вышло. )
Можешь меня ругать за грубую форму. Пока по-другому неумею. =(
Zkay добавил:
Исправил!
Миниатюры
Кликните на картинку для увеличения
Название:  Триггер урона.jpg
Просмотров: 17
Размер:  64.9 Кбайт  Кликните на картинку для увеличения
Название:  Триггер таймер.jpg
Просмотров: 12
Размер:  58.0 Кбайт  Кликните на картинку для увеличения
Название:  Триггер урона код.jpg
Просмотров: 10
Размер:  108.5 Кбайт  Кликните на картинку для увеличения
Название:  Триггер таймер код.jpg
Просмотров: 5
Размер:  91.2 Кбайт  

Отредактировано Zkay, 13.02.2013 в 22:17.
Старый 13.02.2013, 22:08
ZLOY5

offline
Опыт: 912
Активность:
может вопрос не в тему
но зачем паузить таймер перед дестроем?

Отредактировано ZLOY5, 13.02.2013 в 22:16.
Старый 13.02.2013, 22:08
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
ZLOY5, Религия обязывает.
Старый 13.02.2013, 22:10
Zkay

offline
Опыт: 5,576
Активность:
Исправил картинки.
Старый 13.02.2013, 22:17
Закрытая тема

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

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

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

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



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