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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Волна силы на Jass
Волна силы на Jass
RaiN_SДата: Среда, 12 Сентября 2012, 11:33:26 | Сообщение # 1
6 уровень
Группа: Проверенные
Сообщений: 163
Награды: 0
Репутация: 77
Блокировки:
Не получается сделать способность, действующую по линии. Пытаюсь сделать MUI, используя hash. Проблема в функциях условия для GetUnitsInRangeOfLocMatching, где нужно выбрать юнита, являющегося врагом кастера и т.п. Нашел пару ссылок с примерами, но там везде "Файл удален". Может кто-нибудь разместить рабочую ссылку с примером?
Спасибо.


 

NaturekidДата: Среда, 12 Сентября 2012, 11:38:31 | Сообщение # 2
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Ты бы сказал, что именно хочешь сделать. Я б нмаутил на ГУИ и конвертировал в текст. :D

 

RaiN_SДата: Среда, 12 Сентября 2012, 11:44:28 | Сообщение # 3
6 уровень
Группа: Проверенные
Сообщений: 163
Награды: 0
Репутация: 77
Блокировки:
На ГУИ я и сам могу. Но тогда будет не мультиспелл. :(

Добавлено (12 Сентября 2012, 11:43:54)
---------------------------------------------
А так мне нужно, чтобы просто урон наносился так же, как и в способности "Волна силы".

Добавлено (12 Сентября 2012, 11:44:28)
---------------------------------------------
С остальным там уже проще будет, думаю, что сам разберусь.


 

NaturekidДата: Среда, 12 Сентября 2012, 11:54:43 | Сообщение # 4
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Quote (RaiN_S)
Но тогда будет не мультиспелл

пфф. с чего это стиль написания (ГУИ/Джасс) влияет на то МУИ или не МУИ заклинание???


 

RaiN_SДата: Среда, 12 Сентября 2012, 13:23:03 | Сообщение # 5
6 уровень
Группа: Проверенные
Сообщений: 163
Награды: 0
Репутация: 77
Блокировки:
Quote (Naturekid)
пфф. с чего это стиль написания (ГУИ/Джасс) влияет на то МУИ или не МУИ заклинание???

Не влияет, я имею в виду, что не смогу на GUI сделать все компактно без кучи глобальных переменных и без использования массивов. Я предполагаю, что Jass - более короткий способ (может это и не так). А так как последнее время потихоньку учу Jass, мне нужно знать как это будет выглядеть именно на Jass.




Сообщение отредактировал RaiN_S - Среда, 12 Сентября 2012, 16:01:58
 

lawsonДата: Среда, 12 Сентября 2012, 13:26:43 | Сообщение # 6
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (RaiN_S)
Jass - более короткий способ

!!!!
Quote (RaiN_S)
мне нужно знать как это будет выглядеть именно на Jass.

Если я понял что тыхочешь, то даешь даммику эффект волны силы, запускаешь его от героя, пикаешь всех юнитов рядом от даммика и наносишь урон, потом после н'ых секунд удаляешь даммика.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

[SeKtOR]Дата: Среда, 12 Сентября 2012, 15:02:04 | Сообщение # 7
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
Code
globals     
           hashtable udg_Hash = InitHashtable()     
endglobals     

define     
           SPELL_RAWCODE = 'A000'     
           SPELL_DUMMY = 'ewsp'     
           SPELL_JUMPS = 81
enddefine     

function Spell_Conditions takes nothing returns boolean     
           return GetSpellAbilityId() == SPELL_RAWCODE     
endfunction     

function Spell_Expired takes nothing returns nothing
           local unit f     
           if(LoadInteger(udg_Hash, GetHandleId(GetExpiredTimer()), 3) == SPELL_JUMPS) then
           call DestroyGroup(LoadGroupHandle(udg_Hash, GetHandleId(GetExpiredTimer()), 2))
           call FlushChildHashtable(udg_Hash, GetHandleId(GetExpiredTimer()))     
           call DestroyTimer(GetExpiredTimer())     
           else     
           call SetUnitPosition(u, GetUnitX(LoadUnitHandle(udg_Hash, GetHandleId(GetExpiredTimer()), 1)) + 10. * Cos(GetUnitFacing(LoadUnitHandle(udg_Hash, GetHandleId(GetExpiredTimer()), 1)) * bj_DEGTORAD), GetUnitY(LoadUnitHandle(udg_Hash, GetHandleId(GetExpiredTimer()), 1)) + 10. * Sin(GetUnitFacing(LoadUnitHandle(udg_Hash, GetHandleId(GetExpiredTimer()), 1)) * bj_DEGTORAD))     
           call GroupEnumUnitsInRange(LoadGroupHandle(udg_Hash, GetHandleId(GetExpiredTimer()), 2), GetUnitX(LoadUnitHandle(udg_Hash, GetHandleId(GetExpiredTimer()), 1)), GetUnitY(LoadUnitHandle(udg_Hash, GetHandleId(GetExpiredTimer()), 1)), 120., null)     
           call SaveInteger(udg_Hash, GetHandleId(GetExpiredTimer()), 3, LoadInteger(udg_Hash, GetHandleId(GetExpiredTimer()), 3) + 1)     
           loop     
           set f = FirstOfGroup(g)     
           exitwhen f == null     
           if(IsPlayerEnemy(GetOwningPlayer(LoadUnitHandle(udg_Hash, GetHandleId(GetExpiredTimer()), 1)), GetOwningPlayer(f)) and GetWidgetLife(f) > 0.405 and not IsUnitType(f, UNIT_TYPE_STRUCTURE) and not IsUnitType(f, UNIT_TYPE_FLYING)) then     
           call UnitDamageTarget(LoadUnitHandle(udg_Hash, GetHandleId(GetExpiredTimer()), 1), f, 500., true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, null)     
           endif     
           call GroupRemoveUnit(LoadGroupHandle(udg_Hash, GetHandleId(GetExpiredTimer()), 2), f)     
           endloop     
           endif
           set f = null     
endfunction     

function Spell_Actions takes nothing returns nothing     
           local unit u = CreateUnit(GetOwningPlayer(GetTriggerUnit()), SPELL_DUMMY, GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()), 0.)     
           local timer t = CreateTimer()     
           call SetUnitPathing(u, false)     
           call SetUnitFacing(u, GetUnitFacing(GetTriggerUnit()))     
           call TimerStart(t, .05, true, function Spell_Expired)     
           call SaveUnitHandle(udg_Hash, GetHandleId(t), 1, u)     
           call SaveGroupHandle(udg_Hash, GetHandleId(t), 2, CreateGroup())
           set t = null     
           set u = null     
