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