21-11-2024АХТУНГ!!! - ПЕРЕД ТЕМ КАК НАЧАТЬ ЧИТАТЬ СКАЧАЙТЕ ЭТО! Скачать программу для подсвечивания синтаксиса - JNGP Для начала разберём что такое Jass и GUI JASS - Just Another Scripting Syntax, событийно-ориентированный скриптовый язык программирования, созданный компанией Blizzard Entertainment (wiki), проще говоря язык программирования в WarCraft III. GUI - Graphical User Interface, графический интерфейс пользователя. Это триггеры, не переведенные в текст (wiki), тут уже некуда проще, всё понятно это триггеры которые мы любим клацать. А теперь следует вопрос, чем же различаются эти 2 языка? Давайте возьмем 2 карты на GUI и на JASS, что мы увидим через 30 минут игры в карту со 100 триггерами GUI - карта будет лагать, при касте скилов карта будет виснуть на 2-3 секунды. А теперь на JASS - карта будет стабильно работать. Почему? Потому-что в GUI мы используем глобальные переменные (udg) эти переменные с каждым использованием способности заносятся в переменную, которая не будет очищаться и будет всё больше и больше нагружать карту. Ну хотя можно обойтись и без них, но тогда эффект будет другой. Теперь мы немного разобрались чем плох GUI, перейдём к изучению Jass. Все GUI'шники,ленивые, считают что Jass это непостижимый скрипт доступный только богам! Но на самом деле всё куда проще! Давайте рассмотрим такую функцию. И на Jass И Нормальный вариант на Jass Чем они различаются? для того чтобы создать юнита в 1-ом и во 2-ом случае мы задействуем локацию, это уже не хорошо. И все BJ функции утечны. И все требуют своего раскрытия, в случае 3-ем мы раскрыли BJ и создали футмана на центре карты, для 1-ого игрока. Теперь перейдём к local(локальным переменным). Разберём чем же, так хороши эти локальные переменные. local задействуются только в ток триггере, в котором они написаны в других триггерах они будут недоступны. Они легко вызываются и так же легко удаляются из памяти. Давайте попробуем создать локального футмана в центре карты. Этот вариант создания футмана, но можно сделать чуточку проще. Таким образом мы сразу объявили local unit footman и объявление равно, созданию юнита на центре карты в поворотом 0, для красного игрока. Но теперь встаёт вопрос как-же создать несколько футманов? Копировать по много раз call CreateUnit()? Нет для этого у нас есть функция loop'а, рассмотрим как создать 3 футмана для красного игрока на центре карты. Рассмотрим по шагово: 1.local integer i = 0 это наша локальная i, она нужна нам для пересчёту юнитов, ну вы поняли. 2.loop Начала цыкла. 3.exitwhen i == 3 это наше условие выходи из loop'а 4.local unit footman = CreateUnit(Player(0),'hfoo',0,0,0) Всё понятно, создаём юнита. 5.set i = i + 1 устанавливаем нашу переменную i = i + 1, что-бы достичь значения i = 3, чтобы выйти из loop'a 6.endloop конец цыкла 7.set footman = null чтобы не нагружать память очищаем футмана. Теперь давайте рассмотрим событие и условие. set gg_trg_Test = CreateTrigger( ) - создаём триггер, gg_trg - триггер, _Test название. TriggerRegisterTimerEventSingle( gg_trg_Test, 1.00 ) - событие , прошла 1 секунда игры. call TriggerAddAction( gg_trg_Test, function Trig_Test_Actions ) - после того как прошла 1 сек. к нашему триггеру добавляться действие. call TriggerAddCondition( gg_trg_Test, function Trig_Test_Condition ) - что-бы наше действие началось выполняться должно пройти условие Рассмотрим условие. Наше условие берёт нечего, но возвращает boolean - наше условие. return GetUnit.... и т.д условие сейчас у нас нету условия. Сейчас я научу вас конвертировать GUI в Jass, и просматривать как раскрыть BJ функцию для изучения. Это наша способность на GUI Теперь переводим её в Jass После перевода мы видим Это не оптимизированный вариант и без локальных переменных, что делаем, создаём 2 локальных переменных и делаем нормальное условие. Теперь как же нам раскрыть call IssueTargetOrderBJ( GetTriggerUnit(), "attack", GetSpellTargetUnit() ), ведь это BJ функия, она утечна, делаем следующее, копируем IssueTargetOrderBJ (только это!!!) жмём на function list, вставляем IssueTargetOrderBJ, видим следующее копируем IssueTargetOrder( whichUnit, order, targetWidget ) - теперь разберём IssueTargetOrder( наш юнит, 'приказ', цель ) IssueTargetOrder(u,"attack",t), получаем раскрытую BJ, не утечную что немало важно, функцию. После чего обнуляем все переменные set u = null и set t = null Сейчас мы создали триггер после применения молота бурь наш юнит побежит атаковать цель. Так же мы можем заменить название локальной переменной u на caster например или на любое другое хоть на pedobir разницы нету. Теперь вы можете поэкспериментировать и попрактиковаться Jass. Удачи! © tRu.Style для wc3-maps.ru
|