Add Effect Timed Life

Добавлен , не публикуется

Создание спецэффектов на время

что даёт сие чудо?
Данная библиотека позволяет создавать спецэффекты на определённое время, не волнуясь об утечках и читаемости кода.
Как работает
Данная библиотека позволяет нам использовать 3 новые функции:
  • AddSpecialEffectTargetToTimed
Создаёт спецэффект на объекте (widget), в течении некоторого времени timeout а затем удаляет...
Указываем путь к спецэффекту, юнита цель, точку крепления модели эффекта и время жизни спецэффекта...
function AddSpecialEffectTargetToTimed takes string path, widget targetWidget, string attachPointName, real timeout returns nothing
  • AddSpecialEffectToTimed
Создаёт спецэффект в указанных координатах x,y на некоторое время timeout
Указываем путь к спецэффекту, координату X, координату Y, и время жизни спецэффекта.
function AddSpecialEffectToTimed takes string path, real x, real y, real timeout returns nothing
  • AddSpecialEffectZtoTimed
Создаёт спецэффект в указанных координатах x,y и высоте z на некоторое время timeout
Указываем путь к спецэффекту, координату X, координату Y, высоту z и время жизни спецэффекта.
function AddSpecialEffectZtoTimed takes string path, real x, real y, real z, real timeout returns nothing
  • Необязательно, но тем не менее важно:
Чтобы найти высоту летающего юнита добавлена функция GetUnitZ(), и переменная bj_HeightFactor, функция находит высоту уровня ног модели юнита а не головы или груди... Так что изменяя bj_HeightFactor можно добиться нахождения нужной высоты, эквивалентной точки "chest" наземных юниов подходит bj_HeightFactor = 40.00, ''head'' 60...
а зачем её юзать?
  • Данная библиотека не использует локальные переменные, а это повышение производительности...
  • Данная библиотека не вызывает утечек, так что вы всегда будите уверены что у вас удалятся все ненужные спецэффекты...
  • Данная библиотека экономит время, и сокращает время картодела и конечный код...
код библиотеки
library EffectsTimedLife initializer InitHash
    //==================================================
    // Автор quq_CCCP Сделано для сайта XGM.ru                                             
    // Одна из функций взята с барахолки (AddSpecialEffectZ, Автор - bee )       
    // Копируем в и юзаем AddSpecialEffectTargetToTimed, и 2 другие функции  
    //==================================================
    globals
        // обьявление вспомогательных переменных, нужных для работы системы (лучше не трогать)
        private timer bj_effectTimer
        private integer bj_effectTimerId
        private destructable bj_auxDestructable
        private location bj_AdditionalPoint = Location( 0.00, 0.00 )
        private real bj_HeightFactor = 45.00 //базовая высота юнита над рельефом, можно задать на своё усмотрение.
        private hashtable bj_Hash
    endglobals
    
    private function InitHash takes nothing returns nothing
        set bj_Hash = InitHashtable( )
    endfunction
    
    private function DestroyEffectToTimed takes nothing returns nothing // удаление спецэффекта.
        set bj_effectTimer = GetExpiredTimer( )
        set bj_effectTimerId = GetHandleId( bj_effectTimer )
        call DestroyTimer( bj_effectTimer )
        call DestroyEffect( LoadEffectHandle( bj_Hash, bj_effectTimerId, 0 ) )
        call FlushChildHashtable( bj_Hash, bj_effectTimerId )
    endfunction
  
    function GetUnitZ takes unit whithUnit returns real // функция возвращающая высоту юнита
        call MoveLocation( bj_AdditionalPoint, GetUnitX(whithUnit), GetUnitY( whithUnit ) )
        return GetLocationZ( bj_AdditionalPoint ) + bj_HeightFactor + GetUnitFlyHeight( whithUnit )
    endfunction
    
    function AddSpecialEffectTargetToTimed takes string path, widget targetWidget, string attachPointName, real timeout returns nothing // создаёт спецэффект на указанном юните.
        set bj_effectTimer = CreateTimer( )
        call SaveEffectHandle( bj_Hash, GetHandleId( bj_effectTimer ), 0, AddSpecialEffectTarget( path, targetWidget, attachPointName ) )
        call TimerStart( bj_effectTimer, timeout, false, function DestroyEffectToTimed )
    endfunction
    
    function AddSpecialEffectToTimed takes string path, real x, real y, real timeout returns nothing // создаёт спецэффект в указанных координатах
        set bj_effectTimer = CreateTimer( )
        call SaveEffectHandle( bj_Hash, GetHandleId( bj_effectTimer ), 0, AddSpecialEffect( path, x, y ) )
        call TimerStart( bj_effectTimer, timeout, false, function DestroyEffectToTimed )
    endfunction
    
    function AddSpecialEffectZtoTimed takes string path, real x, real y, real z, real timeout returns nothing // создаёт спецэффект в казаннх координатах и на некоторой высоте Z.
        set bj_auxDestructable = CreateDestructableZ( 'OTip', x, y, z, 0.00, 1, 0 )
        call AddSpecialEffectToTimed( path, x, y, timeout )
        call RemoveDestructable( bj_auxDestructable )
    endfunction
    
endlibrary
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
29
GetUnitZ тоже должна быть private, если не числится в API.
Но в общем-то, я придираюсь. Но лишь потому, что библиотека такого уровня(очень простая), должна быть идеальна.
32
Doc, здурел? GetUnitZ нужна нам для того чтобы создать спецэффект на высоте юнита, когда мы будем юзать AddSpecialEffectZtoTimed, и вводить фактор (если необходимо)...
Поэтому GetUnitZ не может быть приватной, ну не как, иначе как мы будем преломлять высоту юнита для AddSpecialEffectZtoTimed...
Насчёт без, хеш консткруций - Ты действительно думаеш что тут это оправдано? раздуть код более чем в двое чтобы выиграть пару мс,....?
Или тебе больше нечего противопоставить? (был бы человек, а статья обязательно найдётся.. И. Сталин)
29
Разве важен размер кода?
Мне всегда казалось, что важен результат. Впрочем, делай как знаешь, я уже сказал, почему придираюсь.
32
Doc, ну размер кода тоже важен, ибо его размер это доп вес карты и время загрузки, пусть небольшое но оно складывается из множества отдельных триггеров и систем, ну и TimerUtils отдельная библиотека, чтобы вишать на таймер структуру с 1 спецэффектом, самому то не кажется бредовость сего решения...?
Doc, а кстати чё там поправить? bj_ приставки убрать? (ну конечно, это же так принципиально в работе библиотеки) и переписать на без хеш конструкции?
Или есть еще какие то весомые аргументы против системы?
29
Никто не сказал, что нужны таймер утилс.
Было бы еще неплохо расставить комменты к функциям в самой системе. + Прокомментировать, что значит HeightFactor.
32
Doc, ок щяс поправлю, я еще хочу скинуть библиотеку Colors, суть проста как грабли, чтобы не использовать |cFF0000 GetPlayerName(Player(0)) lr + Has left from the game! а вызвать функцию которая берёт номер игрока и возвращает разукрашенное имя игрока, строку, юнита, окно таймера, ячейку мультиборда...
Doc, кстати, неужели обязательно использовать Структуру и вешать каждый эффект на 1 периодический таймер? Толку же будет 0, производительность не станет выше....
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.