Записи участника (TNT) - Форум


Правила форума ·

  • Страница 1 из 41
  • 1
  • 2
  • 3
  • 40
  • 41
  • »
Результаты поиска

TNT

#6 | Тема: Помощь новичкам
Собсвенно проект-наработка. В ней я решил показать превосходство и простоту джасс в отличии от гуи.

Сделано пока что только 3 пункта:

  • Bash - система для отбрасывания юнита осле использования на него способности "Молот бурь"
  • Easy AoS - упрощение инициализации движения юнитов в картах типа АоС, Аттак, ТД, Дефенс и ХД
  • Effect Size - функция для создания спецеффекта и мгновенного присвоения ему заданного размера.

    Работа ведётся в медленном темпе, ибо я работаю один, но всё же ведётся.

  • vk.com/t_n_t

    TNT

    #7 | Тема: [МУЗЫКА] ДДТ
    Охрененная группа. Не стал выкладывать линк на описание, ибо и так все знают.
    Офигеваю от стиля пения Шевчука. Особенно в песне "Родина" и "Ветер".
    vk.com/t_n_t

    TNT

    #8 | Тема: Системы программирования war3.exe
    Программирование в данном случае подразумивает управление процессами игры.

    JASS
    Jast Another Script System
    Собственно общая основа программирования в Редакторе Карт. Имеет полное управление над почти всеми процессами игры. Состоит, как и большинство програмных языков из функций и переменных. Native-функции (Зашитые в движок game.dll). Нативки вара записаны в файле common.j, но есть подозрение, что далеко не все. Если порыться в движке, можно ещё нарыть) BJ-функции - составлены из нативок, записаны в файле Blizzard.j. Даёт возможность составлять свои функции.
    В файле common.j так же объявлены все типы переменных. Переменные могут быть Глобальными - создаваемыми в коде карты и используемые в абсолютно любом триггере. Локальные - объявляются в первых строках триггеров, используются только в триггере-создателе.

    GUI
    JASS + оформление
    Собственно отличается от JASS своим оконным оформлением и кривопоставленностью програмной генерации кода. Удобен в использовании и так же неоптимален. Не даёт возможности работать со всеми типами переменных, так же порождает кучу ненужного кода, что делает его медленнее JASS. Собственно нежелательная форма программирования.

    JTG
    JASS to GUI
    Проект по добавлению функций в простые GUI-триггеры. Если проект наконец завершится, то это облегчит жизнь джассерам за счёт простоты генерации кода. Если повозиться с этим делом поглубже, то это станет полным замещенем джасс, хотя есть такие случаи, которые может решить только Jass. Так же этот проект поможет тратить меньше времени на оптимизацию кода.

    vk.com/t_n_t

    TNT

    #9 | Тема: Сохранение памяти
    Сохранение памяти

    Предисловие

    В этой статье я попытаюсь рассказать об всех недостатках програмной генерации кода для файла war3map.j. Как-то раз, открыв этот файл из простой милишки, я мягко говоря был в шоке. Спрашивается что же там такого шокирующего? Ответ прост: в скрипте море необнулённых переменных и гора нехороших вызовов функций. И в этой статье я расскажу как разгрести гору, затопив реку, и получить идеальную равнину.

    Массовое поражение

    Для уверенности хочу привести самый наглядный пример. Это функция, которая первой попалась мне на глаза:

    Code
    function CreateBuildingsForPlayer0 takes nothing returns nothing
    local player p = Player(0)
    local unit u
    local integer unitID
    local trigger t
    local real life

    set u = CreateUnit( p, 'hfoo', 576.0, 128.0, 270.000 )
    endfunction

    Ну так вот здесь масса нехороших моментов.
    1) Рассмотрим локальные переменные. В данном триггере они совсем не нужны!
    2) Мы можем спокойно воспользоваться напрямую функцией Player().
    3) Остальные просто не используются. Плюс ко всему переменная не обнуляется.
    4) Так же мы можем создать юнита простым действием CreateUnit().
    Таким образом мы получаем следующее:

    Code
    function [b]CreateBuildingsForPlayer0[/b] takes nothing returns nothing
    call CreateUnit( Player(0), 'hfoo', 576.0, 128.0, 270.000 )
    endfunction

    Теперь посчитаем во скользо раз я сократил использование памяти и места на винте)

    Высокая оптимальность

    Вышесказанный вариант тоже является не совсем правильным. Ведь можно напрямую заменить вызов "CreateBuildingsForPlayer0()" на то, что она вызывает. Впрочем это только потому что создаётся лишь один юнит для красного игрока.
    Но сейчас не об этом. Уделим внимание глобалкам и присвоению к ним значений. В каждом скрипте есть функция инициализации карты. Называется она main(). И в этой функции записан вызов "InitGlobals()". Стираем не задумываясь! Эта функция совершает присваивание значений глобальным переменным. Затем обязательно нужно будет найти эту функцию и стереть её из кода.

    Рассмотрим раздел globals.
    Там происходит объявление переменный и присваивание им нулевого значения. Дла дочерних от handle присваивается null, для строки "Пустая строка" (aka ""), для real и integer 0, для boolean false. И только переменных от типа code не объявляется там. Уже надоевшая функция InitGlobals() присваивала им уже пользовательские значения, вообще для отдельных типов значения по умолчанию задаются именно там) Например, диалоги, группы и ещё некоторые типы. Удалив InitGlobals(), нужно присвоить значения переменным прямо в блоке "globals"

    Функции

    Так же желательно снести все функции, вызывающиеся "InitCustomTriggers()" в "main()". Если вам важнее быстродействие, чем красота кода, то и вызовы функций с префиксом имени InitTrig_ надо снести в main(). Вообще так надо проделать со всеми функциями инициализации. Половина всего будет найдена вами в файле скрипта, некоторое же всё таки придётся искать в Blizzard.j. Такой функцией является InitBlizzard(), она делает несколько вызовов, которые в свою очередь тоже дела.т по несколько других вызовов. Если конечные вызовы снести в main(), то скорость загрузки карты заметно возрастёт, как и размер скрипта =\
    В имени функций нужно сохранять точнейший порядок, поэтому либо используйте неудобное копировать/вставить, либо сократить имена функций О.о

    Другие беды

    Иногда бывает что генерируется переменная из простого, создаваемого функцией, юнита или другого объекта, причём эта переменная в последствии не используется. Такое надо удалять из блока "globals". Скажу что после оптимизации скрипта карту лучше не открывать. Либо не откроется, либо просто перестроит код в изначальное положение... Замечу что тула векса впринципе делает только маленькую часть того, что можно сделать ручками. Если немного подумать, то можно состроить алгоритм суперзащиты карты лишь только за счёт war3map.j.

    Приятной вам практики)
    Сообщение отредактировал Sano - Вт, 29.01.08, 20:44
    vk.com/t_n_t
    • Страница 1 из 41
    • 1
    • 2
    • 3
    • 40
    • 41
    • »
    Поиск: