Сейчас 11:33:16 Четверг, 28 марта, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Статья] Jass Spells
[Статья] Jass Spells
Brut@lusДата: Понедельник, 23 Апреля 2012, 17:46:18 | Сообщение # 1
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
Статья рассчитана на человека, достаточно знающего основы Jass.
В этой статье я хочу вам рассказать о jass спеллах, как они делаются, и какова их логика.


Давайте, рассмотрим заклинание blink, или "скачок". Для простых игроков, это просто спелл. Но, если мы вдумаемся, как он построен. Это не просто одна строчка кода вроде
Code
cast(blink)

Нееет, совсем нет. Что делает наш герой при касте спелла? Первое, он перемещается на точку указанную при касте и второе, воспроизводится спецэффект. Для реализации этого заклинания на Jass нам нужен спелл-пустышка, с кастом на точку. Начинающий Jass'ер, конечно же, для перемещения юнита написал бы что-то вроде того:
Code
call SetUnitPositionLoc( GetTriggerUnit(), GetSpellTargetLoc() )

Нет, друзья мои, это не верно. Локи, это конечно лучше регионов, но не айс. Исправляем всё это дело на X/Y:

Code
local real loc_x = GetSpellTargetX()
local real loc_y = GetSpellTargetY()
call SetUnitX(GetTriggerUnit(), loc_x)   
call SetUnitY(GetTriggerUnit(), loc_y)

Тааак, уже лучше. Займёмся спецэффектом. Путь его, как выяснилось - Abilities\\Spells\\NightElf\\Blink\\BlinkTarget.mdl. Добавим же его!
Code
call AddSpecialEffect("Abilities\\Spells\\NightElf\\Blink\\BlinkTarget.mdl", loc_x, loc_y)

Не пойдёт. Нам нужно ещё и удалять спецэффект, по этому это не хорошо. Изменяем немного:
Code
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\NightElf\\Blink\\BlinkTarget.mdl", loc_x, loc_y))

Прелестно. Как бы нам ещё тут подоформить... Пожалуй, можно в локалку занести юнита. Заносим. Получаем такой код:
Code

    local real loc_x = GetSpellTargetX()
    local real loc_y = GetSpellTargetY()
    call SetUnitX(GetTriggerUnit(), loc_x)
    call SetUnitY(GetTriggerUnit(), loc_y)
    call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\NightElf\\Blink\\BlinkTarget.mdl", loc_x, loc_y))   

Займёмся прочей начинкой триггера. Событие у нас, конечно, должно быть - каст спелла-пустышки. Подкорректируем нижнюю часть:
Code
function InitTrig_blinkspell takes nothing returns nothing
    set gg_trg_blinkspell = CreateTrigger( )
    call TriggerAddCondition( gg_trg_blinkspell, Condition( function blink_cond ) )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_blinkspell, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddAction( gg_trg_blinkspell, function blinkspell )
endfunction

Забыли мы тут только про условие. Вот оно:
Code
function blink_cond takes nothing returns boolean
    return GetSpellAbilityId() == 'A001'
endfunction

Здесь мы просто проверяем ID спелла. На выходе имеем вобщем такой триггер:



Разберём теперь пример спелла потрудней. Скажем, пусть это будет громовая поступь.


статью допишу, сейчас нету времени
Прикрепления: 2025236.jpg (110.1 Kb)


 

SirNikolasДата: Понедельник, 23 Апреля 2012, 18:56:04 | Сообщение # 2
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Brut@lus)
Пожалуй, можно в локалку занести юнита.
Если уж занес, то и обнулить надо. А вообще локалка не нужна, т. к. юнит используется один раз.


 

Brut@lusДата: Понедельник, 23 Апреля 2012, 19:13:48 | Сообщение # 3
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
SirNikolas, 2 раза

 

llkaДата: Понедельник, 23 Апреля 2012, 19:20:53 | Сообщение # 4
4 уровень
Группа: Пользователи
Сообщений: 88
Награды: 0
Репутация: 34
Блокировки:
Brut@lus, И в чем прикол статьи?
 

Brut@lusДата: Понедельник, 23 Апреля 2012, 20:05:02 | Сообщение # 5
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
Тут приколов нет, прикинь, да.


 

SirNikolasДата: Понедельник, 23 Апреля 2012, 20:14:08 | Сообщение # 6
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Просто я посмотрел на конечный код:
Code
local real loc_x = GetSpellTargetX()
local real loc_y = GetSpellTargetY()
local unit u = GetTriggerUnit()
call SetUnitX(u,loc_x)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\NightElf\\Blink\\BlinkTarget.mdl",loc_x,loc_y))
А в нем ты забыл установить Y, вот я и подумал, что один раз.


 

DragoNДата: Понедельник, 23 Апреля 2012, 21:33:52 | Сообщение # 7
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
про условие пишут вначале
и само условие лучше ставить выше
SirNikolas, почини код в статье(перемещение по Y припиши хотя бы :) )


El Psy Congroo


Сообщение отредактировал DragoN - Понедельник, 23 Апреля 2012, 21:34:24
 

