|
|
|
|
Пара вопросов о jass...
|
|
DarkVader | Дата: Пятница, 22 Октября 2010, 01:08:21 | Сообщение # 1 |
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
| Вопрос 1. Допустим в моем триггере есть такой код local effect e call AddSpecialEffectTarget( "модель", target, "chest") set e = bj_lastCreatedEffect ( пробовал и через GetLastCreatedEffectBJ( ) ) ... ... ... ... call DestroyEffect(e) set e = null Ожидаемые мной действия: создается спец эффект на юните , записывается в переменную, потом уничтожается Но получается что спец эффект не удаляется вообще... помогите плиз что делаю не так и почему эффект не записывается в переменную? Вопрос 2. Допустим есть триггерный спелл, который действует от 1-3 сек. в зависимости от ситуации что бы кастер ничего больше не делал использую пустышку на основе канала в параметрах отключаю другие спелы во время его действия и ставлю следовать в течении времени = 3сек Все бы было хорошо кроме как если спел действует 1 сек, то кастер еще 2 секунды кастует канал... В код спела добавил по окончании всех действий call IssueImmediateOrder( caster, "stop" ) Но результат нулевой, юнит как кастовал так и кастует... Почему не подходит эта функция? или я неправильно настроил сам канал? З.Ы. Даже пробовал тупо двигать юнита что бы сбить каст, все равно он кастует канал...
|
|
|
|
[san9] | Дата: Пятница, 22 Октября 2010, 01:56:07 | Сообщение # 2 |
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
| Quote (DarkVader) Вопрос 1. lCode ocal effect e = AddSpecialEffectTarget( "путь", unit, "chest") ------------------- call DestroyEffect(e) set e = null Quote (DarkVader) Вопрос 2. Допустим есть триггерный спелл, который действует от 1-3 сек. в зависимости от ситуации что бы кастер ничего больше не делал использую пустышку на основе канала в параметрах отключаю другие спелы во время его действия и ставлю следовать в течении времени = 3сек Все бы было хорошо кроме как если спел действует 1 сек, то кастер еще 2 секунды кастует канал... В код спела добавил по окончании всех действий call IssueImmediateOrder( caster, "stop" ) Но результат нулевой, юнит как кастовал так и кастует... Почему не подходит эта функция? или я неправильно настроил сам канал? З.Ы. Даже пробовал тупо двигать юнита что бы сбить каст, все равно он кастует канал... Канал не отменить)
|
|
|
|
DarkVader | Дата: Пятница, 22 Октября 2010, 02:27:45 | Сообщение # 3 |
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
| Quote (|san9|) Канал не отменить) тогда может вместо канала длительностью 3 сек. юзать канал 0.01 сек и паузить юнита потом играть на нем анимацию chanel, а как каст заканчивается возвращать норму?
|
|
|
|
FkoFF | Дата: Пятница, 22 Октября 2010, 04:45:39 | Сообщение # 4 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (DarkVader) тогда может вместо канала длительностью 3 сек. юзать канал 0.01 сек и паузить юнита потом играть на нем анимацию chanel, а как каст заканчивается возвращать норму? юнита можно даже не паузить, а просто ежесекундно запрещать текущее действие через ордер и заставлять проигрывать анимацию "channel"
|
|
|
|
DarkVader | Дата: Пятница, 22 Октября 2010, 05:48:41 | Сообщение # 5 |
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
| FkoFF и [san9] спасибо большое вопрос номер 2 решен=)) А по первому вопросу тишина=))) Ладно буду ждать=) И попутно задам еще вопрос, тупой канешь но... Почему у меня на дамми юнитах не отображаются эффекты созданные по той же функции, у дамми нет способности москиты а только нейтральный...
|
|
|
|
[san9] | Дата: Пятница, 22 Октября 2010, 08:04:58 | Сообщение # 6 |
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
| Quote (DarkVader) А по первому вопросу тишина=))) Ладно буду ждать=) Quote (|san9|) local effect e = AddSpecialEffectTarget( "путь", unit, "chest") ------------------- call DestroyEffect(e) set e = null
|
|
|
|
DarkVader | Дата: Пятница, 22 Октября 2010, 15:37:31 | Сообщение # 7 |
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
| Quote (|san9|) local effect e = AddSpecialEffectTarget( "путь", unit, "chest") Ну мне нужна повторяющаяся функция в которой будет фигурировать лишь один спец эффект такой код будет норм работать? Code
function Trig_Action takes nothing returns nothing
local effect e = LoadEffectHandle( udg_HASH, parentKey, childKey)
if ( условие1 ) then set e = AddSpecialEffectTarget( "путь", unit, "chest") call SaveEffectHandle( udg_HASH, parentKey, childKey, e) set e = null endif
if ( условие2 ) then call DestroyEffect(e) call FlushChildHashtable( udg_HASH, parentKey) set e = null endif
endfunction То есть, функция в ходе действия триггера выполняется два раза, первый раз выполняется условие1 и создается спец эффект, а второй раз выполняется условие2 и спецэффект удаляется... если напишу так у мну норм получится?=)
|
|
|
|
Banzay89 | Дата: Пятница, 22 Октября 2010, 18:16:52 | Сообщение # 8 |
9 уровень
Группа: Проверенные
Сообщений: 858
Награды: 1
Репутация: 77
Блокировки:
| call DestroyEffect(AddSpecialEffectTarget(modelName, targetWidget, attachPointName)) - делаем правильно!!!!! Если нужно дать эффект юниту на время, то лучше сделать абилу на основе сферы и на нужный аттач вцепить нужный эффект. Потом триггерно давать / отнимать абилу. Все
|
|
|
|
DarkVader | Дата: Суббота, 23 Октября 2010, 00:06:03 | Сообщение # 9 |
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
| Quote (Banzay89) call DestroyEffect(AddSpecialEffectTarget(modelName, targetWidget, attachPointName)) - делаем правильно!!!!! не совсем понимаю смысл этой строки, разве он не будет сразу уничтожаться? мне нужно сохранить его в хэш, а потом выгрузить и уничтожить.
|
|
|
|
Banzay89 | Дата: Суббота, 23 Октября 2010, 00:22:10 | Сообщение # 10 |
9 уровень
Группа: Проверенные
Сообщений: 858
Награды: 1
Репутация: 77
Блокировки:
| DarkVader, анимация эффекта проиграеться от начала до конца (зависит только от модели эффекта). Quote мне нужно сохранить его в хэш, а потом выгрузить и уничтожить. Не знаю почему, но с этим иногда возникают проблемы Quote Если нужно дать эффект юниту на время, то лучше сделать абилу на основе сферы и на нужный аттач вцепить нужный эффект. Потом триггерно давать / отнимать абилу. Это 100% работает Добавлено (23-10-2010, 00:22) ---------------------------------------------
Code function Trig_Action takes nothing returns nothing
local effect e = LoadEffectHandle( udg_HASH, parentKey, childKey)
if ( условие1 ) then set e = AddSpecialEffectTarget( "путь", unit, "chest") call SaveEffectHandle( udg_HASH, parentKey, childKey, e) set e = null endif
if ( условие2 ) then call DestroyEffect(e) call FlushChildHashtable( udg_HASH, parentKey) set e = null endif
endfunction Что за бред??? При старте функции ты выгружаеш уже сохраненный в хэш эффект (тоесть гдето ты его уже сохранял), а потом переписываеш локалку на новый эффект.. Оо А что со старым? А? А старый висит в памяти...что я могу сказать - бред
|
|
|
|
DarkVader | Дата: Суббота, 23 Октября 2010, 00:30:10 | Сообщение # 11 |
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
| Quote (Banzay89) Не знаю почему, но с этим иногда возникают проблемы Жаль, а то я активно юзаю хэш, но проблема только с эффектами, при том таже самая молния по этому принципу работает нормально... Quote (Banzay89) Это 100% работает Кстати я наблюдал баг с эффектом на основе сферы, когда юнит атакует с таким эффектом он прыгает(эффект в смысле))), как от него избавиться?Добавлено (23-10-2010, 00:30) ---------------------------------------------
Quote (Banzay89) Что за бред??? При старте функции ты выгружаеш уже сохраненный в хэш эффект (тоесть гдето ты его уже сохранял), а потом переписываеш локалку на новый эффект.. Оо А что со старым? А? А старый висит в памяти...что я могу сказать - бред я выгружаю в локалку нулевое значение ( null ) при первом проходе функции, а потом при втором проходе уже выгружается сам созданный эффект сохраненный при создании в ту же ячейку call SaveEffectHandle( udg_HASH, parentKey, childKey, e)
|
|
|
|
rixt7956 | Дата: Суббота, 23 Октября 2010, 00:30:10 | Сообщение # 12 |
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
| Ницего не прыгает,посмотри как сделано в моей статье
|
|
|
|
Banzay89 | Дата: Суббота, 23 Октября 2010, 00:32:19 | Сообщение # 13 |
9 уровень
Группа: Проверенные
Сообщений: 858
Награды: 1
Репутация: 77
Блокировки:
| Quote Жаль, а то я активно юзаю хэш, но проблема только с эффектами, при том таже самая молния по этому принципу работает нормально... Я тоже им всегда пользовался - хорошая вещь! =) И у меня тоже были проблемы с эффектами... делал так, что теоретически работать должно было 100%... но... Quote Кстати я наблюдал баг с эффектом на основе сферы, когда юнит атакует с таким эффектом он прыгает(эффект в смысле))), как от него избавиться? Я такого не замечал.. О.О Добавлено (23-10-2010, 00:32) ---------------------------------------------
Quote я выгружаю в локалку нулевое значение ( null ) при первом проходе функции, а потом при втором проходе уже выгружается сам созданный эффект сохраненный при создании в ту же ячейку Зачем тогда это делать вообще??? Я имею в виду сохранять в хэш пустое место??? Оо Тогда local effect e и все. Или я чтото не доганяю?
|
|
|
|
DarkVader | Дата: Суббота, 23 Октября 2010, 00:33:04 | Сообщение # 14 |
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
| Quote (Banzay89) Что за бред??? При старте функции ты выгружаеш уже сохраненный в хэш эффект (тоесть гдето ты его уже сохранял), а потом переписываеш локалку на новый эффект.. Оо А что со старым? А? А старый висит в памяти...что я могу сказать - бред я выгружаю в локалку нулевое значение ( null ) при первом проходе функции, а потом при втором проходе уже выгружается сам созданный эффект сохраненный при создании в ту же ячейку call SaveEffectHandle( udg_HASH, parentKey, childKey, e)
|
|
|
|
Banzay89 | Дата: Суббота, 23 Октября 2010, 00:33:11 | Сообщение # 15 |
9 уровень
Группа: Проверенные
Сообщений: 858
Награды: 1
Репутация: 77
Блокировки:
| Ну то ладно, смотри как тебе лучше)
|
|
|
|
DarkVader | Дата: Суббота, 23 Октября 2010, 00:41:40 | Сообщение # 16 |
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
| Quote (Banzay89) Зачем тогда это делать вообще??? Я имею в виду сохранять в хэш пустое место??? Оо Тогда local effect e и все. Или я чтото не доганяю? Если не будет этой функции, то во втором проходе функции значение переменной е будет пустым и call DestroyEffect(e) ничего не удалит, да и самого эффекта может и не быть если не выполняется условие 1 в первый раз Добавлено (23-10-2010, 00:41) --------------------------------------------- а если не задать значение переменной перед ее использованием ( local effect e) то код будет ошибочным в call DestroyEffect(e)
|
|
|
|
[san9] | Дата: Суббота, 23 Октября 2010, 00:52:08 | Сообщение # 17 |
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
| DarkVader, Чё ты твариш? Какой нахрен хэш? Как у тебя не может удалятся? Code local effect e = AddSpecialEffectTarget( "путь", unit, "chest") ------------------- call DestroyEffect(e) set e = null Всё создаётся, и всё удаляется...
|
|
|
|
Banzay89 | Дата: Суббота, 23 Октября 2010, 01:11:21 | Сообщение # 18 |
9 уровень
Группа: Проверенные
Сообщений: 858
Награды: 1
Репутация: 77
Блокировки:
| [san9], теоретически все правильно, а практически не всегда работает
|
|
|
|
[san9] | Дата: Суббота, 23 Октября 2010, 01:14:21 | Сообщение # 19 |
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
| Quote (Banzay89) [san9], теоретически все правильно, а практически не всегда работает Как это может не работать? Сколько уже юзаю, неразу ошибок не видел. Тестил даже Поставил 100 героев и 50 героем создал спецэфект через секунду ещё 50, через 3 сек удалял спецэфекты у первых 50, через 1 сек ещё 50. И как это может не работать??
Сообщение отредактировал [san9] - Суббота, 23 Октября 2010, 01:14:33 |
|
|
|
DarkVader | Дата: Суббота, 23 Октября 2010, 01:15:31 | Сообщение # 20 |
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
| Quote (|san9|) Чё ты твариш? Какой нахрен хэш? Как у тебя не может удалятся? хэш нужен из за спецефичности триггера, я привел пример в общем а не конкретный, Code local effect e = AddSpecialEffectTarget( "путь", unit, "chest") ------------------- call DestroyEffect(e) set e = null такого рода код не даст нужного эффекта
|
|
|
|
[san9] | Дата: Суббота, 23 Октября 2010, 01:19:14 | Сообщение # 21 |
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
| Quote (DarkVader) такого рода код не даст нужного эффекта А какой эффект тебе нужен?
Сообщение отредактировал [san9] - Суббота, 23 Октября 2010, 01:19:29 |
|
|
|
DarkVader | Дата: Суббота, 23 Октября 2010, 16:47:37 | Сообщение # 22 |
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
| Quote (|san9|) Как это может не работать? Сколько уже юзаю, неразу ошибок не видел. Тестил даже Поставил 100 героев и 50 героем создал спецэфект через секунду ещё 50, через 3 сек удалял спецэфекты у первых 50, через 1 сек ещё 50. И как это может не работать?? ну я сейчас не совсем могу затестить=) завтра проверю создание эффекта сразу в перменную ( set e = AddSpecialEffectTarget( "путь", unit, "chest") ) а потом сохранение или сразу сохранение... и если норм робит то вопрос решен=) Добавлено (23-10-2010, 01:25) ---------------------------------------------
Quote (|san9|) А какой эффект тебе нужен? нужно создать эффект на юните а через некоторое время удалить, но время может быть совершенно любым от 0.01 до 2 сек, для этого и юзаю хэш Добавлено (23-10-2010, 16:47) --------------------------------------------- усе вопрос решен, создал эффект сразу в переменную и заработало=))) Всем спасибо большое за участие!=)
|
|
|
|
|
|
|
|
|
|
|