Сейчас 00:08:55 Суббота, 20 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Pause Unit (Как правильно с ними работать?)
Pause Unit
FatalBladeДата: Суббота, 01 Октября 2011, 13:16:30 | Сообщение # 1
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Значит мне надо сделать так, что когда юнит кастует спелл, он входит в паузу, то есть не может получать никакие приказы. Через какое то время, пауза убирается, и юнит снова может получать приказы. Как это делается. Я пробовал call PauseUnit(u, true), но оно паузит юнита, а приказ каста абилки остаётся, и после паузы он сам его возобновляет. В итоге получается что юнит постоянно сам заходит и выходит из паузы. Короче управлять им уже невозможно.

 

Ty3uKДата: Суббота, 01 Октября 2011, 13:20:15 | Сообщение # 2
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
А приказывать стоп перед этим, не? :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

FatalBladeДата: Суббота, 01 Октября 2011, 13:24:49 | Сообщение # 3
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Ty3uK)
А приказывать стоп перед этим, не? :)

Ну так тогда он остановит каст спелла.


 

Mep3aB4uKДата: Суббота, 01 Октября 2011, 14:50:25 | Сообщение # 4
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
FatalBlade, У меня что то похожее было, я сделал кд абилки больше длительности паузы.
 

SirNikolasДата: Суббота, 01 Октября 2011, 15:06:10 | Сообщение # 5
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Code
function Trig_PauseSpell_Timer takes nothing returns nothing
     local timer t = GetExpiredTimer()
     local integer id = GetHandleId(t)
     local unit u = LoadUnitHandle(udg_Hash, id, 0)
     //...
     call DestroyTimer(t)
     call FlushChildHashtable(udg_Hash, id)
     set t = null
endfunction

function Trig_PauseSpell_Actions takes nothing returns nothing
     local timer t = CreateTimer()
     call SaveAgentHandle(udg_Hash, GetHandleId(t), 0, GetTriggerUnit())
     call TimerStart(t, .0, false, function Trig_PauseSpell_Timer)
     set t = null
endfunction

Добавлено (01 Октябрь 2011, 15:06:10)
---------------------------------------------

Quote (SirNikolas)
call TimerStart(t, .0, false, function Trig_PauseSpell_Timer)
Суть в этой строчке.


 

FatalBladeДата: Суббота, 01 Октября 2011, 15:17:24 | Сообщение # 6
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Mep3aB4uK)
FatalBlade, У меня что то похожее было, я сделал кд абилки больше длительности паузы.

Ну само собой у меня кд больше длительности паузы. Может ты имеешь ввиду Casting Time? но тогда юниты будут долго кастовать абилки.

Quote (SirNikolas)
Суть в этой строчке.

В чём суть таймер с нулевой длительностью?)))
И я так и не понял... Паузить в второй функции или в первой?


 

SirNikolasДата: Суббота, 01 Октября 2011, 15:21:30 | Сообщение # 7
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (FatalBlade)
В чём суть таймер с нулевой длительностью?)))
В том, что за время в 0 секунд юнит успеет докастовать способность. Паузить в фукции таймера.


 

FatalBladeДата: Суббота, 01 Октября 2011, 15:25:42 | Сообщение # 8
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (SirNikolas)
В том, что за время в 0 секунд юнит успеет докастовать способность. Паузить в фукции таймера.

А если способность - не канал? Или вообще какой нибудь ThunderClap, который даже с нулевой Casting Time кастуется около 1/3 секунды?
И тут должен быть 0, или можно там 0.01 или 0.02 ?




Сообщение отредактировал FatalBlade - Суббота, 01 Октября 2011, 15:29:30
 

SirNikolasДата: Суббота, 01 Октября 2011, 15:28:45 | Сообщение # 9
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Если у тебя EVENT_PLAYER_UNIT_SPELL_EFFECT, то все сработает.
P. S. "Канал" тоже не мгновенный.


 

FatalBladeДата: Суббота, 01 Октября 2011, 15:30:45 | Сообщение # 10
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (SirNikolas)
P. S. "Канал" тоже не мгновенный.

Канал можно настроить мгновенным.


 

SirNikolasДата: Суббота, 01 Октября 2011, 15:32:29 | Сообщение # 11
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
"Канал" отнимает время на произнесение заклинания, как и "Thunder clap".

Добавлено (01 Октябрь 2011, 15:32:29)
---------------------------------------------

Quote (FatalBlade)
И тут должен быть 0, или можно там 0.01 или 0.02 ?
Можно и больше нуля, но зачем?


 

Ty3uKДата: Суббота, 01 Октября 2011, 15:45:12 | Сообщение # 12
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Канал настроить-же можно. Ставишь ноль или одну сотую секунды- и все в шоколаде :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

FatalBladeДата: Суббота, 01 Октября 2011, 15:45:43 | Сообщение # 13
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (SirNikolas)
Можно и больше нуля, но зачем?

Я не уверен что после 0 любые абилки успеют сработать. Ведь есть много таких которым нужно несколько долей секунды на каст.