DreiiДата: Понедельник, 23 Апреля 2012, 22:41:54 | Сообщение # 8
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
SetUnitPositionXY - имхо в данном случаее лучше.
Если юнит не вызываеться более 2-3 раз - заносить в переменную не нужно.


 

Ty3uKДата: Вторник, 24 Апреля 2012, 08:09:44 | Сообщение # 9
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
SetUnitX/Y без проверки координат это жесть. А если он у тебя за карту вылетит? Фатал будет же

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

llkaДата: Вторник, 24 Апреля 2012, 09:22:41 | Сообщение # 10
4 уровень
Группа: Пользователи
Сообщений: 88
Награды: 0
Репутация: 34
Блокировки:
Quote (Brut@lus)
Тут приколов нет, прикинь, да.

Понимаю
http://warcraft3ft.info/board/vjass_dlja_novichkov/19-1-0-1186
http://warcraft3ft.info/board/kak_optimizirovat_svoj_kod/19-1-0-1150
++ JASSфак от шмуоса.

Добавлено (24 Апрель 2012, 09:22:41)
---------------------------------------------

Quote (Ty3uK)
А если он у тебя за карту вылетит? Фатал будет же

Ты про условие мин, макс от координат карты?
 

Ty3uKДата: Вторник, 24 Апреля 2012, 09:26:06 | Сообщение # 11
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Ну да

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

HexingДата: Вторник, 24 Апреля 2012, 14:34:38 | Сообщение # 12
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
сыровато и коротковато, новичкам ничего нового не будет, это же элементарно, кто не догадается что при касте блинка мы тп? другое дело описать новичкам все jass функции, разбив их на категории, это было бы полезно(имхо)

 

oleg_best_olegДата: Вторник, 24 Апреля 2012, 15:06:19 | Сообщение # 13
Группа: Заблокированные
Сообщений: 1726
Награды: 0
Репутация: 654
Блокировки:
Кстати в способности "Скачок" не совсем так. Выбирается точка, можно выбрать в радиусе 99999 и герой приближается на нужную дистанцию, указанную в характеристиках способности, а не в точку применения способности.
 

Brut@lusДата: Четверг, 26 Апреля 2012, 17:31:25 | Сообщение # 14
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
Quote (oleg_best_oleg)
Выбирается точка

Quote (oleg_best_oleg)
точку применения способности

не одно и тоже?


 

oleg_best_olegДата: Четверг, 26 Апреля 2012, 17:39:37 | Сообщение # 15
Группа: Заблокированные
Сообщений: 1726
Награды: 0
Репутация: 654
Блокировки:
Quote (Brut@lus)
не одно и тоже?

Нет.
 

HexingДата: Четверг, 26 Апреля 2012, 19:42:51 | Сообщение # 16
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
угу, автор налажал.

 

Ty3uKДата: Четверг, 26 Апреля 2012, 20:06:09 | Сообщение # 17
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Первая статья про жасс, не судите строго. Но насчет точки Олег прав. Хотя это исправляется парочкой строк кода :)

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

BublGumДата: Суббота, 28 Апреля 2012, 11:05:26 | Сообщение # 18
5 уровень
Группа: Проверенные
Сообщений: 121
Награды: 0
Репутация: 25
Блокировки:
что за бредо спелл? :D
 

wetalqДата: Среда, 02 Мая 2012, 20:58:54 | Сообщение # 19
8 уровень
Группа: Проверенные
Сообщений: 550
Награды: 0
Репутация: 117
Блокировки:
с таким спелом можно залететь в текстуры, и вообще куда угодно.
а обычный блинк так не сделает

Quote (Brut@lus)
Разберём теперь пример спелла потрудней. Скажем, пусть это будет громовая поступь.


разве можно юнита триггерно оглушить ?
можно только молоты бурь роздать всем кто рядом
 

[DS]Дата: Четверг, 03 Мая 2012, 07:07:52 | Сообщение # 20
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
можно запаузить

 

Ty3uKДата: Четверг, 03 Мая 2012, 07:54:46 | Сообщение # 21
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Пауза и стан визуально отличаются- при паузе у юнита пропадают иконки активных спеллов, а при стане нет

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

HexingДата: Четверг, 03 Мая 2012, 11:26:14 | Сообщение # 22
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Quote (Ty3uK)
Пауза и стан визуально отличаются- при паузе у юнита пропадают иконки активных спеллов, а при стане нет

можно подменять юнитов, хотя геморно, проще триггерно кастовать стан-спелл


 

Ty3uKДата: Четверг, 03 Мая 2012, 11:46:37 | Сообщение # 23
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Офк, Холмс, вы как обычно правы :3

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

HexingДата: Четверг, 03 Мая 2012, 15:11:47 | Сообщение # 24
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Quote (Ty3uK)
Офк, Холмс, вы как обычно правы :3

скорее я как обычно говорю то, что всем известно, Ватсон. Где моя трубка?


 

Ty3uKДата: Четверг, 03 Мая 2012, 15:17:45 | Сообщение # 25
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:


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

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Статья] Jass Spells
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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