endfunction     

//===========================================================================     
function InitTrig_Spell takes nothing returns nothing     
           local unit u = CreateUnit(Player(0), SPELL_DUMMY, 0., 0., 0.)     
           call UnitAddAbility(u, SPELL_RAWCODE)     
           call RemoveUnit(u)     
           set u = null     
           set gg_trg_Spell = CreateTrigger()     
           call TriggerRegisterAnyUnitEventBJ(gg_trg_Spell, EVENT_PLAYER_UNIT_SPELL_EFFECT)     
           call TriggerAddCondition(gg_trg_Spell, Condition(function Spell_Conditions))     
           call TriggerAddAction(gg_trg_Spell, function Spell_Actions)     
endfunction

Писалось на скорую руку, vJass вариант от Hexing
P.S. Нужен JNGP
P.S.S. Не используй точки, если ты не используеш Z координату это уменьшит нагрузку и повысит быстродействие кода...




Сообщение отредактировал [SeKtOR] - Среда, 12 Сентября 2012, 15:23:41
 

SirNikolasДата: Среда, 12 Сентября 2012, 15:33:12 | Сообщение # 8
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
60-41604

 

HexingДата: Среда, 12 Сентября 2012, 15:40:40 | Сообщение # 9
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Quote (|SeKtOR|)
define     
           SPELL_RAWCODE = 'A000'     
           SPELL_DUMMY = 'ewsp'     
           SPELL_JUMPS = 81
enddefine  

уж будь добр,
Code
private SPELL_RAWCODE = 'A000'      
private SPELL_DUMMY = 'ewsp'      
private SPELL_JUMPS = 81

, предварительно завернув всё в
Code
scope MySpell
/* code */
endscope

Добавлено (12 Сентября 2012, 15:40:40)
---------------------------------------------
*то же относится и к функциям


 

RaiN_SДата: Среда, 12 Сентября 2012, 15:58:50 | Сообщение # 10
6 уровень
Группа: Проверенные
Сообщений: 163
Награды: 0
Репутация: 77
Блокировки:
Что значит GetWidgetLife(u) > 0.405 ?
Я так понял здесь проверяется жив юнит или нет, но что за число 0.405 ?
В чем преимущество точек с координатами (x, y) от точек с полярным смещением?
В остальном вроде разобрался, только я не через дамми делаю. Сейчас буду пробовать.

Добавлено (12 Сентября 2012, 15:58:50)
---------------------------------------------
Еще вопрос: bj_DEGTORAD что это?


 

NaturekidДата: Среда, 12 Сентября 2012, 16:02:42 | Сообщение # 11
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Quote (RaiN_S)
что за число 0.405

количество жизни юнита. Если меньше - значит мёртв.

Добавлено (12 Сентября 2012, 16:00:52)
---------------------------------------------

Quote (RaiN_S)
bj_DEGTORAD что это

degrees to radian

Добавлено (12 Сентября 2012, 16:01:14)
---------------------------------------------
градусы

Добавлено (12 Сентября 2012, 16:02:42)
---------------------------------------------
преобразование угла в число или числа в угол. Не берусь утверждать. crazy


 

[SeKtOR]Дата: Среда, 12 Сентября 2012, 16:08:19 | Сообщение # 12
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
Тем, что памяти больше свободной по сравнению с точками и координаты не надо удалять, тем самым код работает быстрее

Добавлено (12 Сентября 2012, 16:08:19)
---------------------------------------------

Quote (|SeKtOR|)
Что значит GetWidgetLife(u) > 0.405 ?

Это минимальное количество жизней юнита, потому что он умирает не когда у него 0 хп, а когда у него 0.405


 

HexingДата: Среда, 12 Сентября 2012, 16:11:57 | Сообщение # 13
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Quote (RaiN_S)
bj_DEGTORAD

константа типа real, при умножении на которое, можно преобразовать значение из градусов в радианы.
градусы варьируются от 0 до 360, а радианы от 0 до 2Pi(~6.28), SetUnitFacing() берёт градусы как угол, а Sin и Cos - радианы, чем думали это близзарды, один бог ведает
Quote (RaiN_S)
Что значит GetWidgetLife(u) > 0.405 ?

так уж устроен движок, что юнит умирает, когда его здоровье меньше или равно 0.405, а не 0, GetUnitState вернёт 0, но GetWidgetLife работает быстрее
Quote (RaiN_S)
В остальном вроде разобрался, только я не через дамми делаю. Сейчас буду пробовать.

без дамми никак, ты эффект не повернёшь

Добавлено (12 Сентября 2012, 16:11:28)
---------------------------------------------
на счёт полярок - там куча утечек(игра начнёт лагать через время), да и это в ряде случае медленнее, хотя в сложных задачах полярки легче для восприятия(разумеется не BJ-шные, а самописные безутечные)
ну и тут быстрее использовать 2 реальных, так как угол не меняется(посчитать скорость один раз)

Добавлено (12 Сентября 2012, 16:11:57)
---------------------------------------------
[SeKtOR], статусоплагиат <_<

Quote (Hexing)
ну и тут быстрее использовать 2 реальных, так как угол не меняется(посчитать скорость один раз)

что и сделано в моей нарабе


 

[SeKtOR]Дата: Среда, 12 Сентября 2012, 16:21:23 | Сообщение # 14
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
Quote (Hexing)
[SeKtOR], статусоплагиат

buba


 

RaiN_SДата: Среда, 12 Сентября 2012, 16:59:39 | Сообщение # 15
6 уровень
Группа: Проверенные
Сообщений: 163
Награды: 0
Репутация: 77
Блокировки:
Блин. Вроде все нормально сделал, но почему-то урон наносится многократно:

Не судите строго, я совсем недавно начал разбираться с Jass. :)




Сообщение отредактировал RaiN_S - Среда, 12 Сентября 2012, 17:00:42
 

HexingДата: Среда, 12 Сентября 2012, 17:17:31 | Сообщение # 16
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
RaiN_S, используй одну из уже названных наработок, или тебе важно сделать самому? локации(точки) очень медленные, используй x/y, на счёт многократного урона - поменяй условие на n > 25, я вообще не понимаю как твой код работает

 

DragoNДата: Среда, 12 Сентября 2012, 17:23:11 | Сообщение # 17
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
локации - зло, за исключением случая когда нужно найти координату Z конкретной точки, используйте координаты
насколько я понял часть кода скопирована, часть самодельная-сконвертированная с гуи
прочитайте про BJ функции
ну и перебор группы циклом - это, конечно, пушка


El Psy Congroo
 

HexingДата: Среда, 12 Сентября 2012, 17:30:31 | Сообщение # 18
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Quote (DragoN)
ну и перебор группы циклом - это, конечно, пушка

либо это ирония, либо бесполезное замечание, так как все знают что это лучше так как не нужно лишнее условие, из минусов - возможность переполнения стека

Добавлено (12 Сентября 2012, 17:30:31)
---------------------------------------------
RaiN_S, на счёт n я погорячился, и всётаки пиши на основе норм наработки, или уж сам с нуля, ты же даже не понимаешь что тут происходит, не так ли?


 

ExtrematorДата: Среда, 12 Сентября 2012, 17:33:49 | Сообщение # 19
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
Quote (RaiN_S)
Проблема в функциях условия для GetUnitsInRangeOfLocMatching, где нужно выбрать юнита, являющегося врагом кастера и т.п.

zomba могу на гуях показать - клик
 

RaiN_SДата: Среда, 12 Сентября 2012, 17:42:20 | Сообщение # 20
6 уровень
Группа: Проверенные
Сообщений: 163
Награды: 0
Репутация: 77
Блокировки:
Quote (DragoN)
локации - зло, за исключением случая когда нужно найти координату Z конкретной точки, используйте координаты

С этим позже разберусь. Сейчас главное, чтобы работало.
Quote (DragoN)
насколько я понял часть кода скопирована

Quote (DragoN)
ну и перебор группы циклом - это, конечно, пушка

:D Как раз перебор группы циклом и скопировано, а остальное сам лепил. :)
Quote (DragoN)
часть самодельная-сконвертированная с гуи

Ну отдельными функциями как-бы. Во всех статьях про Jass, которые я читал, написано:"Не знаете как выглядит нужная вам функция на Jass? Делайте в ГУИ и конвертируйте в текст."
Quote (DragoN)
прочитайте про BJ функции

Ок. Разберусь.
Quote (Hexing)
поменяй условие на n > 25

Он так сразу таймер останавливает.
Quote (Hexing)
я вообще не понимаю как твой код работает

Работает, проблема только в том, что урон наносится многократно, хотя юнита из gr1, прошедшего проверку и получившего урон я заношу в gr2 , при этом условие not IsUnitInGroup(u, gr2) прописано. Как это исправить? С остальным потом разберусь.

Добавлено (12 Сентября 2012, 17:42:20)
---------------------------------------------
Quote (Hexing)
даже не понимаешь что тут происходит, не так ли?

Если бы не понимал, не задавал бы конкретный вопрос. Я пытаюсь разобраться в своих ошибках, рано или поздно научусь. Сказал же, не судите строго, я только начал Jass разбирать.
Вот весь триггер, если что:




Сообщение отредактировал RaiN_S - Среда, 12 Сентября 2012, 17:58:03
 

DragoNДата: Среда, 12 Сентября 2012, 17:58:44 | Сообщение # 21
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
Quote (Hexing)

либо это ирония, либо бесполезное замечание, так как все знают что это лучше так как не нужно лишнее условие, из минусов - возможность переполнения стека

пункт про перебор юнитов
но это офк дело хозяйское
Quote (RaiN_S)
Во всех статьях про Jass, которые я читал, написано:"Не знаете как выглядит нужная вам функция на Jass? Делайте в ГУИ и конвертируйте в текс

а теперь прочитай про bj и пойми свои косяки


El Psy Congroo
 

SirNikolasДата: Среда, 12 Сентября 2012, 18:10:50 | Сообщение # 22
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (DragoN)
пункт про перебор юнитов
Советы полезные, кроме пункта про перебор. На Хайве скорость замеряли - GroupLoop самый быстрый.


 

NaturekidДата: Среда, 12 Сентября 2012, 18:13:51 | Сообщение # 23
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Quote (SirNikolas)
GroupLoop самый быстрый.

What about GUI? dunno


 

DragoNДата: Среда, 12 Сентября 2012, 18:24:27 | Сообщение # 24
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
Quote (SirNikolas)
На Хайве скорость замеряли - GroupLoop самый быстрый.

ну тогда приношу свои извинения, не смотрел результаты тестов(линк бы желательно)


El Psy Congroo
 

NaturekidДата: Среда, 12 Сентября 2012, 18:39:32 | Сообщение # 25
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
что из этого получится если накатать аналогичное в гуи??

Добавлено (12 Сентября 2012, 18:39:32)
---------------------------------------------
ок, конкретизирую адресата вопроса - SirNikolas, отвечайте. ;)
То что гуи медленне это ясно, что именно из перечисленного в теме получится при конвертации гуишного кода? И насколько медленно?
Желательно словами описать как проверять зрительно скорость обработки.


 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Волна силы на Jass
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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