А вообще проблема что у меня с паузами, это не изза абилок, а изза приказов. Юнит кастует спелл, срабатывает триггер, включается пауза. Пауза как бы сохраняет приказ юнита, и когда пауза проходит, возобновляет приказ. А раз она возобновила приказ, и юнит снова кастует спелл, и снова срабатывает триггер на этот спелл, и снова включается пауза, и снова сохраняется приказ, и потом снова возобновляется. Вот так у меня в итоге и получилось, что юнит тупо застрял на месте. Бесконечный цикл.

Пауза впринципе отсрочивает приказы. То есть она сама по себе как таймер + хэш :)


 

SirNikolasДата: Суббота, 01 Октября 2011, 15:49:42 | Сообщение # 14
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
FatalBlade, ты думаешь, я не использовал нулевой таймер для подобных целей?
Ty3uK, ты никогда не сделаешь применение "Канала" таким же быстрым, как применение "Стремительности" ("Wind walk").


 

Ty3uKДата: Суббота, 01 Октября 2011, 15:51:39 | Сообщение # 15
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Ок, шеф, не буду спорить :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

FatalBladeДата: Суббота, 01 Октября 2011, 15:55:22 | Сообщение # 16
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (SirNikolas)
Ty3uK, ты никогда не сделаешь применение "Канала" таким же быстрым, как применение "Стремительности" ("Wind walk").

Вот пример:
Code
function Trig_Strength_Conditions takes nothing returns boolean
       return ( GetSpellAbilityId() == 'A0K9' )
endfunction

function Trig_Strength_Actions takes nothing returns nothing
       call IssueImmediateOrder( GetTriggerUnit(), "stop" )
       call IssueImmediateOrder( GetTriggerUnit(), "stop" )
       if ( GetPlayerState(GetOwningPlayer(GetTriggerUnit()), PLAYER_STATE_RESOURCE_LUMBER) >= 1) then
           call AdjustPlayerStateSimpleBJ(GetOwningPlayer(GetTriggerUnit()), PLAYER_STATE_RESOURCE_LUMBER, -1)
           call ModifyHeroStat( bj_HEROSTAT_STR, GetTriggerUnit(), bj_MODIFYMETHOD_ADD, 1 )
           call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\Items\\AIam\\AIamTarget.mdl", GetTriggerUnit(), "origin") )
       endif
endfunction

//===========================================================================
function InitTrig_Strength takes nothing returns nothing
       set gg_trg_Strength = CreateTrigger(  )
       call TriggerRegisterAnyUnitEventBJ( gg_trg_Strength, EVENT_PLAYER_UNIT_SPELL_CAST )
       call TriggerAddCondition( gg_trg_Strength, Condition( function Trig_Strength_Conditions ) )
       call TriggerAddAction( gg_trg_Strength, function Trig_Strength_Actions )
endfunction


Это канал. Он настолько стремителен, что я могу кастануть его хоть 10 раз в секунду. Он реагирует на каждый клик. Правда тут хитрость с "стопом" )

Добавлено (01 Октябрь 2011, 15:55:22)
---------------------------------------------

Quote (SirNikolas)
FatalBlade, ты думаешь, я не использовал нулевой таймер для подобных целей?

И какие абилки ты использовал?




Сообщение отредактировал FatalBlade - Суббота, 01 Октября 2011, 15:54:36
 

Ty3uKДата: Суббота, 01 Октября 2011, 15:58:00 | Сообщение # 17
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
А... Убери эту гадость и юзай return GetSpellAbilityId() == ''

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Суббота, 01 Октября 2011, 15:58:08 | Сообщение # 18
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (FatalBlade)
EVENT_PLAYER_UNIT_SPELL_CAST
Мана не снимается, перезарядка не идет. Надо EVENT_PLAYER_UNIT_SPELL_EFFECT.
Quote (FatalBlade)
И какие абилки ты использовал?
"Канал". Заклинание перемещает юнита в целевую точку и делает еще много разной дребедени. Если юнита переместить сразу же, у способности не пойдет перезарядка, поэтому нужен нулевой таймер.


 

FatalBladeДата: Суббота, 01 Октября 2011, 16:02:41 | Сообщение # 19
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (SirNikolas)
Мана не снимается, перезарядка не идет. Надо EVENT_PLAYER_UNIT_SPELL_EFFECT.

Тут и не надо)
Это система Статов в Диабло. При получения уровня герой получает 5 статов. Сама кнопка улучшения определённого стата - абилка канал.

А так да, я знаю об этом. У меня есть скилл Charge как у Пала в Д2, и есть скилл похожий на Omnislash из Доты, и много других, и все каналы, и я на них настроил таймер 0.05.

Добавлено (01 Октябрь 2011, 16:02:41)
---------------------------------------------

Quote (Ty3uK)
А... Убери эту гадость и юзай return GetSpellAbilityId() == ''

дак у меня так и написано)))


 

Ty3uKДата: Суббота, 01 Октября 2011, 16:05:14 | Сообщение # 20
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Сорри, меня спутал телефон :) претензий нет ^_^

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

FatalBladeДата: Суббота, 01 Октября 2011, 17:40:39 | Сообщение # 21
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Почему когда я даю юниту паузу, то все эффекты которые прикрепленны к нему удаляются?

 

[san9]Дата: Суббота, 01 Октября 2011, 17:42:34 | Сообщение # 22
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
FatalBlade,
Используй событие привёл способность в действие.


 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Pause Unit (Как правильно с ними работать?)
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz